Co to są zapytania podrzędne?
Zapytanie podrzędne to zapytanie wybierające zawarte w innym zapytaniu. Wewnętrzne zapytanie wybierające jest zwykle używane do określenia wyników zewnętrznego zapytania wybierającego.
Przyjrzyjmy się składni zapytania podrzędnego -
Częstą skargą klientów w MyFlix Video Library jest mała liczba tytułów filmowych. Kierownictwo chce kupować filmy z kategorii, która ma najmniejszą liczbę tytułów.
Możesz użyć zapytania, takiego jak
SELECT category_name FROM categories WHERE category_id =( SELECT MIN(category_id) from movies);
Daje wynik
Zobaczmy, jak działa to zapytanie
Powyższe jest formą zapytania podrzędnego wiersza . W takich pod-zapytaniach zapytanie wewnętrzne może dać tylko JEDEN wynik. Dopuszczalne operatory podczas pracy z podzapytaniami wierszy to [=,>, =, <=,,! =,]
Spójrzmy na inny przykład,
Załóżmy, że chcesz uzyskać imiona i nazwiska oraz numery telefonów osób, które wypożyczyły film, ale jeszcze go nie zwróciły. Gdy otrzymasz nazwiska i numer telefonu, zadzwoń do nich, aby dać przypomnienie. Możesz użyć zapytania, takiego jak
SELECT full_names,contact_number FROM members WHERE membership_number IN (SELECT membership_number FROM movierentals WHERE return_date IS NULL );
Zobaczmy, jak działa to zapytanie
W takim przypadku zapytanie wewnętrzne zwraca więcej niż jeden wynik. Powyższe jest typem podzapytania tabeli .
Do tej pory widzieliśmy dwa zapytania, zobaczmy teraz przykład potrójnego zapytania !!!
Załóżmy, że kierownictwo chce nagrodzić najlepiej płacącego członka.
Możemy uruchomić zapytanie takie jak
Select full_names From members WHERE membership_number = (SELECT membership_number FROM payments WHERE amount_paid = (SELECT MAX(amount_paid) FROM payments));
Powyższe zapytanie daje następujący wynik -
Sub-Queries Vs Joins!
W porównaniu z łączeniami zapytania podrzędne są proste w użyciu i czytelne. Nie są tak skomplikowane jak połączenia
Stąd są często używane przez początkujących SQL.
Jednak zapytania podrzędne mają problemy z wydajnością. Użycie sprzężenia zamiast zapytania podrzędnego może czasami dać nawet 500-krotny wzrost wydajności.
Mając wybór, zaleca się użycie JOIN zamiast zapytania podrzędnego.
Zapytań podrzędnych należy używać tylko jako rozwiązania rezerwowego, gdy nie można użyć operacji JOIN do osiągnięcia powyższego
Podsumowanie
- Podzapytania to zapytania osadzone w innym zapytaniu. Osadzone zapytanie jest nazywane zapytaniem wewnętrznym, a zapytanie kontenera jest określane jako zapytanie zewnętrzne.
- Zapytania podrzędne są łatwe w użyciu, oferują dużą elastyczność i można je łatwo podzielić na pojedyncze logiczne komponenty tworzące zapytanie, co jest bardzo przydatne podczas testowania i debugowania zapytań.
- MySQL obsługuje trzy typy podzapytań, podzapytania skalarne, wierszowe i tabelaryczne.
- Skalarne zapytania podrzędne zwracają tylko jeden wiersz i jedną kolumnę.
- Zapytania podrzędne dotyczące wierszy zwracają tylko jeden wiersz, ale mogą mieć więcej niż jedną kolumnę.
- Podzapytania tabeli mogą zwracać wiele wierszy, a także kolumn.
- Podzapytania mogą być również używane w zapytaniach INSERT, UPDATE i DELETE.
- W przypadku problemów z wydajnością, jeśli chodzi o pobieranie danych z wielu tabel, zdecydowanie zaleca się używanie JOIN zamiast podzapytań. Zapytań podrzędnych należy używać tylko z uzasadnionego powodu.