SQL в дії: Розширене запитування та управління даними

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

Leave a Reply

Your email address will not be published. Required fields are marked *