小菜菜mysql練習解讀分析1——查詢" 01 "課程比" 02 "課程成績高的學生的資訊及課程分數
查詢" 01 "課程比" 02 "課程成績高的學生的資訊及課程分數
好的,第一道題,剛開始做,就栽了個跟頭,爽歪歪,至於怎麼栽跟頭的
——需要分析題目,查詢的是,查詢的是(1)學生的資訊(2)滿足條件的學生的'課程分數'(不在學生表裡)需要從另外一張表得來(3)條件是-" 01 "課程比" 02 "課程成績高(成績表就滿足)
因此就是,需要獲得學生的資訊,那裡滿足該學生的01課程比02課程高!!!需要展示該學生的資訊,及其01與02的分數~~~開始來
1、找出有01成績的同學成績資訊
SELECT * from sc WHERE sc.CId='01'
查出結果如下:
2、找出有02成績的同學成績資訊
SELECT * from sc WHERE sc.CId='02'
3、以上兩種結果需要滿足一定條件(1)SId要一致【同一人】(2)且01.score>02.score
然後咱們胡亂一操刀:
SELECT* FROM (SELECT * from sc WHERE sc.CId='01')as a,(SELECT * from sc WHERE sc.CId='02')as b
完美,接下來嫁接條件——行過濾——where
然後又一操刀
SELECT* FROM (SELECT * from sc WHERE sc.CId='01')as a,(SELECT * from sc WHERE sc.CId='02')as b WHERE a.SId=b.SId AND a.score>b.score
4、普天同慶,好像又離開心有丟丟遠,接下來要幹嘛,我也忘了~
5、看著拿到了SId,score,score1,當然是存下來,為了後面做準備,搞事
SELECT a.SId,a.score class1,b.score class2 FROM (SELECT * from sc WHERE sc.CId='01')as a,(SELECT * from sc WHERE sc.CId='02')as b WHERE a.SId=b.SId AND a.score>b.score
6、開心。然後咱們假裝這是一個新表結果,又給命名,為r,和student一查,查出滿足
SELECT * from student RIGHT JOIN
(SELECT a.SId,a.score class1,b.score class2 FROM (SELECT * from sc WHERE sc.CId='01')as a,(SELECT * from sc WHERE sc.CId='02')as b WHERE a.SId=b.SId AND a.score>b.score)r
ON student.SId=r.SId
大概的就查出來了,(⊙o⊙)…菜寶寶加油
【等等,這裡彷彿用到了join on,還是right join on,那它跟left join,outer join,inner join ……各種方向的join 有什麼區別,分別應用有撒不同呢,小菜菜下節試著分析解讀一下】