2017-03-09 160 views
0

我学习数据库,因此有3个表,TeacherStudent的一个非常简单的数据库,Course结果集排序加入

目标:与课程名称相处的老师的名字,他是教(但是我已经把*在我​​的查询,以检查什么实际发生的情况)

我的查询:

select * from Teacher t left join Teacher_Course tc 
on t.Id =tc.Teacher_Id left join Course c on tc.Course_Code =c.Course_Code ; 

我的问题是我用单连接查询的结果,其排列非常简单,如下图所示;

select * from Teacher t left join Teacher_Course tc 
    on t.Id =tc.Teacher_Id 

Single Join Query

但是当我申请了完整的查询结果集的排序是不理解我,因为它是如何从左边取行,并与参加表格比较(如下图所示);

Full query 任何方向来理解,这是非常有帮助的

+0

删除了sql server标签,因为这显然是mysql。 –

+0

如果您希望以特定顺序获得结果,则必须在查询中添加一个订单。 –

+0

@SeanLange因此,如果不使用Order by子句,我们无法预测结果集? – SSH

回答

0

只需BY子句添加一个ORDER到您的查询的末尾:

SELECT * 
FROM Teacher t 
LEFT JOIN Teacher_Course tc on t.Id=tc.TeacherId 
LEFT JOIN Course c on tc.Course_Code=c.Course_Code 
ORDER BY t.Id, tc.Course_Code_Id 
+0

多数民众赞成多好,谢谢,bt我需要问是否存在任何逻辑,如果没有关键字顺序 – SSH

+0

没有ORDER BY子句,数据库将返回结果集没有保证顺序。当查询中存在多个JOINS时,数据库引擎以最有效的方式将这些表连接在一起,以供其内部使用。 “ – BWS

1

在大多数RDBMS,结果集的顺序是不保证,除非你使用Order By子句。

如果没有Order By子句,结果通常会按访问完成查询的最后一个索引的顺序返回。该顺序可能会因查询更改或数据更改而发生变化。

您必须使用ORDER BY子句来保证结果。因此,您知道,SQL Server在与TOP 100 PERCENT一起使用时通常会忽略Order by子句。

+0

”通常按最后一个索引的顺序返回来完成查询“.....不清楚......你能详细说明一点吗 – SSH