- Artikel menerangkan penggunaan gabungan kiri, gabungan kanan, gabungan dalaman, dan gabungan luar di SQL, menggunakan contoh mudah pangkalan data pinjaman buku dengan dua jadual: pelanggan dan buku.
- Konsep 'kiri' dan 'kanan' dalam SQL bergabung dijelaskan sebagai tidak lebih daripada perintah sumber. Jadual yang disebutkan sebelum kata kunci gabungan adalah meja 'kiri' dan yang selepas itu adalah jadual 'kanan'.
- Artikel memperkenalkan konsep bergabung dengan pengecualian, yang berguna untuk pertanyaan yang termasuk perkataan 'tidak' atau 'tidak'. Ini bergabung menggunakan klausa WHERE untuk mengecualikan data, khususnya apabila mencari nilai null.
- Sertai luar dengan pengecualian digambarkan sebagai berguna untuk memilih data tanpa sambungan antara jadual, walaupun ia tidak disokong dalam MySQL.
- Ia ditekankan bahawa klausa di mana harus selalu digunakan terhadap bidang yang tidak boleh mempunyai batal sebagai nilai sebenar mereka. Juga, diperhatikan bahawa Cross Join adalah gabungan unik yang sepadan dengan setiap baris dalam Jadual A ke setiap baris dalam Jadual B.
mari rekap ini cepat. Gambar dua jadual, satu untuk pelanggan dan satu untuk buku untuk menubuhkan pangkalan data pinjaman buku.
Jadual Pelanggan
id
id
Jadual pelanggan mempunyai satu baris untuk setiap pelanggan yang hanya boleh mempunyai satu buku yang dipinjamkan pada satu masa. Sekiranya mereka tidak mempunyai buku yang dipinjam, book_id akan menjadi 0 atau rentetan kosong.
ini adalah contoh yang sangat mudah untuk membuat gabungan yang jelas untuk difahami!
Sertai kiri di sini akan berada dalam kes yang anda ingin tanya soalan seperti "
Tunjukkan kepada saya semua pelanggan termasuk mana -mana buku yang dipinjam."
Anda dapat melihat dalam imej bahawa semua data dalam bulatan kiri, atau jadual, dimasukkan ke dalam set hasil. Hanya data yang bertindih dari jadual buku dimasukkan dari jadual yang betul. Ini bermakna bahawa dengan gabungan kiri, beberapa data dalam jadual yang betul boleh dikecualikan.
tunjukkan kepada saya semua buku di perpustakaan saya, bersama -sama dengan mana -mana pelanggan yang telah meminjamnya.
"
Dalam imej ini, anda melihat bahawa semua data dalam jadual yang betul dimasukkan ke dalam set hasil. Hanya data yang bertindih dari jadual pelanggan dimasukkan. Ini bermakna dengan gabungan yang betul, beberapa data di meja kiri boleh dikecualikan.
Sebuah gabungan luar akan seperti bertanya " tunjukkan kepada saya semua pinjaman dan semua buku, tanpa mengira hubungan antara mereka. "
Sertai dalaman akan seperti bertanya "
hanya tunjukkan pelanggan dengan pinjaman. "
di sini anda dapat melihat bahawa data boleh dikecualikan dari kedua -dua jadual kiri dan kanan. Anda tidak akan melihat mana -mana pelanggan jika mereka tidak mempunyai buku, dan anda tidak akan melihat mana -mana buku jika mereka tidak dipinjamkan!
Ini adalah jenis data yang paling biasa dan merupakan tingkah laku lalai apabila menggunakan kata kunci bergabung dengan sendirinya. Kata tambahan "dalaman" biasanya tidak diperlukan.
Apa maksud "kiri" dan "betul"?
Anda boleh memikirkan "kiri" dan "kanan" sebagai tidak lebih daripada urutan sumber. Lihat pertanyaan ini:
Perhatikan bahawa saya menyebutkan pelanggan jadual sebelum saya menggunakan kata kunci Join. Ini bermakna pelanggan adalah meja "kiri" saya. Satu lagi cara berfikir mengenainya ialah bertanya jadual mana yang tersisa dari kata kunci gabungan, dan yang berada di sebelah kanannya.
<span>SELECT * </span><span>FROM customers </span><span>LEFT JOIN books </span><span>ON customers.book_id = books.id </span>
Beberapa kaveat:
Hanya kerana satu jadual adalah "kiri", tidak bermakna anda memilih semua rekodnya. Ini adalah fungsi gabungan kiri atau kanan menyertai, bukan perintah sumber!
- Jadual yang kiri akan mempunyai lajur yang disenaraikan terlebih dahulu dalam set hasil melainkan anda secara khusus memilih lajur di bahagian Pilih.
- urutan jadual selepas kata kunci tidak penting, ia akan mengembalikan hasil yang sama jika ditukar.
- Cukup mengkaji semula. Apakah gabungan baru ini?
Nah, mereka bukan "baru", mereka hanya satu cara untuk menanyakan soalan tambahan. Bagaimanakah anda dapat mencari jawapan kepada soalan dengan perkataan "tidak" atau "tidak" dalam pertanyaan?
Tunjukkan kepada saya semua pelanggan yang tidak mempunyai buku yang dipinjam.
Tunjukkan kepada saya semua buku yang tidak dipinjamkan.
Kiri bergabung dengan pengecualian
Lihat grafik ini. Perhatikan perbezaan dari yang di atas di kawasan yang berlorek.
Ini kelihatan seperti gabungan kiri, tetapi tidak lagi mempunyai data "bertindih". Kenapa? Ini sama seperti bertanya " tunjukkan kepada saya pelanggan yang tidak mempunyai buku yang dipinjam. Jika anda pandai, anda mungkin fikir anda hanya boleh mencari jadual pelanggan untuk book_id 0 untuk melakukan perkara yang sama. Itu akan berfungsi dalam contoh ini tetapi kebanyakan masa ia tidak akan; ia bergantung pada bagaimana jadual anda direka.
pertanyaan kelihatan seperti ini:
Kami kini telah memasukkan klausa di mana. Bila -bila masa anda mempunyai klausa WHERE, anda tidak termasuk data
<span>SELECT * </span><span>FROM customers </span><span>LEFT JOIN books </span><span>ON customers.book_id = books.id </span>, atau menapisnya, hampir seperti carian. Jadi mengapa kita mencari books.id menjadi batal? Mengapa itu akan menjadi batal? Mari kita jalankan standard kiri menyertai dan lihat data yang dikembalikan, kita akan mendapat jawapan:
ditinggalkan gabungan data pulangan
id
firstNameJika kita bertanya soalan "
Tunjukkan kepada saya pelanggan tanpa buku mengenai pinjaman ", kini masuk akal untuk dicari. Kami hanya perlu memilih pelanggan di mana kita melihat NULL untuk lajur Books.id (apabila disertai, akan dilabelkan ID1 kerana terdapat dua lajur bernama "ID"). Kami melakukan ini dengan standard di mana klausa jika kita menambah di mana books.id adalah batal. Sekarang hasilnya ditapis hanya ini:
id firstName
LastName
Sertai hak normal akan mengembalikan setiap buku tanpa mengira sama ada ia dipinjamkan, set hasilnya akan kelihatan seperti ini:
Perhatikan semua lajur yang sepadan dari jadual pelanggan adalah batal untuk wanita kecil dan Tom Sawyer kerana tiada siapa yang meminjam tajuk tersebut sehingga tidak ada data bertindih.
Jika kita mahu memilih semua buku yang tidak dipinjamkan, kita hanya menggunakan klausa WHERE untuk mencari "NULL" dalam lajur Pelanggan.ID.
Hasilnya harus diramalkan. Kami hanya mendapat buku yang tidak dipinjamkan.
<span>SELECT * </span><span>FROM customers </span><span>LEFT JOIN books </span><span>ON customers.book_id = books.id </span>
id
Sertai pelik seperti ini mungkin berguna dalam kes -kes di mana anda benar -benar perlu memilih data tanpa sambungan antara jadual. Mungkin anda sedang memburu data yatim atau mencari ketidakkonsistenan dalam beberapa pangkalan data lama yang anda tukar.
Malah, jenis gabungan ini sangat pelik sehingga anda tidak dapat melakukannya di MySQL, ia tidak menyokong gabungan luar. SQL biasa tidak, dan pertanyaan akan kelihatan seperti ini (MSSQL bukan MySQL):
Hasil pertanyaan ini akan mengembalikan data mencari sesuatu seperti ini:
<span>SELECT *
</span><span>FROM customers
</span><span>LEFT JOIN books
</span><span>ON customers.book_id = books.id
</span>WHERE books.id IS NULL
id firstName
Pemikiran Lain
anda harus sentiasa menggunakan klausa di mana anda terhadap bidang yang tidak boleh mempunyai NULL sebagai nilai sebenar mereka! Kami sentiasa diuji terhadap medan ID yang tidak boleh mempunyai batal sebagai nilai. Bayangkan jika jadual buku kami mempunyai medan ISBN yang membenarkan batal. Jika kami diuji untuk NULL menggunakan medan itu , ia termasuk baris yang mungkin tidak kami mahukan!
Terdapat satu lagi gabungan yang dipanggil Salib Sertai yang juga pelik dan unik. Bayangkan bukan hanya sepadan dengan satu pengguna ke satu buku, setiap pengguna dipadankan dengan setiap buku! Ya, ini bermakna jika anda mempunyai 20 buku dan 30 pelanggan, silang silang akan menghasilkan 30*20 baris data! Sebagai contoh bagaimana ini boleh berguna, lihat artikel ini.
Perhatikan bahawa dalam MySQL, gabungan, gabungan dalaman, dan silang bersambung adalah setara sintaksis dan boleh menggantikan satu sama lain. Ini kerana Join dan Inner Join melakukan perkara yang sama dan mesti menggunakan kata kunci On untuk memadankan lajur. Apabila menggunakan Salib Bergabung, tidak ada kata kunci, kerana ia sepadan dengan setiap baris dalam Jadual A ke setiap baris dalam Jadual B.
Kesimpulan
Saya harap ini lebih banyak bergabung dengan anda. Fikirkan tentang menggunakannya bila -bila masa anda meminta data antara jadual di mana sesuatu "tidak" sepadan dengan yang lain.
- "Cari semua pelanggan yang belum dipesan sebelum ini".
- "Cari semua pelanggan tidak dalam senarai hitam".
- "Cari semua produk yang belum dijual".
- "Cari semua pelanggan yang tidak meminjam buku".
- "Cari semua anjing yang belum berjalan akhir -akhir ini".
- "Cari pekerja yang tidak pernah menghantar dalam tiket sokongan".
dengan tingkah laku gabungan biasa. Jadi ... adakah anda pernah memerlukan silang silang? Mana -mana kes penggunaan khusus yang anda ingin beritahu kami atau mahu kami menutup? Marilah kita tahu! Soalan Lazim (Soalan Lazim) Mengenai SQL Bergabung
Apakah jenis SQL yang berlainan dan bagaimana mereka berbeza antara satu sama lain? Terdapat empat jenis asas SQL bergabung: gabungan dalaman, meninggalkan gabungan, gabungan kanan, dan gabungan penuh. Inner Join Returns Records yang mempunyai nilai yang sepadan dalam kedua -dua jadual. Kiri Join Returns semua rekod dari meja kiri, dan rekod yang dipadankan dari meja kanan. Sertai kanan mengembalikan semua rekod dari meja kanan, dan rekod yang dipadankan dari meja kiri. Penuh sertai mengembalikan semua rekod apabila terdapat perlawanan di meja kiri atau kanan.
Bagaimana saya menggunakan pelbagai gabungan dalam SQL?
Pelbagai gabungan boleh digunakan dalam SQL dengan hanya menambah lebih banyak penyataan gabungan dalam pertanyaan SQL anda. Setiap penyataan gabungan mesti mempunyai klausa sendiri yang menentukan syarat -syarat untuk menyertai. Perintah penyataan gabungan dalam pertanyaan anda dapat mempengaruhi hasilnya, jadi penting untuk mempertimbangkan logik pertanyaan anda dengan teliti ketika menggunakan pelbagai bergabung. ? Ini dilakukan dengan menggunakan dua penyataan gabungan dalam pertanyaan SQL anda. Kenyataan gabungan pertama menggabungkan dua jadual pertama, dan pernyataan gabungan kedua menggabungkan hasil gabungan pertama dengan jadual ketiga. Perintah penyataan gabungan dan syarat -syarat yang dinyatakan dalam klausa ON menentukan bagaimana jadual digabungkan. Perbezaan antara gabungan kiri dan gabungan yang betul di SQL adalah urutan di mana jadual disertai dan hasil yang dikembalikan. Sertai kiri mengembalikan semua rekod dari meja kiri dan rekod yang dipadankan dari meja kanan. Sekiranya tidak ada perlawanan, hasilnya adalah batal di sebelah kanan. Sebaliknya, gabungan kanan mengembalikan semua rekod dari meja kanan dan rekod yang dipadankan dari meja kiri. Sekiranya tidak ada perlawanan, hasilnya adalah batal di sebelah kiri.
Bagaimana saya boleh memvisualisasikan SQL bergabung? Setiap bulatan dalam rajah mewakili jadual. Kawasan di mana lingkaran bertindih mewakili rekod yang dikembalikan oleh gabungan itu. Untuk gabungan dalaman, hanya kawasan bertindih yang ditunjukkan. Untuk menyertai kiri, semua bulatan kiri dan kawasan bertindih ditunjukkan. Untuk menyertai yang betul, semua bulatan yang betul dan kawasan bertindih ditunjukkan. Untuk menyertai penuh, seluruh kawasan kedua -dua lingkaran ditunjukkan. adalah perlawanan di sebelah kiri atau meja kanan. Sekiranya tidak ada perlawanan, hasilnya adalah batal di kedua -dua belah pihak. Jenis gabungan ini berguna apabila anda ingin mengekalkan semua rekod dari kedua -dua jadual, walaupun tidak ada perlawanan antara lajur yang disatukan. 🎜> Ya, anda boleh menggunakan SQL bergabung dengan lebih daripada dua jadual. Ini dilakukan dengan menggunakan pelbagai penyataan gabungan dalam pertanyaan SQL anda. Setiap penyataan gabungan menggabungkan dua jadual, jadi untuk menyertai tiga jadual, anda akan menggunakan dua penyataan gabungan, untuk menyertai empat jadual, anda akan menggunakan tiga penyataan gabungan, dan sebagainya.
Apakah kesan prestasi menggunakan pelbagai gabungan dalam SQL?
Menggunakan pelbagai gabungan dalam SQL boleh memberi impak yang signifikan terhadap prestasi pertanyaan, terutamanya jika jadual yang disertai mempunyai sejumlah besar rekod. Setiap operasi menyertai memerlukan kuasa dan memori pemprosesan, jadi semakin banyak gabungan yang anda ada dalam pertanyaan anda, lebih banyak sumber yang diperlukan untuk melaksanakan pertanyaan. Walau bagaimanapun, kesan prestasi dapat dikurangkan dengan menggunakan indeks, mengoptimumkan pertanyaan anda, dan menggunakan perkakasan yang sesuai. Pertanyaan SQL anda yang menggunakan bergabung. Salah satu cara ialah menggunakan indeks pada lajur yang sedang bergabung. Ini dapat mempercepatkan operasi gabungan dengan ketara. Cara lain adalah untuk mengehadkan bilangan rekod yang dikembalikan oleh pertanyaan dengan menggunakan klausa WHERE. Juga, perintah penyataan gabungan dalam pertanyaan anda boleh menjejaskan prestasi, jadi penting untuk mempertimbangkan dengan teliti logik pertanyaan anda. > Beberapa kesilapan biasa untuk dielakkan apabila menggunakan SQL bergabung termasuk lupa untuk menentukan klausa On, yang boleh mengakibatkan produk Cartesian, menyertai lajur yang tidak diindeks, yang dapat melambatkan prestasi pertanyaan, dan menggunakan jenis gabungan yang salah, yang boleh mengakibatkan keputusan yang tidak betul. Ia juga penting untuk diingat bahawa perintah penyataan gabungan dalam pertanyaan anda boleh menjejaskan hasilnya, jadi penting untuk mempertimbangkan dengan teliti logik pertanyaan anda.
Atas ialah kandungan terperinci 3 lagi menyertai anda harus biasa. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

