Saya telah melihat banyak pertanyaan dengan sesuatu sebagai berikut.
Select 1
From table
Apa artinya ini 1
, bagaimana itu akan dieksekusi dan, apa yang akan kembali?
Juga, dalam jenis skenario apa, dapatkah ini digunakan?
Saya telah melihat banyak pertanyaan dengan sesuatu sebagai berikut.
Select 1
From table
Apa artinya ini 1
, bagaimana itu akan dieksekusi dan, apa yang akan kembali?
Juga, dalam jenis skenario apa, dapatkah ini digunakan?
Jawaban:
SELECT 1 FROM TABLE_NAME
berarti, "Kembalikan 1 dari tabel". Ini cukup biasa-biasa saja, jadi biasanya akan digunakan dengan WHERE
dan sering EXISTS
(seperti @gbn mencatat, ini tidak selalu merupakan praktik terbaik, namun, cukup umum untuk dicatat, bahkan jika itu tidak benar-benar bermakna ( yang mengatakan, saya akan menggunakannya karena orang lain menggunakannya dan itu "lebih jelas" segera. Tentu saja, itu mungkin masalah ayam kental vs telur, tapi saya biasanya tidak tinggal di sini)).
SELECT * FROM TABLE1 T1 WHERE EXISTS (
SELECT 1 FROM TABLE2 T2 WHERE T1.ID= T2.ID
);
Pada dasarnya, di atas akan mengembalikan semuanya dari tabel 1 yang memiliki ID yang sesuai dari tabel 2. (Ini adalah contoh yang dibuat-buat, jelas, tapi saya percaya itu menyampaikan ide. Secara pribadi, saya mungkin akan melakukan hal di atas SELECT * FROM TABLE1 T1 WHERE ID IN (SELECT ID FROM TABLE2);
seperti yang saya lihat sebagai JAUH lebih eksplisit untuk pembaca kecuali ada alasan kuat untuk tidak).
Sebenarnya ada satu kasus yang saya lupa sampai sekarang. Dalam kasus di mana Anda mencoba menentukan keberadaan nilai dalam database dari bahasa luar, terkadang SELECT 1 FROM TABLE_NAME
akan digunakan. Ini tidak menawarkan manfaat yang signifikan dibandingkan dengan memilih satu kolom, tetapi, tergantung pada implementasinya, itu mungkin menawarkan keuntungan besar daripada melakukan SELECT *
, hanya karena sering kali semakin banyak kolom yang dikembalikan DB ke bahasa, semakin besar data struktur, yang pada gilirannya berarti lebih banyak waktu akan diambil.
...EXISTS (SELECT 1...
select 1 from table
akan mengembalikan 1 konstan untuk setiap baris tabel. Ini berguna ketika Anda ingin menentukan dengan murah apakah catatan cocok dengan where
klausa Anda dan / atau join
.
Jika Anda bermaksud sesuatu seperti
SELECT * FROM AnotherTable
WHERE EXISTS (SELECT 1 FROM table WHERE...)
maka itu adalah mitos bahwa 1
itu lebih baik daripada
SELECT * FROM AnotherTable
WHERE EXISTS (SELECT * FROM table WHERE...)
The 1
atau *
di EXISTS diabaikan dan Anda dapat menulis ini sebagai per Halaman 191 dari ANSI SQL 1992 Standard :
SELECT * FROM AnotherTable
WHERE EXISTS (SELECT 1/0 FROM table WHERE...)
exists (select 1/0
berfungsi seperti pesona
ia melakukan apa yang dikatakannya - ia akan selalu mengembalikan bilangan bulat 1. Ini digunakan untuk memeriksa apakah catatan yang cocok dengan klausa tempat Anda berada.
select 1 from table
digunakan oleh beberapa database sebagai permintaan untuk menguji koneksi untuk melihat apakah itu hidup, sering digunakan ketika mengambil atau mengembalikan koneksi ke / dari kumpulan koneksi.
Meskipun tidak diketahui secara luas, kueri dapat memiliki HAVING
klausa tanpa GROUP BY
klausa.
Dalam keadaan seperti itu, HAVING
klausa diterapkan ke seluruh set. Jelas, SELECT
klausa tidak dapat merujuk ke kolom mana pun, jika tidak Anda akan (memperbaiki) kesalahan, "Kolom tidak valid dalam pilih karena tidak terkandung dalam GROUP BY" dll.
Oleh karena itu, nilai literal harus digunakan (karena SQL tidak mengizinkan resultset dengan nol kolom - mengapa ?!) dan nilai literal 1 ( INTEGER
) umumnya digunakan: jika HAVING
klausa mengevaluasi TRUE
maka resultset akan menjadi satu baris dengan satu kolom yang menunjukkan nilai 1, jika tidak Anda mendapatkan set kosong.
Contoh: untuk menemukan apakah suatu kolom memiliki lebih dari satu nilai berbeda:
SELECT 1
FROM tableA
HAVING MIN(colA) < MAX(colA);
SELECT MIN(colA) < MAX(colA) FROM tableA
?
Untuk sedikit lebih spesifik, Anda akan menggunakan ini untuk melakukannya
SELECT 1 FROM MyUserTable WHERE user_id = 33487
bukannya melakukan
SELECT * FROM MyUserTable WHERE user_id = 33487
karena Anda tidak peduli melihat hasilnya. Meminta nomor 1 sangat mudah untuk basis data (karena tidak perlu melakukan pencarian).
Jika Anda tidak tahu ada data di tabel Anda atau tidak, Anda bisa menggunakan kueri berikut:
SELECT cons_value FROM table_name;
Sebagai Contoh:
SELECT 1 FROM employee;
Jadi, kami menggunakan kueri SQL ini untuk mengetahui apakah ada data di tabel & jumlah baris menunjukkan berapa banyak baris yang ada di tabel ini.
Ini berarti bahwa Anda menginginkan nilai " 1 " sebagai output atau Sebagian besar waktu digunakan sebagai Kueri Batin karena untuk beberapa alasan Anda ingin menghitung kueri luar berdasarkan hasil kueri dalam .. tidak semua waktu Anda menggunakan 1 tetapi Anda memiliki beberapa nilai spesifik ...
Ini secara statis akan memberi Anda output sebagai nilai 1.
Jika Anda hanya ingin memeriksa benar atau salah berdasarkan klausa WHERE, pilih 1 dari tabel di mana kondisi adalah cara termurah.
Saya melihatnya selalu digunakan dalam injeksi SQL, seperti:
www.urlxxxxx.com/xxxx.asp?id=99 union select 1,2,3,4,5,6,7,8,9 from database;
Angka-angka ini dapat digunakan untuk menebak di mana basis data ada dan menebak nama kolom dari database yang Anda tentukan. Dan nilai-nilai tabel.
itu sederhana berarti bahwa Anda mengambil nomor kolom pertama dari tabel ,,,, berarti pilih Emply_num, Empl_no Dari Karyawan; di sini Anda menggunakan pilih 1 dari Karyawan; itu berarti Anda mengambil kolom Emply_num. Terima kasih
Alasannya adalah satu lagi, setidaknya untuk MySQL. Ini dari manual MySQL
InnoDB menghitung nilai kardinalitas indeks untuk tabel saat pertama kali tabel diakses setelah startup, alih-alih menyimpan nilai tersebut dalam tabel. Langkah ini dapat mengambil waktu yang signifikan pada sistem yang mempartisi data menjadi banyak tabel. Karena overhead ini hanya berlaku untuk operasi buka tabel awal, untuk "menghangatkan" tabel untuk digunakan nanti, akses langsung setelah startup dengan mengeluarkan pernyataan seperti SELECT 1 FROM tbl_name LIMIT 1
Ini hanya digunakan untuk kenyamanan dengan JIKA ADA (). Kalau tidak, kamu bisa ikut
select * from [table_name]
Image Dalam kasus 'JIKA ADA', kita hanya perlu tahu bahwa ada baris dengan kondisi tertentu ada atau tidak peduli apa isi dari baris.
select 1 from Users
kode contoh di atas, mengembalikan no. baris sama dengan no. pengguna dengan 1 dalam kolom tunggal