8-й час
Операции в условиях для отбора данных

Основными на этом уроке будут следующие темы.

• Что такое операция?
• Операции в SQL
• Как использовать операции по отдельности?
• Комбинированное использование операций

  Что такое операции в SQL?

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

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

В ходе этого урока мы обсудим следующие типы операций.

• Операции сравнения
• Логические операции
• Операция отрицания
• Арифметические операции

  Операции сравнения

Операции сравнения используются в операторах SQL для сравнивания отдельных значений и представляются знаками =, о, < и >. Эти операции предназначены соответственно для проверки равенства и неравенства значений, проверки выполнения отношений "меньше" и "больше" между ними. Суть операций сравнения раскрывается в следующих разделах.

 

  Равенство

Операция проверки равенства в операторе SQL выясняет равенство одного значения другому. Для этого используется знак равенства (=). При выяснении равенства сравниваемые значения должны совпадать в точности, иначе запрос к базе данных не вернет никаких данных. Если сравниваемые значения равны, соответствующее выражение получает значение TRUE (Истина), иначе — FALSE (Ложь). Это логическое значение (TRUE/FALSE) используется системой для того, чтобы выяснить, должны ли соответствующие данные включаться в ответ запроса.

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

Пример________________________________Значение______

WHERE SALARY = '20000'                    Зарплата равна 20000

Следующий запрос возвращает все строки данных с PROD_ID равным 2345.

SELECT *

FROM PRODUCTSJTBL

WHERE PROD_ID = '2345';

PROD_ID    PROD_DESC              COST 

2345    ПОЛОЧКА ИЗ ДУБА           59.99 

1 строка выбрана.

  Неравенство

В противоположность равенству существует неравенство. В SQL для представления проверки неравенства используется знак о (комбинация знаков "меньше" и "больше"). В этом случае условие возвращает TRUE, если обнаруживается неравенство значений, и FALSE — если равенство.

Во многих из основных реализаций SQL эквивалентом знака операции о является комбинация ' = Уточните в документации, является ли эта комбинация применимой в вашем конкретном случае.

Пример________________________________Значение________

WHERE SALARY <> '20000'                  Зарплата не равна 20000

SELECT *

FROM PRODUCTS_TBL

WHERE PROD_ID <> '2345';

PROD_ID       PROD_DESC                 COST

11235   КОСТЮМ ВЕДЬМЫ                  29.99

222     ПЛАСТИКОВЫЕ ТЫКВЫ               7.75

13      ИСКУССТВЕННЫЕ ПАРАФИНОВЫЕ ЗУБЫ  1.1

90      ФОНАРИ                         14.5

15      КОСТЮМЫ В АССОРТИМЕНТЕ         10

9       СЛАДКАЯ КУКУРУЗА               1.35

6       ТЫКВЕННЫЕ КОНФЕТЫ              1.45

87      ПЛАСТИКОВЫЕ ПАУКИ              1.05

119     МАСКИ В АССОРТИМЕНТЕ           4.95

1234    ЦЕПОЧКА ДЛЯ КЛЮЧЕЙ             5.95

10 строк выбраны.

  „Меньше" и „больше"

Знаки < ("меньше") и > ("больше") можно использовать по отдельности, и в комбинации с другими операциями.

Пример__________________________________Значение____

WHERE SALARY < '20000'             Зарплата меньше 20000 

WHERE SALARY > '20000'             Зарплата больше 20000

В первом случае любое значение, меньшее 20000, вернет TRUE, а равное или большее 20000 — FALSE. Операция "больше" является противоположной к операции "меньше".

SELECT *

FROM PRODUCTS_TBL

WHERE COST > 20;

PROD_ID        PROD_DESC        COST

11235   КОСТЮМ ВЕДЬМЫ            29.99 

2345    ПОЛОЧКА ИЗ ДУБА          59.99

2 строки выбраны.

В следующем примере обратите внимание на то, что значение 24.99 не включено в вывод результата запроса.

SELECT *

FROM PRODUCTS_TBL

WHERE COST < 24.99;

PROD_ID       PROD_DESC                 COST

222     ПЛАСТИКОВЫЕ ТЫКВЫ               7.75

13      ИСКУССТВЕННЫЕ ПАРАФИНОВЫЕ ЗУБЫ   1.1

90      ФОНАРИ                          14.5

15      КОСТЮМЫ В АССОРТИМЕНТЕ          10

9       СЛАДКАЯ КУКУРУЗА                1.35

6       ТЫКВЕННЫЕ КОНФЕТЫ               1.45

87      ПЛАСТИКОВЫЕ ПАУКИ               1.05

119     МАСКИ В АССОРТИМЕНТЕ            4.95

1234    ЦЕПОЧКА ДЛЯ КЛЮЧЕЙ              5.95

9 строк выбраны.

  Примеры комбинирования операций сравнения

Знак равенства можно комбинировать со знаками "меньше" и "больше", как в следующих примерах.

Пример_____________________________Значение_________

WHERE SALARY <= '20000'                Зарплата меньше или равна 20000 

WHERE SALARY >= '20000'                Зарплата больше или равна 20000

"Меньше или равно" включает значение 20000 и все значения, меньшие 20000. Любое такое значение вернет TRUE, а любое значение, большее 20000, вернет FALSE. Подобным образом определяется "больше или равно". В данном случае, в отличие от строгих неравенств, значение 20000 возвращает TRUE.

SELECT *

FROM PRODUCTS_TBL

WHERE COST <= 24.99;

PROD__ID    PROD_DESC                 COST

11235  КОСТЮМ ВЕДЬМЫ                  9.99

222    ПЛАСТИКОВЫЕ ТЫКВЫ              7.75

13     ИСКУССТВЕННЫЕ ПАРАФИНОВЫЕ ЗУБЫ  1.1

90     ФОНАРИ                         14.5

15     КОСТЮМЫ В АССОРТИМЕНТЕ           10

9      СЛАДКАЯ КУКУРУЗА                1.35

б      ТЫКВЕННЫЕ КОНФЕТЫ               1.45

87     ПЛАСТИКОВЫЕ ПАУКИ               1.05

119    МАСКИ В АССОРТИМЕНТЕ            4.95

1234   ЦЕПОЧКА ДЛЯ КЛЮЧЕЙ              5.95

10 строк выбраны.

  Логические операции

Логические операции в SQL задаются ключевыми словами, а не символами. Ниже мы рассмотрим следующие логические операции.

• IS NULL . EXISTS

• BETWEEN 

• UNIQUE

• IN 

• ALL И ANY

• LIKE

  IS NULL

Ключевое слово is NULL используется для проверки равенства данного значения значению NULL. Например, если требуется узнать, кто из сотрудников не имеет пейджера, можно искать значения NULL в столбце PAGER таблицы EMPLOYEEJTBL.

Вот пример проверки равенства значения значению NULL.

Пример__________________________Значение_____________

WHERE SALARY is NULL        Для зарплаты не задано значение

Вот пример, в котором значение NULL не будет найдено.

Пример_________________________Значение______________

WHERE SALARY = NULL         Зарплата имеет значение, равное 

                                                     строке символов N-U-L-L

SELECT EMP_ID, LAST NAME, FXRST_NAME, PAGER 

FROM EMPLOYEE_TBL 

WHERE PAGER IS NULL;

EMP_ID     LAST_NAME     FIRST_NAME   PAGER

311549902  STEPHENS       TINA

442346889  PLEW           LINDA

220984332  WALLACE        MARIAH

443679012  SPURGEON       TIFFANY

4 строки выбраны.

Вы должны понимать, что буквальная строка 'NULL' отличается от значения NULL. Посмотрите на следующий пример.

SELECT EMP_ID, LAST_NAME, FIRST_NAME, PAGER 

FROM EMPLOYEE_TBL 

WHERE PAGER = NULL;

О строк выбрано.

  BETWEEN

Ключевое слово BETWEEN используется для поиска значений, попадающих в диапазон, заданный некоторыми минимальным и максимальным значениями. Эти минимальное и максимальное значения включаются в соответствующее условие.

Пример__________________________________Значение___________

