Grundlæggende SQL-kommandoer - listen over databaseforespørgsler og udsagn, du bør kende

SQL står for Structured Query Language. SQL-kommandoer er de instruktioner, der bruges til at kommunikere med en database for at udføre opgaver, funktioner og forespørgsler med data.

SQL-kommandoer kan bruges til at søge i databasen og til at udføre andre funktioner som at oprette tabeller, tilføje data til tabeller, ændre data og droppe tabeller.

Her er en liste over grundlæggende SQL-kommandoer (undertiden kaldet klausuler), du skal vide, om du skal arbejde med SQL.

VÆLG og FRA

Den SELECTdel af en forespørgsel bestemmer, hvilke kolonner af data der skal vises i resultaterne. Der er også muligheder, du kan anvende til at vise data, der ikke er en tabelkolonne.

Eksemplet nedenfor viser tre kolonner, der er SELECTredigeret FROMi tabellen "student" og en beregnet kolonne. Databasen gemmer student-id, fornavn og efternavn for studerende. Vi kan kombinere kolonnerne Første og Efternavn for at oprette den beregnede Fuldnavn-kolonne.

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)

Opret TABEL

CREATE TABLEgør bare, hvad det lyder: det opretter en tabel i databasen. Du kan angive navnet på tabellen og de kolonner, der skal være i tabellen.

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

ALTER TABEL

ALTER TABLEændrer strukturen på en tabel. Sådan tilføjer du en kolonne til en database:

ALTER TABLE table_name ADD column_name datatype;

KONTROLLERE

Den CHECKbegrænsning bruges til at begrænse værdiområdet, der kan placeres i en søjle.

Hvis du definerer en CHECKbegrænsning for en enkelt kolonne, tillader det kun bestemte værdier for denne kolonne. Hvis du definerer en CHECKbegrænsning på en tabel, kan den begrænse værdierne i bestemte kolonner baseret på værdier i andre kolonner i rækken.

Følgende SQL opretter en CHECKbegrænsning i kolonnen "Alder", når tabellen "Personer" oprettes. De CHECKconstraint sikrer, at du ikke kan have en person under 18 år.

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

For at tillade navngivning af en CHECKbegrænsning og til at definere en CHECKbegrænsning på flere kolonner skal du bruge følgende SQL-syntaks:

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") );

HVOR

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

Den WHEREklausul bruges til at begrænse antallet af rækker returneres.

Som et eksempel viser vi dig først en SELECTerklæring og resultater uden en WHEREerklæring. Derefter tilføjer vi en WHEREerklæring, der bruger alle fem kvalifikationer ovenfor.

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)

Nu gentager vi SELECTforespørgslen, men vi begrænser de returnerede rækker ved hjælp af en WHEREerklæring.

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)

OPDATER

For at opdatere en post i en tabel bruger du UPDATEudsagnet.

Brug WHEREbetingelsen til at angive, hvilke poster du vil opdatere. Det er muligt at opdatere en eller flere kolonner ad gangen. Syntaksen er:

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

Her er et eksempel på opdatering af postens navn med Id 4:

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

Du kan også opdatere kolonner i en tabel ved hjælp af værdier fra andre tabeller. Brug JOINklausulen til at hente data fra flere tabeller. Syntaksen er:

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

Her er et eksempel på opdatering af Manager for alle poster:

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

GROUP BY

GROUP BY giver dig mulighed for at kombinere rækker og samlede data.

Her er syntaksen for GROUP BY:

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

AT HAVE

HAVINGgiver dig mulighed for at filtrere de data, der er aggregeret i GROUP BYklausulen, så brugeren får et begrænset sæt poster at se.

Her er syntaksen for HAVING:

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

AVG ()

"Gennemsnit" bruges til at beregne gennemsnittet af en numerisk kolonne fra det sæt rækker, der returneres af en SQL-sætning.

Her er syntaksen for brug af funktionen:

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

Her er et eksempel ved hjælp af elevtabellen:

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

SOM

AS giver dig mulighed for at omdøbe en kolonne eller tabel ved hjælp af et alias.

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

Dette resulterer i output som nedenfor.

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

Du kan også bruge AS til at tildele et navn til en tabel for at gøre det lettere at henvise til sammenføjninger.

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

Dette resulterer i output som nedenfor.

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

BESTIL BY

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  bruges i a WHEREeller HAVING(som en del af GROUP BY) til at begrænse de valgte rækker til elementerne, når en kolonne har et bestemt mønster af tegn indeholdt i det.

Denne SQL vælger elever, der FullNamestarter med "Monique" eller slutter med "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)

Du kan placere NOTfør for LIKEat udelukke rækkerne med strengmønsteret i stedet for at vælge dem. Denne SQL udelukker poster, der indeholder "cer Pau" og "Ted" i kolonnen 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)