Βασικές εντολές SQL - Η λίστα ερωτημάτων βάσης δεδομένων και δηλώσεις που πρέπει να γνωρίζετε

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

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

Ακολουθεί μια λίστα με τις βασικές εντολές SQL (μερικές φορές ονομάζονται ρήτρες) που πρέπει να γνωρίζετε εάν πρόκειται να εργαστείτε με το SQL.

ΕΠΙΛΕΞΤΕ και ΑΠΟ

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

Το παρακάτω παράδειγμα δείχνει τρεις στήλες SELECTed FROMτο «μαθητή» τραπέζι και μια στήλη υπολογισμού. Η βάση δεδομένων αποθηκεύει το studentID, FirstName και LastName του μαθητή. Μπορούμε να συνδυάσουμε τις στήλες Όνομα και Επώνυμο για να δημιουργήσουμε τη στήλη Υπολογιζόμενο πλήρες όνομα.

SELECT studentID, FirstName, LastName, FirstName + ' ' + LastName AS FullName FROM student;
+-----------+-------------------+------------+------------------------+ | studentID | FirstName | LastName | FullName | +-----------+-------------------+------------+------------------------+ | 1 | Monique | Davis | Monique Davis | | 2 | Teri | Gutierrez | Teri Gutierrez | | 3 | Spencer | Pautier | Spencer Pautier | | 4 | Louis | Ramsey | Louis Ramsey | | 5 | Alvin | Greene | Alvin Greene | | 6 | Sophie | Freeman | Sophie Freeman | | 7 | Edgar Frank "Ted" | Codd | Edgar Frank "Ted" Codd | | 8 | Donald D. | Chamberlin | Donald D. Chamberlin | | 9 | Raymond F. | Boyce | Raymond F. Boyce | +-----------+-------------------+------------+------------------------+ 9 rows in set (0.00 sec)

ΔΗΜΙΟΥΡΓΙΑ ΠΙΝΑΚΑ

CREATE TABLEκάνει ακριβώς όπως ακούγεται: δημιουργεί έναν πίνακα στη βάση δεδομένων. Μπορείτε να καθορίσετε το όνομα του πίνακα και τις στήλες που πρέπει να βρίσκονται στον πίνακα.

CREATE TABLE table_name ( column_1 datatype, column_2 datatype, column_3 datatype );

ALTER ΠΙΝΑΚΑΣ

ALTER TABLEαλλάζει τη δομή ενός πίνακα. Να πώς θα προσθέσετε μια στήλη σε μια βάση δεδομένων:

ALTER TABLE table_name ADD column_name datatype;

ΕΛΕΓΧΟΣ

Ο CHECKπεριορισμός χρησιμοποιείται για τον περιορισμό του εύρους τιμών που μπορεί να τοποθετηθεί σε μια στήλη.

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

Η ακόλουθη SQL δημιουργεί έναν CHECKπεριορισμό στη στήλη "Ηλικία" όταν δημιουργείται ο πίνακας "Άτομα". Ο CHECKπεριορισμός διασφαλίζει ότι δεν μπορείτε να έχετε κανένα άτομο κάτω των 18 ετών.

CREATE TABLE Persons ( ID int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Age int, CHECK (Age>=18) );

Για να επιτρέψετε την ονομασία ενός CHECKπεριορισμού και για τον ορισμό ενός CHECKπεριορισμού σε πολλές στήλες, χρησιμοποιήστε την ακόλουθη σύνταξη SQL:

CREATE TABLE Persons ( ID int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Age int, City varchar(255), CONSTRAINT CHK_Person CHECK (Age>=18 AND City="Sandnes") );

ΟΠΟΥ

(AND ,OR , IN, BETWEEN, Και LIKE)

Ο WHEREόρος χρησιμοποιείται για τον περιορισμό του αριθμού των γραμμών που επιστρέφονται.

Για παράδειγμα, πρώτα θα σας δείξει μια SELECTκατάσταση και τα αποτελέσματα , χωρίς μια WHEREδήλωση. Στη συνέχεια, θα προσθέσουμε μια WHEREδήλωση που χρησιμοποιεί και τα πέντε προκριματικά παραπάνω.

SELECT studentID, FullName, sat_score, rcd_updated FROM student;
+-----------+------------------------+-----------+---------------------+ | studentID | FullName | sat_score | rcd_updated | +-----------+------------------------+-----------+---------------------+ | 1 | Monique Davis | 400 | 2017-08-16 15:34:50 | | 2 | Teri Gutierrez | 800 | 2017-08-16 15:34:50 | | 3 | Spencer Pautier | 1000 | 2017-08-16 15:34:50 | | 4 | Louis Ramsey | 1200 | 2017-08-16 15:34:50 | | 5 | Alvin Greene | 1200 | 2017-08-16 15:34:50 | | 6 | Sophie Freeman | 1200 | 2017-08-16 15:34:50 | | 7 | Edgar Frank "Ted" Codd | 2400 | 2017-08-16 15:35:33 | | 8 | Donald D. Chamberlin | 2400 | 2017-08-16 15:35:33 | | 9 | Raymond F. Boyce | 2400 | 2017-08-16 15:35:33 | +-----------+------------------------+-----------+---------------------+ 9 rows in set (0.00 sec)

