Ένθεση ενός ερωτήματος μέσα σε άλλο ερώτημα ή σε παράσταση χρησιμοποιώντας δευτερεύον ερώτημα

Μερικές φορές, ίσως, θελήσετε να χρησιμοποιήσετε τα αποτελέσματα ενός ερωτήματος ως πεδίο σε ένα άλλο ερώτημα ή ως κριτήριο για ένα πεδίο ερωτήματος. Για παράδειγμα, ας υποθέσουμε ότι θέλετε να δείτε τα διαστήματα μεταξύ των παραγγελιών για κάθε ένα από τα προϊόντα σας. Για να δημιουργήσετε ένα ερώτημα, το οποίο εμφανίζει αυτό το διάστημα, πρέπει να συγκρίνετε κάθε ημερομηνία παραγγελίας με άλλες ημερομηνίες παραγγελίας για το συγκεκριμένο προϊόν. Η σύγκριση αυτών των ημερομηνιών παραγγελίας, επίσης, απαιτεί ένα ερώτημα. Μπορείτε να ενθέσετε αυτό το ερώτημα μέσα στο κύριο ερώτημά σας χρησιμοποιώντας ένα δευτερεύον ερώτημα.

Μπορείτε να συντάξετε ένα δευτερεύον ερώτημα σε μια παράσταση ή σε μια πρόταση γλώσσας SQL (Structured Query Language) στην προβολή SQL.

Σε αυτό το άρθρο

Χρήση των αποτελεσμάτων ενός ερωτήματος ως πεδίο σε ένα άλλο ερώτημα

Χρήση ενός δευτερεύοντος ερωτήματος ως κριτήριο για ένα πεδίο ερωτήματος

Κοινές λέξεις-κλειδιά SQL που μπορείτε να χρησιμοποιήσετε με ένα δευτερεύον ερώτημα

Χρήση των αποτελεσμάτων ενός ερωτήματος ως πεδίο σε ένα άλλο ερώτημα

Μπορείτε να χρησιμοποιήσετε ένα δευτερεύον ερώτημα ως ψευδώνυμο (SQL) πεδίου. Χρησιμοποιήστε ένα δευτερεύον ερώτημα ως ψευδώνυμο πεδίου όταν θέλετε να χρησιμοποιήσετε τα αποτελέσματα του δευτερεύοντος ερωτήματος ως πεδίο στο κύριο ερώτημά σας.

ΣΗΜΕΙΩΣΗ : Ένα δευτερεύον ερώτημα που χρησιμοποιείτε ως ψευδώνυμο πεδίου δεν είναι δυνατό να επιστρέφει περισσότερα από ένα πεδία.

Μπορείτε να χρησιμοποιήσετε ένα ψευδώνυμο πεδίου δευτερεύοντος ερωτήματος για να εμφανίσετε τιμές που εξαρτώνται από άλλες τιμές της τρέχουσας γραμμής, γεγονός το οποίο δεν είναι δυνατό χωρίς τη χρήση δευτερεύοντος ερωτήματος.

Για παράδειγμα, ας επιστρέψουμε στο παράδειγμα στο οποίο θέλετε να διαπιστώσετε το διάστημα που παρεμβάλλεται μεταξύ των παραγγελιών για κάθε ένα από τα προϊόντα σας. Για τον προσδιορισμό αυτού του διαστήματος, πρέπει να συγκρίνετε κάθε ημερομηνία παραγγελίας με τις υπόλοιπες ημερομηνίες παραγγελίας για το συγκεκριμένο προϊόν. Μπορείτε να δημιουργήσετε ένα ερώτημα, το οποίο εμφανίζει αυτές τις πληροφορίες, χρησιμοποιώντας το πρότυπο βάσης δεδομένων Northwind.

Πώς μπορώ να ρυθμίσω το πρότυπο βάσης δεδομένων Northwind

  1. Στην καρτέλα Αρχείο, επιλέξτε Δημιουργία.

  2. Στην περιοχή Διαθέσιμα πρότυπα, επιλέξτε Δείγματα προτύπων.

  3. Επιλέξτε Northwind και, στη συνέχεια, κάντε κλικ στην επιλογή Δημιουργία.

  4. Ακολουθήστε τις οδηγίες στη σελίδα Northwind Traders (στην καρτέλα αντικειμένου Οθόνη έναρξης) για να ανοίξετε τη βάση δεδομένων και έπειτα κλείστε το παράθυρο διαλόγου σύνδεσης.

  1. Στην καρτέλα Δημιουργία, στη λίστα Ερωτήματα, κάντε κλικ στην επιλογή Σχεδίαση ερωτήματος.

  2. Στο παράθυρο διαλόγου Εμφάνιση πίνακα, επιλέξτε την καρτέλα Ερωτήματα και, στη συνέχεια, κάντε διπλό κλικ στην επιλογή Παραγγελίες προϊόντων.

  3. Κλείστε το παράθυρο διαλόγου Εμφάνιση πίνακα.

  4. Κάντε διπλό κλικ στο πεδίο Αναγνωριστικό προϊόντος και στο πεδίο Ημερομηνία παραγγελίας για να τα προσθέσετε στο πλέγμα σχεδίασης ερωτήματος.

  5. Στη γραμμή Ταξινόμηση της στήλης Αναγνωριστικό προϊόντος του πλέγματος, επιλέξτε Αύξουσα.

  6. Στη γραμμή Ταξινόμηση της στήλης Ημερομηνία παραγγελίας του πλέγματος, επιλέξτε Φθίνουσα.

  7. Στην τρίτη στήλη του πλέγματος, κάντε δεξιό κλικ στη γραμμή Πεδίο και έπειτα κάντε κλικ στην επιλογή Ζουμ του μενού συντόμευσης.

  8. Στο παράθυρο διαλόγου Ζουμ, πληκτρολογήστε ή επικολλήστε την ακόλουθη παράσταση:

    Prior Date: (SELECT MAX([Order Date]) 
    FROM [Product Orders] AS [Old Orders]
    WHERE [Old Orders].[Order Date] < [Product Orders].[Order Date]
    AND [Old Orders].[Product ID] = [Product Orders].[Product ID])

Αυτή η παράσταση είναι το δευτερεύον ερώτημα. Για κάθε γραμμή, το δευτερεύον ερώτημα επιλέγει την πιο πρόσφατη ημερομηνία παραγγελίας που είναι λιγότερο πρόσφατη από την ημερομηνία παραγγελίας που είναι ήδη συσχετισμένη με τη γραμμή. Σημειώστε πώς χρησιμοποιείτε τη λέξη-κλειδί AS για τη δημιουργία ψευδώνυμου πίνακα, ώστε να μπορείτε να συγκρίνετε τιμές του δευτερεύοντος ερωτήματος με τις τιμές της τρέχουσας γραμμής του κύριου ερωτήματος.

  1. Στην τέταρτη στήλη του πλέγματος, στη γραμμή Πεδίο, πληκτρολογήστε την ακόλουθη παράσταση:

    Interval: [Order Date]-[Prior Date]

Αυτή η παράσταση υπολογίζει το διάστημα ανάμεσα σε κάθε ημερομηνία παραγγελίας και την προηγούμενη ημερομηνία παραγγελίας για το συγκεκριμένο προϊόν, χρησιμοποιώντας την τιμή για την προηγούμενη ημερομηνία που ορίσαμε με χρήση ενός δευτερεύοντος ερωτήματος.

  1. Στην καρτέλα Σχεδίαση, στην ομάδα Αποτελέσματα, κάντε κλικ στο στοιχείο Εκτέλεση.

    1. Το ερώτημα εκτελείται και εμφανίζει μια λίστα με τα ονόματα προϊόντων, τις ημερομηνίες παραγγελίας, τις προηγούμενες ημερομηνίες παραγγελίας και το διάστημα μεταξύ των ημερομηνιών παραγγελίας. Τα αποτελέσματα ταξινομούνται πρώτα κατά αναγνωριστικό προϊόντος (σε αύξουσα σειρά) και, στη συνέχεια, κατά ημερομηνία παραγγελίας (σε φθίνουσα σειρά).

    2. ΣΗΜΕΙΩΣΗ : Επειδή το αναγνωριστικό προϊόντος είναι ένα πεδίο αναζήτησης, από προεπιλογή, η Access εμφανίζει τις τιμές αναζήτησης (στη συγκεκριμένη περίπτωση, το όνομα προϊόντος), αντί για τα πραγματικά αναγνωριστικά προϊόντος. Παρόλο που το γεγονός αυτό αλλάζει τις τιμές που εμφανίζονται, δεν αλλάζει τη σειρά ταξινόμησης.

  2. Κλείστε τη βάση δεδομένων Northwind.

Αρχή της σελίδας

Χρήση ενός δευτερεύοντος ερωτήματος ως κριτήριο για ένα πεδίο ερωτήματος

Μπορείτε να χρησιμοποιήσετε ένα δευτερεύον ερώτημα ως κριτήρια πεδίου. Χρησιμοποιήστε ένα δευτερεύον ερώτημα ως κριτήριο πεδίου, όταν θέλετε να χρησιμοποιήσετε το δευτερεύον ερώτημα για να περιορίσετε τις τιμές που εμφανίζει το πεδίο.

Για παράδειγμα, ας υποθέσουμε ότι θέλετε να εξετάσετε μια λίστα με τις παραγγελίες που έχουν υποβληθεί σε επεξεργασία από υπαλλήλους οι οποίοι δεν είναι αντιπρόσωποι πωλήσεων. Για να δημιουργήσετε αυτή τη λίστα, πρέπει να συγκρίνετε το αναγνωριστικό υπαλλήλου για κάθε παραγγελία με μια λίστα των αναγνωριστικών υπαλλήλων για τους υπαλλήλους που δεν είναι αντιπρόσωποι πωλήσεων. Για να δημιουργήσετε αυτή τη λίστα και να τη χρησιμοποιήσετε ως κριτήριο πεδίου, χρησιμοποιείτε ένα δευτερεύον ερώτημα, όπως φαίνεται στη διαδικασία που ακολουθεί:

  1. Ανοίξτε τη βάση δεδομένων Northwind 2007.accdb και ενεργοποιήστε το περιεχόμενό της.

  2. Κλείστε τη φόρμα σύνδεσης

  3. Στην καρτέλα Δημιουργία, στην ομάδα Άλλο, κάντε κλικ στο στοιχείο Σχεδίαση ερωτημάτων.

  4. Στο παράθυρο διαλόγου Εμφάνιση πίνακα, στην καρτέλα Πίνακες, κάντε διπλό κλικ στις επιλογές Παραγγελίες και Υπάλληλοι.

  5. Κλείστε το παράθυρο διαλόγου Εμφάνιση πίνακα.

  6. Στον πίνακα "Παραγγελίες", κάντε διπλό κλικ στο πεδίο Αναγνωριστικό υπαλλήλου, το πεδίο Αναγνωριστικό παραγγελίας και στο πεδίο Ημερομηνία παραγγελίας για να τα προσθέσετε στο πλέγμα σχεδίασης ερωτήματος. Στον πίνακα "Υπάλληλοι", κάντε διπλό κλικ στο πεδίο Θέση στην εταιρεία για να το προσθέσετε στο πλέγμα σχεδίασης.

  7. Κάντε δεξιό κλικ στη γραμμή Κριτήρια της στήλης "Αναγνωριστικό υπαλλήλου" και, στη συνέχεια, επιλέξτε Ζουμ στο μενού συντόμευσης.

  8. Στο πλαίσιο Ζουμ, πληκτρολογήστε ή επικολλήστε την ακόλουθη παράσταση:

    IN (SELECT [ID] FROM [Employees] 
    WHERE [Job Title]<>'Sales Representative')

    Αυτό είναι ένα δευτερεύον ερώτημα. Επιλέγει όλα τα αναγνωριστικά υπαλλήλων όπου ο υπάλληλος δεν έχει θέση στην εταιρεία "Αντιπρόσωπος πωλήσεων" και προμηθεύει αυτό το σύνολο αποτελεσμάτων στο κύριο ερώτημα. Στη συνέχεια, το κύριο ερώτημα πραγματοποιεί έλεγχο για να διαπιστώσει εάν τα αναγνωριστικά υπαλλήλου από τον πίνακα "Παραγγελίες" βρίσκονται στο σύνολο αποτελεσμάτων.

  9. Στην καρτέλα Σχεδίαση, στην ομάδα Αποτελέσματα, κάντε κλικ στο στοιχείο Εκτέλεση.

    Το ερώτημα εκτελείται και τα αποτελέσματα ερωτήματος εμφανίζουν μια λίστα των παραγγελιών που έχουν υποβληθεί σε επεξεργασία από υπαλλήλους που δεν είναι αντιπρόσωποι πωλήσεων.

Αρχή της σελίδας

Κοινές λέξεις-κλειδιά SQL που μπορείτε να χρησιμοποιήσετε με ένα δευτερεύον ερώτημα

Υπάρχουν αρκετές λέξεις-κλειδιά SQL που μπορείτε να χρησιμοποιήσετε με ένα δευτερεύον ερώτημα:

ΣΗΜΕΙΩΣΗ : Η λίστα δεν είναι αποκλειστική. Μπορείτε να χρησιμοποιήσετε οποιεσδήποτε έγκυρες λέξεις-κλειδιά SQL σε ένα δευτερεύον ερώτημα, εκτός από τις λέξεις-κλειδιά ορισμού δεδομένων.

  • ALL    Χρησιμοποιήστε τον όρο ALL σε μια πρόταση WHERE για να ανακτήσετε γραμμές που ικανοποιούν τη συνθήκη όταν συγκριθούν με κάθε γραμμή που επιστρέφεται από το δευτερεύον ερώτημα.

Για παράδειγμα, ας υποθέσουμε ότι αναλύετε δεδομένα μαθητών σε ένα κολλέγιο. Οι μαθητές πρέπει να διατηρούν ένα ελάχιστο GPA, το οποίο ποικίλλει από ειδίκευση σε ειδίκευση. Οι ειδικεύσεις και τα ελάχιστα GPA των μαθητών αποθηκεύονται σε έναν πίνακα με όνομα "Ειδικεύσεις" (Majors) και οι σχετικές πληροφορίες μαθητών αποθηκεύονται σε έναν πίνακα με όνομα "Εγγραφές_μαθητών" (Student_Records).

Για να δείτε μια λίστα των ειδικεύσεων (και τα ελάχιστα GPA) για τις οποίες κάθε μαθητής με τη συγκεκριμένη ειδίκευση υπερβαίνει το ελάχιστο GPA, μπορείτε να χρησιμοποιήσετε το ακόλουθο ερώτημα:

