Masalah:
Anda ingin membatasi jumlah baris dalam hasil yang disetel di MySQL.
Contoh:
Basis data kami memiliki tabel bernama student
dengan data pada kolom id
, first_name
, last_name
, dan age
.
id | nama_depan | nama_belakang | umur |
---|---|---|---|
1 | Steven | Watson | 25 |
2 | Lisa | Anderson | 19 |
3 | Alice | Miller | 19 |
4 | Maria | Coklat | 25 |
5 | Lucy | Watson | 25 |
6 | Michael | Jackson | 22 |
Mari kita pilih nama lengkap dan usia siswa, tetapi batasi baris yang dikembalikan menjadi tiga.
Solusi:
SELECT first_name, last_name, age FROM student LIMIT 3;
Berikut hasil querynya:
id | nama_depan | nama_belakang | umur |
---|---|---|---|
1 | Steven | Watson | 25 |
2 | Lisa | Anderson | 19 |
3 | Alice | Miller | 19 |
Diskusi:
Klausa LIMIT membatasi jumlah baris dalam kumpulan hasil. Ini digunakan dalam pernyataan SELECT, biasanya di akhir pernyataan. (Bahkan ORDER BY harus dicantumkan sebelum LIMIT.)
Satu-satunya argumen yang diperlukan adalah jumlah baris yang akan ditampilkan. Dalam contoh kita, LIMIT 3 menghasilkan kumpulan hasil yang berisi tiga baris. Kecuali jika Anda menentukan sebaliknya dengan argumen OFFSET, fungsi ini akan selalu mengembalikan n . pertama baris yang memenuhi persyaratan kueri.
Argumen OFFSET opsional LIMIT ditempatkan sebelum argumen yang menunjukkan jumlah baris yang dikembalikan. Ini menunjukkan posisi baris pertama yang dikembalikan oleh LIMIT (yaitu '0' adalah baris pertama, 1 adalah baris kedua, dll.). Offset dan jumlah baris dipisahkan dengan koma.
Kueri mengembalikan rekaman yang sama dengan kueri sebelumnya karena offsetnya nol. (Nol adalah nilai offset default.)
SELECT first_name, last_name, age FROM student LIMIT 0, 3;
Dalam kueri ini, baris hasil tidak berurutan. Jika Anda ingin memilih tiga baris dari kumpulan hasil yang diurutkan, gunakan ORDER BY:
SELECT first_name, last_name, age FROM student ORDER BY age DESC, last_name, first_name LIMIT 1,3;
Di sini, pertama-tama kita mengurutkan baris berdasarkan usia (turun), lalu nama belakang, lalu nama depan. Kami menggunakan nilai offset untuk memulai pada baris kedua yang dikembalikan dan membatasi hasilnya menjadi tiga baris:
nama_depan | nama_belakang | umur |
---|---|---|
Lucy | Watson | 25 |
Steven | Watson | 25 |
Michael | Jackson | 22 |
Kueri ini pertama-tama mengurutkan baris menurut kolom usia dalam urutan menurun. Kemudian diurutkan berdasarkan last_name
dan first_name
dalam urutan menaik. Jika Anda melihat tabel, Anda akan melihat bahwa siswa tertua (Steven, Lucy, Mary) berusia 25 tahun. Namun, Mary dihilangkan karena dia adalah baris pertama dan offsetnya adalah 1 (yaitu, kita mulai dengan baris kedua). Lucy sekarang menjadi yang pertama karena nama depannya ada sebelum nama Steven. (Steven dan Lucy memiliki nama belakang yang sama, jadi urutan mereka ditentukan oleh nama depan.) Michael berusia 22 tahun, yang membuatnya menjadi siswa tertua berikutnya dan yang terakhir dari tiga baris kembali.