SQL расшифровываетс€ как Structured Query Language, или структурированный €зык запросов.  оманды SQL Ц это инструкции, которые даютс€ базе данных дл€ выполнени€ задач, функций и запросов с данными.

SQL-командами можно пользоватьс€ дл€ поиска по базе данных и выполнени€ различных функций: создани€ и удалени€ таблиц, добавлени€ данных в таблицы и их редактировани€. Ќиже приведен список основных команд (их иногда называют операторами), которые необходимо знать при работе с SQL.

ќсновные SQL-команды

SELECT и FROM

SELECT в запросе определ€ет, какие столбцы данных отобразить в результатах.  роме того, в SQL есть возможности отображать данные не из столбца таблицы. ¬ примере ниже показаны 3 столбца, вз€тые из таблицы студентов Student (через SELECT и FROM) и один вычисл€емый столбец. ¬ базе данных хран€тс€ ID (studentID), им€ (FirstName) и фамили€ (LastName) студента. ћы можем объединить столбцы с именем и фамилией и создать вычисл€емое поле с полным именем (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)    

CREATE TABLE

Ќазвание CREATE TABLE говорит само за себ€ Ц оператор создает таблицу. ¬ы можете задать название таблицы и настроить, какие столбцы будут присутствовать в таблице.

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

ALTER TABLE

ALTER TABLE измен€ет структуру таблицы. ¬от так можно добавить столбец в базу данных:

ALTER TABLE table_name
ADD column_name datatype;

CHECK

CHECK ограничивает диапазон значений, которые можно добавить в столбец.

 огда вы настраиваете ограничение CHECK дл€ отдельного столбца, оператор провер€ет, что в этом столбце присутствуют строго определенные значени€. ≈сли же CHECK настраиваетс€ дл€ таблицы, то он может ограничивать значени€ в отдельных столбцах на основании значений из других столбцов этой строки.

¬ следующем примере при создании таблицы Persons используетс€ ограничение CHECK дл€ столбца Ђ¬озрастї (Age). “аким образом провер€етс€, что в таблицу не попадают лица младше 18 лет.

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

—ледующий синтаксис используетс€ дл€ присвоени€ названи€ оператору CHECK и настройки CHECK дл€ нескольких столбцов:

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

WHERE (AND, OR, IN, BETWEEN и LIKE)

ќператор WHERE используетс€ дл€ ограничени€ количества возвращаемых строк.

—начала, в качестве примере, мы покажем оператор SELECT и его результат без оператора WHERE. «атем добавим оператор WHERE, в котором используютс€ сразу 5 из вышеуказанных квалификаторов.

 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

ƒл€ обновлени€ записи в таблице используетс€ оператор UPDATE.

”словием WHERE можно уточнить, какие именно записи вы бы хотели обновить. ¬ы можете обновл€ть по одному или нескольким столбцам сразу. —интаксис выгл€дит так:

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

¬ примере ниже обновл€етс€ название записи (поле Name) с Id 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

¬ примере ниже мы обновл€ем поле Ђћенеджерї (Manager) дл€ всех записей:

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

GROUP BY

GROUP BY позвол€ет объедин€ть строки и агрегировать данные.

¬от так выгл€дит синтаксис GROUP BY:

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

HAVING

HAVING позвол€ет сортировать данные, которые собираютс€ через GROUP BY. “аким образом, пользователю показываетс€ лишь ограниченный набор записей.

¬от так выгл€дит синтаксис HAVING:

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

AVG()

AVG, или среднее, вычисл€ет среднее значение числового столбца из набора строк, которые возвращает оператор SQL.

¬от так выгл€дит синтаксис:

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

ј вот пример этого оператора дл€ таблицы Student:

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

AS

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 вы можете задать название таблицы Ц так будет проще обращатьс€ к ней в 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    

–езультат выгл€дит так.

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

ORDER BY позвол€ет сортировать результирующий набор данных по одному или нескольким элементам в разделе SELECT. Ќиже дан пример сортировки студентов по имени (FullName) в пор€дке убывани€. »значально используетс€ стандартна€ сортировка по возрастанию (ASC), поэтому дл€ сортировки в обратном пор€дке мы примен€ем DESC.

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

COUNT

COUNT вычисл€ет количество строк и возвращает результирующее значение в столбце.

Ќиже привод€тс€ возможные сценарии использовани€ COUNT:

  • ѕодсчет всех строк в таблице (не требуетс€ Group by)
  • ѕодсчет общего числа подмножеств данных (в операторе об€зательно прописываетс€ Group By)

Ётот оператор SQL выводит количество всех строк.  роме того, что вы можете настроить название результирующего столбца COUNT с помощью AS.

SELECT count(*) AS studentCount FROM student; 

DELETE

DELETE используетс€ дл€ удалени€ записи из таблицы.

Ѕудьте внимательны! ¬ы можете удалить несколько записей в таблице, либо сразу все. — помощью услови€ WHERE вы указываете, какие записи необходимо удалить. —интаксис выгл€дит так:

DELETE FROM table_name
WHERE condition;    

¬от так выгл€дит удаление из таблицы Person записи с Id 3:

DELETE FROM Person
WHERE Id = 3;    

INNER JOIN

JOIN, или внутреннее соединение, выбирает записи, соответствующие значени€м в двух таблицах.

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

LEFT JOIN

LEFT JOIN возвращает все строки из левой таблицы и соответствующие им строки из правой таблицы. —троки из левой таблицы возвращаютс€ даже при пустых значени€х в правой таблице. ≈сли дл€ строк из левой таблицы нет соответстви€ в правой, то в значени€х последней будет сто€ть null.

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

RIGHT JOIN

RIGHT JOIN возвращает все строки из правой таблицы и соответствующие им строки из левой. ¬ отличие от левого соединени€, здесь возвращаютс€ все строки из правой таблицы, даже если им ничего не соответствует в левой. ¬ таком случае, в значени€х столбцов из левой таблицы будет сто€ть null.

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

FULL OUTER JOIN

FULL OUTER JOIN возвращает все строки, соответствующие услови€м в любой из таблиц. ≈сли в левой таблице есть строки, которым ничего не соответствует в правой, то они все равно отобраз€тс€ в результирующих значени€х. “о же самое распростран€етс€ и на строки из правой таблицы без соответствующих значений в левой.

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

INSERT

INSERT используетс€ дл€ добавлени€ данных в таблицу.

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)    

ѕеред LIKE вы можете добавить NOT, и тогда строки, соответствующие условию, будут исключатьс€, а не добавл€тьс€. Ётот SQL исключает записи, у которых в столбце FULL NAME содержитс€ Ђcer Pauї и ЂTedї.

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)    

—кидки 50% в Merion Academy

¬ыбрать курс