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 |
Поглянь уважно на таблицю: її рядки відсортовані за назвою бренду (алфавітний порядок), а рядки з однаковою назвою бренду відсортовані за зменшенням кількості продуктів (остання колонка).
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