Joins используется для объединения записей из двух или более таблиц в базе данных. SQL определяет три основных типа объединений:

  • CROSS JOIN
  • INNER JOIN
  • OUTER JOIN

CROSS JOIN

CROSS JOIN сопоставляет каждую строку первой таблицы с каждой строкой второй таблицы. Если входные таблицы имеют строки x и y, соответственно, результирующая таблица будет иметь строку x * y. Поскольку CROSS JOINs имеют потенциал для создания чрезвычайно больших таблиц, следует позаботиться о том, чтобы использовать их, когда это необходимо.

SELECT ... FROM table1 CROSS JOIN table2 ...

Основываясь на приведенных выше таблицах, вы можете написать CROSS JOIN следующим образом:

sqlite> SELECT EMP_ID, NAME, DEPT FROM COMPANY CROSS JOIN DEPARTMENT;

INNER JOIN

INNER JOIN создает новую таблицу результатов, комбинируя значения столбцов двух таблиц (table1 и table2) на основе предиката соединения. Запрос сравнивает каждую строку таблицы1 с каждой строкой таблицы2, чтобы найти все пары строк, которые удовлетворяют предикату соединения. Когда предикат соединения выполняется, значения столбца для каждой парной пары строк из A и B объединяются в строку результатов.

INNER JOIN - наиболее распространенный тип соединения по умолчанию. Вы можете использовать ключевое слово INNER.

SELECT ... FROM table1 [INNER] JOIN table2 ON conditional_expression ...

Чтобы избежать избыточности и сократить сроки написания, условия INNER JOIN могут быть объявлены с помощью выражения USING. Это выражение указывает список из одного или нескольких столбцов.

SELECT ... FROM table1 JOIN table2 USING ( column1 ,... ) ...

NATURAL JOIN похож на JOIN...USING , он автоматически проверяет равенство между значениями каждого столбца, который существует в обеих таблицах,

SELECT ... FROM table1 NATURAL JOIN table2...

Основываясь на приведенных выше таблицах, вы можете написать INNER JOIN следующим образом:

sqlite> SELECT EMP_ID, NAME, DEPT FROM COMPANY INNER JOIN DEPARTMENT
   ON COMPANY.ID = DEPARTMENT.EMP_ID;

OUTER JOIN

OUTER JOIN - это расширение INNER JOIN. Хотя стандарт SQL определяет три типа OUTER JOIN: LEFT, RIGHT и FULL, SQLite поддерживает только LEFT OUTER JOIN .

OUTER JOINs имеют условие, идентичное INNER JOINs, выраженное с помощью ключевого слова ON, USING или NATURAL. Исходная таблица результатов вычисляется одинаково. Когда первичный JOIN вычисляется, OUTER JOIN будет брать любые несвязанные строки из одной или обеих таблиц, выкладывать их с помощью NULL и добавлять их в итоговую таблицу.

SELECT ... FROM table1 LEFT OUTER JOIN table2 ON conditional_expression ...

Чтобы избежать избыточности и сократить сроки написания, условия OUTER JOIN могут быть объявлены с помощью выражения USING. Это выражение указывает список из одного или нескольких столбцов.

SELECT ... FROM table1 LEFT OUTER JOIN table2 USING ( column1 ,... ) ...

Основываясь на приведенных выше таблицах, вы можете написать внутреннее соединение следующим образом:

sqlite> SELECT EMP_ID, NAME, DEPT FROM COMPANY LEFT OUTER JOIN DEPARTMENT
   ON COMPANY.ID = DEPARTMENT.EMP_ID;