Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Язык реляционных баз данных SQL

Из рассмотрения реляционной модели известно, что двумя фундаментальными языками запросов к реляционным базам данных являются языки реляционной алгебры и реляционного исчисления. При всей своей строгости и теоретической обоснованности, эти языки не стали стандартными языками реляционных СУБД. Юридическим и фактическим стандартом стал язык SQL (Structured Query Language – «язык структурированных запросов»).

 

SQL представляет собой некоторую комбинацию реляционного исчисления кортежей и реляционной алгебры, и был разработан в середине 70-х годов в компании IBM в рамках проекта экспериментальной реляционной СУБД System R. Деятельность по стандартизации SQL началась практически одновременно с появлением его первых коммерческих реализаций. В 1986 г. был принят стандарт ANSI, а в 1987 г. Этот стандарт был одобрен международной организацией по стандартизации (ISO). Время от времени выпускается пересмотренная версия этого стандарта; наиболее свежее обновление было выпущено в 2008 г. Формальное название стандарта SQL – ISO/IEC 9075 «Database Language SQL».

 

Несмотря на наличие международного стандарта, многие производители СУБД вносят изменения в язык SQL, тем самым отступая от стандарта. В результате у разных производителей СУБД в ходу разные диалекты SQL, в общем случае между собой несовместимые. В настоящее время проблема совместимости решается так: описание языка имеет модульную структуру, основная часть стандарта вынесена в раздел «SQL/Foundation», все остальные выведены в отдельные модули, остался только один уровень совместимости – «Core», что означает поддержку этой основной части. Поддержка остальных возможностей оставлена на усмотрение производителей СУБД.

 

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

 

Все операторы, составляющие основу SQL с момента его появления, можно разделить на следующие группы:

· операторы определения данных (Data Definition Language – DDL)

o CREATE создает объект базы данных

o ALTER изменяет объект

o DROP удаляет объект

· операторы манипуляции данными (Data Manipulation Language – DML)

o SELECT считывает данные, удовлетворяющие заданным условиям

o INSERT добавляет новые данные

o UPDATE изменяет существующие данные

o DELETE удаляет данные

· операторы определения доступа к данным (Data Control Language – DCL)

o GRANT предоставляет пользователю (группе) разрешения на определенные операции с объектом

o REVOKE отзывает ранее выданные разрешения

o DENY задает запрет, имеющий приоритет над разрешением

· операторы управления транзакциями (Transaction Control Language – TCL)

o COMMIT применяет транзакцию.

o ROLLBACK откатывает все изменения, сделанные в контексте текущей транзакции.

o SAVEPOINT делит транзакцию на более мелкие участки.

 

Не вдаваясь в детали синтаксиса, в качестве примера приведем сценарий создания базы данных «Поставщики и детали», схема которой была рассмотрена ранее.

 

USE master

IF DB_ID (N'Поставщики и детали') IS NOT NULL

DROP DATABASE [Поставщики и детали]

GO

CREATE DATABASE [Поставщики и детали]

GO

USE [Поставщики и детали]

CREATE TABLE S

(

Sno INT IDENTITY(1,1) NOT NULL,

Sname VARCHAR(20) NOT NULL,

Status INT,

City VARCHAR(15)

)

CREATE TABLE P

(

Pno INT IDENTITY(1,1) NOT NULL,

Pname VARCHAR(20) NOT NULL,

Color CHAR(10),

Weight REAL,

City VARCHAR(15)

)

CREATE TABLE SP

(

Sno INT NOT NULL,

Pno INT NOT NULL,

Qty INT

)

ALTER TABLE S

ADD

CONSTRAINT PK_S PRIMARY KEY (Sno),

CONSTRAINT UK_S UNIQUE (Sname)

ALTER TABLE P

ADD

CONSTRAINT PK_P PRIMARY KEY (Pno)

ALTER TABLE SP

ADD

CONSTRAINT PK_SP PRIMARY KEY (Sno, Pno),

CONSTRAINT FK_SP_S FOREIGN KEY (Sno) REFERENCES S (Sno),

CONSTRAINT FK_SP_P FOREIGN KEY (Pno) REFERENCES P (Pno)

 

К приведенному сценарию можно дать следующие комментарии.

