Structured Query Language

  • ppt
  • 27.04.2020
Публикация на сайте для учителей

Публикация педагогических разработок

Бесплатное участие. Свидетельство автора сразу.
Мгновенные 10 документов в портфолио.

Иконка файла материала 142. Structured Query Language.ppt

SQL

Structured Query Language

Язык SQL

 
Structured Query Language – стандартный язык управления реляционными базами данных с архитектурой клиент-сервер.
Целью разработки было создание простого непроцедурного языка, которым мог бы воспользоваться любой пользователь, даже не имеющий навыков программирования.
 
Правило №5 д-ра Кодда (из правил-требований к реляционной модели) гласит: язык доступа к данным должен быть единственным способом доступа к данным в реляционной СУБД.

Язык SQL- стандарты

Поскольку к началу 1980-х годов существовало несколько вариантов СУБД от разных производителей, причём каждый из них обладал собственной реализацией языка запросов, было принято решение разработать стандарт языка, который будет гарантировать переносимость ПО с одной СУБД на другую (при условии, что они будут поддерживать этот стандарт).
Основные стандарты:
1986 г. - SQL-86 (SQL1)
1992 г. - SQL2
2003 г. –SQL2003(SQL3)

Язык SQL- Преимущества

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

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

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

Язык SQL- Недостатки

Несоответствие реляционной модели данных  Создатели реляционной модели данных Эдгар Кодд, Кристофер Дейт и их сторонники указывают на то, что SQL не является истинно реляционным языком.

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

Отступления от стандартов  Несмотря на наличие международного стандарта, многие компании, занимающиеся разработкой СУБД (например, Oracle, Sybase, Microsoft, MySQL AB), вносят изменения в язык SQL, применяемый в разрабатываемой СУБД. Таким образом, появляются специфичные для каждой конкретной СУБД диалекты языка SQL.

Сложность работы с иерархическими структурами  Ранее диалекты SQL большинства СУБД не предлагали способа манипуляции древовидными структурами. В настоящее время в ANSI стандартизована рекурсивная конструкция WITH из диалекта SQL DB2.

DDLdata definition language (язык определения данных)

включает всевозможные команды создания (CREATE), удаления (DROP) и изменения структуры (ALTER) объектов, таких, как таблицы (TABLE), представления (VIEW), триггеры (TRIGGER), пользователи (USER) и т.п.

Пример создания таблицы “Организации”:
CREATE TABLE k_firm
(firm_num NUMERIC(6) PRIMARY KEY,
firm_name VARCHAR(100) NOT NULL,
firm_addr VARCHAR(100)
);

Политики ссылочной целостности


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

Declarative Referential Integrity (декларативная ссылочная целостность)

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

Пример создания таблицы “Договоры”:
CREATE TABLE k_contract
( contract_num NUMERIC(6) PRIMARY KEY,
contract_date DATETIME,
contract_type CHAR(1) CHECK (contract_type IN ('A','B','C')),
firm_num NUMERIC(6) NOT NULL,
CONSTRAINT fk_contract_firm_num FOREIGN KEY
(firm_num) REFERENCES k_firm (firm_num) );

DML - data manipulation language (язык манипулирования данными)

включает команды INSERT, DELETE, UPDATE.

Команда добавления строк в таблицу:
INSERT [INTO] имя_таблицы [(список_полей)]
VALUES (список_значений)

Команда обновления строк таблицы:
UPDATE имя_таблицы SET поле1=выражение1 [,... , полеN=ВыражениеN] [WHERE условие]

Команда удаления строк таблицы:
DELETE [FROM] имя_таблицы [WHERE условие]

DQL – data query language (язык запросов к данным)

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

Реляционная алгебра и SQL

CCL – cursor control language (язык управления курсорами )

Cursorcurrent set of record - временный набор записей, позволяющий обрабатывать каждую запись по отдельности. Необходимость использования курсоров возникла потому, что команды изменения данных (UPDATE, DELETE) применяются к таблице целиком и поэтому являются достаточно “грубыми” для разнообразной “тонкой” работы.
 
Стандартные операции по работе с курсором:
объявление курсора
DECLARE имя_курсора CURSOR FOR SELECT команда
открытие курсора: OPEN имя_курсора
получение значений из текущей строки и передвижение указателя на следующую строку:
FETCH имя_курсора INTO переменные
закрытие курсора: CLOSE имя_курсора

TPL – transaction processing language (язык проведения транзакций)

Транзакция – группа команд языка SQL, которая либо выполняется полностью, либо не выполняется вообще.
 
Стандартные команды для работы с транзакциями:
BEGIN TRAN – начало транзакции,
ROLLBACK TRAN – откат, отмена транзакции; все изменения, сделанные с начала транзакции, будут отменены,
COMMIT TRAN – завершение, подтверждение транзакции; все изменения, сделанные с начала транзакции, будут зафиксированы.

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

Уровни изолированности транзакций:

Serializable – самый надежный, но и самый медленный уровень изолированности, транзакции выполняются последовательно, друг за другом.

Repeatable read – при повторном чтении данных результат будет точно таким же, как и при первом чтении, даже если данные были изменены.

Read commited – допускается читать только данные завершенных транзакций.

Read uncommited - допускается читать “грязные данные”, т.е., данные незавершенных транзакций.

DCL – data control language (язык управления данными)

содержит команды предоставления (GRANT) и отнимания (REVOKE) прав доступа, а также запрета доступа (DENY).

Примеры:
предоставление прав на выборку и изменение данных в таблице k_contract пользователю public:
GRANT SELECT, UPDATE ON k_contract TO public

запрет удаления данных из таблицы k_contract пользователю public:
DENY DELETE ON k_contract FROM public

Диалекты SQL

Каждая СУБД имеет свой собственный “диалект” SQL, включающий, кроме основ SQL, команды управления (циклы, условия), функции и прочие средства:

ORACLE – PL/SQL (Procedural Language/SQL),
MS SQL Server – Transact SQL,
MySQL – SQL/PSM (SQL/Persistent Stored Module)
и т.п.