Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Gt; FROM employee

Сравнение неявных и явных групп | Gt; FROM account | Использование выражений | Обработка значений Null | Группировка по нескольким столбцам | Gt; SUM(avail_balance) tot_balance _> FROM account | FROM account | Gt; FROM account | Gt; FROM account | Типы подзапросов |


Читайте также:
  1. Gt; employee.lname, department.name dept_name
  2. Gt; FROM employee e1 INNER JOIN employee e2
  3. Mysql> SELECT emp_id, fname, lname, start_date, title _> FROM employee

 

_> WHERE emp_id IN (SELECT superior_emp_id _> FROM employee);


 

Несвязанные подзапросы        
 
+________+_________+___________+____________________+
| emp_id | fname | lname | title |
+________+_________+___________+____________________+
|   | Michael | Smith | President |
|   | Robert | Tyler | Treasurer |
|   | Susan | Hawthorne | Operations Manager |
|   | Helen | Fleming | Head Teller |
|   | Paula | Roberts | Head Teller |
|   | John | Blake | Head Teller |
|   | Theresa | Markham | Head Teller |
+________+_________+___________+____________________+
  rows in set (0.01 sec)    

 

Подзапрос возвращает ID всех сотрудников, имеющих кого_то в под_ чинении, а основной запрос извлекает для этих сотрудников четыре столбца таблицы employee. Вот результаты подзапроса:

 

mysql> SELECT superior_emp_id

_> FROM employee;

 

+_________________+ | superior_emp_id | +_________________+

 

| NULL |

 

|   |
|   |
|   |
|   |
|   |
|   |
|   |
|   |
|   |
|   |
|   |
|   |
|   |
|   |
|   |
|   |
|   |

+_________________+

 

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 | +________+__________+__________+________________+

 

|   | Susan | Barker | Vice President |
|   | John | Gooding | Loan Manager |
|   | Chris | Tucker | Teller |
|   | Sarah | Parker | Teller |
|   | Jane | Grossman | Teller |
|   | Thomas | Ziegler | Teller |
|   | Samantha | Jameson | Teller |
|   | Cindy | Mason | Teller |
|   | Frank | Portman | Teller |
|   | Beth | Fowler | Teller |
|   | Rick | Tulman | Teller |

 

+________+__________+__________+________________+ 11 rows in set (0.00 sec)

 

Этот запрос находит всех сотрудников, которые никем не руководят. Здесь потребовалось добавить в подзапрос условие фильтрации, чтобы гарантировать отсутствие значений null в возвращаемой подзапросом таблице. В следующем разделе объясняется, почему в данном случае понадобился этот фильтр.

 


Дата добавления: 2015-08-17; просмотров: 48 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Несвязанные подзапросы| Оператор all

mybiblioteka.su - 2015-2024 год. (0.019 сек.)