Упражнения и задачи по SQL для начинающих
Введение в SQL и основные понятия
SQL (Structured Query Language) — это язык программирования, предназначенный для управления и манипуляции данными в реляционных базах данных. Он позволяет выполнять различные операции, такие как создание, чтение, обновление и удаление данных. Основные компоненты SQL включают таблицы, строки и столбцы, которые вместе формируют структуру базы данных.
[AsideBanner]
Основные понятия SQL
- Таблица: Основная структура данных, состоящая из строк и столбцов. Таблицы могут содержать различные типы данных, такие как текст, числа и даты.
- Строка: Единица данных в таблице, также известная как запись. Каждая строка представляет собой отдельную запись в таблице и содержит данные для всех столбцов.
- Столбец: Поле в таблице, определяющее тип данных, которые могут быть сохранены в строках. Столбцы имеют имена и типы данных, такие как
INT
,VARCHAR
,DATE
и т.д.
Простые запросы: SELECT, FROM, WHERE
Для начала работы с SQL необходимо освоить базовые команды, такие как SELECT
, FROM
и WHERE
. Эти команды позволяют извлекать данные из таблиц и фильтровать их по определенным условиям.
Команда SELECT
Команда SELECT
используется для выбора данных из таблицы. Она позволяет выбирать как все столбцы, так и конкретные столбцы. Например, чтобы выбрать все столбцы из таблицы employees
, используйте следующий запрос:
SELECT * FROM employees;
Если вам нужно выбрать только определенные столбцы, укажите их имена через запятую:
SELECT first_name, last_name FROM employees;
Команда FROM
Команда FROM
указывает таблицу, из которой будут извлекаться данные. Это обязательная часть запроса SELECT
. Например:
SELECT first_name, last_name FROM employees;
Вы можете использовать несколько таблиц в одном запросе, если необходимо объединить данные из разных источников.
Команда WHERE
Команда WHERE
используется для фильтрации данных по определенным условиям. Она позволяет выбирать только те строки, которые соответствуют заданным критериям. Например, чтобы выбрать всех сотрудников с фамилией "Smith":
SELECT * FROM employees WHERE last_name = 'Smith';
Вы также можете использовать логические операторы, такие как AND
, OR
и NOT
, чтобы создавать более сложные условия:
SELECT * FROM employees WHERE last_name = 'Smith' AND salary > 50000;
Агрегационные функции и группировка данных: GROUP BY, HAVING
Агрегационные функции позволяют выполнять вычисления на множестве значений и возвращать одно значение. Основные агрегационные функции включают COUNT
, SUM
, AVG
, MIN
и MAX
.
Функция COUNT
Функция COUNT
возвращает количество строк, соответствующих заданному условию. Например, чтобы подсчитать количество сотрудников в таблице:
SELECT COUNT(*) FROM employees;
Вы можете использовать COUNT
с условием WHERE
, чтобы подсчитать количество строк, соответствующих определенным критериям:
SELECT COUNT(*) FROM employees WHERE department_id = 1;
Функция SUM
Функция SUM
возвращает сумму значений в столбце. Например, чтобы вычислить общую зарплату всех сотрудников:
SELECT SUM(salary) FROM employees;
Эта функция полезна для вычисления общих значений, таких как общая стоимость заказов или общая сумма продаж.
Функция AVG
Функция AVG
возвращает среднее значение в столбце. Например, чтобы вычислить среднюю зарплату всех сотрудников:
SELECT AVG(salary) FROM employees;
Эта функция полезна для анализа данных, таких как средняя стоимость заказа или средний возраст клиентов.
Функция MIN и MAX
Функции MIN
и MAX
возвращают минимальное и максимальное значения в столбце соответственно. Например, чтобы найти минимальную и максимальную зарплаты:
SELECT MIN(salary), MAX(salary) FROM employees;
Эти функции полезны для нахождения крайних значений в данных, таких как самая низкая и самая высокая цена продукта.
Группировка данных: GROUP BY
Команда GROUP BY
используется для группировки строк, имеющих одинаковые значения в указанных столбцах. Например, чтобы сгруппировать сотрудников по отделам и подсчитать количество сотрудников в каждом отделе:
SELECT department, COUNT(*) FROM employees GROUP BY department;
Вы можете использовать несколько столбцов для группировки, если необходимо создать более сложные группы:
SELECT department, job_title, COUNT(*) FROM employees GROUP BY department, job_title;
Условие HAVING
Команда HAVING
используется для фильтрации групп, созданных с помощью GROUP BY
. Например, чтобы выбрать отделы, в которых больше 10 сотрудников:
SELECT department, COUNT(*) FROM employees GROUP BY department HAVING COUNT(*) > 10;
Команда HAVING
аналогична команде WHERE
, но применяется к группам, а не к отдельным строкам.
Соединение таблиц: JOIN
Соединение таблиц позволяет объединять данные из двух или более таблиц на основе связанных столбцов. Существует несколько типов соединений, включая внутреннее соединение (INNER JOIN
), левое соединение (LEFT JOIN
), правое соединение (RIGHT JOIN
) и полное соединение (FULL JOIN
).
Внутреннее соединение: INNER JOIN
Команда INNER JOIN
возвращает строки, которые имеют совпадающие значения в обеих таблицах. Например, чтобы выбрать всех сотрудников и их отделы:
SELECT employees.first_name, employees.last_name, departments.department_name
FROM employees
INNER JOIN departments ON employees.department_id = departments.id;
Внутреннее соединение возвращает только те строки, которые имеют совпадающие значения в обеих таблицах.
Левое соединение: LEFT JOIN
Команда LEFT JOIN
возвращает все строки из левой таблицы и совпадающие строки из правой таблицы. Если совпадений нет, результат содержит NULL. Например:
SELECT employees.first_name, employees.last_name, departments.department_name
FROM employees
LEFT JOIN departments ON employees.department_id = departments.id;
Левое соединение полезно, когда нужно сохранить все строки из левой таблицы, даже если нет совпадений в правой таблице.
Правое соединение: RIGHT JOIN
Команда RIGHT JOIN
возвращает все строки из правой таблицы и совпадающие строки из левой таблицы. Если совпадений нет, результат содержит NULL. Например:
SELECT employees.first_name, employees.last_name, departments.department_name
FROM employees
RIGHT JOIN departments ON employees.department_id = departments.id;
Правое соединение полезно, когда нужно сохранить все строки из правой таблицы, даже если нет совпадений в левой таблице.
Полное соединение: FULL JOIN
Команда FULL JOIN
возвращает все строки, когда есть совпадения в одной из таблиц. Если совпадений нет, результат содержит NULL. Например:
SELECT employees.first_name, employees.last_name, departments.department_name
FROM employees
FULL JOIN departments ON employees.department_id = departments.id;
Полное соединение полезно, когда нужно сохранить все строки из обеих таблиц, независимо от наличия совпадений.
Практические задачи и упражнения
Упражнение 1: Выборка данных
Напишите запрос, который выбирает все столбцы из таблицы products
, где цена продукта больше 100.
SELECT * FROM products WHERE price > 100;
Это упражнение поможет вам освоить базовые команды SELECT
и WHERE
.
Упражнение 2: Агрегационные функции
Напишите запрос, который подсчитывает количество заказов в таблице orders
.
SELECT COUNT(*) FROM orders;
Это упражнение поможет вам понять, как использовать агрегационные функции для анализа данных.
Упражнение 3: Группировка данных
Напишите запрос, который группирует сотрудников по должностям и подсчитывает среднюю зарплату в каждой должности.
SELECT job_title, AVG(salary) FROM employees GROUP BY job_title;
Это упражнение поможет вам освоить команды GROUP BY
и AVG
.
Упражнение 4: Соединение таблиц
Напишите запрос, который соединяет таблицы customers
и orders
и выбирает имена клиентов и номера их заказов.
SELECT customers.first_name, customers.last_name, orders.order_id
FROM customers
INNER JOIN orders ON customers.id = orders.customer_id;
Это упражнение поможет вам понять, как использовать соединения для объединения данных из разных таблиц.
Упражнение 5: Условие HAVING
Напишите запрос, который группирует заказы по статусу и выбирает статусы, где количество заказов больше 5.
SELECT status, COUNT(*) FROM orders GROUP BY status HAVING COUNT(*) > 5;
Это упражнение поможет вам освоить команды GROUP BY
и HAVING
.
Эти упражнения помогут вам закрепить базовые знания SQL и научиться решать практические задачи. Удачи в обучении! 😉