Структура языка 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 Кб (Скачать файл)
align="justify">           (БЛ SMALLINT,

           Блюдо CHAR (70),

           В  CHAR (1),

           Основа CHAR (10),

           Выход FLOAT,

           Труд SMALLINT);

     Предложение CREAT TABLE специфицирует имя базовой таблицы, которая должна быть создана, имена ее столбцов и типы данных для этих столбцов (а также, возможно, некоторую дополнительную информацию, не иллюстрируемую данным примером). CREAT TABLE - выполняемое предложение. Если его ввести с терминала, система тотчас построит таблицу Блюда, которая сначала будет пустой: она будет содержать только строку заголовков столбцов, но не будет еще содержать никаких строк с данными.

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

 

     Нужно заметить, что в настоящее время, ни одна система не реализует стандарт SQL в полном объеме. Кроме того, во всех диалектах языка имеются возможности, не являющиеся стандартными. Таким образом, можно сказать, что каждый диалект - это надмножество некоторого подмножества стандарта SQL. Это затрудняет переносимость приложений, разработанных для одних СУБД в другие СУБД.

     Язык SQL оперирует терминами, несколько  отличающимися от терминов реляционной теории, например, вместо "отношений" используются "таблицы", вместо "кортежей" - "строки", вместо "атрибутов" - "колонки" или "столбцы".

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

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

     2.3 Операторы SQL

 

     Основу  языка SQL составляют операторы, условно разбитые не несколько групп по выполняемым функциям.

     Можно выделить следующие группы операторов (перечислены не все операторы SQL):

     Операторы DDL (Data Definition Language) - операторы определения объектов базы данных

     CREATE SCHEMA - создать схему базы данных

     DROP SHEMA - удалить схему базы данных 

     CREATE TABLE - создать таблицу 

     ALTER TABLE - изменить таблицу 

     DROP TABLE - удалить таблицу 

     CREATE DOMAIN - создать домен 

     ALTER DOMAIN - изменить домен 

     DROP DOMAIN - удалить домен 

     CREATE COLLATION - создать последовательность

     DROP COLLATION - удалить последовательность 

     CREATE VIEW - создать представление 

     DROP VIEW - удалить представление 

     Операторы DML (Data Manipulation Language) - операторы манипулирования данными

     SELECT - отобрать строки из таблиц

     INSERT - добавить строки в таблицу 

     UPDATE - изменить строки в таблице 

     DELETE - удалить строки в таблице 

     COMMIT - зафиксировать внесенные изменения 

     ROLLBACK - откатить внесенные изменения 

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

     CREATE ASSERTION - создать ограничение

     DROP ASSERTION - удалить ограничение 

     GRANT - предоставить привилегии пользователю  или приложению на манипулирование объектами

     REVOKE - отменить привилегии пользователя  или приложения 

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

     Наиболее  важными для пользователя являются операторы манипулирования данными (DML).

     Примеры использования  операторов манипулирования данными

     INSERT - вставка строк  в таблицу

     Пример 1. Вставка одной строки в таблицу:

     INSERT INTO

     P (PNUM, PNAME)

     VALUES (4, "Иванов");

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

     Оператор SELECT всегда выполняется над некоторыми таблицами, входящими в базу данных.

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

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

     Отбор данных из одной  таблицы

     Пример. Выбрать все данные из таблицы  поставщиков (ключевые слова SELECT… FROM…):

     SELECT *

     FROM P;

     Иногда  приходится выполнять запросы, в  которых таблица соединяется сама с собой, или одна таблица соединяется дважды с другой таблицей. При этом используются имена корреляции (алиасы, псевдонимы), которые позволяют различать соединяемые копии таблиц. Имена корреляции вводятся в разделе FROM и идут через пробел после имени таблицы. Имена корреляции должны использоваться в качестве префикса перед именем столбца и отделяются от имени столбца точкой. Если в запросе указываются одни и те же поля из разных экземпляров одной таблицы, они должны быть переименованы для устранения неоднозначности в именованиях колонок результатирующей таблицы. Определение имени корреляции действует только во время выполнения запроса.

     Пример. Отобрать все пары поставщиков таким  образом, чтобы первый поставщик в паре имел статус, больший статуса второго поставщика:

     SELECT

     P1.PNAME AS PNAME1,

     P1.PSTATUS AS PSTATUS1,

     P2.PNAME AS PNAME2,

     P2.PSTATUS AS PSTATUS2

     FROM

     P P1, P P2

     WHERE P1.PSTATUS1 > P2.PSTATUS2;

     Опишем синтаксис  оператора выборки данных (оператора SELECT) более точно. При описании синтаксиса операторов обычно используются условные обозначения, известные как стандартные формы Бэкуса-Наура (BNF).

     В BNF обозначениях используются следующие  элементы:

     Символ "::=" означает равенство по определению. Слева от знака стоит определяемое понятие, справа - собственно определение понятия.

     Ключевые  слова записываются прописными буквами. Они зарезервированы и составляют часть оператора.

     Метки-заполнители  конкретных значений элементов и  переменных записываются курсивом.

     Необязательные  элементы оператора заключены в квадратные скобки.

     Вертикальная  черта | указывает на то, что все  предшествующие ей элементы списка являются необязательными и могут быть заменены любым другим элементом списка после этой черты.

     Фигурные  скобки {} указывают на то, что все  находящееся внутри них является единым целым.

     Троеточие "…" означает, что предшествующая часть оператора может быть повторена любое количество раз.

     Многоточие, внутри которого находится запятая ".,.." указывает, что предшествующая часть оператора, состоящая из нескольких элементов, разделенных запятыми, может иметь произвольное число повторений. Запятую нельзя ставить после последнего элемента. Замечание: данное соглашение не входит в стандарт BNF, но позволяет более точно описать синтаксис операторов SQL.

     Круглые скобки являются элементом оператора.

     Синтаксис оператора  выборки

     В довольно сильно упрощенном виде оператор выборки данных имеет следующий синтаксис (для некоторых элементов мы дадим не BNF-определения, а словесное описание):

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

     Табличное выражение

     [ORDER BY

     {{Имя  столбца-результата [ASC | DESC]} | {Положительное  целое [ASC | DESC]}}.,..];

     Табличное выражение ::=

     Select-выражение

     [

     {UNION | INTERSECT | EXCEPT} [ALL]

     {Select-выражение  | TABLE Имя таблицы | Конструктор  значений таблицы}

     ]

     Select-выражение ::=

     SELECT [ALL | DISTINCT]

     {{{Скалярное  выражение | Функция агрегирования | Select-выражение} [AS Имя столбца]}.,..}

     | {{Имя таблицы|Имя корреляции}.*}

     | *

     FROM {

     {Имя  таблицы [AS] [Имя корреляции] [(Имя  столбца.,..)]}

     | {Select-выражение [AS] Имя корреляции [(Имя столбца.,..)]}

     | Соединенная таблица }.,..

     [WHERE Условное выражение]

     [GROUP BY {[{Имя таблицы|Имя корреляции}.]Имя  столбца}.,..]

     [HAVING Условное выражение] 

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

     Раздел HAVING содержит условное выражение, вычисляемое  для каждой группы, определяемой списком  группировки в разделе GROUP BY. Это условное выражение может содержать функции агрегирования, вычисляемые для каждой группы. Условное выражение, сформулированное в разделе WHERE, может быть перенесено в раздел HAVING. Перенос условий из раздела HAVING в раздел WHERE невозможен, если условное выражение содержит агрегатные функции. Перенос условий из раздела WHERE в раздел HAVING является плохим стилем программирования - эти разделы предназначены для различных по смыслу условий (условия для строк и условия для групп строк). Если в разделе SELECT присутствуют агрегатные функции, то они вычисляются по-разному в зависимости от наличия раздела GROUP BY. Если раздел GROUP BY отсутствует, то результат запроса возвращает не более одной строки. Агрегатные функции вычисляются по всем строкам, удовлетворяющим условному выражению в разделе WHERE. Если раздел GROUP BY присутствует, то агрегатные функции вычисляются по отдельности для каждой группы, определенной в разделе GROUP BY.

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