HSQLDB - Bergabung

Setiap kali ada persyaratan untuk mengambil data dari beberapa tabel menggunakan satu kueri, Anda dapat menggunakan JOINS dari RDBMS. Anda dapat menggunakan beberapa tabel dalam satu kueri SQL Anda. Tindakan bergabung di HSQLDB mengacu pada penghancuran dua tabel atau lebih menjadi satu tabel.

Pertimbangkan tabel Pelanggan dan Pesanan berikut.

Customer:
+----+----------+-----+-----------+----------+
| ID |   NAME   | AGE |  ADDRESS  |  SALARY  |
+----+----------+-----+-----------+----------+
| 1  |  Ramesh  | 32  | Ahmedabad |  2000.00 |
| 2  |  Khilan  | 25  |   Delhi   |  1500.00 |
| 3  |  kaushik | 23  |   Kota    |  2000.00 |
| 4  | Chaitali | 25  |   Mumbai  |  6500.00 |
| 5  |  Hardik  | 27  |   Bhopal  |  8500.00 |
| 6  |  Komal   | 22  |    MP     |  4500.00 |
| 7  |  Muffy   | 24  |   Indore  | 10000.00 |
+----+----------+-----+-----------+----------+
Orders:
+-----+---------------------+-------------+--------+
|OID  |         DATE        | CUSTOMER_ID | AMOUNT |
+-----+---------------------+-------------+--------+
| 102 | 2009-10-08 00:00:00 |      3      |  3000  |
| 100 | 2009-10-08 00:00:00 |      3      |  1500  |
| 101 | 2009-11-20 00:00:00 |      2      |  1560  |
| 103 | 2008-05-20 00:00:00 |      4      |  2060  |
+-----+---------------------+-------------+--------+

Sekarang, mari kita coba mengambil data pelanggan dan jumlah pesanan yang ditempatkan masing-masing pelanggan. Ini berarti kami mengambil data rekaman dari tabel pelanggan dan pesanan. Kami dapat mencapai ini dengan menggunakan konsep JOINS di HSQLDB. Berikut ini adalah kueri GABUNG untuk hal yang sama.

SELECT ID, NAME, AGE, AMOUNT FROM CUSTOMERS, ORDERS WHERE CUSTOMERS.ID =
ORDERS.CUSTOMER_ID;

Setelah menjalankan query di atas, Anda akan menerima keluaran berikut.

+----+----------+-----+--------+
| ID |   NAME   | AGE | AMOUNT |
+----+----------+-----+--------+
|  3 | kaushik  |  23 |  3000  |
|  3 | kaushik  |  23 |  1500  |
|  2 | Khilan   |  25 |  1560  |
|  4 | Chaitali |  25 |  2060  |
+----+----------+-----+--------+

Jenis GABUNG

Ada berbagai jenis gabungan yang tersedia di HSQLDB.

  • INNER JOIN - Mengembalikan baris jika ada kecocokan di kedua tabel.

  • LEFT JOIN - Menampilkan semua baris dari tabel kiri, meskipun tidak ada kecocokan di tabel kanan.

  • RIGHT JOIN - Menampilkan semua baris dari tabel kanan, meskipun tidak ada kecocokan di tabel kiri.

  • FULL JOIN - Mengembalikan baris saat ada kecocokan di salah satu tabel.

  • SELF JOIN - Digunakan untuk menggabungkan tabel ke tabel itu sendiri seolah-olah tabel adalah dua tabel, sementara mengganti nama setidaknya satu tabel dalam pernyataan SQL.

Gabung Batin

Gabungan yang paling sering digunakan dan penting adalah INNER JOIN. Ini juga disebut sebagai EQUIJOIN.

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.

Sintaksis

Sintaks dasar INNER JOIN adalah sebagai berikut.

SELECT table1.column1, table2.column2...
FROM table1
INNER JOIN table2
ON table1.common_field = table2.common_field;

Contoh

Perhatikan dua tabel berikut, satu tabel berjudul sebagai CUSTOMERS dan tabel lainnya berjudul tabel ORDERS sebagai berikut -

+----+----------+-----+-----------+----------+
| ID |   NAME   | AGE |  ADDRESS  | SALARY   |
+----+----------+-----+-----------+----------+
| 1  |  Ramesh  | 32  | Ahmedabad | 2000.00  |
| 2  |  Khilan  | 25  |   Delhi   | 1500.00  |
| 3  |  kaushik | 23  |   Kota    | 2000.00  |
| 4  | Chaitali | 25  |   Mumbai  | 6500.00  |
| 5  |  Hardik  | 27  |   Bhopal  | 8500.00  |
| 6  |  Komal   | 22  |     MP    | 4500.00  |
| 7  |  Muffy   | 24  |   Indore  | 10000.00 |
+----+----------+-----+-----------+----------+
+-----+---------------------+-------------+--------+
| OID |         DATE        | CUSTOMER_ID | AMOUNT |
+-----+---------------------+-------------+--------+
| 102 | 2009-10-08 00:00:00 |      3      | 3000   |
| 100 | 2009-10-08 00:00:00 |      3      | 1500   |
| 101 | 2009-11-20 00:00:00 |      2      | 1560   |
| 103 | 2008-05-20 00:00:00 |      4      | 2060   |
+-----+---------------------+-------------+--------+

