


Penggunaan asas mysql left join dan perbezaan antara on dan where
Kata Pengantar
Apabila kami menulis pernyataan SQL, kami tidak boleh mengelak daripada menggunakan kata kunci sambungan, seperti sambungan dalam dan sambungan luar. Terdapat banyak jenis. Saya akan menyiarkan di sini gambar yang saya temui di tempat lain:
Saya rasa gambar ini sangat terperinci Ia menunjukkan penyataan SQL sertai dalam artikel ini sebagai contoh, ditakrifkan dalam talian seperti berikut: Kata kunci LEFT JOIN akan mengembalikan semua baris dari jadual kiri, walaupun tiada baris yang sepadan dalam jadual kanan.
Sebenarnya, secara literal, left join
agak mudah difahami, tetapi masih terdapat beberapa masalah semasa penggunaan, seperti keadaan selepas dan selepas di mana, Hasilnya adalah berbeza akan belajar tentang cantuman kiri dari cetek ke dalam.
Instance
CREATE TABLE `class` ( `class_id` int NOT NULL, `class_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL, `class_grade` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL, PRIMARY KEY (`class_id`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 ROW_FORMAT=COMPACT;
jadual skor:
CREATE TABLE `score` ( `class_id` int NOT NULL, `stu_id` varchar(11) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL, `score` int DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 ROW_FORMAT=COMPACT;
Masing-masing mempunyai data:
S1: pilih c.class_id,c.class_name,c.class_grade,s.stu_id,s.skor daripada kelas c kiri sertai markah s pada c.class_id=s.class_id.
Ayat ini boleh ditulis semula sebagai: Kami menganalisis pernyataan ini Jadual kiri ialah jadual kelas, jadual kanan ialah jadual skor, dan medan berkaitannya ialah class_id. Apabila class_id dalam jadual kiri ialah 1, terdapat dua rekod dalam jadual kanan dengan class_id 1 apabila class_id dalam jadual kiri ialah 2, class_id dalam dua rekod dalam jadual kanan ialah 2; jadual kiri ialah 3, terdapat satu rekod dalam jadual kanan Kelas_id rekod ialah 3, jadi kita harus mendapat lima rekod:
1 语文 A A002 82 1 语文 A A001 91 2 数学 B A002 87 2 数学 B A001 95 3 英语 C B003 65
S2: pilih c.class_id,c.class_name,c.class_grade, s.stu_id,s.skor dari kelas c meninggalkan skor s pada c.class_id=s.class_id dan s.skor=90.
Berdasarkan contoh soalan pertama, yang ini mempunyai syarat tambahan s.skor=90 Ini bermakna medan skor skor jadual yang betul ialah 90, tetapi apabila kita melihat data dalam jadual, kita dapati tiada markah 90 dalam jadual yang betul , ok, adakah keputusan itu kosong? Lagipun, jadual di sebelah kanan tidak mempunyai data yang memenuhi syarat.
Malah, jika anda melaksanakan pernyataan SQL ini, anda akhirnya akan mendapat keputusan, tetapi anda hanya akan mendapat tiga keping data Semua medan dalam jadual kiri dipaparkan, dan semua medan dalam jadual kanan adalah kosong. Ini kerana tiada rekod dalam jadual kanan dengan skor 90, jadi medan dalam jadual kanan kosong.
On menapis data dahulu dan kemudian menyambungkannya, manakala tempat menapis data selepas melakukan pertanyaan berkaitan antara kedua-dua jadual Perbezaan antara on dan where adalah di sini, dan contoh berikut juga akan merangkumi perkara ini dua adalah berbeza.
1 语文 A 2 数学 B 3 英语 C
S3: pilih c.class_id,c.class_name,c.class_grade,s.stu_id,s.skor dari kelas c meninggalkan skor s pada c.class_id=s.class_id di mana c.class_name=&lsquo ;Bahasa Cina’ dan s.skor=90.
Anda perlu memberi perhatian kepada perbezaan antara where dan on, kerana pernyataan ini melibatkan kata kunci where. Hasil pertanyaan sql ini kosong Ini kerana kedua-dua jadual disambungkan untuk menanyakan keputusan terlebih dahulu, dan kemudian ditapis Hasil daripada pertanyaan jadual yang disambungkan ialah tiada rekod padanan class_name=‘中文’ , dan skor=90, jadi Hasil pertanyaan kosong.
S4: pilih c.class_id,c.class_name,c.class_grade,s.stu_id,s.skor daripada kelas c kiri sertai markah s pada c.class_id=s.class_id dan 1=0.
Kami kadangkala menambah 1=1 selepas keadaan di mana SQL, dan 1=0 di sini bermakna perkaitan antara kedua-dua jadual telah gagal, jadi hasilnya hanya akan memaparkan data dari jadual kiri.
1 语文 A null null 2 数学 B null null 3 英语 C null null
S5: pilih c.class_id,c.class_name,c.class_grade,s.stu_id,s.skor daripada kelas c meninggalkan markah sertai s pada 1=0.
Hasil pelaksanaan ini adalah sama seperti pernyataan SQL di atas Malah, semua kandungan jadual kiri dipaparkan.
1 语文 A null null 2 数学 B null null 3 英语 C null null
S6: pilih c.class_id,c.class_name,c.class_grade,s.stu_id,s.skor daripada kelas c meninggalkan skor s pada c.class_id=s.class_id dan c.class_name=&lsquo "Cina".
Ini memerlukan menapis rekod dengan class_name sebagai bahasa dalam jadual kanan Terdapat dua rekod, dan kemudian menyambungkan dua rekod dalam jadual sebelah kiri.
1 语文 A A002 82 1 语文 A A001 91 2 数学 B null null 3 英语 C null null
S7: pilih c.class_id,c.class_name,c.class_grade,s.stu_id,s.skor daripada kelas c meninggalkan markah sertai s pada c.class_id=s.class_id dan c.class_name=&lsquo ;Bahasa Inggeris’.
Analisis soalan yang sama seperti yang sebelumnya (hasil di kawasan kosong adalah batal):
1 语文 A 2 数学 B 3 英语 C B003 65
S8: pilih c.class_id,c.class_name,c.class_grade,s.stu_id ,s.skor daripada kelas c meninggalkan sertai markah s pada c.class_id=s.class_id dan c.class_name=‘体育’.
Tiada data dalam jadual kanan dan nama_kelas adalah sukan, jadi jadual kanan kosong dan semua data dalam jadual kiri dipaparkan Medan yang sepadan dalam jadual kanan kosong:
1 语文 A 2 数学 B 3 英语 C
S9: pilih c .class_id,c.class_name,c.class_grade,s.stu_id,s.skor dari kelas c kiri sertai markah s pada c.class_id=s.class_id dan c.class_name=‘中文&rsquo ; dan s.skor=91.
右表中只有一条记录的score为91,所以需要拿左表与右表的这一条数据进行关联,左表只有语文可以与右表的那一条数据对上,所以结果为:
1 语文 A A001 91 2 数学 B 3 英语 C
Q10:select c.class_id,c.class_name,c.class_grade,s.stu_id,s.score from class c left join score s on c.class_id=s.class_id and c.class_name=‘体育’ and s.score=90。
右表中没有数据的score为90,同样左表中也没有class_name为体育,但是这并不意味着最后的结果就是空了,只要没有where条件,最终的结果数量最起码也会是左表中原先的数据数量,所以这条sql会返回左表的全部数据。
1 语文 A 2 数学 B 3 英语 C
Q11:select c.class_id,c.class_name,c.class_grade,s.stu_id,s.score from class c left join score s on c.class_id=s.class_id where c.class_name=‘英语’。
需要注意的点:条件是在where中的,也就是在表关联之后,再进行过滤的,所以最终的结果只会有一条:
3 英语 C B003 65
Q12:select c.class_id,c.class_name,c.class_grade,s.stu_id,s.score from class c left join score s on c.class_id=s.class_id where s.score=91。
和上面一样,是在连表查询之后,找出score=90的数据:
1 语文 A A001 91
Q12;select c.class_id,c.class_name,c.class_grade,s.stu_id,s.score from class c left join score s on c.class_id=s.class_id where c.class_name=‘语文’ and s.score=91。
我们将两表连接查询后,找出结果中class_name为语文,score为91的记录,只有一条:
1 语文 A A001 91
Atas ialah kandungan terperinci Penggunaan asas mysql left join dan perbezaan antara on dan where. 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

AI Hentai Generator
Menjana ai hentai secara percuma.

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



MySQL sesuai untuk pemula kerana mudah dipasang, kuat dan mudah untuk menguruskan data. 1. Pemasangan dan konfigurasi mudah, sesuai untuk pelbagai sistem operasi. 2. Menyokong operasi asas seperti membuat pangkalan data dan jadual, memasukkan, menanyakan, mengemas kini dan memadam data. 3. Menyediakan fungsi lanjutan seperti menyertai operasi dan subqueries. 4. Prestasi boleh ditingkatkan melalui pengindeksan, pengoptimuman pertanyaan dan pembahagian jadual. 5. Sokongan sokongan, pemulihan dan langkah keselamatan untuk memastikan keselamatan data dan konsistensi.

Navicat sendiri tidak menyimpan kata laluan pangkalan data, dan hanya boleh mengambil kata laluan yang disulitkan. Penyelesaian: 1. Periksa Pengurus Kata Laluan; 2. Semak fungsi "Ingat Kata Laluan" Navicat; 3. Tetapkan semula kata laluan pangkalan data; 4. Hubungi pentadbir pangkalan data.

Buat pangkalan data menggunakan Navicat Premium: Sambungkan ke pelayan pangkalan data dan masukkan parameter sambungan. Klik kanan pada pelayan dan pilih Buat Pangkalan Data. Masukkan nama pangkalan data baru dan set aksara yang ditentukan dan pengumpulan. Sambung ke pangkalan data baru dan buat jadual dalam penyemak imbas objek. Klik kanan di atas meja dan pilih masukkan data untuk memasukkan data.

Navicat untuk MariaDB tidak dapat melihat kata laluan pangkalan data secara langsung kerana kata laluan disimpan dalam bentuk yang disulitkan. Untuk memastikan keselamatan pangkalan data, terdapat tiga cara untuk menetapkan semula kata laluan anda: Tetapkan semula kata laluan anda melalui Navicat dan tetapkan kata laluan yang kompleks. Lihat fail konfigurasi (tidak disyorkan, risiko tinggi). Gunakan alat baris perintah sistem (tidak disyorkan, anda perlu mahir dalam alat baris arahan).

MySQL adalah sistem pengurusan pangkalan data sumber terbuka. 1) Buat Pangkalan Data dan Jadual: Gunakan perintah Createdatabase dan Createtable. 2) Operasi Asas: Masukkan, Kemas kini, Padam dan Pilih. 3) Operasi lanjutan: Sertai, subquery dan pemprosesan transaksi. 4) Kemahiran Debugging: Semak sintaks, jenis data dan keizinan. 5) Cadangan Pengoptimuman: Gunakan indeks, elakkan pilih* dan gunakan transaksi.

Langkah -langkah untuk melaksanakan SQL di Navicat: Sambungkan ke pangkalan data. Buat tetingkap editor SQL. Tulis pertanyaan SQL atau skrip. Klik butang Run untuk melaksanakan pertanyaan atau skrip. Lihat hasilnya (jika pertanyaan dilaksanakan).

Anda boleh membuat sambungan MySQL baru di Navicat dengan mengikuti langkah -langkah: Buka aplikasi dan pilih Sambungan Baru (Ctrl N). Pilih "MySQL" sebagai jenis sambungan. Masukkan nama host/alamat IP, port, nama pengguna, dan kata laluan. (Pilihan) Konfigurasikan pilihan lanjutan. Simpan sambungan dan masukkan nama sambungan.

Alasan Biasa Mengapa Navicat tidak dapat menyambung ke pangkalan data dan penyelesaiannya: 1. Periksa status berjalan pelayan; 2. Periksa maklumat sambungan; 3. Laraskan tetapan firewall; 4. Konfigurasi akses jauh; 5. menyelesaikan masalah rangkaian; 6. Periksa keizinan; 7. Memastikan keserasian versi; 8. menyelesaikan masalah lain.
