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

Τι είναι η σύνταξη SQL;

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

Οι σημαντικότερες συντακτικές δομές της SQL είναι οι εντολές SQL, οι οποίες μπορεί επίσης να περιλαμβάνουν ρήτρες. Και οι δύο αναφέρονται συνήθως ως «εντολές SQL», αν και, από τεχνική άποψη, αυτό δεν είναι απολύτως ακριβές. Ωστόσο, αυτές δεν είναι οι μόνες συντακτικές δομές της SQL. Παρακάτω θα βρείτε έναν πίνακα που σας παρέχει μια γενική εικόνα των συντακτικών δομών της SQL.

Όρος SQL Επεξήγηση Παράδειγμα
Δήλωση Δίνει εντολή στο DBMS να εκτελέσει μια ενέργεια· τελειώνει με ερωτηματικό CREATE TABLE People;
Ρήτρα Τροποποιεί μια δήλωση· μπορεί να εμφανιστεί μόνο μέσα σε δηλώσεις WHERE, HAVING
Έκφραση Επιστρέφει μια τιμή κατά την αξιολόγηση 6 * 7
Αναγνωριστικό Όνομα αντικειμένου βάσης δεδομένων, μεταβλητής ή διαδικασίας· μπορεί να είναι προσδιορισμένο ή μη προσδιορισμένο dbname.tablename / tablename
Προτάση Έκφραση που αποτιμάται σε TRUE, FALSE ή UNKNOWN Age < 42
Ερώτηση Ειδική δήλωση· επιστρέφει το σύνολο των εγγραφών που βρέθηκαν SELECT Name FROM People WHERE Age < 42;
Συνάρτηση Επεξεργάζεται μία ή περισσότερες τιμές· συνήθως δημιουργεί μια νέα τιμή UPPER('text') -- returns 'TEXT'
Σχόλιο Χρησιμοποιείται για να σχολιάσει κώδικα SQL· αγνοείται από το RDBMS -- Comment up to end of line / /*multiline comment if necessary*/
Note

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

Πώς εκτελείται ο κώδικας SQL;

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

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

Διεπαφή Περιγραφή Παραδείγματα
Διεπαφή γραμμής εντολών (CLI) Διεπαφή βασισμένη σε κείμενο· ο κώδικας SQL εισάγεται και εκτελείται, το αποτέλεσμα εμφανίζεται σε κείμενο mysql, psql, mysqlsh
Γραφική διεπαφή χρήστη (GUI) Ο κώδικας SQL εισάγεται σε παράθυρο κειμένου και/ή δημιουργείται ως απόκριση στην αλληλεπίδραση του χρήστη. Ο κώδικας SQL εκτελείται και το αποτέλεσμα εμφανίζεται ως πίνακες phpMyAdmin, MySQL Workbench, HeidiSQL
Διεπαφή προγραμματισμού εφαρμογών (API) Επιτρέπει την άμεση επικοινωνία με ένα RDBMS. Ο κώδικας SQL περιλαμβάνεται και εκτελείται ως συμβολοσειρά στον κώδικα της γλώσσας προγραμματισμού. Τα αποτελέσματα διατίθενται ως δομές δεδομένων για περαιτέρω χρήση PHP Data Objects (PDO), Connector/J (Java), Connector/Python, C API

Πώς να δημιουργήσετε ένα σύστημα διαχείρισης προϊόντων χρησιμοποιώντας SQL

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

Δημιουργία βάσης δεδομένων SQL

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

  • Υπάρχουν διάφορα προϊόντα και διαθέτουμε μια συγκεκριμένη ποσότητα από κάθε προϊόν σε απόθεμα.
  • Το πελατολόγιό μας περιλαμβάνει πολλούς πελάτες.
  • Οι παραγγελίες που υποβάλλονται από τους πελάτες μπορεί να περιλαμβάνουν διάφορα προϊόντα.
  • Για κάθε παραγγελία, αποθηκεύουμε την ημερομηνία της παραγγελίας και τα στοιχεία του ατόμου που την υποβάλλει, καθώς και τα προϊόντα που παραγγέλθηκαν και την ποσότητα που παραγγέλθηκε.