Τώρα, θα επαναλάβουμε το SELECTερώτημα, αλλά θα περιορίσουμε τις σειρές που επιστρέφονται χρησιμοποιώντας μια WHEREδήλωση.

STUDENT studentID, FullName, sat_score, recordUpdated FROM student WHERE (studentID BETWEEN 1 AND 5 OR studentID = 8) AND sat_score NOT IN (1000, 1400);
+-----------+----------------------+-----------+---------------------+ | studentID | FullName | sat_score | rcd_updated | +-----------+----------------------+-----------+---------------------+ | 1 | Monique Davis | 400 | 2017-08-16 15:34:50 | | 2 | Teri Gutierrez | 800 | 2017-08-16 15:34:50 | | 4 | Louis Ramsey | 1200 | 2017-08-16 15:34:50 | | 5 | Alvin Greene | 1200 | 2017-08-16 15:34:50 | | 8 | Donald D. Chamberlin | 2400 | 2017-08-16 15:35:33 | +-----------+----------------------+-----------+---------------------+ 5 rows in set (0.00 sec)

ΕΚΣΥΓΧΡΟΝΙΖΩ

Για να ενημερώσετε μια εγγραφή σε έναν πίνακα, χρησιμοποιείτε τη UPDATEδήλωση.

Χρησιμοποιήστε τη WHEREσυνθήκη για να καθορίσετε ποιες εγγραφές θέλετε να ενημερώσετε. Είναι δυνατόν να ενημερώσετε μία ή περισσότερες στήλες κάθε φορά. Η σύνταξη είναι:

UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition;

Ακολουθεί ένα παράδειγμα ενημέρωσης του ονόματος της εγγραφής με το αναγνωριστικό 4:

UPDATE Person SET Name = “Elton John” WHERE Id = 4;

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

UPDATE table_name1 SET table_name1.column1 = table_name2.columnA table_name1.column2 = table_name2.columnB FROM table_name1 JOIN table_name2 ON table_name1.ForeignKey = table_name2.Key

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

UPDATE Person SET Person.Manager = Department.Manager FROM Person JOIN Department ON Person.DepartmentID = Department.ID

ΟΜΑΔΑ ΑΠΟ

GROUP BY σας επιτρέπει να συνδυάσετε σειρές και συγκεντρωτικά δεδομένα.

Εδώ είναι η σύνταξη του GROUP BY:

SELECT column_name, COUNT(*) FROM table_name GROUP BY column_name;

ΕΧΟΥΝ

HAVINGσας επιτρέπει να φιλτράρετε τα δεδομένα που συγκεντρώνονται με τον GROUP BYόρο έτσι ώστε ο χρήστης να έχει ένα περιορισμένο σύνολο εγγραφών για προβολή.

Εδώ είναι η σύνταξη του HAVING:

SELECT column_name, COUNT(*) FROM table_name GROUP BY column_name HAVING COUNT(*) > value;

AVG ()

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

Εδώ είναι η σύνταξη για τη χρήση της συνάρτησης:

SELECT groupingField, AVG(num_field) FROM table1 GROUP BY groupingField

Ακολουθεί ένα παράδειγμα χρησιμοποιώντας τον πίνακα μαθητών:

SELECT studentID, FullName, AVG(sat_score) FROM student GROUP BY studentID, FullName;

ΟΠΩΣ ΚΑΙ

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

SELECT user_only_num1 AS AgeOfServer, (user_only_num1 - warranty_period) AS NonWarrantyPeriod FROM server_table

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

+-------------+------------------------+ | AgeOfServer | NonWarrantyPeriod | +-------------+------------------------+ | 36 | 24 | | 24 | 12 | | 61 | 49 | | 12 | 0 | | 6 | -6 | | 0 | -12 | | 36 | 24 | | 36 | 24 | | 24 | 12 | +-------------+------------------------+

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

SELECT ord.product, ord.ord_number, ord.price, cust.cust_name, cust.cust_number FROM customer_table AS cust JOIN order_table AS ord ON cust.cust_number = ord.cust_number

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

+-------------+------------+-----------+-----------------+--------------+ | product | ord_number | price | cust_name | cust_number | +-------------+------------+-----------+-----------------+--------------+ | RAM | 12345 | 124 | John Smith | 20 | | CPU | 12346 | 212 | Mia X | 22 | | USB | 12347 | 49 | Elise Beth | 21 | | Cable | 12348 | 0 | Paul Fort | 19 | | Mouse | 12349 | 66 | Nats Back | 15 | | Laptop | 12350 | 612 | Mel S | 36 | | Keyboard| 12351 | 24 | George Z | 95 | | Keyboard| 12352 | 24 | Ally B | 55 | | Air | 12353 | 12 | Maria Trust | 11 | +-------------+------------+-----------+-----------------+--------------+

