Оператор Select (SQL)
Сам перевод аббревиатуры SQL (язык структурно организованных запросов) отражает тот факт, что именно запросы - наиболее часто применяемый элемент в SQL. Выбрать нужные строки, автоматически исключить избыточные данные, пропустить или переупорядочить столбцы поможет Select (SQL) - оператор, содержащий указание СУБД вывести определенную информацию.
Синтаксис оператора
Чтобы правильно использовать любой оператор, необходимо сперва ознакомиться с синтаксисом рассматриваемого языка программирования. Когда говорим конкретно про язык SQL, Select (оператор) имеет следующий синтаксис:
Select | Сообщает базе данных, что мы передаем запрос. Это ключевое слово. |
One, two, three… | Список столбцов для вывода |
From | Указывает на имя таблицы, из которой будут выбираться данные. Также является обязательным ключевым словом. |
Это так называемый «краткий» синтаксис оператора, однако он указывает нам на то, что без ключевых слов Select и from СУБД наш запрос не выполнит.
Полный синтаксис оператора представлен на следующем рисунке:
Здесь предложение Where позволяет уточнить поиск, задав условие.
Для группировки значений и применения к ним агрегатной функции используется предложение Group by, а чтобы уточнить результат уже после группировки, используется предложение Having.
Order by позволит отсортировать значения выбранных столбцов по возрастанию либо по убыванию.
Чтобы более наглядно ознакомиться с оператором Select, представим, что в нашей базе данных есть следующая таблица Cats с информацией:
Id | Breed | Name | Birthday | Color |
1 | Бобтейл | Лорд | 01.04.2017 | Grey |
2 | Керл | Финт | 16.03.2017 | White |
3 | Мау | Пантера | 30.03.2017 | Black |
4 | Бобтейл | Тайсон | 23.02.2017 | Grey |
5 | Бурмилла | Афина | 08.01.2017 | Black |
Каждая строка таблицы содержит уникальный номер котенка, его породу, кличку, дату рождения и расцветку. Далее будем рассматривать, как работает оператор Select (SQL), уже опираясь на данные из этой таблицы.
Как происходит выборка данных из таблицы
Как было рассмотрено выше, для выборки нужной информации из таблицы обязательно используются ключевые слова.
После ключевого слова Select указываются столбцы для вывода. Можно сделать перечень нужных столбцов через запятую, тогда вся конструкция будет выглядеть так:
Select color, breed, name From Cats |
Как видим, мы можем упорядочивать столбцы в том порядке, в каком они нам необходимы. Кроме того, можем выводить только необходимые нам столбцы.
Существует также краткая запись для просмотра всех столбцов таблицы. Для этого после Select указывается звездочка (*) через пробел. Вся конструкция будет выглядеть так:
Select * From Cats |
Результат приведенного запроса - вся таблица Cats, представленная в том виде, в каком она содержится в конце прошлого раздела.
Многие интересуются тем, как разместить результаты выполнения в SQL Select в строку. Чаще всего это требуется, когда необходимо объединить фамилию, имя и отчество человека, размещенные в разобщенных столбцах.
В нашем случае объединим породу и окрас кошек из таблицы Cats. Нюанс заключается в том, что разные СУБД используют для строковой конкатенации разные символы. В одних случаях это просто плюс (+), в других – двойная прямая черта (||) или знак амперсанда (&), порой используется и операнд Concat. Поэтому перед объединением необходимо прочитать аннотацию к конкретной СУБД, с которой вы работаете.
Select breed || ‘, ’ || color From cats |
Результат получим следующий:
Breed, Color |
Бобтейл, Grey |
Керл, White |
Мау, Black |
Бобтейл, Grey |
Бурмилла, Black |
Исключение избыточных данных
Distinct – функция Select (SQL), позволяющая исключить дублирование абсолютно идентичных строк из результата выборки.
Например, мы хотим узнать, кошки каких пород есть в нашей таблице. Если используем простой запрос:
Select breed From Cats |
То получим вполне ожидаемый результат:
Breed |
Бобтейл |
Керл |
Мау |
Бобтейл |
Бурмилла |
Как видим, порода бобтейл дублируется два раза. Аргумент Distinct позволит исключить дублирование, достаточно лишь дописать запрос:
Select distinct breed From Cats |
Уточнение запроса
В реальности практически ни один запрос не выводит данные в виде полного набора строк таблицы. Рассмотрим, какое предложение в Select (SQL) позволит задать критерии для отбора только нужных строк.
Таким предложением служит Where. В этом предложении применяется предикат – условное выражение, дающее на выходе значение "истина" или "ложь". Оператор Select извлечет только те данные из таблицы, для которых условное выражение будет иметь значение True, или "истина".
Поможет разобраться с данной конструкцией простая выборка. Допустим, мы хотим знать все о кошках черного окраса.
Select * From cats Where color = ‘Black’ |
Результатом выполнения данного запроса станут следующие строки таблицы:
3 | Мау | Пантера | 30.03.2017 | Black |
5 | Бурмилла | Афина | 08.01.2017 | Black |
Также можно комбинировать условия, используя логические операторы And, Or, Not.
Предложение Group by
Предложение Group by, используемое в Select (SQL), позволяет сгруппировать запросы по значению определенного столбца (или столбцов), а затем применить к ним агрегатную функцию.
К агрегатным функциям относятся:
- Count – вычисляет количество строк, отобранных запросом.
- Sum – арифметическая сумма всех отобранных значений столбца.
- Min – выводит минимальное из отобранных значений столбца.
- Max – соответственно, максимальное из отобранных значений столбца.
- Avg – среднее значение.
Схему работы данного предложения проще всего понять на конкретном примере. Допустим, мы хотим узнать, сколько котят каждой породы у нас есть. Для этого необходимо сформировать следующий простой запрос:
Select breed, count(*) From cats Group by breed |
Результатом выполнения станет следующая таблица:
Breed | Count |
Бобтейл | 2 |
Керл | 1 |
Мау | 1 |
Бурмилла | 1 |
Как видим, котят породы бобтейл у нас двое, остальных же всего по одному. На практике по такому запросу, основываясь на нашей таблице, заводчик может понять, кошки каких пород пользуются спросом у покупателей, а каких – нет.
Вполне вероятно, что из-за огромного количества записей в реальной таблице захочется еще уточнить запрос и вывести только те породы котят, которых осталось не более, к примеру, десяти. Для уточнения или фильтрации групп используется предложение Having. Оно позволяет отбросить определенные группы, аналогично предложению Where, отбрасывающему отдельные строки. Условие задается по агрегатной функции. Допишем запрос:
Select breed, count(*) From cats Group by breed Having count(*) <=10 |
Поскольку условие мы задали «количество котят каждой породы не более 10», то результат получим такой же, как в примере без уточнения. Но тут важно понять саму схему работы предложения Having. А вот если изменим логическое условие на Having count(*) =1, то результат сократится до трех строк и выведет породы котят, которых осталось всего по одному.
Сортировка
Познакомимся с Order by – предложением оператора Select (SQL), позволяющим отсортировать выводимые строки по возрастанию или убыванию значений в одном или нескольких столбцах.
Важно помнить, что Order by – это заключительное предложение всей конструкции оператора Select. Оно размещается после Select, From, Where, Group by, Having.
При проведении сортировки есть три важных момента:
1) Можно указать любое количество столбцов, каждый из которых по отдельности можно отсортировать либо по возрастанию (ASC), либо по убыванию (DESC).
2) Все указанные столбцы в предложении Order by должны обязательно присутствовать среди выбираемых столбцов в Select.
3) Необязательно перечислять конкретные имена столбцов для сортировки, можно просто указать их номера, под которыми они идут в инструкции Select.
Надеемся, что с помощью нашей статьи вы получили базовые знания об использовании SQL запросов и теперь без труда выберете необходимую информацию из вашей СУБД.