Изучаем sql


SELECT a.account_id, c.fed_id, e.fname, e.lname



Pdf көрінісі
бет89/261
Дата28.07.2022
өлшемі1,6 Mb.
#147825
1   ...   85   86   87   88   89   90   91   92   ...   261
Байланысты:
Изучаем SQL ( PDFDrive )

SELECT a.account_id, c.fed_id, e.fname, e.lname
> FROM customer c INNER JOIN account a
> ON a.cust_id = c.cust_id
> INNER JOIN employee e
> ON a.open_emp_id = e.emp_id
> WHERE c.cust_type_cd = 'B';
+++++
| account_id | fed_id | fname | lname |
+++++
| 20 | 041111111 | Theresa | Markham |


Соединение трех и более таблиц
99
| 21 | 041111111 | Theresa | Markham |
| 22 | 042222222 | Paula | Roberts |
| 23 | 043333333 | Theresa | Markham |
| 24 | 044444444 | John | Blake |
+++++
5 rows in set (0.00 sec)
Теперь таблица 
customer
стоит первой, за ней идут таблицы 
account
и
employee
. Поскольку подблоки 
on
не изменились, результаты такие же.
Запрос, использующий три или более таблиц, можно представить как
снежный ком, катящийся с горы. Первые две таблицы запускают этот
ком, а каждая последующая таблица вносит в него свою лепту. Снеж
ный ком можно рассматривать как 
промежуточный результирующий
набор 
(
intermediate result set
), который подбирает все больше и больше
столбцов по мере соединения с последующими таблицами. Поэтому
таблица 
employee
в действительности была соединена не с таблицей 
ac
count
, а с промежуточным результирующим набором, созданным при
соединении таблиц 
customer
и 
account
. (Если интересно, откуда взялся
снежный ком: я писал эту главу глубокой новоанглийской зимой –
уже выпало 110 дюймов и завтра будет еще. Вот радостьто!)
Применение подзапросов в качестве таблиц
Вы уже посмотрели несколько примеров запросов с тремя таблицами,
но хочется особо отметить одну из разновидностей таких запросов. Что
делать, если некоторые таблицы формируются подзапросами? Подза
просам посвящена глава 9, но концепция подзапроса в блоке 
from
уже
была представлена в предыдущей главе. Вот другая версия приведен
ного ранее запроса (выбор всех счетов, открытых опытными операцио
нистами, в настоящее время работающими в отделении Woburn), в ко
тором таблица 
account
соединяется с подзапросами к таблицам 
branch
(отделение) и 
employee
:
1 SELECT a.account_id, a.cust_id, a.open_date, a.product_cd
2 FROM account a INNER JOIN
3 (SELECT emp_id, assigned_branch_id
4 FROM employee
5 WHERE start_date <= '20030101'
6 AND (title = 'Teller' OR title = 'Head Teller')) e
7 ON a.open_emp_id = e.emp_id
8 INNER JOIN
9 (SELECT branch_id
10 FROM branch
11 WHERE name = 'Woburn Branch') b
12 ON e.assigned_branch_id = b.branch_id;
Первый подзапрос, начинающийся в строке 3 и имеющий псевдоним 
e
,
находит всех опытных операционистов. Второй подзапрос, начинаю
щийся в строке 9 и имеющий псевдоним 
b
, выбирает ID отделения Wo
burn. Сначала таблица 
account
соединяется с подзапросом по опытным


100

Достарыңызбен бөлісу:
1   ...   85   86   87   88   89   90   91   92   ...   261




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

    Басты бет