Mysql之DQL複雜查詢(連線查詢):
阿新 • • 發佈:2018-12-16
1、內連線查詢:inner join 表名2 別名2 on 別名2.有關係欄位名=別名1.有關係欄位名 有條件就用where 例子1:把參加考試的同學資訊查出來 select s.StudentName,r.StudentResult from student s inner join result r on r.StudentNo=s.StudentNo; 例子2:查詢參加考試的同學資訊(學號、姓名、科目、分數),注意一般先找到中間表 SELECT s.StudentNo,s.StudentName,sb.SubjectName,r.StudentResult FROM student s INNER JOIN result r ON r.StudentNo=s.StudentNo INNER JOIN `subject` sb ON r.SubjectNo=sb.SubjectNo; 解讀:匹配原則,左表的每一行資料 與右表的每一行資料進行匹配,只要ON後面條件滿足就把資料拿出來。 2、左外連線查詢:left join 右表名 右別名 on 右別名.有關係欄位名=左別名.有關係欄位名 有條件加where 例子1:將所有同學全部查出來,不考試的也查出來 select s.StudentName,r.StudentResult from student s left join result r on r.StudentNo=s.StudentNo; 例子2:單獨把缺考的學生查出來,就是在最後面加一個條件 where StudentResult is null; 解讀:以左表為基準,右表的資料與左邊一一匹配,匹配上直接顯示,匹配不上的,左表有資料的欄位名依然顯示,右表的資料設定為null。 3、右外連線查詢:道理一樣,自己思考。 4、等值查詢: select s.StudentNo,s.StudentName,r.StudentNo,r.StudentResult from student s,result r where s.StudentNo=r.StudentNo; 解讀:與上面內連線效果一樣的。 5、子查詢:一個完整的查詢巢狀另一個完整的查詢。 例子:查詢課程為《高等數學-2》 且分數不小於80分的學生學號和姓名,注意思路是寫三個select語句,想辦法分級巢狀 select s.StudentNo,s.StudentName FROM student s WHERE s.StudentNo IN( SELECT r.StudentNo FROM result r WHERE r.SubjectNo IN ( SELECT sb.SubjectNo FROM `subject` sb WHERE sb.SubjectName="高等數學-2" ) AND r.studentResult>=80);