174
Глава 9. Подзапросы
Можно проверять не только наличие значения в наборе значений, но
и его отсутствие. Делается это с помощью оператора
not
in
(нет в). Вот
другой вариант предыдущего запроса с оператором
not
in
вместо
in
:
mysql>
SELECT emp_id, fname, lname, title
> FROM employee
> WHERE emp_id NOT IN (SELECT superior_emp_id
> FROM employee
> WHERE superior_emp_id IS NOT NULL);
+++++
| emp_id | fname | lname | title |
+++++
| 2 | Susan | Barker | Vice President |
| 5 | John | Gooding | Loan Manager |
| 7 | Chris | Tucker | Teller |
| 8 | Sarah | Parker | Teller |
| 9 | Jane | Grossman | Teller |
| 11 | Thomas | Ziegler | Teller |
| 12 | Samantha | Jameson | Teller |
| 14 | Cindy | Mason | Teller |
| 15 | Frank | Portman | Teller |
| 17 | Beth | Fowler | Teller |
| 18 | Rick | Tulman | Teller |
+++++
11 rows in set (0.00 sec)
Этот запрос находит всех сотрудников, которые никем
не
руководят.
Здесь потребовалось добавить в подзапрос условие фильтрации, чтобы
гарантировать отсутствие значений
null
в возвращаемой подзапросом
таблице. В следующем разделе объясняется, почему в данном случае
понадобился этот фильтр.
Оператор all
Оператор
in
используется для поиска выражения в наборе выражений,
а оператор
all
(все) позволяет проводить сравнение одиночного значе
ния с каждым значением набора. Для построения такого условия, по
мимо оператора
all
, понадобится один из операторов сравнения (
=
,
<>
,
<
,
>
и т. д.). Например, следующий запрос находит всех сотрудников,
ID которых не равен ни одному из ID руководителей:
mysql>
Достарыңызбен бөлісу: