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