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 OFFSETyang 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 LIMITdan OFFSET. Jika anda menulis ORDER BYselepas 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 digunakanASC

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 BYmembenarkan 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).