亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

SQL-vsvswhere

SQL-vsvswhere

有只小跳蛙 2019-06-24 15:51:21
SQL-vsvswhere我有以下兩張表:1. Lecturers (LectID, Fname, Lname, degree).2. Lecturers_Specialization (LectID, Expertise).我想找一個專業程度最高的講師。當我嘗試這個時,它是不起作用的:SELECT   L.LectID,    Fname,    Lname  FROM Lecturers L,       Lecturers_Specialization SWHERE L.LectID = S.LectIDAND COUNT(S.Expertise) >= ALL (SELECT   COUNT(Expertise)FROM Lecturers_SpecializationGROUP BY LectID);但當我嘗試這個時,它起作用了:SELECT   L.LectID,   Fname,   Lname  FROM Lecturers L,      Lecturers_Specialization SWHERE L.LectID = S.LectIDGROUP BY L.LectID,          Fname,          Lname  HAVING COUNT(S.Expertise) >= ALL (SELECT   COUNT(Expertise)FROM Lecturers_SpecializationGROUP BY LectID);原因是什么?謝謝。
查看完整描述

3 回答

?
ITMISS

TA貢獻1871條經驗 獲得超8個贊

WHERE從句引入一個條件個別行HAVING從句引入一個條件集合體,即選擇的結果,其中產生了單個結果,如計數、平均值、最小值、最大值或和。倍數一排排。因此,查詢會調用第二種條件(即聚合的條件)。HAVING工作正常。

作為經驗法則,使用WHERE以前GROUP BYHAVINGGROUP BY..這是一個相當原始的規則,但在90%以上的情況下是有用的。

在進行此操作時,您可能希望使用連接的ANSI版本重寫查詢:

SELECT  L.LectID, Fname, LnameFROM Lecturers LJOIN Lecturers_Specialization S ON L.LectID=S.LectIDGROUP BY L.LectID, Fname, 
LnameHAVING COUNT(S.Expertise)>=ALL(SELECT COUNT(Expertise) FROM Lecturers_Specialization GROUP BY LectID)

這樣可以消除WHERE被用作Theta加入條件.


查看完整回答
反對 回復 2019-06-24
?
浮云間

TA貢獻1829條經驗 獲得超4個贊

HAVING運行在集合上。自COUNT是聚合函數,不能在WHERE條款。

這是一些從MSDN中讀取聚合函數的文章。


查看完整回答
反對 回復 2019-06-24
?
慕慕森

TA貢獻1856條經驗 獲得超17個贊

首先,我們應該知道條款的執行順序。從>WHERE>GROUP按>有>DISTIVE>SELECT>OR哪里子句在執行之前按組子句不能通過應用程序過濾記錄。哪里轉到按組應用記錄。

“WHERE子句與WHERE子句相同,但適用于分組記錄”。

第一哪里子句根據條件獲取記錄,然后按組子句對它們進行相應的分組,然后子句根據已有條件獲取組記錄。


查看完整回答
反對 回復 2019-06-24
  • 3 回答
  • 0 關注
  • 601 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號