Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция 8.doc
Скачиваний:
10
Добавлен:
01.05.2025
Размер:
385 Кб
Скачать
☆

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

В предыдущем разделе в набор данных попадали все записи из указанных таб­лиц, при этом разработчик мог управлять составом полей этих записей. На практике набор данных обычно ограничивается записями, удовлетворяющими каким-либо определенным условиям (критериям) отбора, задаваемым с помощью операнда where. Критерий отбора может варьироваться от простейшего, в кото­ром сравниваются два значения, до сложного, когда учитывается много фак­торов. При этом в набор данных попадают записи, для которых выполняется условие отбора.

Критерий отбора представляет собой логическое выражение, в котором можно использовать операции, перечисленные ниже.

1. Сравнение

  • = — равно • <= — меньше или равно

  • > — больше • <> или ! = — не равно

  • < — меньше • ! > — не больше

  • >= — больше или равно • ! < — не меньше

2. like — сравнение по шаблону

3. is null — проверка на нулевое значение

4. in — проверка на вхождение

  1. between — проверка на вхождение в диапазон

В простом критерии отбора используется одна операция. Для операций сравне­ния и сравнения по шаблону критерий отбора имеет следующий формат:

<Выражение1> «Операция сравнения> <Выражение2>

Выражение состоит из имен полей, функций, констант, значений, знаков опе­раций и круглых скобок. В простейшем случае — из имени поля или значения. Например:

SELECT Name

FROM Personnel

WHERE Salary >= 4000;

Этот оператор задает получение списка сотрудников, имеющих оклад не менее 4000 рублей:

Name

Иванов P.O.

Петров А.П.

Семенова И.И.

Пример отбора записей по значениям символьного поля:

SELECT Name

FROM Personnel

WHERE Position = 'Водитель';

В результате получим выборку с фамилиями водителей:

Name

Попов А.Л.

Васин Н.Е.

Поля, входящие в набор данных, и поля, используемые в критерии отбора, мо­гут отличаться друг от друга. Так, в приведенном примере в наборе данных при­сутствует поле фамилии Name, в то время как в критерии отбора записей исполь­зуется поле оклада Salary.

В последнем примере в операции сравнения учитывается регистр символов, и слова Водитель и водитель не равны друг другу. Поэтому различия в регистре символов или наличие ведущих и конечных пробелов приводят к ошибкам от­бора записей. В данной ситуации критерий отбора лучше записать в следующем виде:

WHERE UPPER(TRIM(Post)) = 'ВОДИТЕЛЬ'

Функция trim удаляет из строкового значения ведущие и конечные пробелы, а функция upper приводит символы полученной строки к верхнему регистру. В результате должность водитель независимо от наличия ведущих и конечных пробелов, а также регистра букв будет приведена к значению водитель.

Для сравнения строк вместо операций =, != и <> можно использовать операцию like, выполняющую сравнение по частичному совпадению. Частичное совпадение значений целесообразно проверять, например, в случаях, когда известны только начальная часть фамилии или названия предмета. Вот образец соответст­вующего запроса:

SELECT Name

FROM Personnel

WHERE Name LIKE "Ав"

Здесь мы получаем список фамилий, начинающихся на Ав.

В выражениях операции like допускается использование шаблона, в котором разрешены все алфавитно-цифровые символы (с учетом регистра). При этом два символа имеют специальное назначение:

% — замещение любого количество символов, в том числе и нулевого;

_ — замещение одного символа.

С помощью шаблона можно выполнить проверку на частичное совпадение не только начальных символов строки, но и найти вхождение заданного фрагмента в любую часть строкового значения. Например:

SELECT Name

FROM Goods

WHERE Name LIKE "%" | | "ка" | | "%"

В приведенном запросе происходит отбор всех товаров, в названия которых вхо­дят символы ка. Набор данных, полученный при таком отборе, может иметь вид:

Name

ручка

карандаш

замазка

Перед операцией like можно использовать описатель not, который изменяет результат выполнения операции на противоположное значение и проверяет зна­чения выражений на несовпадение.

Для проверки нулевого значения выражения служит операция is null, которая имеет следующий формат:

<Выражение> IS [NOT] NULL

Так, в запросе:

SELECT *

FROM Store

WHERE S_Price IS NULL

выполняется отбор всех полей записей таблицы склада (store), для которых не определена цена (s_Price) товара.

Проверка на вхождение значения выражения в список выполняется с помощью операции in следующего формата:

<Выражение> [NOT] IN <Список значений >

Эту операцию удобно использовать, если выражение может принимать относи­тельно небольшое количество различных значений. Вот пример соответствую­щего запроса:

SELECT Name, Salary

FROM Personnel

WHERE LOWER(Post) IN ("менеджер", "водитель")

В результате его выполнения мы получим выборку фамилий и окладов всех ме­неджеров и водителей:

Name Salary

Петров А.П. 5200

Семенова И.И. 5200

Попов А.Л. 2400

Васин Н.Е. 2500

Операция between выполняет проверку вхождения значения в диапазон и имеет формат:

<Выражение> [NOT] BETWEEN

<Минимальное значение > AND < Максимальное значение >

При использовании этой операции в набор данных включаются записи, для ко­торых значение выражения больше или равно минимальному, а также меньше или равно максимальному значениям.

Замечание

Описатель not изменяет результат операции на противоположный.

Рассмотрим запрос:

SELECT *

FROM Cards

WHERE C_Date BETWEEN "21.5.08" AND "27.5.2008"

В результате его выполнения получим набор записей, для которых дата (поле CDate) находится в диапазоне с 21 по 27 мая 2008 года:

С_Number C_Code C_Move C_Date

3 3 -150 22.05.08

4 3 -30 22.05.08

5 3 270 24.05.08

6 4 200 27.05.08

Значение даты заключается в апострофы, в качестве разделителя используется точка. В некоторых других реализацих языка SQL в качестве разделителей до­пускается использовать символы — и /. Значение года можно задавать как дву­мя (21.5.08), так и четырьмя (27.5.2008) цифрами. Для значения дня и месяца можно опускать незначащий ноль.