
以下のようなsqlを書いた場合、
(入れ子になった内側でorderbyを記述している)
6行目に書いたorderbyの動作(ソートキーの降順に並ぶこと)は
oracle,sql server等、各環境で保障されるのでしょうか?
以下の例ではうまく動作していたのですが(oracle)
入れ子が多くなった場合もうまくうごくのでしょうか?
--------------------
select a.* from
(
select a.ソートキー from テーブル a
union all
select a.ソートキー from テーブル b
order by ソートキー desc
) a
--------------------
自分は、order by は最後に書くものだと思っていたのですが、
たまたま上記のような入れ子になった内側でソートしているソースを見ることがあり
みなさんにお話をうかがいたく質問させていただきました。
よろしくお願いいたします。
No.3ベストアンサー
- 回答日時:
>oracle,sql server等、各環境で保障されるのでしょうか?
ORDER-BYを外側に書かない限り、RDBMSとしては出力順を保証する必要がありません。
RDBMSの処理上、結果的にORDER-BYを書いたときと同じ結果になります。
(ORCALEもSQLserverも、現行バージョンまでなら結果オーライ)
>入れ子が多くなった場合もうまくうごくのでしょうか?
基本的に問題ありません。
サブクエリの中で、order指定をするのは、データを加工する時に、加工する順番に意味がある場合で、
問い合わせ全体の出力順を決めるためではないのが一般的です。
例えば、
select x.*,rownum from (select * from target order by key) x;
と
select x.*,rownum from (select * from target) x order by key;
は、全く異なる結果になります。
8i以降、サブクエリ中でorder指定が可能になったのは、そういう目的です。
8i未満の場合、order指定が出来ないために、保証されない色んな方法でサブクエリ内での処理順を決める必要がありましたので。
ご回答ありがとうございます!
--
サブクエリの中で、order指定をするのは、データを加工する時に、加工する順番に意味がある場合で、
問い合わせ全体の出力順を決めるためではないのが一般的です。
--
そのとおりですね。。
丁寧にわかりやすいSQLまであげていただき
ありがとうございました。
No.2
- 回答日時:
Orcleに関して申しますと、
8iからは、インラインビューの中にOrder Byが記述できるようになっています。
ご回答ありがとうございます!
select * from (select * from 社員 where …)
をインラインビューと呼ぶことをはじめて知りました。。。
No.1
- 回答日時:
> 6行目に書いたorderbyの動作(ソートキーの降順に並ぶこと)は
> oracle,sql server等、各環境で保障されるのでしょうか?
少なくとも Oracle では保障されない (バージョンが変わったときに動作が変更される可能性がある、製品の不具合などで期待された結果にならなかったとしてもサポートからの回答として「保障されません」で交わされるなど) と思います。
とは言っても、実際にはそのようになるでしょうが。
> 以下の例ではうまく動作していたのですが(oracle)
> 入れ子が多くなった場合もうまくうごくのでしょうか?
恐らくうまく動くでしょう。
ただし、繰り返しになりますが、保障はされないと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PostgreSQL SQLで検索結果の記事を表示したい 1 2022/04/28 21:03
- MySQL PhpMyAdminで作成して実行せよ。 東京23区を、皇居を中心とした4つのエリア(南東, 南西, 1 2023/06/11 11:58
- MySQL SQL任意に並び替えをしたい 2 2023/08/28 10:47
- MySQL SQLです。下記の問合せを行うクエリを、PhpMyAdminで作成して実行せよ。 「昨年の各月の総降 1 2023/07/01 00:32
- MySQL SQLです。こんな感じですか?あってますか? うまくいきません教えてくださいお願いします 1 2023/07/08 15:27
- Oracle SQLについて教えて下さい。 主キーを持ったカラムを主キーの機能を持たせたまま カンマ区切りで文字列 1 2023/03/27 22:47
- MySQL うまくいきません教えてくださいお願いしますSQLです。クエリ構文です。 1 2023/07/07 12:39
- PHP PHP MySql ページング 2 2022/09/20 06:38
- MySQL 下記の問合せを行うクエリを、PhpMyAdminで作成して実行せよ。 「名前(first name) 1 2023/06/24 13:03
- Access(アクセス) アクセス 有効なフィールド名、または式として認識できませんのエラー 3 2022/08/19 11:53
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
漢字表示の電話機
-
select *, `人口(男)`AND`人口(...
-
SQLのエディッションの確認方法...
-
order by区の記述位置
-
SQLServerのストアドで戻り値取...
-
SQLで特定の項目の重複のみを排...
-
フィルターかけた後、重複を除...
-
差し込み後、元データを変更し...
-
カーソル0件の時にエラーを発生...
-
エクセルで最後の文字だけ置き...
-
外部参照してるキーを主キーに...
-
INSERT文でフィールドの1つだ...
-
SELECT 文 GROUP での1件目を...
-
for whichの使い方
-
エクセルの関数について教えて...
-
UPDATE文のWHERE条件に他のテー...
-
SQLServerで文字列の末尾からあ...
-
列番号による項目の取得について
-
SQLで列名を変数にできないでし...
-
1日に1人がこなせるプログラム...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SQL 複数のテーブルから重複な...
-
Oracle:グループごとに最大日...
-
order by区の記述位置
-
SQLServerのストアドで戻り値取...
-
set lineで不要な改行が出力さ...
-
1つのカラムに複数レコードの...
-
同一テーブル内のデータを比較...
-
MAX値を条件にしたSQLで困って...
-
パラメータによってDistinctを...
-
アクセス SQLで重複排除でcount...
-
SQL文 テーブル1つに複数のデータ
-
group by句について
-
select実行時のロックとcommit...
-
select *, `人口(男)`AND`人口(...
-
SQLで小数点のついたべき乗を計...
-
差し込み後、元データを変更し...
-
フィルターかけた後、重複を除...
-
エクセルで最後の文字だけ置き...
-
エクセルの関数について教えて...
-
SQLで特定の項目の重複のみを排...
おすすめ情報