Итоги
Итоги
Вэтой главе более полно представлены сведения из области предикатов. Показано, как можно найти значения, которые связаны с данным значением любым количеством способов, заданных с помощью различных реляционных операторов, как применяют ся булевы операторы AND и OR для комбинации сложных условий, каждое из кото рых может рассматриваться как единственный предикат. Булев оператор NOT изменяет на противоположное значение условия или группы условий. Все булевы вы ражения и операторы отношения управляются с помощью круглых скобок, которые определяют порядок выполнения операции. Эти операции могут иметь любой уровень
сложности. Было рассмотрено, как можно разложить записанное сложное выражение
на составные части, каждая из которых является простой.
Вглаве 5 будут представлены особые операторы языка SQL.
37
Работаем на SQL
1.Запишите запрос, который покажет все заявки, превышающие $1,000.
2.Запишите запрос, который покажет имена (names) и названия городов (cities) для всех продавцов в London с комиссионными (commission), превышающими .10.
3.Запишите запрос для таблицы Customers, включающий в выходные данные всех
покупателей, для которых rating <= 100, в том случае, если они расположены не в
Rome.
4.Каков будет результат выполнения следующего запроса?
SELECT *
FAOM Orders
WHEAE (amt < 1000 ОА
NOT (odate = 10/03/1990
AND cnum > 2003));
5.Каков будет результат выполнения следующего запроса?
SELECT *
FAOM Orders
WHEAE NOT((odate = 10/03/1990 ОА snum > 1006)
AND amt > = 1500);
6.Как упростить запись следующего запроса?
SELECT snum,sname,city,comm
FAOM Salespeople
WHERE (comm > +.12 OR
comm < .14);
(Ответы см. в 11риложении А.)
38
Использование
специальных
операторов
в "условиях,,
Глава 5. Ис11ользова11ие специальных 011ераторов в "условиях"
Кроме булевых операторов и операторов сравнения, рассмотренных в главе 4,
SQL использует специальные операторы IN, BETWEEN, LIKE и IS NULL. Вы научи тесь применять их, подобно операторам сравнения, для получения более выразитель ных и мощных предикатов. Обсуждение IS NULL касается значений пропускаемых данных и NULL-значений, фиксирующих отсутствие данных.
OnepamoplN
IN полностью определяет множество, которому данное значение может принадле жать или не принадлежать. Если нужно найти всех продавцов, расположенных либо в 'Barcelona', либо в 'London', основываясь только на том, что известно к настоящему моменту, необходимо написать следующий запрос (выходные данные для него пред ставлены на рис. 5.1 ):
SELECT •
FROM Salespeople
WHERE city = ·вагсеlоnа·
OR city |
· London · ; |
Однако существует более простой способ получить ту же самую информацию:
SELECT •
FROM Salespeople
WHERE city IN ('Barcelona·, 'London');
11 Sl-ll ~---------- |
SUL lxeCL1tJon Log- ~-~~ ___ l-: |
|||||
11f НОМ |
S,11 ""Р"ОР] '-' |
|
1 |
|||
'IW11lH[ |
c1ty |
- ·uarcelona' |
|
|
|
|
1 011 с 1 t у |
'l oпdon' . |
London ••• |
|
|
||
|
|
|
jjFIШ |
э.1"1,,1 |
|
|
|
|
1001 |
Peel |
0. 12 |
|
|
|
|
101114 |
Motika |
London |
0. 11 |
|
|
."""1007.Rifkin |
Barcelona |
0. 15 |
|
||
Рис. 5.1. Поиск продавцов (Salespeople) в городах Barselona или London
40
Оператор BETWEEN
1 - |
- |
- ---------oOL fxcc11t1or1 Lоц0 |
~ ___ 1, |
|
||||
, ::,1L1 С f |
* |
|
|
1 |
||||
1' 1 f/ОГ~ |
::, J lf,spr0 op] е |
|
|
|
|
|||
WHll!l |
|
c1ty |
IN ( |
lJar·celoпd', Lоnсюп') |
1 |
|||
|
|
|
|
|
||||
|
м1111"9 |
Peel |
51ыш |
э.111;,м |
|
|
||
|
|
|
1001 |
|
0. 12 |
|
|
|
|
|
|
1004 |
Motika |
0.11 |
|
|
|
|
|
|
1007 |
Rifkin |
0. 15 |
|
|
|
|
••~~~-вrowse : |
ti~+ |
|
|
|
|||
Рис. 5.2. SELECT с использованием IN
Выходные данные этого запроса представлены на рис. 5.2.
Как видно из примера, IN определяет множество, элементы которого точно пере числяются в круглых скобках и разделяются запятыми. Если в поле, имя которого ука зано слева от IN, есть одно из перечисленных в списке значений (требуется точное совпадение), то предикат считается истинным. Если элементы множества имеют чи
словой, а не символьный тип, то одиночные кавычки непосредственно слева и справа
от значения необходимо опустить. Можно найти всех покупателей, обслуживаемых продавцами 1001, 1007, 1004. Выходные данные для следующего запроса представле
ны на рис. 5.3:
SELECT •
FROM Customers
WHERE snum IN (1001, 1007, 1004);
Оператор BETWEEN
Оператор BETWEEN сходен с IN. Вместо перечисления элементов множества, как это делается в IN, BETWEEN задает границы, в которые должно попадать значение, чтобы предикат был истинным. Используется ключевое слово BETWEEN, за которым
следуют начальное значение, ключевое слово AND и конечное значение. Также как и
IN, BETWEEN чувствителен к порядку: первое значение в предложении должно быть первым в соответствии с алфавитным или числовым порядком. (В отличие от англий ского языка в SQL не говорят: значение расположено между ("is BETWEEN") значени-
41