Używamy cookies, żeby zwiększyć Twoje doświadczenia na stronie
CodeWorlds

Podzapytania skorelowane

Wchodzimy głębiej. Dotąd podzapytanie wykonywało się raz i zwracało gotowy wynik. Podzapytanie skorelowane (correlated subquery) jest inne: odwołuje się do kolumny z zapytania zewnętrznego i wykonuje się na nowo dla każdego wiersza przetwarzanego na zewnątrz.

Odwołanie do zewnętrznego wiersza

1SELECT a.imie, a.nazwisko
2FROM autorzy AS a
3WHERE 3 < (
4  SELECT COUNT(*)
5  FROM ksiazki AS k
6  WHERE k.autor_id = a.id
7);

Zwróć uwagę na warunek

k.autor_id = a.id
. Podzapytanie zna
a.id
- wartość z bieżącego wiersza zapytania zewnętrznego. Dla każdego autora Biblioteka liczy jego książki i zostawia tylko tych, którzy mają ich więcej niż trzy.

Jak to działa krok po kroku

  1. Zapytanie zewnętrzne bierze pierwszego autora.
  2. Podzapytanie liczy książki tego autora.
  3. Warunek sprawdza wynik - autor zostaje albo odpada.
  4. Biblioteka przechodzi do kolejnego autora i powtarza wszystko od nowa.

Zwykłe czy skorelowane?

  • Zwykłe podzapytanie jest samodzielne - można je uruchomić osobno.
  • Skorelowane bez zapytania zewnętrznego nie ma sensu - potrzebuje wartości
    a.id
    .

Skorelowane podzapytania bywają wolniejsze (wykonują się wielokrotnie), ale są niezwykle potężne - pozwalają zadawać pytania w stylu "dla każdego wiersza sprawdź coś po drugiej stronie".

@name

Przejdź do CodeWorlds