Podzapytania skalarne, wierszowe i tabelowe
Używaj podzapytań zwracających pojedynczą wartość, pojedynczy wiersz lub całą tabelę i umieszczaj je w klauzulach SELECT, FROM oraz WHERE.
Podzapytania skalarne, wierszowe i tabelowe to bezpłatna lekcja SQL Academy na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej SQL Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs SQL Academy zawiera 4 lekcji w sumie.
Czym jest podzapytanie?
Podzapytanie to instrukcja SELECT umieszczona wewnątrz innej instrukcji SQL. Może być:
- podzapytaniem skalarnym — zwraca pojedynczą wartość
- podzapytaniem wierszowym — zwraca pojedynczy wiersz
- podzapytaniem tabelowym — zwraca relację (używaną w FROM)
Podzapytanie skalarne
Używane wszędzie tam, gdzie oczekiwana jest pojedyncza wartość:
SELECT id, total,
total - (SELECT AVG(total) FROM orders) AS diff_from_avg
FROM orders
WHERE created_at >= NOW() - INTERVAL '30 days';Podzapytanie wierszowe
Zwraca jeden wiersz zawierający wiele kolumn. Rzadziej używane, głównie wraz z konstruktorami wierszy:
SELECT *
FROM orders
WHERE (status, country) = (
SELECT status, country FROM orders WHERE id = 1
);Podzapytanie tabelowe w FROM
Traktuj wynik zapytania jak tymczasową tabelę:
SELECT country, AVG(big_order_total) AS avg_big
FROM (
SELECT country, total AS big_order_total
FROM orders
WHERE total > 1000
) AS sub
GROUP BY country;Nadawanie aliasów podzapytaniom w FROM
Każde podzapytanie w FROM wymaga aliasu w PostgreSQL — nawet jeśli nie jest on używany:
SELECT * FROM (SELECT 1) sub; -- "sub" requiredPodzapytania w WHERE
Filtruj na podstawie wyprowadzonego zbioru wartości:
SELECT * FROM users
WHERE id IN (
SELECT user_id FROM orders WHERE total > 100
);EXISTS / NOT EXISTS
Sprawdź, czy podzapytanie zwraca co najmniej jeden wiersz:
SELECT * FROM users u
WHERE EXISTS (
SELECT 1 FROM orders o WHERE o.user_id = u.id
);Podzapytania w SELECT
Umieść skalarne podzapytanie wykonywane dla każdego wiersza:
SELECT id, full_name,
(SELECT COUNT(*) FROM orders o WHERE o.user_id = u.id) AS order_count
FROM users u;
-- Often readable, but a LEFT JOIN + GROUP BY is usually faster.Podzapytania jako wyrażenia
Skalarne podzapytanie zwracające więcej niż jeden wiersz powoduje błąd:
SELECT (SELECT email FROM users);
-- ERROR: more than one row returned by a subquery used as an expressionKiedy przekształcić podzapytanie w JOIN
Wiele konstrukcji „x IN (SELECT...)” można przepisać jako JOIN. Wybierz formę, która jest czytelniejsza; współczesne planery często tworzą taki sam plan.
Podzapytania a CTE
Jeśli tego samego podzapytania potrzebujesz dwukrotnie, nadaj mu nazwę za pomocą CTE — zostanie to omówione w następnej lekcji.
Podsumowanie
Podzapytania występują w trzech rodzajach.
- Skalarne w SELECT/WHERE
- Wierszowe w testach równości
- Tabelowe w FROM
- EXISTS do sprawdzania „dowolnego dopasowania”
Szybkie sprawdzenie
Jaka forma podzapytania jest używana wewnątrz klauzuli FROM jako tymczasowa tabela?
Często zadawane pytania
Czy lekcja „Podzapytania skalarne, wierszowe i tabelowe” jest bezpłatna?
Tak — pełny tekst „Podzapytania skalarne, wierszowe i tabelowe” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu SQL Academy, przejdź na CoddyKit PRO. Kurs SQL Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Podzapytania skalarne, wierszowe i tabelowe”?
Używaj podzapytań zwracających pojedynczą wartość, pojedynczy wiersz lub całą tabelę i umieszczaj je w klauzulach SELECT, FROM oraz WHERE. Ćwiczysz SQL Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć SQL Academy?
Nie wymagamy żadnego doświadczenia. SQL Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.
Ile czasu zajmuje lekcja „Podzapytania skalarne, wierszowe i tabelowe”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji SQL Academy?
Tak. Każda lekcja SQL Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Podzapytania skalarne, wierszowe i tabelowe
- Podzapytania skorelowane i nieskorelowane
- Wspólne wyrażenia tabelowe (WITH)
- Rekurencyjne CTE dla hierarchii