Блог о программировании

Наглядные примеры использования SELECT в MySQL

Категория: SQL
 15 января 2016 г. 21:01

Введение

Достаточно сложно встретить в интернете годную информацию по использованию оператора 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`) со всеми данными, по которой мы будем делать выборку.

idcategoryproductcost
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`
idcategoryproductcost
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`='Инструменты'
idcategoryproductcost
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`='Инструменты'
КоличествоОбщая стоимость
67780

4. Но, что если нам нужно сделать те же манипуляции, но для всех категорий. Не делать же нам несколько запросов. Все можно выполнить одним:

SELECT `category` as 'Категория', COUNT(`id`) as 'Количество', SUM(`cost`) as 'Стоимость' FROM `test_table` GROUP BY `category`
КатегорияКоличествоСтоимость
Инструменты
67780
Мебель
347940
Посуда
45600
Электроника
593410

Как видим, очень удобно.

5. Теперь добавим сортировку к предыдущему запросу. Сортировать будем по возрастанию стоимости:

SELECT `category` as 'Категория', COUNT(`id`) as 'Количество', SUM(`cost`) as 'Стоимость' FROM `test_table` GROUP BY `category` ORDER BY SUM(`cost`) ASC
КатегорияКоличествоСтоимость
Посуда
45600
Инструменты
67780
Мебель
347940
Электроника
593410

Получается, мы в предыдущем запросе сделали группировку по общим значениям в колонке "Категория" и посчитали стоимость категории и количество товара в ней.

6. Ну и еще один способ задать условия выбора – использовать ключевое слово HAVING. Модифицируем предыдущий запрос, выбрав только те категории, где количество элементов больше 5:

SELECT `category` as 'Категория', COUNT(`id`) as 'Количество', SUM(`cost`) as 'Стоимость' FROM `test_table` GROUP BY `category` HAVING COUNT(`id`)>=5
КатегорияКоличествоСтоимость
Инструменты
67780
Электроника
593410

Получается, с помощью конструкции HAVING мы вводим дополнительное условие для группировок.


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

Теги:  mysql  select 

Поделиться статьей

Оставить комментарий