10.01.2017 Views

sql

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!