Subqueries
Підзапити можна використовувати в клаузах SELECT, FROM, WHERE та JOIN.
-
У WHERE краще використовувати з IN, оскільки не можна бути впевненим, що підзапит поверне один рядок. Наприклад:
Якщо ви впевнені, що підзапит повертає один рядок, можна використовувати = замість IN -
Підзапити в клаузі FROM:
З таблиці tracks групуємо по albumid та обираємо суму байт кожної групи. Називаємо суму байт як SIZE, а всю вибірку іменуємо як album. Далі виконується зовнішній селект середнього значення по стовпчику album.size. -
Корельований підзапит. Корельований підзапит - це підзапит, який використовує значення із зовнішнього запиту. На відміну від звичайного підзапиту, корельований підзапит не може бути виконаний незалежно. Корельований підзапит є неефективним, оскільки він обчислюється для кожного рядка, обробленого зовнішнім запитом.
Для кожного рядка, обробленого зовнішнім запитом, корельований підзапит обчислює розмір альбомів з треків, що належать поточному альбому, використовуючи функцію SUM.SELECT albumid, title FROM albums WHERE 10000000 > ( SELECT sum(bytes) FROM tracks WHERE tracks.AlbumId = albums.AlbumId ) ORDER BY title; -
Підзапит у клаузі SELECT:
(це також корельований підзапит)