Ключевые слова ANY,ALL,EXISTS

Именно возможность вложение инструкций SQL друг в друга является причиной, по которой SQL получил свое название – Structured Query Language (структурированный язык запросов). Подзапросы могут иметь один из трех типов в зависимости от предложения WHERE внешнего запроса:

· подзапросы, которые не возвращают ни одного или возвращают несколько элементов и начинаются со слова IN или оператора сравнения и содержат ключевые слова ANY или ALL;

· подзапросы, которые возвращают единственное значение и начинаются с простого оператора сравнения;

· подзапросы, которые представляют собой проверку (тест) на существование и начинаются с ключевого слова EXISTS.

Рассмотрим примеры.

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

SELECT Фамилия FROM Клиент

WHERE Код_клиента IN

(SELECT Код_клиента FROM Проживает

WHERE MONTH(П.Дата_прибытия) = 2

AND YEAR(П.Дата_прибытия) = 2006)

Рассмотрим, для чего нужны ключевые слова ANY и ALL. Если воспользоваться оператором сравнения >, то >ALL означает «больше, чем каждое значение». ANY означает «больше любого значения». Например, определим список клиентов, прибывших в гостиницу после Алексеева и Поповича.

SELECT К.Фамилия

FROM Проживает П, Клиент К

WHERE П.Код_клиента = К.Код_клиента

AND П.Дата_прибытия > ALL

(SELECT П1.Дата_прибытия

FROM Проживает П1, Клиент К1

WHERE П1.Код_клиента = К1.Код_клиента

AND К1.Фамилия IN ('Алексеев', 'Попович'))

Если внутренний подзапрос, стоящий после оператора сравнения и слова ALL, возвращает в качестве одного из значений NULL, то считается, что в целом запрос завершился неудачно.

Оператор ANY полностью эквивалентен оператору IN. Однако оператор <> ANY существенно отличается от оператора NOT IN. Например, следующие два запроса вернут разные результаты:

1. SELECT Код_клиента

FROM Клиент

WHERE Код_клиента NOT IN

(SELECT Код_клиента FROM Проживает

WHERE Дата_прибытия > '02/02/01')

Результат выборки:

Код_клиента

-----------

(3 row(s) affected)

2. SELECT Код_клиента

FROM Клиент

WHERE Код_клиента <> ANY

(SELECT Код_клиента FROM Проживает

WHERE Дата_прибытия > '02/02/01')

Второй запрос выводит коды всех клиентов. Это происходит потому, что оператор <>ANY трактуется как <>a ИЛИ <>b ИЛИ <>c, где a, b, c элементы списка, получаемые с помощью подзапроса.

Когда запрос начинается с ключевого слова EXISTS, он действует как «тест на существование». Другими словами, ключевое слово EXISTS в предложении WHERE выполняет проверку на существование (или отсутствие) данных, которые удовлетворяют критериям соответствующего подзапроса. Такие подзапросы имеют общую форму:

Начало инструкции SELECT, INSERT, UPDATE, DELETE или подзапроса

WHERE [NOT] EXISTS (подзапрос)

[Окончание инструкции SELECT, INSERT, UPDATE, DELETE или подзапроса]

Обеспечение целостности при модификации данных

Ссылочная целостность обеспечивает поддержку непротиворечивого состояния БД в процессе модификации данных при выполнении операций добавления или удаления.

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

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

Семантическая поддержка может быть обеспечена двумя путями:

· декларативный, выполняемый средствами языка SQL;

· процедурный, выполняемый посредством триггеров и хранимых процедур.

Декларативный путь связан с наличием механизмов в рамках СУБД, обеспечивающих проверку и выполнение ряда декларативно заданных правил-ограничений, называемых чаще всего «бизнес-правилами» (Business Rules) или декларативными ограничениями целостности.

Ограничения целостности SQL

