2010-11-02 2 views
4

Я пытаюсь понять, что соединения и им немного смущены. Я знаю, как для объединения таблиц с использованиемsql joins - Присоединение к нескольким таблицам

= 
<= 

В существует и не существует

Я пытался попробовать и понять использование INNER JOIN, LEFT OUTER JOIN, ИСПОЛЬЗУЯ т.д., но это так запутано. Основная проблема, с которой я сталкиваюсь, заключается в том, что разные люди ссылаются на них, используя разные имена. Есть ли простое объяснение различных типов объединений и других имен, которые они известны. Например, в то время как я пришел прибегая к помощи по следующим типам

♦ Simple Join 
♦ Equi join 
♦ Natural Join 
♦ Outer Join 
♦ Self Join 
♦ Cartesian join 
♦ Inner join 
♦ Nonequi join 
♦ Theta join 
♦ Self join 
♦ Cross join 
♦ Cross Joins 
♦ Natural Joins 
♦ Inner Join with USING Clause 
♦ Inner Join with ON Clause 
♦ Left Outer Join 
♦ Right Outer Join 
♦ Full OuterJoin 

Большинство из указанных выше являются дубликатами, то есть его же тип соединения, но с другим именем. Я уверен, что все вышеперечисленное может быть воссоздано с использованием одного из (=,! =, А не in, in существует и т. Д.), Но я изо всех сил пытаюсь понять, что и какая разница. Диаграмма, вероятно, поможет :)

+0

Кроме того, ваш список является беспорядочным. Я думаю, что можно с уверенностью предположить, что * cross join * и * cross join * относятся к тому же типу соединения. То же самое касается * естественного соединения * и * self join *. – RedFilter

+0

Кроме того, простые и внутренние соединения одинаковы (http://www.techonthenet.com/sql/joins.php) – William

ответ

2

Для некоторых из те, которые не были объяснены должности Мэтью:

Простой Присоединяйтесь - это не явное соединение, то по умолчанию внутреннее соединение

a join b on a.id = b.id 

Natural Join - Это делает внутреннее объединение всех столбцов с тем же именем

a natural join b 

автообъединения - это присоединение к таблице к себе, он может любой другой типа соединения (внутреннее автообъединение, внешнее автообъединение, и т.д.)

a "a1" join a "a2" on "a1".id = "a2".id 

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

a join b 

Креста присоединиться - это синоним декартова присоединиться

Inner Регистрации с ИСПОЛЬЗОВАНИИ Пунктом - Это альтернативный синтаксис для условий соединения, вы можно использовать, если обе таблицы имеют совпадающие имена столбцов

a join b using (id) 

Inner Регистрация с пО пунктом - Это то же самое, что я показал на простое соединение, единственный другой синтаксис, чтобы присоединиться к где п (как показано ниже)

a join b where a.id = b.id 

Left Outer Join - То же, что и левое соединение Right Outer Join - То же, что и правое соединение. Это похоже на левое соединение, но вы получаете нули на первом столе, а не на втором.

+0

Спасибо всем за ответы. Есть ли ресурс, который показывает различный синтаксис, который может использоваться для разных типов? например, простое соединение совпадает с внутренним соединением, а различие - просто синтаксис. – ziggy

+0

Я не знаю ни одного, нет. Проблема в том, что это сводится к предпочтениям или лучшим практикам компании, поэтому источники обычно показывают только один из нескольких синтаксисов. Если вы используете Oracle, вы можете сказать, что слова INNER и OUTER являются необязательными. Существует также «старый» способ, посмотрите эту ссылку для краткого обзора: http://oracledoug.com/serendipity/index.php?/archives/933-ANSI-Join-Syntax.html –

1

EDIT: Просто наткнулся на http://www.gplivna.eu/papers/sql_join_types.htm, которые, хотя технический, обеспечивает достаточно хороший обзор из SQL JOIN типов. Стоит посмотреть

Вот еще одна страница с некоторыми из стыков объяснили (http://blog.noobtech.com/index.php/2009/02/sql-joins-visual-cheat-sheet/)

страницы Я как раз собирался пост был тот, который @matthew лозы уже разместили :)

2

, кстати, только прочитав о СОЕДИНЕНИИ. Что-то изменилось в синтаксисе MySQL? Oracle использовать PLSQL синтаксис немного отличается от других баз данных ..

У меня ситуация здесь последующих

Fisrt Query

SELECT * FROM tbl1 LEFT JOIN (tbl2, tbl3, tbl4) 
    ON (tbl2.field1=tbl1.field1 AND tbl3.filed2=tbl1.field2 AND tbl4.field3=tbl1.field3) 

Второй запрос

SELECT * FROM tbl1 LEFT JOIN (tbl2 CROSS JOIN tbl3 CROSS JOIN tbl4) 
    ON (tbl2.field1=tbl1.field1 AND tbl3.filed2=tbl1.field2 AND tbl4.field3=tbl1.field3) 

Fisrt Q uery - то же самое из Второй запрос.

Спасибо всем!

Смежные вопросы