Итак, мы уже начали разбираться с SELECT, командой SQL, предназначенной для извлечения данных из таблицы или нескольких таблиц в базе данных. Можно сказать, что это клавиша F5 в браузере для базы данных: "покажи мне, что у тебя есть". Простая структура запроса выглядит так:
SELECT колонка1, колонка2, … колонкаN
FROM таблица
Где:
SELECT— это ключевое слово, с которого начинается запрос.колонка1, колонка2, ...— это список столбцов, данные из которых вы хотите получить.FROM таблица— указывает таблицу, из которой извлекаются данные.
Давайте сразу разобьём это на части с примерами!
Основная структура команды SELECT
Выбор из всех столбцов. Если вы хотите посмотреть все данные из таблицы, можно использовать звёздочку *. Вот, например, у нас есть таблица students:
| id | name | age | grade |
|---|---|---|---|
| 1 | Alex | 17 | A |
| 2 | Maria | 19 | B |
| 3 | Otto | 21 | C |
Чтобы извлечь все данные из этой таблицы, используйте запрос:
SELECT * FROM students
И результатом будет вот такой набор колонок и строк:
| id | name | age | grade |
|---|---|---|---|
| 1 | Alex | 17 | A |
| 2 | Maria | 19 | B |
| 3 | Otto | 21 | C |
То есть — вся таблица, как и заказывали.
Выбор конкретных столбцов
Разумеется чаще всего вам нужно выбрать только те столбцы, которые вам нужны, чтобы не тащить лишние данные. Например вы хотите узнать имена и возраст студентов. Тогда вам нужно написать такой запрос:
SELECT name, age FROM students
Результат выполнения запроса будет таким:
| name | age |
|---|---|
| Alex | 17 |
| Maria | 19 |
| Otto | 21 |
Поняли разницу? Когда вы выбираете только нужные столбцы, запрос становится быстрее и красивее.
Порядок выполнения запроса
SQL-запросы — это коварная штука: хотя мы пишем SELECT в начале, на самом деле сначала обрабатывается часть FROM, а уже потом возвращается результат. Вот как это выглядит под капотом:
- Обрабатывается таблица в
FROM: сервер находит указанную таблицу. - Применяются условия к строкам (если есть): выбираются только те строки, которые соответствуют условиям.
- Выбираются указанные столбцы: из оставшихся строк извлекаются нужные данные.
То есть в такой команде:
SELECT name FROM students
Cначала сервер найдёт таблицу students, затем прочитает столбец name, и только после этого вернёт результат.
Практические примеры
Пример №1: Список студентов.
Представим, что вы администратор университета, и вам нужны имена всех студентов. Запрос:
SELECT name
FROM students;
Результат:
| name |
|---|
| Alex |
| Maria |
| Otto |
Пример №2: Добавляем возраст и id.
Теперь вам нужны id, имена, и возраст. Просто добавьте еще пару столбцов:
SELECT name, age, id
FROM students;
Результат:
| name | age | id |
|---|---|---|
| Alex | 17 | 1 |
| Maria | 19 | 2 |
| Otto | 21 | 3 |
Пример №3: Добавляем выражения.
Допустим, вы хотите узнать, сколько лет осталось вашим студентам до совершеннолетия.
Тогда нужно будет вместо age написать 21-age. Тут мы для красоты предположили, что совершеннолетие будет в 21:
SELECT name, 21-age
FROM students;
И вот какой будет результат:
| name | 21-age |
|---|---|
| Alex | 4 |
| Maria | 2 |
| Otto | 0 |
Подробнее о выражениях вы узнаете в следующих лекциях. А теперь давайте посмотрим на ошибки, с которыми некоторые из вас уже наверняка столкнулись.
Типичные ошибки при использовании SELECT
Опечатки в названиях таблиц и столбцов.
Одна из самых частых ошибок — когда имя таблицы или столбца указано с ошибкой.
Если в базе данных нет таблицы studentsz, вы получите ошибку:
SELECT name
FROM studentsz; -- Ошибка: таблицы нет!
Или если столбец называется name, а вы указали student_name, снова ошибка:
SELECT student_name -- Ошибка: столбца нет!
FROM students;
Решение простое: всегда проверяйте названия таблиц и столбцов.
Синтаксические ошибки в запросе.
Еще одна частая ошибка — это забыли указать запятую, когда указывали колонки:
SELECT name age id -- Ошибка: нет запятой!
FROM students;
Но не стоит волноваться. Запрос SELECT только выбирает данные. Любые ошибки в таком запросе не способны повредить данные в вашей базе. Но вот когда мы дойдем до запросов, которые изменяют данные - тогда ошибки будут стоить гораздо больше.
Использование * вместо конкретных столбцов.
Когда вы используете *, вы извлекаете ВСЕ данные, включая ненужные. Это снижает производительность и может быть проблемой с большими таблицами. Всегда выбирайте только те столбцы, которые вам реально нужны.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