Логические операторы
В этой лекции мы рассмотрим, как выбрать данные на основе условий SQL, представленных с помощью булевых (логических) операторов.
- AND
- OR
- NOT
Использовать их очень просто. Ниже показан оператор SELECT, который выводит имена сотрудников, которые получают более 70000, но меньше 90000.
SELECT f_name, l_name from employee_data where salary > 70000 AND salary < 90000;
На рис. 6.1. приведен результат запроса.
Давайте выведем список сотрудников, фамилии которых начинаются с буквы К или Л.
SELECT l_name from employee_data where l_name like 'К%' OR l_name like 'Л%';
На рис. 6.2. приведен результат запроса.
Вот более сложный пример: список имен и возраста сотрудников, фамилии которых не начинаются с К или Л, и которые младше 30 лет.
SELECT f_name, l_name , age from employee_data where (l_name not like 'К%' OR l_name not like 'Л%') AND age < 30;
На рис. 6.3. приведен результат запроса.
Рис. 6.3. Список имен и возраста сотрудников, фамилии которых не начинаются с К или Л, и которые младше 30 лет
Обратите внимание на использование скобок в представленном выше операторе. Скобки предназначены для выделения различных логических условий и удаления двусмысленностей.
Оператор NOT поможет при поиске всех сотрудников, которые не являются программистами. (Программисты включают старших программистов, программистов мультимедиа и программистов).
SELECT f_name, l_name, title from employee_data where title NOT LIKE "%программист%";
На рис. 6.4. приведен результат запроса.
И последний пример перед упражнениями.
Показать всех сотрудников со стажем работы в компании более 3 лет, которые старше 30 лет.
select f_name, l_name from employee_data where yos > 3 AND age > 30;
На рис. 6.5. приведен результат запроса.
Задания
1. Вывести имена и фамилии всех сотрудников, которые получают зарплату не более 90000 и не являются программистами, старшими программистами или программистами мультимедиа.
2. Что делает следующий оператор?
SELECT l_name, f_name from employee_data where title NOT LIKE '%продавец%' AND age < 30;
3. Вывести все идентификационные номера и имена сотрудников в возрасте между 32 и 40 годами.
4. Выберите имена всех сотрудников в возрасте 32 лет, которые не являются программистами.
Возможные решения
-
mysql> select f_name, l_name from employee_data -> where salary <= 90000 -> AND title NOT LIKE '%программист%';
- Команда выводит имена (фамилию, за которой следует имя) сотрудников, которые не работают в отделе продаж и моложе 30 лет.
mysql> SELECT l_name, f_name from employee_data -> where title NOT LIKE '%продавец%' -> AND age < 30;
-
mysql> select emp_id, f_name, l_name from -> employee_data where age > 32 -> and age < 40;
-
mysql> select f_name, l_name from employee_data -> where age = 32 AND -> title NOT LIKE '%программист%';