MySQL第二章-相關查詢、分組、排序、模糊、分頁、連接、函數

知識點一

查詢關鍵字:select

查詢語法結構:select  列名from表名where條件  group by(分組)     order by(排序)

聚合函數

Count(*) 統計記錄條數  sum(studentresult)統計某一列累加總和,要求列中的數據是數值類型

Max()求最大值,min()求最小值  avg() 求平均值

聚合函數的特點,針對數據進行統計,返回一個結果值。

總分

最高

最低

平均

441

90

50

73.5

 

排序

排序方式有升序(asc)和降序(desc),默認情況下是升序。

/*查詢所有學員信息按年級升序,再按生日降序*/

select * from student order by gid,birthday desc;

多條件排序原理是在按第一個條件排序後的基礎上,再按第二個條件來排序。

分組

分組就是結合聚合函數來對數據進行分組統計. 關鍵字:group by

根據分組的列把數據進行分組,然後再分別進行統計。

/*統計男女學員各有多少*/

select sex,count(*)  from student group by sex

/*統計每個年級各有多少學員*/

SELECT gid,count(*) from student group by gid;

/*統計每門科目的考試平均分*/

select subjectno,avg(studentresult) from result group by subjectno;

 

Having:在分組之後的結果中再一次進行數據的篩選。此關鍵字必須要結合分組來使用。

/*查詢哪些學員在科目一參加了補考*/

select studentno, count(*) from result where subjectno  = 1

group by studentno having count(*)>1

 

模糊查詢

模糊查詢就是指查詢條件不確定的情況。

/*模糊查詢

 %: 0-N任意字符

 _: 一個任意字符

 []:區間指定內的一個字符

*/

/*查詢姓張的學員  like */

select * from student where name like '張_'

 

/*查詢考試成績在 70 - 90 之間的數據  between */

select * from result where studentResult>=70 and studentResult<=90;

select * from result where studentResult between 70 and 90;

/*查詢沒有郵箱的學員信息 is null 查詢列值爲 null 的數據*/

select * from student where email is null;

 

/*查詢廣州和深圳的學員信息  in */

select * from student where address in ('廣州','深圳')

分頁

只按要求顯示部分行數據.

/*實現分頁需要的數據有哪一些: 總記錄數、每頁大小、總頁數 */

/*分頁 第一個數表示: 跳過多少條,第二個數表示:提取多少條*/

select * from student limit 0,3

連接查詢

連接查詢:內連接,外連接(左連接,右連接),交叉連接

/*兩種方式都是內連接:特點,兩個表的前後順序調換結果沒有影響

建議用inner join ... on ...方式,性能好一些

*/

select s.studentno,name,examDate,studentResult from  student s

inner join result r on s.studentNo = r.studentNo;

 

select s.studentno,name,examDate,studentResult

from result r,student s where s.studentNo = r.studentNo

學號

姓名

科目名稱

考試時間

成績

 

 

 

 

 

 

外連接:左外連接

左外連接:左邊的表是主表,右邊的表是子表,主表的數據全部顯示,子表的數據來填充,如果子表中沒有相關的數據填充,則顯示NULL。

select * from student s left join result r

on s.studentNo = r.studentNo

 

/*查詢沒有參加考試的學員信息*/

select * from student  s left join result r

on s.studentNo = r.studentNo where r.studentNo is null

子查詢

/*只有一個條件:'一年級' 要求查詢所有一年級的學員信息

分析:取一年級的編號,再把編號作爲查詢條件在學員表中進行查詢

子查詢,括號裏面的查詢會先執行,取得一個結果作爲外面查詢的條件。

子查詢語句可以出現在查詢語句的任意地方。*/

select * from student where gid =

(select id from grade where gradename = '一年級');

 

select * from student s join grade g

on g.id= s.gid where g.gradeName = '一年級'

注意:表連接能實現的功能,子查詢都能實現,但子查詢實現的功能,表連接不一定能實現。

      當查詢結果只是作爲查詢條件時,選擇用子查詢,

      當查詢結果數據來自於多張表,選擇用表連接。

      子查詢使用 =、>=、< 、<= 、!=  要保證子查詢的返回結果只有一個值,

      如果有多個值返回,則用只能用 in

 

/*查詢參加考試的學員信息  */

select * from student where studentno not in

(select studentno from result where subjectno = 1)

函數

字符串函數、數學函數、日期函數、聚合函數、系統函數

 

 

日期函數

 

總結

 

作業

/*把密碼把所有的 o 變成 0 把所有的 l 變成 1 一句SQL實現*/

update card set password = replace( replace(password,'o','0') ,'l','1')

 

1. 查詢20歲以下的學員信息

2. 查詢Java課程的考試成績

3. 查詢女學員信息,包括(學號、姓名、年齡、性別)

4. 查詢課時超過60的科目信息

 

5. 查詢班級中姓張的單名的學員信息

6. 查詢考試成績在70-80之間的數據

7. 查詢廣州、北京的學員信息

8. 查詢沒有郵箱地址的學員信息     is null       =’’。

 

9. 查詢Java考試後前3名的考試成績。

10. 分頁查詢第3頁的 學員信息 每頁3條。

11. /*查詢本月生日的學員信息*/。

12. 查詢本週的開卡信息。

13. 統計班級學員的平均年齡。

統計所有科目的總課時數。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章