WHERE SALARY BETWEEN '20000'       Зарплата должна находиться в диапазоне 

AND '30000'                                                от 20000 до 30000, включая крайние значения диапазона 

SELECT *

FROM PRODUCTS_TBL 

WHERE BETWEEN 5.95 AND 14.5;

PROD_ID       PROD_DESC         COST

222     ПЛАСТИКОВЫЕ ТЫКВЫ       7.75

90      ФОНАРИ                  14.5

15      КОСТЮМЫ В АССОРТИМЕНТЕ  10

1234    ЦЕПОЧКА ДЛЯ КЛЮЧЕЙ       5.95

4 строки выбраны. 

Обратите внимание на то, что в вывод включены крайние значения 5. 95 и 14 .5.

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

  IN

Ключевое слово IN используется для сравнения значения с заданным списком буквальных значений. Чтобы возвратилось TRUE, сравниваемое значение должно совпадать хотя бы с одним значением из списка.

Пример__________________________________________Значение______

WHERE SALARY IN ('20000',            Зарплата должна равняться 20000, 30000 или 

'30000', '40000')                                   40000

SELECT *

FROM PRODUCTS_TBL

WHERE PROD_ID IN <'13','9','87','119');

PROD_ID        PROD_DESC                   COST

13        ИСКУССТВЕННЫЕ ПАРАФИНОВЫЕ ЗУБЫ   1.1

9         СЛАДКАЯ КУКУРУЗА                 1.35

87        ПЛАСТИКОВЫЕ ПАУКИ                1.05

119       МАСКИ В АССОРТИМЕНТЕ             4.95

4 строки выбраны.

То же самое можно получить, комбинируя условия с помощью ключевого слова OR, но с помощью IN результат получается быстрее.

  LIKE

Ключевое слово LIKE используется для нахождения значений, похожих на заданное. В данном случае предполагается использование следующих двух знаков подстановки:

• знак процента (%);
• знак подчеркивания (_).

Знак процента представляет ноль, один или несколько символов. Знак подчеркивания представляет один символ или число. Знаки подстановки могут использоваться в комбинации.

Вот несколько примеров.

Пример_________________________Значение_________________

WHERE SALARY LIKE '200%'       Любое значение, начинающееся с 200

WHERE SALARY LIKE ' %200% '  Любое значение, имеющее 200 в любой позиции

WHERE SALARY LIKE '_00%'        Любое значение, имеющее 00 во второй и третьей

позициях WHERE SALARY LIKE ' 2_%_%' Любое значение, начинающееся с 2 и состоящее

                                                            как минимум из трех символов

WHERE SALARY LIKE '%2'           Любое значение, заканчивающееся 2 

WHERE SALARY LIKE '_2%3'       Любое значение, имеющее 2 во второй позиции и

                                                           заканчивающееся 3

WHERE SALARY LIKE '2__3'        Любое значение длиной 5 символов, начинающееся с 2 и 

                                                           заканчивающееся 3

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

SELECT PROD_DESC

FROM PRODUCTS_TBL

WHERE PROD_DESC LIKE '%Ы';

PROD_DESC

КОСТЮМ ВЕДЬМЫ 

ПЛАСТИКОВЫЕ ТЫКВЫ 

ИСКУССТВЕННЫЕ ПАРАФИНОВЫЕ ЗУБЫ 

ТЫКВЕННЫЕ КОНФЕТЫ

4 строки выбраны.

В следующем примере выбираются описания товаров с буквой "Ы" во второй позиции.

SELECT PROD_DESC

FROM PRODUCTS_TBL

WHERE PROD_DESC LIKE '_Ы%';

PROD_DESC 

ТЫКВЕННЫЕ КОНФЕТЫ 

1 строка выбрана.

  EXISTS

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

Пример______________________________Значение______

WHERE EXISTS (SELECT EMP_ID         Проверка наличия EMP_ID со значени-

FROM EMPLOYEE_TBL                           ем 333333333 в таблице EMPLOYEE_TBL 

WHERE EMPLOYEE_ID = '333333333') -

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

SELECT COST

FROM PRODUCTSJTBL