1) Сценарий написан на диалекте SQL компании Microsoft (для Microsoft SQL Server), известном под названием Transact-SQL (T-SQL).

2) Сценарии состоит из трех пакетов. Конец пакета отмечается командой GO.

3) Специальная команда USE меняет контекст на указанную базу данных.

4) Если идентификационный номер базы данных «Поставщики и детали» не NULL, то такая база данных уже существует и ее надо предварительно уничтожить. Для этой цели в начале сценария используется оператор IF.

5) Свойство IDENTITY используется для получения автоматически увеличивающегося идентификационного номера поставщика и детали.

6) Операторы CREATE TABLE и ALTER TABLE, включат в себя такие ограничения целостности, как ограничение целостности NULL, ограничение первичного ключа (PRIMARY КЕУ), ограничение уникальности (UNIQUE), ограничение внешнего ключа (FOREIGN КЕУ).

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

 

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

 

[ WITH общее_табличное_выражение ]

SELECT [ DISTINCT | ALL ] [ TOP выражение [ PERCENT ] ] { * | список_выбора } [ INTO новая_таблица ]

[ FROM список_табличных_источников ]

[ WHERE условие_поиска ]

[ GROUP BY group_by_выражение ]

[ HAVING условие_поиска ]

[ ORDER BY order_by_выражение [ ASC | DESC ] ]

 

Предложения, составляющие оператор SELECT, имеют следующий смысл:

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

· SELECT определяет столбцы, возвращаемые запросом.

· DISTINCT указывает на то, что только уникальные строки могут появляться в результирующем наборе.

· ALL указывает на то, что в результирующем наборе могут появляться дублирующиеся строки. ALL применяется по умолчанию.

· TOP указывает на то, что только заданное число или процент строк будет возвращен из результирующего набора.

· * указывает на то, что все столбцы из всех таблицв предложении FROM должны быть возвращены.

· INTO создает новую таблицу и вставляет в нее строки результата выполнения запроса.

· FROM указывает таблицы или табличные выражения, которые используются в операторе SELECT.

· WHERE определяет условия поиска строк, возвращаемых запросом.

· GROUP BY задает группы, в которые должны быть помещены строки вывода.

· HAVING определяет условие поиска для группы.

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

 

Из перечисленных предложений оператора SELECT наиболее часто используются SELECT, FROM и WHERE. Если исключить все опции предложения SELECT, то получается такая простая конструкция:

 

SELECT { * | список_выбора }

FROM список_табличных_источников

WHERE условие_поиска

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

 

1) Получить имена поставщиков, которые поставляют деталь под номером 2.

 

SELECT DISTINCT S.Sname

FROM S

WHERE EXISTS (SELECT *

FROM SP

WHERE SP.Sno = S.Sno AND SP.Pno = 2)

 

2) Получить имена поставщиков, которые поставляют, по крайней мере, одну красную деталь.

 

SELECT DISTINCT S.Sname

FROM S

WHERE S.Sno IN (SELECT SP.Sno

FROM SP

WHERE SP.Pno IN (SELECT P.Pno

FROM P

WHERE P.Color = 'Красный'))

 

3) Получить имена поставщиков, которые поставляют все типы деталей.

 

SELECT DISTINCT S.Sname

FROM S

WHERE NOT EXISTS (SELECT *

FROM P

WHERE NOT EXISTS (SELECT *

FROM SP

WHERE SP.Sno = S.Sno AND SP.Pno = P.Pno))

 

4) Получить номера поставщиков, поставляющих, по крайней мере, все те детали, которые поставляет поставщик под номером 2.

 

5) Получить все пары номеров поставщиков, размещенных в одном городе

 

SELECT A.Sno AS SA, B.Sno AS SB

FROM S AS A, S AS B

WHERE A.City = B.City AND A.Sno < B.Sno

 

6) Получить имена поставщиков, которые не поставляют деталь под номером 2.

 

SELECT DISTINCT S.Sname

FROM S

WHERE NOT EXISTS (SELECT *

FROM SP

WHERE SP.Sno = S.Sno AND SP.Pno = 2)

 

<== предыдущая лекция | следующая лекция ==>
Проектирование реляционных баз данных | Расскажите о пессиместическом направлении в культуре
Поделиться с друзьями:


Дата добавления: 2014-01-06; Просмотров: 336; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.036 сек.