Podzapytanie w rekordach pojedynczej tabeli:
Utwórz tabelę o nazwie „zwierzęta” w bazie danych „data”.' Dodaj poniższy następujący rekord różnych zwierząt o różnych właściwościach, jak pokazano. Pobierz ten rekord za pomocą zapytania SELECT w następujący sposób:
>> WYBIERZ * Z danych.Zwierząt;
Przykład 01:
Pobierzmy ograniczone rekordy tej tabeli za pomocą podzapytań. Korzystając z poniższego zapytania wiemy, że podzapytanie zostanie wykonane jako pierwsze, a jego dane wyjściowe zostaną użyte w zapytaniu głównym jako dane wejściowe. Podzapytanie po prostu pobiera wiek, w którym cena zwierzęcia wynosi 2500. Wiek zwierzęcia, którego cena to 2500 to 4 w tabeli. Główne zapytanie wybierze wszystkie rekordy tabeli, w których wiek jest większy niż 4, a dane wyjściowe podano poniżej.
>> WYBIERZ * Z danych.zwierzęta WHERE Wiek > ( SELECT Wiek Z danych.zwierzęta GDZIE Cena='2500' );
Przykład 02:
Użyjmy tej samej tabeli w różnych sytuacjach. W tym przykładzie użyjemy klauzuli Function zamiast WHERE w podzapytaniu. Przyjęliśmy średnią ze wszystkich podanych cen za zwierzęta. Średnia cena wyniesie 3189. Główne zapytanie wybierze wszystkie rekordy zwierząt o cenie powyżej 3189. Otrzymasz poniższe dane wyjściowe.
>> WYBIERZ * Z danych.zwierzęta WHERE Cena > ( SELECT AVG(Price) FROM data.Zwierząt);
Przykład 03:
Użyjmy klauzuli IN w głównym zapytaniu SELECT. Przede wszystkim podzapytanie przyniesie ceny większe niż 2500. Następnie główne zapytanie wybierze wszystkie rekordy tabeli „zwierzęta”, w których cena znajduje się w wyniku podzapytania.
>> WYBIERZ * Z danych.zwierzęta WHERE Price IN ( SELECT Price FROM data).zwierzęta GDZIE Cena > 2500 );
Przykład 04:
Korzystaliśmy z podzapytania, aby pobrać imię zwierzęcia, którego cena wynosi 7000. Ponieważ to zwierzę to krowa, dlatego nazwa „krowa” zostanie zwrócona do głównego zapytania. W głównym zapytaniu wszystkie rekordy zostaną pobrane z tabeli, w której nazwa zwierzęcia to „krowa”.'Ponieważ mamy tylko dwa rekordy dla krowy zwierzęcej, dlatego mamy poniższe dane wyjściowe.
>> WYBIERZ * Z danych.zwierzęta WHERE Nazwa = ( SELECT Nazwa Z danych.zwierzęta GDZIE Cena='7000' );
Podzapytanie w wielu rekordach tabeli:
Załóżmy, że poniższe dwie tabele, „uczeń” i „nauczyciel” w Twojej bazie danych. Wypróbujmy kilka przykładów podzapytań przy użyciu tych dwóch tabel.
>> WYBIERZ * Z danych.student;>> WYBIERZ * Z danych.nauczyciel;
Przykład 01:
Za pomocą podzapytania pobierzemy dane z jednej tabeli i użyjemy ich jako danych wejściowych do głównego zapytania. Oznacza to, że te dwie tabele mogą być w jakiś sposób powiązane. W poniższym przykładzie użyliśmy podzapytania do pobrania imienia ucznia z tabeli „uczeń”, gdzie imię i nazwisko nauczyciela to „Samina.' To zapytanie zwróci 'Samina' do głównej tabeli zapytań 'nauczyciel.' Główne zapytanie wybierze następnie wszystkie rekordy związane z nazwą nauczyciela 'Samina.'Ponieważ mamy dwa rekordy dla tej nazwy, więc mamy taki wynik.
>> WYBIERZ * Z danych.nauczyciel WHERENazwiskoNaucza = ( SELECTNazwiskoNaucza FROM danych.student WHERE TeachName = 'Samina' );
Przykład 02:
Aby opracować podzapytanie w przypadku różnych tabel, wypróbuj ten przykład. Mamy podzapytanie, które pobiera nazwisko nauczyciela z tabeli student. Nazwa powinna mieć „i” na dowolnej pozycji w swojej wartości. Oznacza to, że wszystkie nazwy w kolumnie TeachName mające w swojej wartości „i” zostaną wybrane i zwrócone do głównego zapytania. Główne zapytanie wybierze wszystkie rekordy z tabeli „nauczyciel”, w której w danych wyjściowych zwróconych przez podzapytanie znajduje się nazwisko nauczyciela. Ponieważ podzapytanie zwróciło 4 nazwiska nauczycieli, dlatego będziemy mieć zapis wszystkich tych nazwisk znajdujących się w tabeli „nauczyciel.'
>> WYBIERZ * Z danych.nauczyciel WHERE TeachName IN ( SELECT TeachName FROM data.student WHERE TeachName LIKE '%i%' );
Przykład 03:
Rozważ poniższe dwie tabele, „zamówienie” i „zamówienie1”.
>> WYBIERZ * Z danych.zamówienie;>> WYBIERZ * Z danych.zamówienie1;
Wypróbujmy klauzulę ANY w tym przykładzie, aby opracować podzapytanie. Podzapytanie wybierze „id” z tabeli „order1”, gdzie kolumna „Status” ma wartość „Nieopłacone”.' Identyfikator może być większy niż 1. Oznacza to, że więcej niż 1 wartość zostanie zwrócona do głównego zapytania, aby uzyskać wyniki tabeli „zamówienie”. W tym przypadku można użyć dowolnego „id”. Mamy poniższe dane wyjściowe dla tego zapytania.
>> SELECT Pozycja, Sprzedaż, id Z danych.order WHERE id= ANY ( SELECT id FROM data.order1 GDZIE Status= 'Nieopłacone' );
Przykład 04:
Załóżmy, że masz poniższe dane w tabeli „order1” przed zastosowaniem jakiegokolwiek zapytania.
>> WYBIERZ * Z danych.zamówienie1;
Zastosujmy zapytanie w zapytaniu, aby usunąć niektóre rekordy z tabeli „order1”. Po pierwsze, podzapytanie wybierze wartość „Status” z tabeli „Zamówienie”, w której pozycja to „Rezerwacja”.' Podzapytanie zwraca 'Zapłacone' jako wartość. Teraz główne zapytanie usunie wiersze z tabeli „order1”, w której wartość kolumny „Status” to „Opłacone.'
>> USUŃ Z danych.order1 WHERE Status= ( SELECT Status Z danych.zamów WHERE Item = 'Książka' );
Po sprawdzeniu mamy teraz poniższe rekordy w tabeli 'order1' po wykonaniu zapytania.
>> WYBIERZ * Z danych.zamówienie1;
Wniosek:
Sprawnie pracowałeś z wieloma podzapytaniami we wszystkich powyższych przykładach. Mamy nadzieję, że teraz wszystko jest jasne i czyste.