Статья Автор: Деникина Н.В., Деникин А.В.

Виды соединений в SQLite: LEFT JOIN и RIGHT JOIN

Соединения LEFT JOIN и RIGHT JOIN позволяют объединять данные из двух таблиц, включая строки, которые не имеют совпадений. Однако в SQLite официально поддерживается только LEFT JOIN.

RIGHT JOIN в SQLite можно симулировать с помощью перестановки таблиц местами при использовании LEFT JOIN.


1. LEFT JOIN (или LEFT OUTER JOIN)

LEFT JOIN объединяет строки из левой таблицы (указанной первой) со строками из правой таблицы (указанной второй).
Основное правило:

  • Все строки из левой таблицы включаются в результат.
  • Если в правой таблице нет совпадения, значения из правой таблицы заменяются на NULL.

Синтаксис LEFT JOIN

SELECT column_list 
FROM table1 
LEFT JOIN table2 
ON table1.column_name = table2.column_name; 
  • table1 — левая таблица.
  • table2 — правая таблица.
  • ON — условие соединения.

Пример использования LEFT JOIN

Таблица employees (Сотрудники):

employee_id | name       | department_id
-----------------------------------------
1           | Alice      | 1
2           | Bob        | 2
3           | Charlie    | 3
4           | David      | NULL

Таблица departments (Отделы):

department_id | department_name
--------------------------------
1             | IT
2             | Sales
3             | HR
4             | Marketing 

Запрос:

SELECT employees.name AS employee_name, departments.department_name 
FROM employees 
LEFT JOIN departments 
ON employees.department_id = departments.department_id; 

Результат:

employee_name | department_name
--------------------------------
Alice         | IT
Bob           | Sales
Charlie       | HR
David         | NULL
  • Включены все строки из таблицы employees.
  • Для David нет совпадений в departments, поэтому значение department_nameNULL.

2. RIGHT JOIN в SQLite

SQLite не поддерживает RIGHT JOIN напрямую. Однако его можно симулировать, поменяв местами таблицы в запросе LEFT JOIN.


Пример использования RIGHT JOIN (эмуляция)

Для тех же таблиц employees и departments:

Запрос:

SELECT departments.department_name, employees.name AS employee_name 
FROM departments 
LEFT JOIN employees 
ON employees.department_id = departments.department_id; 

Результат:

department_name | employee_name
--------------------------------
IT              | Alice
Sales           | Bob
HR              | Charlie
Marketing       | NULL 
  • Здесь роли таблиц поменялись: теперь все строки из departments (правая таблица в оригинальном запросе RIGHT JOIN) включены в результат.
  • Отдел "Marketing" не имеет совпадений в employees, поэтому employee_nameNULL.

Сравнение LEFT JOIN и RIGHT JOIN

Особенность LEFT JOIN RIGHT JOIN
Основной фокус Включает все строки из левой таблицы Включает все строки из правой таблицы
Поддержка в SQLite Официально поддерживается Эмулируется через перестановку таблиц в LEFT JOIN

Когда использовать LEFT JOIN и RIGHT JOIN?

  • LEFT JOIN:
    Используйте, когда важно сохранить все строки из первой (левой) таблицы, даже если у них нет совпадений.

  • RIGHT JOIN:
    Используйте, когда важно сохранить все строки из второй (правой) таблицы. В SQLite вместо RIGHT JOIN просто поменяйте таблицы местами в LEFT JOIN.


Заключение

  • SQLite поддерживает только LEFT JOIN, который покрывает большинство потребностей при работе с объединением данных.
  • Для эмуляции RIGHT JOIN можно просто поменять таблицы местами при использовании LEFT JOIN.
  • Использование этих видов соединений позволяет сохранять важные данные, даже если соответствующие строки в связанных таблицах отсутствуют.
Пропустить Навигационные Ссылки.
Чтобы оставить комментарий нужна авторизация
Печать