Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Отбор строк (предложение WHERE)

 

Таблицы имеют тенденцию к увеличению своего размера, поскольку с течением времени, все большее и большее количество строк в нее добавляется.

SQL-запросы, извлекающие из таблицы все строки, полезны при просмотре базы данных и создании отчетов, но редко применяются для чего-нибудь еще. Обычно требуется выбрать из таблицы несколько строк и включить в результаты запроса только их. Чтобы указать, какие строки нужно отобрать, следует воспользоваться предложением WHERE.

Предложение WHERE состоит из ключевого слова WHERE, за которым следует условие отбора, определяющее, какие именно строки требуется извлечь. Если условие отбора имеет значение TRUE, строка будет включена в результаты запроса. Если же оно имеет значение FALSE или NULL, то строка исключается из результатов запроса.

В SQL обычно используются пять основных условий отбора (в стандарте ANSI/ISO они называются предикатами):

- сравнение;

- проверка на принадлежность диапазону;

- проверка на членство во множестве;

- проверка на соответствие шаблону;

- проверка на равенство значению NULL.

Операторы сравнения. Наиболее распространенным условием отбора в SQL является сравнение. При сравнении СУБД вычисляет и сравнивает значения двух выражений для каждой строки данных. В SQL имеется шесть различных способов сравнения выражений (по количеству операций сравнения). В ORACLE операции сравнения обозначаются посредством следующих символов: =,!=(не равно), <, >, <=, >=.

Приведем примеры использования запросов с условиями отбора типа сравнения:

Найти служащих, родившихся до 1988 года

SELECT fname, lname

FROM staff

WHERE dob <'01.01.88';

 

Вывести адреса и номера телефонов всех не Минских отделений

SELECT city, tel_no

FROM branch

WHERE city!='Минск';

 

Условие сравнение можно делать и составным, объединяя простые сравнения логическими предикатами:

AND - когда должны удовлетворяться оба разделяемых с помощью AND условия;

OR - когда должно удовлетворяться одно из разделяемых с помощью OR условий;

AND NOT - когда должно удовлетворяться первое условие и не должно второе;

OR NOT - когда или должно удовлетворяться первое условие или не должно удовлетворяться второе.

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

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

Проверка на принадлежность значений заданному диапазону (оператор BETWEEN … AND). При этом проверяется, находится ли элемент данных между двумя заданными значениями.

 

Найти служащих, родившихся в интервале времени с 1октября 1988 по 1 декабря 1990 года:

SELECT fname, lname

FROM staff

WHERE dob between '01.10.88' and '01.12.90';

 

Следует отметить, что проверка на принадлежность диапазону не расширяет возможностей SQL, поскольку её можно выразить в виде двух сравнений, т. е. выражение A BETWEEN B 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 city, tel_no

FROM branch

WHERE city IN ('Minsk', 'Vitebsk', 'Brest');

 

Проверка IN также не добавляет новых возможностей, так как условие X IN (A, B, C) полностью эквивалентно условию (X=A) OR (X=B) OR (X=C).

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

Следующий пример иллюстрирует применение проверки на соответствие шаблону:

 

Вывести информацию обо всех сотрудниках, фамилии которых начинаются на букву К:

SELECT fname, address, tel_no

FROM staff

WHERE fname LIKE 'S%';

 

Следует обратить внимание на запись шаблона строки сравнения в условии LIKE. Указанный способ задания строки шаблона характерен для диалекта SQL СУБД ORACLE и отличен от регламентированного стандартом.

Символ процент ‘%’ замещает произвольную последовательность символов, а символ подчеркивание ‘_’ одиночный символ. Шаблоны, так же как и обыкновенные строчные данные заключаются в одинарные кавычки.

Проверка на равенство значению NULL (оператор IS [NOT] NULL). Иногда бывает необходимо проверять значения столбцов на равенство NULL и непосредственно их обрабатывать.

 

Например найдем служащих, которые не закреплены ни за одним офисом:

SELECT fname

FROM staff

WHERE bno IS NULL;

 

Необходимо помнить, что NULL-значения не равны между собой в операциях сравнения, но при применении предиката DISTINCT считаются одинаковыми.

 

 

<== предыдущая лекция | следующая лекция ==>
Предложения select и FROM | Многотабличные запросы
Поделиться с друзьями:


Дата добавления: 2014-01-04; Просмотров: 246; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.008 сек.