Комбинируем LEFT и RIGHT JOIN

Введение в SQL Server

John MacKintosh

Instructor

Зачем нужны LEFT и RIGHT JOIN

  • Зачем нужны LEFT и RIGHT JOIN?
  • В одной таблице может не быть совпадений из другой:
    • История заказов клиентов для маркетинговой кампании
    • Список товаров и история возвратов
    • Пациенты, поступившие, но ещё не выписанные
Введение в SQL Server

Зачем нужны LEFT и RIGHT JOIN

  • Зачем нужны LEFT и RIGHT JOIN?
  • В одной таблице может не быть совпадений из другой:
    • История заказов клиентов для маркетинговой кампании
    • Список товаров и история возвратов
    • Пациенты, поступившие, но ещё не выписанные
Введение в SQL Server

Таблица поступлений

+------------+----------+
| Patient_ID | Admitted | 
|------------+----------|
| 1          | 1        |
| 2          | 1        |
| 3          | 1        |
| 4          | 1        |
| 5          | 1        |
+------------+----------+

Таблица выписок

+------------+------------+
| Patient_ID | Discharged | 
|------------+------------|
| 1          | 1          |
| 3          | 1          |
| 4          | 1          |
+------------+------------+

INNER JOIN:

+------------+----------+------------|
| Patient_ID | Admitted | Discharged |
|------------+----------|------------|
| 1          | 1        | 1          |
| 3          | 1        | 1          |
| 4          | 1        | 1          |
+------------+----------+------------+

LEFT JOIN:

+------------+----------+------------|
| Patient_ID | Admitted | Discharged |
|------------+----------|------------|
| 1          | 1        | 1          |
| 2          | 1        | NULL       |
| 3          | 1        | 1          |
| 4          | 1        | 1          |
| 5          | 1        | NULL       |
+------------+----------+------------+
Введение в SQL Server

СИНТАКСИС LEFT JOIN

SELECT 
  Admitted.Patient_ID, 
  Admitted, 
  Discharged 
FROM Admitted 
LEFT JOIN Discharged ON Discharged.Patient_ID = Admitted.Patient_ID;

Введение в SQL Server
SELECT 
  Admitted.Patient_ID, 
  Admitted, 
  Discharged 
FROM Admitted 
LEFT JOIN Discharged ON Discharged.Patient_ID = Admitted.Patient_ID;
+------------+----------+------------|
| Patient_ID | Admitted | Discharged |
|------------+----------|------------|
| 1          | 1        | 1          |
| 2          | 1        | NULL       |
| 3          | 1        | 1          |
| 4          | 1        | 1          |
| 5          | 1        | NULL       |
+------------+----------+------------+
Введение в SQL Server

RIGHT JOIN

SELECT 
  Admitted.Patient_ID, 
  Admitted, 
  Discharged 
FROM Discharged 
RIGHT JOIN Admitted ON Admitted.Patient_ID = Discharged.Patient_ID;

Введение в SQL Server

Результат RIGHT JOIN

SELECT 
  Admitted.Patient_ID, 
  Admitted, 
  Discharged 
FROM Discharged 
RIGHT JOIN Admitted ON Admitted.Patient_ID = Discharged.Patient_ID;
+------------+----------+------------|
| Patient_ID | Admitted | Discharged |
|------------+----------|------------|
| 1          | 1        | 1          |
| 2          | 1        | NULL       |
| 3          | 1        | 1          |
| 4          | 1        | 1          |
| 5          | 1        | NULL       |
+------------+----------+------------+
Введение в SQL Server

Итоги

  • INNER JOIN: возвращает только совпадающие строки
  • LEFT JOIN (или RIGHT JOIN): все строки основной таблицы плюс совпадения из присоединяемой
  • NULL: отображается, если совпадение не найдено
  • LEFT JOIN и RIGHT JOIN взаимозаменяемы
Введение в SQL Server

Введение в SQL Server

Давайте потренируемся!

Введение в SQL Server

Preparing Video For Download...