Данная статья будет полезна новичкам и поможет в освоении оператора JOIN и в этом примере он будет рассмотрен в контексте языка T-SQL. Для визуализации работы запросов были также использованы диаграммы Венна, которые, как я надеюсь помогут вникнуть в смысл JOIN-ов. Для начала работы над примерами - предположим, что у нас есть 2 таблицы ('Таблица_1' слева и 'Таблица_2' справа), давайте заполним их тестовыми данными:
Таблица_1 | Таблица_2 | ||
id | name | id | name |
-- | ---- | -- | ---- |
1 | Машина | 1 | Паром |
2 | Грузовик | 2 | Машина |
3 | Самолет | 3 | Велосипед |
4 | Поезд | 4 | Самолет |
Теперь, когда мы разобрались с условностями - можно переходить к рассмотрению примеров:
1. INNER JOIN выводит только те записи, которые совпадают в обеих таблицах SELECT * FROM Table_1
INNER JOIN Table_2
ON Table_1.name = Table_2.name
Результат работы запроса:
|
![]() |
||||||||||||||||||||||||||||||||||||||||
2. FULL OUTER JOIN выводит набор записей, которые совпадают в обеих таблицах (с двух сторон), там, где нет совпадения вставляется значение NULL (сравнение записей ведется с Таблицей_1, т.е. той, что с левой стороны). SELECT * FROM Table_1
FULL OUTER JOIN Table_2
ON Table_1.name = Table_2.name
Результат работы запроса:
|
![]() |
||||||||||||||||||||||||||||||||||||||||
3. LEFT OUTER JOIN выводит полный набор записей из первой таблицы (в нашем случае Таблица_1), и совпадающие записи (где это возможно) со второй таблицы (Таблица_2). Если совпадений нет - в поле вставляется значение NULL. SELECT * FROM Table_1
LEFT OUTER JOIN Table_2
ON Table_1.name = Table_2.name
|
![]() |
||||||||||||||||||||||||||||||||||||||||
4. RIGHT OUTER JOIN выводит полный набор записей из второй таблицы (в нашем случае Таблица_1), и совпадающие записи (где это возможно) из первой таблицы (Таблица_1). Если совпадений нет - в поле вставляется значение NULL. Как мы видим этот оператор похож на предыдущий, только в данном случае "ведущей" будет вторая таблица (с правой стороны). SELECT * FROM Table_1
RIGHT OUTER JOIN Table_2
ON Table_1.name = Table_2.name
|
![]() |
||||||||||||||||||||||||||||||||||||||||
5. Извлечение уникальных записей из таблицы посредством оператора WHERE. В данном примере мы выведем только те записи из Таблицы_1, которых нет в Таблице_2. SELECT * FROM Table_1
LEFT OUTER JOIN Table_2
ON Table_1.name = Table_2.name
WHERE Table_2.id IS null
|
![]() |
||||||||||||||||||||||||||||||||||||||||
6. Извлечение уникальных записей из обеих таблиц посредством оператора WHERE. В данном примере мы выведем уникальные записи из Таблицы_1 и Таблицы_2. SELECT * FROM Table_1
FULL OUTER JOIN Table_2
ON Table_1.name = Table_2.name
WHERE Table_1.id IS null
OR Table_2.id IS null
|
![]() |
||||||||||||||||||||||||||||||||||||||||
7. CROSS JOIN. Для полноты изложения материала следует упомянуть еще об одном операторе - CROSS JOIN. Этот оператор используется довольно редко и для визуального представления нет подходящей диаграммы Венна. С помощью CROSS JOIN-а мы можем сделать перекрестную выборку всех записей из обеих таблиц (Таблицы_1 и Таблицы_2) и в нашем случае мы получим 4х4=16 строк данных. Возьмите на заметку, что лучше не применять этот опреатор для больших таблиц, т.к. это может серьезно повлиять на производительность СУБД. SELECT * FROM Table_1
CROSS JOIN Table_2
|
Comments