Сообщение об ошибке

Deprecated function: The each() function is deprecated. This message will be suppressed on further calls в функции menu_set_active_trail() (строка 2405 в файле /home/kpaco123/e-helper/includes/menu.inc).

Використання вкладеного запиту в списку стовпців

SELECT id_catalog, (SELECT MAX(price) FROM products) FROM catalogs;

 

id_catalog (SELECT MAX(price) FROM products)

1 7259.00

2 7259.00

3 7259.00

 

Вкладений запит select max (price) from products повертає максимальнезначення ціни з таблиці products (725.00) і підставляє це значення на місцезапиту, тому запит можна представити як запит із скалярною величиною в якостістовпця

 

SELECT id_catalog, 7259.00 FROM catalogs;

 

id_catalog (SELECT MAX(price) FROM products)

1 7259.00

2 7259.00

3 7259.00

 

Допустимі також запити такого виду: вкладений запит повертає назву каталогу зпервинним ключем id_catalog = 1, а зовнішній запит, що складається з одногооператора select, виводить його.

 

SELECT (SELECT name FROM catalogs WHERE id catalog = 1);

 

(SELECT name FROM catalogs WHERE id_catalog = 1)

Процесори

 

При використанні вкладених запитів в якості аргументів вбудованих функційMySQL слід пам'ятати про необхідність розміщення вкладеного запиту в додаткові круглі дужки. У прикладі назва каталогу з первинним ключемid_catalog = 1 з таблиці catalogs передається в якості аргументу функції UPPER,яка переводить рядок у верхній регістр. При цьому використовуються подвійнікруглі дужки - одні для позначення вкладеного запиту, інші - для позначення ознаки функції.

 

SELECT UPPER((SELECT name FROM catalogs WHERE id_catalog=1));

 

UPPER((SELECT name FROM catalogs WHERE id_catalog=1));

ПРОЦЕСОРИ

 

Найбільше часто вкладені запити використовуються в операціях порівняння вумовах які задаються ключовими словами where, having або on. Для цьогозадіюються шість операторів порівняння ("=", "<>", "<", "<=" ">" ">="). Вкладенийзапит, який бере участь в операції порівняння, повинен повертати в якостірезультату одиничне значення.

 

Приклад

SELECT name FROM catalogs

WHERE id_catalog > (SELECT id_catalog FROM products WHERE id_product = 10);

 

name

Відеоадаптери

Жорсткіе диски

Оперативна пам’ять

 

SELECT name FROM catalogs

WHERE (SELECT id_catalog FROM products

WHERE id_product = 10) < id_catalog;

name

Відеоадаптери

Жорсткіе диски

Оперативна пам’ять

 

Повертаються назви каталогів, значення первинного ключа id_catalog для яких більше значення первинного ключа каталогу, в якому знаходиться товарнапозиція з id_product = 10.

Примітка

У прикладі показано, що вкладений запит може розташовуватися як справа так і зліва від оператора порівняння. Однак краще розташовувати його в правій частині, як це продемонстровано в першому запиті, для сумісності з іншимиСУБД, які не задовольняють стандарту SQL2, в якому було усунуто подібне обмеження.