Підзапити в конструкції 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