Учебник SQLУрок 3. Сортировка выбранных данныхНа этом уроке вы узнаете, как использовать предложение ORDER BY оператора SELECT для сортировки полученных в результате выборки данных. Сортировка данныхИз последнего урока вы узнали, что следующий SQL-оператор возвращает один столбец из таблицы базы данных. Но взгляните на результат: данные выводятся в полном беспорядке. SELECT prod_name FROM Products; Результат: prod_name ------------------- Fish bean bag toy Bird bean bag toy Rabbit bean bag toy 8 inch teddy bear 12 inch teddy bear 18 inch teddy bear Raggedy Ann King doll Queen doll Вообще-то выбранные данные отображаются не в полном беспорядке. При отсутствии сортировки данные обычно выводятся в том порядке, в котором они находятся в таблице. Это может быть порядок, в котором они изначально добавлялись в таблицу. Однако если данные впоследствии обновлялись или удалялись, порядок будет зависеть от того, как СУБД будет использовать оставшееся свободное место. В результате вы не можете (и не должны) полагаться на порядок сортировки, если вы не контролируете его. В теории реляционных баз данных говорится, что последовательность выбранных данных не имеет смысла, если не был специально указан порядок сортировки. ПредложениеSQL-операторы завершаются предложениями, одни из которых обязательны, другие — нет. Предложение обычно состоит из ключевого слова и предоставляемых данных. Примером может служить предложение FROM оператора SELECT, которое мы использовали в предыдущем уроке. Для точной сортировки выбранных при помощи оператора SELECT данных используется предложение ORDER BY. В этом предложении указывается имя одного или нескольких столбцов, по которым и сортируются результаты. Взгляните на следующий пример: SELECT prod_name FROM Products ORDER BY prod_name; Это выражение идентично предыдущему, за исключением предложения ORDER BY, которое указывает системе управления базой данных отсортировать данные в алфавитном порядке по столбцу prod_name. Результат применения этого выражения будет следующим: prod_name -------------------- 12 inch teddy bear 18 inch teddy bear 8 inch teddy bear Bird bean bag toy Fish bean bag toy King doll Queen doll Rabbit bean bag toy Raggedy Ann Местоположение предложения ORDER BYПри использовании предложения ORDER BY убедитесь, что оно указано последним в операторе SELECT. Использование предложений в неправильном порядке ведет к появлению сообщений об ошибках. Сортировка по невыбранным столбцамЧаще всего столбцы, используемые в предложении ORDER BY, отображаются на экране. Но это не всегда бывает так, данные могут сортироваться и по столбцу, который не выбирается этим запросом. Сортировка по нескольким столбцамЧасто бывает необходимо отсортировать данные по нескольким столбцам. Например, если вы выводите список служащих, вам может понадобиться отсортировать его по имени и фамилии сотрудника (сначала по фамилии, а затем с каждой фамилией по имени). Это может быть полезным, если в компании есть несколько служащих с одинаковыми фамилиями. Чтобы осуществить сортировку по нескольким столбцам, просто укажите их имена через запятую (так, как вы делали при простом перечислении столбцов). В следующем коде выбираются три столбца, а результат сортируется по двум из них — сначала по цене, а потом по названию. SELECT prod_id, prod_price, prod_name FROM Products ORDER BY prod_price, prod_name; Вывод: prod_id prod_price prod_name ---------------------------------------- BNBG02 3.4900 Bird bean bag toy BNBG01 3.4900 Fish bean bag toy BNBG03 3.4900 Rabbit bean bag toy RGAN01 4.9900 Raggedy Ann BR01 5.9900 8 inch teddy bear BR02 8.9900 12 inch teddy bear RYL01 9.4900 King doll RYL02 9.4900 Queen doll BR03 11.9900 18 inch teddy bear Важно понимать, что при сортировке по нескольким столбцам порядок сортировки будет таким, который указан в запросе. Другими словами, в примере, приведенном выше, продукция сортируется по столбцу prod_name, только если существует несколько строк с одинаковыми значениями prod_price. Если никакие значения столбца prod_price не совпадают, данные по столбцу prod_name сортироваться не будут. Сортировка по положению столбцаПорядок сортировки можно указать не только по именам столбцов, но и по относительному положению столбца (проще говоря — по номеру столбца). Чтобы лучше понять это, рассмотрим пример: SELECT prod_id, prod_price, prod_name FROM Products ORDER BY 2, 3; Вывод: prod_id prod_price prod_name ------------------------------------ BNBG02 3.4900 Bird bean bag toy BNBG01 3.4900 Fish bean bag toy BNBG03 3.4900 Rabbit bean bag toy RGAN01 4.9900 Raggedy Ann BR01 5.9900 8 inch teddy bear BR02 8.9900 12 inch teddy bear RYL01 9.4900 King doll RYL02 9.4900 Queen doll BR03 11.9900 18 inch teddy bear Как видите, результат выполнения запроса идентичен предыдущему примеру. Разница только в предложении ORDER BY. Здесь мы не указывали имена столбцов, вместо этого было оговорено их относительное положение в указанном списке SELECT. Предложение ORDER BY 2 означает сортировку по второму столбцу списка SELECT, а именно по столбцу prod_price. Предложение ORDER BY 2, 3 означает сортировку по столбцу prod_price, а затем по столбцу prod_name. Основное преимущество данного метода заключается в том, что не нужно несколько раз набирать в запросе имена столбцов. Однако имеются и недостатки. Во-первых, неконкретное перечисление столбцов повышает вероятность того, что вы случайно укажете не тот столбец. Во-вторых, можно случайно сменить порядок данных при изменении списка SELECT (при этом забыв внести соответствующие изменения в предложение ORDER BY). И наконец, очевидно, нельзя использовать этот метод для сортировки по столбцам, не указанным в списке SELECT. Сортировка по невыбранным столбцамОчевидно, что этот метод нельзя использовать при сортировке по столбцам, не указанным в списке SELECT. Однако при необходимости можно в одном операторе указывать реальные имена столбцов и их относительные положения. Указание направления сортировкиСортировка данных не ограничена порядком по возрастанию (от А до Я). Несмотря на то что этот порядок является порядком по умолчанию, в предложении ORDER BY также можно использовать порядок по убыванию (от Я до А). Для этого необходимо указать ключевое слово DESC. В следующем примере продукция сортируется по цене в убывающем порядке (вначале идут самые дорогие товары). SELECT prod_id, prod_price, prod_name FROM Products ORDER BY prod_price DESC; Вывод: prod_id prod_price prod_name ---------------------------------------- BR03 11.9900 18 inch teddy bear RYL01 9.4900 King doll RYL02 9.4900 Queen doll BR02 8.9900 12 inch teddy bear BR01 5.9900 8 inch teddy bear RGAN01 4.9900 Raggedy Ann BNBG01 3.4900 Fish bean bag toy BNBG02 3.4900 Bird bean bag toy BNBG03 3.4900 Rabbit bean bag toy Но что, если производится сортировка по нескольким столбцам? В следующем примере продукция сортируется по цене в убывающем порядке (вначале самые дорогие), плюс по названию продукта: SELECT prod_id, prod_price, prod_name FROM Products ORDER BY prod_price DESC, prod_name; Вывод: prod_id prod_price prod_name ---------------------------------------- BR03 11.9900 18 inch teddy bear RYL01 9.4900 King doll RYL02 9.4900 Queen doll BR02 8.9900 12 inch teddy bear BR01 5.9900 8 inch teddy bear RGAN01 4.9900 Raggedy Ann BNBG02 3.4900 Bird bean bag toy BNBG01 3.4900 Fish bean bag toy BNBG03 3.4900 Rabbit bean bag toy Ключевое слово DESC применяется только к тому столбцу, после которого оно указано. В предыдущем примере ключевое слово DESC было указано для столбца prod_price, но не для prod_name. Таким образом, столбец prod_price отсортирован в порядке убывания, а столбец prod_name в обычном, возрастающем порядке. Сортировка по убыванию по нескольким столбцамЕсли вы хотите отсортировать данные в порядке убывания по нескольким столбцам, укажите для каждого из них ключевое слово DESC. Следует упомянуть, что DESC — это сокращение от DESCENDING, можно использовать оба ключевых слова. Противоположным словом для DESC является ASC (ASCENDING), которое можно указывать для сортировки по возрастанию. Однако на практике слово ASC обычно не применяется, поскольку такой порядок используется по умолчанию (он предполагается, если не указано ни ASC, ни DESC). Чувствительность к регистру и порядок сортировки
При сортировке текстовых данных А это то же самое, что и а? И а идет перед Б или после я? Это не теоретические вопросы, ответ на них зависит от настройки базы данных. РезюмеЭтот урок был посвящен сортировке выбранных данных при помощи предложения ORDER BY оператора SELECT. Это предложение, которое должно быть последним в операторе SELECT, можно использовать для сортировки данных по одному или нескольким столбцам. |
||