SQL查询中返回的列顺序(带表连接)

时间:2013-02-19 09:00:30

标签: oracle

我想知道是什么决定了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);现在如何确定订单。

2 个答案:

答案 0 :(得分:2)

SELECT * FROM some_table中列的顺序由每列的column_id确定,如USER_TAB_COLUMNS中所示。

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列或列名,这会使连接表的列产生歧义。

答案 1 :(得分:1)

您可以在Select语句中列出列的顺序:

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

但是你也谈到影响订单和订购的ID。所以我认为你也可以寻找ORDER BY来订购行:

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

在这种情况下,使用别名也非常方便。特别是当两个表都具有相同名称的coloums时:

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。