SELECT [Major]; [Min_GPA] 
FROM [Majors]
WHERE [Min_GPA] < ALL
(SELECT [GPA] FROM [Student_Records]
WHERE [Student_Records].[Major]=[Majors].[Major]);
  • ANY    Χρησιμοποιήστε τον όρο ANY σε μια πρόταση WHERE για να ανακτήσετε γραμμές που ικανοποιούν τη συνθήκη όταν συγκριθούν με τουλάχιστον με μία από τις γραμμές που επιστρέφονται από το δευτερεύον ερώτημα.

    Για παράδειγμα, ας υποθέσουμε ότι αναλύετε δεδομένα μαθητών σε ένα κολλέγιο. Οι μαθητές πρέπει να διατηρούν ένα ελάχιστο GPA, το οποίο ποικίλλει από ειδίκευση σε ειδίκευση. Οι ειδικεύσεις και τα ελάχιστα GPA των μαθητών αποθηκεύονται σε έναν πίνακα με όνομα "Ειδικεύσεις" (Majors) και οι σχετικές πληροφορίες μαθητών αποθηκεύονται σε έναν πίνακα με όνομα "Εγγραφές_μαθητών" (Student_Records).

    Για να δείτε μια λίστα των ειδικεύσεων (και τα ελάχιστα GPA) για τις οποίες κάθε μαθητής με τη συγκεκριμένη ειδίκευση δεν πληροί το ελάχιστο GPA, μπορείτε να χρησιμοποιήσετε το ακόλουθο ερώτημα:

    SELECT [Major]; [Min_GPA] 
    FROM [Majors]
    WHERE [Min_GPA] > ANY
    (SELECT [GPA] FROM [Student_Records]
    WHERE [Student_Records].[Major]=[Majors].[Major]);

    ΣΗΜΕΙΩΣΗ : Μπορείτε, επίσης, να χρησιμοποιήσετε τη λέξη-κλειδί SOME για τον ίδιο σκοπό. Η λέξη-κλειδί SOME είναι συνώνυμη με τον όρο ANY.

  • EXISTS    Χρησιμοποιήστε τον όρο EXISTS σε μια πρόταση WHERE για να υποδείξετε ότι ένα δευτερεύον ερώτημα πρέπει να επιστρέφει τουλάχιστον μία γραμμή. Μπορείτε, επίσης, να εισαγάγετε το πρόθημα EXISTS με τον όρο NOT, για να υποδείξετε ότι ένα δευτερεύον ερώτημα δεν πρέπει να επιστρέφει καθόλου γραμμές.

    Για παράδειγμα, το ακόλουθο ερώτημα επιστρέφει μια λίστα με τα προϊόντα που βρίσκονται σε τουλάχιστον μία υπάρχουσα παραγγελία:

    SELECT *
    FROM [Products]
    WHERE EXISTS
    (SELECT * FROM [Order Details]
    WHERE [Order Details].[Product ID]=[Products].[ID]);

    Χρησιμοποιώντας τον όρο NOT EXISTS, το ερώτημα επιστρέφει μια λίστα με τα προϊόντα που δεν βρίσκονται σε τουλάχιστον μία υπάρχουσα παραγγελία:

    SELECT *
    FROM [Products]
    WHERE NOT EXISTS
    (SELECT * FROM [Order Details]
    WHERE [Order Details].[Product ID]=[Products].[ID]);
  • IN    Χρησιμοποιήστε τον όρο IN σε μια πρόταση WHERE για να επιβεβαιώσετε ότι μια τιμή στην τρέχουσα γραμμή του κύριου ερωτήματος αποτελεί μέρος του συνόλου που επιστρέφει το δευτερεύον ερώτημα. Επίσης, μπορείτε να χρησιμοποιήσετε ως πρόθημα τον όρο IN μαζί με τον όρο NOT, για να βεβαιωθείτε ότι η τιμή στη τρέχουσα γραμμή του κύριου ερωτήματος δεν αποτελεί μέρος του συνόλου που επιστρέφει το δευτερεύον ερώτημα.

    Για παράδειγμα, το ακόλουθο ερώτημα επιστρέφει μια λίστα με παραγγελίες (με ημερομηνίες παραγγελίας) που έχουν υποβληθεί σε επεξεργασία από υπαλλήλους που δεν είναι αντιπρόσωποι πωλήσεων:

    SELECT [Order ID]; [Order Date]
    FROM [Orders]
    WHERE [Employee ID] IN
    (SELECT [ID] FROM [Employees]
    WHERE [Job Title]<>'Sales Representative');

    Χρησιμοποιώντας τον όρο NOT IN, μπορείτε να συντάξετε το ίδιο ερώτημα με αυτόν τον τρόπο:

    SELECT [Order ID]; [Order Date]
    FROM [Orders]
    WHERE [Employee ID] NOT IN
    (SELECT [ID] FROM [Employees]
    WHERE [Job Title]='Sales Representative');

Αρχή της σελίδας

Αναπτύξτε τις δεξιότητές σας
Εξερευνήστε το περιεχόμενο της εκπαίδευσης
Αποκτήστε πρώτοι τις νέες δυνατότητες
Γίνετε μέλος του Office Insider

Σας βοήθησαν αυτές οι πληροφορίες;

Σας ευχαριστούμε για τα σχόλιά σας!

Σας ευχαριστούμε για τα σχόλιά σας! Φαίνεται ότι μπορεί να είναι χρήσιμο να συνδεθείτε με έναν από τους συνεργάτες υποστήριξης του Office.

×