Intern
Jaka jest różnica między podzapytaniem w WHERE id IN (SELECT ...) a podzapytaniem z WHERE EXISTS (SELECT ...)? IN porównuje wartości z zestawem wyników, EXISTS sprawdza, czy istnieje co najmniej jeden wiersz IN jest wykonywane dla każdego wiersza zewnętrznego zapytania, EXISTS raz Nie ma różnicy IN działa tylko na liczbach, EXISTS na dowolnych typach
sobes.tech AI
Odpowiedź od AI
Poprawna odpowiedź: IN porównuje wartości z zestawem wyników, EXISTS sprawdza, czy istnieje co najmniej jeden wiersz.
Podzapytanie z IN zwraca wiersze, w których wartość jest równa dowolnej z wartości zwróconych przez podzapytanie. Podzapytanie z EXISTS sprawdza, czy istnieje co najmniej jeden wiersz spełniający warunek.
Różnice:
- IN porównuje konkretne wartości, EXISTS sprawdza istnienie wierszy.
- EXISTS jest często bardziej wydajne przy sprawdzaniu istnienia, szczególnie przy złożonych warunkach.
Przykład:
SELECT * FROM orders o
WHERE o.customer_id IN (SELECT c.id FROM customers c WHERE c.status = 'active');
SELECT * FROM orders o
WHERE EXISTS (SELECT 1 FROM customers c WHERE c.id = o.customer_id AND c.status = 'active');
Oba zapytania wybierają zamówienia aktywnych klientów, ale działają inaczej.