我正在学习数据库,因此有一个非常简单的3个表格的数据库,Teacher
,Student
,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
然而,当我应用完整查询时,结果集排序对我来说是不可理解的(如下图所示),它是如何从左侧获取行并将其与连接表进行比较;
答案 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