Sekarang, mari kita gabungkan dua tabel ini menggunakan query INNER JOIN sebagai berikut -

SELECT ID, NAME, AMOUNT, DATE FROM CUSTOMERS
INNER JOIN ORDERS
ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID;

Setelah menjalankan query di atas, Anda akan menerima keluaran berikut.

+----+----------+--------+---------------------+
| ID |   NAME   | AMOUNT |         DATE        |
+----+----------+--------+---------------------+
| 3  |  kaushik |  3000  | 2009-10-08 00:00:00 |
| 3  |  kaushik |  1500  | 2009-10-08 00:00:00 |
| 2  |  Khilan  |  1560  | 2009-11-20 00:00:00 |
| 4  | Chaitali |  2060  | 2008-05-20 00:00:00 |
+----+----------+--------+---------------------+

Gabung Kiri

HSQLDB LEFT JOIN mengembalikan semua baris dari tabel kiri, meskipun tidak ada yang cocok di tabel kanan. Ini berarti jika klausa ON cocok dengan record 0 (nol) di tabel kanan, penggabungan akan tetap mengembalikan baris di hasil, tetapi dengan NULL di setiap kolom dari tabel kanan.

Ini berarti bahwa gabungan kiri mengembalikan semua nilai dari tabel kiri, ditambah nilai yang cocok dari tabel kanan atau NULL jika tidak ada predikat gabungan yang cocok.

Sintaksis

Sintaks dasar LEFT JOIN adalah sebagai berikut -

SELECT table1.column1, table2.column2...
FROM table1
LEFT JOIN table2
ON table1.common_field = table2.common_field;

Di sini kondisi yang diberikan dapat berupa ekspresi apa pun berdasarkan kebutuhan Anda.

Contoh

Perhatikan dua tabel berikut, satu tabel berjudul sebagai CUSTOMERS dan tabel lainnya berjudul tabel ORDERS sebagai berikut -

+----+----------+-----+-----------+----------+
| ID |   NAME   | AGE |  ADDRESS  | SALARY   |
+----+----------+-----+-----------+----------+
| 1  |  Ramesh  | 32  | Ahmedabad | 2000.00  |
| 2  |  Khilan  | 25  |   Delhi   | 1500.00  |
| 3  |  kaushik | 23  |   Kota    | 2000.00  |
| 4  | Chaitali | 25  |   Mumbai  | 6500.00  |
| 5  |  Hardik  | 27  |   Bhopal  | 8500.00  |
| 6  |  Komal   | 22  |    MP     | 4500.00  |
| 7  |  Muffy   | 24  |  Indore   | 10000.00 |
+----+----------+-----+-----------+----------+
+-----+---------------------+-------------+--------+
| OID |        DATE         | CUSTOMER_ID | AMOUNT |
+-----+---------------------+-------------+--------+
| 102 | 2009-10-08 00:00:00 |     3       | 3000   |
| 100 | 2009-10-08 00:00:00 |     3       | 1500   |
| 101 | 2009-11-20 00:00:00 |     2       | 1560   |
| 103 | 2008-05-20 00:00:00 |     4       | 2060   |
+-----+---------------------+-------------+--------+

Sekarang, mari kita gabungkan dua tabel ini menggunakan kueri LEFT JOIN sebagai berikut -

SELECT ID, NAME, AMOUNT, DATE FROM CUSTOMERS
LEFT JOIN ORDERS
ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID;

Setelah menjalankan kueri di atas, Anda akan menerima keluaran berikut -

+----+----------+--------+---------------------+
| ID |   NAME   | AMOUNT |         DATE        |
+----+----------+--------+---------------------+
|  1 |  Ramesh  |  NULL  |        NULL         |
|  2 |  Khilan  |  1560  | 2009-11-20 00:00:00 |
|  3 |  kaushik |  3000  | 2009-10-08 00:00:00 |
|  3 |  kaushik |  1500  | 2009-10-08 00:00:00 |
|  4 | Chaitali |  2060  | 2008-05-20 00:00:00 |
|  5 |  Hardik  |  NULL  |        NULL         |
|  6 |  Komal   |  NULL  |        NULL         |
|  7 |  Muffy   |  NULL  |        NULL         |
+----+----------+--------+---------------------+

