У SQL фільтрація та організація даних є важливими операціями, які дозволяють користувачам отримувати значущу інформацію з баз даних. Цей посібник охоплює три основні SQL-клаузи — WHERE
, ORDER BY
та GROUP BY
з поясненнями, прикладами та практичними порадами.
1. Фільтрація даних: чому це важливо
Працюючи з базами даних, ми часто маємо справу з великими наборами даних. Однак не всі дані є релевантними для кожного запиту. Фільтрація допомагає зосередитись на конкретних підмножинах даних, забезпечуючи ефективне і змістовне отримання інформації.
Переваги фільтрації:
- Отримувати лише необхідні дані, а не весь набір даних.
- Організувати дані для кращого читання та аналізу.
- Агрегувати та узагальнювати дані для прийняття рішень.
2. Клаузула WHERE
Клаузула WHERE використовується для фільтрації рядків за певною умовою. Це одна з найбільш часто використовуваних SQL-клауз для звуження результатів.
Синтаксис:
SELECT column1, column2, ...
FROM table_name
WHERE condition;
Приклади:
1. Фільтрація за однією умовою
- Отримати всіх студентів старших за 25 років
SELECT * FROM students
WHERE age > 25;
2. Об'єднання умов за допомогою логічних операторів
Використовуйте AND, щоб вимагати виконання кількох умов:
Отримати студентів старших за 25 років та з оцінками понад 80
SELECT * FROM students
WHERE age > 25 AND grade > 80;
Використовуйте OR, щоб дозволити виконання хоча б однієї з кількох умов:
Отримати студентів старших за 25 років або з оцінками понад 80
SELECT * FROM students
WHERE age > 25 OR grade > 80;
3. Фільтрація за допомогою порівняння з шаблоном: використовуйте оператор LIKE для часткових збігів
SELECT * FROM students
WHERE name LIKE 'A%'; -- Імена, що починаються з 'A'
Основні моменти
- Використовуйте клаузулу
WHERE
на початку запиту, щоб зменшити обсяг даних для обробки. - Ефективно комбінуйте умови за допомогою логічних операторів, таких як
AND
,OR
таNOT
.
3. Клаузула ORDER BY
Клаузула ORDER BY
використовується для сортування результатів запиту в порядку зростання (за замовчуванням) або спадання.
Синтаксис:
SELECT column1, column2, ...
FROM table_name
ORDER BY column1 [ASC|DESC], column2 [ASC|DESC];
Приклади:
Сортування за однією колонкою:
Отримати всіх студентів, відсортованих за оцінками в порядку зростання
SELECT * FROM students
ORDER BY grade;
Сортування у зворотному порядку:
Отримати всіх студентів, відсортованих за оцінками в порядку спадання
SELECT * FROM students
ORDER BY grade DESC;
Сортування за кількома колонками:
Отримати всіх студентів, відсортованих спочатку за віком (за зростанням), а потім за оцінками (за спаданням)
SELECT * FROM students
ORDER BY age ASC, grade DESC;
Основні моменти
- Використовуйте
ORDER BY
для кращого візуалізування даних та покращення їх читабельності. - Сортування за кількома колонками дозволяє створювати ієрархічну організацію результатів.
4. Клаузула GROUP BY
Клаузула GROUP BY
використовується для групування рядків, які мають однакові значення в зазначених колонках. Часто використовується разом з агрегуючими функціями, такими як SUM()
, AVG()
, COUNT()
, MAX()
та MIN()
.
Синтаксис:
SELECT column1, aggregate_function(column2)
FROM table_name
GROUP BY column1;
Приклади:
Обчислення агрегованих значень за групами:
Знайти середній бал для кожної вікової групи
SELECT age, AVG(grade) AS average_grade
FROM students
GROUP BY age;
Підрахунок рядків за групами:
Порахувати кількість студентів у кожній віковій групі
SELECT age, COUNT(*) AS total_students
FROM students
GROUP BY age;
Фільтрація груп за допомогою HAVING:
Використовуйте клаузулу HAVING для фільтрації агрегованих даних та отримання вікових груп, де середній бал більший за 80
SELECT age, AVG(grade) AS average_grade
FROM students
GROUP BY age
HAVING AVG(grade) > 80;
Основні моменти
- Клаузула
GROUP BY
використовується для агрегації даних в осмислені групи. - Клаузула
HAVING
фільтрує агреговані результати (аналогічно клаузулі WHERE для рядків).
Комбінування WHERE, ORDER BY та GROUP BY
SQL-запити часто комбінують ці клаузи для виконання більш складних операцій.
Приклад:
Отримати середній бал для вікових груп, де оцінки більші за 75, і відсортувати результати за середнім балом у порядку спадання
SELECT age, AVG(grade) AS average_grade
FROM students
WHERE grade > 75
GROUP BY age
ORDER BY average_grade DESC;
6. Практичні випадки використання
Аналіз даних:
Використовуйте GROUP BY з агрегуючими функціями для узагальнення даних для звітів.Очищення даних:
Використовуйте WHERE для фільтрації непотрібних рядків.Представлення даних:
Використовуйте ORDER BY для організації даних для інформаційних панелей або візуалізацій.
7. Типові помилки
Невірна клаузула WHERE
- Використання умов, які не відповідають типу даних колонки.
- Приклад: Порівняння рядка з числом.
Використання ORDER BY без розуміння поведінки за замовчуванням
- Сортування за замовчуванням відбувається у порядку зростання, якщо явно не зазначено DESC.
Групування без агрегації
- Використання GROUP BY без агрегуючої функції призводить до непередбачуваних результатів.
8. Підсумок
- Клаузула WHERE фільтрує рядки за умовами.
- Клаузула ORDER BY сортує результати запиту в порядку зростання або спадання.
- Клаузула GROUP BY агрегує рядки в групи для узагальнення.
Перекладено з: Filtering Data in SQL using WHERE, ORDER BY, and GROUP BY