ΤΑΞΙΝΟΜΗΣΗ ΚΑΤΑ

ORDER BY gives us a way to sort the result set by one or more of the items in the SELECT section. Here is an SQL sorting the students by FullName in descending order. The default sort order is ascending (ASC) but to sort in the opposite order (descending) you use DESC.

SELECT studentID, FullName, sat_score FROM student ORDER BY FullName DESC;

COUNT

COUNT will count the number of rows and return that count as a column in the result set.

Here are examples of what you would use COUNT for:

  • Counting all rows in a table (no group by required)
  • Counting the totals of subsets of data (requires a Group By section of the statement)

This SQL statement provides a count of all rows. Note that you can give the resulting COUNT column a name using “AS”.

SELECT count(*) AS studentCount FROM student; 

DELETE

DELETE is used to delete a record in a table.

Be careful. You can delete all records of the table or just a few. Use the WHERE condition to specify which records you want to delete. The syntax is:

DELETE FROM table_name WHERE condition;

Here is an example deleting from the table Person the record with Id 3:

DELETE FROM Person WHERE Id = 3;

INNER JOIN

JOIN, also called Inner Join, selects records that have matching values in two tables.

SELECT * FROM A x JOIN B y ON y.aId = x.Id

LEFT JOIN

A LEFT JOIN returns all rows from the left table, and the matched rows from the right table. Rows in the left table will be returned even if there was no match in the right table. The rows from the left table with no match in the right table will have null for right table values.

SELECT * FROM A x LEFT JOIN B y ON y.aId = x.Id

RIGHT JOIN

A RIGHT JOIN returns all rows from the right table, and the matched rows from the left table. Opposite of a left join, this will return all rows from the right table even where there is no match in the left table. Rows in the right table that have no match in the left table will have null values for left table columns.

SELECT * FROM A x RIGHT JOIN B y ON y.aId = x.Id 

FULL OUTER JOIN

A FULL OUTER JOIN returns all rows for which there is a match in either of the tables. So if there are rows in the left table that do not have matches in the right table, those will be included. Also, if there are rows in the right table that do not have matches in the left table, those will be included.

SELECT Customers.CustomerName, Orders.OrderID FROM Customers FULL OUTER JOIN Orders ON Customers.CustomerID=Orders.CustomerID ORDER BY Customers.CustomerName

INSERT

INSERT is a way to insert data into a table.

INSERT INTO table_name (column_1, column_2, column_3) VALUES (value_1, 'value_2', value_3);

LIKE

LIKE  χρησιμοποιείται σε ένα WHEREή HAVING(ως μέρος του GROUP BY) για τον περιορισμό των επιλεγμένων σειρών στα στοιχεία όταν μια στήλη περιέχει ένα συγκεκριμένο μοτίβο χαρακτήρων που περιέχεται σε αυτήν.

Αυτή η SQL θα επιλέξει μαθητές που FullNameξεκινούν με "Monique" ή τελειώνουν με "Greene".

SELECT studentID, FullName, sat_score, rcd_updated FROM student WHERE FullName LIKE 'Monique%' OR FullName LIKE '%Greene'; 
+-----------+---------------+-----------+---------------------+ | studentID | FullName | sat_score | rcd_updated | +-----------+---------------+-----------+---------------------+ | 1 | Monique Davis | 400 | 2017-08-16 15:34:50 | | 5 | Alvin Greene | 1200 | 2017-08-16 15:34:50 | +-----------+---------------+-----------+---------------------+ 2 rows in set (0.00 sec)

Μπορείτε να τοποθετήσετε στο NOTπαρελθόν LIKEγια να εξαιρέσετε τις σειρές με το μοτίβο συμβολοσειράς αντί να τις επιλέξετε. Αυτή η SQL εξαιρεί εγγραφές που περιέχουν "cer Pau" και "Ted" στη στήλη FullName.

SELECT studentID, FullName, sat_score, rcd_updated FROM student WHERE FullName NOT LIKE '%cer Pau%' AND FullName NOT LIKE '%"Ted"%';
+-----------+----------------------+-----------+---------------------+ | studentID | FullName | sat_score | rcd_updated | +-----------+----------------------+-----------+---------------------+ | 1 | Monique Davis | 400 | 2017-08-16 15:34:50 | | 2 | Teri Gutierrez | 800 | 2017-08-16 15:34:50 | | 4 | Louis Ramsey | 1200 | 2017-08-16 15:34:50 | | 5 | Alvin Greene | 1200 | 2017-08-16 15:34:50 | | 6 | Sophie Freeman | 1200 | 2017-08-16 15:34:50 | | 8 | Donald D. Chamberlin | 2400 | 2017-08-16 15:35:33 | | 9 | Raymond F. Boyce | 2400 | 2017-08-16 15:35:33 | +-----------+----------------------+-----------+---------------------+ 7 rows in set (0.00 sec)