1.兩結構相同的表數據間移植
Inset into 表一
Select 字段1,字段2,....字段n from表二
建立數據庫時設置數據庫編碼
create database 數據庫名 charset uft8
模糊查詢時
%(任意字符任意個數)
_(單個字符)
2.聚合函數使用時必須有group by給定分組條件
比如有一個表
求平均成績是用聚合函數avg()時必須制定此函數作用的范圍依據
3.分組,排序,再次篩選,取幾條執行順序
Where>group by >having>order by >limit
4.如上表要求查詢2門及2門以上同學的平均分
方法一:分步查詢
先查出2門及2門以上不及格學生是誰
然后再查這些同學的平均分,需要2個select語句
select name from stu where score<60 group by name having count(name)>=2
便得到表
name |
張三 |
李四 |
注意sql的執行順序
先執行select name from stu where score<60
會得到表2:
name |
張三 |
張三 |
李四 |
李四 |
王五 |
之后再分組和再篩選
但要注意雖然group by在having前,但group by是作為having的篩選分組條件的
然后在表2中having篩選即得
第二步:
找到這些學生后,在把學生名最為查詢條件再次篩選,因為第一步篩選掉了及格的了的成績,結果破壞了數據的原始性,所以還得進行一次篩選
select name,avg(score) from stu where name in (select name from stu where
score<60 group by name having count(name)>=2) group by name;
方法二:利用select后可以直接是判斷式及本題特點
分析:首先運行sql查詢
select name ,score<60 from stu;
得到下表3:
name | Score<60 |
張三 | 0 |
張三 | 1 |
張三 | 1 |
李四 | 1 |
李四 | 1 |
王五 | 1 |
在select后的字段或條件mysql會依次與表中的數據對比,如score<60會拿60逐一與表中的score值比較
比如字段name沒有要比較的值就顯示它在表中的值
從表三發現:sum(score<60)的值就是不及格科目數
于是
select name ,avg(score),sum(score<60) as gk from stu group by name having
gk>=2;
聚合函數的執行時同時進行
得到結果表:
顯然方法二比一更簡潔高效
未完待續....!
bitsCN.com聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com