SQLite - DOŁĄCZA

SQLite JoinsKlauzula służy do łączenia rekordów z dwóch lub więcej tabel w bazie danych. JOIN to sposób łączenia pól z dwóch tabel przy użyciu wspólnych wartości.

SQL definiuje trzy główne typy sprzężeń -

  • CROSS JOIN
  • WEWNĘTRZNE DOŁĄCZENIE
  • DOŁĄCZ ZEWNĘTRZNY

Zanim przejdziemy dalej, rozważmy dwie tabele FIRMA i DZIAŁ. Widzieliśmy już instrukcje INSERT wypełniające tabelę COMPANY. Przyjmijmy więc listę rekordów dostępnych w tabeli FIRMA -

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

Kolejna tabela to DEPARTMENT z następującą definicją -

CREATE TABLE DEPARTMENT(
   ID INT PRIMARY KEY      NOT NULL,
   DEPT           CHAR(50) NOT NULL,
   EMP_ID         INT      NOT NULL
);

Oto lista instrukcji INSERT do wypełnienia tabeli DEPARTMENT -

INSERT INTO DEPARTMENT (ID, DEPT, EMP_ID)
VALUES (1, 'IT Billing', 1 );

INSERT INTO DEPARTMENT (ID, DEPT, EMP_ID)
VALUES (2, 'Engineering', 2 );

INSERT INTO DEPARTMENT (ID, DEPT, EMP_ID)
VALUES (3, 'Finance', 7 );

Na koniec mamy następującą listę rekordów dostępnych w tabeli DEPARTMENT -

ID          DEPT        EMP_ID
----------  ----------  ----------
1           IT Billing  1
2           Engineering 2
3           Finance     7

CROSS JOIN

CROSS JOIN dopasowuje każdy wiersz pierwszej tabeli do każdego wiersza drugiej tabeli. Jeśli tabele wejściowe mają odpowiednio wiersz x i y, wynikowa tabela będzie miała wiersz x * y. Ponieważ połączenia CROSS JOIN mogą generować bardzo duże tabele, należy uważać, aby ich używać tylko wtedy, gdy jest to właściwe.

Poniżej znajduje się składnia CROSS JOIN -

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

Na podstawie powyższych tabel możesz napisać CROSS JOIN w następujący sposób -

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

Powyższe zapytanie da następujący wynik -

EMP_ID      NAME        DEPT
----------  ----------  ----------
1           Paul        IT Billing
2           Paul        Engineering
7           Paul        Finance
1           Allen       IT Billing
2           Allen       Engineering
7           Allen       Finance
1           Teddy       IT Billing
2           Teddy       Engineering
7           Teddy       Finance
1           Mark        IT Billing
2           Mark        Engineering
7           Mark        Finance
1           David       IT Billing
2           David       Engineering
7           David       Finance
1           Kim         IT Billing
2           Kim         Engineering
7           Kim         Finance
1           James       IT Billing
2           James       Engineering
7           James       Finance

WEWNĘTRZNE DOŁĄCZENIE

INNER JOIN tworzy nową tabelę wynikową, łącząc wartości kolumn z dwóch tabel (tabela1 i tabela2) na podstawie predykatu łączenia. Zapytanie porównuje każdy wiersz tabeli tabela1 z każdym wierszem tabeli tabela2, aby znaleźć wszystkie pary wierszy, które spełniają predykat łączenia. Gdy predykat łączenia jest spełniony, wartości kolumn dla każdej dopasowanej pary wierszy A i B są łączone w wiersz wynikowy.

SPRZĘŻENIE WEWNĘTRZNE jest najpopularniejszym i domyślnym typem sprzężenia. Opcjonalnie można użyć słowa kluczowego INNER.

Poniżej znajduje się składnia INNER JOIN -

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

Aby uniknąć nadmiarowości i skrócić frazę, warunki INNER JOIN można zadeklarować z rozszerzeniem USINGwyrażenie. To wyrażenie określa listę zawierającą jedną lub więcej kolumn.

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

NATURALNE POŁĄCZENIE jest podobne do JOIN...USING, tylko że automatycznie sprawdza równość między wartościami każdej kolumny, która istnieje w obu tabelach -

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

Na podstawie powyższych tabel możesz napisać WEWNĘTRZNE DOŁĄCZENIE w następujący sposób -

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

Powyższe zapytanie da następujący wynik -

EMP_ID      NAME        DEPT
----------  ----------  ----------
1           Paul        IT Billing
2           Allen       Engineering
7           James       Finance

DOŁĄCZ ZEWNĘTRZNY

OUTER JOIN jest rozszerzeniem INNER JOIN. Chociaż standard SQL definiuje trzy typy POŁĄCZEŃ ZEWNĘTRZNYCH: LEFT, RIGHT i FULL, SQLite obsługuje tylkoLEFT OUTER JOIN.

OUTER JOIN mają warunek identyczny z INNER JOIN, wyrażony za pomocą słowa kluczowego ON, USING lub NATURAL. Wstępna tabela wyników jest obliczana w ten sam sposób. Po obliczeniu podstawowego JOIN, OUTER JOIN pobierze wszystkie niepołączone wiersze z jednej lub obu tabel, wypełnia je wartościami NULL i dołącza je do wynikowej tabeli.

Poniżej znajduje się składnia LEFT OUTER JOIN -

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

Aby uniknąć nadmiarowości i skrócić frazę, warunki OUTER JOIN można zadeklarować za pomocą wyrażenia USING. To wyrażenie określa listę zawierającą jedną lub więcej kolumn.

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

Na podstawie powyższych tabel możesz napisać sprzężenie wewnętrzne w następujący sposób -

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

Powyższe zapytanie da następujący wynik -

EMP_ID      NAME        DEPT
----------  ----------  ----------
1           Paul        IT Billing
2           Allen       Engineering
            Teddy
            Mark
            David
            Kim
7           James       Finance