English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Уровень базовых знаний SQLite

Уровень продвинутых знаний SQLite

Программный интерфейс SQLite

Соединение SQLite

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 - перекрестное соединение

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 — внутренний JOIN

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 - внешняя связка

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       Финансы