Изучаем sql


WHERE t.account_id = a.account_id



Pdf көрінісі
бет161/261
Дата28.07.2022
өлшемі1,6 Mb.
#147825
1   ...   157   158   159   160   161   162   163   164   ...   261
Байланысты:
Изучаем SQL ( PDFDrive )

WHERE t.account_id = a.account_id
);
Подзапрос теперь включает условие фильтрации, связывающее ID сче
та транзакции и ID счета из основного запроса. Изменился и блок 
se
lect
– теперь вместо жестко запрограммированного значения 
1
он пу
тем конкатенации формирует предупреждение, включающее ID счета.
Оператор exists
Связанные подзапросы часто используются в условиях равенства и вхо
ждения в диапазон, но самый распространенный оператор, применяе
мый в условиях со связанными подзапросами, – это оператор 
exists
(су
ществует). Оператор 
exists
применяется, если требуется показать, что
связь есть, а количество связей при этом не имеет значения. Например,
следующий запрос находит все счета, для которых транзакция была
выполнена в определенный день, без учета количества транзакций:
SELECT a.account_id, a.product_cd, a.cust_id, a.avail_balance
FROM account a
WHERE 
EXISTS 
(SELECT 1
FROM transaction t
WHERE t.account_id = a.account_id
AND t.txn_date = '20050122');
При использовании оператора 
exists
подзапрос может возвращать ни
одной, одну или много строк, а условие просто проверяет, возвращены
ли в результате выполнения подзапроса строки (все равно сколько).
Если взглянуть на блок 
select
подзапроса, можно увидеть, что он со
стоит из единственного литерала (
1
); для условия основного запроса
имеет значение только число возвращенных строк, а что именно было
возвращено подзапросом – не важно. Подзапрос может возвращать все,
что вам вздумается, как показывает следующий пример:
SELECT a.account_id, a.product_cd, a.cust_id, a.avail_balance
FROM account a
WHERE EXISTS (
SELECT t.txn_id, 'hello', 3.1415927
FROM transaction t
WHERE t.account_id = a.account_id
AND t.txn_date = '20050122');
Но все же при использовании 
exists
принято задавать 
select 1
или
select *
.
Для поиска подзапросов, не возвращающих строки, можно использо
вать и оператор 
not
exists
:
mysql> 


Достарыңызбен бөлісу:
1   ...   157   158   159   160   161   162   163   164   ...   261




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

    Басты бет