Основание и пример
Понякога нужните кортежи не могат да се получат с една заявка. Пример: таблица Успех (Име, Фамилия, Average). Търсим учениците с личен среден успех по-висок от средния за класа. Не можем да напишем директен SELECT — средният успех на класа не ни е известен предварително. Двете стъпки:
- Стъпка 1:
SELECT Avg(Average) FROM Успех;— една стойност X (средният успех на класа). - Стъпка 2:
SELECT * FROM Успех WHERE Average > X;
SQL позволява да заменим X направо с кода на първата заявка, затворена в кръгли скоби:
Правилата на влагането
Влагане на заявки
Поставянето на една заявка на мястото на елемент на друга. Външна е заявката, в която влагаме; вътрешна — вложената (най-често SELECT).
- Вътрешната заявка е винаги в кръгли скоби.
- В клаузата WHERE на външната може да се използва резултат само с една колона; в клаузата FROM — таблица с няколко колони.
- Ако вътрешната връща колона с повече от един ред — в WHERE ползваме операциите за сравняване с множество:
IN,NOT IN,ANY,ALL. Иначе — само сравнение стойност със стойност. - Вътрешната заявка не може да бъде сортирана.
Влагане в клаузата WHERE
IN / NOT IN
ANY и ALL
атрибут > ANY (вътрешна)— кортежите, в които стойността е по-голяма от някоя от извлечените.атрибут > ALL (вътрешна)— по-голяма от всички извлечени стойности.
Влагане в клаузата FROM
На мястото на таблицата във FROM може да застане цяла заявка — например резултатът от тройното INNER JOIN от предишния урок.
Какво трябва да запомниш
- Влагане = заявка на мястото на елемент; вътрешната е винаги в кръгли скоби.
- В WHERE: една колона; един ред → сравнение, много редове → IN/NOT IN/ANY/ALL.
- Вътрешната заявка не се сортира.
- Във FROM: задължително AS имена на атрибутите, ползвани отвън.
- При големи таблици — предпочитай JOIN пред влагане.