MySQL SELECT запросы DISTINCT, GROUP, LIKE, UNION
Запрос mysql SELECT это основа работы с базами данных. С его помощью можно получать данные, фильтровать их, сортировать, группировать и объединять из нескольких таблиц. В этой статье разберём самые популярные варианты MySQL SELECT с подробными объяснениями и примерами.
- MySQL SELECT DISTINCT
- MySQL SELECT GROUP/GROUP BY
- MySQL SELECT INDEX
- MySQL SELECT LEFT
- MySQL SELECT RIGHT
- MySQL SELECT LENGTH
- MySQL SELECT LIKE
- MySQL SELECT TIME
- MySQL SELECT MAX
- MySQL SELECT UNION
MySQL SELECT DISTINCT — выбор уникальных значений
Оператор DISTINCT при select запросе используется когда нужно получить только уникальные значения столбца, исключив дубликаты данных. Это бывает полезно при анализе данных и формировании списков. Допустим, в таблице users есть несколько пользователей из одного города.
SELECT DISTINCT city FROM users;
В итоге каждый город будет выведен только один раз, не зависимо сколько пользователей из этого города.
MySQL SELECT GROUP/GROUP BY группировка данных
При mysql select запросах GROUP BY применяется для объединения строк по определённому полю. Чаще всего используется вместе с агрегатными функциями (COUNT, SUM, AVG, MAX, MIN). Например, подсчитаем количество пользователей в каждом городе:
SELECT city, COUNT(*) AS total FROM users GROUP BY city;
Запрос сгруппирует строки по городу и покажет количество записей в каждой группе.
MySQL SELECT INDEX использование индексов
Индексы ускоряют выполнение запросов MySQL SELECT, то есть, оптимизируют их. Обычно MySQL сам выбирает индекс, но при необходимости можно указать его явно. Более детально про индексы в mysql мы рассказывали в предыдущей статье.
SELECT * FROM users USE INDEX (idx_email) WHERE email = 'test@learn-top.ru';
Такой подход применяется в редких случаях, когда оптимизатор MySQL выбирает неэффективный индекс. Для email адреса или номера телефона обычно используют UNIQUE INDEX.
MySQL SELECT LEFT получение части строки слева
Функция LEFT() позволяет получить заданное количество символов с начала строки.
SELECT LEFT(username, 5) FROM users;
Данный запрос вернёт первые 5 символов имени пользователя из таблицы users.
MySQL SELECT RIGHT получение части строки справа
Функция RIGHT() возвращает указанное количество символов с конца строки.
SELECT RIGHT(phone, 4) FROM users;
Удобно использовать данную функцию, например, для отображения последних цифр номера телефона.
MySQL SELECT LENGTH длина строки
Функция LENGTH() возвращает длину строки в байтах.
SELECT username, LENGTH(username) FROM users;
Полезно при проверке длины данных или валидации.
MySQL SELECT LIKE поиск по шаблону
MySQL функция LIKE используется для поиска по строкам с шаблонами. Ранее мы уже писали об этой функции более детально в статье: like mysql на примерах.
SELECT * FROM users WHERE email LIKE '%@gmail.com';
Символ % означает любое количество символов.
MySQL SELECT TIME работа со временем
MySQL позволяет извлекать время из DATETIME или TIMESTAMP.
SELECT TIME(created_at) FROM orders;
Данный запрос вернет только время, без даты.
SELECT MAX MySQL максимальное значение
Функция MAX() возвращает наибольшее значение в столбце.
SELECT MAX(price) FROM products;
Данный запрос полезен при поиске максимальных цен, рейтинга или или даты.
UNION SELECT MySQL объединение результатов
MySQL оператор UNION объединяет результаты нескольких SELECT запросов в один.
SELECT email FROM users UNION SELECT email FROM subscribers;
Все дубликаты будут автоматически удалены, если же нужны все записи используйте UNION ALL.
Что получаем в итоге
Наглядную таблицу со списком функций и операторов с объяснением.
| Оператор / функция | Описание | Пример использования |
|---|---|---|
| SELECT | Основной оператор для выборки данных из таблицы | SELECT * FROM users; |
| DISTINCT | Возвращает только уникальные значения столбца | SELECT DISTINCT city FROM users; |
| GROUP BY | Группирует строки по указанному полю | SELECT city, COUNT(*) FROM users GROUP BY city; |
| ORDER BY | Сортирует результат запроса | SELECT * FROM users ORDER BY created_at DESC; |
| LIMIT | Ограничивает количество возвращаемых строк | SELECT * FROM users LIMIT 10; |
| LIKE | Поиск по шаблону в строковых данных | SELECT * FROM users WHERE email LIKE ‘%@gmail.com’; |
| LEFT() | Возвращает указанное количество символов слева | SELECT LEFT(username, 5) FROM users; |
| RIGHT() | Возвращает указанное количество символов справа | SELECT RIGHT(phone, 4) FROM users; |
| LENGTH() | Возвращает длину строки | SELECT LENGTH(username) FROM users; |
| MAX() | Возвращает максимальное значение столбца | SELECT MAX(price) FROM products; |
| MIN() | Возвращает минимальное значение столбца | SELECT MIN(price) FROM products; |
| COUNT() | Подсчитывает количество строк | SELECT COUNT(*) FROM users; |
| SUM() | Суммирует значения столбца | SELECT SUM(amount) FROM orders; |
| AVG() | Возвращает среднее значение | SELECT AVG(price) FROM products; |
| TIME() | Извлекает время из DATETIME или TIMESTAMP | SELECT TIME(created_at) FROM orders; |
| UNION | Объединяет результаты нескольких SELECT-запросов без дубликатов | SELECT email FROM users UNION SELECT email FROM subscribers; |
| UNION ALL | Объединяет результаты SELECT с сохранением дубликатов | SELECT email FROM users UNION ALL SELECT email FROM subscribers; |
| USE INDEX | Принудительно указывает индекс для запроса | SELECT * FROM users USE INDEX (idx_email); |
Запрос SELECT в MySQL мощный инструмент, который позволяет:
- Получать уникальные данные (DISTINCT, UNIQUE).
- Группировать и анализировать (GROUP BY, MAX).
- Искать по шаблонам (LIKE).
- Работать со строками (LEFT, RIGHT, LENGTH).
- Объединять результаты (UNION).
- Сортировать и ограничивать выборку (ORDER BY, LIMIT).
Понимание этих возможностей делает работу с базой данных быстрее, удобнее и эффективнее.