两个联接的结果集排序

时间:2017-03-09 20:59:37

标签: mysql database join

我正在学习数据库,因此有一个非常简单的3个表格的数据库,TeacherStudentCourse

目标:获取教师姓名和课程名称,他正在教学(但是我已经在我的查询中添加*来检查实际发生的事情)

我的查询:

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 了解这一点的任何方向都非常有用

2 个答案:

答案 0 :(得分:1)

在大多数RDBMS中,除非使用Order By子句,否则无法保证结果集的顺序。

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

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

答案 1 :(得分:0)

只需在查询末尾添加ORDER BY子句:

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