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

Оператор all

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


Читайте также:
  1. Do оператор while (вираз);
  2. For (вираз1; вираз2; вираз3) оператор;
  3. If (вираз) оператор;
  4. Quot; Число, месяц, часы, минуты.Дежурство принял ДСП ……………..(подпись)Оператор ………………………..(подпись)Дежурство сдал ДСП ……………….(подпись)Оператор ………………………..(подпись)".
  5. Байланыс операторларының жедел-іздестіру қызметін жүзеге асыратын органдармен өзара
  6. Взаимодействия в группе операторов
  7. Властивості спряжених операторів.

 

Оператор in используется для поиска выражения в наборе выражений, а оператор all (все) позволяет проводить сравнение одиночного значе_ ния с каждым значением набора. Для построения такого условия, по_ мимо оператора all, понадобится один из операторов сравнения (=, <>, <, > и т. д.). Например, следующий запрос находит всех сотрудников, ID которых не равен ни одному из ID руководителей:

 

mysql> SELECT emp_id, fname, lname, title
_> FROM employee
_> WHERE emp_id <> ALL (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.05 sec)

 

И опять подзапрос возвращает набор ID сотрудников, имеющих подчи_ ненных. Основной запрос возвращает данные для всех сотрудников, ID которых не равны ни одному возвращенному подзапросом ID. Ина_ че говоря, запрос находит всех сотрудников_«неруководителей». Если этот подход кажется вам несколько топорным, вы не одиноки; многие предпочли бы построить запрос по_другому, обойдясь без оператора all. Например, результаты этого запроса аналогичны последнему при_ меру с оператором not in из предыдущего раздела. Дело вкуса, но, ду_ маю, что этим многим версия с not in просто кажется более понятной.

Сравнивать значения с набором значений с помощью операто_ ров not in или <> all нужно аккуратно, убедившись, что в наборе нет значения null. Сервер приравнивает значение из левой час_ ти выражения к каждому члену набора, и любая попытка при_ равнять значение к null дает в результате unknown. Таким обра_ зом, следующий запрос возвратит пустой набор:

 

mysql> SELECT emp_id, fname, lname, title _> FROM employee

 

_> WHERE emp_id NOT IN (1, 2, NULL); Empty set (0.00 sec)

 

Бывают случаи, когда оператор all чуть более естественен. Следую_ щий пример использует all для поиска счетов, доступный остаток ко_ торых меньше, чем на любом из счетов Фрэнка Такера (Frank Tucker):

 

mysql> SELECT account_id, cust_id, product_cd, avail_balance
_> FROM account          
_> WHERE avail_balance < ALL (SELECT a.avail_balance
_> FROM account a INNER JOIN individual i  
_> ON a.cust_id = i.cust_id      
_> WHERE i.fname = 'Frank' AND i.lname = 'Tucker');
+____________+_________+____________+_______________+
| account_id | cust_id | product_cd | avail_balance |
+____________+_________+____________+_______________+
|   |   | SAV | 500.00 |
|   |   | SAV | 200.00 |
|   |   | CHK | 534.12 |
|   |   | SAV | 767.77 |
|   |   | CHK | 122.37 |

 

        Глава 9. Подзапросы
         
| 16 | 8 | SAV | 387.99 |
| 17 | 9 | CHK | 125.67 |
| 21 | 10 | BUS | 0.00 |
+____________+_________+____________+_______________+
  rows in set (0.01 sec)    
Вот таблица, возвращенная подзапросом. Она включает доступные ос_
татки всех счетов Фрэнка:    
mysql> SELECT a.avail_balance    
  _> FROM account a INNER JOIN individual i  
  _> ON a.cust_id = i.cust_id    
  _> WHERE i.fname = 'Frank' AND i.lname = 'Tucker';
+_______________+      
| avail_balance |      
+_______________+      
| 1057.75 |      
| 2212.50 |      
+_______________+      
  rows in set (0.01 sec)    

 

У Фрэнка два счета, минимальный остаток – 1057,75 долларов. Основ_ ной запрос находит все счета, остаток на которых меньше, чем на лю_ бом из счетов Фрэнка. Таким образом, результирующий набор вклю_ чает все счета, остаток на которых меньше 1057,75 долларов.

 


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


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

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