Saya menggunakan aplikasi (MapServer - http://mapserver.org/ ) yang membungkus pernyataan SQL, sehingga pernyataan ORDER BY berada dalam permintaan dalam. Misalnya
SELECT * FROM (
SELECT ID, GEOM, Name
FROM t
ORDER BY Name
) as tbl
Aplikasi ini memiliki banyak driver basis data yang berbeda. Saya terutama menggunakan driver MS SQL Server, dan SQL Server 2008. Ini melempar kesalahan jika ORDER BY ditemukan dalam subquery.
Dari MS Documents (meskipun ini untuk SQL Server 2000 sepertinya masih berlaku):
Saat Anda menggunakan klausa ORDER BY dalam tampilan, fungsi inline, tabel turunan, atau subquery, itu tidak menjamin output yang dipesan. Sebagai gantinya, klausa ORDER BY hanya digunakan untuk menjamin bahwa set hasil yang dihasilkan oleh operator Top memiliki susunan yang konsisten. Klausa ORDER BY hanya menjamin hasil yang dipesan ditetapkan ketika ditentukan dalam pernyataan SELECT terluar.
Namun jenis kueri yang sama ketika dijalankan di Postgres (9) dan Oracle mengembalikan hasil - dengan urutan seperti yang didefinisikan dalam subquery. Dalam Postgres, rencana kueri menunjukkan hasilnya diurutkan dan catatan rilis Postgres menyertakan item yang menyiratkan pesanan subquery digunakan:
Hindari pengurutan saat subquery ORDER BY cocok dengan kueri atas
http://en.wikipedia.org/wiki/Order_by menyatakan:
Meskipun beberapa sistem basis data mengizinkan spesifikasi klausa ORDER BY dalam subselect atau melihat definisi, keberadaannya tidak berpengaruh.
Namun dari pengecekan saya sendiri dari rencana permintaan:
- SQL Server 2008 tidak mendukung ORDER OLEH dalam subquery
- Postgres 9 mendukung ORDER BY dalam subquery
- Oracle 10g mendukung ORDER BY dalam subquery
Jadi pertanyaan saya apakah ada tautan yang secara resmi dapat mengkonfirmasi atau menyangkal bahwa Postgres dan Oracle tidak mengizinkan pengurutan dalam subquery?
ORDER BY
subquery sebagai berlebihan dan tidak melakukan penyortiran yang tidak perlu.