Наглядные примеры использования SELECT в MySQL
Введение
Достаточно сложно встретить в интернете годную информацию по использованию оператора SELECT в SQL-запросах. Обычно дело ограничивается только описанием.
В данной статье будет разобрано, как и зачем использовать те или иные ключевые слова оператора. Понимание будет подкреплено наглядными примерами.
Теперь немного информации из Wikipedia:
Оператор SELECT имеет следующую структуру:
SELECT
[DISTINCT | DISTINCTROW | ALL]
select_expression,...
[FROM table_references]
[WHERE where_definition]
[GROUP BY {unsigned_integer | col_name | formula}]
[HAVING where_definition]
[ORDER BY {unsigned_integer | col_name | formula} [ASC | DESC], ...]
Основные ключевые слова, относящиеся к запросу SELECT:
• WHERE — используется для определения, какие строки должны быть выбраны или включены в GROUP BY.
• GROUP BY — используется для объединения строк с общими значениями в элементы меньшего набора строк.
• HAVING — используется для определения, какие строки после GROUP BY должны быть выбраны.
• ORDER BY — используется для определения, какие столбцы используются для сортировки результирующего набора данных.
Этой теории нам достаточно для написания запросов.
Примеры
Для начала, понадобится тестовая таблица(назовем её `test_table`) со всеми данными, по которой мы будем делать выборку.
| id | category | product | cost |
| 1 | Инструменты | Набор гаечных ключей | 1200 |
| 3 | Инструменты | Шуруповерт | 700 |
| 4 | Инструменты | Перфоратор | 3560 |
| 5 | Инструменты | Набор отверток | 630 |
| 6 | Инструменты | Рубанок | 270 |
| 8 | Инструменты | Дрель | 1420 |
| 13 | Электроника | Сотовый телефон | 17990 |
| 14 | Электроника | Пылесос | 4280 |
| 15 | Электроника | Стиральная машинка | 14790 |
| 16 | Электроника | Телевизор | 10500 |
| 18 | Электроника | Компьютер | 45850 |
| 27 | Мебель | Диван | 20000 |
| 28 | Мебель | Письменный стол | 4200 |
| 29 | Мебель | Шкаф-купе | 23740 |
| 31 | Посуда | Набор тарелок | 1500 |
| 32 | Посуда | Набор столовых приборов | 1600 |
| 33 | Посуда | Набор кострюль | 1700 |
| 34 | Посуда | Набор ножей | 800 |
Запросы
1. Самый простой запрос, конечно же, будет выглядеть так:
SELECT * FROM `test_table`
| id | category | product | cost |
| 1 | Инструменты | Набор гаечных ключей | 1200 |
| 3 | Инструменты | Шуруповерт | 700 |
| 4 | Инструменты | Перфоратор | 3560 |
| 5 | Инструменты | Набор отверток | 630 |
| 6 | Инструменты | Рубанок | 270 |
| 8 | Инструменты | Дрель | 1420 |
| 13 | Электроника | Сотовый телефон | 17990 |
| 14 | Электроника | Пылесос | 4280 |
| 15 | Электроника | Стиральная машинка | 14790 |
| 16 | Электроника | Телевизор | 10500 |
| 18 | Электроника | Компьютер | 45850 |
| 27 | Мебель | Диван | 20000 |
| 28 | Мебель | Письменный стол | 4200 |
| 29 | Мебель | Шкаф-купе | 23740 |
| 31 | Посуда | Набор тарелок | 1500 |
| 32 | Посуда | Набор столовых приборов | 1600 |
| 33 | Посуда | Набор кострюль | 1700 |
| 34 | Посуда | Набор ножей | 800 |
Результатом выполнения запроса, как мы видим, является отображение всех данных из таблицы.
2. Теперь выполним запрос с условием WHERE:
SELECT * FROM `test_table` WHERE `category`='Инструменты'
| id | category | product | cost |
| 1 | Инструменты | Набор гаечных ключей | 1200 |
| 3 | Инструменты | Шуруповерт | 700 |
| 4 | Инструменты | Перфоратор | 3560 |
| 5 | Инструменты | Набор отверток | 630 |
| 6 | Инструменты | Рубанок | 270 |
| 8 | Инструменты | Дрель | 1420 |
После выполнения данного запроса у нас в выборке присутствуют данные только с категорией «Инструменты».
3. Дальше, выведем количество инструментов и их общую стоимость одним запросом:
SELECT COUNT(`id`) as 'Количество', SUM(`cost`) as 'Общая стоимость' FROM `test_table` WHERE `category`='Инструменты'
| Количество | Общая стоимость |
| 6 | 7780 |
4. Но, что если нам нужно сделать те же манипуляции, но для всех категорий. Не делать же нам несколько запросов. Все можно выполнить одним:
SELECT `category` as 'Категория', COUNT(`id`) as 'Количество', SUM(`cost`) as 'Стоимость' FROM `test_table` GROUP BY `category`
| Категория | Количество | Стоимость |
| Инструменты | 6 | 7780 |
| Мебель | 3 | 47940 |
| Посуда | 4 | 5600 |
| Электроника | 5 | 93410 |
Как видим, очень удобно.
5. Теперь добавим сортировку к предыдущему запросу. Сортировать будем по возрастанию стоимости:
SELECT `category` as 'Категория', COUNT(`id`) as 'Количество', SUM(`cost`) as 'Стоимость' FROM `test_table` GROUP BY `category` ORDER BY SUM(`cost`) ASC
| Категория | Количество | Стоимость |
| Посуда | 4 | 5600 |
| Инструменты | 6 | 7780 |
| Мебель | 3 | 47940 |
| Электроника | 5 | 93410 |
Получается, мы в предыдущем запросе сделали группировку по общим значениям в колонке "Категория" и посчитали стоимость категории и количество товара в ней.
6. Ну и еще один способ задать условия выбора – использовать ключевое слово HAVING. Модифицируем предыдущий запрос, выбрав только те категории, где количество элементов больше 5:
SELECT `category` as 'Категория', COUNT(`id`) as 'Количество', SUM(`cost`) as 'Стоимость' FROM `test_table` GROUP BY `category` HAVING COUNT(`id`)>=5
| Категория | Количество | Стоимость |
| Инструменты | 6 | 7780 |
| Электроника | 5 | 93410 |
Получается, с помощью конструкции HAVING мы вводим дополнительное условие для группировок.
Вот и все. С такими знаниями - да в бой идти не страшно:)
Comments
https://www.etutorialspoint.com/index.php/mysql-tutorial/mysql-create-table