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

«Меньше» и «больше»

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

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

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

В следующем примере обратите внимание на то, что значение 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

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

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

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

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

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

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

  • IS NULL

  • BETWEEN 

  • UNIQUE

  • IN 

  • LIKE

  • EXISTS

  • ALL И ANY

IS NULL

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

Вот пример проверки равенства значения значению 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

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

SELECT EMP_ID, LAST_NAME, FIRST_NAME, PAGER 

FROM EMPLOYEE_TBL 

WHERE PAGER = NULL;

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

BETWEEN

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

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

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

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

SELECT *

FROM PRODUCTS_TBL  WHERE COST BETWEEN 5.95 AND 14.5;

PROD_ID       PROD_DESC         COST

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

90      ФОНАРИ                  14.5

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

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

 

Обратите внимание на то, что в вывод включены крайние значения 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

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

LIKE

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

  1. знак процента ( % );

  2. знак подчеркивания ( _ ).

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

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

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

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

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

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

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

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

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

SELECT PROD_DESC FROM PRODUCTS_TBL WHERE PROD_DESC LIKE '_Ы%';

PROD_DESC 

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

UNIQUE

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

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

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

FROM EMPLOYEE_TBL                         ний 

WHERE EMPLOYEE_ID = '333333333')

EXISTS

Предикат exists имеет следующий синтаксис:

<exists predicate> ::= EXISTS <subquery>

Значением этого предиката всегда является true или false, и это значение равно true тогда и только тогда, когда результат вычисления подзапроса не пуст.

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

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

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

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

WHERE EMPLOYEE_ID = '333333333')

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

SELECT COST

FROM PRODUCTS_TBL

WHERE EXISTS ( SELECT COST FROM PRODUCTS_TBL WHERE COST > 100 );

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

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

SELECT COST

FROM PRODUCTS_TBL

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

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

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

В этом выводе представлены все четыре записи для товаров, стоимость которых превышает стоимость товаров стоимостью меньше 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

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