PostgreSQL - GABUNG

PostgreSQL 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.

Jenis Gabung di PostgreSQL adalah -

  • CROSS JOIN
  • The INNER JOIN
  • LEFT OUTER JOIN
  • The RIGHT OUTER JOIN
  • GABUNG LENGKAP LENGKAP

Sebelum kita melanjutkan, mari kita pertimbangkan dua tabel, PERUSAHAAN dan DEPARTEMEN. Kita telah melihat pernyataan INSERT untuk mengisi tabel COMPANY. Jadi mari kita asumsikan daftar record yang tersedia di tabel COMPANY -

id | name  | age | address   | salary | join_date
----+-------+-----+-----------+--------+-----------
  1 | Paul  |  32 | California|  20000 | 2001-07-13
  3 | Teddy |  23 | Norway    |  20000 |
  4 | Mark  |  25 | Rich-Mond |  65000 | 2007-12-13
  5 | David |  27 | Texas     |  85000 | 2007-12-13
  2 | Allen |  25 | Texas     |        | 2007-12-13
  8 | Paul  |  24 | Houston   |  20000 | 2005-07-13
  9 | James |  44 | Norway    |   5000 | 2005-07-13
 10 | James |  45 | Texas     |   5000 | 2005-07-13

Tabel lain adalah DEPARTMENT, memiliki definisi sebagai 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 masukan memiliki kolom x dan y, masing-masing, tabel yang dihasilkan akan memiliki kolom x + y. Karena CROSS JOIN memiliki potensi untuk menghasilkan tabel yang sangat besar, kehati-hatian harus dilakukan untuk menggunakannya hanya jika sesuai.

Berikut ini adalah sintaks CROSS JOIN -

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

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

testdb=# SELECT EMP_ID, NAME, DEPT FROM COMPANY CROSS JOIN DEPARTMENT;

Kueri yang diberikan di atas akan menghasilkan hasil sebagai berikut -

emp_id| name  |  dept
------|-------|--------------
    1 | Paul  | IT Billing
    1 | Teddy | IT Billing
    1 | Mark  | IT Billing
    1 | David | IT Billing
    1 | Allen | IT Billing
    1 | Paul  | IT Billing
    1 | James | IT Billing
    1 | James | IT Billing
    2 | Paul  | Engineering
    2 | Teddy | Engineering
    2 | Mark  | Engineering
    2 | David | Engineering
    2 | Allen | Engineering
    2 | Paul  | Engineering
    2 | James | Engineering
    2 | James | Engineering
    7 | Paul  | Finance
    7 | Teddy | Finance
    7 | Mark  | Finance
    7 | David | Finance
    7 | Allen | Finance
    7 | Paul  | Finance
    7 | James | Finance
    7 | James | Finance

The INNER JOIN

A 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 yang cocok dari tabel1 dan tabel2 digabungkan menjadi baris hasil.

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

Berikut ini adalah sintaks INNER JOIN -

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

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

testdb=# SELECT EMP_ID, NAME, DEPT FROM COMPANY INNER JOIN DEPARTMENT
        ON COMPANY.ID = DEPARTMENT.EMP_ID;

Kueri yang diberikan di atas akan menghasilkan hasil sebagai berikut -

emp_id | name  | dept
--------+-------+------------
      1 | Paul  | IT Billing
      2 | Allen | Engineering

LEFT OUTER JOIN

OUTER JOIN merupakan perpanjangan dari INNER JOIN. Standar SQL mendefinisikan tiga jenis OUTER JOIN: LEFT, RIGHT, dan FULL dan PostgreSQL mendukung semua ini.

Dalam kasus LEFT OUTER JOIN, inner join dilakukan terlebih dahulu. Kemudian, untuk setiap baris pada tabel T1 yang tidak memenuhi kondisi join dengan baris manapun pada tabel T2, baris yang digabungkan ditambahkan dengan nilai null pada kolom T2. Jadi, tabel gabungan selalu memiliki setidaknya satu baris untuk setiap baris di T1.

Berikut ini adalah sintaks LEFT OUTER JOIN -

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

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

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

Kueri yang diberikan di atas akan menghasilkan hasil sebagai berikut -

emp_id | name  | dept
--------+-------+------------
      1 | Paul  | IT Billing
      2 | Allen | Engineering
        | James |
        | David |
        | Paul  |
        | Mark  |
        | Teddy |
        | James |

The RIGHT OUTER JOIN

Pertama, gabungan dalam dilakukan. Kemudian, untuk setiap baris pada tabel T2 yang tidak memenuhi kondisi join dengan baris manapun pada tabel T1, baris yang digabungkan akan ditambahkan dengan nilai null pada kolom T1. Ini adalah kebalikan dari gabungan kiri; tabel hasil akan selalu memiliki baris untuk setiap baris di T2.

Berikut ini adalah sintaks RIGHT OUTER JOIN -

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

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

testdb=# SELECT EMP_ID, NAME, DEPT FROM COMPANY RIGHT OUTER JOIN DEPARTMENT
   ON COMPANY.ID = DEPARTMENT.EMP_ID;

Kueri yang diberikan di atas akan menghasilkan hasil sebagai berikut -

emp_id | name  | dept
--------+-------+--------
      1 | Paul  | IT Billing
      2 | Allen | Engineering
      7 |       | Finance

GABUNG LENGKAP LENGKAP

Pertama, gabungan dalam dilakukan. Kemudian, untuk setiap baris pada tabel T1 yang tidak memenuhi syarat join dengan baris manapun pada tabel T2, baris gabungan ditambahkan dengan nilai null pada kolom T2. Selain itu, untuk setiap baris T2 yang tidak memenuhi kondisi join dengan setiap baris di T1, baris yang digabungkan dengan nilai null di kolom T1 ditambahkan.

Berikut ini adalah sintaks FULL OUTER JOIN -

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

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

testdb=# SELECT EMP_ID, NAME, DEPT FROM COMPANY FULL OUTER JOIN DEPARTMENT
   ON COMPANY.ID = DEPARTMENT.EMP_ID;

Kueri yang diberikan di atas akan menghasilkan hasil sebagai berikut -

emp_id | name  | dept
--------+-------+---------------
      1 | Paul  | IT Billing
      2 | Allen | Engineering
      7 |       | Finance
        | James |
        | David |
        | Paul  |
        | Mark  |
        | Teddy |
        | James |