SQL: быстрое погружение — страница 7 из 24

Как уже упоминалось в главе 1, все запросы должны соответствовать определенному синтаксису, чтобы их мог понять браузер SQL. Однако при написании запросов необходимо учитывать еще кое-что. Важно, чтобы другие пользователи базы данных могли легко понять ваши запросы. Набор принципов, которые задают стиль, методы написания запросов и т. д., известен как соглашение о кодировании. Для разных сред баз данных соглашения о кодировании различаются. В этом разделе мы приводим соглашения о кодировании, используемые в этой книге.

В предыдущих примерах после ключевого слова SELECT мы использовали символ * вместо указания отдельных полей. С помощью специального символа * осуществляется выборка всех записей из таблицы. В некоторых случаях этот символ полезен. Однако чаще рекомендуется указывать необходимые поля.

Здесь точку с запятой в конце оператора ставить необязательно, так как мы пишем только один оператор SQL. Точка с запятой обозначает конец оператора SQL. Поскольку большинство SQL-запросов, используемых в этой книге, представляют собой отдельные операторы, точку с запятой мы будем в дальнейшем опускать.

В нашем примере в условии SELECT мы определили три поля для отображения. Каждое поле необходимо отделять запятой (кроме последнего). Отсутствие запятой между полями или наличие ее после последнего поля — это распространенные синтаксические ошибки, о которых вы получите сообщение на панели результатов.

Обратите внимание, что код состоит из нескольких строк. Также запрос можно написать в одной строке, и браузер SQL по-прежнему распознает код и вернет результаты. Однако запросы рекомендуется разделять на условия, при этом каждое условие необходимо писать с новой строки. В следующих главах наши запросы станут намного длиннее и будут содержать несколько условий. Использование отступов и пробелов в запросах повышает удобочитаемость и значительно упрощает понимание сложной логики запроса.

НАПОМИНАНИЕ

Условие — это часть инструкции SQL, которая начинается со специального ключевого слова (SELECT, FROM и т. д.) и может включать дополнительные параметры и операторы.

Использование псевдонима

Как правило, технический язык базы данных отличается от общепринятого языка. Часто вам придется работать со старыми базами данных или базами данных, имена полей которых давно не обновлялись. Псевдонимы SQL используются для присвоения таблице или столбцу в таблице временного имени. Псевдонимы часто используются для того, чтобы сделать имена столбцов более удобочитаемыми. Псевдоним существует только на время выполнения запроса.

В следующем примере мы рассмотрим различные способы создания псевдонима для выбранных имен полей из таблицы customers. Псевдоним в базе данных всегда указывают сразу после имени поля. Псевдонимы обычно связаны с ключевым словом AS, однако в большинстве реализаций РСУБД ключевое слово AS между именем поля и псевдонимом использовать необязательно.

/*

CREATED BY: Уолтер Шилдс

CREATED ON: 13.03.2018

DESCRIPTION: Данный запрос осуществляет выборку полей имени, фамилии, электронной почты и номера телефона из таблицы customers (клиенты) и демонстрирует четыре различных способа использования псевдонима.

*/


SELECT

FirstName AS 'First Name',

LastName AS [Last Name],

Email AS EMAIL

Phone CELL

FROM

customers

В данном запросе для первых трех полей мы использовали ключевое слово AS. Затем для поля Phone, которое мы переименовали в CELL, ключевое слово AS мы опустили. Если созданный вами псевдоним содержит несколько слов (например, имя и фамилию), его необходимо разграничить, в данном случае либо одинарными кавычками '', либо квадратными скобками [], как показано в примере. Поскольку псевдонимы EMAIL и CELL представляют собой отдельные слова, нет необходимости их заключать в кавычки или скобки.

Примечание

В SQL существует множество вариантов синтаксиса псевдонимов. Другие РСУБД могут не распознавать все перечисленные здесь варианты псевдонимов. Если при выполнении запроса обнаружена синтаксическая ошибка, проверьте, как вы указали псевдоним.

Как показано на рис. 36, в расположенных слева выходных данных имена полей не меняются. Расположенные справа выходные данные показывают, как при использовании псевдонимов изменились имена столбцов. При добавлении псевдонима данные в базе данных не изменяются. Псевдонимы изменяют только способ отображения полей на панели результатов.

Рис. 36

Практические задания

• Добавьте к запросу еще одно поле и укажите для него псевдоним.

• Попрактикуйтесь в изменении синтаксиса псевдонима, попробуйте исключить ключевое слово AS. Проанализируйте результат.

Примечание

Не используйте никакие ключевые слова SQL в качестве псевдонимов. Это вызовет путаницу или синтаксические ошибки. РСУБД может интерпретировать данный псевдоним как команду.

Условие ORDER BY

