SQLite - GABUNG

SQLite Joinsklausa digunakan untuk menggabungkan rekaman dari dua atau lebih tabel dalam database. JOIN adalah cara untuk menggabungkan bidang dari dua tabel dengan menggunakan nilai yang sama untuk masing-masing.

SQL mendefinisikan tiga tipe utama gabungan -

  • CROSS JOIN
  • The INNER JOIN
  • OUTER JOIN

Sebelum kita melanjutkan, mari pertimbangkan dua tabel PERUSAHAAN dan DEPARTEMEN. Kita telah melihat pernyataan INSERT untuk mengisi tabel COMPANY. Jadi anggap saja daftar record yang tersedia di tabel 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

Tabel lain adalah DEPARTMENT dengan definisi berikut -

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

Berikut adalah daftar pernyataan INSERT untuk mengisi tabel 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 );

Terakhir, kami memiliki daftar record berikut yang tersedia di tabel DEPARTMENT -

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

CROSS JOIN

CROSS JOIN mencocokkan setiap baris dari tabel pertama dengan setiap baris dari tabel kedua. Jika tabel input masing-masing memiliki baris x dan y, tabel yang dihasilkan akan memiliki baris x * y. Karena CROSS JOINs memiliki potensi untuk menghasilkan tabel yang sangat besar, kehati-hatian harus diberikan untuk hanya menggunakannya jika diperlukan.

Berikut adalah sintaks CROSS JOIN -

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

Berdasarkan tabel di atas, Anda dapat menulis CROSS JOIN sebagai berikut -

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

Kueri di atas akan menghasilkan hasil sebagai berikut -

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

The INNER JOIN

INNER JOIN membuat tabel hasil baru dengan menggabungkan nilai kolom dari dua tabel (tabel1 dan tabel2) berdasarkan predikat gabungan. Kueri membandingkan setiap baris tabel1 dengan setiap baris tabel2 untuk menemukan semua pasangan baris yang memenuhi predikat gabungan. Jika predikat gabungan terpenuhi, nilai kolom untuk setiap pasangan baris A dan B yang cocok digabungkan menjadi baris hasil.

INNER JOIN adalah jenis gabungan yang paling umum dan default. Anda dapat menggunakan kata kunci INNER secara opsional.

Berikut ini adalah sintaks INNER JOIN -

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

Untuk menghindari redundansi dan mempersingkat pengungkapan, ketentuan INNER JOIN dapat dinyatakan dengan a USINGekspresi. Ekspresi ini menetapkan daftar satu atau beberapa kolom.

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

A NATURAL JOIN mirip dengan a JOIN...USING, hanya itu secara otomatis menguji kesetaraan antara nilai setiap kolom yang ada di kedua tabel -

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

Berdasarkan tabel di atas, Anda dapat menulis INNER JOIN sebagai berikut -

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

Kueri di atas akan menghasilkan hasil sebagai berikut -

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

OUTER JOIN

OUTER JOIN adalah perpanjangan dari INNER JOIN. Meskipun standar SQL mendefinisikan tiga jenis OUTER JOIN: LEFT, RIGHT, dan FULL, SQLite hanya mendukungLEFT OUTER JOIN.

OUTER JOINs memiliki kondisi yang identik dengan INNER JOINs, diekspresikan menggunakan kata kunci ON, USING, atau NATURAL. Tabel hasil awal dihitung dengan cara yang sama. Setelah JOIN utama dihitung, OUTER JOIN akan mengambil baris yang tidak digabungkan dari satu atau kedua tabel, mengisi baris tersebut dengan NULL, dan menambahkannya ke tabel yang dihasilkan.

Berikut ini adalah sintaks LEFT OUTER JOIN -

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

Untuk menghindari redundansi dan membuat frase lebih pendek, kondisi OUTER JOIN dapat dideklarasikan dengan ekspresi USING. Ekspresi ini menetapkan daftar satu atau beberapa kolom.

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

Berdasarkan tabel di atas, Anda dapat menulis inner join sebagai berikut -

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

Kueri di atas akan menghasilkan hasil sebagai berikut -

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