Вводный курс в SQL

SQL – это важнейший инструмент для управления данными в современной технологической отрасли. Знакомство с базовыми концепциями SQL необходимо для работы с базами данных, а приобретение знаний в области передовых концепций может вывести ваши навыки на новый уровень. При правильном обучении и практике любой желающий может овладеть SQL и эффективно управлять данными.
Вступление
SQL (structured Query Language) – это специфичный для предметной области язык программирования для запросов и манипулирования данными в реляционной базе данных. Наиболее часто используемым языком для реализации реляционных запросов является SQL. Он может использоваться для выполнения определённых действий, таких как вставка, обновление, удаление, запрос и извлечение определённой информации. SQL широко используется в областях data analytics и data science.
https://t.me/sqlhub – изучение sql в телеграме.
Типы данных SQL
В нашем распоряжении имеется огромный объём данных, и было бы сложно их обрабатывать, если бы мы хранили их все в одном типе данных. В SQL существует множество типов данных для манипулирования и обработки различной информацией.

База данных
База данных – это структурированный набор данных, который организован и хранится таким образом, чтобы обеспечить эффективный поиск и манипулирование ими. Они широко используются в различных областях применения, включая бизнес-операции, научные исследования, здравоохранение, образование и государственное управление.
Создание базы данных
Создание базы данных осуществляется следующим образом:
CREATE DATABASE bytewise_DE;
Изменение базы данных
Команда ALTER DATABASE
используется для изменения структуры существующей базы данных. Эта команда используется для изменения или модификации существующей базы данных.
ALTER DATABASE bytewise_DE
MODIFY NAME IS = DataEngineers_Bytewise;
Удаление базы данных
Команда DROP DATABASE
используется для удаления существующей базы данных. Когда вы удаляете базу данных, все таблицы, данные и другие объекты в ней удаляются безвозвратно.
DROP DATABASE DataEngineers_Bytewise;
Типы SQL-команд

Язык определения данных (DDL)
Команды языка определения данных используются для определения схемы базы данных. Команды DML используются для создания, изменения и удаления структур базы данных, но не данных.
Команды DDL:
⦁ CREATE: Эта команда используется для создания базы данных или её объектов, таких как таблица, индекс, функция, представления, процедура хранения и триггеры. Синтаксис запроса CREATE:
CREATE TABLE employees (
ID int NOT NULL UNIQUE,
Name varchar(255),
Age int,
department varchar(255),
city varchar(255)
);
⦁ ALTER: Эта команда используется для изменения структуры базы данных. Она также используется для добавления и удаления различных ограничений в существующую таблицу. Синтаксис запроса ALTER:
ALTER TABLE employees
ALTER COLUMN phone VARCHAR(15);
⦁ DROP: Эта команда используется для удаления столбца из существующей таблицы. Синтаксис запроса DROP:
ALTER TABLE employees
DROP COLUMN address;
⦁ TRUNCATE: Эта команда используется для удаления всех записей из таблицы, включая удаление всех пробелов, выделенных для записей. TRUNCATE удаляет данные внутри данных, но не таблицу . Это быстрее, чем команда DELETE, поскольку она удаляет все строки за одну операцию, а не удаляет каждую строку по одной.
Синтаксис запроса TRUNCATE:
TRUNCATE TABLE employees
⦁ RENAME: Эта команда используется для переименования существующей таблицы или столбца. Синтаксис запроса RENAME:
ALTER TABLE employees
RENAME COLUMN Name to emp_Name
Язык манипулирования данными (DML)
Команды языка манипулирования данными используются для внесения изменений в базу данных, таких как операция CRUD (создание, чтение, обновление и удаление).
Команды DML:
⦁ SELECT: SELECT используется для выбора данных из базы данных. Синтаксис запроса SELECT:
1)
SELECT * FROM employees
2)
SELECT Name,Age, department
FROM employees
⦁ INSERT: Эта команда используется для вставки одной или нескольких строк данных в базу данных. Перед вставкой следует убедиться, что таблица уже создана. Синтаксис запроса INSERT:
INSERT INTO employees(ID, Name, Age, department, city)
VALUES (1,'sadaf',20 ,'SE','ISLAMABAD');
⦁ UPDATE: Эта команда используется для обновления существующих данных в одну или несколько строк или столбцов с помощью UPDATE и WHERE. Синтаксис запроса UPDATE:
UPDATE employees
SET Name= 'Sadaf sultan'
WHERE Age= 20;
⦁ DELETE: Эта команда используется для удаления одной или нескольких существующих записей из таблиц базы данных. Синтаксис запроса DELETE:
DELETE FROM employees
WHERE Name ='sadaf sultan'
⦁ WHERE: Используется для извлечения данных из базы данных, чтобы указать условие при извлечении из одной таблицы или путём объединения с несколькими таблицами. Синтаксис запроса WHERE:
SELECT * FROM employees
WHERE age > 50
SELECT * FROM employees
WHERE Name = 'sadaf'
⦁ORDER BY: Это ключевое слово используется для сортировки данных в порядке возрастания и убывания. Синтаксис запроса ORDER BY:
SELECT *
FROM employees
ORDER BY age;
---- by default in ascending order
SELECT *
FROM employees
ORDER BY age DESC;
---- the keyword of DESC is used for descending order
⦁ Ключевое слово DISTINCT: Эта команда используется для удаления повторяющихся значений. Синтаксис запроса DISTINCT :
SELECT DISTINCT ProductName
FROM Products
SELECT DISTINCT ProductName, UnitPrice, UnitsOnOrder,ReorderLevel
FROM Products
WHERE ReorderLevel BETWEEN 1 AND 10
ORDER BY ReorderLevel
Язык управления данными (DCL)
Язык управления данными – это язык запросов, который позволяет пользователям извлекать и редактировать данные, хранящиеся в базах данных.
Команды DCL
⦁ GRANT: Эта команда предоставляет пользователям привилегии доступа к базе данных. Синтаксис запроса INVOKE:
GRANT CREATE TABLE TO testing
/*grant the role to a user.*/
⦁ INVOKE: Эта команда лишает пользователя прав доступа, предоставленных с помощью команды GRANT. Синтаксис запроса INVOKE:
REVOKE CREATE TABLE FROM testing;
Язык запросов к данным (DQL)
Язык запросов данных – это группа команд, ответственных за запрос данных из базы данных. Это компонент SQL-инструкции, который позволяет получать данные из базы данных и наносить на них порядок. Когда выполняется выборка для таблицы или таблиц, результат компилируется в дополнительную временную таблицу, которая отображается или, возможно, принимается программой.
DQL включает в себя множество команд, таких как SELECT, FROM, WHERE, GROUP BY, HAVING и ORDER BY. Эти команды используются для указания того, какие данные следует извлекать, откуда их извлекать, как их фильтровать, как группировать и агрегировать, а также как сортировать.
Команды DQL
⦁ SELECT: используется для извлечения данных из базы данных. Синтаксис запроса SELECT:
SELECT * FROM employees
⦁ GROUP BY : Используется для группировки результирующего набора (используется с агрегатными функциями: COUNT, MAX, MIN, SUM, AVG). Count используется для возврата количества строк, соответствующего указанному критерию. AVG используется для возврата среднего значения числового столбца. SUM используется для возврата общей суммы числового столбца. MAX используется для возврата наибольшего значения выбранного столбца. MIN используется для возврата наименьшего значения выбранного столбца.
Синтаксис запроса GROUP BY выглядит следующим образом:
---- COUNT
SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country;
SELECT COUNT(ProductID)
FROM Products;
----- AVERAGE
SELECT AVG(ProductID)
FROM Products;
---- SUM
SELECT SUM(ProductID)
FROM Products;
---- MAXIMUM
SELECT MAX (ProductID)
FROM Products;
----- MINIMUM
SELECT MIN(ProductID)
FROM Products;
⦁ COLUMN ALIASES: часто используется для того, чтобы сделать имена столбцов более удобочитаемыми. Эта команда существует только на время выполнения запроса. ALIASES создаётся с помощью ключевого слова AS. Синтаксис ALIASES:
SELECT TerritoryID, TerritoryDescription AS TerritoryDetails
FROM Territories
⦁ HAVING: Эта команда была добавлено в SQL, поскольку ключевое слово WHERE нельзя использовать с агрегатными функциями.
SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country
HAVING COUNT(CustomerID) > 5;
⦁ BETWEEN , AND & OR: используется для выбора значений в пределах заданного диапазона. Значениями могут быть цифры, текст или даты.Синтаксис запроса WHERE:
SELECT OrderID,CustomerID, ShipName
FROM Orders
WHERE OrderID BETWEEN 10270 AND 10300
SELECT OrderID,CustomerID, ShipName
FROM Orders
WHERE ShipName BETWEEN 'EFG' OR 'ABC'
⦁ IN & LIKE: Команда IN используется для разрешения нескольких значений в предложении WHERE. Синтаксис запроса IN:
SELECT * FROM employees
WHERE department IN ('Software', 'Computer Science', 'information Technology');
Оператор LIKE используется в предложении WHERE для поиска указанного шаблона в столбце. Синтаксис запроса LIKE:
--This query show all the employees whose names started with A
SELECT * FROM employees
WHERE Name LIKE 'a%';
--This query show all the employees whose names ending with A
SELECT * FROM employees
WHERE Name LIKE '%a';
--This query show all the employees whose names contain A in second position
SELECT * FROM employees
WHERE Name LIKE '%_a';
--This query show all the employees whose names started with S but ended at F
SELECT * FROM employees
WHERE Name LIKE 'S%f';
⦁ IS NULL: используется для поиска нулевых значений в определённом столбце. Синтаксис IS NULL:
SELECT * FROM Employees WHERE department IS NULL;
⦁ TOP N: Используется для указания количества записей, которые требуется вернуть. Синтаксис запроса TOP N:
SELECT TOP 20*
FROM Orders
ORDER BY EmployeeID
SELECT TOP 10 *
FROM EmployeeTerritories
WHERE EmployeeID = 5
ORDER BY TerritoryID DESC
⦁ UNION : используется для объединения результатов двух или более операторов SELECT в единый результирующий набор без дубликатов. Синтаксис запроса UNION:
SELECT *
FROM Customers
WHERE Country = 'germany' AND Region IS NULL
UNION
SELECT *
FROM Customers
WHERE Country = 'Mexico' AND Region IS NULL
⦁ INTERSECT: используется для возврата только строк, которые являются общими для двух операторов SELECT, без дубликатов. Синтаксис запроса INTERSECT:
SELECT *
FROM Customers
WHERE Country = 'germany' AND Region IS NULL
INTERSECT
SELECT *
FROM Customers
WHERE City LIKE 'A%'
⦁ EXCEPT: Возвращает только строки, которые присутствуют в первом операторе SELECT, но отсутствуют втором операторе SELECT, без дубликатов. Синтаксис запроса EXCEPT:
SELECT *
FROM Customers
WHERE Country = 'germany' AND Region IS NULL
EXCEPT
SELECT *
FROM Customers
WHERE Country = 'Mexico' AND Region IS NULL
JOINS
В SQL соединения используются для объединения строк из двух или более таблиц на основе связанного столбца между ними. В SQL доступно несколько типов соединений:

