Логические операторы
Операторы IN и BETWEEN
Чтобы найти сотрудников, которые являются разработчиками Web или системными администраторами, можно использовать оператор SELECT следующего вида:
SELECT f_name, l_name, title from
-> employee_data where
-> title = 'разработчик Web' OR
-> title = 'системный адм.';На рис. 6.6. приведен результат запроса.
В SQL имеется более простой способ сделать это с помощью оператора IN (в множестве). Его использование не представляет никаких трудностей.
SELECT f_name, l_name, title from
-> employee_data where title
-> IN ('разработчик Web', 'системный адм.');Результат будет аналогичен рис. 6.6.
Использование NOT перед IN позволяет вывести данные, которые не входят в множество, определяемое условием IN. Следующий оператор выводит список сотрудников, которые не занимают должность программиста или системного администратора.
SELECT f_name, l_name, title from
-> employee_data where title NOT IN
-> ('программист', 'системный адм.');Оператор BETWEEN используется для определения целочисленных границ. Поэтому вместо age >= 32 AND age <= 40 можно использовать age BETWEEN 32 AND 40.
select f_name, l_name, age from
-> employee_data where age BETWEEN
-> 32 AND 40;На рис. 6.7. приведен результат запроса.
NOT также можно использовать вместе с BETWEEN, как в следующем операторе, который выводит сотрудников, зарплата которых меньше 90000 или больше 150000.
select f_name, l_name, salary
-> from employee_data where salary
-> NOT BETWEEN
-> 90000 AND 150000;Задания
1. Найдите всех сотрудников, которые занимают должность "старший программист" и "программист мультимедиа".
2. Выведите список имен сотрудников, зарплата которых составляет от 70000 до 90000.
3. Что делает следующий оператор?
SELECT f_name, l_name, title from
employee_data where title NOT IN
('программист', 'старший программист',
'программист мультимедиа');4. Вот более сложный оператор, который объединяет BETWEEN и IN. Что он делает?
SELECT f_name, l_name, title, age
from employee_data where
title NOT IN
('программист', 'старший программист',
'программист мультимедиа') AND age
NOT BETWEEN 28 and 32;Возможные решения
-
mysql> select l_name, f_name, title -> from employee_data where -> title IN -> ('старший программист', -> 'программист мультимедиа'); -
2. mysql> select f_name, l_name, salary from -> employee_data where salary BETWEEN -> 70000 AND 90000; - Выводятся имена и должности всех, кто не является программистом.
mysql> SELECT f_name, l_name, title from -> employee_data where title NOT IN -> ('программист', 'старший программист', -> 'программист мультимедиа'); - Этот оператор выводит список тех, кто не является программистом, и которые младше 28 или старше 32 лет.
mysql> SELECT f_name, l_name, title, age from -> employee_data where title NOT IN -> ('программист', 'старший программист', -> 'программист мультимедиа') AND -> age NOT BETWEEN 28 AND 32;

