Підзапити в конструкції FROM
Так як вкладені запити повертають результуючу таблицю, яка стає предметомподальших запитів, стандарт SQL дозволяє використання вкладених запитівскрізь, де допускаються посилання на таблиці. Зокрема, вкладений запит можевказуватись замість імені таблиці в виразі from. У наступному прикладіпредставлений запит, в якому у якості однієї з таблиць використовуєтьсярезультуюча таблиця вкладеного запиту.
select usr.surname, usr.name, orders .ordertime
from orders,
(select * from users) as usr
where orders.id_user = usr.id_user;
surname name ordertime
Вимдянов Ігор 2005-01-04 10:39:38
Корнеев Олександр 2005-02-10 09:40:29
Іванов Олександр 2005-02-18 13:41:05
Шимдянов Ігор 2005-03-10 18:20:00
Вимдянов Ігор 2005-03-17 19:15:36
Ключовий оператор as, що призначаютє псевдонім результуючої таблиці, єобов'язковим, тому що кожна таблиця в конструкції from повинна мати ім'я.Наприклад, запит, що виводить список всіх угод, з прізвищами та ініціаламипокупців, найменуванням товарних позицій і каталогу, може виглядати так, якце представлено у слідуючому прикладі. Запит з трьох таблиць, причому уякості двох таблиць (users та goods) виступають вкладені запити. Результуючатаблиця users містить лише два стовпці: id_user і name, в які заноситьсяпрізвище покупця і його ініціали, виділені за допомогою функції substring () іоб'єднані у один рядок за допомогою функції concat (). Таблиця goods має триполя:
+ Id_products - унікальний номер товарної позиції;
+ Productname - назва товарної позиції;
+ Сatalogname - назва каталогу.
Цікаво відмітити, що таблиця goods сама сформована за допомогою двохтабличного запиту з таблиць products і catalogs.
SELECT users.name,
goods.productname,
goods.catalogname
FROM orders,
(
SELECT id_user,
CONCAT(surname, " SUBSTRING(name,1,1),
SUBSTRING(patronymic,1,1), ".") AS name
FROM users
) AS users,
(
SELECT products.id_product AS id_product,
products.name AS productname,
catalogs.name AS catalogname
FROM products, catalogs
WHERE products.id_catalog = catalogs.id_catalog
) AS goods
WHERE orders.id user = users.id_user AND
orders.id_product = goods.id_product;
name productname catalogname
Симдянов И.В. Intel Pentium 4 3.0GHz Процесори
Корнеев A.A. Gigabyte GA-8I848P-RS Материнскі плати
Иванов А.В. Maxtor 6Y120P0 Жорсткі диски
Симдянов І.В. Maxtor 6Y120P0 Жорсткі диски
Симдянов І.В. Maxtor 6Y120P0 Жорсткі диски
Розглянемо інший приклад. Нехай є запит, який повертає загальне числотоварів на складі для кожного з каталогів
SELECT id_catalog, SUM(count) FROM products GROUP BY id_catalog;
id_catalog SUM(count)
1 47
2 27
3 17