DISTINCT, псевдонимы и выражения
Наведите порядок в результатах, переименуйте столбцы и считайте прямо внутри SELECT
SELECT не обязан показывать столбцы ровно так, как они хранятся. Можно скрыть повторяющиеся значения с помощью DISTINCT, дать столбцам удобные имена через псевдонимы, и даже вычислять совершенно новые значения с помощью выражений, таких как price * quantity или CONCAT(...).
- убирать повторяющиеся строки из результата с помощью
SELECT DISTINCT, - переименовывать столбец или таблицу через псевдоним с ключевым словом
AS, - выполнять арифметику (
+ - * /) внутриSELECT, - склеивать текст с помощью
CONCAT(), - различать то, что хранится, и то, что только показывается.
0. Наша таблица-пример
Каждый запрос на этой странице использует одну маленькую таблицу магазина под названием products. Вот как её создали и заполнили:
CREATE TABLE products (
id INT,
name VARCHAR(50),
category VARCHAR(50),
price INT,
quantity INT
);
INSERT INTO products (id, name, category, price, quantity) VALUES
(1, 'Notebook', 'Stationery', 3, 10),
(2, 'Pen', 'Stationery', 1, 50),
(3, 'Backpack', 'Bags', 20, 5),
(4, 'Pencil', 'Stationery', 1, 30),
(5, 'Lunchbox', 'Bags', 8, 12);
Итак, вся таблица выглядит так:
| id | name | category | price | quantity |
|---|---|---|---|---|
| 1 | Notebook | Stationery | 3 | 10 |
| 2 | Pen | Stationery | 1 | 50 |
| 3 | Backpack | Bags | 20 | 5 |
| 4 | Pencil | Stationery | 1 | 30 |
| 5 | Lunchbox | Bags | 8 | 12 |
Обратите внимание, что столбец category повторяется: "Stationery" встречается три раза, а "Bags" — два раза. Запомните это для следующего раздела.
1. DISTINCT: только разные значения
Иногда в столбце одно и то же значение встречается снова и снова, а вам нужно увидеть каждое разное значение только один раз. Ключевое слово DISTINCT делает именно это: оно выбрасывает повторяющиеся строки и оставляет только уникальные.
Представьте пакет разноцветных конфет. Если высыпать их, вы увидите красную, красную, синюю, красную, синюю. Но если друг спросит "какие цвета в пакете?", вы ответите просто "красный и синий" — назовёте каждый цвет один раз. Вот что делает DISTINCT.
Без DISTINCT запрос всех категорий даёт повтор для каждой строки:
SELECT category
FROM products;
| category |
|---|
| Stationery |
| Stationery |
| Bags |
| Stationery |
| Bags |
Теперь добавьте DISTINCT сразу после SELECT — и повторы исчезнут:
SELECT DISTINCT category
FROM products;
| category |
|---|
| Stationery |
| Bags |
Пять строк превратились в две, потому что различных категорий всего две.
DISTINCT оставляет каждую уникальную комбинацию этих столбцов, а не каждое отдельное значение. Например, SELECT DISTINCT category, price FROM products; оставляет строку для каждой разной пары (category, price).