Что такое ddl в sql

Введение в базы данных

Алексей Федоров, Наталия Елманова

В предыдущих двух статьях данного цикла, опубликованных в № 6 и 7 нашего журнала, мы рассмотрели различные механизмы доступа к данным, включая ADO, BDE и их альтернативы. Теперь мы знаем, как выбрать технологию доступа к данным для той или иной пары «СУБД — средство разработки».

Располагая технологией доступа к данным, можно наконец подумать и о том, каким образом следует манипулировать самими данными и метаданными. Способы манипуляции могут быть специфичными для данной СУБД (например, использование объектов клиентской части этой СУБД для доступа к объектам баз данных) или для данного механизма доступа к данным. Тем не менее существует более или менее универсальный способ манипуляции данными, поддерживаемый почти всеми серверными реляционными СУБД и большинством универсальных механизмов доступа к данным (в том числе при использовании их совместно с настольными СУБД). Этот способ — применение языка SQL (Structured Query Language — язык структурированных запросов). Ниже мы рассмотрим назначение и особенности этого языка, а также изучим, как с его помощью извлекать и суммировать данные, добавлять, удалять и модифицировать записи, защищать данные от несанкционированного доступа, создавать базы данных. Для более подробного изучения SQL мы можем порекомендовать книги Мартина Грабера «Введение в SQL» (М., Лори, 1996) и «SQL. Справочное руководство» (М., Лори, 1997).

Введение

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

Язык SQL был создан в начале 70-х годов в результате исследовательского проекта IBM, целью которого было создание языка манипуляции реляционными данными. Первоначально он назывался SEQUEL (Structured English Query Language), затем — SEQUEL/2, а затем — просто SQL. Официальный стандарт SQL был опубликован ANSI (American National Standards Institute — Национальный институт стандартизации, США) в 1986 году (это наиболее часто используемая ныне реализация SQL). Данный стандарт был расширен в 1989 и 1992 годах, поэтому последний стандарт SQL носит название SQL92. В настоящее время ведется работа над стандартом SQL3, содержащим некоторые объектно-ориентированные расширения.

Существует три уровня соответствия стандарту ANSI — начальный, промежуточный и полный. Многие производители серверных СУБД, такие как IBM, Informix, Microsoft, Oracle и Sybase, применяют собственные реализации SQL, основанные на стандарте ANSI (отвечающие как минимум начальному уровню соответствия стандарту) и содержащие некоторые расширения, специфические для данной СУБД.

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

Как работает SQL

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

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

Обратите внимание на то, что SQL сам по себе не является ни СУБД, ни отдельным продуктом. Это язык, применяемый для взаимодействия с СУБД и являющийся в определенном смысле ее неотъемлемой частью.

Операторы SQL

SQL содержит примерно 40 операторов для выполнения различных действий внутри СУБД. Ниже приводится краткое описание категорий этих операторов.

Data Definition Language (DDL)

Data Definition Language содержит операторы, позволяющие создавать, изменять и уничтожать базы данных и объекты внутри них (таблицы, представления и др.). Эти операторы перечислены в табл. 1.

Применяется для добавления новой таблицы к базе данных

Применяется для удаления таблицы из базы данных

Применяется для изменения структуры имеющейся таблицы

Применяется для добавления нового представления к базе данных

Применяется для удаления представления из базы данных

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

Применяется для удаления существующего индекса

Применяется для создания новой схемы в базе данных

Применяется для удаления схемы из базы данных

Применяется для создания нового домена

Применяется для переопределения домена

Применяется для удаления домена из базы данных

Data Manipulation Language (DML)

Data Manipulation Language содержит операторы, позволяющие выбирать, добавлять, удалять и модифицировать данные. Обратите внимание на то, что эти операторы не обязаны завершать транзакцию, внутри которой они вызваны. Операторы DML представлены в табл. 2.

Применяется для выбора данных

Применяется для добавления строк к таблице

