В связи с тем, что SQL Server поддерживает синтаксис ANSI-92, для объединения таблиц можно использовать опцию JOIN. В качестве примера приведем запрос, который выбирает всех клиентов, приезжавших в феврале.
SELECT Проживает.Дата_прибытия, Клиент.Фамилия
FROM Клиент INNER JOIN Проживает
ON Клиент.Код_клиента = Проживает.Код_клиента
AND MONTH(П.Дата_прибытия) = 2
AND YEAR(П.Дата_прибытия) = 2006
ORDER BY 1
Внешние объединения
Существует три типа внешнего объединения:
· Левое внешнее объединение (LEFT OUTER JOIN) – в результирующий набор включаются все строки первой (левой) таблицы.
· Правое внешнее объединение (RIGHT OUTER JOIN) – в результирующий набор включаются все строки второй (правой) таблицы.
· Полное внешнее объединение (FULL OUTER JOIN) – в результирующий набор включаются все строки как первой (левой), так и второй (правой) таблиц.
Помимо приведенного синтаксиса внешних объединений, для левого и правого объединения можно использовать следующие символы:
*= - включаются все строки левой таблицы;
=* - включаются все строки правой таблицы.
Рассмотрим примеры. Получим список номеров второго этажа гостиницы и кодов клиентов, проживающих в этих номерах в настоящее время.
SELECT Н.Номер, Н.Число_мест, П.Код_клиента, П.Дата_убытия
FROM Номер Н, Проживает П
WHERE Н.Номер *= П.Номер
AND Н.Этаж = 2
AND П.Дата_убытия > GETDATE()
Результат выборки:
Номер Число_мест Код_клиента Дата_убытия
------ ---------- ----------- ---------------------------
21 1 NULL NULL
22 2 1 2001-03-14 18:40:20.000
23 2 3 2001-03-14 18:39:31.000
24 3 NULL NULL
(4 row(s) affected)