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

Автор работы: Пользователь скрыл имя, 21 Февраля 2011 в 00:48, курсовая работа

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

До появления SQL в СУБД (независимо от того, на какой модели они основывались) приходилось поддерживать по крайней мере три языка, которые обычно имели мало общего: язык определения данных (ЯОД), служащий для спецификации структур БД (обычно общую структуру БД называют схемой БД); язык манипулирования данными (ЯМД), позволяющий создавать прикладные программы, взаимодействующие с БД; и язык администрирования БД (ЯАДБ), с помощью которого можно было выполнять служебные действия (например, изменять структуру БД или производить ее настройку с целью повышения эффективности).

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

Введение………………………………………………………………………….2
1 Понятие базы данных и СУБД……………………………………………… ..5

1.1 Предметная область………………………………………………………….5
1.2 Концепция баз данных……………………………………………………….6
1.2.1 Независимость приложений от организации данных во внешней памяти......................................................................................................................7
1.2.2 Эффективность организации данных……………………………………..8
1.2.3 Интеграция данных……………………………………………………..…12
1.2.4 Что такое база данных…………………………………………………..…13
2. Типы данных SQL …………………………………………………………....15

2.1 Таблицы SQL………………………………………………………………...15
2.2 Структура языка SQL………………………………………………………..17
2.3 Операторы SQL………………………………………………………………18
Заключение…………………………………………………………………….....35
Глоссарий…………………………………………………..…………………….38

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

Файлы: 1 файл

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

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

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

     Функция агрегирования ::=

     COUNT (*) |

     {

     {COUNT | MAX | MIN | SUM | AVG} ([ALL | DISTINCT] Скалярное выражение)

     }

     Конструктор значений таблицы ::=

     VALUES Конструктор значений строки.,..

     Конструктор значений строки ::=

     Элемент конструктора | (Элемент конструктора.,..) | Select-выражение 

     Замечание. Select-выражение, используемое в конструкторе значений строки, обязано возвращать ровно одну строку.

     Элемент конструктора ::=

     Выражение для вычисления значения | NULL | DEFAULT

     Синтаксис соединенных  таблиц

     В разделе FROM оператора SELECT можно использовать соединенные таблицы. Пусть в результате некоторых операций мы получаем таблицы A и B. Такими операциями могут быть, например, оператор SELECT или другая соединенная таблица. Тогда синтаксис соединенной таблицы имеет следующий вид:

     Соединенная таблица ::=

     Перекрестное  соединение

     | Естественное соединение

     | Соединение посредством предиката

     | Соединение посредством имен  столбцов

     | Соединение объединения 

     Тип соединения ::=

     INNER

     | LEFT [OUTER]

     | RIGTH [OUTER]

     | FULL [OUTER]

     Перекрестное  соединение ::=

     Таблица А CROSS JOIN Таблица В 

     Естественное  соединение ::=

     Таблица А [NATURAL] [Тип соединения] JOIN Таблица В

     Соединение  посредством предиката ::=

     Таблица А [Тип соединения] JOIN Таблица В ON Предикат

     Соединение  посредством имен столбцов ::=

     Таблица А [Тип соединения] JOIN Таблица В USING (Имя столбца.,..)

     Соединение  объединения ::=

     Таблица А UNION JOIN Таблица В 

     Опишем  используемые термины.

     CROSS JOIN - Перекрестное соединение возвращает  просто декартово произведение таблиц. Такое соединение в разделе FROM может быть заменено списком таблиц через запятую.

     NATURAL JOIN - Естественное соединение производится по всем столбцам таблиц А и В, имеющим одинаковые имена. В результатирующую таблицу одинаковые столбцы вставляются только один раз.

     JOIN … ON - Соединение посредством  предиката соединяет строки таблиц  А и В посредством указанного предиката.

     JOIN … USING - Соединение посредством  имен столбцов соединяет отношения  подобно естественному соединению  по тем общим столбцам таблиц А и Б, которые указаны в списке USING.

     OUTER - Ключевое слово OUTER (внешний)  не является обязательными, оно не используется ни в каких операциях с данными.

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

     LEFT (OUTER) - Тип соединения "левое (внешнее)". Левое соединение таблиц А и В включает в себя все строки из левой таблицы А и те строки из правой таблицы В, для которых обнаружено совпадение. Для строк из таблицы А, для которых не найдено соответствия в таблице В, в столбцы, извлекаемые из таблицы В, заносятся значения NULL.

     RIGHT (OUTER) - Тип соединения "правое (внешнее)". Правое соединение таблиц А и В включает в себя все строки из правой таблицы В и те строки из левой таблицы А, для которых обнаружено совпадение. Для строк из таблицы В, для которых не найдено соответствия в таблице А, в столбцы, извлекаемые из таблицы А заносятся значения NULL.

     FULL (OUTER) - Тип соединения "полное (внешнее)". Это комбинация левого и правого соединений. В полное соединение включаются все строки из обеих таблиц. Для совпадающих строк поля заполняются реальными значениями, для несовпадающих строк поля заполняются в соответствии с правилами левого и правого соединений.

     UNION JOIN - Соединение объединения является  обратным по отношению к внутреннему соединению. Оно включает только те строки из таблиц А и В, для которых не найдено совпадений. В них используются значения NULL для столбцов, полученных из другой таблицы. Если взять полное внешнее соединение и удалить из него строки, полученные в результате внутреннего соединения, то получится соединение объединения.

     Использование соединенных таблиц часто облегчает  восприятие оператора SELECT, особенно, когда используется естественное соединение. Если не использовать соединенные таблицы, то при выборе данных из нескольких таблиц необходимо явно указывать условия соединения в разделе WHERE. Если при этом пользователь указывает сложные критерии отбора строк, то в разделе WHERE смешиваются семантически различные понятия - как условия связи таблиц, так и условия отбора строк (см. примеры 13, 14, 15 данной главы).

     Синтаксис условных выражений раздела WHERE

     Условное  выражение, используемое в разделе WHERE оператора SELECT должно вычисляться  для каждой строки-кандидата, отбираемой оператором SELECT. Условное выражение может возвращать одно из трех значений истинности: TRUE, FALSE или UNKNOUN. Строка-кандидат отбирается в результатирующее множество строк только в том случае, если для нее условное выражение вернуло значение TRUE.

     Условные  выражения имеют следующий синтаксис (в целях упрощения изложения приведены не все возможные предикаты):

     Условное  выражение ::=

     [ ( ] [NOT]

     {Предикат  сравнения

     | Предикат between

     | Предикат in

     | Предикат like

     | Предикат null

     | Предикат количественного сравнения

     | Предикат exist

     | Предикат unique

     | Предикат match

     | Предикат overlaps}

     [{AND | OR} Условное выражение] [ ) ]

     [IS [NOT] {TRUE | FALSE | UNKNOWN}]

     Предикат  сравнения ::=

     Конструктор значений строки {= | < | > | <= | >= | <>} Конструктор значений строки

     Предикат LIKE производит поиск строки-поиска в строке-шаблоне. В строке-шаблоне разрешается использовать два трафаретных символа:

     Символ  подчеркивания "_" может использоваться вместо любого единичного символа в строке-поиска,

     Символ  процента "%" может заменять набор  любых символов в строке поиска (число символов в наборе может быть от 0 и более).

     Предикат null ::=

     Конструктор значений строки IS [NOT] NULL Предикат NULL применяется специально для проверки, не равно ли проверяемое выражение null-значению.

     Предикат  количественного сравнения ::=

     Конструктор значений строки {= | < | > | <= | >= | <>}

     {ANY | SOME | ALL} (Select-выражение) 

     Кванторы ANY и SOME являются синонимами и полностью  взаимозаменяемы.

     Замечание. Если указан один из кванторов ANY и SOME, то предикат количественного сравнения возвращает TRUE, если сравниваемое значение совпадает хотя бы с одним значением, возвращаемом в подзапросе (select-выражении). Если указан квантор ALL, то предикат количественного сравнения возвращает TRUE, если сравниваемое значение совпадает с каждым значением, возвращаемом в подзапросе (select-выражении).

     Предикат EXIST возвращает значение TRUE, если результат  подзапроса (select-выражения) не пуст.

     Предикат unique ::=

     UNIQUE (Select-выражение)

     Предикат UNIQUE возвращает TRUE, если в результате подзапроса (select-выражения) нет совпадающих строк.

     Предикат match ::=

     Конструктор значений строки MATCH [UNIQUE]

     [PARTIAL | FULL] (Select-выражение) 

     Предикат MATCH проверяет, будет ли значение, определенное в конструкторе строки совпадать со значением любой строки, полученной в результате подзапроса.

     Предикат overlaps ::=

     Конструктор значений строки OVERLAPS Конструктор значений строки

     Предикат OVERLAPS, является специализированным предикатом, позволяющем определить, будет ли указанный период времени перекрывать другой период времени.

     Порядок выполнения оператора 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 и столько строк, сколько отобрано групп.

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