|
|
su.dbms.sql- SU.DBMS.SQL ------------------------------------------------------------------ From : Lilya A. Kozlenko 2:5025/17 16 Apr 2001 13:13:13 To : All Subject : Re: join -------------------------------------------------------------------------------- > Вторник Март 20 2001: Alexei Y. Galich ... All > AG> From: "Alexei Y. Galich" <galich@tps.ifmo.ru> > > AG> просветите пожалуйста - что такое join, outer join, left join? Синтаксис приведен IBM DB2 UDB. Синтаксис Oracle для описания таких join не поддерживается, там += и =+ для правого и левого соотв.. <соединение таблиц> ::= <полное соединение> | <ограниченное соединение> | ( <соединение таблиц> ) <полное соединение> ::= <описатель таблицы> CROSS JOIN <описатель таблицы> <ограниченное соединение> ::= <описатель таблицы> [<тип соединения>] JOIN <описатель таблицы> [ <спецификация соединения> ] <спецификация соединения> ::= ON <спецификатор выборки> <тип соединения> ::= INNER | {LEFT | RIGHT | FULL } [OUTER] | UNION Синтаксические правила - При отсутствии скобок соединение таблиц выполняется слева направо; - Если задано <ограниченное соединение>, а <тип соединения> не указан, по умолчанию принимается INNER (внутренне соединение); - В <спецификаторе выборки> запрещены внешние ссылки, только ссылки к таблицам соединения; - Для соединения типа CROSS JOIN нельзя указывать <спецификатор выборки>; - Каждая таблица, входящая в JOIN, имеет своей областью видимости весь подзапрос, содержащий этот JOIN, за исключением той части <спецификатора отображения>, которая не содержит соединения, включающего эту таблицу; - Запрещено повторение имен таблиц и заменяющих их имен в одном <спецификаторе отображения>. Общие правила SELECT * FROM A CROSS JOIN B есть то же самое, что SELECT * FROM A,B SELECT * FROM A INNER JOIN B ON <спецификатор выборки> есть то же самое, что SELECT * FROM A,B <спецификатор выборки> SELECT * FROM A LEFT OUTER JOIN B ON <спецификатор выборки> есть то же самое, что SELECT * FROM A,B <спецификатор выборки> UNION SELECT A.*,<пустые значения> FROM A WHERE NOT EXISTS SELECT * FROM B <спецификатор выборки> SELECT * FROM A RIGHT OUTER JOIN B ON <спецификатор выборки> есть то же самое, что SELECT * FROM A,B <спецификатор выборки> UNION SELECT <пустые значения>,B.* FROM B WHERE NOT EXISTS SELECT * FROM A <спецификатор выборки> SELECT * FROM A FULL OUTER JOIN B ON <спецификатор выборки> есть то же самое, что SELECT * FROM A,B WHERE <спецификатор выборки> UNION SELECT A.*, <пустые значения> FROM A WHERE NOT EXISTS SELECT * FROM B <спецификатор выборки> UNION SELECT <пустые значения>,B.* FROM B WHERE NOT EXISTS SELECT * FROM A <спецификатор выборки> SELECT * FROM A UNION JOIN B ON <спецификатор выборки> есть то же самое, что SELECT A.*, <пустые значения> FROM A WHERE NOT EXISTS SELECT * FROM B <спецификатор выборки> UNION SELECT <пустые значения>,B.* FROM B WHERE NOT EXISTS SELECT * FROM A <спецификатор выборки> Под <пустыми значениями> везде понимаются NULL-значения в таком количестве и таких типов, чтобы содержащий их запрос совпадал по количеству и типам значений с тем запросом, с которым он объединяется по UNION. -- Regards, Lilya Kozlenko --- Microsoft Outlook Express 5.50.4522.1200 * Origin: RELEX Inc. (2:5025/17@fidonet) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /su.dbms.sql/7753d93d18c8.html, оценка из 5, голосов 10
|