MySQL高級之鏈接

1、問題

問:查詢每一個學生每一個科目的分數ui

分析:學生姓名來源於students表,科目名稱來源於subjects,分數來源於scores表,怎麼將3個表放到一塊兒查詢,並將結果顯示在同一個結果集中呢?spa

答:當查詢結果來源於多張表時,須要使用鏈接查詢code

關鍵:找到表間的關係,當前的關係是blog

  • students表的id---scores表的stuid
  • subjects表的id---scores表的subid

則上面問題的答案是:it

select students.sname,subjects.stitle,scores.score
from scores
inner join students on scores.stuid=students.id
inner join subjects on scores.subid=subjects.id;

結論:當須要對有關係的多張表進行查詢時,須要使用鏈接joinclass

2、鏈接查詢

鏈接查詢分類以下:select

  • 表A inner join 表B:表A與表B匹配的行會出如今結果中
  • 表A left join 表B:表A與表B匹配的行會出如今結果中,外加表A中獨有的數據,未對應的數據使用null填充
  • 表A right join 表B:表A與表B匹配的行會出如今結果中,外加表B中獨有的數據,未對應的數據使用null填充

在查詢或條件中推薦使用「表名.列名」的語法語法

若是多個表中列名不重複能夠省略「表名.」部分數據

若是表的名稱太長,能夠在表名後面使用' as 簡寫名'或' 簡寫名',爲表起個臨時的簡寫名稱查詢

3、練習

3.1 查詢學生的姓名、平均分 

select students.sname,avg(scores.score)
from scores
inner join students on scores.stuid=students.id
group by students.sname;

3.2 查詢男生的姓名、總分 

select students.sname,avg(scores.score)
from scores
inner join students on scores.stuid=students.id
where students.gender=1
group by students.sname; 

3.3 查詢科目的名稱、平均分

select subjects.stitle,avg(scores.score) from scores inner join subjects on scores.subid=subjects.id group by subjects.stitle;

3.4 查詢未刪除科目的名稱、最高分、平均分

select subjects.stitle,avg(scores.score),max(scores.score)
from scores
inner join subjects on scores.subid=subjects.id
where subjects.isdelete=0
group by subjects.stitle;
相關文章
相關標籤/搜索