Grunnleggende SQL-kommandoer - listen over databasespørringer og utsagn du bør vite

SQL står for Structured Query Language. SQL-kommandoer er instruksjonene som brukes til å kommunisere med en database for å utføre oppgaver, funksjoner og spørsmål med data.

SQL-kommandoer kan brukes til å søke i databasen og til å utføre andre funksjoner som å lage tabeller, legge til data i tabeller, endre data og slippe tabeller.

Her er en liste over grunnleggende SQL-kommandoer (noen ganger kalt klausuler) du bør vite om du skal jobbe med SQL.

VELG og FRA

Den SELECTdel av en spørring bestemmer hvilke kolonner med data som skal vises i resultatene. Det er også alternativer du kan bruke for å vise data som ikke er en tabellkolonne.

Eksemplet nedenfor viser tre kolonner SELECTed FROM“student” bord og en beregnet kolonne. Databasen lagrer student-ID, fornavn og etternavn for studenten. Vi kan kombinere for- og etternavn-kolonnene for å lage den beregnede kolonnen 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)

LAG TABELL

CREATE TABLEgjør akkurat slik det høres ut: det lager en tabell i databasen. Du kan spesifisere navnet på tabellen og kolonnene som skal være i tabellen.

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

ALTER TABLE

ALTER TABLEendrer strukturen til et bord. Slik legger du til en kolonne i en database:

ALTER TABLE table_name ADD column_name datatype;

KRYSS AV

Den CHECKbegrensningen brukes til å begrense det verdiområde som kan plasseres i en kolonne.

Hvis du definerer en CHECKbegrensning på en enkelt kolonne, tillater den bare visse verdier for denne kolonnen. Hvis du definerer en CHECKbegrensning på en tabell, kan den begrense verdiene i visse kolonner basert på verdier i andre kolonner i raden.

Følgende SQL oppretter en CHECKbegrensning i kolonnen "Alder" når "Personer" -tabellen opprettes. De CHECKbegrensningen sikrer at du ikke kan ha 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 å tillate navngivning av en CHECKbegrensning, og for å definere en CHECKbegrensning på flere kolonner, bruk 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 WHEREleddet blir brukt for å begrense antallet rader returneres.

Som et eksempel, først vil vi vise deg en SELECTuttalelse og resultater uten en WHEREuttalelse. Deretter vil vi legge til en WHEREuttalelse som bruker alle fem kvalifiseringskampene 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)

Nå gjentar vi SELECTspørringen, men vi begrenser radene som returneres ved hjelp av en WHEREuttalelse.

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)

OPPDATER

For å oppdatere en post i en tabell bruker du UPDATEuttalelsen.

Bruk WHEREbetingelsen til å spesifisere hvilke poster du vil oppdatere. Det er mulig å oppdatere en eller flere kolonner av gangen. Syntaksen er:

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

Her er et eksempel som oppdaterer navnet på posten med Id 4:

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

Du kan også oppdatere kolonner i en tabell ved å bruke verdier fra andre tabeller. Bruk JOINklausulen for å 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å oppdatering av Manager for alle poster:

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

GRUPPE AV

GROUP BY lar deg kombinere rader og samlede data.

Her er syntaksen til GROUP BY:

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

HAR

HAVINGlar deg filtrere dataene som er samlet etter GROUP BYklausulen, slik at brukeren får et begrenset sett med poster å vise.

Her er syntaksen til HAVING:

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

AVG ()

"Gjennomsnitt" brukes til å beregne gjennomsnittet av en numerisk kolonne fra settet med rader som returneres av en SQL-setning.

Her er syntaksen for bruk av funksjonen:

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

Her er et eksempel på studenttabellen:

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

SOM

AS lar deg endre navn på en kolonne eller tabell ved hjelp av et alias.

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

Dette resulterer i produksjon 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å bruke AS til å tilordne et navn til en tabell for å gjøre det lettere å referere til sammenføyninger.

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

REKKEFØLGE ETTER

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  brukes i a WHEREeller HAVING(som en del av GROUP BY) for å begrense de valgte radene til elementene når en kolonne har et bestemt mønster med tegn inneholdt.

Denne SQL vil velge studenter som FullNamebegynner 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 plassere NOTfør for LIKEå ekskludere radene med strengmønsteret i stedet for å velge dem. Denne SQL ekskluderer poster som inneholder "cer Pau" og "Ted" i kolonnen Fullnavn.

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)