Inner join
Inner join вернёт только запись, в которой ключ находит совпадение в обеих таблицах.
SELECT * FROM Orders AS o
INNER JOIN [Order Details] AS OD
ON o.OrderID = OD.OrderID
SELECT o.OrderID, o.CustomerID, o.OrderDate FROM Orders AS o
INNER JOIN Customers AS c ON o.CustomerID = c.CustomerID
Outer join
Ключевое слово Outer join возвращает все записи, если есть совпадение в записях таблицы слева (table1) или справа (table2).
SELECT * FROM Orders AS o
FULL OUTER JOIN [Order Details] AS OD
ON o.OrderID = OD.OrderID
Self join
Self join – это обычное соединение, где таблица соединяется сама с собой.
SELECT e1.TitleOfCourtesy,e1.FirstName,e1.LastName,e2.City,e2.Address
FROM Employees e1
INNER JOIN Employees e2 ON e1.Title= e2.Title AND e1.EmployeeID = e2.EmployeeID
Cross join
Cross join возвращает все записи из обеих таблиц.
SELECT P.ProductName, c.companyName, c.ContactTitle
FROM Products P
CROSS JOIN Customers c
Right join
Ключевое слово Right Join возвращает все записи из правой таблицы и соответствующие записи из левой таблицы. Результатом будет 0 записей с левой стороны, если совпадений нет.
SELECT * FROM Orders AS o
RIGHT JOIN [Order Details] AS OD
ON o.OrderID = OD.OrderID
SELECT o.OrderID, o.CustomerID, o.OrderDate FROM Orders AS o
RIGHT JOIN Customers AS c ON o.CustomerID = c.CustomerID
Left join
Ключевое слово Left Join возвращает все записи из левой таблицы (Table1) и соответствующие записи из правой таблицы (Table2). Результатом будет 0 записей с правой стороны, если совпадений нет.
SELECT * FROM Orders AS o
LEFT JOIN [Order Details] AS OD
ON o.OrderID = OD.OrderID
SELECT o.OrderID, o.CustomerID, o.OrderDate FROM Orders AS o
LEFT JOIN Customers AS c ON o.CustomerID = c.CustomerID
Left anti-join
Одним из видов объединения, доступных в диалоговом окне слияния в Power Query, является Left anti-join, которое приводит только к строкам из левой таблицы, которым не соответствуют строки из правой таблицы.
SELECT c.ContactName, c.CompanyName,O.ShipCountry
FROM Customers c
LEFT JOIN Orders o ON c.CustomerID = o.CustomerID
WHERE o.CustomerID IS NULL
Right anti-join
Одним из видов объединения, доступных в диалоговом окне слияния в Power Query, является Right anti-join, которое приводит только к строкам из правой таблицы, которым не соответствуют строки из левой таблицы.
SELECT c.ContactName, c.CompanyName,O.ShipCountry
FROM Orders o
RIGHT JOIN Customers c ON c.CustomerID = o.CustomerID
WHERE o.CustomerID IS NULL
Подзапросы
В SQL подзапрос – это SQL-запрос, вложенный внутри более крупного запроса. Подзапрос может выполняться с предложениями SELECT, WHERE и FROM. Подзапрос обычно добавляется в предложение WHERE другого оператора SQL SELECT. Подзапрос также называется внутренним запросом или inner select, в то время как оператор, содержащий подзапрос, называется внешним запросом или outer select.

