Saya penasaran. Apa perbedaan antara masing-masing kueri ini:
SELECT * FROM `tablename`
SELECT * FROM `tablename` WHERE 1
SELECT * FROM `tablename` WHERE 1=1
sql
select-query
Stephen Alexander
sumber
sumber
... WHERE TRUE
? Saya sadar bahwa (di sebagian besar SQL, termasuk MySQL) BENAR hanyalah makro yang mewah untuk1
- tapi tetap saja, bukankah ini lebih jelas bagi pembaca?Jawaban:
2 dan 3 sama di MySQL, secara fungsional 1 juga sama.
where 1
tidak standar sehingga, seperti yang telah ditunjukkan orang lain, tidak akan berfungsi dalam dialek lain.Orang-orang menambahkan
where 1
atauwhere 1 = 1
lebihwhere
kondisinya dapat dengan mudah ditambahkan atau dihapus ke / dari permintaan dengan menambahkan / mengomentari beberapaand
komponen "...".yaitu
sumber
WHERE 1=1
Anda tidak perlu berhati-hati jika kondisi yang Anda coba tambahkan ke string adalah yang pertama (sehingga akan membutuhkanWHERE
di depan) ) atau tidak.ORDER BY 1
sintaks @dlatikay (alih-alih nama kolom) jika Anda melakukan penyatuan dua atau lebih pernyataan SELECT." AND "
sebagai pembatas.Seperti yang Anda ketahui, ketiganya menghasilkan hasil yang sama. (Dalam konteks boolean, MySQL memperlakukan integer "1" sebagai benar - pada kenyataannya, angka apa pun yang bukan "0" diperlakukan sebagai true).
Pengoptimal MySQL didokumentasikan secara eksplisit untuk menghapus kondisi konstan dalam
WHERE
klausa:Oleh karena itu, ketiganya akan dikompilasi menjadi kode yang persis sama.
Mereka semua secara fungsional setara dan harus memiliki karakteristik kinerja yang sama.
Yang mengatakan, yang pertama dan ketiga adalah SQL standar. Yang kedua akan menyebabkan semacam kesalahan ekspresi boolean di banyak basis data. Jadi, saya akan menyarankan Anda untuk menghindari itu (saya tidak yakin apakah itu berfungsi atau tidak dalam mode SQL ketat MySQL).
Seringkali yang ketiga digunakan ketika membangun
WHERE
klausa dinamis . Ini membuatnya mudah untuk menambahkan kondisi tambahanAND <condition>
tanpa perlu khawatirAND
.sumber
Jika Anda bertanya tentang perbedaan dalam kinerja dan hasil, tidak ada, 2 dan 3 sama
WHERE TRUE
, dan mereka akan menghasilkan yang sama seperti yang pertama.Hasil dalam semua data dari
table_name
(tanpa filter)1 akan dievaluasi karena
TRUE
, karena itu - tidak ada filter - setiap catatan akan dikembalikan.Sama seperti yang terakhir, 1 = 1 adalah
TRUE
ekspresi, oleh karena itu - tanpa filter - setiap catatan akan dipilih.sumber
Semua sama tetapi 2 dan 3 digunakan untuk menangani
AND/OR
kondisi seperti:sumber
Dalam 1, MySQL tidak perlu mengevaluasi kondisi WHERE.
Dalam 2 dan 3, kondisi di mana statis dan tidak didasarkan pada nilai baris. Ini akan dievaluasi dengan logika boolean dan selalu benar.
Secara fungsional, tidak ada perbedaan. Anda harus memilih 1 untuk kejelasan kode.
sumber
Semua sama tetapi 2 dan 3 digunakan untuk membuat kueri dinamis untuk kondisi AND / OR
kami menggunakan format 2 dan 3 untuk membuat kueri dinamis sehingga kami sudah tahu kata kunci "di mana" ditambahkan dan kami terus menambahkan lebih banyak filter. Suka
setelah beberapa baris jika kita memiliki filter baru kita tambahkan "AND coulmnb = b" dan seterusnya
Anda tidak perlu memeriksa kueri sql untuk kata kunci mana yang ditempatkan di kueri pertama atau awal
Kalau tidak, kita bisa menulis
sqlquery = "SELECT * FROM tablename"
kemudian
jika tidak ada klausa 'di mana'
sqlquery
makalain
sumber
Mereka semua menghasilkan jawaban yang sama. Namun cara 2 dan 3 ditulis sebagian besar adalah untuk memiliki kontrol atas pernyataan "Di mana" sehingga akan memudahkan untuk menambahkan atau menghapusnya nanti.
Saya pikir cara pertama dan ketiga adalah cara yang tepat untuk menulisnya. Jika Anda memerlukan pernyataan di mana Anda suka di nomor 3 jika tidak, angka 1 akan cukup baik.
sumber
Dalam MS SQL 1 dan 3 sama, namun, opsi 2 tidak akan berfungsi, opsi 2 adalah pernyataan yang tidak valid seperti dalam MS SQL, WHERE digunakan untuk membandingkan beberapa nilai. Sebagai contoh:
sumber
sumber
Hasil - Memberikan semua catatan dalam tabel yang ditentukan alih-alih tablename untuk ketiga kueri
SELECT * FROM tablename WHERE 1
- Periksa jawaban iniSELECT * FROM tablename WHERE 1=1
- Periksa jawaban iniUntuk info lebih lanjut tentang WHERE optimasi klausa periksa ini: MYSQL , SQLite , SQL
sumber