Ddl sql что это

Что такое DDL, DML, DCL и TCL в языке SQL

Приветствую всех посетителей сайта Info-Comp.ru! В этом материале я расскажу Вам о том, что такое DDL, DML, DCL и TCL в языке SQL. Если Вы не знаете, что означают эти непонятные наборы букв и при этом работаете с языком SQL, то Вам обязательно необходимо прочитать данный материал.

Ddl sql что это. Смотреть фото Ddl sql что это. Смотреть картинку Ddl sql что это. Картинка про Ddl sql что это. Фото Ddl sql что это

Для начала давайте вспомним, что такое SQL, и для чего он нужен.

SQL – Structured Query Language

Structured Query Language (SQL) — язык структурированных запросов, с помощью него пишутся специальные запросы (SQL инструкции) к базе данных с целью получения этих данных из базы и для манипулирования этими данными.

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

С точки зрения реализации язык SQL представляет собой набор операторов, которые делятся на определенные группы и у каждой группы есть свое назначение. В сокращенном виде эти группы называются DDL, DML, DCL и TCL.

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

DDL – Data Definition Language

Data Definition Language (DDL) – это группа операторов определения данных. Другими словами, с помощью операторов, входящих в эту группы, мы определяем структуру базы данных и работаем с объектами этой базы, т.е. создаем, изменяем и удаляем их.

В эту группу входят следующие операторы:

DML – Data Manipulation Language

Data Manipulation Language (DML) – это группа операторов для манипуляции данными. С помощью этих операторов мы можем добавлять, изменять, удалять и выгружать данные из базы, т.е. манипулировать ими.

В эту группу входят самые распространённые операторы языка SQL:

DCL – Data Control Language

Data Control Language (DCL) – группа операторов определения доступа к данным. Иными словами, это операторы для управления разрешениями, с помощью них мы можем разрешать или запрещать выполнение определенных операций над объектами базы данных.

TCL – Transaction Control Language

Transaction Control Language (TCL) – группа операторов для управления транзакциями. Транзакция – это команда или блок команд (инструкций), которые успешно завершаются как единое целое, при этом в базе данных все внесенные изменения фиксируются на постоянной основе или отменяются, т.е. все изменения, внесенные любой командой, входящей в транзакцию, будут отменены.

Группа операторов TCL предназначена как раз для реализации и управления транзакциями. Сюда можно отнести:

Заметка! Всем тем, кто только начинает свое знакомство с языком SQL, рекомендую прочитать книгу «SQL код» – это самоучитель по языку SQL, которую написал я, и в которой я подробно, и в то же время простым языком, рассказываю о языке SQL.

На сегодня это все, надеюсь, материал был Вам полезен, удачи!

Источник

Ddl sql что это

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

DDL и DML


Типы данных

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

Каждый основной тип имеет один или несколько подтипов.

Разработчики СУБД нарушают стандарты SQL. Осбенно сильно отличаются от стандартных типы данных. Более того, наборы типов данных в разных СУБД тоже отличаются друг от друга. Например, в СУБД MS SQL Server и MS ACCESS есть тип данных MONEY, а в Oracle и в MySQL отсутствует. Различие типов данных является одной из причин несовместимости различных СУБД и возникающих трудностей при переносе базы данных из одной СУБД в другую. В таблице 1 перечислены типы данных СУБД ACCESS.

Таблица 1. Типы данных в ACCESS

Структура реляционной базы данных

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

Описание структуры базы данных называется метаданными и хранится в базе вместе с основными данными.

Нотация Бэкуса-Наура

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

Более полно смысл перечисленных обозначений станет ясен после их использования для описания операторов.

Операторы языка описания данных

Перечислим основные операторы языка SQL, с помощью которых создаётся и изменяется cтруктура базы данных:

Оператор CREATE TABLE

Пример. Создание таблицы из четырёх столбцов.

Ограничения столбца имеют следующие значения:

Ограничение может иметь имя, которое задаётся перед ограничением ключевым словом CONSTRAINT:

Пример создание двух связанных таблиц. Рассмотрим сущности писатель и книга. Для простоты будем считать, что у книги может быть только один автор. Тогда между сущностями писатель и книга существует связь типа один ко многим. Для отображения этой связи в реляционной модели создадим в таблице pisatel первичный ключ Id_p, а в таблицу kniga добавим внешний ключ Id_pisatel. Кроме того, зададим адрес писателя по умолчанию и проверку числа страниц в книге. Соответствующие запросы будут выглядеть так:

В таблице kniga поле naim = потенциальный ключ.

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

Оператор ALTER TABLE

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

Синтаксическая формула оператора ALTER TABLE:

Пример добавления столбца. К таблице заказ добавляется столбец цена, имеющий тип MONEY.

Оператор DROP TABLE

Синтаксическая формула оператора DROP TABLE:

Оператор CREATE INDEX

Синтаксическая формула оператора CREATE INDEX:

Пример. Содаётся индекс kniga_ind для таблицы kniga.

Оператор DROP INDEX

Синтаксическая формула оператора DROP INDEX:

Оператор CREATE VIEW

В контексте реляционных баз данных термин VIEW переводится на русский язык как представление. Синтаксическая формула оператора CREATE VIEW:

Оператор CREATE VIEW необычен тем, что содержит в себе оператор SELECT, принадлежащий языку манипулирования данными. Заметьте, что в синтактической формуле используется не имя представления,что было бы логично, а имя таблицы. Когда в каком-либо запросе языка манипулирования данными встречается имя таблицы, объявленное в операторе CREATE VIEW, то выполняется запрос SELECT, объявленный в том же CREATE VIEW. Результаты этого запроса рассматриваются как обыкновенная таблица!

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

Предложение CHECK OPTION служит для проверки нарушения целостности данных при использовании представления в операторах INSERT и UPDATE. CASCADED распространяет проверку на все уровни вложенности представления, а LOCAL ограничивает проверку только одним уровнем.

Пример. Создаётся представление, в которое отбираются только дешёвые товары из таблицы товар

Оператор DROP VIEW

Синтаксическая формула оператора удаления представления DROP VIEW:

RESTRICT вызывает сообщение об ошибке при существовании ссылки на это представление.

При задании CASCADE удаляются все объекты, в которых есть ссылки на удаляемое представление.

Оператор GRANT

Оператор GRANT служит для назначения прав (привилегий) пользователям. Синтаксическая формула оператора GRANT:

GRANT OPTION даёт возможность передавать права другим пользователям

PUBLIC предоставляет указанные в операторе GRANT права всем пользователям.

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

2. Пользователям Lada и Genja предоставляется право просматриваь таблицу книга и добавлять в неё данные.

3. Пользователям Andre и Peter предоставляется право обновлять поле naim в таблице книга.

Оператор REVOKE

Оператор REVOKE служит для отмены привилегий. Синтаксическая формула оператора REVOKE:

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

Операция над данными строкового типа

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

Оператор SELECT

Общая синтаксическая формула оператора SELECT очень сложна и мало подходит для начинающего изучать язык SQL. Поэтому начнём с самых простых частных случаев.

Выборка всех строк

Запрос на выборку всей таблицы имеет самый простой вид:

Пример. Из базы выбирается вся таблица заказ.

Таблица заказ
N_заказаизделиефирмак_во
1НоутбукАльфа2
2МышкаБета4
3ПринтерАльфа1
4флешкаГамма5
5МышкаБета1

изделиефирма
НоутбукАльфа
МышкаБета
ПринтерАльфа
флешкаГамма
МышкаБета

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

изделиефирма
НоутбукАльфа
МышкаБета
ПринтерАльфа
флешкаГамма

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

Номер заказаизделиефирмаколичество
1НоутбукАльфа2
2МышкаБета4
3ПринтерАльфа1
4флешкаГамма5
5МышкаБета1

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

Таблица Затраты
ТоварЦенак_во
Стол120005
Стул170020
Шкаф185002

Запрос выглядит так:

В запросе использована функция str(числовое выражение), преобразующая выражение в строковый тип. Результат запроса

ТоварЦенаКоличествоСтоимость
Стол12000560 тыс. руб.
Стул17002034 тыс. руб.
Шкаф18500237 тыс. руб.

Агрегатные функции служат для вычисления характеристик таблицы в целом. Всего агрегатных функций пять: count, sum, max, min и avg.

К-во
товаров
Стоимость
всех товаров
Макс. ценаМин. ценаСредняя
цена
313100018500170010733

Выборка строк, удовлетволяющих условию

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

1. Использование операций сравнения.

Выберем из таблицы Затраты строки, в которых цена больше 5000.

ТоварЦенаКоличество
Стол120005
Шкаф185002

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

Рассмотрим два примера использования в СУБД ACCESS функций СDATE и DatePart.