Однострочный подзапрос
Запрос, который возвращает только одну строку данных, называется однострочным подзапросом.
SELECT* FROM Products
WHERE UnitPrice > (SELECT min(UnitPrice) AS Minimum_Price FROM Products)
SELECT TitleOfCourtesy,FirstName,LastName
FROM Employees
WHERE Extension>=(SELECT MAX(Extension) FROM Employees )
Многострочный подзапрос
Многострочный подзапрос возвращает несколько строк данных. Мы можем использовать оператор IN во внешнем запросе для обработки подзапроса, который возвращает несколько строк.
SELECT* FROM Orders
SELECT OrderID,OrderDate , ShipName, ShipCountry FROM Orders WHERE CustomerID IN
(SELECT CustomerID FROM Customers WHERE Country IN
(SELECT Country FROM Suppliers ))
Вложенные подзапросы:
Подзапрос может быть вложен в другие подзапросы. SQL сначала выполняет самый внутренний подзапрос, затем следующий уровень.
SELECT * FROM Orders WHERE CustomerID IN
(SELECT CustomerID FROM Customers WHERE Country IN
(SELECT Country FROM Suppliers WHERE SupplierID IN
(SELECT SupplierID FROM Products WHERE Discontinued = 0)))
Коррелированный подзапрос
Ссылайтесь на один или несколько столбцов во внешней инструкции SQL. Этот запрос используется для обработки по строкам.
SELECT ProductID,ProductName,UnitPrice
FROM Products p
WHERE
UnitsInStock IN (
SELECT MAX (UnitPrice)
FROM Products p2
WHERE p2.ProductID = p.ProductID
GROUP BY p2.ProductName)
ORDER BY
UnitsOnOrder,
ProductName;
Представление
Представление – это виртуальная таблица, основанная на результате выполнения инструкции SELECT. Представление может использоваться для упрощения сложных запросов или для представления подмножества данных пользователям без раскрытия базовых таблиц.
Цель представлений
Цель представлений – предоставить конечным пользователям настраиваемое и упрощённое представление данных без необходимости знать базовую структуру данных. Представления, обеспечивающие уровень абстракции, защищают конфиденциальные данные или изменения схемы. Они также известны как виртуальные таблицы.
Типы представлений
Существует два типа представления :
⦁ Простое представление: Простое представление основано на одной таблице и выбирает все столбцы или подмножество столбцов из этой таблицы.
CREATE VIEW shippersView
AS
SELECT* FROM Shippers WHERE CompanyName='United Package'
⦁ Комплексное представление: Комплексное представление основано на нескольких таблицах и включает одно или несколько соединений или подзапросов в инструкции SELECT.
CREATE VIEW orders_View_Detail
AS
SELECT OrderID,OrderDate , ShipName, ShipCountry FROM Orders WHERE CustomerID IN
(SELECT CustomerID FROM Customers WHERE Country IN
(SELECT Country FROM Suppliers WHERE Country= 'japan' OR Country='uk' ))
Создание представления
CREATE VIEW OrderView
AS
SELECT *
FROM Orders
Изменение представления
ALTER VIEW orderView
AS
SELECT orderID,OrderDate
FROM Orders
Удаление представления
DROP VIEW orderView
Индексы
Индекс SQL – это структура данных, используемая системой управления базами данных для быстрого поиска и извлечения данных из таблицы.
Индекс работает подобно оглавлению книги, предоставляя список ключевых слов или фраз и соответствующие им номера страниц. Аналогичным образом, индекс SQL содержит список значений из одного или нескольких столбцов таблицы и их соответствующих местоположений в строках таблицы.
Кластеризованный индекс
Кластеризованный индекс используется для определения порядка, сортировки таблицы или упорядочивания данных в алфавитном порядке, подобно словарю. Он работает быстрее, чем некластеризованный индекс.
CREATE CLUSTERED INDEX idx_orderID_ShipCity ON Orders(OrderID, ShipCity)
Некластеризованный индекс
Некластеризованный индекс собирает данные в одном месте и записывает в другом. Это медленнее медленнее, чем кластеризованный индекс. Для выполнения операций требуется больше памяти.
CREATE NONCLUSTERED INDEX idx_orderID_ShipCity ON Orders(OrderID, ShipCity)
CREATE NONCLUSTERED INDEX idx_regionID_RegionDescription ON
Region(RegionID, RegionDescription)
Создание индекса
CREATE INDEX idx_EmployeeID ON Employees(EmployeeID)
Изменение индекса
ALTER INDEX idx_EmployeeID ON Employees(EmployeeID) REBUILD
Удаление индекса
DROP INDEX idx_EmployeeID ON Employees(EmployeeID)
Использование индекса
execute sp_helpindex Employees
УСЛОВНЫЕ ОПЕРАТОРЫ (ЦИКЛЫ)
В SQL Server цикл – это метод, при котором набор инструкций SQL выполняется повторно до тех пор, пока не будет выполнено условие.
Цикл WHILE
SQL Server поддерживает цикл WHILE. Выполнением инструкций можно управлять из блока WHLE, используя ключевые слова BREAK и CONTINUE.
DECLARE @i INT = 10;
WHILE @i <= 30
BEGIN
PRINT (@i);
SET @i = @i + 10;
END;
CASE
Оператор CASE в SQL позволяет выполнять условную логику в операторе SELECT, который может использоваться для преобразования данных или создания вычисляемых полей на основе определенных условий. Вот пример SQL-запроса, который использует оператор CASE:
SELECT employee_id, employee_name, salary, department,
CASE
WHEN salary >= 100000 THEN 'High'
WHEN salary >= 50000 AND salary < 100000 THEN 'Medium'
ELSE 'Low'
END AS salary_range
FROM employees;
Надеюсь, данная статья оказалась для вас полезной! Скоро мы опубликуем вторую часть нашего бесплатного sql курса.