MySQL Samouczek dotyczący podkwerendy z przykładami
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 podzapytania –
Częstą skargą klientów w Bibliotece wideo MyFlix jest mała liczba tytułów filmów. Zarząd chce kupować filmy w kategorii, która ma najmniejszą liczbę tytułów.
Możesz użyć zapytania typu
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ą Zapytanie podrzędne wiersza. W takich podzapytaniach, wewnętrzne zapytanie może dać tylko JEDEN wynik. Dozwolone operatory podczas pracy z podzapytaniami wierszowymi to [=, >, =, <=, ,!=, ]
Spójrzmy na inny przykład,
Załóżmy, że chcesz Nazwy i Numery Telefonów członków osób, które wypożyczyły film i jeszcze go nie zwróciły. Po otrzymaniu Nazw i Numerów Telefonów dzwonisz 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 tym przypadku zapytanie wewnętrzne zwraca więcej niż jeden wynik. Powyższe jest typem Tzdolne podzapytaniey.
Do tej pory widzieliśmy dwa zapytania, teraz zobaczmy przykład potrójne zapytanie!!!
Załóżmy, że kierownictwo chce nagrodzić najlepiej zarabiającego członka.
Możemy uruchomić zapytanie typu
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 –
Podzapytania a łączenia!
W porównaniu z Joins zapytania podrzędne są proste w użyciu i łatwe do odczytania. Nie są one tak skomplikowane jak np Łączy
Stąd często używane są przez Początkujący SQL.
Jednak zapytania podrzędne mają problemy z wydajnością. Użycie sprzężenia zamiast podzapytania może czasami dać nawet 500-krotny wzrost wydajności.
Mając wybór, zaleca się użycie JOIN zamiast zapytania podrzędnego.
Podzapytania należy stosować wyłącznie jako rozwiązanie zapasowe, gdy nie można użyć operacji JOIN w celu osiągnięcia powyższego celu
Podsumowanie
- Podzapytania to zapytania osadzone w innym zapytaniu. Zapytanie osadzone jest znane jako zapytanie wewnętrzne, a zapytanie kontenerowe jest znane jako zapytanie zewnętrzne.
- Podzapytania są łatwe w użyciu, oferują dużą elastyczność i można je łatwo podzielić na pojedyncze logiczne elementy tworzące zapytanie, co jest bardzo przydatne, gdy Testowanie i debugowanie zapytań.
- MySQL obsługuje trzy typy podzapytań: podzapytania skalarne, wierszowe i tabelaryczne.
- Skalarne zapytania podrzędne zwracają tylko jeden wiersz i jedną kolumnę.
- Zapytania o podrzędne wiersze zwracają tylko jeden wiersz, ale mogą zawierać więcej niż jedną kolumnę.
- Podzapytania tabeli mogą zwracać wiele wierszy i kolumn.
- Podzapytania można także używać w zapytaniach INSERT, UPDATE i DELETE.
- W przypadku problemów z wydajnością, gdy chodzi o pobieranie danych z wielu tabel, zdecydowanie zaleca się używanie JOIN-ów zamiast podzapytań. Podzapytania powinny być używane tylko z uzasadnionych powodów.