Ένας οδηγός βήμα προς βήμα για την ανάγνωση και την κατανόηση ερωτημάτων SQL - KDnuggets

Ένας οδηγός βήμα προς βήμα για την ανάγνωση και την κατανόηση ερωτημάτων SQL – KDnuggets

Κόμβος πηγής: 3091384

Ένας οδηγός βήμα προς βήμα για την ανάγνωση και την κατανόηση ερωτημάτων SQL
Εικόνα από Freepik
 

Η SQL, ή Standard Query Language, είναι μια γλώσσα προγραμματισμού για τη διαχείριση και το χειρισμό δεδομένων μέσα σε ένα σχεσιακό σύστημα διαχείρισης βάσεων δεδομένων (RDBMS). Είναι μια τυπική γλώσσα που χρησιμοποιείται σε πολλές εταιρείες για να βοηθήσει τις επιχειρήσεις να έχουν ομαλή πρόσβαση στα δεδομένα. Επειδή χρησιμοποιείται ευρέως, η απασχόληση συνήθως αναφέρει την SQL ως μία από τις απαραίτητες δεξιότητες. Γι' αυτό είναι απαραίτητο να μάθετε για την SQL.

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

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

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

Θα πρέπει να κατανοήσουμε τα τυπικά ερωτήματα SQL για να κατανοήσουμε το γενικό ερώτημα SQL. Τα περισσότερα ερωτήματα SQL ξεκινούν με το SELECT ρήτρα και ακολουθούν με το ΑΠΟ ρήτρα. Συνεχίζοντας από εκεί, τα ερωτήματα ακολουθούνται συχνότερα από Ενώνω, ΠΟΥ, GROUP BY, ΤΑΞΙΝΟΜΗΣΗ ΚΑΤΑ, και HAVING ρήτρες.

Οι παραπάνω όροι είναι τυπικές στα ερωτήματα SQL που πρέπει να κατανοήσουμε. Για κάθε ρήτρα, οι λειτουργίες τους είναι:

  1. SELECT: Ποιες στήλες πρέπει να ληφθούν από τον πίνακα
  2. ΑΠΟ: Από ποιον πίνακα προήλθαν τα δεδομένα
  3. Ενώνω: Συνδυάστε πίνακες με το καθορισμένο αναγνωριστικό
  4. ΠΟΥ: Φιλτράρισμα δεδομένων με βάση την κατάσταση
  5. GROUP BY: Οργανώστε τα δεδομένα με βάση την τιμή της στήλης και επιτρέψτε την εκτέλεση της συνάρτησης συνάθροισης.
  6. ΤΑΞΙΝΟΜΗΣΗ ΚΑΤΑ: Τακτοποιήστε τη σειρά των αποτελεσμάτων δεδομένων με βάση τη συγκεκριμένη στήλη
  7. HAVING: Η συνθήκη φίλτρου για τη συνάρτηση συνάθροισης με την οποία δεν μπορεί να καθοριστεί ΠΟΥ

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

SELECT 
  customers.name, 
  purchases.product, 
  SUM(price) as total_price 
FROM 
  purchases 
  JOIN customers ON purchases.cust_id = customers.id 
WHERE 
  purchases.category = 'kitchen' 
GROUP BY 
  customers.name, 
  purchases.product 
HAVING 
  total_price > 10000 
ORDER BY 
  total_price DESC;

 

Όταν κοιτάζετε το παραπάνω ερώτημα, προσπαθήστε να προσδιορίσετε τις τυπικές ρήτρες. Η ρήτρα θα σας παρέχει μια κατανόηση των δεδομένων που επιλέγονται (SELECT), από πού είναι (ΑΠΟ και Ενώνω), και η συνθήκη (ΠΟΥ, GROUP BY, ΤΑΞΙΝΟΜΗΣΗ ΚΑΤΑ, να HAVING). 

Για παράδειγμα, διαβάζοντας το παραπάνω ερώτημα θα κατανοήσετε τα ακόλουθα:

  1. προσπαθούμε να πάρουμε τρία διαφορετικά είδη δεδομένων: το Όνομα από έναν πίνακα που ονομάζεται πελάτες, το Προϊόν από έναν πίνακα που ονομάζεται αγορές και τη συγκέντρωση στηλών τιμών που δεν προσδιορίζουν από πού προέρχεται ο πίνακας και με το ψευδώνυμο total_price (Πληροφορίες από τον όρο SELECT). 
  1. Τα συνολικά δεδομένα θα προέρχονται από πίνακες αγορών και πελατών που ενώνονται χρησιμοποιώντας τη στήλη cust_id από τις αγορές και τη στήλη id από τον πίνακα του πελάτη (Πληροφορίες από τον όρο ΑΠΟ) και Ενώνω). 
  1. Θα επιλέγαμε μόνο τα δεδομένα με την τιμή στήλης κατηγορίας στον πίνακα αγορών ως "κουζίνα" (Πληροφορίες από την ρήτρα ΠΟΥ), 
  1. ομάδα για τη συνάρτηση συνάθροισης με το όνομα και τη στήλη προϊόντος που προήλθε από τον αντίστοιχο πίνακα (Πληροφορίες από τον όρο GROUP BY), 
  1. φιλτράρεται επίσης από το άθροισμα του αποτελέσματος της συνάρτησης συνάθροισης όπου η συνολική_τιμή είναι μεγαλύτερη από 10000 (πληροφορίες από τον όρο HAVING), Και 
  1. παραγγείλετε τα δεδομένα φθίνοντας σύμφωνα με τη συνολική_τιμή (πληροφορίες από τον όρο ΤΑΞΙΝΟΜΗΣΗ ΚΑΤΑ).

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

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

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

