Включите исполнение JavaScript в браузере, чтобы запустить приложение.
13 янв 2025

SQL запрос SELECT: значение и примеры

SQL — это язык программирования, который используется для взаимодействия с базами данных в основном посредством запросов. Запросы же, в свою очередь, содержат операторы, которые указывают на то, что нужно сделать. SELECT — это оператор SQL, который позволяет выбирать данные из таблиц и используется очень часто: именно поэтому важно знать его синтаксис и особенности.

Синтаксис SELECT SQL

Общий синтаксис оператора выглядит следующим образом:

SELECT column1, column2, …

FROM table_name

[WHERE condition]

[GROUP BY column1, column2, ...]

[HAVING condition]

[ORDER BY column1 [ASC|DESC], column2 [ASC|DESC], ...];
sql

Здесь:

  • после SELECT указываются один или несколько столбцов, которые нужно выбрать;
  • после FROM указывается таблица, из которой нужно выбрать эти столбцы;
  • после WHERE (этот оператор опциональный, как и все следующие) указывается условие, по которому нужно фильтровать данные;
  • GROUP BY нужен для группировки строк по столбцам, которые указываются после этого оператора;
  • HAVING нужен для фильтрации групп (то есть применяется после GROUP BY);
  • ORDER BY нужен для сортировки результата.

Самый простой пример SQL-запроса с SELECT может выглядеть так:

SELECT name, age

FROM students;
sql

В результате будут выбраны столбцы «имя» и «возраст» из таблицы с информацией о студентах.

Порядок логической обработки инструкции SELECT

В SQL запросы обрабатываются в определенном порядке. Ниже этот порядок представлен в виде списка (в него включено больше операторов, чем было рассмотрено в разделе синтаксиса):

  1. FROM
  2. ON
  3. JOIN
  4. WHERE
  5. GROUP BY
  6. WITH CUBE или WITH ROLLUP
  7. HAVING
  8. SELECT
  9. DISTINCT
  10. ORDER BY
  11. TOP

Можно заметить, что порядок выполнения отличается от того, как эти операторы записываются в запросе. Но зачем это нужно учитывать? Допустим, из таблицы с информацией о студентах необходимо получить только те группы, где средняя оценка больше 4. 

Попробуем выполнить эту задачу, используя WHERE. Ниже представлено построчное объяснение запроса:

  1. Выбор нужного столбца (в данном случае это столбец с группами студентов) с помощью SELECT. Запись функции AVG(), которая вычисляет среднее значение оценок студентов в каждой группе. После AS указывается псевдоним, в который будет записан результат функции AVG().
  2. Указание на таблицу, из которой будут выбраны данные (в данном случае students).
  3. Группировка по группам студентов: к одной группе будут отнесены все студенты с одинаковыми значениями поля group. Именно для этих групп будет рассчитана функция AVG().
  4. После WHERE будет указано условие: средняя оценка студентов в данной группе должна быть больше 4.
SELECT group, AVG(score) AS avg_score

FROM students

GROUP BY group

WHERE avg_score > 4;
sql

Такой SQL-запрос завершится ошибкой, так как WHERE обрабатывается до GROUP BY и ничего не знает о группировке и значении avg_score. Поэтому для решения этой задачи нужно использовать HAVING:

SELECT group, AVG(score) AS avg_score

FROM students

GROUP BY group

HAVING avg_score > 4;
sql

Этот запрос сработает так, как ожидается, потому что HAVING обрабатывается после GROUP BY и уже может использовать значение avg_score.

Примеры использования SELECT SQL

Рассмотрим примеры использования SELECT, в том числе в комбинации с другими операторами SQL. То, как можно выбрать определенные столбцы, уже описано в разделе о синтаксисе, теперь можно рассмотреть то, как выбрать все столбцы:

SELECT * FROM students;

Так можно выбрать студентов, оценка которых выше 4:

SELECT student_name, score FROM students 

WHERE score > 4;
sql

Также с помощью BETWEEN можно задать определенный диапазон оценок, например, от 2 до 4:

SELECT student_name, score FROM students 

WHERE score BETWEEN 2 AND 4;
sql

Дополнительно можно отсортировать результат, расположив оценки в порядке убывания:

SELECT student_name, score FROM students 

WHERE score BETWEEN 2 AND 4 ORDER BY score DESC;
sql

Если нужно отсортировать результат по возрастанию какого-то значения, то используется ASC. Так можно получить список всех студентов от младших к старшим (то есть в порядке возрастания возраста):

SELECT * FROM students 

ORDER BY age ASC;
sql

Количество возвращаемых строк в SQL можно ограничить с помощью LIMIT. Например, если нужно получить список из 10 лучших студентов (то есть тех, чьи оценки самые высокие), то подойдет такой запрос:

SELECT student_name, score FROM students 

ORDER BY score DESC 

LIMIT 5;
sql

С помощью функции AVG() можно найти среднюю оценку всех студентов:

SELECT AVG(score) FROM students;
sql

Если нужно выбрать только уникальные значения определенного столбца, то нужно воспользоваться DISTINCT. Так можно выбрать только уникальные значения столбца age:

SELECT DISTINCT age FROM teachers;
sql

SQL-оператор SELECT также позволяет узнать количество строк в таблице:

SELECT COUNT(*) FROM teachers;
sql

С помощью оператора LIKE в SQL можно выполнять поиск по шаблону. Например, такой запрос вернет всех преподавателей, чья фамилия начинается на букву А:

SELECT teachers_last_name FROM teachers 

WHERE teachers_last_name LIKE 'A%';
sql

Если необходимо выбрать только тех учеников, которые обучаются в определенных группах, то можно воспользоваться оператором IN. Например, если нужны студенты из 1, 5 и 10 группы, то подойдет такой запрос:

SELECT student_last_name FROM students 

WHERE group IN(1, 5, 10);
sql

GROUP BY позволяет группировать данные. Например, так можно получить среднюю оценку студентов по группам (то есть, узнать, каков средний балл в каждой группе):

SELECT group, AVG(score) AS avg_score FROM students

GROUP BY group
sql

Также в SQL есть логические операторы (NOT (логическое отрицание), OR (логическое сложение), AND (логическое умножение)). Часто они нужны для объединения условий. Так можно получить список фамилий студентов, которые учатся во второй группе и имеют оценку выше, чем 4:

SELECT student_name, score FROM students 

WHERE score > 4 AND group = 2;
sql

Оператор UNION в SQL нужен для объединения результатов нескольких запросов. К примеру, можно объединить два запроса: на выбор студентов с оценкой выше 4 и преподавателей, чья фамилия начинается на букву А:

SELECT student_name, score FROM students WHERE score > 4

UNION

SELECT teacher_last_name FROM teachers WHERE teacher_last_name LIKE 'A%';
sql

CASE — это еще один полезный оператор в SQL, который позволяет создавать условную логику: менять поведение программы в зависимости от соответствия или несоответствия какому-то условию. Так можно вывести оценки за экзамен в формате текстового представления (например, 5 — это «Отлично»):

SELECT student_name, student_last_name,

CASE 

    WHEN score = 5 THEN 'Отлично'

    WHEN score = 4 THEN 'Хорошо'

    WHEN score = 3 THEN 'Удовлетворительно'

    ELSE 'Неудовлетворительно'

END AS performance

FROM students;
sql

В результате будут выведены имена и фамилии студентов, а также их оценка за экзамен в текстовом формате.

Также в SQL существуют подзапросы — это запросы, которые используются в других запросах и обычно выполняются до основного запроса. Подзапрос всегда записывается в круглых скобках. Так можно найти самого старшего преподавателя:

SELECT * FROM teachers

WHERE age = (SELECT MAX(age) FROM teachers);
sql

Итак, сначала выполнится выражение в скобках (будет найдено максимальное значение столбца age в таблице teachers), а затем результат выполнения будет использоваться оператором WHERE.