Курсовая

Курсовая Структура языка SQL 3

Работа добавлена на сайт bukvasha.net: 2015-10-25

Поможем написать учебную работу

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

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 27.2.2025


Основные данные о работе


Версия шаблона

1.1

Филиал



Вид работы

Курсовая работа

Название дисциплины



Тема



Фамилия студента



Имя студента



Отчество студента



№ контракта



 


Содержание
Введение…………………………………………………………………………...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

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

Многие черты SQL, начиная с самых ранних его вариантов, противоречили принципам реляционной модели данных, заложенным Эдгаром Коддом. С другой стороны, спецификация языка SQL, по своей сути, является завершенной спецификацией модели данных, которая сегодня играет роль суррогата реляционной модели. Сегодня SQL является lingua franca (итал. «свободный язык»), в мире баз данных. Интерфейсы, основанные на SQL, поддерживаются почти во всех используемых СУБД, далеко не все из которых первоначально разрабатывались как реляционные системы (см. приложение А, рисунок 1), и похоже, что эта ситуация при жизни нынешнего поколения радикальным образом не изменится.

Сам по себе SQL не является ни системой управления базами данных, ни отдельным программным продуктом. Нельзя пойти в компьютерный магазин и "купить SQL". SQL - это неотъемлемая часть СУБД, инструмент, с помощью которого осуществляется связь пользователя с ней. В Приложении А на рисунке 2 изображена структурная схема типичной СУБД, компоненты которой соединяются в единое целое с помощью SQL (своего рода "клея").

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

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

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

- SQL - язык администрирования баз данных. Администратор базы данных, находящейся на мини-компьютере или на большой ЭВМ, использует SQL для определения структуры базы данных и управления доступом к данным.

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

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

- SQL - язык шлюзов базы данных. В вычислительных сетях с различными СУБД SQL часто используется в шлюзовой программе, которая позволяет СУБД одного типа связываться с СУБД другого типа.

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

1 Понятие базы данных и СУБД
1.1 Предметная область
Основным назначением информационных систем является хранение сведений об окружающем мире и процессах происходящих в нем, которые в конечном итоге предоставляются пользователям.  Для различных групп людей интерес представляют только определенные части реального мира, то и данные каждой информационной системы будут относится к определенной области. Часть реальной системы, подвергающаяся исследованию с целью ее описания называется предметной областью.

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

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

Каждая предметная область характеризуется множеством объектов – элементов реальных систем и процессов, использующих объекты, а также множеством пользователей, характеризуемых единым взглядом на предметную область. В частности, для бухгалтерии объекты – всевозможные документы. Процессы бухгалтерии – расчет заработной платы, материальный учет, учет банковских операций и др. Наконец пользователи этого фрагмента сотрудники бухгалтерии, работники фиyансовых органов, руководители предприятия и т. д.

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

Часто класс объектов называют сущностью. Каждая сущность обладает атрибутами. Атрибут – это свойство объекта, характеризующее его экземпляр. Сущность "студент" может иметь атрибуты "имя" , "год рождения", " дата поступления" и т. д. Таким образом сущность можно определить, как множество индивидуальных объектов одного типа (экземпляров), причем все эти объекты различны, т. е. набор атрибутов одинаков, а их значения различны.
1.2 Концепция баз данных
1.2.1 Независимость приложений от организации данных во внешней памяти
Основой любой информационной системы являются хранимые в ней данные. В общем случае данные – это информация, подготовленная для определенных целей, при этом часто подразумевается определенный формат представления.

Во все времена люди фиксировали данные на том или ином материальном носителе (бумага, камень и т. д.) Обычно данные фиксируются совместно с их интерпретацией (семантикой), так как системы письменности естественных языков позволяет это делать достаточно гибко. Например, запись на бумаге "Заработная плата – 1000" содержит данное – "1000" и его семантику (смысл) – "Заработная плата".

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

