- •Глава 1. Историческая справка. 10
- •Глава 2. Пример бд «Ресторан». 20
- •Глава 3. Выборка данных. 25
- •Глава 4. Подзапросы и производные таблицы 65
- •Глава 5. Функции ранжирования. 86
- •Глава 1. Историческая справка.
- •Стандарты.
- •1.2. Структура sql.
- •Глава 2. Пример бд «Ресторан».
- •2.1. Описание.
- •2.2. Диаграмма.
- •2.3. Данные в таблицах.
- •Глава 3. Выборка данных.
- •3.1. Оператор select. Синтаксис.
- •3.2. Примеры запросов с использованием единственной таблицы.
- •3.2.1. Выборка без использования фразы where.
- •3.2.1.1. Простейшие примеры.
- •3.2.1.2. Исключение дубликатов (distinct).
- •3.2.1.3. Выборка вычисляемых значений.
- •3.2.2. Выборка c использованием фразы where.
- •3.2.2.1. Использование операторов сравнения.
- •3.2.2.2. Сравнение с null.
- •3.2.2.3. Использование between.
- •3.2.2.4. Использование in (not in).
- •3.2.2.5. Использование like.
- •3.2.2.6. Выборка с упорядочением.
- •3.2.3. Использование агрегатных функций для подведения итогов.
- •3.2.3.1. Агрегатные функции без использования фразы group by.
- •3.2.3.2. Фраза group by.
- •3.2.3.3. Раздел having.
- •3.3. Примеры запросов с использованием нескольких таблиц.
- •3.3.1. Соединения «с условием where».
- •3.3.2. Соединение таблиц с дополнительными условиями.
- •3.3.2.1. Соединение таблицы со своей копией.
- •3.4. Соединения нескольких таблиц, используя join.
- •3.4.1. Внутреннее соединение.
- •3.4.2. Внешнее соединение.
- •3.4.2.1. Левое внешнее соединение.
- •3.4.2.2. Правое внешнее соединение.
- •3.4.2.3. Полное внешнее соединение.
- •3.4.2.4. Перекрёстное соединение.
- •3.4.3. Реальные примеры соединений.
- •Isnull(cast(n.Количество as varchar), ’нет’) as на_складе
- •Isnull(cast(n.Количество as varchar),’нет’) as на_складе
- •Глава 4. Подзапросы и производные таблицы
- •4.1.Производная таблица.
- •4.2. Вложенные подзапросы
- •4.2.1 Простые вложенные подзапросы
- •4.2.2. Использование одной и той же таблицы во внешнем и вложенном подзапросе
- •4.2.3. Использование агрегатных функций в подзапросах.
- •4.2.4. Подзапросы в предложении having.
- •4.3. Соотнесенные подзапросы.
- •4.4 Использование оператора exists.
- •4.5. Использование операторов any и all.
- •4.6. Объединение запросов union.
- •4.6.1. Union и устранение дубликатов.
- •4.6.2. Использование строк и выражений с union.
- •4.6.3. Использование union с order by.
- •4.6.4. Реализация внешнего полного соединения через запросы с union.
- •Глава 5. Функции ранжирования.
- •5.1. Функция row_number.
- •5.2. Функции rank() и dense_rank()
- •Глава 6. ИспользованиеPivoTиUnpivot.
- •In ([Овощи], [Мясо], [Рыба], [Молоко], [Яйца], [Крупа], [Фрукты], [Кофе])
- •In ( [первый сведенный столбец], [второй сведенный столбец],
- •In ([Овощи], [Мясо], [Рыба], [Молоко], [Яйца], [Крупа], [Фрукты], [Кофе])
- •Insert into Продукты (id_Продукта, Продукт, Белки)
- •Values (18, 'Горох', 180 );
- •Insert into Продукты (Продукт, Белки, Жиры)
- •7.4. Оператор update.
- •Глава 8. Представление.
- •Insert into Список_блюд values (36, 'Рагу', 3, 20);
- •Глава 9. Создание, изменение и удаление таблиц.
- •9.1. Оператор create table
- •6. Ограничение identity (автоинкрементное поле).
- •9.2. Изменение таблицы после того как она была создана (alter table).
- •9.3. Удаление таблицы (drop table).
- •9.4. Операторы создания и удаления индексов.
- •9.5. Понятие домена
- •Глава 10. Обобщенные табличные выражения (сте).
- •Представления, производные таблицы и выражения cte.
- •Рекурсивные запросы.
- •Id_father integer foreign key references Tree (id),
- •Values (1, null, 'all'), (2, 1, 'sea'), (3, 1, 'earth'),
- •Деревья без рекурсии.
- •Пример использования сте для решения задачи Коммивояжера.
- •Insert into tur select to_town, from_town, miles from tur;
- •Глава 11. Этапы выполнения командыSql.
- •11.1. Оптимизация запросов.
- •Приложение 1. Реализация реляционной алгебры средствами оператора select (Реляционная полнота sql).
- •Intersect
- •Рекомендуемая литература
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 |
Жиры, Углеводы
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 |
… |
|
|
|
|
|
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 |
ORDER BY 2 DESC;
Результат упорядочен по убыванию цены, и с помощью TOP 1 в выборку включена только первая строка.
3.2.3. Использование агрегатных функций для подведения итогов.
В SQL существует ряд специальных агрегатных (статических) функций. Каждая из этих функций оперирует совокупностью значений столбца некоторой таблицы и создает единственное значение, определяемое так:
COUNT(столбец) – возвращает количество строк с непустым значением (не NULL) в заданном столбце,
COUNT(*) – возвращает общее количество строк в выборке, включая строки со значением NULL,
SUM (столбец) – возвращает сумму всех значений в пределах группы в заданном столбце, применима только к столбцам с числовыми значениями,
AVG (столбец) – возвращает среднее арифметическое для указанного столбца в пределах строк, принадлежащих одной группе, применима только к столбцам с числовым типом данных,
MAX(столбец) - возвращает наибольшее значение в указанном столбце в пределах группы,
MIN (столбец) - возвращает наименьшее значение в указанном столбце в пределах группы.
Следует отметить, что здесь столбец - это столбец виртуальной таблицы, в которой могут содержаться данные не только из столбца базовой таблицы, но и данные, полученные путем функционального преобразования и (или) связывания символами арифметических операций значений из одного или нескольких столбцов. При этом выражение, определяющее столбец такой таблицы, может быть сколь угодно сложным, но не должно содержать агрегатные функции (вложенность агрегатных функций не допускается). Однако из агрегатных функций можно составлять любые выражения.
Аргументу всех функций, кроме COUNT(*), может предшествовать ключевое слово DISTINCT (различный), указывающее, что избыточные дублирующие значения должны быть исключены перед тем, как будет применяться функция.
Агрегатные функции могут быть использованы в качестве выражений только в следующих случаях.
Список выбора инструкции SELECT (вложенный или внешний запрос).
Предложение HAVING.