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;
0 комментариев