You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
АНАЛИЗ<br />
Аналогично внутреннему объединению, которое мы рассматривали на прошлом уроке, в<br />
этом операторе SELECT используются ключевые слова OUTER JOIN для указания типа<br />
объединения (вместо указания его в предложении WHERE). Но, в отличие от внутренних<br />
объединений, которые связывают строки двух таблиц, внешние объединения включают в<br />
результат также строки, не имеющие связанных с ними строк. При использовании<br />
синтаксиса OUTER JOIN вы должны использовать ключевое слово RIGHT или LEFT,<br />
чтобы указать таблицу, все строки которой будут включены в результат (RIGHT для<br />
таблицы, имя которой стоит справа от OUTER JOIN, LEFT — для той, имя которой<br />
значится слева).<br />
В предыдущем примере используются ключевые слова LEFT OUTER JOIN для выборки<br />
всех строк таблицы, указанной в левой части предложения FROM (таблицы Customers).<br />
Чтобы выбрать все строки из таблицы, указанной справа, используйте правое внешнее<br />
объединение (RIGHT OUTER JOIN), как показано в следующем примере.<br />
ВВОД<br />
SELECT Customers.cust_id. Orders.order_num<br />
FROM Customers RIGHT OUTER JOIN Orders<br />
ON Orders.cust_id = Customers.cust_id;<br />
SQL Server дополнительно поддерживает упрощенный синтаксис внешнего объединения.<br />
Чтобы выбрать перечень всех клиентов, включая тех, которые не разместили ни одного<br />
заказа, можно сделать следующее.<br />
ВВОД<br />
SELECT Customers.cust_id, Orders.order_num<br />
FROM Customers, Orders<br />
WHERE Customers.cust_id *= Orders.cust_id;<br />
ВЫВОД<br />
cust_id order num<br />
1000000001 20005<br />
1000000001 20009<br />
1000000002 NULL<br />
1000000003 20006<br />
1000000004 20007<br />
1000000005 20008<br />
АНАЛИЗ<br />
Здесь предложение объединения указано в предложении WHERE. Вместо проверки на<br />
равенство с помощью оператора = используется оператор *= для указания того, что в<br />
результат должна быть включена каждая строка таблицы Customers. Оператор *=<br />
представляет собой оператор левого внешнего объединения. С его помощью выбираются<br />
все строки левой таблицы.<br />
Противоположностью описанного левого внешнего объединения является правое внешнее<br />
объединение, его оператор таков: =*. Это объединение можно использовать для<br />
возвращения всех строк таблицы, имя которой находится справа от данного оператора,<br />
как показано в следующем примере.<br />
ВЫВОД<br />
SELECT Customers.cust_id. Orders.order_num<br />
FROM Customers, Orders