Первичный ключ таблицы
Если в первичный ключ входит более одного столбца, значения в пределах одного столбца могут дублироваться, но любая совокупность значений всех столбцов первичного ключа при этом должна быть уникальна.
Таблица может иметь только один первичный ключ, причем никакой столбец, входящий в первичный ключ, не может хранить значение NULL
1. ID_Дисциплина INTEGER NOT NULL PRIMARY KEY
2. PRIMARY KEY (ID_Дисциплина, ID_Студент)
Внешний ключ таблицы
Внешний ключ может ссылаться либо на столбец (или столбцы) с ограничением целостности PRIMARY KEY, либо на столбец (столбцы) с ограничением целостности UNIQUE. В зависимую таблицу нельзя вставить строку, если внешний ключ не имеет соответствующего значения в главной таблице, а из главной таблицы нельзя удалить строку, если значение первичного ключа используется в зависимой таблице. На сайте redclub.cz самые элитные проститутки москвы дешево.
Синтаксис:
FOREIGN KEY (<список столбцов внешнего ключа>)
REFERENCES <имя родительской таблицы>
[ [<список столбцов родительской таблицы> ]
[ ON DELETE {NO ACTION | CASCADE | SET DEFAULT | SET NULL}]
[ ON UPDATE {NO ACTION | CASCADE | SET DEFAAULT | SET NULL}]
Параметры ON DELETE, ON UPDATE задают способы изменения подчиненных записей дочерней таблицы при удалении или изменении поля связи в записи родительской таблицы.
NO ACTION – запрещает удаление/изменение родительской записи при наличии подчиненных записей в дочерней таблице;
CASCADE – при удалении/изменении записи родительской происходит удаление/изменение на то же значение всех подчиненных записей в дочерне таблице;
SET DEFAULT – в поле внешнего ключа записей дочерней таблицы заносится значение этого поля по умолчанию, указанное при определении поля (параметр DEFAULT);
SET NULL – в поле внешнего ключа записей дочерней таблицы заносится значение NULL.
Пример:
ALTER TABLE Сводная_ведомость
ADD FOREIGN KEY (ID_План)
REFERENCES Учебный_план
ON UPDATE CASCADE
Определение уникального столбца
Ограничение целостности UNIQUE предназначено для того, чтобы обеспечить уникальность значений в столбце (или нескольких столбцах). Допускает существование значения NULL. При этом к значению NULL также предъявляется требование уникальности. Используется, когда столбец не входит в состав первичного ключа, но его значение всегда должно быть уникально.
CREATE TABLE Дисциплины
(ID_Дисциплина INTEGER NOT NULL PRIMARY KEY,
Наименование VARCHAR(20) NOT NULL UNIQUE)
Уникальность может быть определена и на уровне таблицы:
CREATE TABLE Дисциплины
(ID_Дисциплина INTEGER NOT NULL,
Наименование VARCHAR(20) NOT NULL,
PRIMARY KEY (ID_Дисциплина),
UNIQUE (Наименование))
Определение проверочных ограничений
Ограничение целостности CHEKR задает диапазон возможных значений для столбца. Преимущество – возможность определения для одного столбца множества правил контроля значений. В основе лежит проверка логического выражения, которое возвращает значение TRUE либо FALSE. TRUE – ограничение выполняется, FALSE – операции изменения или вставки данных отменяются.
((Семестр >=1) OR (Семестр <=10))
На уровне столбца:
Семестр INTEGER NOT NULL CHECK ((Семестр >=1) OR (Семестр <=10))
Определение значения по умолчанию
Определение для столбца значения по умолчанию гарантирует автоматическую подстановку этого значения, если при вставке новых строк значение для столбца не указано.
Основные понятия и компоненты
Инструкции и имена
Инструкция SQL начинается с команды – ключевого слова, описывающего действие, выполняемое инструкцией. Типичными являются команды CREATE, INSERT, SELECT, DELETE. Следом за командой указывается одно или несколько предложений. Предложение описывает данные, с которыми должна работать инструкция, или уточняет действие, выполняемое инструкцией. Предложения в инструкции делятся на обязательные и необязательные. Каждое предложение начинается с ключевого слова, например, WHERE, FROM, INTO. У каждого объекта в базе данных есть уникальное имя. Имена используются в инструкциях SQL и указывают, над каким объектом базы данных инструкция должна выполнить действие. В рамках одной таблицы не может быть определено двух столбцов с одинаковыми именами, но в разных таблицах это возможно.
Типы данных
Целые числа (INT, SMALLINT), десятичные числа (NUMERIC, DECIMAL), числа с плавающей запятой (REAL, FLOAT), строки символов постоянной длины (CHAR), строки символов переменной длины (VARCHAR), дата и время (DATETIME,SMALLDATETIME), булевы величины (BIT).
Встроенные функции
Основной особенностью этих функций является возможность их использования при построении выражений.
Встроенные функции, доступные при работе с SQL, можно условно разделить на следующие группы: математические функции; строковые функции; функции для работы с величинами типа дата-время; функции конфигурирования; системные функции; функции системы безопасности; функции управления метаданными; статистические функции.
ABS(число), ROUND(число, точность), POWER(число, степень), SQRT(число), SIN(угол), COS(угол) <в радианах>, EXP(число), LOG(число), LOWER(строка), UPPER(строка),STR(число), GETDATE().
Значения NULL
SQL поддерживает обработку не определенных (не заданных) данных с помощью использования отсутствующего значения (NULL). Это значение показывает, что в конкретной строке конкретный элемент данных отсутствует. При этом NULL не является значением данных и в связи с этим не имеет определенного типа.



Наши рекомендации