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

37) Объединение нескольких наборов результатов union. Примеры.

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

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

Синтаксис:

SELECT ...

UNION [ALL]

SELECT ...

[,...]

По умолчанию повторяющиеся записи удаляются (т.е. используется опция DISTINCT).

Для получения всех записей необходимо указать ключевое слово ALL.

Необходимо также учитывать, что список полей, порядок и все их свойства должны быть одинаковы во всех используемых запросах.

Например, если количество столбцов в списке выборки первого запроса равно трем, то второй запрос (а также все последующие запросы, соединяемые операцией UNION) также должен иметь в списке выборки три столбца.

Имена полей итогового набора берутся только из первого запроса, поэтому создание псевдонимов полей выполняется в нем.

38) Виды соединений. Примеры.

Существует четыре вида соединений:

  • внутреннее, внешнее, полное, перекрестное.

Внутреннее соединение. Конструкция INNER JOIN

При таком виде соединения сравниваются значения общих полей двух таблиц. Конструкция INNER JOIN возвращает только строки, согласованные по всем полям, которые обозначены как используемые для соединения. Записи, для которых не имеется пары в связанной таблице, в результат не включаются.

По умолчанию применяются внутренние соединения, ключевое слово INNER является необязательным.

Пусть есть таблица с данными о фильмах Film (Таблица 1):

Таблица 1. Film

FilmlD

FilmName

YearMade

1

My Fair Lady

1964

2

Unforgiven

1992

Есть вторая таблица с данными об актерах Actors (Таблица 2):

Таблица 2: Actors

FilmlD

FirstName

LastName

1

Rex

Harrison

1

Audrey

Hepburn

3

Clint

Eastwood

4

Jak

Chan

Посмотрим результаты, полученные с помощью конструкции INNER JOIN.

SELECT *FROM Film INNER JOIN Actors ON Film.FilmID = Actors.FilmID;

Внешние соединения. LEFT OUTER JOIN, RIGHT OUTER JOIN

При использовании конструкции INNER JOIN исключаются все строки, не соответствующие всем заданным критериям, а при использовании конструкции OUTER, а также конструкции FULL JOIN, существует возможность включить в результирующий набор строки, которые соответствуют хотя бы одному из заданных критериев. Иногда с помощью конструкции OUTER JOIN удается легко решить задачи, которые на первый взгляд кажутся очень сложными/

Такие соединения применяются для получения полного набора записей одной из таблиц. В соединениях различаются стороны - левая и правая. Левой считается таблица, указанная в первую очередь, а правой - таблица, указанная после нее.

При левом соединении (ключевое слово LEFT JOIN) в результат будут включены все записи левой таблицы (имя которой расположено слева от JOIN), независимо от того, есть для них соответствующая запись в правой таблице (имя таблицы расположено справа от JOIN) или нет.

При правом соединении (ключевое слово RIGHT JOIN) в результат включаются все записи правой таблицы, независимо от того, есть для них соответствующая строка в левой таблице.

Синтаксис:

SELECT <SELECT list>

FROM <the “LEFT” table> <LEFT!RIGHT>[OUTER} JOIN <the “RIGHT” table>

ON <join condition>

Пример 1:

Выполним левое соединение для таблицы 1 и таблицы 2.

SELECT *

FROM Film f Left JOIN Actors a

ON f.FilmlD = a.FilmlD;

Полные соединения. FULL JOIN

Полные соединения можно считать своего рода результатом совместного применения левого и правого соединений. Если применяется соединение с ключевым словом FULL, соответствующий оператор равносилен передаваемому СУБД SQL Server указанию, что в результаты должны быть включены все строки из таблиц, находящихся по обе стороны от ключевого слова JOIN, без каких либо исключений.

Пример:

Выполним полное соединение для таблицы 1 и таблицы 2.

SELECT *

FROM Film f FULL JOIN Actors a

ON f.FilmlD = a.FilmlD;

Перекрестные соединения

При таком соединении выводятся все комбинации записей таблиц, при этом не требуется указание совпадающих значений полей, поэтому условие ON опускается.

Происходит соединение каждой строки таблиц, находящихся с одной стороны от ключевого слова JOIN, с каждой строкой таблиц, находящихся с другой стороны от ключевого слова JOIN. В итоге формируется декартово произведение всех строк, заданных по обе стороны ключевого слова JOIN.

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

Пример: Выполнить перекрестное соединение таблицы 1 и таблицы 2.

SELECT *

FROM Film Cross JOIN Actors