WITH customerspending AS (
  SELECT 
    customers.id, 
    SUM(purchases.price) as total_spending 
  FROM 
    purchases 
    JOIN customers ON purchases.cust_id = customers.id 
  GROUP BY 
    customers.id
) 
SELECT 
  c.name, 
  pd.product, 
  pd.total_product_price, 
  cs.total_spending 
FROM 
  (
    SELECT 
      purchases.cust_id, 
      purchases.product, 
      SUM(purchases.price) as total_product_price 
    FROM 
      purchases 
    WHERE 
      purchases.category = 'kitchen' 
    GROUP BY 
      purchases.cust_id, 
      purchases.product 
    HAVING 
      SUM(purchases.price) > 10000
  ) AS pd 
  JOIN customers c ON pd.cust_id = c.id 
  JOIN customerspending cs ON c.id = cs.id 
ORDER BY 
  pd.total_product_price DESC;

 

Το ερώτημα φαίνεται πιο περίπλοκο και μεγαλύτερο τώρα, αλλά η αρχική εστίαση θα πρέπει να είναι στο τελικό ΕΠΙΛΕΓΩ, που φαίνεται να προσπαθεί να παράγει το συνολικό ιστορικό δαπανών και αγορών του πελάτη. Προσπαθήστε να αξιολογήσετε ποιο θέλει να είναι το τελικό αποτέλεσμα και αναλύστε το από εκεί.

Έχουμε τη διορατικότητα του αποτελέσματος πρέπει να είναι από τα ερωτήματα. Το επόμενο μέρος είναι να δούμε ποιες είναι οι προϋποθέσεις για τον τελικό SELECT είναι. Η ρήτρα προϋποθέσεων, συμπεριλαμβανομένων ΠΟΥ, GROUP BY, ΤΑΞΙΝΟΜΗΣΗ ΚΑΤΑ, να HAVING ήταν αυτοί που έλεγχαν το συνολικό αποτέλεσμα δεδομένων. 

Προσπαθήστε να διαβάσετε και να κατανοήσετε τις συνθήκες του ερώτημά μας και θα κατανοήσουμε καλύτερα το τελικό αποτέλεσμα του ερώτημά μας. Για παράδειγμα, στο προηγούμενο ερώτημά μας SQL, η τελική συνθήκη είναι μόνο το ΤΑΞΙΝΟΜΗΣΗ ΚΑΤΑ. Αυτό σημαίνει ότι το τελικό αποτέλεσμα θα ταξινομηθεί με βάση τη συνολική τιμή του προϊόντος σε φθίνουσα σειρά. 

Η γνώση των τελικών συνθηκών θα σας βοηθήσει να κατανοήσετε ένα σημαντικό μέρος του ερωτήματος και τη συνολική πρόθεση του ερωτήματος.

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

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

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

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

SELECT 
  purchases.cust_id, 
  purchases.product, 
  SUM(purchases.price) as total_product_price 
FROM 
  purchases 
WHERE 
  purchases.category = 'kitchen' 
GROUP BY 
  purchases.cust_id, 
  purchases.product 
HAVING 
  SUM(purchases.price) > 10000

 

Στη συνέχεια, μεταβαίνουμε στον πιο απομακρυσμένο κώδικα που είναι αυτός:

WITH customerspending AS (
  SELECT 
    customers.id, 
    SUM(purchases.price) as total_spending 
  FROM 
    purchases 
    JOIN customers ON purchases.cust_id = customers.id 
  GROUP BY 
    customers.id
)

 

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

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

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

  1. Κατανοήστε τη Γενική Δομή Ερωτημάτων SQL
  2. Κατανοήστε την τελική επιλογή
  3. Κατανόηση της ρήτρας των τελικών συνθηκών
  4. Κατανοήστε την Τελική Συμμετοχή
  5. Ανάγνωση και επανάληψη αντίστροφης σειράς

 
 

Cornellius Yudha Wijaya είναι βοηθός διευθυντής επιστήμης δεδομένων και συγγραφέας δεδομένων. Ενώ εργάζεται με πλήρη απασχόληση στην Allianz Indonesia, του αρέσει να μοιράζεται συμβουλές για Python και Data μέσω των μέσων κοινωνικής δικτύωσης και των μέσων συγγραφής.

Σφραγίδα ώρας:

Περισσότερα από KDnuggets