Наглядные примеры использования 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 мы вводим дополнительное условие для группировок.


Вот и все. С такими знаниями - да в бой идти не страшно:)

0   0   0000-00-00 00:00:00