Предположим, что службе поддержки необходим список клиентов sTunes. Целесообразно упорядочить полученные результаты по фамилии клиентов. Чтобы сделать это, надо использовать новое условие после условия FROM. Условие ORDERBY используется для сортировки данных в порядке возрастания или убывания на основе одного или нескольких столбцов. По умолчанию данные будут отсортированы в порядке возрастания от A до Z. Специальное ключевое слово ASC, определяющее порядок сортировки, необязательно. Для сортировки в порядке убывания от Z до A необходимо после сортируемого поля добавить ключевое слово DESC. Например, запрос ORDERBYLastNameDESC сортирует столбец с псевдонимом LastName в порядке убывания.

/*

CREATED BY: Уолтер Шилдс

CREATED ON: 13.03.2018

DESCRIPTION: Данный запрос осуществляет выборку полей имени, фамилии и электронной почты из таблицы customers (клиенты), отсортированных

по фамилии (Last Name).

*/


SELECT

FirstName AS [First Name],

LastName AS [Last Name],

Email AS [EMAIL]

FROM

customers

ORDER BY

LastName ASC

Рис. 37

Примечание

Если условие ORDER BY отсутствует, каждый запрос будет возвращать данные в том порядке, в котором они были изначально сохранены в таблице.

Рис. 38

Также условие ORDERBY мы можем использовать для сортировки по нескольким столбцам. В данном примере мы выполним сначала сортировку по имени (по алфавиту), а затем по фамилии (в обратном порядке). Для этого нам необходимо в условии ORDERBY указать два поля. При перечислении нескольких полей их необходимо разделять запятыми.

/*

CREATED BY: Уолтер Шилдс

CREATED ON: 13.03.2018

DESCRIPTION: Данный запрос осуществляет выборку полей имени, фамилии и электронной почты из таблицы customers (клиенты), отсортированных сначала по имени (по возрастанию), а затем по фамилии (по убыванию).

*/


SELECT

FirstName AS [First Name],

LastName AS [Last Name],

Email AS [EMAIL]

FROM

customers

ORDER BY

FirstName ASC,

LastName DESC

Выполним данный запрос и проанализируем имена клиентов, начинающиеся с буквы D. Мы видим, что имена расположены по алфавиту, а фамилии — в обратном порядке.

Примечание

Если вы используете условие ORDER BY для столбца, в котором имеются пустые строки, вы увидите, что эти значения будут отображаться в начале списка как NULL (если сортировка осуществляется в порядке возрастания).

Практические задания

• Измените порядок полей в условии SELECT и установите LastName первым столбцом, а не вторым. Выполните запрос, в результате которого будут получены упорядоченные записи LastName. Стал ли список более читабельным?

Получение ограниченного числа записей с помощью условия LIMIT

В предыдущих примерах мы осуществляли выборку всех записей из таблицы customers. Хотя мы ограничили наши записи тремя полями и отсортировали эти поля, в панели сообщений мы видим, что каждый раз мы возвращаем 59 строк. Если нет необходимости в просмотре всех 59 записей, мы можем ограничить наши результаты определенным количеством строк. Это бывает полезно при сортировке по количеству (которое мы продемонстрируем позже), например по самой высокой цене или самым большим продажам. Если после условия ORDERBY мы добавим ключевые слова LIMIT10, в результате вернутся только первые десять записей в указанном порядке сортировки. Можно указать любое число записей, которое необходимо отобразить (при условии, что в таблице имеется такое количество записей).

/*

CREATED BY: Уолтер Шилдс

CREATED ON: 13.03.2018

DESCRIPTION: Данный запрос осуществляет выборку первых 10 записей из таблицы customers (клиентов), отсортированных сначала по имени (по возрастанию), а затем по фамилии (по убыванию).

*/

SELECT

FirstName AS [First Name],

LastName AS [Last Name],

Email AS [EMAIL]

FROM

customers

ORDER BY

FirstName ASC,

LastName DESC

LIMIT 10

Рис. 39

На нашей панели сообщений (рис. 39) теперь появилось сообщение: 10 rows returned in 1ms (10 строк вернулось за 1 мс). Сначала запрос выполняет условие ORDERBY, а затем применяет ограничение.

Примечание

Нет необходимости всегда использовать условие LIMIT вместе с ORDER BY. В большинстве случаев имеет смысл упорядочить результаты по определенным критериям, прежде чем ограничивать их. Если условие ORDER BY не используется, результаты оператора LIMIT будут возвращены в том порядке, в котором они были изначально добавлены в таблицу.

Контрольные вопросы

1. Напишите запрос, чтобы узнать количество клиентов, фамилии которых начинаются с буквы B.

2. Какая компания при сортировке в порядке убывания появляется в верхней строке таблицы customers?

3. Какое количество клиентов не указали почтовый индекс?