Αυτές οι απαιτήσεις μετατρέπονται σε μια αφηρημένη περιγραφή και στη συνέχεια σε κώδικα SQL:

  1. Δημιουργία μοντέλου
  2. Ορισμός σχήματος
  3. Εισαγωγή εγγραφών δεδομένων
  4. Ορισμός ερωτημάτων

Δημιουργία μοντέλου οντοτήτων και σχέσεων

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

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

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

  1. Ένας ιδιοκτήτης μπορεί ενδεχομένως να έχει στην κατοχή του περισσότερα από ένα αυτοκίνητα.
  2. Ένα αυτοκίνητο μπορεί να ανήκει μόνο σε έναν ιδιοκτήτη.

Αναδύονταιτρία πιθανά μοντέλα σχέσεων μεταξύ των δύο οντοτήτων:

Σχέση Οντότητες Από τα αριστερά Από τα δεξιά
Σχέση 1:1 Αυτόματο:δείκτης Ένα αυτοκίνητο μπορεί να έχει μόνο έναν δείκτη. Ένας δείκτης μπορεί να ανήκει μόνο σε ένα αυτοκίνητο.
Σχέση 1:n Ιδιοκτήτης:αυτοκίνητο Ένας ιδιοκτήτης μπορεί ενδεχομένως να έχει πολλά αυτοκίνητα. Ένα αυτοκίνητο μπορεί να ανήκει μόνο σε έναν ιδιοκτήτη.
Σχέση m:n Αυτοκίνητο:δρόμος Ένα αυτοκίνητο μπορεί να κυκλοφορεί σε πολλούς δρόμους. Πολλά αυτοκίνητα μπορούν να κινούνται σε έναν δρόμο.

Εφαρμογή προϊόντων

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

Ορισμός σχήματος

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

DROP TABLE IF EXISTS Products;
CREATE TABLE Products ( product_id int, product_name text, stocked int, price int );
sql
Note

Χρησιμοποιούμε την εντολή DROP TABLE IF EXISTS πριν ορίσουμε τον πίνακα. Αυτό διαγράφει τυχόν υπάρχοντα πίνακα και επιτρέπει την εκτέλεση του ίδιου κώδικα SQL πολλές φορές χωρίς να προκαλεί μηνύματα σφάλματος.

Προσθήκη συνόλων δεδομένων

Τώρα, θα δημιουργήσουμε μερικές δοκιμαστικές εγγραφές. Θα χρησιμοποιήσουμε την εντολή SQL INSERT INTO καθώς και τη συνάρτηση VALUES για να συμπληρώσουμε τα πεδία:

INSERT INTO Products VALUES (10, 'ABC Product', 74, 1050);
INSERT INTO Products VALUES (20, 'KLM Product', 23, 750);
INSERT INTO Products VALUES (30, 'XYZ Product', 104, 350);
sql

Ορισμός ερωτημάτων

Για να ελέγξουμε την κατάσταση του πίνακα «Προϊόντα», θα γράψουμε ένα απλό ερώτημα. Χρησιμοποιούμε την εντολή SELECT FROM και εμφανίζουμε ολόκληρο τον πίνακα:

SELECT * FROM Products;
sql

Τώρα, θα γράψουμε ένα ερώτημα λίγο πιο σύνθετο, το οποίο υπολογίζει τη συνολική αξία των προϊόντων που έχουμε σε απόθεμα:

SELECT product_name AS 'Name', (stocked * price) AS 'Value' FROM Products;
sql

Δημιουργία επιπλέον πινάκων

Στη συνέχεια, θα δημιουργήσουμε τους υπόλοιπους πίνακες που χρειαζόμαστε. Θα ακολουθήσουμε τα ίδια βήματα που ακολουθήσαμε για τον πίνακα «Προϊόντα». Πρώτα, δημιουργούμε τον πίνακα «Πελάτες»:

