MySQL、Oracle、PostgreSQL -> 使用可能
SQL Server -> 使用不可。ただしTOP句がある場合を除く
(8.0.31)
https://dev.mysql.com/doc/refman/8.0/en/create-view.html
ORDER BY is permitted in a view definition, but it is ignored if you select from a view using a statement that has its own ORDER BY.
ビュー内でorder byは使用可能
drop table tab1;
create table tab1(col1 int);
insert into tab1 select floor(rand() * 100)+1;
insert into tab1 select floor(rand() * 100)+1;
insert into tab1 select floor(rand() * 100)+1;
insert into tab1 select floor(rand() * 100)+1;
insert into tab1 select floor(rand() * 100)+1;
select * from tab1;
drop view view1;
create view view1 as select * from tab1 order by col1;
select * from view1;
drop view view1;
create view view1 as select * from tab1 order by col1 desc;
select * from view1;
drop view view1;
create view view1 as select * from tab1;
select * from view1;
(19c)
drop table tab1 purge;
create table tab1(col1 int);
insert into tab1 select floor(dbms_random.value(1, 101) ) from dual;
insert into tab1 select floor(dbms_random.value(1, 101) ) from dual;
insert into tab1 select floor(dbms_random.value(1, 101) ) from dual;
insert into tab1 select floor(dbms_random.value(1, 101) ) from dual;
insert into tab1 select floor(dbms_random.value(1, 101) ) from dual;
select * from tab1;
commit;
drop view view1;
create view view1 as select * from tab1 order by col1;
select * from view1;
drop view view1;
create view view1 as select * from tab1 order by col1 desc;
select * from view1;
drop view view1;
create view view1 as select * from tab1;
select * from view1;
ビュー内でorder byを指定すると定義どおりに表示される。
マニュアルにORDER BY句使用可否については特に記載はない模様であるが、
「更新可能なビューであるためには、ORDER BYが含まれていない必要がある」記載
があることから、通常のビューであれば、ORDER BYは使用可能とおもわれる
(15)
drop table tab1;
create table tab1(col1 int);
insert into tab1 select floor(random() * 100)+1;
insert into tab1 select floor(random() * 100)+1;
insert into tab1 select floor(random() * 100)+1;
insert into tab1 select floor(random() * 100)+1;
insert into tab1 select floor(random() * 100)+1;
select * from tab1;
drop view view1;
create view view1 as select * from tab1 order by col1;
select * from view1;
drop view view1;
create view view1 as select * from tab1 order by col1 desc;
select * from view1;
drop view view1;
create view view1 as select * from tab1;
select * from view1;
ビュー内でorder byを指定すると定義どおりに表示される。
マニュアルにORDER BY句使用可否については特に記載はない
(2019)
ビュー定義の SELECT 句に、次を含めることはできません。
ORDER BY 句。ただし、SELECT ステートメントの選択リストに TOP 句が同時に含まれている場合は例外です。
drop table tab1;
create table tab1(col1 int);
insert into tab1 select floor(rand() * 100)+1;
insert into tab1 select floor(rand() * 100)+1;
insert into tab1 select floor(rand() * 100)+1;
insert into tab1 select floor(rand() * 100)+1;
insert into tab1 select floor(rand() * 100)+1;
select * from tab1;
drop view view1;
create view view1 as select * from tab1 order by col1;
→
メッセージ 1033、レベル 15、状態 1、プロシージャ view1、行 1 [バッチ開始行 1]
TOP、OFFSET、または FOR XML が指定されていない場合、ビュー、インライン関数、派生テーブル、サブクエリ、および共通テーブル式では ORDER BY 句は無効です。
drop view view1;
create view view1 as select top(1) * from tab1 order by col1;
select * from view1;