Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Posibnik.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
5.62 Mб
Скачать

Выборка строк (конструкция where)

В приведенных выше примерах в результате выполнения операторов SELECT выбирались все строки указанной таблицы. Однако очень часто требуется тем или иным образом ограничить набор строк, помещаемых в результирующую таблицу запроса. Это достигается с помощью указания в запросе конструкции WHERE. Она состоит из ключевого слова WHERE, за которым следует перечень условий поиска, определяющих те строки, которые должны быть выбраны при выполнении запроса. Существует пять основных типов условий поиска (или предикатов, если пользоваться терминологией ISO).

  • Сравнение. Сравниваются результаты вычисления одного выражения с результатами вычисления другого выражения.

  • Диапазон. Проверяется, попадает ли результат вычисления выражения в заданный диапазон значений.

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

  • Соответствие шаблону. Проверяется, отвечает ли некоторое строковое значение заданному шаблону.

  • Значение NULL. Проверяется, содержит ли данный столбец NULL (неопределенное значение).

Конструкция WHERE эквивалентна операции выборки реляционной алгебры. Рассмотрим примеры использования всех указанных типов условий поиска.

Пример 7.1.5. Условие поиска путем сравнения

Перечислите всех студентов с проходным баллом >4.75.

SELECT НГ, НС, ФИО, ПБАЛЛ

FROM СТУДЕНТ

WHERE ПБАЛЛ > 4.75;

В этом запросе используются таблица СТУДЕНТ и предикат ПБАЛЛ > 4.75. При выполнении запроса будет создана новая таблица, содержащая только те строки таблицы СТУДЕНТ, в которых значение столбца ПБАЛЛ больше 4.75. Результаты выполнения запроса представлены в табл. 7.1.6.

Таблица 7.1.6. Результат выполнения запроса из примера 7.1.5

Группа

№ студента

ФИО

Проходной балл

001

01

Васильев

5

В языке SQL можно использовать простые операции сравнения, перечисленные в табл 7.1.7.

Таблица 7.1.7. Операции сравнения

Знак операции

Назначение

=

Равно

<>

Не равно (стандарт ISO)

!-

Не равно (используется в некоторых диалектах)

<

Меньше

>

Больше

<=

Меньше или равно

>=

Больше или равно

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

  • Выражение вычисляется слева направо.

  • Первыми вычисляются подвыражения в скобках.

  • Операции NOT выполняются перед операциями AND и OR.

  • Операции AND выполняются перед операциями OR.

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

Пример 7.1.6. Сложные условия поиска

Перечислите всех преподавателей, которые являются профессорами или ассистентами.

SELECT *

FROM ПРЕПОДАВАТЕЛЬ

WHERE ЗВ =’профессор’ OR ЗВ=’ассистент’;

В этом примере для выборки сведений об ученых званиях преподавателей, в конструкции WHERE используется логический оператор OR. Результаты выполнения запроса представлены в табл. 7.1.8.

Таблица 7.1.8. Результат выполнения запроса из примера 7.1.6

Таб.номер

ФИО препод.

Уч.степень

Уч. звание

Код кафедры

101

Андреев А.П.

д-р техн. наук

профессор

01

201

Блюмкина И.П.

д-р ф-мат. наук

профессор

02

202

Львова П.Р.

 

ассистент

02

203

Шапошников С.И.

д-р техн. наук

профессор

02

204

Новиков П.Н.

 

ассистент

02

405

Кудряшова Г.М.

 

ассистент

04

503

Ермолин Е.Н.

 

ассистент

05

801

Якорнов Е.А.

д-р техн. наук

профессор

08

604

Соловьев С.И.

 

ассистент

06

Пример 7.1.7. Использование диапазонов (BETWEEN/NOT BETWEEN) в условиях поиска

Перечислите всех студентов с проходным баллом от 4,5 до 4,75

SELECT НГ, НС, ФИО, ПБАЛЛ

FROM СТУДЕНТ

WHERE ПБАЛЛ BETWEEN 4,5 AND 4,75;

Наличие ключевого слова BETWEEN требует задания границ диапазона значений. В данном случае результаты проверки будут положительными для всех студентов с проходным баллом от 4,5 до 4,75 включительно. Результаты выполнения запроса представлены в табл. 7.1.9.

Таблица 7.1.9. Результаты выполнений запроса из примера 7.1.7

Группа

№ студента

ФИО

Проходной балл

101

01

Аристов Р.П.

4,5

101

02

Бондаренко С.А.

4,5

101

04

Макова Н.В.

4,75

102

01

Боярская Н.П.

4,5

102

03

Сидоров И.Р.

4,5

103

02

Петров О.К.

4,75

104

01

Иванов К.К.

4,5

104

07

Григорьева Е.А.

4,75

105

01

Серов И.Г.

4,5

105

12

Антоненко К. П.

4,5

ТМ-31

07

Глушко И.В.

4,5

ТМ-31

19

Самойленко Ю.А.

4,75

ТМ-31

20

Святненко Ю.В.

4,75

ТМ-31

23

Терпило Д.А.

4,75

Существует также версия проверки диапазона значений, которая имеет противоположный смысл (NOT BETWEEN), В этом случае требуется, чтобы проверяемое значение лежало вне границ заданного диапазона. Наличие ключевого слова BETWEEN и соответствующей проверки лишь незначительно повышает выразительную мощность языка SQL, поскольку те же результаты могут быть достигнуты с помощью выполнения двух обычных проверок. Приведенный выше запрос можно представить следующим образом:

SELECT НГ, НС, ФИО, ПБАЛЛ

FROM СТУДЕНТ

WHERE ПБАЛЛ BETWEEN >=4,5 AND <=4,75

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

