SELECT, WHERE, ORDER BY, простые операции соединения таблиц JOIN
Язык SQL: назначение
SQL (Structured Query Language — структурированный язык запросов) — стандартный язык для создания, изменения структуры и выборки данных из реляционных баз данных. С помощью SQL пользователь формулирует запрос — что именно нужно получить или изменить в базе данных, — а СУБД самостоятельно определяет, как наиболее эффективно выполнить этот запрос; в этом смысле SQL относится к декларативным языкам (в отличие от процедурных языков программирования вроде Python, где явно описывается последовательность действий). Основную часть операций выборки данных в SQL выполняет оператор SELECT, извлекающий информацию из одной или нескольких таблиц.
Структура простого запроса SELECT
Простейший запрос выборки данных имеет вид «SELECT список_столбцов FROM имя_таблицы». Рассмотрим таблицу Students (Ученики) со столбцами id (первичный ключ), name (фамилия), grade_class (класс). Чтобы получить фамилии и классы всех учеников, используется запрос:
SELECT name, grade_class
FROM Students;
Чтобы вывести абсолютно все столбцы таблицы, вместо перечисления их имён используют символ звёздочки:
SELECT *
FROM Students;
Отбор строк: оператор WHERE
Чтобы получить не все записи таблицы, а только удовлетворяющие определённому условию, используется оператор WHERE, который располагается после FROM и задаёт условие фильтрации строк. Например, чтобы найти всех учеников 11 класса «А»:
SELECT name
FROM Students
WHERE grade_class = '11A';
Условия в WHERE можно комбинировать логическими операторами AND (и), OR (или), NOT (не). Например, чтобы найти учеников либо 11А, либо 11Б класса:
SELECT name
FROM Students
WHERE grade_class = '11A' OR grade_class = '11B';
Операторы сравнения в условиях
| Оператор | Значение |
|---|---|
= | равно |
<> или != | не равно |
<, > | меньше, больше |
<=, >= | меньше или равно, больше или равно |
BETWEEN a AND b | значение находится в диапазоне от a до b включительно |
LIKE | соответствие текстовому шаблону (с символами-масками % и _) |
Сортировка результатов: ORDER BY
Чтобы результат запроса был отсортирован по значению одного или нескольких столбцов, используется оператор ORDER BY, который указывается в конце запроса. По умолчанию сортировка происходит по возрастанию (ASC), для сортировки по убыванию явно указывается ключевое слово DESC. Например, чтобы вывести оценки учеников по предмету «Информатика», отсортированные по убыванию оценки:
SELECT student_id, grade
FROM Grades
WHERE subject = 'Информатика'
ORDER BY grade DESC;
Агрегатные функции и группировка данных
SQL предоставляет агрегатные функции, вычисляющие одно итоговое значение по группе строк: COUNT (количество строк), SUM (сумма значений), AVG (среднее арифметическое), MIN и MAX (минимальное и максимальное значения). Чтобы вычислять эти функции не по всей таблице сразу, а отдельно для каждой группы записей (например, отдельно для каждого предмета), используется оператор GROUP BY. Например, чтобы найти средний балл по каждому предмету:
SELECT subject, AVG(grade) AS avg_grade
FROM Grades
GROUP BY subject;
Соединение таблиц: оператор JOIN
Данные в реляционной базе распределены по нескольким связанным таблицам, поэтому для получения полной информации часто требуется соединить (JOIN) несколько таблиц по совпадающим значениям ключевых полей. Оператор INNER JOIN объединяет строки двух таблиц, для которых выполняется заданное условие соединения (обычно — равенство внешнего ключа одной таблицы первичному ключу другой), отбрасывая строки, для которых совпадения не нашлось. Например, чтобы получить фамилии учеников вместе с их оценками по предметам, соединим таблицы Students и Grades по полю id/student_id:
SELECT Students.name, Grades.subject, Grades.grade
FROM Students
INNER JOIN Grades ON Students.id = Grades.student_id;
Здесь условие ON Students.id = Grades.student_id указывает СУБД, по какому правилу сопоставлять строки двух таблиц: в итоговый результат попадёт по одной строке для каждой оценки, с добавленной фамилией соответствующего ученика.
Пример: комплексный запрос
Задача. Составьте запрос, который выводит фамилии учеников 11 класса «А» и их оценки по информатике, если оценка не ниже 4, отсортированные по убыванию оценки.
Решение. Запрос должен объединить (JOIN) таблицы Students и Grades, отфильтровать (WHERE) записи по классу, предмету и оценке, а затем отсортировать (ORDER BY) результат:
SELECT Students.name, Grades.grade
FROM Students
INNER JOIN Grades ON Students.id = Grades.student_id
WHERE Students.grade_class = '11A'
AND Grades.subject = 'Информатика'
AND Grades.grade >= 4
ORDER BY Grades.grade DESC;
Ответ. Приведённый запрос последовательно выполняет соединение таблиц, фильтрацию по трём условиям и сортировку результата — типичная структура практического SQL-запроса, сочетающего изученные операторы.
Типичные ошибки
Частая ошибка — путать порядок операторов в запросе: правильный порядок записи — SELECT, FROM, WHERE (или JOIN…ON), GROUP BY, ORDER BY; нарушение этого порядка приводит к синтаксической ошибке. Другая ошибка — забыть кавычки вокруг текстовых значений в условии WHERE (текстовые строки заключаются в одинарные кавычки, а числа — нет). Также часто забывают, что оператор равенства в SQL — одиночный знак «=», а не двойной «==», как во многих языках программирования, и что при соединении таблиц без условия ON (или WHERE) получится декартово произведение — все возможные комбинации строк обеих таблиц, что почти никогда не является желаемым результатом.
Краткий словарь терминов
SQL — структурированный язык запросов для работы с реляционными базами данных.
SELECT — оператор SQL для выборки данных из таблицы (или нескольких таблиц).
WHERE — оператор SQL, задающий условие отбора строк.
ORDER BY — оператор SQL для сортировки результата запроса.
JOIN — оператор SQL для соединения строк нескольких таблиц по условию совпадения ключевых полей.
Агрегатная функция — функция SQL, вычисляющая одно итоговое значение по группе строк (COUNT, SUM, AVG и др.).
Заключение
Освоенные операторы SELECT, WHERE, ORDER BY и JOIN образуют основу практической работы с реляционными базами данных и позволяют формулировать содержательные запросы к данным, распределённым по нескольким связанным таблицам. Владение языком SQL — востребованный практический навык, применимый далеко за пределами школьного курса информатики, а понимание принципов структурирования и обработки информации в базах данных естественно подводит к следующей теме — общим принципам информационного моделирования, частным случаем которого и являются реляционные базы данных.



