Τι είναι τα δευτερεύοντα ερωτήματα;
Ένα υπο ερώτημα είναι ένα επιλεγμένο ερώτημα που περιέχεται σε ένα άλλο ερώτημα. Το ερώτημα εσωτερικής επιλογής χρησιμοποιείται συνήθως για τον προσδιορισμό των αποτελεσμάτων του ερωτήματος εξωτερικής επιλογής.
Ας δούμε τη σύνταξη υπο-ερωτήματος -
Ένα κοινό παράπονο πελατών στη Βιβλιοθήκη βίντεο MyFlix είναι ο χαμηλός αριθμός τίτλων ταινιών. Η διεύθυνση θέλει να αγοράσει ταινίες για μια κατηγορία με λιγότερους τίτλους.
Μπορείτε να χρησιμοποιήσετε ένα ερώτημα σαν
SELECT category_name FROM categories WHERE category_id =( SELECT MIN(category_id) from movies);
Δίνει ένα αποτέλεσμα
Ας δούμε πώς λειτουργεί αυτό το ερώτημα
Τα παραπάνω είναι μια μορφή Row Sub-Query . Σε τέτοια υπο-ερωτήματα, το εσωτερικό ερώτημα μπορεί να δώσει μόνο ΕΝΑ αποτέλεσμα. Οι επιτρεπόμενοι τελεστές όταν εργάζονται με δευτερεύοντα ερωτήματα είναι [=,>, =, <=,! =,]
Ας δούμε ένα άλλο παράδειγμα,
Ας υποθέσουμε ότι θέλετε ονόματα και αριθμούς τηλεφώνου από μέλη ατόμων που έχουν νοικιάσει μια ταινία και δεν έχουν επιστρέψει ακόμη. Μόλις λάβετε ονόματα και αριθμό τηλεφώνου, τους καλείτε για να σας υπενθυμίσουν Μπορείτε να χρησιμοποιήσετε ένα ερώτημα σαν
SELECT full_names,contact_number FROM members WHERE membership_number IN (SELECT membership_number FROM movierentals WHERE return_date IS NULL );
Ας δούμε πώς λειτουργεί αυτό το ερώτημα
Σε αυτήν την περίπτωση, το εσωτερικό ερώτημα επιστρέφει περισσότερα από ένα αποτελέσματα. Τα παραπάνω είναι τύπος T με δυνατότητα υπο-ερώτησης y.
Μέχρι τώρα έχουμε δει δύο ερωτήματα, ας δούμε τώρα ένα παράδειγμα τριπλού ερωτήματος !!!
Ας υποθέσουμε ότι η διεύθυνση θέλει να επιβραβεύσει το μέλος με την υψηλότερη πληρωμή.
Μπορούμε να εκτελέσουμε ένα ερώτημα σαν
Select full_names From members WHERE membership_number = (SELECT membership_number FROM payments WHERE amount_paid = (SELECT MAX(amount_paid) FROM payments));
Το παραπάνω ερώτημα δίνει το ακόλουθο αποτέλεσμα -
Υπο-ερωτήματα εναρμονίζεται!
Σε σύγκριση με το Joins, τα δευτερεύοντα ερωτήματα είναι εύχρηστα και ευανάγνωστα. Δεν είναι τόσο περίπλοκα όσο το Joins
Ως εκ τούτου, χρησιμοποιούνται συχνά από αρχάριους SQL.
Ωστόσο, τα υπο-ερωτήματα έχουν προβλήματα απόδοσης. Χρησιμοποιώντας μια ένωση αντί για ένα υπο-ερώτημα μπορεί μερικές φορές να σας δώσει έως και 500 φορές αύξηση της απόδοσης.
Δεδομένης της επιλογής, συνιστάται η χρήση ενός JOIN σε ένα δευτερεύον ερώτημα.
Τα υπο-ερωτήματα θα πρέπει να χρησιμοποιούνται μόνο ως εναλλακτική λύση όταν δεν μπορείτε να χρησιμοποιήσετε μια λειτουργία JOIN για να επιτύχετε τα παραπάνω
Περίληψη
- Τα ερωτήματα είναι ενσωματωμένα ερωτήματα μέσα σε ένα άλλο ερώτημα. Το ενσωματωμένο ερώτημα είναι γνωστό ως το εσωτερικό ερώτημα και το ερώτημα κοντέινερ είναι γνωστό ως το εξωτερικό ερώτημα.
- Τα υπο ερωτήματα είναι εύχρηστα, προσφέρουν μεγάλη ευελιξία και μπορούν εύκολα να χωριστούν σε μεμονωμένα λογικά στοιχεία που αποτελούν το ερώτημα, το οποίο είναι πολύ χρήσιμο κατά τη Δοκιμή και τον εντοπισμό σφαλμάτων των ερωτημάτων.
- Η MySQL υποστηρίζει τρεις τύπους υποερωτημάτων, κλιμακούμενα, σειρές και υποερωτήματα πίνακα.
- Τα βαθμιαία ερωτήματα επιστρέφουν μόνο μία σειρά και μία στήλη.
- Τα δευτερεύοντα ερωτήματα επιστρέφουν μόνο μία γραμμή αλλά μπορούν να έχουν περισσότερες από μία στήλες.
- Τα υποερωτήματα πίνακα μπορούν να επιστρέψουν πολλές σειρές καθώς και στήλες.
- Τα δευτερεύοντα ερωτήματα μπορούν επίσης να χρησιμοποιηθούν σε ερωτήματα INSERT, UPDATE και DELETE.
- Για ζητήματα απόδοσης, όσον αφορά τη λήψη δεδομένων από πολλούς πίνακες, συνιστάται ιδιαίτερα η χρήση JOIN αντί για υποερώματα. Τα υπο ερωτήματα πρέπει να χρησιμοποιούνται μόνο με καλό λόγο.