ORDER BY deyimi iç sorguda olacak şekilde SQL deyimlerini saran bir uygulama (MapServer - http://mapserver.org/ ) kullanıyorum. Örneğin
SELECT * FROM (
SELECT ID, GEOM, Name
FROM t
ORDER BY Name
) as tbl
Uygulama birçok farklı veritabanı sürücüsüne sahiptir. Ben esas olarak MS SQL Server sürücüsü ve SQL Server 2008 kullanıyorum. Bir alt sorgu bir ORDER BY bulunursa, bir hata atar.
MS Docs (bu SQL Server 2000 için olmasına rağmen hala geçerli gibi görünüyor):
Bir görünüm, bir satır içi işlevi, türetilmiş bir tablo veya bir alt sorgu ORDER BY yan tümcesi kullandığınızda, sıralı çıktı garanti etmez. Bunun yerine, ORDER BY deyimi yalnızca Üst işleç tarafından oluşturulan sonuç kümesinin tutarlı bir yapıya sahip olduğunu garanti etmek için kullanılır. ORDER BY deyimi, sıralı bir sonuç kümesini yalnızca en dıştaki SELECT deyiminde belirtildiğinde garanti eder.
Ancak Postgres (9) ve Oracle'da çalıştırıldığında aynı sorgu türü, alt sorguda tanımlandığı sıra ile sonuç döndürür. Postgres'de sorgu planı sonuçların sıralandığını ve Postgres sürüm notlarının alt sorgu siparişlerinin kullanıldığını ima eden öğeyi içerdiğini gösterir:
ORDER BY alt sorgusu üst sorguyla eşleştiğinde sıralama yapmaktan kaçının
http://en.wikipedia.org/wiki/Order_by belirtiyor:
Bazı veritabanı sistemleri alt seçimlerde veya görünüm tanımlarında ORDER BY deyiminin belirlenmesine izin verse de, varlığın etkisi yoktur.
Ancak kendi sorgu planları kontrol:
- SQL Server 2008, bir alt sorguda ORDER BY'ı desteklemiyor
- Postgres 9 bir alt sorguda ORDER BY'ı destekliyor
- Oracle 10g bir alt sorguda ORDER BY'ı destekler
Benim sorum, Postgres ve Oracle'ın bir alt sorguda sıralamaya izin vermediğini resmi olarak onaylayabilecek veya reddedebilecek bağlantılar var mı?
ORDER BY
, alt sorguda gereksiz olarak tanımlanır ve gereksiz sıralama yapmaz.