Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
SQL.doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
186 Кб
Скачать
☆

2.9.2Внешнее соединение

Согласно стандарту SQL-92, левое внешнее соединение (LEFT OUTER JOIN) позволяет включить в результат всю левую (первую) таблицу, правое внешнее соединение (RIGHT OUTER JION) – всю правую (второю) таблицу, а полное внешнее соединение (FULL OUTER JOIN) – все несовпадающие строки обеих таблиц.

Пример:

SELECT Табельный номер, Фамилия, Имя, Отчество, Размер премии FROM СП_СЛ LEFT OUTER JOIN ПР ON СП_СЛ.Табельный номер=ПР.Табельный номер

Список всех служащих с указанием размеров премий, получаемых ими, если служащий не получал ни разу премии, то размер его премии NULL.

2.9.3Операции над множествами (объединение, пересечение, разность)

Оператор UNION объединяет несколько результирующих наборов. По умолчанию в результат оператора UNION включены все строки исходных наборов, кроме повторяющихся. Повторяющиеся в наборах строки представлены в результирующем наборе одним экземпляром

Хотя каждый оператор SELECT может иметь собственное предложение WHERE, весь запрос может использовать только одно предложение ORDER BY. Оно должно располагаться в последнем операторе SELECT и применяться ко всему результату.

Пример:

Вычислить надбавку 15% от Оклада, если оклад меньше 5000 и 10% от Оклада, если оклад от 5000 до 7000.

SELECT Табельный номер, Оклад, 0,15*Оклад AS Надбавка FROM СП_СЛ WHERE Оклад<5000 UNION SELECT Табельный номер, Оклад, 0,1*Оклад AS Надбавка FROM СП_СЛ WHERE Оклад BETWEEN 5000 AND 7000 ORDER BY 1

Оператор INTERSECT возвращает все совпадающие строки исходных наборов

Пример:

Список однофамильцев в двух лабораториях 110 и 100

SELECT ФАМИЛИЯ FROM СП_СЛ WHERE Код лаборатории=’110’ INTERSECT SELECT ФАМИЛИЯ FROM СП_СЛ WHERE Код лаборатории=’100’

Оператор EXCEPT возвращает разность двух наборов, то есть в результат включаются только те строки первого набора, которых нет во втором наборе.

Пример:

Список специальностей различающихся в двух лабораториях 110 и 100

SELECT Код специальности FROM СП_СЛ WHERE Код лаборатории=’110’ EXCEPT SELECT Код специальности FROM СП_СЛ WHERE Код лаборатории=’100’

Целесообразность включения операторов INERTSECT и EXCEPT в реляционную модель долго обсуждалось, однако широкого распространения они так и не получили. Это объясняется тем, что тех же целей можно достичь другими средствами.

2.10Структурированные запросы и подзапросы

Язык SQL позволяет использовать один запрос в качестве вспомогательного при вычислении результатов другого. Запрос, служащий частью более «крупного» запроса, приято называть подзапросом. Степень взаимной вложенности запросов не ограничивается и может быть произвольной.

Подзапрос – дополнительный метод манипуляции с несколькими таблицами. Подзапросы возвращают результаты внутреннего запроса во внешнее предложение и имеют две основные формы: некоррелированную и коррелированную.

Некоррелированная форма реализуется «изнутри наружу», то есть внешний запрос выполняет то или иное действие на основе результатов выполнения внутреннего запроса.

Коррелированную форму подзапроса можно представить как обратное действие: внешний оператор SQL предоставляет значения для внутреннего подзапроса, которые будут использоваться при его выполнении.

Пример:

Список руководителей лабораторий

SELECT DISTINCT Табельный номер, Фамилия, Имя, Отчество FROM СП_СЛ WHERE (Табельный номер IN (SELECT Код руководителя FROM ЛАБ))

SELECT Табельный номер, Фамилия, Имя, Отчество FROM СП_СЛ WHERE EXISTS (SELECT * FROM ЛАБ WHERE Код руководителя=СП_СЛ.Табельный номер)

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]