Использование операторов сравнения
Рассмотрим использование операторов сравнения в конструкции: <значение> <оператор> {<значение> | (<выбор одного>)} Операторы сравнения применимы к любым типам данных, кроме BLOB. Выполним следующий оператор выборки всех данных из таблицы PERSON, SELECT * FROM PERSON как мы уже видели в листинге 1. получаем список всех имеющихся у нас личностей. Обычно требуется не весь список, а список отобранный по какому-нибудь критерию. Предложение WHERE позволяет задать условие поиска — условие, на основании которого в результат выборки будут попадать данные из базы данных. Найдем всех Татьян, данные на которых хранятся в базе данных:[12] SELECT * FROM PERSON WHERE PR_NAME2 = 'Татьяна'
Листинг 7. Список всех Татьян.
Теперь рассмотрим использование условий “>”,”<” Найдем всех рожденных после 1.01.1970:[13] SELECT PR_NAME2 AS "Имя", PR_NAME3 AS "Отчество", PR_NAME AS "Фамилия", PR_BIRTHDAY AS "Дата рождения"
FROM PERSON WHERE PR_BIRTHDAY > '1.01.1970' ORDER BY PR_BIRTHDAY, PR_NAME Листинг 8. Список всех рожденных после 1.01.1970
Объединим оба предыдущих условия, т.е. найдем всех Татьян рожденных после даты “1.01.1970”:[14] SELECT PR_NAME2 AS "Имя", PR_NAME3 AS "Отчество", PR_NAME AS "Фамилия", PR_BIRTHDAY AS "Дата рождения" FROM PERSON WHERE ( PR_NAME2 = ' Татьяна' ) AND ( PR_BIRTHDAY > '1.01.1970' ) ORDER BY PR_BIRTHDAY, PR_NAME
Листинг 9. Список Татьян рожденных после 1.01.1970
Использование варианта BETWEEN Близок к операторам сравнения вариант BETWEEN, который, выглядит следующим образом: <значение> [NOT] BETWEEN <значение> AND <значение> Это применимо как к числовым, так и к строковым столбцам, дате, времени — ко всем, за исключением BLOB. Этот вариант требует, чтобы значение находилось в указанном диапазоне, включая граничные значения. Еще раз обратимся к полному списку личностей. Выберем из этого списка только тех, чья дата рождения находится в диапазоне от 1.01.1960 до 31.12.1969:[15] SELECT PR_NAME2 AS "Имя", PR_NAME3 AS "Отчество", PR_NAME AS "Фамилия", PR_BIRTHDAY AS "Дата рождения" FROM PERSON WHERE PR_BIRTHDAY BETWEEN '1.01.1960' AND '31.12.1969' ORDER BY PR_BIRTHDAY, PR_NAME
Листинг 10. Список рожденных в диапазоне от 1.01.1960 до 31.12.1969
Понятно, что такого же результата можно было бы добиться введя запрос:[16] SELECT PR_NAME2 AS "Имя", PR_NAME3 AS "Отчество", PR_NAME AS "Фамилия", PR_BIRTHDAY AS "Дата рождения" FROM PERSON WHERE PR_BIRTHDAY >= '1.01.1960' AND PR_BIRTHDAY <= '31.12.1969' ORDER BY PR_BIRTHDAY, PR_NAME
Результат будет такой же, но вариант запроса с использованием BЕTWEEN намного более выразительный. ЗАМЕЧАНИЕ Логическое выражение в предложении WHERE нашего примера содержит только операторы конъюнкции (логическое И). По этой причине я здесь не использую скобок. Вообще же очень рекомендую всегда использовать скобки для явного задания порядка выполнения любых операторов, в особенности логических, потому что не часто на лету, когда в поте лица своего пишешь гениальную программу (при обычном отставании от утвержденного графика), вспомнишь порядок выполнения этих операций. Я вот только помню, что конъюнкция выполняется прежде дизъюнкции. Скобки совершенно необходимы, когда у вас довольно сложное логическое выражение. Иначе выяснение причин, почему неверно осуществляется выборка данных, может затянуться на длительное время. Есть еще один неприятный момент для любителей языка Delphi, который раньше назывался Объектный Паскаль. Там при использовании операций сравнения и логических операций порядок выполнения действий отличается от того, что принято в языке SQL. В этом языке и сами операции сравнения следует заключать в скобки, чтобы избежать ошибок трансляции. Проверка на присутствие в списке значений (вариант IN) В варианте IN вы можете задать список, среди элементов которого должно (или не должно) находиться значение указанного столбца: <значение> [NOT] IN ({<значение> [, <значение>]... | <список выбора>}) В этом варианте можно задать как явно представленный список литералов или выражений, так и указать оператор SELECT, который возвращает произвольное количество значений ровно одного столбца.
Найдем из нашего списка всех Юль, Юлиев и Юлиан:[17] SELECT PR_NAME2 AS "Имя", PR_NAME3 AS "Отчество", PR_NAME AS "Фамилия", PR_BIRTHDAY AS "Дата рождения" FROM PERSON WHERE PR_NAME2 IN ('Юлий','Юлия','Юлиана')
Листинг 11. Список Юль, Юлиев и Юлиан
Тот же самый результат можно было бы получить введя запрос с операторами сравнения:[18] SELECT PR_NAME2 AS "Имя", PR_NAME3 AS "Отчество", PR_NAME AS "Фамилия", PR_BIRTHDAY AS "Дата рождения" FROM PERSON WHERE PR_NAME2 = 'Юлий' OR PR_NAME2 = 'Юлия' OR PR_NAME2 = 'Юлиана'
Читайте также: II. Использование галереи фильтров Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|