4.1 HAD
Jika anda menjangkakan pertanyaan SQL anda mengembalikan terlalu banyak data, anda boleh mengehadkan bilangan maksimum terlebih dahulu. Lagipun, jadual boleh mengandungi beribu-ribu malah berjuta-juta baris.
SQL menjadikannya sangat mudah untuk mengehadkan bilangan baris dalam hasil pertanyaan menggunakan LIMIT
. Kata kunci ini digunakan pada penghujung pertanyaan SQL dan kelihatan seperti ini:
LIMIT quantity
Mari tulis pertanyaan terhadap jadual produk, yang mengandungi senarai produk kedai kami. Tetapi kerana kami mempunyai kedai yang sangat berjaya dan kami menjual banyak produk, kami hanya mahu mendapatkan 10 baris pertama jawapannya. Begini rupa permintaan itu:
SELECT * FROM product
LIMIT 10
Dan kami mendapat hasil pertanyaan berikut:
ID | nama | jenama | harga | mengira |
---|---|---|---|---|
1 | Jadual | IKEA | 20.00 | 15 |
2 | kerusi | IKEA | 5.00 | 45 |
3 | Sofa | IKEA | 80.00 | 10 |
4 | Katil | IKEA | 75.00 | 10 |
5 | almari | Bosch | 125.00 | 15 |
6 | rak | rak | 25.00 | 114 |
7 | TV | LG | 350.00 | 4 |
8 | lampu | LG | 15.00 | 100 |
9 | almari pakaian | IKEA | 99.00 | 10 |
10 | Pinggan | Bosch | 199.00 | 10 |
Sekarang kami akan meminta hanya 5 baris pertama. Begini rupa permintaan itu:
SELECT * FROM product
LIMIT 5
Kami mendapat hasil pertanyaan berikut:
ID | nama | jenama | harga | mengira |
---|---|---|---|---|
1 | Jadual | IKEA | 20.00 | 15 |
2 | kerusi | IKEA | 5.00 | 45 |
3 | Sofa | IKEA | 80.00 | 10 |
4 | Katil | IKEA | 75.00 | 10 |
5 | almari | Bosch | 125.00 | 15 |
4.2 OFSET
Kali terakhir kami belajar cara mengehadkan bilangan baris dalam respons pelayan. Dan kini, daripada beribu-ribu baris daripada jadual produk, kita boleh mendapatkan 10 baris pertama dan memaparkannya kepada pengguna. Ia adalah sempurna. Tetapi bagaimana kita memaparkan 10 baris kedua? Dan yang ketiga?
Jika kita menulis LIMIT 20
, atau LIMIT 30
, tidakkah pelayan akan mengembalikan 20 dan 30 baris masing-masing?
Untuk kes ini, SQL mempunyai kata kunci khas OFFSET
yang dengannya anda boleh meminta pelayan melangkau N baris dalam responsnya. Kata kunci ini digunakan pada penghujung pertanyaan SQL (selepas LIMIT
) dan kelihatan seperti:
OFFSET quantity
Mari tulis pertanyaan pada jadual produk dan cuba dapatkan rekod 11 hingga 15. Dalam erti kata lain, kami meminta pelayan untuk mengembalikan 5 baris kepada kami, tetapi langkau 10 baris pertama respons terlebih dahulu. Begini rupa permintaan itu:
SELECT * FROM product
LIMIT 5
OFFSET 10
Kami mendapat hasil pertanyaan berikut:
ID | nama | jenama | harga | mengira |
---|---|---|---|---|
sebelas | Kerusi berlengan | Bosch | 44.00 | 8 |
12 | Pasu bunga | Bunga pintar | 99.00 | 9 |
13 | Berdiri | IKEA | 100.00 | 10 |
Pelayan hanya mengembalikan 3 baris, bermakna terdapat 13 baris dalam jadual kami. Pelayan melangkau 10 yang pertama dan mengembalikan 5 yang berikutnya.
4.3 PILIH DISTINCT
Kata kunci lain yang berguna ialah DISTINCT
. Ia digunakan apabila terdapat rekod pendua dalam jadual dan kami ingin mengalih keluar pendua.
Dari mana datangnya pendua dalam jadual kami? Mungkin tidak ada pendua dalam jadual, tetapi hasil daripada pertanyaan, ia adalah mudah. Mari tulis pertanyaan yang akan mengembalikan jenama semua produk yang kami jual. Begini rupa permintaan itu:
SELECT brand FROM product
Kami mendapat hasil pertanyaan berikut:
jenama |
---|
IKEA |
IKEA |
IKEA |
IKEA |
Bosch |
Bosch |
LG |
LG |
IKEA |
Bosch |
Bosch |
Bunga pintar |
IKEA |
Adalah mudah untuk melihat bahawa terdapat baris pendua dalam jadual ini. Ia adalah untuk memastikan tiada pendua dan anda perlu menggunakan kata kunci DISTINCT
. Berikut ialah rupa permintaan yang diperbetulkan:
SELECT DISTINCT brand
FROM product
Kami mendapat hasil pertanyaan berikut:
jenama |
---|
IKEA |
Bosch |
LG |
Bunga pintar |
Jauh lebih baik. bukan? ;)
4.4 PESANAN OLEH
Dan akhirnya kami terpaksa menyusun . Untuk mengisih hasil pertanyaan, anda perlu menggunakan kata kunci ORDER BY
. Secara teknikal, ini adalah dua perkataan, tetapi intipatinya tidak penting. Dua perkataan, satu operator.
Ia mesti ditulis selepas kata kunci WHERE
, tetapi sebelum LIMIT
dan OFFSET
. Jika anda menulis ORDER BY
selepas LIMIT
, maka pelayan SQL hanya akan mengembalikan ralat kepada anda.
Secara umum, pengendali ini kelihatan seperti ini:
ORDER BY column order
Di mana lajur ialah nama lajur dalam jadual / hasil isihan. Dan susunannya ialah susunan isihan.
Susunan isihan boleh terdiri daripada tiga jenis:
ASC
(dari Menaik) - menaik;DESC
(dari Turun) - menurun;- Tidak dinyatakan - akan digunakan
ASC
Mari tulis pertanyaan yang akan mengembalikan senarai produk yang diisih mengikut harga dalam tertib menaik. Begini rupa permintaan itu:
SELECT * FROM product
ORDER BY price ASC
LIMIT 10
Kami mendapat hasil pertanyaan berikut:
ID | nama | jenama | harga | mengira |
---|---|---|---|---|
2 | kerusi | IKEA | 5.00 | 45 |
8 | lampu | LG | 15.00 | 100 |
1 | Jadual | IKEA | 20.00 | 15 |
6 | rak | Bosch | 25.00 | 114 |
sebelas | Kerusi berlengan | Bosch | 44.00 | 8 |
4 | Katil | IKEA | 75.00 | 10 |
3 | Sofa | IKEA | 80.00 | 10 |
12 | Pasu bunga | Bunga pintar | 99.00 | 9 |
9 | almari pakaian | IKEA | 99.00 | 10 |
13 | Berdiri | IKEA | 100.00 | 10 |
Kami akan mendapat hasil yang sama jika kami tidak menyatakan susunan isihan - kami akan melangkau perkataan itu ASC
.
4.5 ORDER BY merentas berbilang lajur
Operator ORDER BY
membenarkan anda mengisih hasil mengikut beberapa lajur. Ini boleh menjadi sangat berguna apabila lajur pertama mempunyai banyak elemen pendua. Bentuk umum pengendali ini adalah seperti berikut:
ORDER BY column 1 order 1, column 2 order 2, column 3 order 3
Dalam erti kata lain, jika selepas mengisih mengikut lajur pertama anda mempunyai beberapa nilai yang sama berdekatan, maka ia diisih mengikut lajur kedua, dan seterusnya.
Mari tulis pertanyaan yang akan mengisih produk kami mengikut jenama, dan untuk produk dengan jenama yang sama - dalam tertib menurun nombornya. Begini rupa permintaan itu:
SELECT * FROM product
ORDER BY brand ASC, count
DESC
Kami mendapat hasil pertanyaan berikut:
ID | nama | jenama | harga | mengira |
---|---|---|---|---|
6 | rak | Bosch | 25.00 | 114 |
5 | almari | Bosch | 125.00 | 15 |
10 | Pinggan | Bosch | 199.00 | 10 |
sebelas | Kerusi berlengan | Bosch | 44.00 | 8 |
2 | kerusi | IKEA | 5.00 | 45 |
1 | Jadual | IKEA | 20.00 | 15 |
9 | almari pakaian | IKEA | 99.00 | 10 |
13 | Berdiri | IKEA | 100.00 | 10 |
4 | Katil | IKEA | 75.00 | 10 |
3 | Sofa | IKEA | 80.00 | 10 |
8 | lampu | LG | 15.00 | 100 |
7 | TV | LG | 350.00 | 4 |
12 | Pasu bunga | Bunga pintar | 99.00 | 9 |
Lihat dengan teliti pada jadual - barisnya diisih mengikut nama jenama (urutan abjad), dan baris dengan nama jenama yang sama diisih mengikut nombor produk dalam tertib menurun (lajur terakhir).