
- •Тема 4: «Основы языка sql. Команды управления данными – ddl. Команды манипулирования данными – dml» Основы ddl
- •2 Основы dml. Базовый набор команд
- •3 Расширенные возможности языка dml
- •3.1 Функции
- •3.2 Операторы
- •3.3 Упорядочивание выборок
- •3.3.1 Изменение порядка строк выборки
- •3.3.3 Выборки из выборок
Тема 4: «Основы языка sql. Команды управления данными – ddl. Команды манипулирования данными – dml» Основы ddl
Следующие команды создают или удаляют базы данных, таблицы или изменяют их структуру:
CREATE DATABASE создает новую базу данных;
DROP DATABASE удаляет базу данных и любые таблицы, которые она содержит;
CREATE TABLE создает новую таблицу; p
DROP TABLE удаляет таблицу и данные, которые она содержит;
ALTER TABLE изменяет структуру существующей таблицы;
CREATE INDEX добавляет индекс к таблице;
DROP INDEX удаляет индекс из таблицы.
Чтобы создать новую базу данных, используйте команду CREATE DATABASE. Следующая команда создает базу данных mydb:
CREATE DATABASE mydb;
После того, как база данных создана, можно создавать новые таблицы. Для этого используют команду CREATE TABLE. Мы ее рассмотрим чуть позже.
Если вы пробуете создать базу данных, а она уже существует, то произойдет ошибка. Чтобы этого не происходило, добавьте к команде IF NOT EXISTS:
CREATE DATABASE IF NOT EXISTS mydb;
В этом случае база данных будет создана, если нет одноименной. В противном случае, команда ничего не делает. Это может быть полезно в приложениях, которые должны гарантировать, что данная база существует.
Создавая базу данных вы не гарантированы, что сможет сразу с ней работать. Чтобы сделать новую базу данных активной, дайте команду USE:
USE mydb;
Чтобы увидеть список доступных баз данных, используйте команду SHOW DATABASES. Эта команда не будет показывать имена баз данных, к которым вы не имеете доступа. Чтобы увидеть список таблиц базы данных, используйте SHOW TABLES FROM db_name. Можно использовать команду SHOW TABLES, если db_name - имя текущей базы данных.
Если база данных вам больше не нужна, то ее можно удалить командой DROP DATABASE
DROP DATABASE mydb;
Не нужно уничтожать таблицы базы данных перед ее удалением. DROP DATABASE не требует, чтобы база данных была пустой. Эта команда будет выполнена, даже если база данных содержит таблицы. DROP DATABASE удаляет таблицы в процессе удаления базы данных.
DROP DATABASE - радикальная команда. Вы должны использовать ее продуманно. Нет никакой команды, чтобы "отменить" DROP DATABASE. Если вы удаляете базу данных по ошибке, то восстановить ее вы можете только из своих резервных копий.
Подробнее о данных командах – в электронном курсе.
2 Основы dml. Базовый набор команд
К. Дейта трактует минимальный набор операций для построения языков манипуляции баз данных, как часть реляционной модели.
То, что язык манипуляции данными — это часть модели, ясно из следующих соображений. С одной стороны язык должен позволять извлекать, обрабатывать и возвращать данные в базу. С другой стороны язык должен учитывать структуру базы данных. Например, язык должен отражать тот факт, что данные о взаимосвязанных сущностях хранят в отдельных таблицах, т. е. для ответа на некоторые вопросы необходимо "соединять" данные разных таблиц.
Как определить минимальный набор операций для построения языка? Для ответа на этот вопрос обратим внимание на тот факт, что в качестве базовой структуры данных реляционной модели Эдгар Кодд выбрал отношение. Этот выбор был не случаен:
графически отношение можно представить таблицей, а именно так мы и привыкли представлять данные;
манипуляции данными отношений описаны математически, а значит предсказуемы.
Наша привычка работать с таблицами позволяет легко представить все возможные манипуляции их данными, а значит определить минимально необходимое число реляционных операций. Для разработчика приложений баз данных — это конечное число базовых команд языка SQL (Structured Query Language — структурированный язык запросов).
Сейчас вы познакомитесь с базовыми командами языка SQL. В теории баз данных это не единственный язык. Аналогичный язык разрабатывала компания IBM. Благодаря этим разработкам сейчас существуют средства визуального построения SQL команд.
Язык SQL — это программная реализация реляционной алгебры и реляционного исчисления, к авторам которых относят Кодда, Лакруа и Пиро. Достаточно подробно этот вопрос рассмотрен, например, в книге Дж. Ульмана "Основы систем баз данных". Она вышла в издательстве "Финансы и статистика" в 1983 г.
Реляционные операции делят на две группы: унарные и бинарные. Первые из них описывают манипуляции с одним отношением, а вторые — не менее, чем с двумя. К унарным относят операцию проекция и выборка. С их описания мы и начнем
Как мы уже отмечали SQL — это язык, который был математически описан (предсказан).
В качестве подтверждения данного высказывания все операции реляционного исчисления будем предварять их математическими формулировками.
Проекция может быть записана следующим образом:
Ее результат — это множество уникальных кортежей t ( k) отношения R с атрибутами u [ i 1], u[ i 2], ..., u [i k].
Другими словами, операция проекция позволяет отобразить вертикальное подмножество данных. То есть ту часть данных, например, отношения Lease(NLease, NTn, NOn, AdR, LDate):
1 |
2 |
1 |
Р-Корсакова 32/15 |
01.01.1997 |
2 |
3 |
2 |
Кирова 118/2 |
12.08.1998 |
3 |
1 |
3 |
Металлургов 56 |
14.05.1999 |
Рисунок 1 - Данные таблицы Lease
которая показывает, кто у кого арендует недвижимость (на рис.1 затенены).
Конечно, данный вид результата не столь очевиден, чтобы понять, что Иванов арендует у Ивашко, Петров у Иванова, а Сидоров у Петрова. Но придется потерпеть. Сейчас наша цель — познакомиться с языком манипуляции данными.
Примечание
Как видим результат исполнения SQL команды — множество записей (картежей). Поэтому Э. Кодд назвал теоретическую модель SQL как "реляционное исчисление с переменными-кортежами".
Выборка { t/R(t) Λ (t [ i] ϑ w)} это множество кортежей t, удовлетворяющих предикату t [ i] ϑ w.
Здесь ϑ — одна из бинарных операций, описанных ниже.
Оператор |
Описание |
= |
Равно |
<> |
Не равно |
> |
Больше |
< |
Меньше |
>= |
Больше или равно |
<= |
Меньше или равно |
Другими словами, операция выборка позволяет отобразить горизонтальное подмножество данных отношения (на рис.2 затенено).
Owner(NOn, Ow, AdO) |
||
1 |
Иванов |
Мира 36 |
2 |
Петров |
Правды 2/36 |
3 |
Ивашко |
Кирова 18 |
Рисунок 2 - Данные таблицы Owner
На языке SQL операция выборка в данном случае записывается так:p
SELECT Ow
FROM Owner
WHERE AdO = 'Мира 36'
Рассмотренные нами операции унарны, то есть применимы к одному отношению.
Далее мы рассмотрим операции, которые применимы к двум таблицам.
Пересечение отношений R и S
{ t/R ( t) Λ – ( R ( t) – S ( t))}
включает кортежи, которые принадлежат как R, так и S.p
Другими словами, пересечение — это одинаковые записи идентичных по структуре таблиц. Например, результат пересечения отношений (см. рис.3)
Tenant(NTn, Tn, AdT) |
|
Owner(NOn, Ow, AdO) |
||||
1 |
Иванов |
Мира 36 |
|
1 |
Иванов |
Мира 36 |
2 |
Петров |
Правды 2/36 |
|
2 |
Петров |
Правды 2/36 |
3 |
Сидоров |
Курская 18 |
|
3 |
Ивашко |
Кирова 18 |
Рисунок 3 - Данные отношений Tenant и Owner
представляет собой список владельцев, которые арендуют недвижимость, как показано на рис.4:
Иванов |
Мира 36 |
Петров |
Правды 2/36 |
Рисунок 4 - Результат пересечения таблицы Tenant и Owner
Разность отношений R и S, записываемая как
{ t/R ( t) Λ – S ( t)}
представляет собой множество кортежей t, которые принадлежат R, но не принадлежат S.
Например, по данным отношений Tenant и Owner можно определить, кто из владельцев не арендует недвижимость. Это — Сидоров.
Следующая SQL команда реализует операцию разность:
SELECT Tn, AdT
FROM Tenant
WHERE Tn NOT IN (SELECT Ow FROM Owner)
Объединение отношений R и S, выражаемое в исчислении как
{ t/R ( t) V S ( t)}
представляет собой множество кортежей t, которые принадлежат R и кортежи отношения S, которых нет в R.
Например, по данным отношений Tenant и Owner можно составить список клиентов риелтерской конторы, как показано на рис.5:
Иванов |
Мира 36 |
Ивашко |
Кирова 18 |
Петров |
Правды 2/36 |
Сидоров |
Курская 18 |
Рисунок 5 - Список клиентов риелтерской конторы
Декартово произведение отношений R и S, которые соответственно имеют арности r и s представляет собой совокупность кортежей длиной r+s таких, что
{t(r+s)/(∃u(r))(∃v(s))(R(u)LS(ν)Lt[1]=u[i1]Λ...Λt[r+s]=ν[ s])}
Примечание
Под арностью понимают количество атрибутов отношения.
В реляционной модели для манипуляции с отношениями используют различные виды соединений, которые являются подмножеством декартова произведения.
Операции соединения подразделяются на два вида — внутренние и внешние.
Так внутренние соединение отношений R и S арности r и s, соответственно
{t( r+s)/R(t)ΛS (t))}
представляет собой множество кортежей t длинны r+s, образуемых из кортежей отношений R и S, которые имеют одинаковые значения общих атрибутов.
Например, по данным отношений, приведенных на рис.6.
Rent(Type, Rn) |
|
|
Realty(AdR, Type) |
|
2-к. квартира |
90 |
|
Р-Корсакова 32/15 |
2-к. квартира |
1-к. квартира |
60 |
|
Металлургов 56 |
дом |
дом |
1800 |
|
Кирова 118/2 |
1-к. квартира |
Рисунок 6 - Данные отношений Realty и Rent
следующей SQL-командой стандарта ANSI-89
SELECT DISTINCT Rent.Rn, Realty.AdR
FROM Rent, Realty
WHERE Realty.Typ = Rent.Typ
можно просмотреть стоимость аренды недвижимости.
В стандарте ANSI-92 SQL-команда операции соединения содержат зарезервированное слово JOIN.
SELECT DISTINCT Rent.Rn, Realty.AdR
FROM Rent INNER JOIN Realty
ON Realty.Typ = Rent.Typ
90 |
Р-Корсакова 32/15 |
60 |
Металлургов 56 |
1800 |
Кирова 118/2 |
Рисунок 7 – Результат внутреннего соединения Rent и Realty