DML: SELECT dengan FULL (OUTER) JOIN

FULL JOIN atau FULL OUTER JOIN dalam SQL adalah konsep dalam sistem manajemen basis data relasional (RDBMS) yang memungkinkan kita menggabungkan baris dari dua atau lebih tabel berdasarkan kolom terkait di antara mereka.

Kata kunci FULL JOIN mengembalikan semua catatan ketika ada kecocokan di antara catatan tabel kiri (table1) atau kanan (table2). Hasilnya adalah NULL di kedua sisi ketika tidak ada kecocokan.

Sintaks Dasar

SELECT column_name(s)
FROM table1
FULL JOIN table2
ON table1.column_name = table2.column_name;
  • table1: Tabel kiri.
  • column_name(s): Kolom yang ingin kita pilih.
  • table2: Tabel kanan.
  • table1.column_name = table2.column_name: Kondisi yang menghubungkan kedua tabel.

Contoh 1

Mari mulai dengan contoh dasar:

Tabel “order”

order_idcustomer_idorder_date
132020-07-04 10:30:00
212020-09-13 15:45:00
322020-10-09 09:15:00
452020-12-02 18:20:00

Tabel “customer”

customer_idnamecountry
1JohnUSA
2MichaelGermany
3SarahFrance
4SallyUK

Kita dapat menemukan semua pesanan dan pelanggan, baik mereka memiliki catatan yang cocok atau tidak, menggunakan kueri berikut:

SELECT order.order_id, customer.name, customer.country
FROM order
FULL JOIN customer
ON order.customer_id = customer.customer_id;

Set hasil akan terlihat seperti ini:

order_idnamecountry
1SarahFrance
2JohnUSA
3MichaelGermany
4NULLNULL
NULLSallyUK

Kita melihat bahwa order_id 4 tidak memiliki customer_id yang cocok di tabel Pelanggan, sehingga mengembalikan NULL. Demikian pula, pelanggan Sally tidak memiliki pesanan yang sesuai dalam tabel Pesanan, sehingga juga mengembalikan NULL untuk order_id.

Contoh 2 - Menggabungkan Lebih dari Dua Tabel

Mari pertimbangkan tabel baru bernama “product”:

Tabel “product”

product_idproduct_nameprice
1Apple1,00
2Banana0,50
3Cherry2,00
4Dates3,00

Untuk mendapatkan semua pesanan, pelanggan, dan produk, baik mereka memiliki catatan yang cocok atau tidak, kita dapat menggunakan FULL JOIN dua kali:

SELECT order.order_id, customer.name, product.product_name
FROM ((order
FULL JOIN customer ON order.customer_id = customer.customer_id)
FULL JOIN product ON order.product_id = product.product_id);

Set hasil akan terlihat seperti ini:

order_idnameproduct_name
1SarahApple
2JohnBanana
3MichaelCherry
4NULLNULL
NULLSallyNULL
NULLNULLDates

Di sini, produk “Dates” tidak cocok dengan pesanan atau pelanggan apa pun, sehingga mengembalikan NULL dalam kolom tersebut. Demikian pula, pelanggan Sally dan order_id 4 tidak memiliki kecocokan, sehingga mereka juga mengembalikan NULL jika sesuai.

Contoh 3 - Menggunakan FULL JOIN dengan Klausa WHERE

Kita juga dapat menggunakan klausa FULL JOIN dengan klausa WHERE untuk menyaring catatan.

SELECT order.order_id, customer.name, customer.country
FROM order
FULL JOIN customer
ON order.customer_id = customer.customer_id
WHERE customer.country = 'USA';

Set hasil:

order_idnamecountry
2JohnUSA

Hasil hanya mencakup pelanggan dari USA. Pelanggan lain, atau pelanggan tanpa pesanan yang cocok, tidak termasuk dalam set hasil.

Contoh 4 - Menggunakan FULL JOIN dengan Fungsi Agregat

FULL JOIN juga dapat digunakan dengan fungsi agregat seperti COUNT(), SUM(), AVG(), dll.

Misalnya kita ingin menghitung jumlah pesanan yang dibuat oleh setiap pelanggan:

SELECT customer.name, COUNT(order.order_id) as number_of_orders
FROM order
FULL JOIN customer
ON order.customer_id = customer.customer_id
GROUP BY customer.name;

Set hasil:

namenumber_of_orders
John1
Michael1
Sarah1
Sally0
NULL1

Kueri ini mengelompokkan pesanan berdasarkan nama pelanggan, dan menghitung jumlah pesanan yang dibuat oleh setiap pelanggan. Sally tidak membuat pesanan apa pun, sehingga NumberOfOrders adalah 0. NULL mewakili pesanan yang tidak memiliki pelanggan yang cocok.

  1. SQL FULL OUTER JOIN Keyword - W3Schools
  2. The SQL FULL OUTER JOIN syntax - SQL Tutorial
  3. FULL OUTER JOIN in SQL Server - Microsoft Docs
  4. SQL Aggregate Functions - W3Schools
  5. The GROUP BY Statement in SQL - SQL Tutorial
  6. Using JOINs in SQL Server - Microsoft Docs
  7. Filtering Data with WHERE Clause in SQL Server - SQL Server Tutorial
Last updated on