SQL Structured Query Language
Язык SQL Structured Query Language – стандартный язык управления реляционными базами данных с архитектурой клиент-сервер. Целью разработки было создание простого непроцедурного языка, которым мог бы воспользоваться любой пользователь, даже не имеющий навыков программирования. Правило 5 д-ра Кодда (из правил-требований к реляционной модели) гласит: язык доступа к данным должен быть единственным способом доступа к данным в реляционной СУБД.
Язык SQL- стандарты Поскольку к началу 1980-х годов существовало несколько вариантов СУБД от разных производителей, причём каждый из них обладал собственной реализацией языка запросов, было принято решение разработать стандарт языка, который будет гарантировать переносимость ПО с одной СУБД на другую (при условии, что они будут поддерживать этот стандарт). Основные стандарты: 1986 г. - SQL-86 (SQL1) 1992 г. - SQL г. –SQL2003(SQL3)
Язык SQL- Преимущества Независимость от конкретной СУБД Несмотря на наличие диалектов и различий в синтаксисе, в большинстве своём тексты SQL-запросов, содержащие DDL и DML, могут быть достаточно легко перенесены из одной СУБД в другую. Существуют системы, разработчики которых изначально ориентировались на применение по меньшей мере нескольких СУБД. Наличие стандартов Наличие стандартов и набора тестов для выявления совместимости и соответствия конкретной реализации SQL общепринятому стандарту только способствует «стабилизации» языка.. Декларативность С помощью SQL программист описывает только то, какие данные нужно извлечь или модифицировать. То, каким образом это сделать, решает СУБД непосредственно при обработке SQL-запроса. Однако не стоит думать, что это полностью универсальный принцип программист описывает набор данных для выборки или модификации, однако ему при этом полезно представлять, как СУБД будет разбирать текст его запроса.
Язык SQL- Недостатки Несоответствие реляционной модели данных Создатели реляционной модели данных Эдгар Кодд, Кристофер Дейт и их сторонники указывают на то, что SQL не является истинно реляционным языком.Эдгар Кодд Кристофер Дейт Сложность Хотя SQL и задумывался как средство работы конечного пользователя, в конце концов он стал настолько сложным, что превратился в инструмент программиста. Отступления от стандартов Несмотря на наличие международного стандарта, многие компании, занимающиеся разработкой СУБД (например, Oracle, Sybase, Microsoft, MySQL AB), вносят изменения в язык SQL, применяемый в разрабатываемой СУБД. Таким образом, появляются специфичные для каждой конкретной СУБД диалекты языка SQL. OracleSybaseMicrosoftMySQL AB Сложность работы с иерархическими структурами Ранее диалекты SQL большинства СУБД не предлагали способа манипуляции древовидными структурами. В настоящее время в ANSI стандартизована рекурсивная конструкция WITH из диалекта SQL DB2.DB2
DDL – data definition language (язык определения данных) включает всевозможные команды создания (CREATE), удаления (DROP) и изменения структуры (ALTER) объектов, таких, как таблицы (TABLE), представления (VIEW), триггеры (TRIGGER), пользователи (USER) и т.п. Пример создания таблицы Организации: CREATE TABLE k_firm (firm_numNUMERIC(6) PRIMARY KEY, firm_name VARCHAR(100)NOT NULL, firm_addrVARCHAR(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 (язык управления курсорами ) Cursor – current 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) и т.п.