практическая работа по базам данных. Введение в ms sql server и tsql
Скачать 0.77 Mb.
|
Соединение таблиц с помощью команд INNER JOIN и LEFT/RIGHT/FULL OUTER JOINLEFTJOIN = INNERJOIN + Непревзойденные данные левой таблицы с нулевым совпадением на правой таблице. RIGHTJOIN = INNERJOIN + Непревзойденные данные правой таблицы с нулевым совпадением на левой таблице. FULL OUTER JOIN = INNERJOIN + Непревзойденные данные в правой и левой таблицах с нулевыми совпадениями. Выполнить запрос на внутреннее соединение таблиц с использованием команды INNER JOIN: Для явного соединения данных из двух таблиц применяется оператор JOIN. Общий формальный синтаксис применения оператора INNER JOIN: SELECT название_таблицы1.название_столбца1_таблицы1 ’название столбца’, название_таблицы2.название_столбца1_таблицы2 ’название столбца’, … FROM название_таблицы1 [INNER] JOIN название_таблицы2 ON условие1, [INNER] JOIN имя_таблицы3 ON условие2, … После оператора JOIN идет название второй таблицы, из которой надо добавить данные в выборку. Перед JOIN может использоваться необязательное ключевое слово INNER. Его наличие или отсутствие ни на что не влияет. Затем после ключевого слова ON указывается условие соединения. Это условие устанавливает, как две таблицы будут сравниваться. В большинстве случаев для соединения применяется первичный ключ главной таблицы и внешний ключ зависимой таблицы. 1. Выдать ФИО студента, его инстиут и группу, степень получаемого образования, а также статус студента в группе, используя соединения таблиц и соответствующие заполнение ниже, при условиях, что: - объединение таблиц происходит с помощью команды INNER JOIN, где его фамилия начинается на букву от А до О (используя LIKE), степень получаемого образования - "Бакалавриат" или "Магистратура" (Ученая степень.Код ученой степени либо 1, либо 2) - сначала "Староста", затем "Студент(ка)", используя оператор CASE - сортировка осуществляется последовательно по: - инстиуту в алфавитном порядке; - степени получаемого образования (сначала "Бакалавриат", затем "Магистратура"); - группе в алфавитном порядке; - статусу в группе; - ФИО в алфавитном порядке. SELECT название_таблицы1.название_столбца1_таблицы1 ’название столбца’, название_таблицы2.название_столбца1_таблицы2 ’название столбца’, … CASE WHEN название_таблицы.название_столбца = условие THEN 'значение' ELSE 'возвращаемое значение' END 'название столбца’ FROM название_таблицы1 INNER JOIN название_таблицы2 ON название_таблицы1.название_столбца1 = название_таблицы2.название_столбца1, INNER JOIN название_таблицы3 ON название_таблицы2.название_столбца3 = название_таблицы3.название_столбца3, … WHERE условие1, AND … ORDER BY 1 ASC/DESC (сортировка) 2 ASC (сортировка) … ; Выполнить запрос на внешнее соединение таблиц с использованием команды LEFT/RIGHT/FULL OUTER JOIN: В отличие от inner join внешнее соединение возвращает все строки одной или двух таблиц, которые участвуют в соединении. OUTER JOIN имеет следующий формальный синтаксис: SELECT название_таблицы1.название_столбца1_таблицы1 ’название столбца’, название_таблицы2.название_столбца1_таблицы2 ’название столбца’, … FROM название_таблицы1 {LEFT|RIGHT|FULL} [OUTER] JOIN таблица2 ON условие1 [{LEFT|RIGHT|FULL} [OUTER] JOIN таблица3 ON условие2] … Перед оператором JOIN указывается одно из ключевых слов LEFT, RIGHT или FULL, которые определяют тип соединения: LEFT: выборка будет содержать все строки из первой или левой таблицы RIGHT: выборка будет содержать все строки из второй или правой таблицы FULL: выборка будет содержать все строки из обоих таблиц Также перед оператором JOIN может указываться ключевое слово OUTER, но его применение необязательно. Далее после JOIN указывается присоединяемая таблица, а затем идет условие соединения. 2. Выдать ФИО преподавателя и название кафедра для проверки целостности данных в БД, используя соединения таблиц и соответствующие заполнение ниже, при условиях, что: - сортировка осуществляется последовательно по: - название кафедры по алфавиту SELECT название_таблицы1.название_столбца1_таблицы1 ’название столбца’, название_таблицы2.название_столбца1_таблицы2 ’название столбца’, … FROM название_таблицы1 {LEFT|RIGHT|FULL} [OUTER] JOIN название_таблицы2 ON название_таблицы1.название_столбца1 = название_таблицы2.название_столбца1, {LEFT|RIGHT|FULL} [OUTER] JOIN название_таблицы3 ON название_таблицы2.название_столбца3 = название_таблицы3.название_столбца3, … ORDER BY 1 ASC/DESC (сортировка) 2 ASC (сортировка) … ; Выполнить запрос на группировку таблиц с использованием команды GROUP BY и агрегатных функций: Перед выполнением запроса необходимо произвольно заполнить результаты студентов по Экзаменам в таблице Запись_в_ведомость, использую функцию «Изменить первые 200 строк». 3. Выдать фамилии студентов и сумму баллов за экзамены, используя группировку таблиц, агрегатные функции и соответствующие заполнение ниже, при условиях, что: - сортировка осуществляется последовательно по: - фамилия студентов по алфавиту SELECT название_таблицы1.название_столбца1_таблицы1 ’название столбца’, название_таблицы2.название_столбца1_таблицы2 ’название столбца’, агрегатная функция(названиея_таблицы1.название_столбца1_таблицы1) AS ‘название _столбца’ … FROM название_таблицы1 ТИП ОБЪЕДИНЕНИЯ название_таблицы2 ON название_таблицы1.название_столбца1 = название_таблицы2.название_столбца1, ТИП ОБЪЕДИНЕНИЯ название_таблицы3 ON название_таблицы2.название_столбца3 = название_таблицы3.название_столбца3, … GROUP BY название_таблицы.название_столбца(по которой будет проиходить группировка) ORDER BY 1 ASC/DESC (сортировка) 2 ASC (сортировка) … ; Чтобы проверить верна ли сумма за экзамены, сделайте запрос на внутреннее объединение таких таблиц, как: Фамилия студента Название предмета Экзамен 4.Выдать фамилии студентов и средний балл за экзамены, используя группировку таблиц, агрегатные функции и соответствующие заполнение ниже, при условиях, что: - сортировка осуществляется последовательно пофамилия студентов по алфавиту - в списке будут студенты, чей средний бал за экзамен больше 10 SELECT название_таблицы1.название_столбца1_таблицы1 ’название столбца’, название_таблицы2.название_столбца1_таблицы2 ’название столбца’, агрегатная функция(название_таблицы1.название_столбца1_таблицы1) AS ‘название столбца’… FROM название_таблицы1 ТИП ОБЪЕДИНЕНИЯ название_таблицы2 ON название_таблицы1.название_столбца1 = название_таблицы2.название_столбца1, ТИП ОБЪЕДИНЕНИЯ название_таблицы3 ON название_таблицы2.название_столбца3 = название_таблицы3.название_столбца3, … GROUP BY название_таблицы.название_столбца(по которой будет проиходить группировка) HAVING агрегатная функция(название_таблицы.название_столбца_таблицы) = условие ORDER BY 1 ASC/DESC (сортировка) 2 ASC (сортировка) … ; |