Μορφοποίηση και εσοχή ενός SQL ερωτήματος

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

Γιατί μορφοποίηση SQL;

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

Υποστηριζόμενοι τύποι ερωτημάτων SQL

Αυτό το εργαλείο υποστηρίζει όλους τους τύπους ερωτημάτων SQL, συμπεριλαμβανομένων των SELECT, INSERT, UPDATE, DELETE, καθώς και οδηγίες δημιουργίας και τροποποίησης πίνακα (CREATE, ALTER, DROP).

Πώς να μορφοποιήσετε ερωτήματα SQL

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

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

Χρησιμοποιήστε μορφοποιημένη SQL

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

Ο κώδικας SQL θα πρέπει να μοιάζει με αυτό:


ΕΠΙΛΟΓΗ u.id, u.name, u.email,
       p.product_name, p.price,
       ο.ημερομηνία_παραγγελίας, ο.ποσότητα,
       (ΕΠΙΛΕΞΤΕ ΠΟΣΟ (p2.τιμή * o2.ποσότητα)
        ΑΠΟ παραγγελίες o2
        JOIN προϊόντα p2 ON o2.product_id = p2.id
        ΠΟΥ o2.user_id = u.id) ως σύνολο_δαπανημένων
ΑΠΟ χρήστες u
ΕΓΓΡΑΦΗ παραγγελιών o ON u.id = o.user_id
JOIN προϊόντα p ON o.product_id = p.id
ΠΟΥ ΕΙΣΑΙ ΜΕΣΑ (
    SELECT user_id
    ΑΠΟ παραγγελίες
    WHERE order_date >= '2023-01-01' AND order_date <= '2023-12-31'
    ΟΜΑΔΑ ΑΝΑ user_id
    ΕΧΟΝΤΑΣ COUNT(*) > 5
)
ΚΑΙ p.τιμή > 50
ORDER BY U.name ASC, o.order_date DESC
ΟΡΙΟ 10;

    

Συχνές ερωτήσεις

Ποιες διάλεκτοι SQL υποστηρίζονται: MySQL, PostgreSQL, SQL Server;

Ο εκπαιδευτής αναγνωρίζει την τυπική σύνταξη SQL (ANSI) καθώς και τις κύριες επεκτάσεις των MySQL, PostgreSQL, SQL Server (T-SQL), Oracle (PL/SQL) και SQLite. Οι λέξεις-κλειδιά ειδικά για κάθε μηχανή (LIMIT της MySQL και της PostgreSQL, TOP του SQL Server, RETURNING της PostgreSQL, MERGE) έχουν εσοχές σωστά. Οι εγγενείς λειτουργίες ειδικά για έναν κινητήρα διατηρούνται ως έχουν χωρίς επικύρωση.

Διαχειρίζεται ο μορφοποιητής CTE και αναδρομικά ερωτήματα;

Ναι. Τα CTE (Κοινές εκφράσεις πίνακα) που δηλώνονται με WITH ... AS (...) έχουν εσοχές στο δικό τους μπλοκ και τα αναδρομικά CTE (WITH RECURSIVE) αναγνωρίζονται. Αυτό κάνει τα πολύπλοκα ερωτήματα πολύ πιο ευανάγνωστα, συμπεριλαμβανομένων ιεραρχιών (δέντρα, γραφήματα) και συρόμενων παραθύρων. Τα συσχετισμένα υποερωτήματα ευθυγραμμίζονται επίσης με το γονικό εύρος τους.

Ποια είναι η διαφορά μεταξύ ενός μορφοποιητή SQL και ενός προγράμματος βελτιστοποίησης ερωτημάτων;

Ένας μορφοποιητής SQL δεν αλλάζει τη σημασιολογία του ερωτήματος: απλώς αναδιοργανώνει τον κώδικα οπτικά (σπασίματα γραμμής, εσοχή, πεζά κεφαλαίων λέξεων-κλειδιών). Ένας βελτιστοποιητής ξαναγράφει το ερώτημα ή προτείνει τροποποιήσεις (που λείπουν ευρετήρια, συνδέσεις για αναδιοργάνωση, υποερωτήματα για μετατροπή σε συνδέσεις) για τη βελτίωση της απόδοσης. Για να αναλύσετε το σχέδιο εκτέλεσης, χρησιμοποιήστε EXPLAIN ή EXPLAIN ANALYZE ανάλογα με τον κινητήρα.

Διατηρούνται τα σχόλια SQL;

Ναι. Τα ενσωματωμένα σχόλια -- σχόλιο και τα σχόλια πολλών γραμμών /* ... */ διατηρούνται στην αρχική τους θέση. Αυτό είναι απαραίτητο για την τεκμηρίωση ενός σύνθετου ερωτήματος ή επισήμανσης ενοτήτων (TODO, υπόδειξη για το εργαλείο βελτιστοποίησης, έκδοση μιας μετεγκατάστασης). Εάν μεταβιβάσετε το ερώτημα σε μια μηχανή που ερμηνεύει υποδείξεις σχολιασμού (/*+ INDEX(...) */ στο Oracle), διατηρούνται επίσης.

Γιατί οι λέξεις-κλειδιά SQL έχουν κεφαλαία;

Η χρήση κεφαλαίων λέξεων-κλειδιών (SELECT, FROM, WHERE, JOIN) είναι μια ιστορική σύμβαση που τις διακρίνει οπτικά από τα αναγνωριστικά (ονόματα πινάκων, στήλες). Αυτή η πρακτική διευκολύνει την ανάγνωση, ειδικά σε μεγάλες απορίες. Ωστόσο, τα ονόματα πινάκων και στηλών διατηρούνται στην αρχική τους θήκη για να τηρούνται οι συμβάσεις του σχήματος (ιδιαίτερα στην PostgreSQL όπου τα πεζά και πεζά είναι ευαίσθητα για αναγνωριστικά με εισαγωγικά).

Επικυρώνει ο μορφοποιητής τη σύνταξη SQL;

Ο μορφοποιητής εκτελεί μια ελαφριά συντακτική ανάλυση η οποία εντοπίζει χονδροειδή σφάλματα (μη ισορροπημένες παρενθέσεις, λείπει ερωτηματικό στο τέλος της πρότασης, ασυνεπείς λέξεις-κλειδιά). Δεν επικυρώνει την ύπαρξη πινάκων και στηλών, ούτε τη συμμόρφωση με ένα συγκεκριμένο σχήμα. Για να το κάνετε αυτό, εκτελέστε το ερώτημα σε λειτουργία EXPLAIN στη βάση δεδομένων σας ή χρησιμοποιήστε ένα αποκλειστικό linter όπως το sqlfluff.

Παράδειγμα αιτήματος

curl -X POST https://cdrn.fr/api/v1/tools/sql-formatter/execute \
  -H "Content-Type: application/json" \
  -d '{"input":"..."}'

Σχήμα εισόδου

Πεδίο Τύπος Απαιτείται Προεπιλογή
input text

Σημεία πρόσβασης

  • GET https://cdrn.fr/api/v1/tools - εμφανίζει όλα τα διαθέσιμα εργαλεία
  • GET https://cdrn.fr/api/v1/tools/sql-formatter - ανακτά το σχήμα αυτού του εργαλείου
  • POST https://cdrn.fr/api/v1/tools/sql-formatter/execute - εκτελεί αυτό το εργαλείο με payload JSON