Применяется для удаления строк из таблицы

Применяется для изменения данных

Что такое ddl в sql. Смотреть фото Что такое ddl в sql. Смотреть картинку Что такое ddl в sql. Картинка про Что такое ddl в sql. Фото Что такое ddl в sql

Иногда оператор SELECT относят к отдельной категории, называемой Data Query Language (DQL).

Transaction Control Language (TCL)

Операторы Transaction Control Language применяются для управления изменениями, выполненными группой операторов DML. Операторы TCL представлены в табл. 3.

Применяется для завершения транзакции и сохранения изменений в базе данных

Применяется для отката транзакции и отмены изменений в базе данных

Применяется для установки параметров доступа к данным в текущей транзакции

Data Control Language (DCL)

Операторы Data Control Language, иногда называемые операторами Access Control Language, применяются для осуществления административных функций, присваивающих или отменяющих право (привилегию) использовать базу данных, таблицы в базе данных, а также выполнять те или иные операторы SQL. Операторы DCL представлены в табл. 4.

Применяется для присвоения привилегии

Применяется для отмены привилегии

Что такое ddl в sql. Смотреть фото Что такое ddl в sql. Смотреть картинку Что такое ddl в sql. Картинка про Что такое ddl в sql. Фото Что такое ddl в sql

Cursor Control Language (CCL)

Операторы Cursor Control Language используются для определения курсора, подготовки SQL-предложений для выполнения, а также для некоторых других операторов. Операторы CCL представлены в табл. 5.

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

Применяется для описания плана запроса. Этот оператор представляет собой расширение SQL для Microsoft SQL Server 7.0. Он не обязан выполняться в других СУБД. Например, в случае Oracle следует использовать оператор EXPLAIN PLAN

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

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

Применяется для закрытия курсора

Применяется для подготовки оператора SQL для выполнения

Применяется для выполнения оператора SQL

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

Что такое ddl в sql. Смотреть фото Что такое ddl в sql. Смотреть картинку Что такое ddl в sql. Картинка про Что такое ddl в sql. Фото Что такое ddl в sql

Все операторы SQL имеют вид, показанный на рис. 2.

Каждый оператор SQL начинается с глагола, представляющего собой ключевое слово, определяющее, что именно делает этот оператор (SELECT, INSERT, DELETE. ). В операторе содержатся также предложения, содержащие сведения о том, над какими данными производятся операции. Каждое предложение начинается с ключевого слова, такого как FROM, WHERE и др. Структура предложения зависит от его типа — ряд предложений содержит имена таблиц или полей, некоторые могут содержать дополнительные ключевые слова, константы или выражения.

Ключевые слова ANSI/ISO SQL92

Некоторые ключевые слова, определенные в стандарте ANSI SQL, не могут быть использованы в качестве имен объектов баз данных (таблиц, полей, имен пользователей). Эти ключевые слова приведены в табл. 6.

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

С помощью чего можно выполнить SQL-операторы

Все современные серверные СУБД (а также многие популярные настольные СУБД) содержат в своем составе утилиты, позволяющие выполнить SQL-предложение и ознакомиться с его результатом. В частности, клиентская часть Oracle содержит в своем составе утилиту SQL Plus, а Microsoft SQL Server — утилиту SQL Query Analyzer. Именно этой утилитой мы воспользуемся для демонстрации возможностей SQL, а в качестве базы данных, над которой мы будем «экспериментировать», возьмем базу данных NorthWind, входящую в комплект поставки Microsoft SQL Server 7.0. В принципе, можно использовать другую базу данных и любую другую утилиту, способную выполнять в этой базе данных SQL-предложения и отображать результаты (или даже написать свою, используя какое-либо средство разработки — Visual Basic, Delphi, C++Builder и др.). Однако на всякий случай рекомендуется сделать резервную копию этой базы данных.

Источник

Что такое 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 не будет опубликован. Обязательные поля помечены *