Применение ЭВМ для обработки и хранения данных привело к еще большему разделению данных и интерпретирующей информации. Так как на ранних этапах развития вычислительной техники ее возможности были весьма ограничены, память использовалась только для хранения самих данных. Описание же данных (порядок, тип данных, длина) находились в программах, которые таким образом "знали", например, что с начиная определенного байта адресного пространства внешней памяти четыре байта содержат данное в числовом формате, связанное с заработной платой, а последующие 30 байтов в текстовом формате – содержат фамилию сотрудника.

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

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

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

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

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

Допустим, мы решили создавать эту информационную систему используя некоторую файловую систему, в которой пользователи представляют файл как последовательность записей. Каждая запись – это последовательность байтов постоянного или переменного размера. Записи можно читать или записывать последовательно, позиционировать файл на запись с указанным номером, структурировать на поля и объявлять некоторые поля ключами записи. Кроме того, имеется возможность выборки записи из файла по ее заданному ключу. Естественно, что в этом случае файловая система поддерживает в том же (или другом, служебном) базовом файле дополнительные, невидимые пользователю, служебные структуры данных. Распространенные способы организации ключевых файлов основываются на технике хеширования и B-деревьев.

Для хранения данных будем использовать один файл СТУДЕНТЫ. Поскольку объектом предметной области в нашем случае является студент, определяем, чтобы в этом файле содержалась одна запись для каждого студента. Исходя из требований к информационной системе, обозначим набор свойств, описывающий объект и отразим его следующими полями в файле:

ФИО_СТУДЕНТА,

АДРЕС,

ДАТА_РОЖДЕНИЯ,

НАИМНОВАНИЕ_ФАКУЛЬТЕА,

ФИО_ДЕКАНА,

НОМЕР_ГРУППЫ,

ФИО_КУРАТОРА.

Функции нашей информационной системы требуют, чтобы обеспечивалась возможность многоключевого доступа к записям этого файла по значениям уникального ключа ФИО_СТУДЕНТА. Кроме того, должна обеспечиваться возможность выбора всех записей с общим значением НАИМЕНОВАНИЕ_ФАКУЛЬТЕТА и НОМЕР_ГРУППЫ т. е. доступ по неуникальному ключу.

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

Анализ предметной области показывает, что можно выделить еще два класса объектов ФАКУЛЬТЕТЫ и ГРУППЫ с присущими только им свойствами (для факультетов – деканы, а для групп – кураторы). Естественно предположить, что информация о каждом объекте должна находиться в отдельном файле. Поэтому наша систем будет состоять из трех файлов СТУДЕНТЫ, ФАКУЛЬТЕТЫ, ГРУППЫ, со следующей организацией записей:

СТУДЕНТЫ :

СТУД_ФИО_СТУДЕНТА,

СТУД_АДРЕС,

СТУД_ДАТА_РОЖДЕНИЯ,

СТУД_НОМЕР_ГРУППЫ.

ГРУППЫ :

ГРУП_НОМЕР_ГРУППЫ,

ГРУП_ФИО_КУРАТОРА,

ГРУП_ИДЕНТИФИКАТОР_ФАКУЛЬТЕА,

ГРУП_КОЛИЧЕСТВО_СТУДЕНТОВ.

ФАКУЛЬТЕТЫ :

ФАК_ИДЕНТИФИКАТОР_ФАКУЛЬТЕА,

ФАК_НАИМНОВАНИЕ_ФАКУЛЬТЕА,

ФАК_ФИО_ДЕКАНА,

ФАК_КОЛИЧЕСТВО_СТУДЕНТОВ;

Поле СТУД_НОМЕР_ГРУППЫ добавлено в файл СТУДЕНТЫ, а ГРУП_ИДЕНТИФИКАТОР_ФАКУЛЬТЕТА в файл ГРУППЫ для установки связей между файлами. Так например, по значению поля ГРУП_ИДЕНТИФИКАТОР_ФАКУЛЬТЕТА в файле ГРУППЫ можно определить к какому факультету относится та или иная группа. Иначе говоря, один файл ссылается на другой, поля же, использующееся для ссылок называются ключами.

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

