Rumah  >  Artikel  >  pangkalan data  >  Cara menggunakan inner join dan left join dalam mysql

Cara menggunakan inner join dan left join dalam mysql

WBOY
WBOYke hadapan
2023-06-01 19:37:25972semak imbas

Perbezaan

Pulangan adalah berbeza
1 Cantuman dalam hanya mengembalikan baris dengan medan cantum yang sama dalam dua jadual
2 atau sama dengan jadual kiri dan Bilangan rekod dalam jadual di sebelah kanan.

Nombor yang berbeza
1. Inner join mengembalikan semua rekod dalam jadual kiri dan rekod dengan medan gabungan yang sama dalam jadual kanan.
2. Bilangan gabungan kiri adalah sama dengan bilangan rekod dalam jadual kiri

Atribut rekod adalah berbeza
1 untuk cantuman dalaman akan dibuang terus
2. Isikan atribut rekod dengan cantuman kiri yang tidak mencukupi dengan NULL

senario cantuman dalaman

Reka bentuk dua jadual:

  • jadual saluran saluran: dengan id saluran , nama saluran, dll.

  • jadual modul modul: id modul, nama modul, id_saluran.

Apabila halaman memaparkan saluran, mungkin terdapat saluran baharu tetapi tiada modul Pada masa ini, inner join tidak boleh digunakan, jika tidak, modul yang baru ditambah tidak boleh ditanya, jadi gunakan kiri sertai

 select channel.* from  channel left join modules on channel.id = modules.channel_id
 where page_id=1
 group by channel.id order by channel.new_sort asc , channel.id desc

1. Page_id merujuk kepada jenis halaman yang ditakrifkan dalam jadual saluran untuk membezakan jenis halaman mana
2. Id saluran mungkin mempunyai berbilang modul untuk dikaitkan, jadi ia perlu dikaitkan dengan id saluran Pengumpulan
3. new_sort boleh menetapkan paparan pengisihan saluran Selain itu, saluran dengan pengisihan yang sama harus dipaparkan terlebih dahulu.

Dalam kes berikut, saluran yang baru dibuat tidak akan dipaparkan dan saluran tanpa modul juga tidak akan dipaparkan.

select channel.*  from channel inner join modules on channel.id=modules.channel_id
where page_id=1 group by channel.id order by channel.new_sort asc , channel.id desc

Akhir sekali: Saya mempunyai sedikit keraguan Saluran ini hanya memaparkan maklumat berkaitan saluran dan tidak menggunakan maklumat modul yang berkaitan, jadi saya rasa ini dapat memenuhi keperluan. Saya akan mengemas kininya jika saya mendapati sebarang masalah kemudian

 select channel.* from  channel
 where page_id=1 order by channel.new_sort asc , channel.id desc

Um~ Untuk menambah masalah, baki masalah di atas ialah id modul perlu ditanya pada halaman, jadi ia berkaitan.

Saya pernah mengalami senario gabungan dalaman sebelum ini, saya akan menambahkannya kemudian~

senario gabungan dalaman

Tambah jadual polisi baharu policy_lib, kemudian buat rekod saluran_dasar jadual perantaraan Saluran saluran dikaitkan dengan jadual dasar policy_lib.
Kemudian jelas sql ditulis seperti ini

select policy_lib.id,channel_policy.policy_id,channel_policy.channel_id,channel.id  from policy_lib inner join channel_policy on channel_policy.policy_id=policy_lib.id 
inner join channel on channel.id=channel_policy.channel_id

Menggunakan inner join, jelas hasil query tidak akan kosong Jika anda menggunakan left join, sekiranya terdapat data kotor dalam jadual, terdapat data di sebelah kiri dan ruang di sebelah kanan, semasa pemprosesan Jelas sekali tidak munasabah untuk perlu mempertimbangkan sama ada anda tersedia semasa berbuat demikian.

Atas ialah kandungan terperinci Cara menggunakan inner join dan left join dalam mysql. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam