Základné príkazy SQL - zoznam databázových dotazov a príkazov, ktoré by ste mali poznať

SQL je skratka pre Structured Query Language. Príkazy SQL sú pokyny používané na komunikáciu s databázou na vykonávanie úloh, funkcií a dotazov s údajmi.

Príkazy SQL možno použiť na prehľadávanie databázy a vykonávanie ďalších funkcií, ako je vytváranie tabuliek, pridávanie údajov do tabuliek, úprava údajov a rušenie tabuliek.

Tu je zoznam základných príkazov SQL (niekedy sa nazývajú doložky), ktoré by ste mali vedieť, ak budete pracovať s SQL.

VYBERTE a OD

SELECTČasť dotazu určuje, ktoré stĺpce dát pre zobrazenie vo výsledkoch. Existujú aj možnosti, ktoré môžete použiť na zobrazenie údajov, ktoré nie sú stĺpcami tabuľky.

Nasledujúci príklad zobrazuje tri stĺpce SELECTupravené FROMv tabuľke „študent“ a jeden vypočítaný stĺpec. V databáze sú uložené ID študenta, meno a priezvisko študenta. Môžeme skombinovať stĺpce Meno a Priezvisko, aby sme vytvorili vypočítaný stĺpec Celé meno.

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)

VYTVORIŤ TABUĽKU

CREATE TABLErobí presne to, čo znie: vytvára tabuľku v databáze. Môžete určiť názov tabuľky a stĺpce, ktoré by mali byť v tabuľke.

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

ZMENIŤ TABUĽKU

ALTER TABLEzmení štruktúru tabuľky. Takto by ste pridali stĺpec do databázy:

ALTER TABLE table_name ADD column_name datatype;

SKONTROLUJTE

CHECKObmedzenie sa používa na obmedzenie rozsah hodnôt, ktorý môže byť umiestnený v stĺpci.

Ak definujete CHECKobmedzenie pre jeden stĺpec, povolí pre tento stĺpec iba určité hodnoty. Ak CHECKv tabuľke definujete obmedzenie, môže to obmedziť hodnoty v určitých stĺpcoch na základe hodnôt v iných stĺpcoch v riadku.

Nasledujúci SQL vytvára CHECKobmedzenia v stĺpci „Vek“ pri vytváraní tabuľky „Osoby“. Toto CHECKobmedzenie zaručuje, že nemôžete mať žiadnu osobu mladšiu ako 18 rokov.

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

Ak chcete povoliť pomenovanie CHECKobmedzenia a definovanie CHECKobmedzenia vo viacerých stĺpcoch, použite nasledujúcu syntax 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") );

KDE

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

WHEREKlauzula sa používa na obmedzenie počtu riadkov vrátených.

Ako príklad možno uviesť, najprv ukážeme vám SELECTvyhlásenia a výsledky bez v WHEREvyhlásení. Potom pridáme WHEREvýrok, ktorý používa všetkých päť kvalifikátorov vyššie.

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)

Teraz zopakujeme SELECTdopyt, ale obmedzíme riadky vrátené pomocou WHEREpríkazu.

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)

AKTUALIZÁCIA

Na aktualizáciu záznamu v tabuľke použijete UPDATEpríkaz.

Pomocou WHEREpodmienky zadajte, ktoré záznamy chcete aktualizovať. Je možné aktualizovať jeden alebo viac stĺpcov súčasne. Syntax je:

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

Tu je príklad aktualizácie názvu záznamu pomocou Id 4:

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

Stĺpce v tabuľke môžete tiež aktualizovať pomocou hodnôt z iných tabuliek. Pomocou JOINdoložky získate údaje z viacerých tabuliek. Syntax je:

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

Tu je príklad aktualizácie Správcu všetkých záznamov:

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

SKUPINA PODĽA

GROUP BY umožňuje kombinovať riadky a agregovať údaje.

Tu je syntax GROUP BY:

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

MAJÚCI

HAVINGumožňuje filtrovať údaje agregované GROUP BYdoložkou tak, aby používateľ získal obmedzenú skupinu záznamov na prezeranie.

Tu je syntax HAVING:

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

AVG ()

„Priemer“ sa používa na výpočet priemeru číselného stĺpca zo sady riadkov vrátených príkazom SQL.

Tu je syntax pre použitie funkcie:

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

Tu je príklad použitia tabuľky študentov:

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

AS

AS umožňuje premenovať stĺpec alebo tabuľku pomocou aliasu.

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

Výsledkom je výstup uvedený nižšie.

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

Môžete tiež použiť AS na priradenie názvu k tabuľke, aby ste uľahčili odkazovanie na spojenia.

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

Výsledkom je výstup uvedený nižšie.

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

ZORADIŤ PODĽA

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  sa používa v WHEREalebo alebo HAVING(ako súčasť GROUP BY) na obmedzenie vybratých riadkov na položky, keď má stĺpec určitý vzor znakov.

Tento SQL vyberie študentov, ktorí majú FullNamezačiatok s „Monique“ alebo končiaci sa s „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)

Predtým, NOTako LIKEvyberiete riadky so vzorom reťazca, môžete ich predtým vylúčiť. Tento SQL vylučuje záznamy, ktoré obsahujú „cer Pau“ a „Ted“ v stĺpci Celé meno.

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)