Однако теперь система должна теперь "знать", что она работает с тремя информационно связанными файлами, должна знать структуру и смысл каждого поля (например, что ГРУП_ ДЕНТИФИКАТОР_ ФАКУЛЬТЕТА и ФАК_ ИДЕНТИФИКАТОР_ФАКУЛЬТЕТА означают одно и то же), а также понимать, что в ряде случаев изменение информации в одном файле должно автоматически вызывать модификацию в других, чтобы их общее содержимое было согласованным.

Например, если на факультет принимается новый студент, то необходимо добавить запись в файл СТУДЕНТ, а также соответствующим образом изменить поля ФАК_КОЛИЧЕСТВО_СТУДЕНТОВ и ГРУП_КОЛИЧЕСТВО_СТУДЕНТОВ в файлах ФАКУЛЬТЕТЫ и ГРУППЫ. Иначе говоря данные во всех файлах должны быть согласованными.

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

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

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

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

Рассмотрим следующий пример для двух приложений "Учет кадров" и "Расчет заработной платы" для которых необходимы следующие сведения:
Учет кадров        Расчет заработной платы

Табельный номер         Табельный номер

Ф. И. О. Сотрудника    Ф. И. О. Сотрудника

Отдел         Отдел

Должность Должностной оклад

Стаж работы       Стаж работы

Год рождения    
По правилам предметной области первоначально информация о переводе сотрудника на новую должность или в другой отдел, а так же об увольнении поступает в отдел кадров. Если же по каким-либо причинам об этом не будет своевременно известно в бухгалтерии, то в лучшем случае фамилия этого сотрудника окажется не в той ведомости или же возникнет совсем курьезное положение, когда уволенному сотруднику будет начислена заработная плата.

Поэтому существует необходимость в создании системы с единым хранилищем данных, в которой все данные накапливаются и хранятся централизованно, а информация внесенная одним пользователем становится доступной для других. В памяти ЭВМ должна быть создана динамически обновляемая модель предметной области это значит, что соответствие базы данных текущему состоянию предметной области обеспечивается не периодически, а в режиме реального времени. Благодаря интеграции устраняется дублирование данных, повышается уровень их достоверности, упрощаются и становятся эффективнее процедуры обновления данных. Интеграция данных порождает ряд проблем, которые мы рассмотрим ниже.
1.2.4 Что такое база данных
В общем случае понятие базы данных можно определить как совокупность файлов или файл, состоящий из некоторого числа записей, каждая из которых формируется из полей определенного типа, вместе с набором операций поиска, сортировки, рекомбинации и др.

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

поддержание логически согласованного набора файлов;

обеспечение языка манипулирования данными;

восстановление информации после разного рода сбоев;

параллельная работа в режиме реального времени нескольких пользователей.

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

2 Типы данных SQL
В SQL используются следующие основные типы данных, форматы которых могут несколько различаться для разных СУБД:

INTEGER

- целое число (обычно до 10 значащих цифр и знак);

SMALLINT

- "короткое целое" (обычно до 5 значащих цифр и знак);

DECIMAL(p,q)

- десятичное число, имеющее p цифр (0 < p < 16) и знак; с помощью q задается число цифр справа от десятичной точки (q < p, если q = 0, оно может быть опущено);

FLOAT

- вещественное число с 15 значащими цифрами и целочисленным порядком, определяемым типом СУБД;

CHAR(n)

- символьная строка фиксированной длины из n символов (0 < n < 256);

VARCHAR(n)

- символьная строка переменной длины, не превышающей n символов (n > 0 и разное в разных СУБД, но не меньше 4096);

DATE

- дата в формате, определяемом специальной командой (по умолчанию mm/dd/yy); поля даты могут содержать только реальные даты, начинающиеся за несколько тысячелетий до н.э. и ограниченные пятым-десятым тысячелетием н.э.;

TIME

- время в формате, определяемом специальной командой, (по умолчанию hh.mm.ss);

DATETIME

- комбинация даты и времени;

MONEY

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

