【发布时间】:2014-07-29 08:39:28
【问题描述】:
表格(来自http://www.tutorialspoint.com/sql/sql-using-joins.htm) 1)客户表:
+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 1 | Ramesh | 32 | Ahmedabad | 2000.00 |
| 2 | Khilan | 25 | Delhi | 1500.00 |
| 3 | kaushik | 23 | Kota | 2000.00 |
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 6 | Komal | 22 | MP | 4500.00 |
| 7 | Muffy | 24 | Indore | 10000.00 |
+----+----------+-----+-----------+----------+
2) 订单表:
+-----+---------------------+-------------+--------+
|OID | DATE | CUSTOMER_ID | AMOUNT |
+-----+---------------------+-------------+--------+
| 102 | 2009-10-08 00:00:00 | 3 | 3000 |
| 100 | 2009-10-08 00:00:00 | 3 | 1500 |
| 101 | 2009-11-20 00:00:00 | 2 | 1560 |
| 103 | 2008-05-20 00:00:00 | 4 | 2060 |
+-----+---------------------+-------------+--------+
内连接查询是:
SELECT ID, NAME, AGE, AMOUNT
FROM CUSTOMERS, ORDERS
WHERE CUSTOMERS.ID = ORDERS.CUSTOMER_ID;
显示的结果是:
+----+----------+-----+--------+
| ID | NAME | AGE | AMOUNT |
+----+----------+-----+--------+
| 3 | kaushik | 23 | 3000 |
| 3 | kaushik | 23 | 1500 |
| 2 | Khilan | 25 | 1560 |
| 4 | Chaitali | 25 | 2060 |
+----+----------+-----+--------+
我的问题:结果表是根据“ORDERS”表明确排序的,即结果表中 ID 列的排序是 3,3,2,4 acc。到 ORDERS 表。为什么 ID 的排序不根据 CUSTOMERS 表,即为什么结果不是
ID
2
3
3
4
和相应的值。有什么规则吗?
【问题讨论】:
-
除非您使用
ORDER BY子句,否则结果的顺序是任意且不可预测的。 -
@Barmar ..所以你是说结果也可能是 ID 3 2 3 4 ?
-
是的,它可以以任何顺序出现。
-
但是软件计算连接时没有特定的顺序吗?例如,将“客户”的第一行与“订单”的第一行匹配,然后将“客户”的第一行与“订单”的第二行匹配,依此类推.. @Barmar
-
每个 RDBMS 都有一个特定的顺序,但是是特定于实现的,并且可以随时更改(即随着软件的下一个版本或当您的数据库发生更改时)。你不能依赖它。