English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
SQLite СоединенияПредложения используются для объединения записей из двух или более таблиц базы данных. JOIN — это метод комбинирования полей из двух таблиц с помощью общих значений.
SQL определяет три основных типа соединений-
Перекрестное соединение
Внутреннее соединение
Внешнее соединение
Прежде чем продолжить, давайте рассмотрим два таблицы COMPANY и DEPARTMENT. Мы уже видели INSERT-запросы для заполнения таблицы COMPANY. Итак, предположим, что список доступных записей в таблице COMPANY:
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 1 Paul 32 California 20000.0 2 Allen 25 Texas 15000.0 3 Teddy 23 Norway 20000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0 6 Kim 22 South-Hall 45000.0 7 James 24 Houston 10000.0
Другая таблица - DEPARTMENT, которая имеет следующее определение-
CREATE TABLE DEPARTMENT( ID INT PRIMARY KEY NOT NULL, DEPT CHAR(50) NOT NULL, EMP_ID INT NOT NULL );
Это список INSERT-запросов, используемых для заполнения таблицы DEPARTMENT-
INSERT INTO DEPARTMENT (ID, DEPT, EMP_ID) VALUES (1, 'IT Биллинг', 1); INSERT INTO DEPARTMENT (ID, DEPT, EMP_ID) VALUES (2, 'Инженерия', 2); INSERT INTO DEPARTMENT (ID, DEPT, EMP_ID) VALUES (3, 'Финансы', 7);
В конце концов, в таблице DEPARTMENT у нас есть следующий список доступных записей-
ID DEPT EMP_ID ---------- ---------- ---------- 1 IT Биллинг 1 2 Инженерия 2 3 Финансы 7
CROSS JOIN совмещает каждую строку первого таблицы с каждой строкой второго таблицы. Если входные таблицы имеют x и y строк соответственно, то результатная таблица будет иметь x * y строк. Поскольку CROSS JOIN может генерировать очень большие таблицы, их следует использовать только в случае необходимости.
以下是 CROSS JOIN грамматика-
SELECT ... FROM table1 CROSS JOIN table2 ...
Согласно таблице выше, вы можете написать CROSS JOIN, как показано ниже:
sqlite> SELECT EMP_ID, NAME, DEPT FROM COMPANY CROSS JOIN DEPARTMENT;
Следующий запрос будет производить следующие результаты-
EMP_ID NAME DEPT ---------- ---------- ---------- 1 Paul IT Абонентский учёт 2 Paul Инженерия 7 Paul Финансы 1 Allen IT Billing 2 Allen Инженерия 7 Allen Финансы 1 Teddy IT Billing 2 Teddy Инженерия 7 Teddy Финансы 1 Mark IT Billing 2 Mark Инженерия 7 Mark Финансы 1 David IT Billing 2 David Инженерия 7 David Финансы 1 Kim IT Billing 2 Kim Инженерия 7 Kim Финансы 1 James IT Billing 2 James Инженерия 7 James Финансы
INNER JOIN создает новый результат таблицы, комбинируя значения столбцов из двух таблиц (table1 и table2) на основе условия подключения. Этот запрос сравнивает каждое значение строки из table1 с каждым значением строки из table2, чтобы найти все строки, которые соответствуют условиям подключения. При满足了连接谓词时, соответствующие значения столбцов из строк A и B будут объединены в строку результата.
INNER JOIN — это наиболее часто используемый тип подключения по умолчанию. Вы можете выбрать использование ключевого слова INNER.
Ниже приведена грамматика INNER JOIN
SELECT ... FROM table1 [INNER] JOIN table2 ON conditional_expression ...
Чтобы избежать избыточности и уменьшить длину фразы, можно использоватьUSINGВыражение объявляет условие INNER JOIN. Это выражение указывает список одной или нескольких колонок.
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;
Следующий запрос будет производить следующие результаты-
EMP_ID NAME DEPT ---------- ---------- ---------- 1 Paul IT Абонентский учёт 2 Allen Инженерия 7 James Финансы
OUTER JOIN является расширением INNER JOIN. Хотя стандарт SQL определяет три типа внешних JOIN: LEFT, RIGHT и FULL, SQLite поддерживает толькоLEFT OUTER JOIN.
Условия внешнего JOIN такие же, как и условия внутреннего JOIN, они выражаются с помощью ключевых слов ON, USING или NATURAL. Метод вычисления начальной таблицы результатов одинаковый. После вычисления основного JOIN, OUTER JOIN берет все непереплетенные строки из одного или двух таблиц, заполняет их NULL и добавляет их к результатной таблице.
Вот грамматика LEFT OUTER JOIN -
SELECT ... FROM table1 LEFT OUTER JOIN table2 ON conditional_expression ...
Чтобы избежать избыточности и уменьшить длину фразы, можно использовать выражение USING для объявления условия OUTER JOIN. Это выражение указывает список одной или нескольких колонок.
SELECT ... FROM table1 LEFT OUTER JOIN table2 USING (column1, ...) ...
На основе вышеуказанной таблицы, вы можете написать внутренний JOIN, например:
sqlite> SELECT EMP_ID, NAME, DEPT FROM COMPANY LEFT OUTER JOIN DEPARTMENT ON COMPANY.ID = DEPARTMENT.EMP_ID;
Следующий запрос будет производить следующие результаты-
EMP_ID NAME DEPT ---------- ---------- ---------- 1 Paul IT Абонентский учёт 2 Allen Инженерия Teddy Mark David Kim 7 James Финансы