--問題:
--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條數據。