Beberapa kondisi JOIN pada SQL yang penting

12 Oct

Query JOIN, digunakan untuk mengambil data dalam database yang mempunyai relationships.
Dalam kasus ini, saya akan memilih MySQL sebagai databasenya, tapi bukan berarti di database lain tidak bisa, query dasar join pada umumnya sama.
Sebelum dimulai, sampel datanya sebagai berikut :

CREATE TABLE customers (
    customer_id INT AUTO_INCREMENT PRIMARY KEY,
    customer_name VARCHAR(100)
);  

CREATE TABLE orders (
    order_id INT AUTO_INCREMENT PRIMARY KEY,
    customer_id INT,
    amount DOUBLE,
    FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);  

INSERT INTO `customers` (`customer_id`, `customer_name`) VALUES
(1, 'Adam'),
(2, 'Andy'),
(3, 'Joe'),
(4, 'Sandy');  

INSERT INTO `orders` (`order_id`, `customer_id`, `amount`) VALUES
(1, 1, 19.99),
(2, 1, 35.15),
(3, 3, 17.56),
(4, 4, 12.34);

Beberapa tipe join melalui query yang kita kenal :

  • Cross Join
  • Natural Join
  • Inner Join
  • On
  • Using
  • Left (outer) Join
  • Conditional Join
  • Right (outer) Join

Dibawah ini akan saya jelaskan kondisi yang memenuhi tipe join di atas.

A. CROSS JOIN

Kondisi :

SELECT * FROM customers JOIN orders;

Hasilnya disebut dengan “Cartesian Product” . Ini berarti pada setiap baris dalam tabel pertama berpasangan dengan setiap baris dari tabel kedua. Ketika setiap tabel memiliki 4 baris, maka kita akan mendapatkan hasil sebanyak 16 baris pada join ini.

Kondisi 2:
JOIN dapat digantikan dengan koma

SELECT * FROM customers, orders;

B. NATURAL JOIN

Kondisi ini membutuhkan nama kolom yang sama pada tabel yang akan di-join-kan. Dalam kasus ini kedua tabel mempunyai customer_id . MySQL akan menggabungkan baris dimana nama kolomnya sama.

Kondisi :

SELECT * FROM customers NATURAL JOIN orders;

Seperti yang kita lihat, kolom customer_id hanya menampilkan 1 kali saja, karena database engine memperlakukan ini sebagai kolom pada umumnya (common column). Kita dapat melihat 2 orders yang dilakukan Adam, dan dua lainnya dilakukan Joe dan Sandy. Pada tahap ini, kita sudah mendapatkan informasi yang sangat berguna.


C. INNER JOIN

Ketika kondisi join dispesifikasikan, hasilnya tidak akan berbeda jauh dengan Natural Join.
Kondisi:

SELECT * FROM customers JOIN orders
WHERE customers.customer_id = orders.customer_id;

Hasilnya hanya akan berbeda sedikit. Kolom customer_id akan berulang 2x pada setiap baris dari tabel. Tapi ini tidak begitu berarti, pada akhirnya kita tetap mendapatkan informasi yang kita inginkan.

Mari kita menambahkan kondisi berbeda :

SELECT * FROM customers JOIN orders
WHERE customers.customer_id = orders.customer_id
AND orders.amount > 15;

maka hasil yang didapatkan :

Kondisi ini menampilkan order dengan harga diatas > $15


D. ON Clause

Sebelum mempelajari join lain, kita akan melihat kondisi query ON. Kondisi ini sangat berguna untuk meletakkan JOIN pada kondisi yang terpisah.

SELECT * FROM customers JOIN orders
ON (customers.customer_id = orders.cutomer_id)
WHERE orders.amount > 15;

Sekarang kita dapat melihat kondisi tertentu. Tapi masih juga memiliki perbedaan fungsi. Kita akan melihat contoh LEFT JOIN


E. Using Clause

“Using” digunakan mirip dengan “On”, hanya saja lebih singkat. Jika sebuah kolom yang mempunyai nama yang sama pada kedua tabel, kita dapat menggunakannya.

Pada faktanya, ini mirip NATURAL JOIN


F. LEFT (OUTER) JOIN

LEFT JOIN adalah jenis-jenis dari outer join. Pada query ini, jika tidak ada yang cocok dari tabel kedua, maka baris yang tidak ada dari tabel pertama tetap ditampilkan tetapi dengan syarat NULL


Meskipun Andy tidak mempunyai order, tapi data dia tetap dimunculkan. Misal dengan kondisi lain lagi :

akan menampilkan kondisi dengan data null(tidak ada pada tabel kedua).


G. CONDITIONALS

Selanjutnya, lihat kondisi dibawah ini :

Apa yang terjadi dengan Andy dan Sandy? LEFT JOIN seharusnya mengembailkan data customer. Masalahnya terdapat pada kondisi WHERE, yang menutup hasilnya. Untuk mendapatkan hasilnya kita menggunakan kondisi dibawah ini :

Kita mendapatkan Andy tapi tidak mendapatkan Sandy. Data yang ditampilkan masih tidak valid! Kita harus menggunakan kondisi ON untuk menggabungkan customer_id nya

Sekarang kita mendapatkan data yang benar! Semua orderan diatas $15. Seperti pada awalnya, ON kadang memiliki fungsi yang berbeda dibandingkan kondisi WHERE. Pada OUTER JOIN seperti ini, baris-baris akan disisipkan meskipun mereka tidak cocok pada kondisi ON


H. RIGHT (OUTER) JOIN

Kondisi join ini sama, tapi tabel yang akan dipasangkan akan berkebalikan dengan tabel kondisinya, misal pada LEFT OUTER, jika data kosong dari tabel 1, tapi syarat harus diambil pada tabel 2, maka tabel 1 tetap ditampilkan hanya berisi NULL. Kondisi yang dimaksudkan berkebalikannya adalah jika tabel 2 kosong tapi ingin digabungkan, maka tabel 2 diisikan dengan NULL. Untuk lebih jelasnya :

Pada saat ini, hasilnya tidak akan menampilkan data NULL karena setiap order telah cocok dengan data customer. Kita dapat mengubah order dari tabel sama seperti yang kita lakukan pada LEFT OUTER JOIN

Sekarang kita mendapatkan hasi NULL karena tabel customer berada pada sisi kanan dari JOIN


Sekian dulu info seputar JOIN pada SQL query :)

Sumber : http://net.tutsplus.com/tutorials/databases/sql-for-beginners-part-3-database-relationships/
Sumber diambil dengan penambahan sedikit dan pengubahan bahasa.
Mencantumkan sumber dalam pengambilan artikel dapat menjaga UU Haki :)

About these ads

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Follow

Get every new post delivered to your Inbox.

%d bloggers like this: