Структура языка SQL

Автор работы: Пользователь скрыл имя, 16 Февраля 2011 в 19:47, курсовая работа

Описание работы

SQL - язык структурированных запросов - универсальный компьютерный, применяемый для создания, модификации и управления данными в реляционных базах данных. Так же SQL является информационно-логическим языком, а не языком программирования.

Содержание работы

Введение…………………………………………………………………………...3

1 Понятие базы данных и СУБД…………………………………………………6

1.1 Предметная область…………………………………………………………..6

1.2 Концепция баз данных………………………………………………………..7

1.2.1 Независимость пpиложений от оpганизации данных во внешней памяти……………………...7

1.2.2 Эффективность организации данных……………………………………...9

1.2.3 Интеграция данных……………………………………..............................12

1.2.4 Что такое база данных……………………………………………………..13

2 Типы данных SQL…………………………………………………………….15

2.1 Таблицы SQL………………………………………………………………...16

2.2 Структура языка SQL………………………………………………………..17

2.3 Операторы SQL………………………………………………………………17

Заключение……………………………………………………………………….35

Глоссарий………………………………………………………………………...36

Список использованных источников……………………………………….….38

Файлы: 1 файл

Приложение.doc

— 164.00 Кб (Скачать файл)

     Порядок выполнения оператора SELECT

     Для того чтобы понять, как получается результат выполнения оператора SELECT, рассмотрим концептуальную схему его выполнения. Эта схема является именно концептуальной, т.к. гарантируется, что результат будет таким, как если бы он выполнялся шаг за шагом в соответствии с этой схемой. На самом деле, реально результат получается более изощренными алгоритмами, которыми "владеет" конкретная СУБД.

     Стадия 1. Выполнение одиночного оператора SELECT

     Если  в операторе присутствуют ключевые слова UNION, EXCEPT и INTERSECT, то запрос разбивается  на несколько независимых запросов, каждый из которых выполняется отдельно:

     Шаг 1 (FROM). Вычисляется прямое декартовое произведение всех таблиц, указанных  в обязательном разделе FROM. В результате шага 1 получаем таблицу A.

     Шаг 2 (WHERE). Если в операторе SELECT присутствует раздел WHERE, то сканируется таблица A, полученная при выполнении шага 1. При этом для каждой строки из таблицы A вычисляется условное выражение, приведенное в разделе WHERE. Только те строки, для которых условное выражение возвращает значение TRUE, включаются в результат. Если раздел WHERE опущен, то сразу переходим к шагу 3. Если в условном выражении участвуют вложенные подзапросы, то они вычисляются в соответствии с данной концептуальной схемой. В результате шага 2 получаем таблицу B.

     Шаг 3 (GROUP BY). Если в операторе SELECT присутствует раздел GROUP BY, то строки таблицы B, полученной на втором шаге, группируются в соответствии со списком группировки, приведенным в разделе GROUP BY. Если раздел GROUP BY опущен, то сразу переходим к шагу 4. В результате шага 3 получаем таблицу С.

     Шаг 4 (HAVING). Если в операторе SELECT присутствует раздел HAVING, то группы, не удовлетворяющие условному выражению, приведенному в разделе HAVING, исключаются. Если раздел HAVING опущен, то сразу переходим к шагу 5. В результате шага 4 получаем таблицу D.

     Шаг 5 (SELECT). Каждая группа, полученная на шаге 4, генерирует одну строку результата следующим образом. Вычисляются все скалярные выражения, указанные в разделе SELECT. По правилам использования раздела GROUP BY, такие скалярные выражения должны быть одинаковыми для всех строк внутри каждой группы. Для каждой группы вычисляются значения агрегатных функций, приведенных в разделе SELECT. Если раздел GROUP BY отсутствовал, но в разделе SELECT есть агрегатные функции, то считается, что имеется всего одна группа. Если нет ни раздела GROUP BY, ни агрегатных функций, то считается, что имеется столько групп, сколько строк отобрано к данному моменту. В результате шага 5 получаем таблицу E, содержащую столько колонок, сколько элементов приведено в разделе SELECT и столько строк, сколько отобрано групп.

     Стадия 2. Выполнение операций UNION, EXCEPT, INTERSECT

     Если  в операторе SELECT присутствовали ключевые слова UNION, EXCEPT и INTERSECT, то таблицы, полученные в результате выполнения 1-й стадии, объединяются, вычитаются или пересекаются.

     Стадия 3. Упорядочение результата

     Если  в операторе SELECT присутствует раздел ORDER BY, то строки полученной на предыдущих шагах таблицы упорядочиваются  в соответствии со списком упорядочения, приведенном в разделе ORDER BY.

     Как на самом деле выполняется оператор SELECT

     Если  внимательно рассмотреть приведенный  выше концептуальный алгоритм вычисления результата оператора SELECT, то сразу  понятно, что выполнять его непосредственно  в таком виде чрезвычайно накладно. Даже на самом первом шаге, когда вычисляется декартово произведение таблиц, приведенных в разделе FROM, может получиться таблица огромных размеров, причем практически большинство строк и колонок из нее будет отброшено на следующих шагах.

     На  самом деле в РСУБД имеется  оптимизатор, функцией которого является нахождение такого оптимального алгоритма выполнения запроса, который гарантирует получение правильного результата.

     Схематично  работу оптимизатора можно представить  в виде последовательности нескольких шагов:

     Шаг 1 (Синтаксический анализ). Поступивший запрос подвергается синтаксическому анализу. На этом шаге определяется, правильно ли вообще (с точки зрения синтаксиса SQL) сформулирован запрос. В ходе синтаксического анализа вырабатывается некоторое внутренне представление запроса, используемое на последующих шагах.

     Шаг 2 (Преобразование в каноническую форму). Запрос во внутреннем представлении  подвергается преобразованию в некоторую  каноническую форму. При преобразовании к канонической форме используются как синтаксические, так и семантические преобразования. Синтаксические преобразования (например, приведения логических выражений к конъюнктивной или дизъюнктивной нормальной форме, замена выражений "x AND NOT x" на "FALSE", и т.п.) позволяют получить новое внутренне представление запроса, синтаксически эквивалентное исходному, но стандартное в некотором смысле. Семантические преобразования используют дополнительные знания, которыми владеет система, например, ограничения целостности. В результате семантических преобразований получается запрос, синтаксически не эквивалентный исходному, но дающий тот же самый результат.

     Шаг 3 (Генерация планов выполнения запроса  и выбор оптимального плана). На этом шаге оптимизатор генерирует множество  возможных планов выполнения запроса. Каждый план строится как комбинация низкоуровневых процедур доступа к данным из таблиц, методам соединения таблиц. Из всех сгенерированных планов выбирается план, обладающий минимальной стоимостью. При этом анализируются данные о наличии индексов у таблиц, статистических данных о распределении значений в таблицах, и т.п. Стоимость плана это, как правило, сумма стоимостей выполнения отдельных низкоуровневых процедур, которые используются для его выполнения. В стоимость выполнения отдельной процедуры могут входить оценки количества обращений к дискам, степень загруженности процессора и другие параметры.

     Шаг 4. (Выполнение плана запроса). На этом шаге план, выбранный на предыдущем шаге, передается на реальное выполнение.

     Во  многом качество конкретной СУБД определяется качеством ее оптимизатора. Хороший оптимизатор может повысить скорость выполнения запроса на несколько порядков. Качество оптимизатора определяется тем, какие методы преобразований он может использовать, какой статистической и иной информацией о таблицах он располагает, какие методы для оценки стоимости выполнения плана он знает.

     Реализация  реляционной алгебры средствами оператора SELECT (Реляционная полнота SQL)

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

     Оператор  декартового произведения

     Реляционная алгебра: 

     Оператор SQL:

     SELECT A.Поле1, A.Поле2, …, B.Поле1, B.Поле2, …

     FROM A, B;

     или

     SELECT A.Поле1, A.Поле2, …, B.Поле1, B.Поле2, …

     FROM A CROSS JOIN B;

     Оператор  проекции

     Реляционная алгебра: 

     Оператор SQL:

     SELECT DISTINCT X, Y, …, Z

     FROM A;

     Оператор  выборки

     Реляционная алгебра:  ,

     Оператор  SQL:

     SELECT *

     FROM A

     WHERE c;

     Оператор  объединения

     Реляционная алгебра: 

     Оператор SQL:

     SELECT *

     FROM A

     UNION

     SELECT *

     FROM B;

     Оператор  вычитания

     Реляционная алгебра: 

     Оператор SQL:

     SELECT *

     FROM A

     EXCEPT

     SELECT *

     FROM B

     Реляционный оператор переименования RENAME выражается при помощи ключевого слова AS в списке отбираемых полей оператора SELECT. Таким образом, язык SQL является реляционно-полным.

     Остальные операторы реляционной алгебры (соединение, пересечение, деление) выражаются через  примитивные, следовательно, могут быть выражены операторами SQL. Тем не менее, для практических целей приведем их.

     Оператор  соединения

     Реляционная алгебра: 

     Оператор SQL:

     SELECT A.Поле1, A.Поле2, …, B.Поле1, B.Поле2, …

     FROM A, B

     WHERE c;

     или

     SELECT A.Поле1, A.Поле2, …, B.Поле1, B.Поле2, …

     FROM A CROSS JOIN B

     WHERE c;

     Оператор  пересечения

     Реляционная алгебра: 

     Оператор SQL:

     SELECT *

     FROM A

     INTERSECT

     SELECT *

     FROM B;

     Оператор  деления

     Реляционная алгебра: 

     Оператор SQL:

     SELECT DISTINCT A.X

     FROM A

     WHERE NOT EXIST

     (SELECT *

     FROM B

     WHERE NOT EXIST

     (SELECT *

     FROM A A1

     WHERE

      A1.X = A.X AND

       A1.Y = B.Y));

     Пусть отношение A содержит данные о поставках  деталей, отношение B содержит список всех деталей, которые могут поставляться. Атрибут X является номером поставщика, атрибут Y является номером детали.

     Разделить отношение A на отношение B означает в  данном примере "отобрать номера поставщиков, которые поставляют все детали".

     Преобразуем текст выражения:

     "Отобрать  номера поставщиков, которые поставляют  все детали" эквивалентно

     "Отобрать  те номера поставщиков из таблицы  A, для которых не существует  непоставляемых деталей в таблице  B" эквивалентно 

     "Отобрать  те номера поставщиков из таблицы  A, для которых не существует  тех номеров деталей из таблицы  B, которые не поставляются этим поставщиком" эквивалентно

     "Отобрать  те номера поставщиков из таблицы  A, для которых не существует  тех номеров деталей из таблицы  B, для которых не существует  записей о поставках в таблице  A для этого поставщика и этой  детали".

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

       
 
 
 
 
 
 
 
 
 
 

     Заключение 

     SQL представляет собой мощный полнофункциональный  сервер баз данных, отличающийся  высокой производительностью, быстротой  освоения и удобным интерфейсом  администрирования. Под его управлением  могут работать базы данных  в широком диапазоне от уровня среднего звена предприятия до распределенных баз масштаба корпорации. Доступ к SQL Server возможен из большого числа средств разработки клиентских front-end, настольных баз данных и офисных продуктов. SQL Server изначально ориентирован на интеграцию с другими серверами BackOffice, что позволяет непосредственно охватить решение комплексных задач автоматизации хранения и обработки информации, электронной почты и документооборота, построения Internet/intranet приложений и т. д. SQL Server работает в как в традиционных клиент-серверных платформах, так и в многоуровневых средах. Одним из основных инструментов при создании распределенных многокомпонентных приложений является Microsoft Transaction Server.

Информация о работе Структура языка SQL