Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка SQL(14) (оптимизация).docx
Скачиваний:
62
Добавлен:
17.03.2015
Размер:
452.16 Кб
Скачать

Данное методическое пособие по учебному курсу «Базы данных и экспертные системы» представляет собой основы использования языка 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 принесли следующие его особенности:

  1. независимость от конкретной СУБД;

  2. межплатформенная переносимость;

  3. наличие стандартов;

  4. реляционная основа;

  5. поддержка со стороны компаний IBM(СУБД DB2) и Microsoft (протокол OBDC и технология ADO);

  6. возможность выполнения специальных интерактивных запросов;

  7. поддержка архитектуры клиент/сервер;

  8. возможность различного представления данных;

  9. интеграция с языками высокого уровня;

  10. расширяемость и поддержка объектно-ориентированных технологий.

Недостатки SQL

  1. Несоответствие реляционной модели данных

Создатели реляционной модели данных Эдгар Кодд, Кристофер Дейт и их сторонники указывают на то, что SQL не является истинно реляционным языком. В частности, они указывают на следующие проблемы SQL:

  • повторяющиеся строки;

  • неопределённые значения (NULL);

  • явное указание порядка колонок слева направо;

  • колонки без имени и дублирующиеся имена колонок;

  • отсутствие поддержки свойства «=»;

  • использование указателей;

  • высокая избыточность.

  1. Сложность

Хотя SQL и задумывался как средство работы конечного пользователя, в конце концов, он стал настолько сложным, что превратился в инструмент программиста.

  1. Отступления от стандартов

Несмотря на наличие международного стандарта SQL, многие компании, занимающиеся разработкой СУБД (например, Oracle, Sybase, Microsoft, MySQL AB), вносят изменения в язык SQL, применяемый в разрабатываемой СУБД, тем самым отступая от стандарта. Таким образом, появляются специфичные для каждой конкретной СУБД диалекты языка SQL.

  1. Сложность работы с иерархическими структурами

Ранее диалекты SQL большинства СУБД не предлагали способа манипуляции древовидными структурами. Некоторые поставщики СУБД предлагали свои решения (например, Oracle использует выражение CONNECT BY). В настоящее время в ANSI стандартизована рекурсивная конструкция WITH из диалекта SQL DB2. В MS SQL Server рекурсивные запросы появились лишь в версии MS SQL Server 2005. В версии MS SQL Server 2008 появился новый тип данных — hierarchyid, упрощающий манипуляцию древовидными структурами.