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.
Примеры вложенных запросов для базы данных «Перевозки»: