Intern
Ποια είναι η διαφορά μεταξύ μιας υποερώτησης στο WHERE id IN (SELECT ...) και μιας υποερώτησης με WHERE EXISTS (SELECT ...); Το IN συγκρίνει τις τιμές με ένα σύνολο αποτελεσμάτων, το EXISTS ελέγχει αν υπάρχει τουλάχιστον μία γραμμή Το IN εκτελείται για κάθε γραμμή του εξωτερικού ερωτήματος, το EXISTS μία φορά Δεν υπάρχει διαφορά Το IN λειτουργεί μόνο με αριθμούς, το EXISTS με οποιοδήποτε τύπο
sobes.tech AI
Απάντηση από AI
Η σωστή απάντηση: Το IN συγκρίνει τις τιμές με ένα σύνολο αποτελεσμάτων, το EXISTS ελέγχει αν υπάρχει τουλάχιστον μία γραμμή.
Το υποερώτημα με IN επιστρέφει γραμμές όπου η τιμή ταιριάζει με οποιαδήποτε από τις τιμές που επιστρέφονται από το υποερώτημα. Το υποερώτημα με EXISTS ελέγχει αν υπάρχει τουλάχιστον μία γραμμή που ικανοποιεί την συνθήκη.
Διαφορές:
- Το IN συγκρίνει συγκεκριμένες τιμές, το EXISTS ελέγχει την ύπαρξη γραμμών.
- Το EXISTS συχνά είναι πιο αποδοτικό για τον έλεγχο ύπαρξης, ειδικά σε σύνθετες συνθήκες.
Παράδειγμα:
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');
Και οι δύο ερωτήσεις επιλέγουν παραγγελίες ενεργών πελατών, αλλά λειτουργούν διαφορετικά.