50個查詢系列-第一個查詢


--問題:
--1、查詢“001”課程比“002”課程成績高的所有學生的學號;

第一步明確主表和次表。

我們要查詢的是學生的學號,那么主表就是學生表(tblstudent)

但是我們要根據學生的成績來篩選結果,所以我們的成績表就是次表。

SELECT tblstudent.StuId

-- tblstudent是主表,我們從主表里面查詢我們的學生學號。from tblstudent表示我們查出來的就是表里面的數據數量
 from tblstudent
 WHEre
-- tblscore是次表,我們用來篩選數據
 (SELECT TC.Score FROM tblscore TC WHERE TC.CourseId='001'and tblstudent.StuId=tc.StuId) 
>

(SELECT tb.Score FROM tblscore Tb WHERE Tb.CourseId='002' and tblstudent.StuId=Tb.StuId) /* 我們來看一下 (SELECT TC.Score FROM tblscore TC WHERE TC.CourseId='001'and tblstudent.StuId=tc.StuId) 這條語句為什么這么寫的? 首先我們去tblscore里面去查成績,根據 TC.CourseId='001' 把所有的這門課的所有的學生的成績查出來的成績,查詢結果是 有多少個學生,就會有多少個結果,那肯定不行啊,我要一個一個學生比較的,那怎么辦,用tblstudent.StuId=tc.StuId來做一個限制 前面不是有很多個學生么,那么我這么一來,就做了一個限制,就只剩下一個學生了,也就是一個學生成績了 */

上面的where里面就是依次遍歷的時候用成績去做判斷。

 

 上面的方法就是子查詢。

 

我們衍生開去,寫別的sql語句看看。

比如:

 select * FROM tblscore ,tblstudent   where tblscore.StuId='1001' and tblscore.CourseId='001'

結果是:

22條語句。我們來分析:

FROM tblscore(55條) ,tblstudent(22)就這句話,我們產生的笛卡爾乘機就是tblscore的數據條數乘以tblstudetn的數據條數就是55*22=1210.

我們來看tblscore.StuId='1001'那就是說我們的學生條數只有四條了(1001這個學只有四門課的成績)+tblscore.CourseId='001':這么一來的話就只有一條數據了。因為學生表沒有受到任何的限制,所以還是22條,然后這個條數(1條)乘以學生表的數據,那就是22條數據。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM