Dalam mysql, pertanyaan bersarang mewakili pertanyaan yang menempatkan pernyataan SELECT lain dalam klausa WHERE atau klausa HAVING bagi pernyataan SELECT )".
Persekitaran pengendalian tutorial ini: sistem Windows 10, versi mysql8.0.22, komputer Dell G3.
Pertanyaan bersarang
Definisi: Blok pernyataan pertanyaan dalaman (pilih-dari-mana) boleh disarangkan di dalam pertanyaan luar lain Di tempat klausa blok pertanyaan lapisan, pertanyaan luar juga dipanggil pertanyaan induk dan pertanyaan utama. Pertanyaan dalaman juga dipanggil subkueri, daripada pertanyaan. Subkueri biasanya tidak menggunakan susunan mengikut klausa dan hanya boleh mengisih hasil pertanyaan akhir.
Takrifan lain: Pertanyaan yang menyusun pernyataan SELECT lain dalam klausa WHERE atau klausa HAVING bagi pernyataan SELECT dipanggil pertanyaan bersarang, juga dikenali sebagai subkueri.
Cara pertanyaan bersarang berfungsi ialah: pertanyaan dalaman diproses terlebih dahulu, dari dalam ke luar Pertanyaan luar menggunakan hasil pertanyaan dalam bukan sahaja boleh digunakan dalam pilihan pertanyaan induk kenyataan. Ia juga boleh digunakan dalam memasukkan, mengemas kini, memadam kenyataan atau subquery lain.
1.
2. Piawaian daripada klausa yang mengandungi satu atau lebih nama jadual atau paparan.
3. Pilihan mana klausa.
4. Kumpulan pilihan mengikut klausa.
5. Pilihan mempunyai klausa.
1.
2. Tidak boleh memasukkan klausa pengiraan atau untuk.
3 Jika klausa atas juga dinyatakan, hanya susunan mengikut klausa boleh disertakan.
4. Subkueri boleh bersarang sehingga 32 tahap. Sesetengah pertanyaan mungkin tidak menyokong 32 tahap sarang.
5. Subkueri boleh digunakan di mana-mana sahaja ungkapan boleh digunakan, asalkan ia mengembalikan satu nilai.
6 Jika jadual hanya muncul dalam subkueri dan bukan dalam pertanyaan luar, lajur jadual tidak boleh disertakan dalam output.
Apabila subkueri hanya mengembalikan satu nilai, anda boleh menggunakan operator perbandingan seperti =,, >=, <=, !=, dsb. Sertai pertanyaan kaya dengan subkueri. Contohnya adalah seperti berikut:
3.1 Subkueri ringkas
select name,age from person where age > ( select age from person where name = '张三');
3.2 seperti pertanyaan bersarang
select count(distinct(Tname)) --查询姓“张”的老师的个数 from Teacher where Tname like '张%';
Jika subquery mengembalikan lebih daripada satu nilai, tetapi koleksi, anda tidak boleh menggunakan operator perbandingan secara langsung Anda boleh memasukkan MANA-MANA, BEBERAPA atau SEMUA antara operator perbandingan dan subquery. Hubungan kesetaraan boleh menggunakan operator IN.
4.1 dalam Pertanyaan Bersarang
Kata kunci dalam digunakan dalam klausa where untuk menentukan sama ada ungkapan pertanyaan berada dalam senarai berbilang nilai. Mengembalikan rekod yang memenuhi syarat dalam senarai dalam.
select name from person where countryid in ( select countryid from country where countryname = '中国');
4.2 beberapa pertanyaan bersarang
beberapa simbol operasi logik dalam sql, jika dalam satu siri perbandingan, beberapa nilai adalah Benar, maka hasilnya adalah Benar. Sintaks sesetengahnya ialah:
select name from person where countryid = some ( select countryid from country --用等号和以下查询到的值比较,如果与其中一个相等,就返回 where countryname = '中国');
4.3 semua pertanyaan bersarang
semuanya ialah operator logik dalam SQL Jika satu siri perbandingan adalah benar, maka hasilnya boleh menjadi benar.
select name from person where countryid > all ( select countryid from country --当countryid大于以下返回的所有id,此结果才为True,此结果才返回 where countryname = '中国');
4.4 wujud pertanyaan bersarang
wujud ialah simbol operasi logik dalam sql. Benar jika subquery mengembalikan set hasil. wujud mewakili maksud "kewujudan", dan ia hanya menemui rekod yang memenuhi syarat. Setelah rekod padanan pertama ditemui, carian berhenti.
wujud Subquery
Subquery ialah pernyataan pilihan pertama dan klausa pengiraan serta kata kunci into tidak dibenarkan.
wujud bermakna sama ada subkueri mengembalikan set hasil.
SELECT * FROM Person WHERE exists ( SELECT 1); --SELECT 0 SELECT NULL 返回结果都一样,因为这三个子查询都有结果集返回,因此总是True,SELECT * FROM Person照常执行
Tetapi jika tiada set keputusan dikembalikan kerana syarat tambahan dalam subkueri, pernyataan utama tidak akan dilaksanakan:
SELECT * FROM Person WHERE exists ( SELECT * FROM Person WHERE Person_Id = 100); --如果不存在Person_Id的记录,则子查询没有结果集返回,主语句不执行
5.1 Tanya nombor pelajar semua pelajar yang gred dalam kursus "001" lebih tinggi daripada kursus "002"
Select a.Sno from (select Sno,score from SC where Sno='001') a, (select Sno,scorefrom SC where Cno='002') b Where a.score>b.score and a.Sno=b.Sno;
Pembelajaran yang disyorkan: video mysql; tutorial
Atas ialah kandungan terperinci Apakah pernyataan pertanyaan bersarang mysql?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!