Базовый курс SQL. Извлечение данных. LIMIT OFFSET
Primary tabs
Forums:
Внимание! Для дальнейшего изучения необходимо развернуть тестовую базу данных на своём компьютере, на которой Вы сможете запускать все примеры, рассматриваемые в курсе. Как это сделать, смотрите здесь. Обязательно сделайте это, прежде чем продолжите чтение!
Оператор SELECT
SELECT - это оператор, позволяющий достать конкретные данные из определённой таблицы.
Вместо термина "оператор" также могут использовать "ключевое слово", "служебное слово", "зарезервированное слово". В любом случае это часть языка SQL. Название таблицы или столбца такими словами приведёт к ошибке!
Извлечение данных
Итак, перейдём к практике. Извлечём столбец под названием student_surname из таблицы Students:
SELECT student_surname FROM Students;
FROM также является ключевым словом SQL.
Результат выполнения будет таким:
student_surname ----------------- Петрашевский Сейдинай Егорова Адамченко Легран Распопов Колобков Шульгина Римский Грошев
Мы получили значения ТОЛЬКО столбца name, но для ВСЕХ строк таблицы.
Обратите внимание:
- Все запросы обязательно заканчиваются "точкой с запятой" (символом ;). Иначе запрос не будет отправлен или возникнет ошибка.
- Регистр ключевых слов может быть любой, т.е. select и SELECT отработают одинаково. А вот при названии столбцов и таблиц обязательно соблюдать точность: Students и students - это две разные таблицы.
- Дополнительные пробелы и переносы строк в SQL игнорируются, т.е. Вы можете использовать переносы для увеличения читаемости кода, но это не обязательно.
- Данные могут возвращаться в произвольном порядке. Как сортировать ответ SQL запроса, мы рассмотрим позже.
Извлечение нескольких или всех столбцов
Чтобы извлечь несколько столбцов, но не все, перечисляйте их после оператора SELECT через запятую. После завершающего столбца запятая не требуется:
SELECT student_surname, student_name FROM Students;
Вывод будет такой:
student_surname | student_name ---------------------------+------------------- Петрашевский | Аркадий Сейдинай | Эра Егорова | Зинаида Адамченко | Пётр Легран | Базиль Распопов | Еагений Колобков | Дмитрий Шульгина | Ольга Римский | Гриорий Грошев | Вадим
Для извлечения всех столбцов используйте звёздочку (символ *):
SELECT * FROM Students;
Такой запрос целесообразен скорее только тогда, когда Вы хотите вручную посмотреть, что лежит в БД. В программном коде же мы рекомендуем уточнять, какие именно данные необходимо достать, чтобы исключить избыточность получаемой информации и, как следствие, снижение производительности кода.
Извлечение уникальных строк. DISTINCT
Используя ключевое слово SELECT, мы получим все строки, соответствующие установленным нами условиям. Например, нам требуется получить список групп, в которых учатся студенты:
SELECT group_id FROM Students;
Получим group_id всех строк таблицы Students:
group_id ---------------- 31548 31548 30913 31548 30913 31548 31548 31548 30913 33018
Видим, что группы повторяются больше 1 раза. Но это для нас несущественная информация, т.к. нам нужен список групп, а не количество студентов во всех группах. Нам поможет оператор DISTINCT:
SELECT DISTINCT group_id FROM Students;
Получим:
speaker_id ---------------- 33018 30913 31548
Внимание!
Если производится выборка нескольких столбцов с использованием DISTINCT, уникальность будет проверяться по КАЖДОМУ из них. Например, SELECT DISTINCT group_id, student_age: если в разных группах учатся студенты одного возраста, в выборку попадёт только один из них.
Операторы LIMIT и OFFSET
Итак, мы научились доставать все строки, соответствующие неким критериям отбора. Зачастую это огромный объём данных. Поэтому иногда требуется ограничить число получаемых строк в рамках одного запроса.
Например, напишем запрос получения одного столбца данных, name, но ограничим выборку пятью строками ключевым словом LIMIT:
PostgreSQL, MySQL, MariaDB, SQLite:
-- Достанет только первые пять строк SELECT student_surname FROM Students LIMIT 5;
Следующим запросом можно достать следующие 5 строк - дополнительно нужно задать точку начала отсчёта ключевым словом OFFSET:
-- Достанет c 5 по 9 строки SELECT student_surname FROM Students LIMIT 5 OFFSET 5;
Ответ будет такой:
student_surname -------------------- Распопов Колобков Шульгина Грошев Римский
Также MySQL, MariaDB и SQLite поддерживают сокращённую форму записи:
-- Достанет c 5 по 9 строки SELECT student_surname FROM Students LIMIT 5, 5;
Внимание!
Нумерация строк в БД всегда начинается с 0. Т.е. LIMIT 1 OFFSET 1 обращается не к первой, а ко второй строке по порядку.
Логика построения запросов всегда едина, но синтаксис в разных СУБД может отличаться. При разработке в новой для Вас СУБД всегда уточняйте, какие ключевые слова нужно использовать. К примеру:
- Microsoft SQL Server и MicrosoftAccess:
-- Достанет первые пять строк выборки SELECT TOP 5 student_surname FROM Students;
- DB2:
-- Достанет первые пять строк выборки SELECT student_surname FROM Students FETCH FIRST 5 ROWS ONLY;
- Oracle:
-- Опирается на встроенный счётчик ROWNUM SELECT student_surname FROM Students WHERE ROWNUM <= 5;
Комментарии в запросе
Комментарии - текст, который не должен восприниматься СУБД, как часть запроса, но необходимый разработчику.
Это может быть описание смысла запроса, значения столбца таблицы, любое примечание, пометка todo. Также это может быть часть кода, которая временно не должна выполняться (в процессе отладки, например).
В зависимости от СУБД могут использоваться разные символы для комментирования:
- --
SELECT student_surname -- это комментарий FROM Students;
- #
# Это комментарий, может находиться только в начале строки SELECT student_surname FROM Students;
- /* */
/* Это комментарий. Эта часть запроса не выполнится SELECT student_surname, group_id FROM Students; Конец комментария */ SELECT student_surname FROM Students;
Итак, мы рассмотрели оператор SELECT и научились извлекать данные. Далее узнаем, как упорядочить нашу выборку.
- Log in to post comments
- 1823 reads