1. LIMIT

Якщо ти очікуєш, що твій SQL-запит поверне занадто багато даних, то можеш заздалегідь обмежити їх максимальне число. Адже таблиці можуть містити тисячі або навіть мільйони рядків.

SQL дозволяє легко обмежити кількість рядків в результаті запиту за допомогою ключового слова LIMIT. Це ключове слово використовується в самому кінці SQL-запиту і має вигляд:

 LIMIT кількість 

Давай напишемо запит до таблиці product, яка містить перелік продуктів нашого магазину. Але оскільки у нас дуже успішний магазин та продуктів ми продаємо дуже багато, ми хочемо отримати лише перші 10 рядків відповіді. Ось як цей запит буде виглядати:

 SELECT * FROM product LIMIT 10 

Ми отримаємо такий результат запиту:

id< /th> name brand price count
1 Стіл IKEA 20.00 15
2 Стілець IKEA 5.00 45
3 Диван IKEA 80.00 10
4 Ліжко IKEA 75.00 10
5 Шафа Bosch 125.00 15
6 Полиця Полиця 25.00 114
7 Телевізор LG 350.00 4
8 Лампа LG 15.00< /td> 100
9 Комод IKEA 99.00 10
10 Плита Bosch 199.00 10

Зробимо запит лише на перші 5 рядків. Ось як цей запит буде виглядати:

 SELECT * FROM product LIMIT 5 

Отримаємо такий результат запиту:

id name brand price count
1 Стіл IKEA 20.00 15
2 Стілець IKEA 5.00 45
3 Диван IKEA 80.00 10
4 Ліжко IKEA 75.00 10
5 Шафа Bosch< /td> 125.00 15

2. OFFSET

У попередній раз ми навчилися обмежувати кількість рядків у відповіді сервера. І тепер замість тисяч рядків із таблиці product можемо отримати 10 перших рядків та відобразити їх користувачу. Це відмінно. Але як нам відобразити другі 10 рядків? А треті?

Якщо ми писатимемо LIMIT 20, або LIMIT 30, хіба сервер не поверне 20 і 30 рядків відповідно?

Саме на цей випадок SQL має спеціальне ключове слово OFFSET, за допомогою якого можна попросити сервер пропустити N рядків у його відповіді. Це ключове слово використовується в самому кінці SQL-запиту (після LIMIT) і має вигляд:

 OFFSET кількість 

Давай напишемо запит до таблиці product і спробуємо отримати записи з 11 по 15. Іншими словами, ми просимо сервер повернути нам 5 рядків, але спочатку пропустити перші 10 рядків відповіді. Ось як цей запит буде виглядати:

 SELECT * FROM product LIMIT 5 OFFSET 10 

Отримаємо такий результат запиту:

id name brand price count
11 Крісло Bosch 44.00 8
12 Вазон SmartFlower 99.00 9
13 Підставка IKEA 100.00 10

Сервер повернув лише 3 рядки, а отже у нашій таблиці всього було 13 рядків. Сервер пропустив перші 10 і повернув наступні 5.

3. SELECT DISTINCT

Є ще одне корисне ключове слово — це DISTINCT. Воно використовується, коли в таблиці є записи, що дублюються, і ми хочемо видалити дублікати.

Звідки ж узятись у нашій таблиці дублікатам? У таблиці дублікатів може і не бути, а от у результаті запиту — легко. Давай напишемо запит, який поверне бренди всіх товарів, що ми продаємо. Ось як цей запит буде виглядати:

 SELECT brand FROM product 

Отримаємо такий результат запиту:

brand
IKEA
IKEA
IKEA
IKEA
Bosch
Bosch
LG
LG
IKEA
Bosсh
Bosсh
SmartFlower
IKEA

Легко побачити, що в цій таблиці є рядки-дублікати. Саме щоб дублікатів не було і потрібно використовувати ключове слово DISTINCT. Ось як буде виглядати виправлений запит:

 SELECT DISTINCT brand FROM product 

Отримаємо такий результат запиту:

brand
IKEA
Bosh
LG
SmartFlower

Так набагато краще. Чи не правда? ;)

4. ORDER BY

І нарешті ми дісталися до сортування. Щоб відсортувати результати запиту, потрібно використовувати ключове слово ORDER BY. Технічно це — два слова, але це не суттєво. Слова два, а оператор один.

Писати його потрібно після ключового слова WHERE, але перед LIMIT та OFFSET. Якщо ти напишеш ORDER BY після LIMIT, то SQL-сервер просто поверне тобі помилку.

Загалом виглядає цей оператор так:

 ORDER BY  колонка порядок 

Де колонка — це ім'я колонки у таблиці/результаті сортування. А порядок – це порядок сортування.

Порядок сортування може бути трьох варіантів:

  • ASC (від Ascending) – за зростанням;
  • DESC (від Descending) – за спаданням;
  • Не вказано — буде використано ASC

Давай напишемо запит, який поверне нам перелік товарів, відсортованих за зростанням ціни. Ось як цей запит буде виглядати:

 SELECT*FROM product ORDER BY price ASC LIMIT 10 

Отримаємо такий результат запиту:

id name brand price count
2 Стул< /td> IKEA 5.00 45
8 Лампа LG 15.00 100
1 Стіл IKEA 20.00 15
6 Полиця Bosch 25.00 114
11 Крісло Bosch 44.00 8
4 Ліжко IKEA 75.00 10
3 Диван IKEA 80.00 10
12 Вазон SmartFlower 99.00 9
9 Комод IKEA 99.00 10< /td>
13 Підставка IKEA 100.00 10

Той самий результат ми отримаємо, якщо не вкажемо порядок сортування — пропустимо слово ASC.

5. ORDER BY за кількома колонкам

Оператор ORDER BY дозволяє відсортувати результат за кількома колонками. Це буває дуже корисно, коли в першій колонці дуже багато елементів, що повторюються. Загальний вигляд цього оператора такий:

 ORDER BY колонка1 порядок1, колонка2 порядок2, колонка3 порядок3 

Іншими словами, якщо після сортування за першою колонкою в тебе поруч виявилося кілька однакових значень, то їх сортують за другою колонкою, і так далі. Давай напишемо запит, за допомогою якого відсортуємо наші продукти за брендом, а для продуктів з однаковим брендом – за зменшенням їх кількості. Ось як цей запит буде виглядати:

 SELECT * FROM product 
ORDER BY brand ASC, count DESC 

Отримаємо такий результат запиту:

id name brand price count
6 Полиця Bosch 25.00 114
5 Шафа Bosch 125.00 15
10 Плита Bosch 199.00 10
11 Крісло Bosh 44.00 8
2 Стілець IKEA 5.00 45
1 Стіл IKEA 20.00 15
9 Комод IKEA 99.00 10
13 Підставка IKEA 100.00 10
4 Ліжко IKEA 75.00 10
3 Диван IKEA 80.00 10
8 Лампа LG 15.00 100
7 Телевізор LG 350.00 4
12 Вазон SmartFlower 99.00 9

Поглянь уважно на таблицю: її рядки відсортовані за назвою бренду (алфавітний порядок), а рядки з однаковою назвою бренду відсортовані за зменшенням кількості продуктів (остання колонка).