Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

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




Рассмотрим использование операторов сравнения в конструкции:

<значение> <оператор> {<значение> | (<выбор одного>)}

Операторы сравнения применимы к любым типам данных, кроме BLOB.

Выполним следующий оператор выборки всех данных из таблицы PERSON, SELECT * FROM PERSON

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

Найдем всех Татьян, данные на которых хранятся в базе данных:[12]

SELECT * FROM PERSON

WHERE PR_NAME2 = 'Татьяна'

 

Листинг 7. Список всех Татьян.

PR_CODE PR_NAME PR_NAME2 PR_NAME3 PR_BIRTHDAY
  Беспалова Татьяна Евгеньевна 21.12.1965
  Соснина Татьяна Александровна 05.12.1968
  Хемлих Татьяна Владимировна 25.10.1953
  Шарапова Татьяна Юрьевна 14.04.1980
  Алтынцева Татьяна Владимировна 03.09.1977
  Арсентьева Татьяна Сергеевна 10.09.1954
  Баландина Татьяна Анатольевна 11.01.1955
  Бартош Татьяна Сергеевна 02.12.1974
  Веремчук Татьяна Валерьевна 23.08.1948
  Владысик Татьяна Викторовна 19.10.1960
  Звездина Татьяна Александровна 01.10.1961
  Зырянова Татьяна Геннадьевна 22.01.1970
  Леушина Татьяна Фёдоровна 04.05.1963
  Мазеина Татьяна Александровна 06.04.1969
  Мосина Татьяна Михайловна 30.06.1979
  Некрасова Татьяна Николаевна 04.12.1949

Теперь рассмотрим использование условий “>”,”<”

Найдем всех рожденных после 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

Имя Отчество Фамилия Дата рождения
Татьяна Геннадьевна Зырянова 22.01.1970
Максим Владимирович Бычков 08.09.1970
Юлий Альбертович Алексеев 19.09.1974
Татьяна Сергеевна Бартош 02.12.1974
Александр Анатольевич Лебедев 03.04.1977
Татьяна Владимировна Алтынцева 03.09.1977
Оксана Владимировна Мельчакова 06.07.1978
Татьяна Михайловна Мосина 30.06.1979
Татьяна Юрьевна Шарапова 14.04.1980
Лариса Вилльевна Вашкарина 05.11.1980
Анна Николаевна Верхоланцева 06.10.1991

Объединим оба предыдущих условия, т.е. найдем всех Татьян рожденных после даты “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

Имя Отчество Фамилия Дата рождения
Татьяна Геннадьевна Зырянова 22.01.1970
Татьяна Сергеевна Бартош 02.12.1974
Татьяна Владимировна Алтынцева 03.09.1977
Татьяна Михайловна Мосина 30.06.1979
Татьяна Юрьевна Шарапова 14.04.1980

Использование варианта 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

Имя Отчество Фамилия Дата рождения
Татьяна Викторовна Владысик 19.10.1960
Светлана Александровна Ветошкина 23.12.1960
Татьяна Александровна Звездина 01.10.1961
Татьяна Фёдоровна Леушина 04.05.1963
Олег Владимирович Лядов 07.06.1964
Оксана Васильевна Власова 11.02.1965
Надежда Александровна Зеленина 11.12.1965
Татьяна Евгеньевна Беспалова 21.12.1965
Татьяна Александровна Соснина 05.12.1968
Татьяна Александровна Мазеина 06.04.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. Список Юль, Юлиев и Юлиан

Имя Отчество Фамилия Дата рождения
Юлий Альбертович Алексеев 19.09.1974
Юлия Геннадьевна Проскурякова 29.09.1974
Юлия Игоревна Шатрова 03.04.1958
Юлия Владимировна Янышева  
Юлия Дмитриевна Гаевская 07.01.1959
Юлиана Валерьевна Коршунова 02.03.1950
Юлия Валерьевна Кудинова 29.05.1981
Юлия Владимировна Лаврова 08.10.1949
Юлия Анатольевна Луковникова 06.12.1979
Юлия Владимировна Мясникова 01.09.1961
Юлия Витальевна Оборина 02.10.1984

Тот же самый результат можно было бы получить введя запрос с операторами сравнения:[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 = 'Юлиана'

 

Поделиться:





Читайте также:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...