3 lagi menyertai anda harus biasa
- 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>
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
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!

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

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas











JWT adalah standard terbuka berdasarkan JSON, yang digunakan untuk menghantar maklumat secara selamat antara pihak, terutamanya untuk pengesahan identiti dan pertukaran maklumat. 1. JWT terdiri daripada tiga bahagian: header, muatan dan tandatangan. 2. Prinsip kerja JWT termasuk tiga langkah: menjana JWT, mengesahkan JWT dan muatan parsing. 3. Apabila menggunakan JWT untuk pengesahan di PHP, JWT boleh dijana dan disahkan, dan peranan pengguna dan maklumat kebenaran boleh dimasukkan dalam penggunaan lanjutan. 4. Kesilapan umum termasuk kegagalan pengesahan tandatangan, tamat tempoh, dan muatan besar. Kemahiran penyahpepijatan termasuk menggunakan alat debugging dan pembalakan. 5. Pengoptimuman prestasi dan amalan terbaik termasuk menggunakan algoritma tandatangan yang sesuai, menetapkan tempoh kesahihan dengan munasabah,

Sesi rampasan boleh dicapai melalui langkah -langkah berikut: 1. Dapatkan ID Sesi, 2. Gunakan ID Sesi, 3. Simpan sesi aktif. Kaedah untuk mengelakkan rampasan sesi dalam PHP termasuk: 1. Gunakan fungsi Sesi_Regenerate_ID () untuk menjana semula ID Sesi, 2. Data sesi stor melalui pangkalan data, 3.

Prinsip reka bentuk Restapi termasuk definisi sumber, reka bentuk URI, penggunaan kaedah HTTP, penggunaan kod status, kawalan versi, dan benci. 1. Sumber harus diwakili oleh kata nama dan dikekalkan pada hierarki. 2. Kaedah HTTP harus mematuhi semantik mereka, seperti GET digunakan untuk mendapatkan sumber. 3. Kod status hendaklah digunakan dengan betul, seperti 404 bermakna sumber tidak wujud. 4. Kawalan versi boleh dilaksanakan melalui URI atau header. 5. Boots Operasi Pelanggan Hateoas melalui pautan sebagai tindak balas.

Fungsi utama kelas tanpa nama dalam PHP adalah untuk membuat objek satu kali. 1. Kelas tanpa nama membenarkan kelas tanpa nama ditakrifkan secara langsung dalam kod, yang sesuai untuk keperluan sementara. 2. Mereka boleh mewarisi kelas atau melaksanakan antara muka untuk meningkatkan fleksibiliti. 3. Beri perhatian kepada prestasi dan kebolehbacaan kod apabila menggunakannya, dan elakkan berulang kali menentukan kelas tanpa nama yang sama.

Dalam PHP, pengendalian pengecualian dicapai melalui percubaan, menangkap, akhirnya, dan membuang kata kunci. 1) blok percubaan mengelilingi kod yang boleh membuang pengecualian; 2) Blok tangkapan mengendalikan pengecualian; 3) Akhirnya Blok memastikan bahawa kod itu sentiasa dilaksanakan; 4) Lemparan digunakan untuk membuang pengecualian secara manual. Mekanisme ini membantu meningkatkan keteguhan dan mengekalkan kod anda.

Terdapat empat jenis kesilapan utama dalam PHP: 1.Notice: yang paling sedikit, tidak akan mengganggu program, seperti mengakses pembolehubah yang tidak ditentukan; 2. Amaran: Serius daripada notis, tidak akan menamatkan program, seperti tidak mengandungi fail; 3. FatalError: Yang paling serius, akan menamatkan program ini, seperti tidak memanggil fungsi; 4. ParseError: Kesalahan sintaks, akan menghalang program daripada dilaksanakan, seperti lupa untuk menambah tag akhir.

Dalam PHP, perbezaan antara termasuk, memerlukan, termasuk_once, memerlukan_once adalah: 1) termasuk menghasilkan amaran dan terus melaksanakan, 2) memerlukan menghasilkan ralat maut dan berhenti pelaksanaan, 3) termasuk_once dan memerlukan_once mencegah kemasukan berulang. Pilihan fungsi ini bergantung kepada kepentingan fail dan sama ada perlu untuk mencegah kemasukan pendua. Penggunaan rasional dapat meningkatkan kebolehbacaan dan pemeliharaan kod.

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.
