PostgreSQL: użycie klauzuli where EXISTS
gdy jakiekolwiek zapytanie SQL jest używane wewnątrz innego zapytania SQL, wtedy nazywa się ono subquery. Skomplikowane zapytanie można łatwo zapisać, dzieląc Duże zapytanie na wiele pod-zapytań. Klauzula EXISTS jest używana z zapytaniem podrzędnym w instrukcji SQL. Wyjście EXISTS zależy od liczby rekordów zwracanych przez podquery, ale nie zależy od wartości rekordów. Wynik EXISTS będzie prawdziwy, jeśli powiązany podquery zwróci co najmniej jeden wiersz. Jak można używać klauzul EXISTS I NOT EXISTS w instrukcjach select, insert, update I delete są pokazane w tym samouczku przy użyciu różnych przykładów.
istnieje składnia klauzuli:
FROM table_name1
WHERE EXISTS( SELECT 1
FROM
table_name2
WHERE col1 = table_name1.col1);
Utwórz trzy tabele o nazwie firma, przedmioty i klienci i wstaw niektóre dane. Uruchom następujące zapytanie select, aby wyświetlić zawartość tych tabel.
wybierz * z pozycji;
wybierz * od klientów;
przykład-1: Użycie klauzuli EXISTS w zapytaniu SELECT
(a) EXISTS
następujące zapytanie pobierze rekordy z tabeli items na podstawie tabeli firm. Podquery przeszukuje wszystkie rekordy z tabeli firm, gdzie company_id tabeli firm jest równy company_id tabeli items, a wartość pola phone nie jest pusta. W tabeli firmowej jest jeden rekord, który nie ma numeru telefonu i ten rekord zostanie pominięty na wyjściu.
z pozycji
gdzie istnieje (Wybierz 1
z firmy
gdzie pozycji.company_id = firma.company_id i Spółka.telefon<>”);
wyjście:
rekord LG nie ma wpisu telefonu w tabeli firmowej. Nie pojawia się więc na wyjściu.
(B) NOT EXISTS
klauzula NOT EXISTS jest przeciwieństwem klauzuli EXISTS. Poniższe zapytanie pobierze te rekordy z tabeli items, gdy subquery zwróci false.
z pozycji
gdzie nie istnieje (Wybierz 1
z firmy
gdzie pozycji.company_id = firma.company_id i Spółka.website_url jest NULL);
wyjście:
w tabeli firmowej nie ma rekordu, w którym website_url jest równe NULL. Tak więc wynik subquery jest false dla wszystkich rekordów i wszystkie rekordy tabeli items są pobierane.
przykład-2: Użycie klauzuli EXISTS w zapytaniu INSERT
zgodnie z poniższym zapytaniem insert, dane zostaną wstawione do tabeli items, gdy company_id zarówno tabel firmowych, jak i klientów są równe.
(company_id)
wybierz company_id
od klientów
gdzie istnieje (wybierz 1
od firmy,klientów
gdzie klienci.company_id = firma.company_id);
Output:
w tabeli Klienci znajdują się trzy wpisy dla company_id o wartościach 1 i 2. Tak więc subquery zwróci true trzy razy i zostaną wstawione trzy rekordy.
Uruchom zapytanie select, aby sprawdzić zawartość tabeli items.
przykład-3: Użycie klauzuli EXISTS w zapytaniu UPDATE
następujące zapytanie zaktualizuje rekordy tabeli items, gdzie company_id wynosi 1, A subquery zwraca true.
SET name=’Nokia’
WHERE company_id = 1 and EXISTS (SELECT 1
FROM items
WHERE name= 'Not Assign’);
wyjście:
tutaj subquery zwróci true trzy razy, a company_id wynosi 1 dla trzech rekordów. Trzy rekordy zostaną zaktualizowane po wykonaniu zapytania aktualizacji.
Uruchom zapytanie select, aby sprawdzić zawartość tabeli items.
przykład-4: Użycie klauzuli EXISTS w zapytaniu DELETE
następujące zapytanie usunie te rekordy tabeli items, gdzie company_id wynosi 1, A subquery zwraca true.
WHERE company_id = 1 and EXISTS (SELECT 1
FROM items
WHERE name= 'Not Assign’);
wyjście:
istnieją trzy rekordy o wartości 1 company_id i jeden rekord ma nazwę wartość 'not Assign’. Tak więc warunek będzie spełniony trzy razy i usunie trzy rekordy z tabeli items.
Uruchom zapytanie select, aby sprawdzić zawartość tabeli items.
mam nadzieję, że masz jasny pomysł użycia klauzuli EXISTS w zapytaniu SQL po przeczytaniu tego samouczka.