WHERE EXISTS ( SELECT COST

FROM PRODUCTS_TBL

WHERE COST > 100 );

О строк выбраны.

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

SELECT COST

FROM PRODUCTSJTBL

WHERE EXISTS ( SELECT COST

FROM PRODUCTS_TBL

WHERE COST < 100 );

COST

--------

29.99

7.75

1.1

14.5

10

1.35

1.45

1.05

4.95

5.95

59.99

11 строк выбраны. 

Теперь показаны цены для всех тех строк таблицы, для которых эти цены меньше 100.

  UNIQUE

Ключевое слово UNIQUE используется для проверки строк заданной таблицы на уникальность (т. е. отсутствие повторений).

Пример_____________________________Значение____________

WHERE UNIQUE (SELECT SALARY   Проверка SALARY на наличие повторе-

FROM EMPLOYEEJTBL                         ний 

WHERE EMPLOYEE_ID = '333333333')

  ALL И ANY

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

Пример_____________________________Значение___________

WHERE SALARY > ALL (SELECT SALARY     Проверка значения SALARY на предмет 

FROM EMPLOYEE_TBL                                     превышения им всех значений зарпла-

WHERE CITY - ' INDIANAPOLIS ' )                   ты служащих из Индианаполиса

SELECT *

FROM PRODUCTS_TBL

WHERE COST > ALL ( SELECT COST

FROM PRODUCTS_TBL

WHERE COST < 10 ); 

PROD_ID           PROD_DESC          COST

11235   КОСТЮМ ВЕДЬМЫ               29.99

90      ФОНАРИ                       14.5

15      КОСТЮМЫ В АССОРТИМЕНТЕ       10

2345    ПОЛОЧКА ИЗ ДУБА              59.99

4 строки выбраны.

В этом выводе представлены все четыре записи для товаров, стоимость которых превышает стоимость товаров стоимостью меньше 10.

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

Пример___________________________________Значение___________

WHERE SALARY > ANY (SELECT SALARY    Проверка значения SALARY на Пред-

FROM EMPLOYEE_TBL                                     мет  превышения им какого-нибудь из

 WHERE CITY = 'INDIANAPOLIS')                    значений зарплаты для служащих из

                                                                               Индианаполиса

SELECT *

FROM PRODUCTS_TBL

WHERE COST > ANY ( SELECT COST

FROM PRODUCTS_TBL

WHERE COST < 10 );

PROD_ID          PROD_DESC              COST

11235   КОСТЮМ ВЕДЬМЫ                  29.99

222     ПЛАСТИКОВЫЕ ТЫКВЫ               7.75

13      ИСКУССТВЕННЫЕ ПАРАФИНОВЫЕ ЗУБЫ   1.1

90      ФОНАРИ                          14.5

15      КОСТЮМЫ В АССОРТИМЕНТЕ            10

9       СЛАДКАЯ КУКУРУЗА                1.35

6       ТЫКВЕННЫЕ КОНФЕТЫ               1.45

119     МАСКИ В АССОРТИМЕНТЕ            4.95

1234    ЦЕПОЧКА ДЛЯ КЛЮЧЕЙ              5.95

2345    ПОЛОЧКА ИЗ ДУБА                59.99

10 строк выбраны.

Этот запрос возвращает больше строк, чем предыдущий запрос с использованием ALL, поскольку в данном случае стоимость должна превышать стоимость какого-нибудь товара стоимостью, меньшей 10. Единственной не показанной записью оказалась запись для товара стоимостью 1.05, для которого не нашлось товара с меньшей стоимостью из тех, что стоят меньше 10.

  Операции конъюнкции и дизъюнкции

Как быть, если необходимо использовать несколько условий, чтобы сузить набор возвращаемых запросом данных? Нужно скомбинировать условия с помощью операций конъюнкции и дизъюнкции. Эти операции задаются с помощью ключевых слов AND и OR.

  AND

Ключевое слово AND позволяет связать логическим умножением два условия в выражении ключевого слова WHERE. Чтобы оператор SQL, представляющий транзакцию или запрос, выполнил заданное действие, оба связанные ключевым словом AND условия должны возвратить TRUE.

