PostgreSQL WHERE exists Query

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:

wybierz col1, col2, col3…..
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 firmy;
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.

wybierz item_id, nazwa, ilość
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.

wybierz item_id, nazwa, ilość
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.

wstaw do pozycji
(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.

UPDATE items
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.

usuń z pozycji
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.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.