SQL. ОПЕРАТОРЫ BETWEEN, IN, LIKE, IS NULL

Предикат Between A and B —принимает значения между A и B. Предикат истинен, когда сравниваемое значение попадает в заданный диапазон, включая границы диапазона. Одновременно в стандарте задан и противоположный предикат Not Between A and B,который истинен тогда, когда сравниваемое значение не попадает в заданный интервал, включая его границы.

 

Предикат вхождения в множество IN (множество) истинен тогда, когда сравниваемое значение входит в множество заданных значений. При этом множество значений может быть задано простым перечислением или встроенным подзапросом. Одновременно существует противоположный предикат NOT IN (множество), который истинен тогда, когда сравниваемое значение не входит в заданное множество.
Предикаты сравнения с образцом LIKE и NOT LIKE. Предикат LIKE требует задания шаблона, с которым сравнивается заданное значение, предикат истинен, если сравниваемое значение соответствует шаблону, и ложен в противном случае. Предикат NOT LIKE имеет противоположный смысл.

По стандарту в шаблон могут быть включены специальные символы:

символ подчеркивания ( _ ) — для обозначения любого одиночного символа;
символ процента ( % ) — для обозначения любой произвольной последовательности символов;

 

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

<имя атрибута>IS NULL и <имя атрибута> IS NOT NULL.

Если в данном кортеже (в данной строке) указанный атрибут имеет неопределенное значение, то предикат IS NULL принимает значение "Истина" ( TRUE ), а предикат IS NOT NULL — "Ложь" ( FALSE ), в противном случае предикат IS NULL принимает значение "Ложь", а предикат IS NOT NULL принимает значение "Истина"

 

В начало

 


 

КОМБИНИРОВАННЫЕ ЗАПРОСЫ.

Операции UNION, EXCEPT, INTERSECT применяются для таблиц, совместимых для объединения. Совместимыми называются таблицы ,содержащие одинаковое число столбцов , одинаковый порядок следования столбцов и совместимый тип.

Объединением двух таблиц R и S является таблица, содержащая все строки, которые имеются в первой таблице R, во второй таблице S или в обеих таблицах сразу.

SELECT R.a1, R.a2

FROM R

UNION

SELECT S.b2, S.b1

FROM S

Например, необходимо получить сводную о номерах машин, их пробеге и километраже поездок:

SELECT Номер, Километраж AS Пробег/Километраж

FROM Транспорт

UNION

SELECT Номер_авто, Пробег AS Пробег/Километраж

FROM Поездки

Пересечением двух таблиц R и S является таблица, содержащая все строки, присутствующие в обеих исходных таблицах одновременно.

(SELECT R.a1, R.a2

FROM R)

INTERSECT

(SELECT S.b2, S.b1

FROM S)

Или

SELECT R.a1, R.a2

FROM R,S

WHERE R.a1=S.b1 AND R.a2=S.b2

или

 

SELECT R.a1, R.a2

FROM R

WHERE R.a1 IN

(SELECT S.b1 FROM S

WHERE S.b1=R.a1) AND R.a2 IN

( SELECT S.b2

FROM S

WHERE S.b2=R.a2)

Например, отыскать номера машин, которые были в поездках

(SELECT Номер

FROM Транспорт)

INTERSECT

(SELECT Номер_авто

FROM Поездки)

Разностью двух таблиц R и S является таблица, содержащая все строки, которые присутствуют в таблице R, но отсутствуют в таблице S.

SELECT R.a1, R.a2

FROM R

WHERE NOT EXISTS

(SELECT S.b1,S.b2

FROM S

WHERE S.b1=R.a2 AND S.b2=R.a1)

Или

(SELECT R.a1, R.a2

FROM R)

EXCEPT

(SELECT S.b1,S.b2

FROM S)

Например, отыскать номера машин, которые были в поездках

(SELECT Номер

FROM Транспорт)

EXCEPT

(SELECT Номер_авто

FROM Поездки)

 

В начало

 


 

ВЛОЖЕННЫЕ ЗАПРОСЫ.

С помощью SQL можно вкладывать запросы внутрь друг друга. Обычно внутренний запрос генерирует значение, которое проверяется в предикате внешнего запроса (в предложении WHERE или HAVING ), определяющего, верно оно или нет. Совместно с подзапросом можно использовать предикат EXISTS, который возвращает истину, если вывод подзапроса не пуст.

В сочетании с другими возможностями оператора выбора, такими как группировка, подзапрос представляет собой мощное средство для достижения нужного-результата. В части FROM оператора SELECT допустимо применять синонимы к именам таблицы, если при формировании запроса нам требуется более чем один экземпляр некоторого отношения. Синонимы задаются с использованием ключевого слова AS, которое может быть вообще опущено. Поэтому часть FROM может выглядеть следующим образом:

FROM R1 AS A, R1 AS B

или

FROM R1 A, R1 B;

оба выражения эквивалентны и рассматриваются как применения оператора SELECT к двум экземплярам таблицыR1.

Примеры вложенных запросов для базы данных «Перевозки»: