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та - нейните редове са сортирани по име на марка (по азбучен ред), а редовете с една и съща марка са сортирани по номера на продукта в низходящ ред (последната колона).