DROP TABLE IF EXISTS Customers;
CREATE TABLE Customers ( customer_id int, customer_name text, contact text );
sql

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

INSERT INTO Customers VALUES (100, 'EDC Customer', 'ED@example.com');
INSERT INTO Customers VALUES (200, 'WVU Customer', 'WV@example.com');
sql

Για να δούμε αν πέτυχε, θα εμφανίσουμε τον πίνακα πελατών:

SELECT * FROM Customers;
sql

Το επόμενο βήμα είναι να δημιουργήσουμε τον πίνακα «Orders»:

DROP TABLE IF EXISTS Orders;
CREATE TABLE Orders ( order_id int, customer_id int, order_date text );
sql

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

INSERT INTO Orders VALUES (1000, 100, '2022-05-03');
INSERT INTO Orders VALUES (1001, 100, '2022-05-04');
INSERT INTO Orders VALUES (1002, 200, '2022-05-08');
sql

Για να το δοκιμάσουμε, θα εκτελέσουμε τις εντολές:

SELECT * FROM Orders;
sql

Τέλος, χρειαζόμαστε έναν πίνακα για τα προϊόντα που περιλαμβάνονται σε μια παραγγελία, μαζί με την ποσότητά τους. Πρόκειται για μια σχέση m:n, καθώς μια παραγγελία μπορεί να περιλαμβάνει πολλά προϊόντα και ένα προϊόν μπορεί να εμφανίζεται σε πολλές παραγγελίες. Θα ορίσουμε έναν πίνακα που θα περιέχει τα αναγνωριστικά των παραγγελιών και των προϊόντων ως ξένα κλειδιά:

DROP TABLE IF EXISTS OrderItems;
CREATE TABLE OrderItems ( orderitem_id int, order_id int, product_id int, count int );
sql

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

INSERT INTO OrderItems VALUES (10001, 1000, 10, 3);
INSERT INTO OrderItems VALUES (10002, 1000, 20, 2);
INSERT INTO OrderItems VALUES (10003, 1002, 30, 12);
sql

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

SELECT * FROM OrderItems;
sql

Σύνταξη σύνθετων ερωτημάτων

Αν έχετε εκτελέσει όλα τα αποσπάσματα κώδικα που παρουσιάστηκαν μέχρι τώρα, θα πρέπει να έχετε κατανοήσει τη δομή της δοκιμαστικής βάσης δεδομένων μας. Τώρα ας προχωρήσουμε σε πιο σύνθετες ερωτήσεις που αναδεικνύουν τη δύναμη της SQL. Αρχικά, ας γράψουμε μια ερώτηση που συγχωνεύει δεδομένα που βρίσκονται κατανεμημένα σε πολλούς πίνακες. Θα χρησιμοποιήσουμε μια εντολή SQL JOIN για να ενώσουμε τους πίνακες που περιέχουν τα δεδομένα πελατών και τις παραγγελίες. Κατά τη διαδικασία αυτή, θα ονομάσουμε τις στήλες και θα ορίσουμε ένα αντίστοιχο αναγνωριστικό πελάτη ως συνθήκη JOIN. Λάβετε υπόψη ότι χρησιμοποιούμε προσδιορισμένους αναγνωριστικούς για να διακρίνουμε τις στήλες των δύο πινάκων:

SELECT customers.customer_name as 'Customer', customers.customer_id, orders.order_id, orders.order_date AS 'Date' FROM Customers JOIN Orders ON Orders.customer_id = Customers.customer_id ORDER BY Customers.customer_id;
sql

Τώρα, θα χρησιμοποιήσουμε μια άλλη εντολή JOIN για να υπολογίσουμε το συνολικό κόστος των προϊόντων που έχουν παραγγελθεί:

SELECT OrderItems.order_id, OrderItems.orderitem_id AS 'Order Item', Products.product_name AS 'Product', Products.price AS 'Unit Price', OrderItems.count AS 'Count', (OrderItems.count * Products.price) AS 'Total' FROM OrderItems JOIN Products ON OrderItems.product_id = Products.product_id;
sql
Go to Main Menu