Загрузка данных
Практическая работа №3. Составление запросов на извлечение информации из реляционных баз данных (SQL-запросы)
Современные информационные системы часто используют реляционные базы данных для хранения структурированной информации. Основные операции над такими данными включают добавление, изменение, удаление и, самое важное, извлечение нужной информации. Для реализации этих операций используется стандартный язык структурированных запросов SQL (Structured Query Language). Одним из важнейших аспектов работы с базой данных является грамотное формирование запросов на выборку данных.
Основы построения SQL-запросов на извлечение информации
SQL-запросы на извлечение информации строятся с использованием оператора SELECT, который позволяет выбирать конкретные поля (атрибуты) из одной или нескольких связанных таблиц. Запрос состоит из нескольких обязательных и необязательных частей, каждая из которых имеет свое назначение.
Структура простого SQL-запроса на выборку данных
SELECT [выражения]
FROM [таблицы]
WHERE [условия]
GROUP BY [группировки]
HAVING [фильтры группировок]
ORDER BY [сортировка];
Рассмотрим каждую часть подробнее
1. Оператор SELECT
Оператор SELECT определяет, какие атрибуты (столбцы) будут выбраны из таблиц. Можно указывать либо конкретные поля, либо использовать звездочку () для получения всех полей таблицы.
Пример
SELECT name, surname FROM users;
2. Оператор FROM
Оператор FROM указывает таблицу (или набор таблиц), из которой производится выборка данных.
Пример
SELECT u.name, c.title
FROM users
3. Оператор WHERE
Оператор WHERE служит фильтром, ограничивающим результат выборки условиями. Здесь задаются ограничения по значениям полей, условиям сравнения, диапазонам значений и другим критериям.
Пример
SELECT title, duration
FROM courses
WHERE category = 'информатика';
4. Операторы группировки (GROUP BY и HAVING)
Оператор GROUP BY применяется, когда нужно сгруппировать строки по определённым полям, чтобы применить агрегатные функции (COUNT(), SUM(), AVG() и другие). Oператор HAVING используется для фильтрации уже сгруппированных данных.
Пример
SELECT course_id, COUNT() as students_count
FROM enrollments
GROUP BY course_id
HAVING COUNT() 10;
5. Оператор ORDER BY
ORDER BY позволяет сортировать полученные результаты по одному или нескольким полям в порядке возрастания (ASC) или убывания (DESC).
Пример
SELECT title, rating
FROM reviews
ORDER BY rating DESC;
Особенности сложных запросов
При работе с большими объемами данных часто приходится составлять сложные запросы, включающие
- Объединение нескольких таблиц (JOIN);
- Использование вложенных запросов (подзапросов);
- Применение агрегатных функций и оконных функций;
- Работа с виртуальными таблицами (CTE — Common Table Expressions).
Умение грамотно формулировать SQL-запросы на извлечение информации — один из ключевых навыков специалиста по проектированию информационных систем и баз данных. Грамотно составленные запросы позволяют быстро находить нужные сведения, анализировать большие объемы данных и принимать обоснованные решения.
Задание: сделать краткий конспект теории и выполнить следующие запросы (представлены ниже).
Структура базы данных:
Таблица
users
Поле Тип данных Описание
Id INT PRIMARY KEY AUTO_INCREMENT //Уникальный идентификатор пользователя
first_name VARCHAR(50) NOT NULL //Имя пользователя
last_name VARCHAR(50) NOT NULL //Фамилия пользователя
email VARCHAR(100) UNIQUE NOT NULL //Электронная почта пользователя
role ENUM('student', 'teacher') DEFAULT 'student' //Роль пользователя (студент или преподаватель)
Таблица
courses
Поле Тип данных Описание
Id INT PRIMARY KEY AUTO_INCREMENT //Идентификатор курса
Title VARCHAR(100) NOT NULL //Название курса
Description TEXT //Краткое описание курса
Duration INT NOT NULL //Длительность курса в часах
Category VARCHAR(100) NOT NULL //Категория курса
Таблица
lessons
Поле Тип данных Описание
Id INT PRIMARY KEY AUTO_INCREMENT //Идентификатор урока
Topic VARCHAR(100) NOT NULL //Тема урока
course_id INT NOT NULL //Идентификатор курса, которому принадлежит урок
duration_minutes INT NOT NULL //Продолжительность урока в минутах
Таблица
enrollments
Поле Тип данных Описание
Id INT PRIMARY KEY AUTO_INCREMENT //Идентификатор записи
user_id INT NOT NULL //Идентификатор студента, записанного на курс
course_id INT NOT NULL Идентификатор курса, на который записан студент
start_date DATE NOT NULL //Дата начала занятий
status ENUM ('active', 'inactive') DEFAULT 'active' //Текущий статус записи (активна или неактивна)
Таблица
reviews
Поле Тип данных Описание
Id INT PRIMARY KEY AUTO_INCREMENT //Идентификатор отзыва
user_id INT NOT NULL //Идентификатор студента, оставившего отзыв
course_id INT NOT NULL //Идентификатор курса, к которому относится отзыв
rating TINYINT CHECK( rating BETWEEN 1 AND 5) NOT NULL //Рейтинг курса (от 1 до 5)
comment TEXT //Текстовый комментарий к курсу
Выполнить SQL-запросы по следующим заданиям и записать их в соответствующие поля.
Конкретные задачи:
• Выведите список всех преподавателей, отсортировав их по имени и фамилии.
-- Ваш запрос здесь
• Найдите и выведите список курсов категории "информатика", отсортированный по названию курса.
-- Ваш запрос здесь
• Получите список всех студентов, зарегистрированных на курсе "Программирование на Python".
-- Ваш запрос здесь
• Выведите количество активных студентов на каждом курсе, отсортировав по количеству студентов в порядке убывания.
-- Ваш запрос здесь
• Для преподавателя Иванова Сергея найдите все курсы, которые ведет именно он.
-- Ваш запрос здесь
• Выведите всех студентов, которые оставили отзывы о курсе "Математика для начинающих".
-- Ваш запрос здесь