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

Несвязанные подзапросы

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


Читайте также:
  1. Подзапросы
  2. Подзапросы в условиях фильтрации
  3. Подзапросы как генераторы выражений
  4. Подзапросы, возвращающие несколько столбцов
  5. Подзапросы, ориентированные на задачи

 

Приведенный ранее в этой главе пример является несвязанным подза_ просом. Он может выполняться самостоятельно и не использует ниче_ го из содержащего выражения. Большинство подзапросов являются несвязанными. Только выражения update или delete часто используют связанные подзапросы (более подробно об этом позже). Упомянутый пример не только является несвязанным, но и возвращает таблицу, со_ стоящую всего из одной строки и одного столбца. Такой тип подзапро_ са называется скалярным подзапросом (scalar subquery), и его можно помещать в любую часть условия, использующего обычные операторы (=, <>, <, >, <=, >=). Следующие примеры показывают применение ска_ лярного подзапроса в условии неравенства:

 

mysql> SELECT account_id, product_cd, cust_id, avail_balance
_> FROM account          
_> WHERE open_emp_id <> (SELECT e.emp_id  
_> FROM employee e INNER JOIN branch b  
_> ON e.assigned_branch_id = b.branch_id  
_> WHERE e.title = 'Head Teller' AND b.city = 'Woburn');
+____________+____________+_________+_______________+
| account_id | product_cd | cust_id | avail_balance |
+____________+____________+_________+_______________+
|   | CHK |   | 1057.75 |
|   | MM |   | 2212.50 |
|   | CHK |   | 534.12 |
|   | SAV |   | 767.77 |
|   | MM |   | 5487.09 |
|   | CHK |   | 2237.97 |
|   | CHK |   | 122.37 |
|   | CD |   | 10000.00 |
|   | CHK |   | 3487.19 |
|   | SAV |   | 387.99 |
|   | CHK |   | 125.67 |
|   | MM |   | 9345.55 |
|   | CD |   | 1500.00 |
|   | CHK |   | 23575.12 |
|   | BUS |   | 0.00 |
|   | CHK |   | 38552.05 |
|   | SBL |   | 50000.00 |

 

Несвязанные подзапросы  
   

 

+____________+____________+_________+_______________+ 17 rows in set (0.00 sec)

 

Этот запрос возвращает данные по всем счетам, которые были откры_ ты операционистом отделения Woburn, который не является старшим (подзапрос написан в предположении, что в отделении только один старший операционист). Подзапрос в этом примере немного сложнее, чем в предыдущем, – он соединяет две таблицы и включает два усло_ вия фильтрации. Подзапросы могут быть простыми или сложными на_ столько, насколько требуется. Они могут использовать любые из всех доступных блоков запроса (select, from, where, group by, having, order by).

 

Если при использовании в условии равенства подзапрос возвращает более одной строки, будет сформирована ошибка. Например, если пре_ дыдущий запрос изменить так, чтобы по подзапросу возвращались все операционисты отделения Woburn, а не только старший, будет полу_ чена следующая ошибка:

 

mysql> SELECT account_id, product_cd, cust_id, avail_balance
_> FROM account
_> WHERE open_emp_id <> (SELECT e.emp_id
_> FROM employee e INNER JOIN branch b
_> ON e.assigned_branch_id = b.branch_id
_> WHERE e.title = 'Teller' AND b.city = 'Woburn');

 

ERROR 1242 (21000): Subquery returns more than 1 row

Если выполнить только подзапрос, результаты будут такими:

 

mysql> SELECT e.emp_id    
_> FROM employee e INNER JOIN branch b  
_> ON e.assigned_branch_id = b.branch_id
_> WHERE e.title = 'Teller' AND b.city = 'Woburn';
         

 

+________+ | emp_id | +________+

 

| 11 |

 

| 12 |

 

+________+

 

2 rows in set (0.02 sec)

 

Причина сбоя основного запроса в том, что выражение (open_emp_id) не может быть приравнено набору выражений (emp_id 11 и 12). Другими словами, единичный элемент не может приравниваться множеству. В следующем разделе вы увидите, как решить эту проблему с помо_ щью другого оператора.

 


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


<== предыдущая страница | следующая страница ==>
Типы подзапросов| Gt; FROM employee

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