4.1 ОГРАНИЧЕНИЕ
Ако очаквате вашата SQL заявка да върне твърде много данни, можете да ограничите максималния брой предварително. В крайна сметка таблиците могат да съдържат хиляди or дори мorони редове.
SQL прави много лесно ограничаването на броя на редовете в резултата от заявка с помощта на LIMIT
. Тази ключова дума се използва в самия край на SQL заявката и изглежда така:
LIMIT quantity
Нека напишем заявка към продуктовата table, която съдържа списък с продуктите на нашия магазин. Но тъй като имаме много успешен магазин и продаваме много продукти, искаме да получим само първите 10 реда от отговора. Ето How ще изглежда това искане:
SELECT * FROM product
LIMIT 10
И получаваме следния резултат от заявката:
document за самоличност | име | марка | цена | броя |
---|---|---|---|---|
1 | Таблица | ИКЕА | 20.00 часа | 15 |
2 | Председател | ИКЕА | 5.00 | 45 |
3 | Диван | ИКЕА | 80,00 | 10 |
4 | легло | ИКЕА | 75,00 | 10 |
5 | Килер | Bosch | 125,00 | 15 |
6 | Рафт | Рафт | 25.00 часа | 114 |
7 | телевизор | LG | 350,00 | 4 |
8 | Лампа | LG | 15.00 часа | 100 |
9 | Скрин | ИКЕА | 99,00 | 10 |
10 | Плоча | Bosch | 199,00 | 10 |
Сега ще поискаме само първите 5 реда. Ето How ще изглежда това искане:
SELECT * FROM product
LIMIT 5
Получаваме следния резултат от заявката:
document за самоличност | име | марка | цена | броя |
---|---|---|---|---|
1 | Таблица | ИКЕА | 20.00 часа | 15 |
2 | Председател | ИКЕА | 5.00 | 45 |
3 | Диван | ИКЕА | 80,00 | 10 |
4 | легло | ИКЕА | 75,00 | 10 |
5 | Килер | Bosch | 125,00 | 15 |
4.2 ОФСЕТ
Последния път научихме How да ограничим броя на редовете в отговора на сървъра. И сега, instead of хиляди редове от продуктовата table, можем да получим първите 10 реда и да ги покажем на потребителя. Перфектно е. Но How да покажем вторите 10 реда? А третото?
Ако напишем LIMIT 20
, or LIMIT 30
, сървърът няма ли да върне съответно 20 и 30 реда?
Именно за този случай SQL има специална ключова дума, OFFSET
с която можете да помолите сървъра да пропусне N реда в своя отговор. Тази ключова дума се използва в самия край на SQL заявката (след LIMIT
) и изглежда така:
OFFSET quantity
Нека да напишем заявка в tableта с продукти и да се опитаме да получим записи от 11 до 15. С други думи, ние молим сървъра да ни върне 5 реда, но първо да пропуснем първите 10 реда от отговора. Ето How ще изглежда това искане:
SELECT * FROM product
LIMIT 5
OFFSET 10
Получаваме следния резултат от заявката:
document за самоличност | име | марка | цена | броя |
---|---|---|---|---|
единадесет | Фотьойл | Bosch | 44.00 | 8 |
12 | саксия | Smartflower | 99,00 | 9 |
13 | Стойка | ИКЕА | 100,00 | 10 |
Сървърът върна само 3 реда, което означава, че в нашата table имаше общо 13 реда. Сървърът пропусна първите 10 и върна следващите 5.
4.3 ИЗБЕРЕТЕ РАЗЛИЧЕН
Друга полезна ключова дума е DISTINCT
. Използва се, когато в tableта има дублирани записи и искаме да премахнем дублиращите се записи.
Откъде идват дубликатите в нашата table? Може да няма дубликати в tableта, но в резултат на заявката е лесно. Нека напишем заявка, която ще върне марките на всички продукти, които продаваме. Ето How ще изглежда това искане:
SELECT brand FROM product
Получаваме следния резултат от заявката:
марка |
---|
ИКЕА |
ИКЕА |
ИКЕА |
ИКЕА |
Bosch |
Bosch |
LG |
LG |
ИКЕА |
Bosch |
Bosch |
Smartflower |
ИКЕА |
Лесно се вижда, че в тази table има дублирани редове. Това е, за да се гарантира, че няма дубликати и трябва да използвате ключовата дума DISTINCT
. Ето How ще изглежда коригираната заявка:
SELECT DISTINCT brand
FROM product
Получаваме следния резултат от заявката:
марка |
---|
ИКЕА |
Bosch |
LG |
Smartflower |
Толкова по-добре. Не е ли? ;)
4.4 ПОРЪЧАЙТЕ ПО
И накрая стигнахме до сортирането . За да сортирате резултатите от заявка, трябва да използвате ключовата дума ORDER BY
. Технически това са две думи, но същността не е важна. Две думи, един оператор.
Трябва да се пише след ключовата дума WHERE
, но преди LIMIT
и OFFSET
. Ако пишете ORDER BY
след LIMIT
, тогава SQL сървърът просто ще ви върне грешка.
Като цяло този оператор изглежда така:
ORDER BY column order
Където колоната е името на колоната в tableта/резултат от сортиране. И редът е редът на сортиране.
Редът на сортиране може да бъде три вида:
ASC
(от Ascending) - възходящ;DESC
(от Descending) - низходящ;- Не е посочено - ще се използва
ASC
Нека напишем заявка, която ще върне списък с продукти, сортирани по цена във възходящ ред. Ето How ще изглежда това искане:
SELECT * FROM product
ORDER BY price ASC
LIMIT 10
Получаваме следния резултат от заявката:
document за самоличност | име | марка | цена | броя |
---|---|---|---|---|
2 | Председател | ИКЕА | 5.00 | 45 |
8 | Лампа | LG | 15.00 часа | 100 |
1 | Таблица | ИКЕА | 20.00 часа | 15 |
6 | Рафт | Bosch | 25.00 часа | 114 |
единадесет | Фотьойл | Bosch | 44.00 | 8 |
4 | легло | ИКЕА | 75,00 | 10 |
3 | Диван | ИКЕА | 80,00 | 10 |
12 | саксия | Smartflower | 99,00 | 9 |
9 | Скрин | ИКЕА | 99,00 | 10 |
13 | Стойка | ИКЕА | 100,00 | 10 |
Ще получим същия резултат, ако не посочим реда на сортиране - ще пропуснем думата ASC
.
4.5 ПОРЪЧАЙТЕ ПО в множество колони
Операторът ORDER BY
ви позволява да сортирате резултата по няколко колони. Това може да бъде много полезно, когато първата колона има много дублиращи се елементи. Общата форма на този оператор е следната:
ORDER BY column 1 order 1, column 2 order 2, column 3 order 3
С други думи, ако след сортиране по първата колона имате няколко еднакви стойности наблизо, тогава те се сортират по втората колона и т.н.
Нека напишем заявка, която ще сортира нашите продукти по марка, а за продукти с една и съща марка – в низходящ ред на броя им. Ето How ще изглежда това искане:
SELECT * FROM product
ORDER BY brand ASC, count
DESC
Получаваме следния резултат от заявката:
document за самоличност | име | марка | цена | броя |
---|---|---|---|---|
6 | Рафт | Bosch | 25.00 часа | 114 |
5 | Килер | Bosch | 125,00 | 15 |
10 | Плоча | Bosch | 199,00 | 10 |
единадесет | Фотьойл | Bosch | 44.00 | 8 |
2 | Председател | ИКЕА | 5.00 | 45 |
1 | Таблица | ИКЕА | 20.00 часа | 15 |
9 | Скрин | ИКЕА | 99,00 | 10 |
13 | Стойка | ИКЕА | 100,00 | 10 |
4 | легло | ИКЕА | 75,00 | 10 |
3 | Диван | ИКЕА | 80,00 | 10 |
8 | Лампа | LG | 15.00 часа | 100 |
7 | телевизор | LG | 350,00 | 4 |
12 | саксия | Smartflower | 99,00 | 9 |
Погледнете внимателно tableта - нейните редове са сортирани по име на марка (по азбучен ред), а редовете с една и съща марка са сортирани по номера на продукта в низходящ ред (последната колона).