Пример_________________________________Значение______________

WHERE EMPLOYEE_ID = '333333333'      Значение EMPLOYEE_ID должно быть

AND SALARY = '20000'                               равным 333333333, а значение SALARY

                                                                        должно быть равным 20000

SELECT *

FROM PROOCTS_TBL 

WHERE COST > 10 

AND COST < 30;

PROD_ID       PROD_DESC      COST

11235      КОСТЮМ ВЕДЬМЫ     29.99 

90         ФОНАРИ            14.5

2 строки выбраны.

В данном случае требуется, чтобы для показанных товаров стоимость была больше 10 и меньше 30.

SELECT *

FROM PRODUCTS_TBL 

WHERE PROD_ID = '7725' 

 AND PROD_ID = '2345';

О строк выбраны.

Здесь вывод не содержит данных, поскольку каждая строка данных имеет только один код товара.

  OR

Ключевое слово OR позволяет связать логическим сложением условия в выражении ключевого слова WHERE. Чтобы оператор SQL, представляющий транзакцию или запрос, выполнил заданное действие, хотя бы одно из связанных ключевым словом AND условий должно возвратить TRUE.

Пример______________________Значение___________________ 

WHERE SALARY = ' 20000 '    Значение SALARY должно быть равным ли-

OR SALARY = '30000'              бо 20000, либо 30000

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

SELECT *

FROM PRODUCTS_TBL 

WHERE PROD_ID = '7725' 

OR PROD_ID = '2345';

PROD_ID PROD_DESC COST

2345 ПОЛОЧКА ИЗ ДУБА 59.99

1 строка выбрана.

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

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

В следующем примере использовано одно ключевое слово AND и два OR. Обратите внимание на размещение скобок.

SELECT *

FROM PRODUCTS_TBL

WHERE COST >10

AND ( PROD_ID = '222'

OR PROD_ID = '90'

OR PROD_ID = '11235' ) ;

PROD_ID       PROD_DESC           COST

11235    КОСТЮМ ВЕДЬМЫ           29.99 

90       ФОНАРИ                  14.5

2 строки выбраны.

В этом примере стоимость должна превышать 10, а код товара должен быть любым из трех указанных. В вывод не попала строка для товара с кодом 222 из-за стоимости, которая оказалась не больше 10.

  Отрицание условий с помощью операции отрицания

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

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

• NOT BETWEEN 

• IS NOT NULL

• NOT IN 

• NOT EXISTS

• NOT LIKE 

• NOT UNIIQUE

Все эти возможности будут рассмотрены в следующих разделах.

  Неравенство

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

Пример_________________________Значение____________

WHERE SALARY о '20000'              Зарплата не равна 20000 

WHERE SALARY != '20000'            Зарплата не равна 20000

Во втором случае для отрицания равенства используется восклицательный знак. В некоторых реализациях SQL в дополнение к стандартному знаку неравенства о используется восклицательный знак ! в совокупности со знаком = как отрицание равенства.

Проверьте по документации используемой вами реализации SQL, допускается ли в ней применение восклицательного знака для отрицания равенства.

  NOT BETWEEN

Отрицание операции BETWEEN используется следующим образом.

Пример_____________________Значение___________________

WHERE SALARY NOT BETWEEN         Зарплата не должна находиться в диапазоне от 

'20000' AND '30000'                                  20000 до 30000, включая крайние значения

                                                                   диапазона

SELECT *

FROM PRODUCTS_TBL

WHERE NOT BETWEEN 5.95 AND 14.5;

PROD_ID            PROD_DESC                      COST

11235    КОСТЮМ ВЕДЬМЫ                          29.99

13       ИСКУССТВЕННЫЕ ПАРАФИНОВЫЕ ЗУБЫ           1.1

9        СЛАДКАЯ КУКУРУЗА                        1.35

6        ТЫКВЕННЫЕ КОНФЕТЫ                       1.45

87       ПЛАСТИКОВЫЕ ПАУКИ                       1.05

119      МАСКИ В АССОРТИМЕНТЕ                    4.95

2345     ПОЛОЧКА ИЗ ДУБА                        59.99

