Отбор строк (предложение WHERE)
Таблицы имеют тенденцию к увеличению своего размера, поскольку с течением времени, все большее и большее количество строк в нее добавляется.
SQL-запросы, извлекающие из таблицы все строки, полезны при просмотре базы данных и создании отчетов, но редко применяются для чего-нибудь еще. Обычно требуется выбрать из таблицы несколько строк и включить в результаты запроса только их. Чтобы указать, какие строки нужно отобрать, следует воспользоваться предложением WHERE
Предложение WHERE состоит из ключевого слова WHERE, за которым следует условие отбора, определяющее, какие именно строки требуется извлечь. Если условие отбора имеет значение TRUE, строка будет включена в результаты запроса. Если же оно имеет значение FALSE или NULL, то строка исключается из результатов запроса.
В SQL обычно используются пять основных условий отбора (в стандарте ANSI/ISO они называются предикатами):
- сравнение;
- проверка на принадлежность диапазону;
- проверка на членство во множестве;
- проверка на соответствие шаблону;
- проверка на равенство значению NULL.
Операторы сравнения.Наиболее распространенным условием отбора в SQL является сравнение. При сравнении СУБД вычисляет и сравнивает значения двух выражений для каждой строки данных. В SQL имеется шесть различных способов сравнения выражений (по количеству операций сравнения). В ORACLE операции сравнения обозначаются посредством следующих символов: =, !=(не равно), <, >, <=, >=.
Приведем примеры использования запросов с условиями отбора типа сравнения:
Найти служащих, родившихся до 1988 года
SELECTfname, lname
FROMstaff
WHERE dob<’01.01.88’;
Вывести адреса и номера телефонов всех не Минских отделений
SELECT address, tel_no
FROM branch
WHERE city!=’Минск’;
Условие сравнение можно делать и составным, объединяя простые сравнения логическими предикатами:
AND - когда должны удовлетворяться оба разделяемых с помощью AND условия;
OR - когда должно удовлетворяться одно из разделяемых с помощью OR условий;
AND NOT - когда должно удовлетворяться первое условие и не должно второе;
OR NOT - когда или должно удовлетворяться первое условие или не должно удовлетворяться второе.
Существует приоритет AND над OR (сначала выполняются все операции AND и только после этого операции OR). Для получения желаемого результата WHERE условия должны быть введены в правильном порядке, который можно организовать введением скобок.
При обработке условия числа сравниваются алгебраически - отрицательные числа считаются меньшими, чем положительные, независимо от их абсолютной величины. Строки символов сравниваются в соответствии с их представлением в коде, используемом в конкретной СУБД, например, в коде ASCII. Если сравниваются две строки символов, имеющих разные длины, более короткая строка дополняется справа пробелами для того, чтобы они имели одинаковую длину перед осуществлением сравнения.
Проверка на принадлежность значений заданному диапазону (оператор BETWEEN … AND). При этом проверяется, находится ли элемент данных между двумя заданными значениями.
Найти служащих, родившихся в интервале времени с 1октября 1963 по 31 декабря 1971
SELECTfname, lname
FROMstaff
WHERE dob between ’01.10.88’ and ’31.10.90’;
Следует отметить, что проверка на принадлежность диапазону не расширяет возможностей SQL, поскольку её можно выразить в виде двух сравнений, т. е. выражение A BETWEENB AND C эквивалентно (A>=B) AND (A<=C).
Помимо рассмотренной проверки в SQL существует также и инверсная проверка на принадлежность диапазону, реализованная с помощью оператора NOT BETWEEN … AND.
В стандарте ANSI/ISO определены относительно сложные правила обработки значений NULL в проверке BETWEEN … AND:
1) Если проверяемое выражение имеет значение NULL либо оба выражения, определяющие диапазон, равны NULL, то проверка возвращает NULL.
2) Если выражение, определяющее нижнюю границу диапазона, имеет значение NULL, то проверка возвращает FALSE, когда проверяемое значение больше верхней границы диапазона, и NULL в противном случае.
3) Если выражение, определяющее верхнюю границу диапазона, имеет значение NULL, то проверка возвращает FALSE, когда проверяемое значение меньше нижней границы диапазона, и NULL в противном случае.
Проверка на членство во множестве (оператор IN). В этом случае проверяется, соответствует ли элемент данных какому-либо значению из заданного списка.
Следующий пример иллюстрирует процедуру проверки на членство во множестве:
Вывести информацию об офисах, расположенных в Минске, Витебске и Бресте:
SELECT address, tel_no
FROM branch
WHERE city IN (‘Минск’, ‘Витебск’, ‘Брест’);
Проверка IN также не добавляет новых возможностей, так как условие X IN (A, B, C) полностью эквивалентно условию (X=A) OR (X=B) OR (X=C).
Проверка на соответствие шаблону (оператор LIKE). Иногда для получения требуемых данных с выборкой по значениям строковых атрибутов, в условии отбора инструкций на извлечение информации целесообразно применять шаблоны для поиска.
Следующий пример иллюстрирует применение проверки на соответствие шаблону:
Вывести информацию обо всех сотрудниках, фамилии которых начинаются на букву К:
SELECT lname, address, tel_no
FROM staff
WHERE lname LIKE‘K%’;
Следует обратить внимание на запись шаблона строки сравнения в условии LIKE. Указанный способ задания строки шаблона характерен для диалекта SQL СУБД ORACLE и отличен от регламентированного стандартом.
Символ процент ‘%’ замещает произвольную последовательность символов, а символ подчеркивание ‘_’ одиночный символ. Шаблоны, так же как и обыкновенные строчные данные заключаются в одинарные кавычки.
Проверка на равенство значению NULL (оператор IS [NOT] NULL). Иногда бывает необходимо проверять значения столбцов на равенство NULLи непосредственно их обрабатывать.
Например найдем служащих, которые не закреплены ни за одним офисом:
SELECT lname
FROM staff
WHERE bno IS NULL;
Необходимо помнить, что NULL-значения не равны между собой в операциях сравнения, но при применении предиката DISTINCT считаются одинаковыми.
Дата добавления: 2015-08-26; просмотров: 1966;