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

Автор работы: Пользователь скрыл имя, 22 Января 2013 в 08:37, курсовая работа

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

Стандарт ISO языка SQL предусматривает использование в операторах CREATE TABLE и ALTER TABLE специальных конструкций, предназначенных для определения требований поддержки целостности данных, к которым относятся условие обязательности наличия данных; ограничения для доменов атрибутов; требования поддержки целостности сущностей; требования поддержки ссылочной целостности данных и требования (бизнес-правила) данного предприятия. Обязательность наличия данных указывается с помощью ключевого слова NOT NULL. Ограничения для доменов атрибутов задаются либо с помощью конструкций CHECK, либо посредством создания соответствующих доменов с помощью операторов CREATE DOMAIN. Первичные ключи определяются с помощью конструкции PRIMARY KEY, а альтернативные ключи описываются с помощью комбинации ключевых слов NOT NULL и описателей UNIQUE. Внешние ключи описываются с помощью конструкции FOREIGN KEY, а также задания правил удаления и обновления с использованием конструкций ON UPDATE и ON DELETE. Бизнес-правила предприятия могут быть заданы с помощью конструкций CHECK и UNIQUE.

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

Введение…………………………………………………………………………….3
1 Уровни языка SQL и операторы манипулирования данными….……………..4
1.1 Стандартизация SQL…………………………………………………………...7
1.2 Типы данных языка SQL………………………………………………………9
1.3 Операторы манипулирования данными…………………………………….14
2 Построение сложных запросов………………………………………………...18
2.1 Понятие запроса в SQL……………………………………………………….18
2.2 Структура запросов с использованием нескольких таблиц………………..21
2.3 Объединение (UNION)………………………………………………………..22
2.4 Применение агрегатных функций и вложенных запросов в операторе выбора…………………………………………………………………………………….24
2.5 Внешние объединения………………………………………………………..25
Заключение………………………………………………………………………..28
Глоссарий………………………………………………………………………….30
Список использованных источников……………………………………………31
Приложения……………………………………………………………………….32

Файлы: 1 файл

ПЫЖОВ.doc

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

DROP - Удаляет структуры данных

TRUNCATE - Очищает объекты, удаляя все записи и оставляя структуру неизменной

COMMENT - Добавляет комментарии к объекту

RENAME - Переименовывает объект

Операторы манипулирования  данными DML

SELECT - Выбирает данные из базы данных

INSERT - Вставляет данные в базу данных

DELETE - Удаляет данные из базы данных

UPDATE - Изменяет данные в базе данных

Средства управления транзакциями

COMMIT - Завершает транзакцию

ROLLBACK - Отменяет (откатывает) транзакцию

SAVEPOINT - Сохраняет промежуточное состояние базы данных

Средства администрирования данных

GRANT - Предоставить права

REVOKE- Лишить прав

Программный SQL

DECLARE - Определяет курсор (имя и связанный с ним запрос), соответствующий виртуальному набору данных

OPEN - Открывает курсор, формируя виртуальный набор данных, соответствующий описанию указанного курсора и текущему состоянию базы данных

FETCH - Считывает очередную строку из множества, определенного курсором

CLOSE - Закрывает курсор и прекращает доступ к этому виртуальному набору данных

PREPARE - Подготавливает оператор SQL к динамическому выполнению

EXECUTE - Выполняет оператор SQL, ранее подготовленный к выполнению

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

Многие производители  коммерческих СУБД поддерживают и дополнительные типы данных, не включенные в спецификацию SQL, например, тип данных для представления  неструктурированного текста большого объема, аналог MEMO настольных СУБД. Однако, следует отметить, что специфика реализации даже отдельных основных типов данных серьезным образом влияет на результаты выполнения запросов к базе данных. Особенно это касается типов данных, связанных со временем и датой, - DATE и TIMESTAMP. Одна и та же дата, например 12 марта 2007 года, может быть записана в MS SQL Server как March 12, 2007, а в ORACLE – 12-MAR-07, что может отрицательно сказаться на переносимости приложения с одной базы данных на другую.

В свою очередь объекты  базы данных также должны называться согласно определенным правилам:

- должны начинаться  с буквы;

- могут быть не длиннее  30 символов;

- могут содержать только  символы A-Z, a-z, 0-9, _ (подчеркивание), $ и #;

- не могут совпадать  с именем другого объекта;

- не могут совпадать с зарезервированными словами сервера базы данных. [2, С.310]

Как и многие другие языки  программирования, SQL допускает использование  арифметических операторов, операторов сравнения и логических операторов. Список арифметических операторов ограничен пятью:

+ Сложение

- Вычитание

* Умножение

/ Деление

|| Конкатенация (сложение строк)

Все эти операции могут  быть использованы в любом предложении  команды SQL, за исключением FROM. Операторы  сравнения условно можно разделить  на две группы: обычные и операторы сравнения SQL. Обычные операторы сравнения полностью аналогичны операторам сравнения любых других языков программирования:

= Равно

<> Не равно

> Больше

< Меньше

>= Больше или равно

<= Меньше или равно

Однако, есть в языке SQL и четыре специальных оператор сравнения SQL:

BETWEEN … AND … Между двумя значениями (включительно)

IN (список) Совпадает с одним из значений в списке

LIKE Соответствует символьному шаблону

IS NULL Является неопределенным значением

Эти операторы удобны для работы с множествами кортежей. Их отрицания строятся специальным образом:

NOT BETWEEN … AND … НЕ между двумя значениями (включительно)

NOT IN (список) НЕ совпадает с одним из значений в списке

NOT LIKE НЕ соответствует символьному шаблону

IS NOT NULL НЕ является неопределенным значением

Список логических операторов языка SQL ограничивается тремя стандартными операторами:

AND Логическое И

IN (список) Логическое ИЛИ

LIKE Логическое НЕ

 

2.2 Структура запросов с использованием нескольких таблиц

 

Базы данных - это множество взаимосвязанных сущностей или отношений (таблиц) в терминологии реляционных СУБД. При проектировании стремятся создавать таблицы, в каждой из которых содержалась бы информация об одном и только об одном типе сущностей. Это облегчает модификацию базы данных и поддержание ее целостности. [12, С.52]

Даже при отсутствии средств одновременного доступа  ко многим таблицам нежелателен проект, в котором информация о многих типах сущностей перемешана в  одной таблице. SQL же обладает великолепным механизмом для одновременной или  последовательной обработки данных из нескольких взаимосвязанных таблиц. В нем реализованы возможности "соединять" или "объединять" несколько таблиц и так называемые "вложенные подзапросы". Например, чтобы получить перечень поставщиков продуктов, необходимых для приготовления Сырников, возможен запрос:

SELECT Продукт, Цена, Название, Статус

FROM Продукты, Состав, Блюда,  Поставки, Поставщики

WHERE Продукты.ПР = Состав.ПР

AND Состав.БЛ = Блюда.БЛ

AND Поставки.ПР = Состав.ПР

AND Поставки.ПС = Поставщики.ПС

AND Блюдо = 'Сырники'

AND Цена IS NOT NULL;

Он получен следующим  образом: СУБД последовательно формирует  строки декартова произведения таблиц, перечисленных во фразе FROM, проверяет, удовлетворяют ли данные сформированной строки условиям фразы WHERE, и если удовлетворяют, то включает в ответ на запрос те ее поля, которые перечислены во фразе SELECT. [9, С.219]

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

 

2.3 Объединение (UNION)

 

Рассмотрим реляционную операцию «Объединение», позволяющую получить отношение, состоящее из всех строк, входящих в одно или оба объединяемых отношения. Но при этом исходные отношения или их объединяемые проекции должны быть совместимыми по объединению. Для SQL это означает, что две таблицы можно объединять тогда и только тогда, когда:

они имеют одинаковое число столбцов, например, m;

для всех i (i = 1, 2, ..., m) i-й столбец первой таблицы и i-й столбец второй таблицы имеют в точности одинаковый тип данных.

Например, выдать названия продуктов, в которых нет жиров, либо входящих в состав блюда с  кодом БЛ = 1:

SELECT Продукт

FROM Продукты

WHERE Жиры = 0

UNION

SELECT Продукт

FROM Соста

WHERE БЛ = 1

Из этого простого примера видно, что избыточные дубликаты  всегда исключаются из результата UNION. Поэтому, хотя в рассматриваемом  примере Помидоры, Зелень и Яблоки выбираются обеими из двух составляющих предложения SELECT, в окончательном результате они появляются только один раз.

Предложением с UNION можно  объединить любое число таблиц (проекций таблиц). Так, к предыдущему запросу  можно добавить (перед точкой с  запятой) конструкцию

 

UNION

SELECT Продукт

FROM Продукты

WHERE Ca < 250

позволяющую добавить к  списку продуктов Масло, Рис, Мука и  Кофе. Однако тот же результат можно  получить простым изменением фразы WHERE первой части исходного запроса

WHERE Жиры = 0 OR Ca < 250

 

2.4 Применение агрегатных функций и вложенных запросов в операторе выбора

 

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

Например, сгруппируем  отношение R1 по значению столбца Дисциплина. Мы получим 4 группы, для которых можем вычислить некоторые групповые значения, например количество кортежей в группе, максимальное или минимальное значение столбца Оценка. [3, С.335]

Это делается с помощью  агрегатных функций. Агрегатные функции  вычисляют одиночное значение для всей группы таблицы.

Список этих функций:

- COUNT - Количество строк или непустых значений полей, которые выбрал запрос

- SUM - Сумма всех выбранных значений данного поля

- AVG  - Среднеарифметическое значение всех выбранных значений данного поля

- MIN - Наименьшее из всех выбранных значений данного поля

- MAX - Наибольшее из всех выбранных значений данного поля

Агрегатные функции  используются подобно именам полей  в операторе SELECT, но с одним исключением: они берут имя поля как аргумент. С функциями SUM и AVG могут использоваться только числовые поля. С функциями COUNT, MAX и MIN могут использоваться как числовые, так и символьные поля. При использовании с символьными полями MAX и MIN будут транслировать их в эквивалент ASCII кода, и обрабатывать в алфавитном порядке. Некоторые СУБД позволяют использовать вложенные агрегаты, но это является отклонением от стандарта ANSI со всеми вытекающими отсюда последствиями.

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

Предложение GROUP BY позволяет  определять подмножество значений в  особом поле в терминах другого поля и применять функцию агрегата к подмножеству. Это дает возможность объединять поля и агрегатные функции в едином предложении SELECT. Агрегатные функции могут применяться как в выражении вывода результатов строки SELECT, так и в выражении условия обработки сформированных групп HAVING. В этом случае каждая агрегатная функция вычисляется для каждой выделенной группы. Значения, полученные при вычислении агрегатных функций, могут быть использованы для вывода соответствующих результатов или для условия отбора групп.

 

2.5 Внешние объединения

 

Стандарт SQL2 расширил понятие  условного объединения. В стандарте SQL1 при объединении отношений  использовались только условия, задаваемые в части WHERE оператора SELECT, и в  этом случае в результирующее отношение  попадали только сцепленные по заданным условиям кортежи исходных отношений, для которых эти условия были определены и истинны. Однако в действительности часто необходимо объединять таблицы таким образом, чтобы в результат попали все строки из первой таблицы, а вместо тех строк второй таблицы, для которых не выполнено условие соединения, в результат попадали бы неопределенные значения. Или наоборот, включаются все строки из правой (второй) таблицы, а отсутствующие части строк из первой таблицы дополняются неопределенными значениями. Такие объединения были названы внешними в противоположность объединениям, определенным стандартом SQL1, которые стали называться внутренними. [4, С.264]

В общем случае синтаксис  части FROM в стандарте SQL2 выглядит следующим  образом:

FROM <список исходных  таблиц>

<   выражение естественного  объединения >

<   выражение объединения  >

<   выражение перекрестного  объединения >

<   выражение запроса  на объединение >

<список исходных  таблиц>::= <имя_таблицы_1> [ имя синонима  таблицы_1] [ ...] [,<имя_таблицы_n>[ <имя синонима таблицы_n> ] ]

<выражение естественного  объединения>:: =

<имя_таблицы_1> NATURAL { INNER | FULL [OUTER] LEFT [OUTER] | RIGHT [OUTER]} JOIN <имя_таблицы_2>

<выражение перекрестного  объединения>:: = <имя_таблицы_1> CROSS JOIN <имя_таблицы_2>

<выражение запроса на объединение>::=

<имя_таблицы_1> UNION JOIN <имя_таблицы_2>

<выражение объединения>::= <имя_таблицы_1> { INNER

FULL [OUTER] | LEFT [OUTER] | RIGHT [OUTER]}

JOIN {ON условие | [USING (список  столбцов)]} <имя_таблицы_2>

В этих определениях INNER — означает внутреннее объединение, LEFT — левое объединение, то есть в результат входят все строки таблицы 1, а части результирующих кортежей, для которых не было соответствующих значений в таблице 2, дополняются значениями NULL (неопределено). Ключевое слово RIGHT означает правое внешнее объединение, и в отличие от левого объединения в этом случае в результирующее отношение включаются все строки таблицы 2, а недостающие части из таблицы 1 дополняются неопределенными значениями, Ключевое слово FULL определяет полное внешнее объединение: и левое и правое. При полном внешнем объединении выполняются и правое и левое внешние объединения и в результирующее отношение включаются все строки из таблицы 1, дополненные неопределенными значениями, и все строки из таблицы 2, также дополненные неопределенными значениями. [10, С.126]

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