
- •Глава 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
- •Рекомендуемая литература
Данное методическое пособие по учебному курсу «Базы данных и экспертные системы» представляет собой основы использования языка SQL на примере работы с MS SQL SERVER. Оно ориентировано в первую очередь на практическое применения языка SQL: создание структуры реляционной базы данных, осуществление выборки из базы данных, модификации данных, создание представлений, индексов. В пособии содержатся теоретические сведения, включая достаточно подробное описание синтаксиса операторов SQL и основные сведения о создании представлений и индексов, приведены методические указания по их использованию.
Пособие содержит большое количество примеров на использование операторов SQL, которые могут быть полезны как на этапе освоения материала, так и выступать в качестве вопросов для самопроверки.
Содержание
Введение. 5
Глава 1. Историческая справка. 10
1.1. Стандарты. 10
1.2. Структура SQL. 16
Глава 2. Пример бд «Ресторан». 20
2.1. Описание. 20
2.2. Диаграмма. 21
2.3. Данные в таблицах. 22
Глава 3. Выборка данных. 25
3.1. Оператор SELECT. Синтаксис. 25
3.2. Примеры запросов с использованием единственной таблицы. 28
3.2.1. Выборка без использования фразы WHERE. 28
3.2.1.1. Простейшие примеры. 28
3.2.1.2. Исключение дубликатов (DISTINCT). 29
3.2.1.3. Выборка вычисляемых значений. 29
3.2.2. Выборка c использованием фразы WHERE. 31
3.2.2.1. Использование операторов сравнения. 31
3.2.2.2. Сравнение с NULL. 32
3.2.2.3. Использование BETWEEN. 33
3.2.2.4. Использование IN (NOT IN). 34
3.2.2.5. Использование LIKE. 35
3.2.2.6. Выборка с упорядочением. 36
3.2.3. Использование агрегатных функций для подведения итогов. 39
3.2.3.1. Агрегатные функции без использования фразы GROUP BY. 40
3.2.3.2. Фраза GROUP BY. 41
3.2.3.3. Раздел HAVING. 46
3.3. Примеры запросов с использованием нескольких таблиц. 48
3.3.1. Соединения «с условием WHERE». 48
3.3.2. Соединение таблиц с дополнительными условиями. 52
3.3.2.1. Соединение таблицы со своей копией. 52
3.4. Соединения нескольких таблиц, используя JOIN. 53
3.4.1. Внутреннее соединение. 55
3.4.2. Внешнее соединение. 55
3.4.2.1. Левое внешнее соединение. 56
3.4.2.2. Правое внешнее соединение. 56
3.4.2.3. Полное внешнее соединение. 57
3.4.2.4. Перекрёстное соединение. 58
3.4.3. Реальные примеры соединений. 60
Глава 4. Подзапросы и производные таблицы 65
4.1.Производная таблица. 65
4.2. Вложенные подзапросы 66
4.2.1 Простые вложенные подзапросы 67
4.2.2. Использование одной и той же таблицы во внешнем и вложенном подзапросе 70
4.2.3. Использование агрегатных функций в подзапросах. 71
4.2.4. Подзапросы в предложении HAVING. 72
4.3. Соотнесенные подзапросы. 73
4.4 Использование оператора EXISTS. 75
4.5. Использование операторов ANY и ALL. 76
4.6. Объединение запросов UNION. 80
4.6.1. UNION и устранение дубликатов. 82
4.6.2. Использование строк и выражений с UNION. 83
4.6.3. Использование UNION с ORDER BY. 84
4.6.4. Реализация внешнего полного соединения через запросы с UNION. 85
Глава 5. Функции ранжирования. 86
5.1. Функция ROW_NUMBER. 87
5.2. Функции RANK() и DENSE_RANK() 89
Глава 6. Использование PIVOT и UNPIVOT. 92
Глава 7. Операторы манипулирования данными. 98
7.1. Оператор INSERT для добавления одной записи. 98
7.2. Оператор INSERT для добавления набора записей. 100
7.3. Оператор DELETE. 101
7.4. Оператор UPDATE. 102
Глава 8. Представление. 104
Глава 9. Создание, изменение и удаление таблиц. 110
9.1. Оператор CREATE TABLE 110
9.2. Изменение таблицы после того как она была создана (ALTER TABLE). 123
9.3. Удаление таблицы (DROP TABLE). 125
9.4. Операторы создания и удаления индексов. 126
Глава 10. Обобщенные табличные выражения (СТЕ). 129
10.1.Представления, производные таблицы и выражения CTE. 129
10.2.Рекурсивные запросы. 134
10.3.Деревья без рекурсии. 139
10.4.Пример использования СТЕ для решения задачи Коммивояжера. 142
Глава 11. Этапы выполнения команды SQL. 148
11.1. Оптимизация запросов. 149
Приложение 1. Реализация реляционной алгебры средствами оператора SELECT (Реляционная полнота SQL). 158
Рекомендуемая литература 162
Введение.
Основные идеи современной информационной технологии базируются на концепции, согласно которой данные должны быть организованы в базы данных (БД) с целью адекватного отображения изменяющегося реального мира и удовлетворения информационных потребностей пользователей. Эти БД создаются и функционируют под управлением специальных программных комплексов, называемых системами управления базами данных (СУБД).
Увеличение объема и структурной сложности хранимых данных, расширение круга пользователей информационных систем привели к широкому распространению наиболее удобных и сравнительно простых для понимания реляционных БД. Для обеспечения одновременного доступа к данным множества пользователей, нередко расположенных достаточно далеко друг от друга и от места хранения баз данных, созданы сетевые версии СУБД. В них тем или иным путем решаются специфические проблемы параллельных процессов, целостности (правильности) и безопасности данных, а также санкционирования доступа.
Ясно, что совместная работа пользователей в сетях с помощью унифицированных средств общения с базами данных возможна только при наличии стандартного языка манипулирования данными, обладающего средствами для реализации перечисленных выше возможностей. Таким языком стал SQL, разработанный в 1974 году фирмой IBM для экспериментальной реляционной СУБД System R.
Язык SQL является инструментом, предназначенным для выборки и обработки информации, содержащейся в компьютерной базе данных. SQL — это сокращенное название структурированного языка запросов (Structured Query Language). По историческим причинам аббревиатура SQL читается обычно как «сиквел», но используется и альтернативное произношение «эскюэль». Как следует из названия, SQL является языком программирования, который применяется для организации взаимодействия пользователя с базой данных. На самом деле SQL работает только с базами данных одного определенного типа, называемых реляционными. На рис. 1.1 изображена схема работы SQL. Согласно этой схеме, в вычислительной системе имеется база данных, в которой хранится информация. Компьютерная программа, которая управляет базой данных, называется системой управления базой данных (СУБД). Если пользователю необходимо получить информацию из БД, он запрашивает её у СУБД c помощью команды SQL. СУБД обрабатывает запрос, находит требуемые данные и посылает их пользователю. Процесс запрашивания данных и получения результата называется запросом к базе данных; отсюда и название «структурированный язык запросов».
Рис.1.1 Применение SQL для доступа к базе данных
Однако название SQL не совсем соответствует действительности. Во-первых, сегодня SQL представляет собой нечто большее, чем просто инструмент создания запросов. Сейчас этот язык используется для реализации всех функциональных возможностей, которые СУБД предоставляет пользователю. К ним относятся:
Организация данных. SQL дает пользователю возможность изменять структуру представления данных, а также устанавливать отношения между элементами БД.
Выборка данных. SQL дает пользователю возможность изменять БД, т.е. добавлять в неё новые данные, а также удалять или обновлять уже имеющиеся в ней данные.
Управление доступом. С помощью SQL можно ограничить возможности пользователя по выборке и изменению данных и защитить их от несанкционированного доступа.
Совместное использование данных. SQL координирует совместное использование данных пользователям, работающим параллельно, чтобы они не мешали друг другу.
Целостность данных. SQL позволяет обеспечить целостность БД, защищая её от разрушения из-за несогласованных изменений или отказа системы.
Таким образом, SQL является достаточно мощным языком, обеспечивающим эффективное взаимодействие с СУБД.
Во-вторых, SQL – это не полноценный компьютерный язык типа С++ или Java. В нем нет инструкций для проверки условий, организации циклов. SQL является подъязыком БД, в который входит около сорока инструкций, предназначенных для управления БД. Инструкции SQL встраиваются в базовый язык, например С++, и дают возможность получать доступ к БД. Кроме того, из такого языка как С++ инструкции SQL можно посылать в СУБД, используя интерфейс вызова функций.
Наконец, SQL – это слабоструктурированный язык. Инструкции SQL напоминают английские предложения и содержат «слова-пустышки», не влияющие на смысл инструкции, но облегчающие её чтение. В SQL почти нет нелогичностей, и к тому же имеется ряд специальных правил, предотвращающих создание инструкций, которые выглядят как абсолютно правильные, но не имеют смысла.
SQL на сегодняшний день является единственным стандартным языком для работы с реляционными БД. Сам по себе SQL не является ни системой управления базами данных, ни отдельным программным продуктом. SQL – это неотъемлемая часть СУБД, с помощью которой осуществляется связь пользователя с ней.
Достоинства SQL.
SQL – это легкий для понимания язык и в тоже время универсальное программное средство управления данными. Успех языку SQL принесли следующие его особенности:
независимость от конкретной СУБД;
межплатформенная переносимость;
наличие стандартов;
реляционная основа;
поддержка со стороны компаний IBM(СУБД DB2) и Microsoft (протокол OBDC и технология ADO);
возможность выполнения специальных интерактивных запросов;
поддержка архитектуры клиент/сервер;
возможность различного представления данных;
интеграция с языками высокого уровня;
расширяемость и поддержка объектно-ориентированных технологий.
Недостатки SQL
Несоответствие реляционной модели данных
Создатели реляционной модели данных Эдгар Кодд, Кристофер Дейт и их сторонники указывают на то, что SQL не является истинно реляционным языком. В частности, они указывают на следующие проблемы SQL:
повторяющиеся строки;
неопределённые значения (NULL);
явное указание порядка колонок слева направо;
колонки без имени и дублирующиеся имена колонок;
отсутствие поддержки свойства «=»;
использование указателей;
высокая избыточность.
Сложность
Хотя SQL и задумывался как средство работы конечного пользователя, в конце концов, он стал настолько сложным, что превратился в инструмент программиста.
Отступления от стандартов
Несмотря на наличие международного стандарта SQL, многие компании, занимающиеся разработкой СУБД (например, Oracle, Sybase, Microsoft, MySQL AB), вносят изменения в язык SQL, применяемый в разрабатываемой СУБД, тем самым отступая от стандарта. Таким образом, появляются специфичные для каждой конкретной СУБД диалекты языка SQL.
Сложность работы с иерархическими структурами
Ранее диалекты SQL большинства СУБД не предлагали способа манипуляции древовидными структурами. Некоторые поставщики СУБД предлагали свои решения (например, Oracle использует выражение CONNECT BY). В настоящее время в ANSI стандартизована рекурсивная конструкция WITH из диалекта SQL DB2. В MS SQL Server рекурсивные запросы появились лишь в версии MS SQL Server 2005. В версии MS SQL Server 2008 появился новый тип данных — hierarchyid, упрощающий манипуляцию древовидными структурами.