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




Перечислите адреса всех отделений компании в Лондоне и Глазго.

 

SELECT *

FROM Branch

WHERE city = 'London' OR city = 'Glasgow'

 

В этом примере для выборки сведений об отделениях компании, находящихся в Лондоне (city = 'London') или Глазго (city = 'Glasgow'), в конструкции WHERE используется логический оператор OR. Результаты выполнения запроса представлены в табл. 15.

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

branchNo street city postcode
В005 22 Deer Rd London SW14EH
В003 163 Main St Glasgow G1l9QX
В002 56 Clover Dr London NW106EU

Пример 7. Использование диапазонов (BETWEEN/NOT BETWEEN) в условиях поиска. Перечислите весь персонал с годовой зарплатой от 20 000 до 30 000 фунтов стерлингов.

 

SELECT staffNo, fName, lName, position, salary

FROM Staff

WHERE salary BETWEEN 20000 AND 30000

Наличие ключевого слова BETWEEN требует задания границ диапазона значений. В данном случае результаты проверки будут положительными для всех работников компании с годовой заработной платой от 20000 до 30000 фунтов стерлингов включительно. Результаты выполнения запроса представлены в табл. 16.

 

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

staffNo fName lName position salary
SL21 John White Manager 30000.0
SG5 Susan Brand Manager 24000.00

 

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

 

SELECT staffNo, fName, lName, position, salary

FROM Staff

WHERE salary >= 20000 AND salary <= 30000

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

 

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

 

SELECT staffNo, fName, lName, position

FROM Staff

WHERE position IN ('Manager', 'Supervisor')

 

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

Таблица 17

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

staffNo fName lName position
SL21 John White Manager
SG14 David Ford Supervisor
SG5 Susan Brand Manager

 

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

 

SELECT staffNo, fName, lName, position

FROM Staff

WHERE position = 'Manager' OR position = 'Supervisor'

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

 

Пример 9. Условия поиска с указанием шаблонов (LIKE/NOT LIKE). Найдите всех владельцев недвижимости, в адресах которых содержится строка 'Glasgow'.

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

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

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

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

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

• address LIKE 'H___ '. (3 символа) Этот шаблон означает, что значение должно иметь длину, равную строго четырем символам, причем первым символом обязательно должен быть символ Н.

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

• address LIKE '%Glasgow%'. Этот шаблон означает, что нас интересует любая последовательность символов, включающая подстроку Glasgow.

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

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

 

LIKE '45#%' ESCAPE '#'

 

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

 

SELECT ownerNo, fName, lName, address, telNo

FROM PrivateOwner

WHERE address LIKE '%Glasgow%'

 

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

Таблица 18

Результат выполнения запроса из примера 9

ownerNo fName lName address telNo
С087 Carol Parrel 6 Achray St, Glasgow G32 9DX 0141-357-7419
С040 Tina Murphy 63 Well St, Glasgow G42 0141-943-1728
С093 Топу Shaw 12 Park PI, Glasgow G4 OQR 0141-225-7025

Пример 10. Использование значения NULL в условиях поиска (IS NULL/IS NOT NULL). Составьте список всех посещений сдаваемого в аренду объекта с номером PG4, по которым не было предоставлено комментариев.

Просматривая таблицу Viewing (см. табл. 6), можно заметить, что в ней есть сведения о двух осмотрах сдаваемого в аренду объекта с учетным номером 'PG4', причем по одному из них комментарии представлены, а по другому - нет. На основании этого простого примера можно прийти к заключению, что вторую из этих записей можно выбрать с помощью одного из следующих условий поиска:

 

(propertyNo = ' PG4 ' AND comment = ' ')

ИЛИ

(propertyNo = 'PG4' AND comment <> 'too remote1)

 

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

 

SELECT clientNo, viewDate

FROM Viewing

WHERE propertyNo = 'PG4' AND comment IS NULL;

 

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

 

Таблица 19

clientNo date
CR56 26-Мау-01

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



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-08-07 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: