ИТ.03 - 04 - Основные SQL-конструкции: SELECT, FROM, WHERE
Введение
На прошлых занятиях мы познакомились с языком SQL и его ролью в работе с базами данных. Сегодня мы переходим к практическому изучению базовых конструкций, без которых невозможно составить ни один SQL-запрос: SELECT, FROM и WHERE.
Эти три ключевых слова можно сравнить с «азбукой» SQL. Если вы их усвоите, то сможете извлекать нужные данные из базы, а значит — решать реальные задачи анализа и обработки информации.
Зачем нужны SELECT, FROM, WHERE?
- SELECT отвечает за то, что именно мы хотим увидеть (какие столбцы данных).
- FROM показывает, откуда именно брать данные (из какой таблицы или нескольких).
- WHERE позволяет выбрать только те строки, которые соответствуют определённым условиям.
Можно провести аналогию:
Представьте, что вы работаете с Excel-таблицей.
SELECT— это выбор нужных колонок,FROM— указание, какой лист Excel вы используете, аWHERE— фильтр строк по условию.
Общая форма запроса
SELECT [DISTINCT | ALL] поля_таблиц_через_запятую
FROM имя_таблицы
[WHERE] условия_на_ограничения_строк
[GROUP BY] условия_группировки
[HAVING] условия_на_ограничения_строк_после_группировки
[ORDER BY] порядок_сортировки [ASC | DESC]
[LIMIT] ограничение_количества_записей
В описанной структуре запроса необязательные параметры указаны в квадратных скобках.
DISTINCTиспользуется для исключения повторяющихся строк из результатаALL(по умолчанию) используется для получения всех данных, в том числе и повторенийFROMперечисляет используемые в запросе таблицы из базы данныхWHERE— это условный оператор, который используется для ограничения строк по какому-либо условиюGROUP BYиспользуется для группировки строкHAVINGприменяется после группировки строк для фильтрации по значениям агрегатных функцийORDER BYиспользуется для сортировки. У него есть два параметра:ASC(по умолчанию) используется для сортировки по возрастаниюDESC— по убываниюLIMITиспользуется для ограничения количества строк для вывода
Важно: При построении SQL-запросов важно не только соблюдать правильность синтаксиса в написании команд, но и строго следовать порядку в котором они перечисляются.
Фактическое выполнение инструкций определяется СУБД и порядок из этого списка может отличаться.
Пример таблицы products
Это витрина бытовой техники условного интернет-магазина: каждая строка описывает товар, сколько его осталось на складе и по какой цене он продаётся.
| id | title | amount | price |
|---|---|---|---|
| 1 | Стиральная машина | 5 | 10000 |
| 2 | Холодильник | 0 | 10000 |
| 3 | Микроволновка | 3 | 4000 |
| 4 | Пылесос | 2 | 4500 |
| 5 | Вентилятор | 0 | 700 |
| 6 | Телевизор | 7 | 31740 |
| 7 | Тостер | 2 | 2500 |
| 8 | Принтер | 4 | 3000 |
Таблица products
Поля
id— целочисленный первичный ключ;title— название товара;amount— остаток на складе;price— цена в рублях.
Ограничения
- В учебной таблице только
idстрого уникален, остальные поля допускаютNULL, но по умолчанию заполнены значениями.
Код создания данной таблицы на языке SQL в диалекте SQLite
CREATE TABLE
products (
id INT PRIMARY KEY,
title VARCHAR(255),
amount INT,
price INT
)
;
INSERT INTO
products (id, title, amount, price)
VALUES
(1, 'Стиральная машина', 5, 10000),
(2, 'Холодильник', 0, 10000),
(3, 'Микроволновка', 3, 4000),
(4, 'Пылесос', 2, 4500),
(5, 'Вентилятор', 0, 700),
(6, 'Телевизор', 7, 31740),
(7, 'Тостер', 2, 2500),
(8, 'Принтер', 4, 3000)
;
Скачать код создания таблицы в виде файла можно по ссылке: products_01_sqlite.sql
Конструкция SELECT
1. Вывод данных не из таблицы
Вы можете выводить любые строки и числа вместо столбцов:
SELECT "Просто строка", 1;
2. Выбор всех данных
SELECT *
FROM products;
* означает «выбрать все столбцы». Этот запрос возвращает таблицу целиком.
Минус: в реальной работе SELECT * часто перегружает систему лишними данными. Хорошая практика — указывать только нужные поля.
3. Выбор отдельных столбцов
SELECT title, price
FROM products;
Результат: список названий товаров и их цен.
Это удобно, когда таблица очень большая и нам нужны лишь отдельные характеристики.
4. Использование алиасов (псевдонимов)
Алиасы (или псевдонимы) в SQL-запросах - это сокращенные названия, которые можно использовать для обращения к таблицам и столбцам в запросах. Они упрощают написание запросов и делают их более читаемыми.
Иногда названия столбцов слишком длинные или неудобные. Для упрощения используют AS:
SELECT
title AS товар,
price AS цена
FROM products;
Так результат будет выглядеть понятнее.
Совет
Если для имени псевдонима необходимы пробелы или зарезервированные SQL слова, его нужно взять в кавычки:
Верно:
title AS товарtitle AS "Название товара"title AS "select"
Не верно:
title AS Название товара-> вызовет ошибкуtitle AS select-> вызовет ошибку
Кроме того, алиасы полезны при написании запросов с использованием нескольких таблиц, можно задать алиасы для каждой из них, чтобы сократить количество символов при обращении к ним в запросе, однако эту особенность мы рассмотрим далее по курсу когда будем работать с несколькими таблицами.
Конструкция WHERE
Ситуация, когда требуется сделать выборку по определенному условию, встречается очень часто. Для этого в операторе SELECT существует параметр WHERE, после которого следует условие для ограничения строк. Если запись удовлетворяет этому условию, то попадает в результат, иначе отбрасывается.
В условном операторе применяются операторы сравнения, специальные и логические операторы.
Операторы сравнения
Операторы сравнения служат для сравнения двух выражений, их результатом может являться 1 (или TRUE — ИСТИНА), 0 (или FALSE — ЛОЖЬ) и особый тип данных NULL (рассмотрим в рамках отдельной темы).
| Оператор | Описание |
|---|---|
= | Оператор равенства |
<> или != | Оператор неравенства |
< | Оператор строго меньше |
<= | Оператор меньше или равно |
> | Оператор строго больше |
>= | Оператор больше или равно |
Логическим и специальным операторам более подробно будет посвящена отдельная тема.
1. Отбор по строгому числовому условию
SELECT *
FROM products
WHERE price < 3000;
Выведет товары дешевле 3000.
2. Отбор по нестрогому числовому условию
SELECT *
FROM products
WHERE price >= 10000;
Все товары, которые стоят 10000 и дороже.
3. Отбор по равенству
SELECT *
FROM products
WHERE amount = 0;
Выведет только те товары, которых нет на складе.
Комментарии в SQL
Комментарии могут использоваться для описания цели запроса, объяснения сложных операций, указания авторства запроса и т.д. Они помогают другим разработчикам быстрее понимать код и ускоряют процесс разработки и отладки.
Комментарии делают запросы читаемыми:
Однострочный:
-- Товары дороже 10000 SELECT title, price FROM products WHERE price > 10000;Многострочный:
/* Этот запрос выбирает товары, у которых цена меньше 5000 */ SELECT title, price FROM products WHERE price < 5000;
Следует помнить, что комментарии не должны быть избыточными и не должны содержать конфиденциальную информацию. Также, при написании комментариев следует следить за грамматикой и стилем написания.
Использование комментариев в SQL-запросах является хорошей практикой программирования. Они помогают другим разработчикам быстрее понимать код и ускоряют процесс разработки и отладки.
Логика работы WHERE
Важно понимать: SQL обрабатывает таблицу построчно.
- Каждая строка проверяется на соответствие условию.
- Если условие выполняется — строка попадает в результат.
- Если нет — строка отбрасывается.
Практические задания
Задание 1
Выведите все данные из таблицы products.
-- Ваш код можете писать тут
SELECT *
FROM products
Задание 2
Выведите названия (title) и цены (price) всех товаров.
-- Ваш код можете писать тут
SELECT
title,
price
FROM products
Задание 3
Выведите названия (title) и остатки (amount) товаров, которые отсутствуют на складе.
-- Ваш код можете писать тут
SELECT
title,
amount
FROM products
WHERE amount < 1
Задание 4
Выведите названия (title) и цены (price) товаров дешевле 4000.
-- Ваш код можете писать тут
SELECT
title,
price
FROM products
WHERE price < 4000
Задание 5
Выведите названия (title) и цены (price) товаров стоимостью 9500 и дороже.
-- Ваш код можете писать тут
SELECT
title,
price
FROM products
WHERE price >= 9500
Задание 6
Выведите все названия (title), цены (price) и остатки (amount) товаров так, чтобы столбцы с этими значениями назывались «Товар», «Цена» и «Остаток» соответственно.
-- Ваш код можете писать тут
SELECT
title AS "Товар",
price AS "Цена",
amount AS "Остаток"
FROM products