Bergabung dengan Benar

HSQLDB RIGHT JOIN mengembalikan semua baris dari tabel kanan, meskipun tidak ada kecocokan di tabel kiri. Ini berarti bahwa jika klausa ON cocok dengan 0 (nol) record di tabel kiri, join akan tetap mengembalikan baris di hasil, tetapi dengan NULL di setiap kolom dari tabel kiri.

Ini berarti bahwa gabungan kanan mengembalikan semua nilai dari tabel kanan, ditambah nilai yang cocok dari tabel kiri atau NULL jika tidak ada predikat gabungan yang cocok.

Sintaksis

Sintaks dasar RIGHT JOIN adalah sebagai berikut -

SELECT table1.column1, table2.column2...
FROM table1
RIGHT JOIN table2
ON table1.common_field = table2.common_field;

Contoh

Perhatikan dua tabel berikut, satu tabel berjudul sebagai CUSTOMERS dan tabel lainnya berjudul tabel ORDERS sebagai berikut -

+----+----------+-----+-----------+----------+
| ID |   NAME   | AGE |  ADDRESS  |  SALARY  |
+----+----------+-----+-----------+----------+
| 1  |  Ramesh  | 32  | Ahmedabad |  2000.00 |
| 2  |  Khilan  | 25  |   Delhi   |  1500.00 |
| 3  |  kaushik | 23  |   Kota    |  2000.00 |
| 4  | Chaitali | 25  |   Mumbai  |  6500.00 |
| 5  |  Hardik  | 27  |   Bhopal  |  8500.00 |
| 6  |  Komal   | 22  |     MP    |  4500.00 |
| 7  |  Muffy   | 24  |   Indore  | 10000.00 |
+----+----------+-----+-----------+----------+
+-----+---------------------+-------------+--------+
| OID |       DATE          | CUSTOMER_ID | AMOUNT |
+-----+---------------------+-------------+--------+
| 102 | 2009-10-08 00:00:00 |      3      |  3000  |
| 100 | 2009-10-08 00:00:00 |      3      |  1500  |
| 101 | 2009-11-20 00:00:00 |      2      |  1560  |
| 103 | 2008-05-20 00:00:00 |      4      |  2060  |
+-----+---------------------+-------------+--------+

Sekarang, mari kita gabungkan dua tabel ini menggunakan kueri RIGHT JOIN sebagai berikut -

SELECT ID, NAME, AMOUNT, DATE FROM CUSTOMERS
RIGHT JOIN ORDERS
ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID;

Setelah menjalankan query di atas, Anda akan menerima hasil sebagai berikut.

+------+----------+--------+---------------------+
|  ID  |   NAME   | AMOUNT |        DATE         |
+------+----------+--------+---------------------+
|  3   |  kaushik |  3000  | 2009-10-08 00:00:00 |
|  3   |  kaushik |  1500  | 2009-10-08 00:00:00 |
|  2   |  Khilan  |  1560  | 2009-11-20 00:00:00 |
|  4   | Chaitali |  2060  | 2008-05-20 00:00:00 |
+------+----------+--------+---------------------+

Bergabung Penuh

HSQLDB FULL JOIN menggabungkan hasil gabungan luar kiri dan kanan.

Tabel yang digabungkan akan berisi semua record dari kedua tabel, dan mengisi NULL untuk kecocokan yang hilang di kedua sisi.

Sintaksis

Sintaks dasar FULL JOIN adalah sebagai berikut -

SELECT table1.column1, table2.column2...
FROM table1
FULL JOIN table2
ON table1.common_field = table2.common_field;

Di sini kondisi yang diberikan dapat berupa ekspresi apa pun berdasarkan kebutuhan Anda.

Contoh

Perhatikan dua tabel berikut, satu tabel berjudul sebagai CUSTOMERS dan tabel lainnya berjudul tabel ORDERS sebagai berikut -

+----+----------+-----+-----------+----------+
| ID |   NAME   | AGE |  ADDRESS  |  SALARY  |
+----+----------+-----+-----------+----------+
|  1 |  Ramesh  | 32  | Ahmedabad | 2000.00  |
|  2 |  Khilan  | 25  |   Delhi   | 1500.00  |
|  3 |  kaushik | 23  |   Kota    | 2000.00  |
|  4 | Chaitali | 25  |   Mumbai  | 6500.00  |
|  5 |  Hardik  | 27  |   Bhopal  | 8500.00  |
|  6 |  Komal   | 22  |   MP      | 4500.00  |
|  7 |  Muffy   | 24  |   Indore  | 10000.00 |
+----+----------+-----+-----------+----------+
+-----+---------------------+-------------+--------+
| OID |         DATE        | CUSTOMER_ID | AMOUNT |
+-----+---------------------+-------------+--------+
| 102 | 2009-10-08 00:00:00 |    3        | 3000   |
| 100 | 2009-10-08 00:00:00 |    3        | 1500   |
| 101 | 2009-11-20 00:00:00 |    2        | 1560   |
| 103 | 2008-05-20 00:00:00 |    4        | 2060   |
+-----+---------------------+-------------+--------+

