Изучаем sql



Pdf көрінісі
бет154/261
Дата28.07.2022
өлшемі1,6 Mb.
#147825
1   ...   150   151   152   153   154   155   156   157   ...   261
Байланысты:
Изучаем SQL ( PDFDrive )

SELECT superior_emp_id
> FROM employee;
++
| superior_emp_id |
++
| NULL |
| 1 |
| 1 |
| 3 |
| 4 |
| 4 |
| 4 |
| 4 |
| 4 |
| 6 |
| 6 |
| 6 |
| 10 |
| 10 |
| 13 |
| 13 |
| 16 |
| 16 |
++
18 rows in set (0.00 sec)
Как видите, ID некоторых сотрудников встречаются по нескольку раз,
поскольку у них более одного подчиненного. Это не оказывает нега
тивного влияния на результаты основного запроса, потому что совер
шенно неважно, сколько раз встречается ID сотрудника в результи
рующем наборе подзапроса. Конечно, если вас беспокоят дублирую
щие значения в возвращаемой подзапросом таблице, можно добавить
в блок 
select
подзапроса ключевое слово 
distinct
, но это никак не отра
зится на результирующем наборе основного запроса.


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> 


Достарыңызбен бөлісу:
1   ...   150   151   152   153   154   155   156   157   ...   261




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет