ID_блюда
|
Блюдо
|
Вид
|
Основа
|
Вес
|
Труд
|
1
|
Салат летний
|
1
|
Овощи
|
200
|
3
|
3
|
Салат витаминный
|
1
|
Овощи
|
200
|
4
|
16
|
Драчена
|
3
|
Яйца
|
180
|
4
|
17
|
Морковь с рисом
|
3
|
Овощи
|
260
|
3
|
19
|
Омлет с луком
|
3
|
Яйца
|
200
|
5
|
20
|
Каша рисовая
|
3
|
Крупа
|
210
|
4
|
21
|
Пудинг рисовый
|
3
|
Крупа
|
160
|
6
|
23
|
Помидоры с луком
|
3
|
Овощи
|
260
|
4
|
Рассмотренная форма IN является в действительности просто краткой записью последовательности отдельных сравнений, соединенных операторами OR. Предыдущее предложение эквивалентно такому:
SELECT *
FROM Блюда
WHERE Основа=’Яйца’ OR Основа=’Крупа’ OR Основа=’Овощи’;
3.2.2.5. Использование LIKE.
LIKE определяет, совпадает ли указанная символьная строка с заданным шаблоном. Шаблон может включать обычные символы и символы-шаблоны. Во время сравнения с шаблоном необходимо, чтобы его обычные символы в точности совпадали с символами, указанными в строке. Использование символов-шаблонов с оператором LIKE предоставляет больше возможностей, чем использование операторов сравнения строк = и < >.
Синтаксис:
выражение [NOT] LIKE строка_шаблон [ESCAPE esc_символ]
Символы строки_ шаблона интерпретируются следующим образом:
символ _ (подчеркивание) – заменяет любой одиночный символ,
символ % (процент) – заменяет любую последовательность из N символов (где N может быть нулем),
все другие символы означают просто сами себя.
[] – любой одиночный символ внутри диапазона([a-f]) или набора [abcdf].
[^]- любой одиночный символ, не принадлежащий диапазону ([^a-f]) или набору [^abcdf].
Пример 9.
Результат
|
|
Блюдо
|
Салат летний
|
Салат мясной
|
Салат витаминный
|
Салат рыбный
| Выдать перечень салатов.
SELECT Блюдо
FROM Блюда
WHERE Блюдо LIKE 'Салат%';
В приведенном примере SELECT будет осуществлять выборку записей из таблицы Блюда, для которых значение в столбце Блюдо начинается сочетанием 'Салат' и содержит любую последовательность из нуля или более символов, следующих за сочетанием 'Салат'. Если бы среди блюд были "Луковый салат", "Фруктовый салат" и т.п., то они не были бы найдены. Для их отыскания надо изменить фразу WHERE:
WHERE Блюдо LIKE '%салат%'
(при отсутствии различий между малыми и большими буквами (такую настройку допускают некоторые СУБД))
А что делать, если необходимо искать знак процента или знак подчеркивания в строке? В LIKE предикате, вы можете определить любой одиночный символ как символ ESCAPE. Символ ESCAPE используется сразу перед процентом (подчеркиванием) в предикате, и означает, что процент (подчеркивание) будет интерпретироваться как обычный символ, а не как служебный. Например, мы могли бы найти все блюда, где присутствует символ подчеркивания, следующим образом:
SELECT *
FROM Блюда
WHERE Блюдо LIKE '%/_%' ESCAPE '/';
Данное предложение WHERE определяет '/' как символ ESCAPE. Символ ESCAPE должен быть одиночным символом и применяться только к одиночному символу сразу после него.
В примере выше, символ % начала и символ % окончания обрабатываются как служебные символы; только подчеркивание предоставлено само себе.
3.2.2.6. Выборка с упорядочением.
Синтаксис:
ORDER BY {[таблица.]столбец | номер_элемента_SELECT} [[ASC] | DESC]
[, {[таблица.]столбец | номер_элемента_SELECT } [ [ASC] | DESC] ] ...]
Простейший вариант этой фразы - упорядочение строк результата по значению одного из столбцов с указанием порядка (ASC возрастание (ASCending)(по умолчанию) или убывания DESC (DESCending)) сортировки.
Пример 10.
Выдать перечень продуктов и содержание в них основных веществ в порядке убывания содержания белка.
Результат
|
|
|
|
Продукт
|
Белки
|
Жиры
|
Углеводы
|
Судак
|
190
|
80
|
NULL
|
Говядина
|
189
|
124
|
NULL
|
Творог
|
167
|
90
|
13
|
Яйца
|
127
|
115
|
7
|
…
|
|
|
|
Яблоки
|
4
|
NULL
|
113
| SELECT Продукт, Белки,
Жиры, Углеводы
FROM Продукты
ORDER BY Белки DESC;
При включении в список ORDER BY нескольких столбцов, СУБД сортирует строки результата по значениям первого столбца списка, пока не появится несколько строк с одинаковыми значениями данных в этом столбце. Такие строки сортируются по значениям следующего столбца из списка ORDER BY и т.д.
Например, выдать содержимое таблицы Блюда, отсортировав ее строки по видам блюд и основе:
Результат
|
|
|
|
|
|
ID_блюда
|
Блюдо
|
Вид
|
Основа
|
Вес
|
Труд
|
7
|
Сметана
|
1
|
Молоко
|
140
|
1
|
8
|
Творог
|
1
|
Молоко
|
140
|
2
|
2
|
Салат мясной
|
1
|
Мясо
|
200
|
4
|
6
|
Мясо с гарниром
|
1
|
Мясо
|
250
|
3
|
1
|
Салат летний
|
1
|
Овощи
|
200
|
3
|
3
|
Салат витаминный
|
1
|
Овощи
|
200
|
4
|
4
|
Салат рыбный
|
1
|
Рыба
|
200
|
4
|
5
|
Паштет из рыбы
|
1
|
Рыба
|
120
|
5
|
12
|
Суп молочный
|
2
|
Молоко
|
500
|
3
|
9
|
Суп харчо
|
2
|
Мясо
|
500
|
5
|
…
|
|
|
|
|
| SELECT *
FROM Блюда
ORDER BY Вид, Основа;
Кроме того, в список ORDER BY можно включать не только имя столбца, а его порядковую позицию в перечне SELECT. Благодаря этому возможно упорядочение результатов на основе вычисляемых столбцов, не имеющих имен.
Например, запрос
SELECT Продукт, ((Белки + Углеводы)*4.1+Жиры*9.3)
FROM Продукты
ORDER BY 2;
Пример 11.
Найти продукт, содержащий наименьшее число калорий
SELECT TOP 1 Продукт,
( ISNULL(Белки,0)+ISNULL(Углеводы,0))*4.1+ISNULL(Жиры,0) *9.3
Результат
|
|
Продукт
|
|
Масло
|
8287,5
| FROM Продукты
ORDER BY 2 DESC;
Результат упорядочен по убыванию цены, и с помощью TOP 1 в выборку включена только первая строка.
3.2.3. Использование агрегатных функций для подведения итогов.
В SQL существует ряд специальных агрегатных (статических) функций. Каждая из этих функций оперирует совокупностью значений столбца некоторой таблицы и создает единственное значение, определяемое так:
COUNT(столбец) – возвращает количество строк с непустым значением (не NULL) в заданном столбце,
COUNT(*) – возвращает общее количество строк в выборке, включая строки со значением NULL,
SUM (столбец) – возвращает сумму всех значений в пределах группы в заданном столбце, применима только к столбцам с числовыми значениями,
AVG (столбец) – возвращает среднее арифметическое для указанного столбца в пределах строк, принадлежащих одной группе, применима только к столбцам с числовым типом данных,
MAX(столбец) - возвращает наибольшее значение в указанном столбце в пределах группы,
MIN (столбец) - возвращает наименьшее значение в указанном столбце в пределах группы.
Следует отметить, что здесь столбец - это столбец виртуальной таблицы, в которой могут содержаться данные не только из столбца базовой таблицы, но и данные, полученные путем функционального преобразования и (или) связывания символами арифметических операций значений из одного или нескольких столбцов. При этом выражение, определяющее столбец такой таблицы, может быть сколь угодно сложным, но не должно содержать агрегатные функции (вложенность агрегатных функций не допускается). Однако из агрегатных функций можно составлять любые выражения.
Аргументу всех функций, кроме COUNT(*), может предшествовать ключевое слово DISTINCT (различный), указывающее, что избыточные дублирующие значения должны быть исключены перед тем, как будет применяться функция.
Агрегатные функции могут быть использованы в качестве выражений только в следующих случаях.
Список выбора инструкции SELECT (вложенный или внешний запрос).
Предложение HAVING.
Do'stlaringiz bilan baham: |