Rumah > pangkalan data > tutorial mysql > Bagaimana untuk menggunakan dalam pertanyaan dalam mysql

Bagaimana untuk menggunakan dalam pertanyaan dalam mysql

WBOY
Lepaskan: 2022-01-12 10:02:06
asal
13181 orang telah melayarinya

Dalam mysql, in sering digunakan di mana ungkapan untuk menanyakan data dalam julat tertentu Sintaks ialah "pilih*dari mana medan dalam (nilai1, nilai2,..)", apabila di mendahului Apabila menambah. bukan pengendali, ini bermakna bertentangan dengan dalam, ia tidak memilih dalam item senarai ini.

Bagaimana untuk menggunakan dalam pertanyaan dalam mysql

Persekitaran pengendalian tutorial ini: sistem Windows 10, versi mysql8.0.22, komputer Dell G3.

Cara menggunakan dalam pertanyaan dalam mysql

1. Penggunaan asas

in adalah biasa digunakan dalam mysql Dalam ungkapan where, fungsinya adalah untuk menanyakan data dalam julat tertentu.

select * from where field in (value1,value2,value3,…)
Salin selepas log masuk

Apabila IN didahului oleh operator NOT, ia bermakna bertentangan dengan IN, iaitu, jangan pilih dalam senarai item ini

select * from where field not in (value1,value2,value3,…)
Salin selepas log masuk

2. IN subquery

Lazimnya, nilai item senarai IN adalah samar-samar dan boleh diperolehi melalui subkueri:

SELECT * FROM article WHERE uid IN(SELECT uid FROM user WHERE status=0)
Salin selepas log masuk

Dalam contoh SQL ini, kami Melaksanakan untuk mengesan semua artikel pengguna yang statusnya 0 (mungkin diharamkan). Mula-mula, dapatkan semua pengguna dengan status=0 melalui pertanyaan:

SELECT uid FROM user WHERE status=0
Salin selepas log masuk

Kemudian gunakan hasil pertanyaan sebagai item senarai IN untuk mencapai hasil pertanyaan akhir Perhatikan bahawa hasil yang dikembalikan dalam subkueri mestilah medan Senaraikan item.

Dalam subquery in, kita sering menghadapi masalah kecekapan query yang rendah Penyelesaiannya adalah seperti berikut:

1 Masih menggunakan subquery dan query sekali lagi

SELECT * FROM basic_zdjbxx WHERE suiji IN ( SELECT zdcode FROM ( SELECT zdcode FROM basic_h WHERE zdcode != "" ) AS h )
Salin selepas log masuk

2. Gunakan LEFT JOIN

SELECT zd.* FROM ( SELECT DISTINCT zdcode FROM basic_h WHERE zdcode != "" ) AS h LEFT JOIN basic_zdjbxx zd ON zd.suiji = h.zdcode
Salin selepas log masuk

3 Arahan tambahan untuk operator IN

Item senarai IN bukan sahaja menyokong nombor, tetapi juga aksara dan malah. jenis masa dan tarikh, dsb. , dan jenis item data yang berbeza ini boleh dicampur dan disusun tanpa konsisten dengan jenis lajur:

SELECT * FROM user WHERE uid IN(1,2,'3','c')
Salin selepas log masuk

IN hanya boleh melakukan perbandingan julat pada satu medan Jika anda ingin menentukan lebih banyak medan, anda boleh Gunakan operator logik DAN atau ATAU:

SELECT * FROM user WHERE uid IN(1,2) OR username IN('admin','manong')
Salin selepas log masuk

Selepas menggunakan operator logik DAN atau ATAU, IN juga boleh digunakan dengan operator lain seperti LIKE, >=, =, dll.

4 Berkenaan dengan kecekapan operator IN

Jika item senarai IN adalah pasti, maka berbilang OR boleh digunakan sebagai ganti:

SELECT * FROM user WHERE uid IN (2,3,5)
// 等效为:
SELECT * FROM user WHERE (uid=2 OR aid=3 OR aid=5)
Salin selepas log masuk

Secara amnya dipercayai bahawa:

1 Jika anda beroperasi pada medan indeks, menggunakan OR adalah lebih cekap daripada IN, tetapi apabila item senarai tidak pasti (seperti subkueri untuk mendapatkan hasil), anda. mesti menggunakan operator IN. Selain itu, apabila data jadual subquery lebih kecil daripada pertanyaan utama, operator IN juga boleh digunakan.

Dalam atau atau, apabila tiada indeks ditambahkan pada medan, lebih banyak medan disambungkan (1 atau 2 atau 3 atau 4 atau...), kecekapan pertanyaan atau jauh lebih rendah daripada dalam

Pembelajaran yang disyorkan: tutorial video mysql

Atas ialah kandungan terperinci Bagaimana untuk menggunakan dalam pertanyaan dalam mysql. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan