Логические операторы
Операторы 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;