Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Kinerja MySQL:Pengantar GABUNG dalam SQL

Pada artikel ini, kita akan mempelajari dasar-dasar menggabungkan tabel dalam SQL. Kita akan belajar tentang JOIN Kiri, Kanan, Dalam, dan Luar serta memberikan contoh cara menggunakannya.

Data dalam RDBMS (Relational Database Management System) dikelompokkan ke dalam tabel. Tabel ini memiliki definisi kaku tentang jenis data yang dapat disimpan di dalamnya. Untuk menghubungkan tabel yang berbeda, dan dengan demikian tipe data yang berbeda yang mungkin berhubungan satu sama lain, kita akan menggunakan klausa JOIN.

Jenis GABUNG

Ada empat tipe dasar JOIN:INNER, OUTER, LEFT, dan RIGHT. Saat menghubungkan dua tabel, masing-masing akan mengembalikan subset yang berbeda dari tabel yang sesuai berdasarkan kondisi dalam klausa ON.

  • KIRI dan KANAN GABUNG melakukan tugas serupa. Keduanya mengembalikan keseluruhan tabel tunggal dengan informasi yang terkait dengan tabel kedua.
  • INNER dan OUTER JOIN melakukan tugas yang sangat berbeda. INNER JOIN menghasilkan hasil yang sangat terbatas, sedangkan OUTER mengembalikan set data lengkap.
Catatan:Pada saat penulisan artikel ini, MariaDB dan MySQL tidak mendukung OUTER JOINs. Namun kami akan memberikan contoh cara untuk menghasilkan output ini dengan cara yang berbeda.

Dalam contoh ini, kami menggunakan contoh departemen penjualan untuk tutorial ini, menggunakan tiga tabel:tenaga penjualan, pesanan, dan pelanggan.

Tabel tenaga penjualan akan memiliki tiga kolom:id, nama, dan tingkat komisi.

Selanjutnya, tabel pesanan akan berisi empat kolom:id pesanan, total biaya pesanan, pelanggan, dan, jika tersedia, tenaga penjual.

Tabel pelanggan akan berisi dua kolom:id dan informasi kontak dasar.

Jadi, kami sekarang memiliki beberapa tabel informasi yang berguna untuk orang yang berbeda dengan cara yang berbeda. Dengan menggunakan tiga tabel ini (penjual, pesanan, dan pelanggan), kami akan memberikan contoh bagaimana masing-masing GABUNG dapat berguna.

KIRI GABUNG

Mungkin jenis JOIN yang paling umum digunakan adalah LEFT JOIN. Jika Anda memikirkan dua tabel yang digabungkan, tabel yang disebutkan dalam klausa FROM ada di sebelah kiri. Yang disebutkan dalam klausa JOIN ada di sebelah kanan. Dalam LEFT JOIN, setiap baris dari tabel LEFT (atau FROM) dikembalikan dalam hasil dan ditautkan dengan baris yang sesuai dari tabel RIGHT (atau JOIN) yang cocok dengan klausa ON.

Ingatlah bahwa beberapa baris di KIRI mungkin tidak memiliki data yang cocok di KANAN. Dalam hal ini, bidang yang akan diisi dari tabel KANAN dalam hasil akan diisi dengan nilai NULL.

Juga, jika beberapa baris dalam tabel KANAN cocok dengan baris dari tabel KIRI, maka beberapa baris akan disertakan dalam kumpulan hasil. Diagram Venn menunjukkan bagaimana LEFT JOIN akan terlihat divisualisasikan:

Direktur Pemasaran meminta Anda untuk melaporkan semua pesanan yang dirinci oleh pelanggan. Anda dapat menggunakan LEFT JOIN untuk ini:

SELECT *
FROM orders
LEFT JOIN customer
ON orders.customer_id = customer.id;

Kueri ini meminta semua data di tabel "pesanan" yang ditautkan dengan baris di tabel "pelanggan", di mana id pelanggan sama dengan id_pelanggan secara berurutan. Hasilnya akan terlihat seperti ini:

Perhatikan bahwa untuk pelanggan Widgets LLC, ada tiga entri karena mereka memiliki tiga pesanan. Jolly Inc. menempatkan dua pesanan, dan Acme Inc. menempatkan satu. Cheapo tidak muncul di daftar ini karena tidak ada pesanan yang dilakukan.

KANAN GABUNG

RIGHT JOIN sangat mirip dengan LEFT JOIN, kecuali mengembalikan setiap baris dari tabel RIGHT (JOIN) dan hanya baris yang sesuai dari tabel LEFT (FROM). Sekali lagi, jika tidak ada data di tabel KIRI, maka kolom tersebut akan diisi dengan nilai NULL.

Jika ada beberapa baris di tabel KIRI, maka akan ada beberapa baris di kumpulan hasil. Diagram Venn-nya akan terlihat seperti ini:

Jika manajemen menginginkan laporan dengan SETIAP pelanggan; bahkan jika mereka tidak melakukan pemesanan, kita dapat menggunakan RIGHT JOIN.

SELECT *
FROM orders
RIGHT JOIN customer
ON orders.customer_id = customer.id;

Sekali lagi kita mulai dengan tabel "pesanan" dan GABUNG ke tabel pelanggan. Karena kita menggunakan RIGHT JOIN maka kita akan mendapatkan minimal satu baris untuk setiap entry pada tabel RIGHT (JOIN), customer. Bila ada kecocokan antara customer.id dan orders.customer_id maka informasi tersebut diisi.  Hasilnya mencantumkan Cheapo Co dengan nilai NULL pada kolom order:

INNER GABUNG

INNER JOIN hanya mengembalikan baris dari setiap kolom yang cocok dengan klausa ON. Jika tidak ada kecocokan di KANAN maka baris dari KIRI dikeluarkan dan sebaliknya. Diagram Venn untuk INNER JOIN terlihat seperti ini:

Ini adalah hari gajian dan departemen penggajian perlu mengetahui berapa banyak komisi yang harus dibayarkan. Untuk ini, mereka perlu mengetahui pesanan yang dilakukan melalui setiap tenaga penjualan. Perhatikan bahwa tidak semua pesanan melalui penjual, jadi kami tidak memperdulikannya. Untuk ini kita dapat menggunakan INNER JOIN:

SELECT *,cost * commission_rate / 100 AS commission_amount
FROM orders
INNER JOIN salespeople
ON orders.salesperson_id = salespeople.id;

Sekali lagi kita mulai dengan tabel pesanan. Kali ini kita GABUNG dengan tabel tenaga penjual. Jika ada entri di tabel pesanan yang cocok dengan entri di tabel wiraniaga maka baris tersebut akan disertakan. Alih-alih mengisi baris yang tidak cocok dengan nilai NULL, baris tersebut diabaikan dalam hasil.

Harap dicatat bahwa kami memberi tahu database tidak hanya untuk mengembalikan jumlah penjualan dan tingkat komisi tetapi juga komisi yang dihitung. Hasilnya akan terlihat seperti ini:

GABUNG LUAR

OUTER JOIN mengembalikan semuanya terlepas dari apakah ada kecocokan. Jika Anda menggabungkan hasil LEFT dan RIGHT JOIN, Anda akan mendapatkan OUTER JOIN. Diagram Venn untuk OUTER JOIN terlihat seperti ini:

Sekarang, ini adalah akhir bulan dan manajer penjualan ingin mengetahui SEMUA penjualan serta semua komisi yang telah dibayarkan. Untuk ini kita akan menggunakan OUTER JOIN:

SELECT *,cost * commission_rate / 100 AS commission_amount
FROM orders
FULL OUTER JOIN salespeople
ON orders.salesperson_id = salespeople.id;

Seperti laporan penggajian, kami mulai dengan pesanan dan BERGABUNG ke tenaga penjualan. Perbedaannya adalah bahwa dengan OUTER JOIN Anda akan mendapatkan hasil dari tabel LEFT dan RIGHT dengan NULL yang diisi di mana tidak ada kecocokan yang sesuai. Hasilnya terlihat seperti ini:

Sekarang, ingat bahwa kami mengatakan bahwa MariaDB dan MySQL tidak mendukung OUTER JOIN. Kami juga mengatakan bahwa jika Anda menambahkan LEFT JOIN ke RIGHT JOIN, Anda akan mendapatkan OUTER JOIN. Trik dalam kedua sistem itu adalah melakukan hal itu. Kami mencapai ini dengan klausa UNION. Itu menambahkan hasil dari satu kueri ke kueri lainnya:

SELECT *,cost * commission_rate / 100 AS commission_amount
FROM orders
LEFT JOIN salespeople
ON orders.salesperson_id = salespeople.id
UNION
SELECT *,cost * commission_rate / 100 AS commission_amount
FROM orders
RIGHT JOIN salespeople
ON orders.salesperson_id = salespeople.id;

Hasilnya akan terlihat seperti ini:

BERGABUNG GANDA

JOIN juga memungkinkan Anda untuk menghubungkan lebih dari dua tabel. Jika kita ingin laporan penjualan lengkap dengan informasi pelanggan dan tenaga penjual, kita cukup melakukan JOIN lagi di akhir.

SELECT *
FROM orders
LEFT JOIN salespeople
ON orders.salesperson_id = salespeople.id
LEFT JOIN customer
ON customer.id = orders.customer_id;

Dalam contoh ini, kita mulai dengan tabel pesanan dan menghubungkannya ke tabel wiraniaga seperti yang kita lakukan sebelumnya. Langkah selanjutnya adalah JOIN tabel ke tabel pelanggan. Ini akan mengisi semua informasi yang dapat ditautkan ke tabel pesanan.

Artikel ini adalah pengantar singkat dan tidak dimaksudkan sebagai diskusi lengkap tentang bagaimana JOIN dapat digunakan dalam SQL.

Klik Di Bawah Untuk Menggunakan Kupon Nyaman Ini Sekarang!

Liquid Web memiliki beberapa server database paling kuat di industri ini. Server ini dapat digunakan untuk menjalankan bisnis rumahan terkecil hingga cluster multi-basis data terbesar untuk perusahaan skala perusahaan.

Hubungi kami di 800.580.4985, atau buka obrolan atau tiket dengan kami untuk berbicara dengan salah satu Solusi Berpengalaman atau penasihat Hosting kami untuk mempelajari bagaimana Anda dapat memanfaatkan teknik ini hari ini!

Navigasi Seri<

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Gambaran Umum Replikasi Silang PostgreSQL &MySQL

  2. Urutan SQL Berdasarkan Hitungan

  3. MySQL Pilih Baris N Teratas

  4. mysqli_stmt::bind_result():Jumlah variabel ikat tidak cocok dengan jumlah bidang dalam pernyataan yang disiapkan

  5. Laravel 5.2 - Gunakan String sebagai Kunci Utama Kustom untuk Tabel Eloquent menjadi 0