Sekarang, mari kita gabungkan dua tabel ini menggunakan query FULL JOIN sebagai berikut -

SELECT ID, NAME, AMOUNT, DATE FROM CUSTOMERS
FULL JOIN ORDERS
ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID;

Setelah menjalankan query di atas, Anda akan menerima hasil sebagai berikut.

+------+----------+--------+---------------------+
|  ID  |    NAME  | AMOUNT |        DATE         |
+------+----------+--------+---------------------+
|   1  |  Ramesh  |  NULL  |        NULL         |
|   2  |  Khilan  |  1560  | 2009-11-20 00:00:00 |
|   3  |  kaushik |  3000  | 2009-10-08 00:00:00 |
|   3  |  kaushik |  1500  | 2009-10-08 00:00:00 |
|   4  | Chaitali |  2060  | 2008-05-20 00:00:00 |
|   5  |  Hardik  |  NULL  |        NULL         |
|   6  |   Komal  |  NULL  |        NULL         |
|   7  |   Muffy  |  NULL  |        NULL         |
|   3  |  kaushik |  3000  | 2009-10-08 00:00:00 |
|   3  |  kaushik |  1500  | 2009-10-08 00:00:00 |
|   2  |  Khilan  |  1560  | 2009-11-20 00:00:00 |
|   4  | Chaitali |  2060  | 2008-05-20 00:00:00 |
+------+----------+--------+---------------------+

Bergabung Sendiri

SQL SELF JOIN digunakan untuk menggabungkan tabel ke tabel itu sendiri seolah-olah tabel adalah dua tabel, untuk sementara mengganti nama setidaknya satu tabel dalam pernyataan SQL.

Sintaksis

Sintaks dasar SELF JOIN adalah sebagai berikut -

SELECT a.column_name, b.column_name...
FROM table1 a, table1 b
WHERE a.common_field = b.common_field;

Di sini, klausa WHERE bisa berupa ekspresi apa pun yang diberikan berdasarkan kebutuhan Anda.

Contoh

Perhatikan dua tabel berikut, satu tabel berjudul sebagai CUSTOMERS dan tabel lainnya berjudul tabel ORDERS sebagai berikut -

+----+----------+-----+-----------+----------+
| ID |    NAME  | AGE |   ADDRESS |   SALARY |
+----+----------+-----+-----------+----------+
|  1 |  Ramesh  |  32 | Ahmedabad | 2000.00  |
|  2 |  Khilan  |  25 |   Delhi   | 1500.00  |
|  3 |  kaushik |  23 |   Kota    | 2000.00  |
|  4 | Chaitali |  25 |   Mumbai  | 6500.00  |
|  5 |  Hardik  |  27 |   Bhopal  | 8500.00  |
|  6 |  Komal   |  22 |   MP      | 4500.00  |
|  7 |  Muffy   |  24 |   Indore  | 10000.00 |
+----+----------+-----+-----------+----------+

Sekarang, mari kita gabungkan tabel ini menggunakan query SELF JOIN sebagai berikut -

SELECT a.ID, b.NAME, a.SALARY FROM CUSTOMERS a, CUSTOMERS b
WHERE a.SALARY > b.SALARY;

Setelah menjalankan kueri di atas, Anda akan menerima keluaran berikut -

+----+----------+---------+
| ID |   NAME   | SALARY  |
+----+----------+---------+
| 2  |  Ramesh  | 1500.00 |
| 2  |  kaushik | 1500.00 |
| 1  | Chaitali | 2000.00 |
| 2  | Chaitali | 1500.00 |
| 3  | Chaitali | 2000.00 |
| 6  | Chaitali | 4500.00 |
| 1  |  Hardik  | 2000.00 |
| 2  |  Hardik  | 1500.00 |
| 3  |  Hardik  | 2000.00 |
| 4  |  Hardik  | 6500.00 |
| 6  |  Hardik  | 4500.00 |
| 1  |  Komal   | 2000.00 |
| 2  |  Komal   | 1500.00 |
| 3  |  Komal   | 2000.00 |
| 1  |  Muffy   | 2000.00 |
| 2  |  Muffy   | 1500.00 |
| 3  |  Muffy   | 2000.00 |
| 4  |  Muffy   | 6500.00 |
| 5  |  Muffy   | 8500.00 |
| 6  |  Muffy   | 4500.00 |
+----+----------+---------+