Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
базы данных.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
213.82 Кб
Скачать

12 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 принимает значение "Истина"

В начало

13 Комбинированные запросы.

Операции 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 Поездки)

В начало