Функция СDATE( дата в текстовом виде) преобразует дату в тип DATE. Выберем из таблицы студенты все строки с датами родения позже 31.12.1994.

Функция DatePart(часть даты, дата) возвращает часть даты. Параметр часть даты может принимать следующие значения:

Пример выделения из даты года и месяца. Из таблицы клиенты выбираются ФИО и Год рождения клиентов, родившихся в мае.

Таблица клиенты
ФИОДата рождения
Сергеева Е.И.16.02.1994
Петров А.П.16.05.1995
Петров В.П.07.10.1989
Иванов С.В.21.05.1956

ФИОГод рождения
Петров А.П.1995
Иванов С.В.1956

2. Применение логических операторов AND, OR, NOT

Выберем из таблицы клиенты все клиентов, родившихся между 1990-м и 1999-м годами или родившихся не в мае.

ФИОДата рождения
Сергеева Е.И.16.02.1994
Петров А.П.16.05.1995
Петров В.П.07.10.1989

3. Применение специальных операторов сравнения IN, BETWEEN, LIKE, IS NULL

Перечисленные операторы иначе называют предикатами. Предикаты IN и BETWEEN служат для сокращении записи условия выборки.

Предикат IN используется в тех случаях, когда в условиях выборки нужно задать не диапазон, а список значений. Выберем из таблицы Заказы заказы для городов БЕРН, Женева и Грасс.

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

При задании диапазона дат необходимо преобразовать даты из тектового типа в тип DATE’.

Можно задавать текстовый диапазон. В результате выполнения запроса

выберутся заказы для стран на буквы от А до И включительно.

Предикат LIKE служит для поиска текстовой инфомации по шаблону. Заменим в предыдущем операторе предикат BETWEEN на LIKE, используя шаблоны, принятые в СУБД ACCESS.

В стандарте SQL есть только два символа для поиска по шаблону:

Примеры шаблонов в ACCESS

Если пользователи ничего не записали в какое-либо поле, то считается что оно хранит признак пустоты NULL. Для того, чтобы найти строки, в которых заданное поле хранит NULL, нужно написать условие

Для задания обратного условия нужно написать

Предложения GROUP BY и HAVING

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

Страна получателяКоличество
заказов
Сумм стоим
доставки
Макс стоим
доставки
Австрия396 637,24р.789,95р.
Аргентина16598,58р.217,86р
Бельгия201 341,89р.424,30р.
....
Франция804 276,20р.487,38р.
Швейцария181 368,53р.232,42р.
Швеция362 992,81р.328,74р.

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

Страна получателяКоличество
заказов
Сумм стоим
доставки
Макс стоим
доставки
Австрия396 637,24р.789,95р.
Бельгия201 341,89р.424,30р.
Бразилия834 880,19р.890,78р.
Германия11711 341,09р.1 007,64р.
Ирландия192 755,24р.603,54р.
США12213 771,29р.830,75р.
Франция804 276,20р.487,38р.

Общая структура однотабличного запроса имеет вид:

Страна получателяКоличество
заказов
Сумм стоим
доставки
Макс стоим
доставки
Германия534 148,10р.810,05р.
США515 778,58р.830,75р.
Бразилия352 513,43р.890,78р.
Австрия142 311,57р.789,95р.
Ирландия91 890,41р.603,54р.
Бельгия9793,16р.424,30р.

Предложени ORDER BY


Многотабличные запросы

На практике часто с помощью одного запроса данные собираются сразу из нескольких таблиц. Некоторые СУБД позволяют в одном запросе делать выборку из нескольких баз данных.

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

Таблица Города
НазваниеНаселениекодСтраны
Москва10 000 0001
Новгород1 300 0001
С.-Петербург5 300 0001
С.-Петербург250 0003
Турку180 0002
Хельсинки600 0002
Лондон370 000Таблица Страны
кодСтраныНазвание
1Россия
2Финляндия
3США
4Чили

В таблице Города специально не указана страна для Лондона, хотя по населению можно догадаться, что это не столица Англии. Стране Чили не соответсствует ни один город.

ГородНаселениеСтрана
Москва10 000 000Россия
Новгород1 300 000Россия
С.-Петербург5 300 000Россия
С.-Петербург250 000США
Турку180 000Финляндия
Хельсинки600 000Финляндия

В запросе для сокращения записи использованы псевдонимы имён таблиц. Связь между таблицами задаётся в предложении WHERE. В одной строке таблицы результатов объединяется строка с внешним ключом (город) со строкой с равным первичным ключом. Лондон не вошёл в таблицу результатов, так как у него не указан внешний ключ.

Если в этом запросе заменить INNER на LEFT (левое внешее соединение), то будут выбраны все строки, обеих таблиц, удовлетворяющие условию соединения, и из левой таблицы строки, которым нет соответствия в правой таблице. В нашем примере к таблице результатов добавится одна строка.

Запрос с LEFT JOIN

ГородНаселениеСтрана
Москва10 000 000Россия
Новгород1 300 000Россия
С.-Петербург5 300 000Россия
С.-Петербург250 000США
Турку180 000Финляндия
Хельсинки600 000Финляндия
Лондон370 000

Правое внешнее соединение (RIGHT JOIN) аналогично левому, только кроме строк, удовлетворяющих условию, выбираются все оставшиеся строки правой таблицы Страны.

Запрос c RIGHT JOIN

ГородНаселениеСтрана
Москва10 000 000Россия
Новгород1 300 000Россия
С.-Петербург5 300 000Россия
С.-Петербург250 000США
Турку180 000Финляндия
Хельсинки600 000Финляндия
Чили

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

Запрос, полученный с помощью конструктора СУБД ACCESS. Используется внутреннее соединение INNER JOIN.

Запрос, полученный «вручную». Связи между таблицами заданы в предложении WHERE.

Число связей между таблицами на единицу меньше числа таблиц в запросе. Для уменьшения верятности ошибки при составлении запроса следует проверять это условие.

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

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

Таблица Сотрудники
ФИОдолжностьотдел
Алесандрова О.Ю.экономист2
Андреев А.Б.Программист2
Алесеева К.А.Менеджер1
Борисова Г.П.Программист2
Котова Н.В.Секретарь2
Новикова А.Г.Начальник1
Смирнов П.С.Программист1
Петров К.Ю.Начальник2

Результат

ПрограммистНачальник_отдела
Андреев А.Б.Петров К.Ю.
Борисова Г.П.Петров К.Ю.
Смирнов П.С.Новикова А.Г.

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

В подзапросе может использоваться любая таблица.

Предикат EXISTS имеет синтаксис

и принимает значение ИСТИНА (TRUE), если подзапрос содержит хотя бы одну строку. В следующем запросе выбираются фамилии всех сотрудников, оформлявших заказы для клиента ANTON, при условии, что хотя бы один заказ для клиента ANTON был размещён в мае любого года.

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

Предикаты количественного сравнения ANY, SOME и ALL имеют синтаксис

ANY и SOME – синонимы.

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

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

Таблица детали
шифрдлинаширина
А2102
А387
Б122010
Б14147
В1732
В204012
Г197

шифрдлинаширина
А2102
Б122010
Б14147
В204012
Г197

Детали с шириной, равной 7, имеют длины 8, 14 и 9. В результате запроса должна быть выбрана любая деталь, длинее 14, но выбраны детали с длиной, большей наименьшей из списка (8, 9, 14). Причина в том, что в контексте данного запроса ANY переводится как какого-нибудь, хотя бы одного вместо ожидаемого значения каждого, всех. Чтобы выбрать детали с длиной больше любой из списка, нужно вместо ANY применить предикат ALL.

Предложение UNION

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

Клиенты
КодКлиента
ОбращатьсяК
Должность
Город
.

Сотрудники
КодСотрудника
Фамилия
Имя
Отчество
Должность
Город
.

Оператор INSERT

Оператор INSERT служит для добавления данных к таблице.
Синтаксис оператора INSERT:

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

Пример. Добавим столицу Чили ‘Сантьяго’ и российскую Тверь в таблицу Города, рассмотренную в разделе Многотабличные запросы:

Так как вводятся значения во все поля таблицы, то список полей можно опустить:

Оператор UPDATE

Оператор UPDATE служит для изменения (редактирования) данных в таблице.
Синтаксис оператора UPDATE:

Примеры.
1. Уточним население в Сантьяго в таблице Города:

2. Уверичим цену всех товаров на 10%

Оператор DELETE

Оператор DELETE служит для удаление строк из таблицы.
Синтаксис оператора DELETE:

Пример. Удалим из таблицы Города все города, расположенные в Финляндии:

Если условие WHERE не указано, то удалится ВСЯ ТАБЛИЦА (точнее, всё содержимое таблицы).

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *