1

SQL クエリで返される列の順序を決定するものは何か疑問に思っています。

例えば、SELECT * FROM SOMETABLE;

SQ_ID   |BUS_TYPE   |VOIP     |LOCAL_PHONE
--------|-----------|---------|-------------
SQ000001|Business   |Y        |N

属性がこれを決定すると推測していますCOLUMN_ID。たとえば、テーブル結合の場合SELECT * FROM SOMETABLE LEFT JOIN OTHERTABLE USING (SOME_COL);、順序はどのように決定されますか。

4

2 に答える 2

2

の列の順序は、USER_TAB_COLUMNS に示されているように、各列SELECT * FROM some_tableによって決まります。column_id

の列の順序はSELECT * FROM some_table JOIN other_table、FROM 句の後の一番左のテーブルから始まる各テーブルのすべての列です。つまり、これは...

SELECT * FROM some_table JOIN other_table

... これと同等 ...

SELECT some_table.*, other_table.* FROM some_table JOIN other_table

その内部結合を LEFT JOIN または RIGHT JOIN に変更しても、射影は変更されません。


もちろん、これは理論上の話です。select *本番コードでは決して使用しないでください。結合時にテーブル エイリアスを使用した明示的な列宣言は、常により安全です。意図のより良い表現とは別に、明示的なプロジェクションは、結合されたテーブルの列であいまいさを作成する LOB 列または列名の追加など、テーブルへの将来の変更からコードを保護します。

于 2013-02-19T09:35:52.823 に答える
1

Selectステートメントで列の順序をリストできます。

SELECT SOME_COL, SOME_OTHER_COL
FROM SOMETABLE LEFT JOIN OTHERTABLE USING (SOME_COL)

しかし、あなたはまた、注文に影響を与えるIDと一般的な注文について話します。したがって、行を並べ替えるためにORDERBYを探すこともできると思います。

SELECT *
FROM SOMETABLE LEFT JOIN OTHERTABLE USING (SOME_COL)
ORDER BY SOME_COL

この場合にも非常に便利なのは、エイリアスの使用です。特に、両方のテーブルに同じ名前の列がある場合:

SELECT s.some_col, o.some_col
FROM SOMETABLE s LEFT JOIN OTHERTABLE o ON(o.id = s.id)
ORDER BY o.SOME_COL

この場合、ON JOIN構文を使用します。これは、エイリアスを使用するときにこれがより直感的であることがわかったためですが、USINGでも機能するはずです。

于 2013-02-19T09:03:45.377 に答える