7 строк выбраны.

Не забывайте о том, что BETWEEN предполагает включение в рассмотрение границ диапазона. Именно поэтому в данном примере строки со значениями 5.95 и 14 .5 выведены не были.

  NOT IN

Отрицанием IN является NOT IN. В следующем примере любое из возвращенных значений зарплаты не должно равняться какому-нибудь значению из заданного списка.

  Пример________________________________Значение______

WHERE SALARY NOT IN ('20000',             Зарплата не должна равняться 20000, 30000 

'30000', '40000')                                             или  40000

SELECT *

FROM PRODUCTSJTBL

WHERE PROD_ID NOT IN (•13','9•,'87','119');

PROD_ID        PROD_DESC              COST

11235   КОСТЮМ ВЕДЬМЫ                 29.99

222     ПЛАСТИКОВЫЕ ТЫКВЫ              7.75

90      ФОНАРИ                         14.5

15      КОСТЮМЫ В АССОРТИМЕНТЕ           10

6       ТЫКВЕННЫЕ КОНФЕТЫ              1.45

1234    ЦЕПОЧКА ДЛЯ КЛЮЧЕЙ             5.95

2345    ПОЛОЧКА ИЗ ДУБА               59.99

7 строк выбраны.

В данном случае не показаны строки для товаров с кодами из списка, указанного после NOT IN.

  NOT LIKE

Ключевое слово NOT LIKE является отрицанием операции подстановки LIKE для нахождения значений, не похожих на заданное. Вот несколько примеров.

Пример___________________________________Значение __________________

WHERE SALARY NOT LIKE '200%'        Любое значение, не начинающееся с 200 

WHERE SALARY NOT LIKE '%200%'    Любое значение, не имеющее 200 ни в какой

                                                                     позиции

WHERE SALARY NOT LIKE '_00%'        Любое значение, не имеющее 00 во второй и

                                                                     третьей позициях

WHERE SALARY NOT LIKE '2_%_%'     Любое значение, не начинающееся с 2 и 

                                                                     состоящее как минимум из трех символов

SELECT PROD_DESC

FROM PRODUCTS_TBL

WHERE PROD_DESC NOT LIKE 'П%';

PROD_ID        PROD_DESC              COST

11235   КОСТЮМ ВЕДЬМЫ                29.99

13      ИСКУССТВЕННЫЕ ПАРАФИНОВЫЕ ЗУБЫ 1.1

90      ФОНАРИ                        14.5

15      КОСТЮМЫ В АССОРТИМЕНТЕ          10

9       СЛАДКАЯ КУКУРУЗА              1.35

6       ТЫКВЕННЫЕ КОНФЕТЫ             1.45

119     МАСКИ В АССОРТИМЕНТЕ          4.95

1234    ЦЕПОЧКА ДЛЯ КЛЮЧЕЙ            5.95

8 строк выбраны. В этом примере выбираются описания товаров, не начинающиеся на букву "П".

 

  IS NOT NULL

Ключевое слово IS NOT NULL обозначает отрицание операции is NULL и используется, когда нужно убедиться, что заданное значение не является пустым.

Пример__________________________Значение____________________

 WHERE SALARY is NOT NULL    Выбрать только строки с непустыми значениями.

SELECT EMP_XD, LAST_NAME, FIRST_NAME, PAGER

FROM EMPLOYEEJTBL

WHERE PAGER IS NOT NULL;

EMP_ID    LAST_NAME    FIRST_NAME    PAGER

213764555 GLASS        BRANDON    3175709980 

313782439 GLASS        JACOB      8887345678

2 строки выбраны.

  NOT EXISTS

Ключевое слово NOT EXISTS используется как отрицание EXISTS.

Пример___________________________Значение_________________