Пример 7.1.8. Условия поиска с проверкой принадлежности к множеству (IN/NOT IN)

Составьте список всех преподавателей, которые являются профессорами или ассистентами.

SELECT ТАБН, ФИО, СТ, ЗВ, ККАФ

FROM ПРЕПОДАВАТЕЛЬ

WHERE ЗВ IN ('профессор', 'ассистент');

Проверка принадлежности к множеству обеспечивается с помощью ключевого слова IN. При этом проверяется, соответствует ли результат вычисления выражения одному из значений в предоставленном списке в нашем случае это строки 'профессор' и 'ассистент'. Результаты выполнения запроса представлены в табл. 7.1.10.

Таблица 7.1.10. Результат выполнения запроса из примера 7.1.8

Таб. номер

ФИО препод.

Уч. степень

Уч. звание

Код кафедры

101

Андреев А.П.

д-р техн. наук

профессор

01

201

Блюмкина И.П.

д-р ф-мат. наук

профессор

02

202

Львова П.Р.

 

ассистент

02

203

Шапошников С.И.

д-р техн. наук

профессор

02

204

Новиков П.Н.

 

ассистент

02

405

Кудряшова Г.М.

 

ассистент

04

503

Ермолин Е.Н.

 

ассистент

05

801

Якорнов Е.А.

д-р техн. наук

профессор

08

604

Соловьев С.И.

 

ассистент

06

Существует также версия такой проверки, имеющая противоположный смысл (NOT IN), которая используется для отбора любых значений, кроме тех, которые указаны в представленном списке. Как и оператор BETWEEN, оператор IN незначительно повышает выразительную мощность языка SQL тот же самый запрос может быть представлен следующим образом:

SELECT ТАБН, ФИО, СТ, ЗВ, ККАФ

FROM ПРЕПОДАВАТЕЛЬ

WHERE ЗВ ='профессор' OR ЗВ= 'ассистент');

Однако использование оператора IN представляет собой более эффективный способ записи условий поиска, особенно если набор допустимых значений достаточно велик.

Пример 7.1.9. Условия поиска с указанием шаблонов (LIKE/NOT LIKE)

Найдите всех зав. кафедрой, в фамилиях которых содержится строка ‘Ж’

При выполнении данного запроса необходимо организовать поиск строки ‘Ж’, которая может находиться в любом месте значений столбца ФИО_зав.кафедрой таблицы КАФЕДРА.

SELECT ККАФ, НКАФ, ТЕЛ, ЗАВ

FROM КАФЕДРА

WHERE ЗАВ LIKE ' %Ж%' ;

Результаты выполнения этого запроса представлены в табл. 7.1.11.

Таблица 7.1.11. Результат выполнения запроса из примера 7.1.9

Код

Название

ТЕЛ

ФИО зав. каф.

04

ИНОСТРАННОГО ЯЗ

310-47-17

Жданова А.Е.

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

  • %. Символ процента представляет любую последовательность из нуля или более символов (поэтому часто именуется также подстановочным символом).

  • _. Символ подчеркивания представляет любой отдельный символ.

Все остальные символы в шаблоне представляют сами себя.

  • ЗАВ LIKE 'Ж%'. Этот шаблон означает, что первый символ значения обязательно должен быть символом Н, а все остальные символы не представляют интереса и не проверяются.

  • ЗАВ LIKE 'Ж___ '. Этот шаблон означает, что значение должно иметь длину, равную строго четырем символам, причем первым символом обязательно должен быть символ ' Ж '.

  • ЗАВ LIKE ' %а'. Этот шаблон определяет любую последовательность символов длиной не менее одного символа, причем последним символом обязательно должен быть символ а.

  • ЗАВ LIKE 'Ж'. Этот шаблон означает, что нас интересует любая последовательность символов, включающая подстроку 'Ж’;

  • ЗАВ NOT LIKE ' К%'. Этот шаблон указывает, что требуются любые строки, которые не начинаются с символа К.

Если требуемая строка должна включать также служебный символ, обычно применяемый в качестве символа подстановки, то следует определить с помощью конструкции ESCAPE "маскирующий" символ, который указывает, что следующий за ним символ больше не имеет специального значения, и поместить его перед символом подстановки. Например, для проверки значений на соответствие литеральной строке ‘15%' можно воспользоваться таким предикатом:

LIKE '15#%' ESCAPE '#'

Пример 7.1.10. Использование значения NULL в условиях поиска (IS NULL/IS NOT NULL)

Составьте список всех преподавателей c кодом кафедры 02, для которых нет данных об их ученой степени.

Просматривая таблицу ПРЕПОДАВАТЕЛЬ, можно прийти к заключению, что данные записи можно выбрать с помощью следующих условий поиска:

(ККАФ =’02’ AND СТ = ‘ ‘ )

Однако это решение ошибочно. Отсутствующий комментарий (значение NULL) рассматривается как неопределенное значение, поэтому нельзя определить его равенство или неравенство с другой строкой. Если попробовать выполнить запрос с приведенным выше условий поиска, то результирующая таблица окажется пустой. Правильное решение состоит в явной проверке на наличие пустого значения, для чего используется специальное ключевое слово IS NULL:

SELECT ФИО, ТАБН

FROM ПРЕПОДАВАТЕЛЬ

WHERE ККАФ =’02’ AND СТ = IS NULL;

Результаты выполнения запроса представлены в табл. 7.1.12.

Таблица 7.1.12. Результат выполнения запроса из примера 7.1.10

Таб. номер

ФИО препод.

202

Львова П.Р.

204

Новиков П.Н.

Для проверки присутствия в столбце значений, отличных от NULL, может использоваться версия данного условия поиска, которая имеет противоположный СМЫСЛ (IS NOT NULL).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]