SQL Subquery Συνδεθείτε με το Outer Query

Sql Subquery Syndetheite Me To Outer Query



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

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







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



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



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





Λάβετε υπόψη ότι υποθέτουμε ότι δεν είστε νέοι σε SQL, SQL Joins, SQL Subqueries ή άλλα. Ωστόσο, αν είστε, ελέγξτε τα σεμινάρια μας για τα θέματα για να ανακαλύψετε περισσότερα.

Κατακτήστε τις εξωτερικές συνδέσεις SQL

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



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

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

Στην περίπτωση μιας δεξιάς εξωτερικής ένωσης, το ερώτημα επιστρέφει όλες τις σειρές από τον δεξιό πίνακα αλλά μόνο τις αντίστοιχες σειρές από τον αριστερό πίνακα. Ομοίως, το ερώτημα περιλαμβάνει τις τιμές NULL εάν δεν υπάρχουν αντίστοιχες σειρές από τον αριστερό πίνακα.

Τέλος, έχουμε την πλήρη εξωτερική ένωση. Αυτή η ένωση επιστρέφει όλες τις σειρές από τον δεξιό και τον αριστερό πίνακα και τις τιμές NULL για τυχόν μη αντιστοιχισμένες εγγραφές.

SQL Subquery Joins

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

Αν ρωτάς, είναι αυτό; Ναι, αυτό είναι το μόνο που κάνουν οι ενώσεις subquery.

Για να το αποδείξετε καλύτερα, πάρτε το ακόλουθο συντακτικό παράδειγμα που φαίνεται στα ακόλουθα:

ΕΠΙΛΕΓΩ *
ΑΠΟ τον πίνακα 1
ΑΡΙΣΤΕΡΑ ΕΞΩΤΕΡΙΚΗ ΣΥΝΔΕΣΗ (
ΕΠΙΛΟΓΗ στήλη1, στήλη 2
ΑΠΟ τον πίνακα 2
) AS υποερώτημα
ON table1.column3 = subquery.column1;


Στην προηγούμενη σύνταξη, επιλέγουμε όλες τις στήλες από τον πίνακα 1 χρησιμοποιώντας έναν αριστερό εξωτερικό σύνδεσμο για να τον ενώσουμε με ένα υποερώτημα. Ο ρόλος του υποερωτήματος είναι να φέρει τις καθορισμένες στήλες από τον Πίνακα 2. Στη συνέχεια, το ενώνουμε με τον Πίνακα 1 υπό την προϋπόθεση της στήλης 2 από τον Πίνακα 1 και της στήλης 1 από το υποερώτημα.

Πρακτικό παράδειγμα:

Θεωρητικά, φαίνεται λιγότερο διαισθητικό, αλλά ας πάρουμε ένα πραγματικό σενάριο λαμβάνοντας τη βάση δεδομένων Sakila.

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

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

SELECT f.title, l.name AS γλώσσα
ΑΠΟ την ταινία f
ΑΡΙΣΤΕΡΑ ΕΞΩΤΕΡΙΚΗ ΣΥΝΔΕΣΗ (
SELECT language_id, όνομα
ΑΠΟ ΤΗ ΓΛΩΣΣΑ
) ΩΣ λ
ON f.language_id = l.language_id;


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

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

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

Ένα παράδειγμα εξόδου είναι το εξής:


Μπορούμε επίσης να κάνουμε το ίδιο με μια δεξιά εξωτερική ένωση. Η σύνταξη έχει ως εξής:

ΕΠΙΛΕΓΩ *
ΑΠΟ τον πίνακα 1
ΔΕΞΙΑ ΕΞΩΤΕΡΙΚΗ ΣΥΝΔΕΣΗ (
ΕΠΙΛΟΓΗ στήλη1, στήλη 2
ΑΠΟ τον πίνακα 2
) AS υποερώτημα
ON table1.column3 = subquery.column1;


Αυτό συμπεριφέρεται παρόμοια, αλλά περιλαμβάνει όλες τις εγγραφές στον σωστό πίνακα, ακόμα κι αν δεν υπάρχουν αντίστοιχες εγγραφές.

Χρήσιμα πράγματα που πρέπει να γνωρίζετε

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

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

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

συμπέρασμα

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