WHERE NOT EXISTS (SELECT EMP_ID     Проверка отсутствия ЕМР ID со зна

FROM EMPLOYEE TBL                                 чением 333333333333  в таблице

WHERE EMPLOYEE_ID = -333333333')       EMPLOYEE_TBL

SELECT MAX(COST)

FROM PRODUCTS_TBL

WHERE NOT EXISTS ( SELECT COST

FROM PRODOCTS_TBL

WHERE COST > 100 ) ; 

MAX(COST)

---------

    59.99

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

  NOT UNIQUE

Ключевое слово NOT UNIQUE используется как отрицание UNIQUE.

Пример_____________________________________Значение______

WHERE NOT UNIQUE (SELECT SALARY   Проверка SALARY на наличие неуни-

FROM EMPLOYEE_TBL)                                кальных значений

  Арифметические операции

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

• + (сложение); 

• * (умножение);

• - (вычитание); 

• / (деление).

 

  Сложение

Сложение представлено знаком "+".

Пример_____________________________Значение__________________

SELECT SALARY + BONUS           Значение SALARY складывается со значе-

FROM EMPLOYEE_PAY_TBL;      нием BONUS  для каждой строки данных

SELECT SALARY FROM EMPLOYEE_PAY_TBL Выбор строк, ДЛЯ которых сумма 

WHERE SALARY + BONUS > '40000';                    SALARY И BONUS Превышает 40000

  Вычитание

Вычитание представлено знаком "-".

Пример________________________Значение________________

SELECT SALARY - BONUS          Значение BONUS вычитается из зна-

FROM EMPLOYEE_PAY_TBL;     чения SALARY

SELECT SALARY FROM EMPLOYEE_PAY_TBL Выбор строк, для которых разность 

WHERE SALARY - BONUS > '40000';                    SALARY И BONUS Превышает 40000

  Умножение

Умножение представлено знаком "*".

Пример_______________________Значение_______________________

SELECT SALARY * 10                     Значение SALARY умножается на 10

FROM EMPLOYEE_PAY_TBL;

SELECT SALARY FROM EMPLOYEE_PAY_TBL    Выбор строк, для которых значение

WHERE SALARY * 10 > '40000',- SALARY,              умноженное на 10, превышает

                                                                                        40000

В следующем примере текущее значение зарплаты умножается на 1.1, что означает увеличение на 10%.

SELECT EMP_ID, PAY_RATE, PAY_RATE * 1.1 

FROM EMPLOYEE_PAY_TBL 

WHERE PAY_RATE IS NOT NULL;

EMP_ID     PAY_RATE     PAY_RATE*1.1

44234688Э    14.75       16.225

220984332    11          12.1

443679012    15          16.5

3 строки выбраны.

  Деление

Деление представлено знаком "/" (косой чертой).

Пример________________________________Значение_______

SELECT SALARY /10                Значение SALARY делится на 10

FROM EMPLOYEE_PAY_TBL;

SELECT SALARY FROM EMPLOYEE_PAY_TBL    Выбор строк, для которых значение

WHERE SALARY / 10 > '40000';                                 SALARY, деленное на 10, превышает 40000

  Комбинирование арифметических операций

Арифметические операции можно комбинировать. Вспомните о порядке операций из курса элементарной математики. Сначала выполняются операции умножения и деления, а затем — операции сложения и вычитания. Пользователь может управлять порядком выполнения операций в выражении только с помощью скобок. Заключенное в скобки выражение означают необходимость рассматривать выражение как единый блок.

Порядок выполнения операций (приоритет операций) задает порядок, в котором обрабатываются выражения в математических выражениях или встроенных функциях SQL.

Выражение___________Результат___________

1 + 1*5                                 6 

(1 + 1) * 5                           10 

10-4/2+1                              9 

(10 - 4) / (2 + 1)                   2

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

Выражение___________Результат_________

4*6/2                                      12 

(4 * 6) / 2                               12 

4 * (6 / 2)                               12

Вот еще несколько примеров.

SELECT SALARY * 10 + 1000

FROM EMPLOYEE_PAY_TBL

WHERE SALARY > 20000;

SELECT SALARY / 52 + BONUS

FROM EMPLOYEE_PAY_TBL;

SELECT (SALARY - 1000 + BONUS) / 52 * 1.1

FROM EMPLOYEE_PAY_TBL;

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

SELECT SALARY

FROM EMPLOYEE_PAY_TBL

WHERE SALARY < BONUS *3+10/2-50;

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

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

  Резюме

Вы ознакомились с примерами использования различного типа операций в SQL. Вы узнали, что операции могут использоваться по отдельности и в комбинации одна с другой, включая и операции конъюнкции и дизъюнкции AND и OR. Вы рассмотрели основные арифметические операции — сложение, вычитание, умножение и деление. Операции сравнения используются для проверки равенства, неравенства, отношений "больше" и "меньше". К логическим операциям относятся BETWEEN, IN, LIKE, EXIST, ANY и ALL. Вы уже должны знать, как добавить элементы в условия, заданные в операторах SQL, чтобы извлечь из базы данных именно те данные, которые вам нужны.

  Вопросы и ответы

Можно ли иметь несколько ключевых слов AND в выражении, заданном ключевым словом WHERE?

Да. На самом деле любая из операций может использоваться несколько раз. Например,

SELECT SALARY

FROM EMPLOYEE_PAY_TBL

WHERE SALARY > 20000

AND BONUS BETWEEN 1000 AND 3000

AND POSITION = 'VICE PRESIDENT';

Что будет, если в выражении ключевого слова WHERE поместить некоторое значение типа NUMBER в кавычки?

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

  Практикум

Задания практических занятий разделены на тесты и упражнения. Тесты пред-нззнзчены для проверки общего уровня понимания рассмотренного материзлз. Упрзжнения дзют возможность применить нз прзктике идеи, обсуждавшиеся в ходе текущего урока, в комбинации с идеями из предыдущих уроков. Мы рекомендуем ответить на тестовые вопросы и выполнить упражнения прежде, чем продолжать дальнейшее чтение книги. Ответы можно проверить по Приложению Б, "Ответы".

  Тесты

1. Верно ли следующее утверждение: "При использовании ключевого слова OR оба условия должны возвращэть TRUE?"

2. Верно ли следующее утверждение: "При использовании ключевого слова IN данное значение должно совпадать со всемиуказанными в списке?"

3. Верно ли следующее утверждение: "Ключевое слово AND можно использовать в выражениях ключевых слов SELECT и WHERE?"

4. Какие ошибки (если они есть вообще) допущены в следующих операторах SELECT?

а. SELECT SALARY

FROM EMPLOYEE_PAY_TBL

WHERE SALARY BETWEEN 20000, 30000;

6. SELECT SALARY + DATE_HIRE FROM EMPLOYEE_PAYJTBL;

B. SELECT SALARY, BONUS FROM EMPLOYEE_PAY_TBL WHERE DATE_HIRE BETWEEN 22-SEP-99 AND 23-NOV-99 AND POSITION = 'ПРОДАЖА' OR POSITION = 'МАРКЕТИНГ' AND EMPLOYEE_ID LIKE '%55%;

  Упражнения

1. Рассмотрите следующую таблицу CUSTOMERJTBL.

DESCRIBE CUSTQMER_TBL

Имя NULL? Тип

CUST_ID NOT NULL VARCHAR2(10)

CUST_NAME NOT NULL VARCHAR2(30)

CUST_ADDRESS NOT NULL VARCHAR2(20)

CUST_CITY NOT NULL VARCHAR2(12)

CUST_STATE NOT NULL CHAR(2)

CUST_ZIP NOT NULL CHAR(5)

CUST_PHONE NUMBER(10)

CUST_FAX NUMBER(10)

Запишите оператор SELECT, возвращающий коды клиентов (CUST_ID) и их имена (CUST_NAME), отсортированные по алфавиту, для клиентов с именами на "А" и "В", проживающих в штатах Индиана, Огайо, Мичиган и Иллинойс,

2. Рассмотрите следующую таблицу PRODUCTSJTBL.

DESCRIBE PRODUCTS_TBL

Имя NULL? Тип

PROD_ID NOT NULL VARCHAR2(10)

PROD_DESC NOT NULL VARCHAR2(25)

COST NOT NULL NUMBER(6,2)

Запишите оператор SELECT, возвращающий коды товара (PROD_ID), описание товара (PROD_DESC) и цену товара (COST). Ограничьте цену товара диапазоном от $1.00 до $12.50.