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

Выборка с использованием параметра where

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

  • операторы сравнения: =, < , > , <= , >= , <>;

  • булевы операторы: AND, OR, NOT;

  • оператор проверки на вхождение в множество: IN;

  • оператор проверки на вхождение в диапазон: BETWEEN;

  • оператор проверки на существование: EXISTS;

  • оператор проверки удовлетворению шаблону (только для символьных полей): LIKE;

  • операторы сравнения с NULL: IS NULL, IS NOT NULL;

  • агрегатные функции: COUNT, SUM, AVG, MAX, MIN;

  • константы и выражения;

  • подзапросы.

Следует быть осторожными при использовании булевых операторов, поскольку существует приоритет AND над OR (сначала выполняются все операции AND и только после этого операции OR). Для получения желаемого результата WHERE условия должны быть введены в правильном порядке, который можно организовать введением скобок.

При обработке условия числа сравниваются алгебраически – отрицательные числа считаются меньшими, чем положительные, независимо от их абсолютной величины. Строки символов сравниваются в соответствии с их представлением в коде, используемом в конкретной СУБД, например, в коде ASCII. Если сравниваются две строки символов, имеющих разные длины, более короткая строка дополняется справа пробелами для того, чтобы они имели одинаковую длину перед осуществлением сравнения.

Использование операторов сравнения

В параметре WHERE оператора SELECT для отбора нужных строк таблицы можно использовать операторы сравнения = (равно), <> (не равно), < (меньше), <= (меньше или равно), > (больше), > = (больше или равно), которые могут предваряться оператором NOT, создавая, например, отношения «не меньше» и «не больше».

-- получения списка менеджеров, процент комиссионных которых

-- не превышает 50

SELECT Name FROM Managers WHERE Procent <=50;

-- то же самое с применением оператора NOT

SELECT Name FROM Managers WHERE NOT Procent >50;

Возможность использования нескольких условий, соединенных логическими операторами AND, OR, AND NOT и OR NOT, позволяет осуществить более детальный отбор строк. Например, для отбора имен менеджеров, процент комиссионных которых находится в диапазоне между 20 и 40, можно выполнить следующий запрос:

SELECT Name FROM Managers

WHERE (Procent >= 20) AND (Procent <= 40);

Использование BETWEEN

С помощью оператора BETWEEN можно отобрать строки, в которых значение какого-либо столбца находятся в заданном диапазоне. Например, приведенных ранее пример отбора имен менеджеров, процент комиссионных которых находится в диапазоне между 20 и 40, можно переписать следующим образом с применением оператора BETWEEN:

SELECT Name FROM MANAGERS WHERE Procent BETWEEN 20 AND 40;

При помощи сочетания операторов NOT и BETWEEN можно отобрать строки, в которых значение какого-либо столбца не находится в заданном диапазоне. Например:

SELECT Name FROM MANAGERS WHERE Procent NOT BETWEEN 20 AND 40;

Использование оператора BETWEEN возможно не только по отношению к полям числового типа, он применим также к полям строкового типа и датам. Например:

-- отбор информации о сделках продажи,

-- прошедших за последнюю неделю

SELECT * FROM Outgoing

WHERE Out_Date BETWEEN sysdate-7 AND sysdate;

Использование IN

Оператор IN используется для проверки вхождения значения какого-либо столбца в множество. Например:

SELECT Name FROM Managers

WHERE Procent IN (5, 10, 15);

Рассмотренная форма IN является в действительности просто краткой записью последовательности отдельных сравнений, соединенных операторами OR. Предыдущее предложение эквивалентно такому:

SELECT Name FROM Managers

WHERE (Procent=5) OR (Procent=10) OR (Procent=15);

В сочетании с оператором IN можно также использовать NOT для отбора строк, в которых значение какого-либо столбца наоборот не входит в множество. Например:

SELECT Name FROM Managers

WHERE Procent NOT IN (5, 10, 15);

Использование LIKE

Оператор LIKE используется для отбора строк, в которых значение какого-либо удовлетворяет определенному шаблону. Данный оператор применяется только к символьным полям. Обычная форма имя_столбца LIKE текстовая_константа для столбца символьного типа позволяет отыскать все значения указанного столбца, соответствующие шаблону, заданному текстовой_константой. Символы этой константы интерпретируются следующим образом:

  • символ _ (подчеркивание) – заменяет любой одиночный символ;

  • символ % (процент) – заменяет любую последовательность из любого количества символов, в том числе нулевого;

  • все другие символы означают просто сами себя.

Примеры:

-- отбор информации о менеджерах,

-- имена которых начинаются с заглавной буквы «И»

-- и заканчивающихся на «ов»

SELECT * FROM Managers

WHERE Name LIKE ‘И%ов’;

-- отбор информации о менеджерах, имена которых

-- начинаются с любой буквы, после которой идут

-- буквы «ва» и далее любое количество любых букв

SELECT * FROM Managers

WHERE Name LIKE ‘_ва%’;

Оператор LIKE также можно сочетать с NOT для получения строк, значения определенных столбцов которых не удовлетворяют указанному шаблону.

SELECT * FROM Managers

Сравнение с неопределенным значением NULL

Для отбора строк таблицы, значения атрибутов которых необходимо сравнивать на равенство или неравенство с NULL-значением, используют операторы IS NULL и IS NOT NULL соответственно. Использование операторов «=» или «<>» не вызовет ошибки, но и не позволит достичь необходимого результата. Например:

-- отбор менеджеров, у которых не указан размер комиссионных

SELECT Name FROM Managers WHERE Procent IS NULL;

В СУБД ORACLE есть некоторые отличия реализации NULL-значений по сравнению со стандартом ANSI SQL. Согласно ANSI все типы данных должны поддерживать неопределенные или NULL-значения. СУБД ORACLE в полной мере поддерживает это правило для всех типов, за исключением символьных. Для любых символьных данных пустая строка интерпретируется как NULL, например два оператора ORACLE SQL полностью идентичны и вставят в поле Comments значения NULL, а не пустые строки:

 

INSERT INTO Dealers VALUES(1, ‘Иванов А.И.’, 3, NULL);

INSERT INTO Dealers VALUES(1, ‘Иванов А.И.’, 3, ‘’);

В ORACLE вообще нельзя вставить пустую строку – она всегда будет рассматриваться как NULL.