Pemahaman tentang join rusak. Untuk dilanjutkan. Mencoba Visualisasi Alternatif

Banyak dari Anda telah membaca artikel sebelumnya tentang bagaimana visualisasi yang salah untuk menjelaskan bagaimana GABUNGAN bekerja dapat membingungkan dalam beberapa kasus. Lingkaran Venn tidak dapat sepenuhnya menggambarkan titik-titik tertentu, misalnya, jika nilai-nilai dalam tabel diulang.

Dalam persiapan untuk merekam edisi keenam podcast Zinc Prod (di mana kami sepakat untuk membahas artikel), sepertinya saya berhasil menemukan satu versi visualisasi yang menarik. Selain itu, opsi serupa juga ditawarkan dalam komentar di artikel asli.


Semua orang diundang di bawah potongan


Jadi, visualisasi. Seperti yang kami temukan di komentar pada artikel sebelumnya, bergabung lebih merupakan produk Cartesian daripada persimpangan. Jika Anda melihat bagaimana produk Cartesian diilustrasikan, Anda akan melihat bahwa ini sering berupa tabel persegi panjang, di mana relasi pertama berjalan sepanjang satu sumbu dan yang kedua di sepanjang yang lain. Dengan demikian, elemen-elemen tabel akan menjadi semua kombinasi dari segalanya.


Sulit untuk menggambarnya secara abstrak, jadi itu harus menjadi contoh.


Katakanlah kita memiliki dua tabel. Di salah satu dari mereka


id -- 1 1 6 5 

Di lain:


 id -- 1 1 2 3 5 

Penafian segera: Saya menyebut bidang kata "id" hanya untuk singkat. Banyak di artikel terakhir marah, karena - id diulang, aib. Jangan terlalu khawatir, yah
Bayangkan, misalnya, bahwa ini adalah tabel dengan statistik harian, di mana untuk setiap hari dan setiap pengguna ada data tentang mengunjungi situs. Secara umum, bukan itu intinya.


Jadi, kami ingin mencari tahu apa yang terjadi dengan berbagai tabel bergabung. Mari kita mulai dengan CROSS JOIN:


LINTAS BERGABUNG


 SELECT t1.id, t2.id FROM t1 CROSS JOIN t2 

CROSS JOIN adalah semua kemungkinan kombinasi yang dapat diterima dari dua tabel.


Ini dapat divisualisasikan sebagai berikut: pada sumbu x - satu meja, pada sumbu y - lainnya, semua sel di dalam (disorot dengan warna oranye) - inilah hasilnya



INNER BERGABUNG


INNER JOIN (atau hanya JOIN) adalah CROSS JOIN yang sama yang hanya memiliki elemen-elemen yang memenuhi kondisi yang tertulis dalam konstruk "ON". Perhatikan situasi saat catatan digandakan - akan ada empat hasil dengan unit.


 SELECT t1.id, t2.id FROM t1 INNER JOIN t2 ON t1.id = t2.id 


KIRI BERGABUNG


LEFT OUTER JOIN (atau hanya LEFT JOIN) sama dengan INNER JOIN, tetapi selain itu kami menambahkan null untuk baris dari tabel pertama, yang tidak ditemukan apa pun di tabel kedua


 SELECT t1.id, t2.id FROM t1 LEFT JOIN t2 ON t1.id = t2.id 


BERGABUNG DENGAN BENAR


RIGHT OUTER JOIN (atau RIGHT JOIN) sama dengan LEFT JOIN, kebalikannya. Yaitu ini adalah INNER JOIN + null untuk baris dari tabel kedua, yang tidak ditemukan apa pun di tabel pertama


 SELECT t1.id, t2.id FROM t1 RIGHT JOIN t2 ON t1.id = t2.id 


β†’ Anda dapat bermain dengan permintaan di sini


Kesimpulan


Tampaknya menjadi visualisasi sederhana. Meskipun ada batasan: ini menunjukkan kasus ketika kesetaraan ditulis dalam ON, dan bukan sesuatu yang rumit (ungkapan Boolean). Selain itu, kasus di mana null berada di antara nilai tabel belum dipertimbangkan. Yaitu ini masih beberapa penyederhanaan, tetapi tampaknya telah menjadi lebih baik dan lebih akurat daripada lingkaran Venn.


Berlangganan podcast Zinc Prod kami, tempat kami membahas basis data, pengembangan perangkat lunak, dan hal-hal menarik lainnya.

Source: https://habr.com/ru/post/id450528/


All Articles