PHP digunakan untuk membina laman web dinamik, dan fungsi terasnya termasuk: 1. Menjana kandungan dinamik dan menghasilkan laman web secara real time dengan menyambung dengan pangkalan data; 2. Proses Interaksi Pengguna dan Penyerahan Bentuk, Sahkan Input dan Menanggapi Operasi; 3. Menguruskan sesi dan pengesahan pengguna untuk memberikan pengalaman yang diperibadikan; 4. Mengoptimumkan prestasi dan ikuti amalan terbaik untuk meningkatkan kecekapan dan keselamatan laman web.

PHP menggunakan sambungan MySQLI dan PDO untuk berinteraksi dalam operasi pangkalan data dan pemprosesan logik sisi pelayan, dan memproses logik sisi pelayan melalui fungsi seperti pengurusan sesi. 1) Gunakan MySQLI atau PDO untuk menyambung ke pangkalan data dan laksanakan pertanyaan SQL. 2) Mengendalikan permintaan HTTP dan status pengguna melalui pengurusan sesi dan fungsi lain. 3) Gunakan urus niaga untuk memastikan atomik operasi pangkalan data. 4) Mencegah suntikan SQL, gunakan pengendalian pengecualian dan sambungan penutup untuk debugging. 5) Mengoptimumkan prestasi melalui pengindeksan dan cache, tulis kod yang sangat mudah dibaca dan lakukan pengendalian ralat.

Menggunakan penyataan preprocessing dan PDO dalam PHP secara berkesan dapat mencegah serangan suntikan SQL. 1) Gunakan PDO untuk menyambung ke pangkalan data dan tetapkan mod ralat. 2) Buat kenyataan pra -proses melalui kaedah menyediakan dan lulus data menggunakan ruang letak dan laksanakan kaedah. 3) Hasil pertanyaan proses dan pastikan keselamatan dan prestasi kod.

PHP dan Python mempunyai kelebihan dan kekurangan mereka sendiri, dan pilihannya bergantung kepada keperluan projek dan keutamaan peribadi. 1.PHP sesuai untuk pembangunan pesat dan penyelenggaraan aplikasi web berskala besar. 2. Python menguasai bidang sains data dan pembelajaran mesin.

PHP digunakan secara meluas dalam e-dagang, sistem pengurusan kandungan dan pembangunan API. 1) e-dagang: Digunakan untuk fungsi keranjang belanja dan pemprosesan pembayaran. 2) Sistem Pengurusan Kandungan: Digunakan untuk penjanaan kandungan dinamik dan pengurusan pengguna. 3) Pembangunan API: Digunakan untuk Pembangunan API RESTful dan Keselamatan API. Melalui pengoptimuman prestasi dan amalan terbaik, kecekapan dan pemeliharaan aplikasi PHP bertambah baik.

