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 –

MySQL Podzapytanie

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

MySQL Podzapytanie

Zobaczmy, jak działa to zapytanie

MySQL Podzapytanie

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 );


MySQL Podzapytanie

Zobaczmy, jak działa to zapytanie

MySQL Podzapytanie

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 –

MySQL Podzapytanie

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

Podzapytania a łączenia

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.