SQL є не просто інструментом для створення таблиць і вставки даних. Справжня потужність SQL полягає у здатності ефективно запитувати і керувати даними. У цьому пості ми розглянемо проміжні концепції SQL, включаючи фільтрацію, сортування, групування та об’єднання даних, щоб допомогти вам ефективно аналізувати та працювати з наборами даних.
Розуміння типів даних в SQL
Кожен стовпець таблиці повинен мати визначений тип даних. Вибір правильного типу даних важливий як для продуктивності, так і для точності. Ось розбір деяких найбільш часто використовуваних типів:
Числові типи даних:
INT
: Для цілих чисел, таких як ідентифікатори чи кількості.FLOAT
абоDECIMAL
: Для десяткових чисел, часто використовуються у фінансових розрахунках.
Строкові типи даних:
VARCHAR(n)
: Рядок змінної довжини, деn
визначає максимальну довжину. Наприклад,VARCHAR(50)
може вмістити до 50 символів.TEXT
: Для довших текстових записів, таких як описи або примітки.
Типи даних для дати/часу:
DATE
: Для зберігання календарних дат, наприклад,2025-01-16
.DATETIME
абоTIMESTAMP
: Включає як дату, так і час, корисно для журналів транзакцій.
Приклад: При створенні таблиці Products
ви можете визначити її ось так:
CREATE TABLE Products (
ProductID INT PRIMARY KEY,
ProductName VARCHAR(100),
Price DECIMAL(10, 2),
CreatedAt DATETIME
);
Складні запити з SELECT
Запит SELECT
є основною командою SQL. За допомогою неї можна отримувати дані різними способами:
Фільтрація рядків за допомогою WHERE
:
Використовуйте клаузулу WHERE
, щоб отримати лише ті рядки, що відповідають певним умовам.
SELECT * FROM Employees WHERE Salary > 50000;
Ви можете комбінувати кілька умов за допомогою AND
і OR
.
SELECT * FROM Employees WHERE Position = 'Manager' AND Salary > 75000;
Сортування результатів за допомогою ORDER BY
:
Вивести дані у певному порядку. За замовчуванням використовується порядок за зростанням (ASC
), але можна використовувати DESC
для зворотного порядку.
SELECT FirstName, Salary FROM Employees ORDER BY Salary DESC;
Обмеження результатів за допомогою LIMIT
:
Отримати лише певну кількість рядків, корисно для пагінації або тестування.
SELECT * FROM Employees
LIMIT 10;
Агрегування даних за допомогою GROUP BY
та HAVING
:
Агрегатні функції, як-от SUM
, AVG
, COUNT
та MAX
, працюють у поєднанні з GROUP BY
.
SELECT Department, AVG(Salary) AS AvgSalary
FROM Employees
GROUP BY Department
HAVING AVG(Salary) > 60000;
Об’єднання — комбінування таблиць
Реляційні бази даних відмінно зберігають зв’язані дані через кілька таблиць.
SQL об’єднання дозволяють вам комбінувати ці дані.
INNER JOIN
: Повертає рядки з відповідними значеннями в обох таблицях.
SELECT Orders.OrderID, Customers.CustomerName
FROM Orders
INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID;
LEFT JOIN
: Повертає всі рядки з лівої таблиці, з відповідними рядками з правої таблиці (або NULL, якщо відповідного рядка немає).
SELECT Employees.FirstName, Departments.DepartmentName
FROM Employees
LEFT JOIN Departments ON Employees.DepartmentID = Departments.DepartmentID;
FULL OUTER JOIN
: Об’єднує рядки з обох таблиць, повертаючи всі збіги та незбігаються рядки з обох сторін.
Підзапити та вкладені запити
Підзапит — це запит в межах іншого запиту, який корисний для поетапного вирішення складних задач.
Простий підзапит:
Знайти працівників, чия зарплата більша за середню.
SELECT FirstName, Salary
FROM Employees
WHERE Salary > (SELECT AVG(Salary) FROM Employees);
Корельований підзапит:
Підзапит, який посилається на дані з зовнішнього запиту.
SELECT e1.FirstName, e1.Salary
FROM Employees e1
WHERE e1.Salary > (SELECT AVG(e2.Salary) FROM Employees e2 WHERE e2.DepartmentID = e1.DepartmentID);
SQL Функції
SQL-функції дозволяють маніпулювати даними під час їх запиту:
Строкові функції:
CONCAT
: Об’єднує рядки.LENGTH
: Повертає довжину рядка.
SELECT CONCAT(FirstName, ' ', LastName) AS FullName FROM Employees;
Функції для роботи з датами:
NOW()
: Поточна дата та час.DATEDIFF
: Обчислює різницю між двома датами.
SELECT DATEDIFF(NOW(), HireDate) AS DaysWorked FROM Employees;
Практичний приклад
Давайте об’єднаємо ці концепції з практичним прикладом:
Уявіть, що у вас є онлайн-магазин. Ви хочете знайти 5 найбільших клієнтів, які витратили найбільше грошей на вашій платформі.
SELECT Customers.CustomerName, SUM(Orders.TotalAmount) AS TotalSpent
FROM Customers
INNER JOIN Orders ON Customers.CustomerID = Orders.CustomerID
GROUP BY Customers.CustomerName
ORDER BY TotalSpent DESC
LIMIT 5;
Підсумок
Тепер ви знаєте, як фільтрувати, сортувати та групувати дані, як справжній професіонал. Ви також освоїли мистецтво об’єднання таблиць і використання підзапитів для вирішення складних проблем. У наступному блозі ми перейдемо до більш складних тем SQL, охоплюючи налаштування продуктивності, транзакції та повторно використовувані SQL-структури, такі як подання (views) та збережені процедури (stored procedures).
Перекладено з: SQL in Action: Advanced Querying and Data Management