SQL Self-Join

Sql Self Join



Salah satu ciri pangkalan data hubungan yang paling terkenal ialah gabungan. Gabungan adalah salah satu ciri paling berkuasa dan kompleks pangkalan data hubungan. Mereka membenarkan modulariti yang meluas dan hubungan yang sangat kompleks antara jadual pangkalan data tanpa menjejaskan prestasi.

Walau bagaimanapun, terdapat jenis gabungan dalam SQL yang cenderung berada di bawah radar yang dikenali sebagai gabungan sendiri.

Dalam SQL, cantuman sendiri ialah teknik berkuasa yang membolehkan kami menggabungkan baris daripada jadual yang sama berdasarkan lajur yang berkaitan dalam jadual yang sama.







Tidak seperti jenis cantuman lain dalam SQL di mana kita mengambil data daripada berbilang jadual, cantuman sendiri berfungsi pada satu jadual.



Anda mungkin tertanya-tanya, mengapa saya memerlukan penyertaan sendiri apabila saya boleh mencari data daripada jadual itu sendiri? Walaupun itu mungkin benar, penyertaan sendiri boleh membantu dalam tugas apabila anda perlu melakukan pertanyaan data rekursif atau mencari data hierarki.



Pada asasnya, penyertaan sendiri memainkan peranan asas di mana anda perlu membandingkan baris jadual yang sama.





Sertai kami dalam siaran ini sambil kami meneroka apa itu sambung sendiri, cara ia berfungsi dan cara kami boleh menggunakannya dalam jadual SQL.

NOTA: Sebelum kita menyelam, kita akan menyediakan jadual asas untuk tujuan demonstrasi. Walau bagaimanapun, anda berasa ingin menggunakan mana-mana set data yang disokong.



Data Sampel

Pertanyaan berikut mencipta jadual asas yang mengandungi maklumat produk dan memasukkan rekod sampel ke dalam jadual. Ini membolehkan kami menunjukkan cara untuk bekerja dengan gabungan sendiri dalam SQL.

CIPTA Produk JADUAL (
product_id INT PRIMARY KUNCI,
nama_produk VARCHAR(255) BUKAN NULL,
parent_id INT
);

Tambahkan 10 sampel rekod ke dalam jadual.

INSERT IN TO Products (product_id, product_name, parent_id) NILAI
(1, 'Elektronik', NULL),
(2, 'Telefon Pintar', 1),
(3, 'Komputer riba', 1),
(4, 'iPhone 13', 2),
(5, 'Samsung Galaxy S21', 2),
(6, 'MacBook Pro', 3),
(7, 'Dell XPS 15', 3),
(8, 'Aksesori', NULL),
(9, 'Sarung Telefon', 8),
(10, 'Beg Komputer Riba', 8);

Jadual yang terhasil adalah seperti berikut:

Contoh 1: Asas Gabungan Diri

Mari kita mulakan dengan asas penyertaan diri. Sebagai contoh, kita boleh menggunakan sambung diri yang mudah untuk mendapatkan semula hubungan ibu bapa-anak jadual yang sama.

Sebagai contoh, kita boleh menggunakannya untuk mencari semua produk dan produk induk yang sepadan. Kita boleh menjalankan pertanyaan seperti berikut:

PILIH c.nama_produk SEBAGAI produk_anak, p.nama_produk SEBAGAI produk_induk
DARIPADA Produk c
KIRI SERTAI Produk p ON c.parent_id = p.product_id;

Dalam contoh pertanyaan yang diberikan, kami menggunakan 'c' sebagai alias untuk jadual produk yang mewakili produk kanak-kanak.

Kami juga mencipta alias 'p' untuk jadual produk untuk mewakili produk induk.

Dalam langkah seterusnya, kami menggunakan SQL LEFT JOIN asas untuk memastikan bahawa produk peringkat teratas disertakan dalam hasilnya.

Akhir sekali, kami menggunakan klausa HIDUP untuk mencipta perhubungan antara rekod anak dan ibu bapa menggunakan lajur 'id_ibu bapa' dan 'id_produk'.

Jadual yang terhasil adalah seperti berikut:

Anda akan mendapati bahawa produk induk tidak mempunyai pautan teratas kerana ia berada di bahagian atas hierarki yang juga dikenali sebagai elemen akar.

Contoh 2: Ambil Data Hierarki

Salah satu peranan paling asas untuk menyertai diri sendiri ialah mendapatkan semula data hierarki. Sebagai contoh, katakan kami ingin mendapatkan semula semua produk kanak-kanak yang produknya sama dengan 'Aksesori'. Kita boleh menjalankan pertanyaan menggunakan join sendiri seperti berikut:

PILIH c.nama_produk SEBAGAI produk_anak
DARIPADA Produk c
SERTAI Produk p ON c.parent_id = p.product_id
WHERE p.product_name = 'Aksesori';

Dalam kes ini, kami menggunakan JOIN untuk menggabungkan jadual produk dengan dirinya sendiri dan kemudian menggunakan klausa WHERE untuk menapis hasil yang kami mahu.

Kesimpulan

Dalam tutorial ini, kami meneroka apa itu self-join, cara ia berfungsi dan cara kami boleh menggunakannya dalam jadual SQL untuk mendapatkan semula data hierarki atau melakukan pertanyaan rekursif.