2017-03-09 156 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