Галерея
7757 8119 8300 8698 8817 9504 9722 9937
Интересные записи
Топовые новости
Новое

Предложение ORDER BY cоветы и хитрости программирования

При использовании операторов для работы с наборами данных (UNION, ЕХСЕРТ, INTERSECT) предложение ORDER В Y может содержаться только в последнем запросе. Не следует использовать предложение ORDER BY в подзапросах любого типа.

Несколько функциональностей, поддерживаемых в SQL92, в стандарте SQL 2003 были удалены. Вы не должны использовать следующее. Ссылки на псевдонимы таблиц

Например, предложение ORDER BY e.emp_id следует заменить предложением ORDER BY empid. Если в имени столбца есть двусмысленность, используйте псевдоним. Ссылки на порядковое положение

Используйте явные псевдонимы столбцов.

Вы можете проводить сортировку не только по столбцам, но также по выражениям, использующим имена столбцов и даже константы.

SELECT
SUBSTRING(title, 1.55) AS title,
(price*1.15) as price
FROM titles
WHERE price BETWEEN 2 AND 19
ORDER BY price, title;

При сортировке по выражениям, взятым из списка инструкции SELECT, нужно использовать псевдонимы, чтобы упростить чтение ссылок в предложении ORDER BY выражение_для сортировки.


DB2

Платформа DB2 поддерживает синтаксис ANSI, за исключением опции COLLATE. Кроме того, в этой платформе также есть расширение ORDER OF.

ORDER BY {ORDER OF имя_таблицы | выражение_для_сортировки [{ASC | DESC}]}

Где:

ORDER OF имя_таблицы

Заставляет платформу DB2 сортировать строки родительской таблицы так, как они отсортированы в подзапросе. Чтобы лучше понять эту идею, вспомните, что DB2 поддерживает сортировку на уровне подзапроса. Тем не менее отсортированный подзапрос не будет возвращать отсортированный результирующий набор, если не используется предложение ORDER BY ORDER OF. Параметр имя_таблщы должен представлять собой имя таблицы, на которую ссылается родительский запрос. Пример:

SELECT
qty,
price,
order_nbr
FROM
(SELECT
order_nbr,
qty,
price
FROM sales_Ql_2005
UNION
SELECT
order_nbr,
qty,
price
FROM sales_Q2_2005
ORDER BY price, qty, order_nbr
) AS ytd_sales
ORDER BY ORDER OF ytd_sales;

Платформа DB2 по-прежнему поддерживает функции SQL92, такие, как сортировка по порядковому положению. По умолчанию DB2 считает значения NULL самыми большими.

Ниже приводится еще один пример подзапросов с сортировкой. Сначала мы создаем представление с именем best, которое возвращает пять самых продаваемых книг из таблицы sales, после чего мы находим авторов этих пяти самых продаваемых книг.

CREATE VIEW best(title) AS
SELECT
title
FROM sales
ORDER BY sold FETCH FIRST 5 ROWS ONLY;

SELECT
author
FROM best
JOIN authors ON best.title=author.title
ORDER BY ORDER OF best;

Платформа DB2 не поддерживает использование предложения ORDER BY для столбцов следующих типов данных: LONG VARCHAR, CLOB, LONG VARGRAPHIC, DBCLOB, BLOB и DATALINK. Также DB2 не поддерживает сортировку по структурным типам.


MySQL

Платформа MySQL поддерживает стандарт ANSI, за исключением предложения COLLATE.

Не следует пытаться использовать в предложении ORDER BY столбцы с типом BLOB, поскольку при такой сортировке используются только первые байты, количество которых определяется параметром max_sort_length. По умолчанию MySQL ставит пустые значения в самое начало при сортировке по возрастанию и в самый конец -при сортировке по убыванию.


Oracle

Платформа Oracle поддерживает стандарт ANSI, за исключением предложения COLLATE. Также поддерживаются предложения SIBLINGS и NULLS (FIRST LAST). Синтаксис предложения ORDER В К в Oracle следующий.

ORDER [SIBLINGS] BY

{выражение_для_сортировки [ASC | DESC] [NULLS {FIRST | LAST}]} [, …]

Специфичные для Oracle ключевые слова следующие.

ORDER [SIBLINGS] BY выражение_для_сортировки

Результирующий набор запроса сортируется в порядке, определяемом выражени-ем_для_сортировки. Выражение для сортировки может представлять собой имя столбца, псевдоним, целое число, указывающее порядковое положение столбца, или другое выражение (например, зарплата * 1.02). Предложение ORDER SIBLINGS BY заставляет Oracle сохранять сортировку, определяемую иерархическим запросом (CONNECT BY), а выражение_для_сортировки применять для сортировки равноправных членов иерархии.

NULLS (FIRST LAST}

Предложения NULLS FIRST и NULLS LAST показывают, что записи, содержащие значения NULL, должны при сортировке ставиться первыми или последними соответственно. По умолчанию Oracle ставит пустые значения последними при сортировке по возрастанию и первыми — при сортировке по убыванию.

Вы можете имитировать функциональность предложения COLLATE в одном сеансе, используя функцию NLSSORT с параметром NLSSORT. Вы можете имитировать функциональность предложения COLLATE для всех сеансов на сервере явным образом, используя инициализационный параметр NLSSORT, или неявно, используя инициализационный параметр NLSJLANGUAGE.

Платформа Oracle продолжает поддерживать выведенные из употребления функции SQL92, такие, как сортировка по порядковому местоположению. Не следует применять в предложении ORDER BY столбцы LOB, вложенные таблицы или столбцы VARRAY.


PostgreSQL

Платформа PostgreSQL поддерживает стандарт ANSI, за исключением предложения COLLATE. Также поддерживается расширение USING.

ORDER BY {выражение_для_сортировки1 [ASC | DESC | USING оператор]} [, …]

Где:

USING оператор

Указывается конкретный оператор сравнения. Так, вы можете проводить сортировку по операторам >, <, =, >=, <= и так далее. Сортировка по возрастанию аналогична USING <, а сортировка по убыванию аналогична USING >.

Платформа PostgreSQL при сортировке считает пустые значения (NULL) самыми большими. Следовательно, эти значения будут находиться в самом конце при сортировке по возрастанию и в самом начале — при сортировке по убыванию.


SQL Server

Платформа SQL Server поддерживает стандарт ANSI, включая и опцию COLLATE. Например, следующий запрос возвращает имена авторов из таблицы authors, и при этом используется сопоставление SQLLatin 1.

SELECT
au_fname
FROM authors
ORDER BY au_fname;

COLLATE SQL_Latio1_general_cp1_ci_as;

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

По умолчанию SQL Server считает пустые значения большими, чем все прочие.

Не следует использовать в параметре выражение_для_сортировки в SQL Server столбцы тина TEXT. IMAGE и NTEXT.

Источник