PHP menjadikannya mudah untuk membuat kandungan web interaktif. 1) Secara dinamik menjana kandungan dengan memasukkan HTML dan paparkannya dalam masa nyata berdasarkan input pengguna atau data pangkalan data. 2) Penyerahan borang proses dan menjana output dinamik untuk memastikan bahawa htmlspecialchars digunakan untuk mencegah XSS. 3) Gunakan MySQL untuk membuat sistem pendaftaran pengguna, dan gunakan kata laluan dan preprocessing untuk meningkatkan keselamatan. Menguasai teknik ini akan meningkatkan kecekapan pembangunan web.

PHP dan Python masing -masing mempunyai kelebihan mereka sendiri, dan memilih mengikut keperluan projek. 1.PHP sesuai untuk pembangunan web, terutamanya untuk pembangunan pesat dan penyelenggaraan laman web. 2. Python sesuai untuk sains data, pembelajaran mesin dan kecerdasan buatan, dengan sintaks ringkas dan sesuai untuk pemula.

PHP masih dinamik dan masih menduduki kedudukan penting dalam bidang pengaturcaraan moden. 1) kesederhanaan PHP dan sokongan komuniti yang kuat menjadikannya digunakan secara meluas dalam pembangunan web; 2) fleksibiliti dan kestabilannya menjadikannya cemerlang dalam mengendalikan borang web, operasi pangkalan data dan pemprosesan fail; 3) PHP sentiasa berkembang dan mengoptimumkan, sesuai untuk pemula dan pemaju yang berpengalaman.


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Muat turun versi mac editor Atom
Editor sumber terbuka yang paling popular

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

ZendStudio 13.5.1 Mac
Persekitaran pembangunan bersepadu PHP yang berkuasa

VSCode Windows 64-bit Muat Turun
Editor IDE percuma dan berkuasa yang dilancarkan oleh Microsoft

Versi Mac WebStorm
Alat pembangunan JavaScript yang berguna