Продукт
|
Количество
|
Цена
|
1
|
108
|
429,84
|
2
|
0
|
0,00
|
3
|
73
|
274,61
|
4
|
39
|
97,46
|
5
|
61
|
111,83
|
6
|
88
|
206,60
|
7
|
214
|
83,80
|
8
|
92
|
82,80
|
9
|
0
|
0,00
|
10
|
77
|
46,30
|
11
|
46
|
51,70
|
12
|
13
|
34,96
|
13
|
54
|
51,17
|
14
|
91
|
43,77
|
15
|
117
|
189,92
|
16
|
98
|
96,14
|
17
|
37
|
166,50
|
Блюдо
|
Вид
|
Дата
|
1
|
1
|
2011-01-02
|
2
|
1
|
2011-01-02
|
2
|
1
|
2011-01-03
|
4
|
1
|
2011-01-03
|
9
|
2
|
2011-01-02
|
10
|
2
|
2011-01-03
|
12
|
2
|
2011-01-02
|
14
|
3
|
2011-01-02
|
15
|
3
|
2011-01-02
|
15
|
3
|
2011-01-03
|
16
|
3
|
2011-01-03
|
25
|
4
|
2011-01-03
|
27
|
4
|
2011-01-02
|
30
|
5
|
2011-01-03
|
33
|
5
|
2011-01-02
|
…
|
|
|
Таблица Заказ. Таблица Справочник_вид_блюда.
ID_заказ
|
Блюдо
|
Количество_порций
|
Дата
|
1
|
1
|
10
|
2011-01-02
|
1
|
14
|
4
|
2011-01-02
|
1
|
15
|
6
|
2011-01-02
|
2
|
27
|
2
|
2011-01-02
|
2
|
33
|
2
|
2011-01-02
|
3
|
2
|
3
|
2011-01-03
|
3
|
15
|
2
|
2011-01-03
|
3
|
16
|
1
|
2011-01-03
|
4
|
25
|
1
|
2011-01-03
|
5
|
4
|
3
|
2011-01-03
|
…
|
|
|
|
ID_вид
|
Вид
|
1
|
Закуска
|
2
|
Суп
|
3
|
Горячее
|
4
|
Десерт
|
5
|
Напиток
|
Глава 3. Выборка данных.
Все запросы на получение практически любого количества данных из одной или нескольких таблиц выполняются с помощью единственного оператора SELECT. В общем случае результатом выполнения оператора SELECT является другая таблица. К этой новой (рабочей) таблице может быть снова применена операция SELECT и т.д., т.е. такие операции могут быть вложены друг в друга. Представляет исторический интерес тот факт, что именно возможность включения одного предложения SELECT внутрь другого послужила мотивировкой использования прилагательного "структурированный" в названии языка SQL.
3.1. Оператор SELECT. Синтаксис.
Оператор SELECT может использоваться как:
самостоятельная команда на получение и вывод строк таблицы, сформированной из столбцов и строк одной или нескольких таблиц (представлений);
элемент WHERE- или HAVING-условия (сокращенный вариант предложения, называемый "вложенный запрос");
фраза выбора в командах CREAT VIEW, DECLARE CURSOR или INSERT;
средство присвоения глобальным переменным значений из строк сформированной таблицы (INTO-фраза).
Оператор SELECT (выбрать) имеет следующий формат:
SELECT [[ALL] | DISTINCT] [ТОР n [PERCENT]] [WITH TIES] {* | элемент_SELECT [, элемент_SELECT] ...}
FROM таблица [псевдоним] [, таблица [псевдоним]] ...
[WHERE условие_отбора_строк]
[GROUP BY [таблица.]столбец [, [таблица.]столбец] ...
[HAVING условие_отбора_групп]]
[ORDER BY {[таблица.]столбец | номер_элемента_SELECT} [[ASC] | DESC]
[, {[таблица.]столбец | номер_элемента_SELECT } [ [ASC] | DESC] ] ...] ];
Этот оператор можно прочитать следующим образом:
SELECT (выбрать) — данные из указанных столбцов и (если необходимо) выполнить перед выводом их преобразование в соответствии с указанными выражениями и (или) функциями
FROM (из) — перечисленных таблиц, в которых расположены эти столбцы
WHERE (где) — строки из указанных таблиц должны удовлетворять указанному перечню условий отбора строк
GROUP BY (группируя по) — указанному перечню столбцов с тем, чтобы получить для каждой группы единственное агрегированное значение, используя во фразе SELECT SQL-функции SUM (сумма), COUNT (количество), MIN (минимальное значение), MAX (максимальное значение) или AVG (среднее значение)
HAVING (имея) — в результате лишь те группы, которые удовлетворяют указанному перечню условий отбора групп
ORDER BY (упорядочить) — результаты выбора данных по указанному перечню столбцов. При этом упорядочение можно производить в порядке возрастания - ASC (ASCending)(по умолчанию) или убывания DESC (DESCending).
Рассмотрим каждую строку этого оператора подробно.
Раздел SELECT.
В разделе SELECT указывается список столбцов, которые будут включены в результат выборки. Структура раздела SELECT следующая:
SELECT [[ALL] | DISTINCT] [ТОР n [PERCENT]] [WITH TIES] {* | элемент_SELECT [, элемент_SELECT]...}
Параметры раздела обозначают следующее:
ALL – указывает, что в результат выборки должны быть включены все строки возвращаемые запросом, т.е. выборка может содержать повторяющиеся строки (используется по умолчанию).
DISTINCT – позволяет исключить из выборки повторяющиеся строки.
ТОР n [PERCENT] [WITH TIES] – ограничивает количество строк в выборке. Параметр n задает максимальное количество строк, при указании параметра PERCENT количество строк задается в процентах от общего числа строк, возвращаемых запросом.
*- означает включение в результат выборки всех столбцов всех таблиц, участвующих в запросе и указанных в разделе FROM. При этом порядок вывода полей соответствует порядку, в котором эти поля определялись при создании таблиц.
элемент_SELECT – список столбцов, которые включены в результат выборки. Структура этой конструкции следующая:
элемент_SELECT = {[таблица.]* | [таблица.]столбец [AS псевдоним] | (выражение) [AS псевдоним] | константа [AS псевдоним] | переменная [AS псевдоним] | SQL_функция [AS псевдоним]}
термин таблица – используется для обобщения понятий: базовая таблица, представление.
выражение – подразумевает выражение, на основе которого будет формироваться содержимое столбца.
AS псевдоним – определение псевдонима для столбца.
Раздел FROM.
Раздел FROM содержит список таблиц, из которых будет производиться выборка данных.
Структура раздела FROM следующая:
FROM таблица [псевдоним] [, таблица [псевдоним]] ...
псевдоним - позволяет присвоить таблице имя, под которым на неё можно будет ссылаться в запросе, служит для упрощения вида запроса при работе с длинными именами таблиц и для именования временных таблиц (полученных в результате выполнения оператора SELECT)
Также в разделе FROM можно указать метод связывания таблиц между собой (фраза JOIN будет рассмотрена в п. 3.4.)
Следует обратить внимание на тот факт, что если даже ни один из столбцов таблицы не включен в результат запроса, но используется в других разделах запроса, то имя этой таблицы также должно быть указано в разделе FROM.
3.2. Примеры запросов с использованием единственной таблицы. 3.2.1. Выборка без использования фразы WHERE. 3.2.1.1. Простейшие примеры.
Пример 1.
Для каждого продукта, используемого в ресторане, указать количество белков, жиров и углеводов.
SELECT Продукт, Белки, Жиры, Углеводы
FROM Продукты;
дает результат
Результат
|
|
|
|
Продукт
|
Белки
|
Жиры
|
Углеводы
|
Говядина
|
189
|
124
|
NULL
|
Судак
|
190
|
80
|
NULL
|
Масло
|
60
|
825
|
90
|
Майонез
|
31
|
670
|
26
|
Яйца
|
127
|
115
|
7
|
…
|
|
|
|
Кофе
|
127
|
36
|
9
|
При необходимости получения полной информации о продуктах, можно было бы дать запрос
SELECT ID_продукта, Продукт, Белки, Жиры, Углеводы, К, Са, Na, В2, РР, С
FROM Продукты;
или использовать его более короткую нотацию:
SELECT *
Результат
|
|
Основа
|
Кофе
|
Крупа
|
Молок
|
Мясо
|
Овощи
|
Рыба
|
Фрукты
|
Яйца
| FROM Продукты;
Результат
|
|
Основа
|
Овощи
|
Мясо
|
Овощи
|
Рыба
|
Рыба
|
Мясо
|
Молоко
|
…
|
Кофе
|
Пример 2.
Выдать основу всех блюд:
Do'stlaringiz bilan baham: |