Comandi SQL di base: l'elenco delle query e delle istruzioni del database che dovresti conoscere

SQL sta per Structured Query Language. I comandi SQL sono le istruzioni utilizzate per comunicare con un database per eseguire attività, funzioni e query con i dati.

I comandi SQL possono essere utilizzati per cercare nel database e per eseguire altre funzioni come la creazione di tabelle, l'aggiunta di dati a tabelle, la modifica di dati e l'eliminazione di tabelle.

Di seguito è riportato un elenco di comandi SQL di base (a volte chiamati clausole) che dovresti sapere se intendi lavorare con SQL.

SELEZIONA e DA

La SELECTparte di una query determina quali colonne di dati mostrare nei risultati. Ci sono anche opzioni che puoi applicare per mostrare dati che non sono una colonna di tabella.

L'esempio seguente mostra tre colonne SELECTed FROMla tabella "studente" e una colonna calcolata. Il database memorizza studentID, FirstName e LastName dello studente. Possiamo combinare le colonne Nome e Cognome per creare la colonna calcolata FullName.

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)

CREA TABELLA

CREATE TABLEfa proprio quello che sembra: crea una tabella nel database. È possibile specificare il nome della tabella e le colonne che dovrebbero essere nella tabella.

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

ALTER TABLE

ALTER TABLEcambia la struttura di una tabella. Ecco come aggiungere una colonna a un database:

ALTER TABLE table_name ADD column_name datatype;

DAI UN'OCCHIATA

Il CHECKvincolo viene utilizzato per limitare l'intervallo di valori che può essere inserito in una colonna.

Se si definisce un CHECKvincolo su una singola colonna, vengono consentiti solo determinati valori per questa colonna. Se si definisce un CHECKvincolo su una tabella, è possibile limitare i valori in determinate colonne in base ai valori in altre colonne nella riga.

Il seguente codice SQL crea un CHECKvincolo sulla colonna "Età" quando viene creata la tabella "Persone". Il CHECKvincolo garantisce che non si possa avere nessuna persona sotto i 18 anni.

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

Per consentire la denominazione di un CHECKvincolo e per definire un CHECKvincolo su più colonne, utilizzare la seguente sintassi 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") );

DOVE

(AND ,OR , IN, BETWEEN, E LIKE)

La WHEREclausola viene utilizzata per limitare il numero di righe restituite.

Ad esempio, prima ti mostreremo una SELECTdichiarazione e risultati senza una WHEREdichiarazione. Quindi aggiungeremo WHEREun'istruzione che utilizza tutti e cinque i qualificatori sopra.

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)

Ora, ripeteremo la SELECTquery ma limiteremo le righe restituite utilizzando WHEREun'istruzione.

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)

AGGIORNARE

Per aggiornare un record in una tabella si utilizza l' UPDATEistruzione.

Utilizza la WHEREcondizione per specificare quali record desideri aggiornare. È possibile aggiornare una o più colonne alla volta. La sintassi è:

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

Di seguito è riportato un esempio di aggiornamento del nome del record con ID 4:

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

È inoltre possibile aggiornare le colonne in una tabella utilizzando i valori di altre tabelle. Utilizza la JOINclausola per ottenere dati da più tabelle. La sintassi è:

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

Ecco un esempio di aggiornamento di Manager di tutti i record:

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

RAGGRUPPARE PER

GROUP BY ti consente di combinare righe e aggregare dati.

Ecco la sintassi di GROUP BY:

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

AVERE

HAVINGconsente di filtrare i dati aggregati dalla GROUP BYclausola in modo che l'utente ottenga un insieme limitato di record da visualizzare.

Ecco la sintassi di HAVING:

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

AVG ()

"Media" viene utilizzata per calcolare la media di una colonna numerica dall'insieme di righe restituite da un'istruzione SQL.

Ecco la sintassi per l'utilizzo della funzione:

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

Ecco un esempio utilizzando la tabella degli studenti:

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

COME

AS consente di rinominare una colonna o una tabella utilizzando un alias.

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

Ciò si traduce in output come di seguito.

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

È inoltre possibile utilizzare AS per assegnare un nome a una tabella per semplificare il riferimento nei join.

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

Ciò si traduce in output come di seguito.

+-------------+------------+-----------+-----------------+--------------+ | 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 | +-------------+------------+-----------+-----------------+--------------+

ORDINATO DA

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  is used in a WHERE or HAVING (as part of the GROUP BY) to limit the selected rows to the items when a column has a certain pattern of characters contained in it.

This SQL will select students that have FullName starting with “Monique” or ending with “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)

You can place NOT before LIKE to exclude the rows with the string pattern instead of selecting them. This SQL excludes records that contain “cer Pau” and “Ted” in the FullName column.

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)