Russian Belarusian English German Japanese Ukrainian

Rashka.studio - игры и приложения для Android! Заходи, ждём тебя =)

Простое условие отбора записей

CuBook05

На практике набор данных обычно ограничивается записями, удовлетворяющими каким-либо определенным условиям (критериям) отбора, задаваемым с помощью операнда WHERE. Критерий отбора может варьироваться от простейшего, в котором сравниваются два значения, до сложного, когда учитывается много факторов. При этом в набор данных попадают записи, для которых выполняется условие отбора. Критерий отбора представляет собой логическое выражение, в котором можно использовать операции. Сравнение (возможные операторы):
  • = (равно)
  • > (больше)
  • < (меньше)
  • <= (меньше или равно)
  • >= (больше или равно)
  • <> или = (не равно)
  • !> (не больше)
  • !< (не меньше)
  • LIKE (сравнение по шаблону)
  • IS NULL (проверка на нулевое значение)
  • IN (проверка на вхождение)
  • BETWEEN (проверка на вхождение в диапазон)
В простом критерии отбора используется одна операция. Для операций сравнения и сравнения по шаблону критерий отбора имеет следующий формат:
<Выражение1> <Оператор> <Выражение2>
Выражение состоит из имен полей, функций, констант, значений, знаков операций и круглых скобок. В простейшем случае из имени поля или значения. Тогда оператор:
SELECT Name FROM Employee WHERE degree = '1ктн';
задает получение следующего списка сотрудников, имеющих ученую степень кандидата технических наук:
Name
Кулешов К.К.
Сидоров А.А.
Якушев Я.Я.
Пример отбора записей по значениям символьного поля:
SELECT Name FROM Employee WHERE Post = 'Мл. нс';
В результате получим выборку с фамилиями младших научных сотрудников:
Name
Федоров Ф.Ф.
Якушев Я.Я.
Поля, входящие в набор данных, и поля, используемые в критерии отбора, могут отличаться друг от друга. Так, в приведенном примере в наборе данных присутствует поле фамилии Name, в то время как в критерии отбора записей используется поле должности Post.
 
В следующем примере в операции сравнения учитывается регистр символов и слова Мл. нс и мл. нс не равны друг другу. Поэтому различия в регистре символов или наличие ведущих и конечных пробелов приводят к ошибкам отбора записей. В данной ситуации критерий отбора лучше записать в следующем виде:
WHERE LOWER(TRIM(Post)) = 'Мл. нс'
Функция TRIM удаляет из строкового значения ведущие и конечные пробелы, а функция LOWER приводит символы полученной строки к нижнему регистру. В результате значение должности водитель независимо от наличия ведущих и конечных пробелов, а также регистра букв будет приведено к значению мл. нс.
 
Для сравнения строк вместо операций =, ! = и <> можно использовать операцию LIKE, выполняющую сравнение по частичному совпадению. Частичное совпадение значений целесообразно проверять, например, в случаях, когда известны только начальная часть фамилии или названия предмета. Вот образец соответствующего запроса:
SELECT Name FROM Employee WHERE Name LIKE "Ав"
Здесь выводится список фамилий, начинающихся на Ав.
 
В выражениях операции LIKE допускается использование шаблона, в котором разрешены все алфавитно-цифровые символы (с учетом регистра). При этом два символа имеют специальное назначение:
  • % (замещение любого количества символов, в том числе и нулевого)
  • _ (замещение одного символа)
С помощью шаблона можно выполнить проверку на частичное совпадение не только начальных символов строки, но и найти вхождение заданного фрагмента в любую часть строкового значения. Например:
SELECT Name FROM Employee WHERE Name LIKE "%" || "po" || "%"
В приведенном запросе происходит отбор всех сотрудников, в фамилии которых входят символы ро. Набор данных, полученный при таком отборе, может иметь вид:
Name
Ветров В.В.
Сидоров А.А.
Столяров С.С.
Федоров Ф.Ф.
Перед операцией LIKE можно использовать описатель NOT, который изменяет результат выполнения операции на противоположное значение и проверяет значения выражений на несовпадение.
 
Для проверки нулевого значения выражения служит операция IS NULL, которая имеет следующий формат:
<Выражение> IS [NOT] NULL
Так, в запросе:
SELECT * FROM Employee WHERE Degree IS NULL
выполняется отбор всех полей записей таблицы сотрудников (Employee), для которых не определена ученая степень (Degree).
 
Проверка на вхождение значения выражения в список выполняется с помощью операции IN следующего формата:
<Выражение> [NOT] IN <Список значений>
Эту операцию удобно использовать, если выражение может принимать относительно небольшое количество различных значений. Вот пример соответствующего запроса:
SELECT Name, Degree FROM Employee WHERE LOWER(Post) IN ("нc", "мл. нc")
В результате его выполнения подучим выборку фамилий и ученых степеней всех научных и младших научных сотрудников:
Name Degree
Кулешов К.К. ктн
Федоров Ф.Ф. -
Якушев Я.Я. ктн
Операция BETWEEN выполняет проверку вхождения значения в диапазон и имеет формат:
<Выражение> [NOT] BETWEEN <Минимальное значение> AND <Максимальное значение>
При использовании этой операции в набор данных включаются записи, для которых значение выражения больше или равно минимальному, а также меньше или равно максимальному значениям.
Описатель NOT изменяет значение результата операции на противоположное.
Рассмотрим запрос:
SELECT Name, Post, Birthday FROM Employee WHERE Birthday BETWEEN "1.7.1950" AND "31.7.1967"
В результате его выполнения получим набор записей о сотрудниках, у которых дата рождения (поле Birthday) находится в диапазоне с 1 июля 1950 г. по 31 июля 1967 г.:
Name Post Birthday
Ветров В.В. вед. нc 03.03.1958
Кулешов К.К. нс 03.03.1966
Сергеев С.С. бухгалтер 03.05.1966
Столяров И.И. зав. лаб. 03.12.1951
Значение даты заключается в кавычки, в качестве разделителя используется точка. В некоторых других реализациях языка SQL в качестве разделителей допускается использовать символы - и /. Значение года можно задавать как двумя (1.7.05), так и четырьмя (1.7.2005) цифрами. В значениях дня и месяца можно опускать незначащий ноль.
Если заметили ошибку, выделите фрагмент текста и нажмите Ctrl+Enter

Добавить комментарий