В некоторых СУБД еще существует тип данных LOGICAL, DOUBLE и ряд других. СУБД INGRES предоставляет пользователю возможность самостоятельного определения новых типов данных, например, плоскостные или пространственные координаты, единицы различных метрик, пяти- или шестидневные недели (рабочая неделя, где сразу после пятницы или субботы следует понедельник), дроби, графика, большие целые числа (что стало очень актуальным для российских банков) и т.п.
2.1 Таблицы SQL
До сих пор понятие "таблица", как правило, связывалось с реальной или базовой таблицей, т.е. c таблицей, для каждой строки которой в действительности имеется некоторый двойник, хранящийся в физической памяти машины (Приложение А). Однако SQL использует и создает ряд виртуальных (как будто существующих) таблиц: представлений, курсоров и неименованных рабочих таблиц, в которых формируются результаты запросов на получение данных из базовых таблиц и, возможно, представлений. Это таблицы, которые не существуют в базе данных, но как бы существуют с точки зрения пользователя.

Базовые таблицы создаются с помощью предложения CREATE TABLE (создать таблицу). Здесь же приведем пример предложения для создания описания таблицы Блюда:

CREATE TABLE Блюда

         (БЛ   SMALLINT,

         Блюдо        CHAR (70),

         В                CHAR (1),

         Основа       CHAR (10),

         Выход        FLOAT,

         Труд SMALLINT);

Предложение CREAT TABLE специфицирует имя базовой таблицы, которая должна быть создана, имена ее столбцов и типы данных для этих столбцов (а также, возможно, некоторую дополнительную информацию, не иллюстрируемую данным примером). CREAT TABLE - выполняемое предложение. Если его ввести с терминала, система тотчас построит таблицу Блюда, которая сначала будет пустой: она будет содержать только строку заголовков столбцов, но не будет еще содержать никаких строк с данными.
2.2 Структура языка SQL
Язык SQL, соответствующий последним стандартам SQL:2003, SQL:1999 (и даже SQL/92), это очень богатый и сложный язык, все возможности которого трудно сразу осознать и тем более понять. Поэтому приходится разбивать язык на уровни, или слои, такие, что каждый уровень языка включает все конструкции, входящие в более низкие уровни (см. Приложение А, рисунок 3). В стандарте определяется несколько способов разбиения языка на уровни. В одной из классификаций язык разбивается на базовый (entry), промежуточный (intermediate) и полный (full) уровни.

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

Среди всех конструкций языка SQL можно выделить такие конструкции, которые можно было использовать при прямом (direct) взаимодействии конечного пользователя с СУБД. На следующем уровне, уровне встраиваемого (embedded) SQL, язык расширяется конструкциями, позволяющими использовать возможности прямого SQL в программах, написанных на традиционных языках программирования. На уровне динамического (dynamic) 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.

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

Стадия 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 поддерживаются:

        развитый набор предопределенных типов, включая ряд параметризованных типов;

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

        генератор анонимных строчных типов, в которых типом элемента строки может быть любой предопределенный тип, тип коллекции, анонимный строчный тип и тип, определенный пользователями;

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

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

Стремительный рост популярности SQL является одной из самых важных тенденций в современной компьютерной промышленности. За несколько последних лет SQL стал единственным языком баз данных. На сегодняшний день SQL поддерживают свыше ста СУБД, работающих как на персональных компьютерах, так и на больших ЭВМ. Был принят, а затем дополнен официальный международный стандарт на SQL. Язык SQL является важным звеном в архитектуре систем управления базами данных, выпускаемых всеми ведущими поставщиками программных продуктов, и служит стратегическим направлением разработок компании Microsoft в области баз данных. Зародившись в результате выполнения второстепенного исследовательского проекта компании IBM, SQL сегодня широко известен и в качестве мощного рыночного фактора.

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

 

Глоссарий


п/п    Понятие     Определение
1

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

2

         База данных (БД)         поименованная совокупность данных, отражающая состояние объектов и их отношений в рассматриваемой предметной области

3        Объект       элемент предметной области, информацию о котором мы сохраняем

4        Поле элементарная единица логической организации данных, которая соответствует неделимой единице информации - реквизиту

5        Запись        совокупность логически связанных полей

6        Файл (таблица)    совокупность экземпляров записей одной структуры

7        Модель данных   совокупность структур данных и операций их обработки

8        Реляционная модель данных совокупность взаимосвязанных двумерных таблиц - объектов модели

9        Атрибут     поименованная характеристика объекта. Атрибут показывает, какая информация должна быть собрана об объекте

10      Связи         соответствия, отношения, возникающие между объектами предметной области

11      Сущность  основное содержание объекта предметной области, о котором собирают информацию. В качестве сущности могут выступать место, вещь, личность, явление

12      Конструктор (Builder)  инструмент Access, который облегчает выполнение конкретного задания
Список использованных источников

1.       Дейт К.Дж. /[Текст]//Введение в системы баз данных. 6-е изд. - М.: Вильямс. 2006. – 317 с.- ISBN 5-8459-0788-8
2.       .Конноли Т., Бегг Л., Страчан А /[Текст]//Базы данных. Проектирование, реализация и сопровождение. Теория и практика. 3-е издание. Вильямс 2005. – Таблицы, картинки. Леонтьев В.П. ПК: универсальный справочник пользователя - М.: 2005. – 251 с.- ISBN: 5-8459-0527-3
3.       В.В. Фаронов /[Текст]//Фаронов Основы программирования в SQL. - М.: Издатель Молгачева С.В., 2006. – 329 с.- ISBN 5-89251-058-1

4.       Коннолли Т., Бегг К., Страчан А./[Текст]//Базы данных. Проектирование, реализация и сопровождение. Теория и практика. 2-е изд. – С-Пб.: Вильямс, 2007. – 1120 с.- ISBN 5-8459-0109-2
5.       Корнеев В.В., Гареев А.Ф., Васютин С.В., Райх В.В./[Текст]//Базы данных. Интеллектуальная обработка информации. 2-е изд. – М.: Изд. Молгачева С.В., 2005. – 494 с.- ISBN 5-89251-100-6

6.       Мамаев Е./[Текст]//Microsoft SQL Server 2000 – СПБ.: БХВ-Петербург, 2006.- ISBN: 5-94157-025-2

7.       Когаловский М.Р./[Текст]//Энциклопедия технологий баз данных. – М.: Финансы и статистика, 2005.- ISBN 5-279-02276-4

8.       Бен Форта. /[Текст]// Освой самостоятельно язык запросов SQL / Пер. с англ. — 3-е изд. — М.: Диалектика, 2005. — 288 с. -ISBN: 5-8459-0827-2

9.       Пол Уилтон, Джон Колби. /[Текст]// Язык запросов SQL для начинающих / Пер. с англ. — М.: Диалектика, 2005. — 496 с.- ISBN: 5-8459-0971-6

10.     Роберт Э. Уолтерс, Майкл Коулс./[Текст]// SQL Server 2008: ускоренный курс для профессионалов Accelerated SQL Server 2008. - М.: «Вильямс», 2008. - С. 768. - ISBN 978-5-8459-1481-1

11.     Майк Гандерлой, Джозеф Джорден, Дейвид Чанц. /[Текст]//Освоение Microsoft SQL Server 2005 Mastering Microsoft SQL Server 2005. - М.: «Диалектика», 2007. - С. 1104. - ISBN 0-7821-4380-6
Приложения
А      



1. Курсовая Стилистический анализ официальных блогов Д.А. Медведева
2. Реферат на тему Среда обитания живых организмов
3. Статья Логический тип данных. Операции сравнения
4. Реферат на тему The History Of Abortion Essay Research Paper
5. Книга Сколько людей жило, живет и будет жить на земле, Капица С. П.
6. Реферат Россия административно-территориальный монстр
7. Реферат Сан-Доминго
8. Кодекс и Законы Формирование и развитие основных понятий геометрической оптики в курсе физики средней школы
9. Реферат на тему Society
10. Реферат на тему A Good Book Essay Research Paper In