Próbuję nauczyć się języka SQL i mam trudności ze zrozumieniem instrukcji ISTNIEJE. Natknąłem się na ten cytat o „istnieje” i czegoś nie rozumiem:
Używając operatora exist, twoje podzapytanie może zwrócić zero, jeden lub wiele wierszy, a warunek po prostu sprawdza, czy podzapytanie zwróciło jakieś wiersze. Jeśli spojrzysz na klauzulę select w podzapytaniu, zobaczysz, że składa się ona z jednego literału (1); ponieważ warunek w zapytaniu zawierającym musi tylko wiedzieć, ile wierszy zostało zwróconych, rzeczywiste dane zwrócone przez podzapytanie są nieistotne.
Nie rozumiem, skąd zapytanie zewnętrzne wie, który wiersz jest sprawdzane przez podzapytanie? Na przykład:
SELECT *
FROM suppliers
WHERE EXISTS (select *
from orders
where suppliers.supplier_id = orders.supplier_id);
Rozumiem, że jeśli identyfikator dostawcy i tabeli zamówień będzie się zgadzać, podzapytanie zwróci wartość true i zostaną wyprowadzone wszystkie kolumny z pasującego wiersza w tabeli dostawców. Nie rozumiem, w jaki sposób podzapytanie informuje, który konkretny wiersz (powiedzmy wiersz z identyfikatorem dostawcy 25) powinien zostać wydrukowany, jeśli zwracana jest tylko prawda lub fałsz.
Wydaje mi się, że nie ma związku między zapytaniem zewnętrznym a podzapytaniem.
