> SmartGate

SELECT

Основной оператор для выборки данных из таблиц

Теория

Мы уже знаем, что такое база данных, СУБД и SQL. Пришло время познакомиться с самым часто используемым в SQL оператором, при помощи которого выполняется выборка данных из таблиц. Имя этому оператору — SELECT.

SELECT— это команда, которая говорит: «Покажи мне вот эти колонки из этой таблицы». При этом сами данные в таблице остаются нетронутыми — мы просто их вытягиваем и смотрим, анализируем, делаем какие-либо выводы. Когда вы пишете SELECT, вы отправляете в СУБД запрос, в котором просто описываете желаемый результат.

Еще раз. SELECT переводится с английского как «выбрать». И он действительно выбирает то, что вы попросите: какие столбцы, из какой таблицы, а потом отдаёт вам результат. Мы уже писали о том, что язык SQL достаточно логичен в написании. Так вот, самые простые имеют следующую логику: «Покажи мне вот это из такой-то таблицы».

Синтаксис

SELECT column1,              -- указываем столбцы, которые хотим получить
       column2,
       column3 AS столбец_3  -- задаём столбцу псевдоним
FROM table_name;             -- указываем таблицу, из которой берём данные
SQL
После SELECT через запятую перечисляются столбцы, которые вы хотите получить. Запятая ставится между названиями столбцов, но после последнего — не ставится. Если хотите все столбцы сразу, можно написать *, но в реальной работе лучше так не делать: чем меньше данных запрашиваете, тем быстрее работает запрос. После FROM указываете имя таблицы — откуда брать данные.

Можно было перечислить названия столбцов через запятую в одну строку, да и весь запрос написать в одну строку, то есть вот так: SELECT column1, column2 FROM table_name;. Такая конструкция будет работать, но с точки зрения оформления вашего запроса лучше стараться писать его структурировано, как в примере выше и в примерах ниже. Каждое ключевое слово SELECT, FROM и так далее с новой строки. Перечисление самих столбцов в SELECT в колонку. В будущем это здорово упростит вам чтение своих же запросов и поможет коллегам в них быстрее разобраться.

В конце запроса вы видите точку с запятой — это признак того, что запрос как одна целая логическая команда закончен. Теперь к примерам.

Примеры

1. Все столбцы из таблицы workers

Этот простой запрос вернёт всю таблицу целиком: id, имена, фамилии, зарплаты, даты приёма и всё остальное. Удобно, когда нужно посмотреть, какие столбцы есть в таблице (на боевой БД на больших таблицах старайтесь не использовать *).

🔄 Попробуйте изменить запрос:

  • • Замените * на конкретные столбцы: first_name, position
  • • Добавьте столбец salary

2. Только имена и зарплаты

В этом запросе выводим только то, что необходимо: имена и зарплаты.

🔄 Попробуйте изменить запрос:

  • • Добавьте столбец position в SELECT
  • • Попробуйте увеличить зарплату на 20%, напишите отдельным столбцом после salary математическое выражение: salary * 1.2

3. Переименовываем столбцы в результате

Ключевое слово AS используется, чтобы столбцам таблицы присвоить другие названия (псевдонимы). В результате столбцы будут называться «Имя» и «Зарплата» — часто так понятнее, особенно когда данные показываете коллегам или в отчёте. AS можно не писать, но с ним код читается легче.

🔄 Попробуйте изменить запрос:

  • • Переименуйте first_name в Имя_сотрудника
  • • Попробуйте убрать все ключевые слова AS и запустить запрос. Отработает ли он и присвоятся ли новые имена?

4. Уникальные значения

DISTINCT - это ключевое слово, которое убирает дубликаты строк. В этом примере видно, какие вообще отделы есть в компании: 1, 2, 3 и так далее. Без повторов.

🔄 Попробуйте изменить запрос:

  • • Попробуйте DISTINCT position — какие должности есть в компании?
  • • А если убрать DISTINCT — что изменится?

5. Уникальные комбинации

Здесь выводятся уникальные пары «отдел — должность». Например, в отделе 1 есть «Продавец-консультант» и «Менеджер по продажам». DISTINCT проверяет сочетание двух столбцов целиком.

🔄 Попробуйте изменить запрос:

  • • Попробуйте поменять порядок столбцов: сначала position, потом department_id
  • • Попробуйте добавить в SELECT еще один столбец после position

Типичные ошибки

Звёздочка там, где не надо Пользователи часто пишут SELECT * всегда и везде. Это удобно, но на больших таблицах запрос будет тормозить и тащить кучу лишнего. Лучше привыкать сразу перечислять только нужные столбцы, тем более для решения конкретной задачи все столбцы вам вряд ли понадобятся. Забывают про FROM Запрос должен быть полным: SELECT first_name FROM workers; — а не просто SELECT first_name;. Без FROM СУБД не поймёт, откуда брать данные. Лишние запятые SELECT first_name, last_name, FROM workers; — запятая после last_name лишняя, будет ошибка. Запятые только между названиями, после последнего — нет. Путают AS с переименованием столбцов в самой таблице AS меняет название столбца только в результате, сами столбцы в таблице остаются с прежними именами.

Практика

Проверь себя

Ответьте на вопросы, чтобы закрепить материал:

1
Что вернёт запрос SELECT email FROM users;?
2
Из таблицы products нужно получить список всех категорий товаров. Каждая категория должна встретиться только один раз. Напишите SQL запрос.
3
Какой результат вернёт запрос SELECT city, registration_date FROM users;?
4
Напишите запрос, который покажет названия товаров product_name и их цены price из таблицы products, но чтобы в результате колонки назывались Товар и Цена.
5
Чем отличаются запросы SELECT * FROM orders; и SELECT status FROM orders;?
6
В таблице orders есть статусы заказов. Нужно узнать, какие вообще статусы бывают, без повторений.
7
Сколько строк вернёт запрос SELECT DISTINCT city FROM users;, если в таблице 50 пользователей, из которых 15 живут в Москве, 10 в Казани, а остальные в разных городах?
8
Напишите запрос, который выведет имена first_name и фамилии last_name всех пользователей из таблицы users.