MYSQL學習筆記(四)查詢數據

某個班級學生信息表t_grade結構和數據以下:sql

id stuName course score
--- ----- ------ -----
1 張三 語文 91
2 王五 數學 90
3 張三 英語 87
4 李四 語文 79
5 馬六 數學 95
6 李四 英語 80
7 張三 語文 77
8 王五 數學 81
9 王五 英語 89
10 馬六 數學 60
11 馬六 物理 54

1、單表查詢編程

1.查詢全部字段函數

select * from 表名;

2.查詢特定字段spa

select 字段1,字段2,字段3... from 表名;

3.where條件查詢code

select * from 表名 where 條件表達式;

4.帶in關鍵字查詢排序

select * from 表名 where 字段 [not] in (元素 1,元素 2,元素 3);

5 .帶between and關鍵字查詢字符串

select * from 表名 where 字段 [not] between 取值 1 AND 取值 2;

6.帶like的模糊查詢數學

select * from 表名 where 字段 [not] like ‘字符串’;
「%」表明任意字符;
「_」 表明單個字符;

7.空值查詢it

select * from 表名 where 字段 is [not] null;

8.帶 and的多條件查詢入門

select * from 表名 where 條件表達式 1 and條件表達式 2 [...and 條件表達式 n];

9.帶or的多條件查詢

select * from 表名 where 條件表達式 1 or條件表達式 2 [...or 條件表達式 n]

10.distinct 去重複查詢

select distinct 字段名 FROM 表名;

11.對查詢結果排序

select * from 表名 order by 屬性名 [asc|desc];

12.group by 分組查詢

group by 屬性名 [having 條件表達式][with rollup];
1,單獨使用(毫無心義);
2,與 group_concat()函數一塊兒使用;
3,與聚合函數一塊兒使用;
4,與having一塊兒使用(限制輸出的結果);
5,與with rollup一塊兒使用(最後加入一個總和行);

實例1:

SELECT id,stuName,GROUP_CONCAT(course) FROM t_grade GROUP BY stuName;
#GROUP_CONCAT()函數;上面sql語句做用:
#以stuName分組,把stuName相同的記錄的course值打印在一塊兒
#執行結果
id stuName GROUP_CONCAT(course)
------ ------- ----------------------
6 李四 英語,語文
10 馬六 數學,物理,數學
8 王五 數學,英語,數學
3 張三 英語,語文,語文

實例2:

#對查詢結果進行篩選
SELECT id,stuName,GROUP_CONCAT(course) FROM t_grade GROUP BY stuName HAVING id>5;
#HAVING;上面sql語句做用:
#對SELECT id,stuName,GROUP_CONCAT(course) FROM t_grade GROUP BY stuName查詢結果篩選出id>5的記錄
#執行結果
id stuName GROUP_CONCAT(course)
------ ------- ----------------------
6 李四 英語,語文
10 馬六 數學,物理,數學
8 王五 數學,英語,數學

實例3:

#對查詢結果中使用函數做爲字段的列進行求和或疊加
SELECT id,stuName,GROUP_CONCAT(course) FROM t_grade GROUP BY stuName WITH ROLLUP;
#執行結果
id stuName GROUP_CONCAT(course)
-- ----- --------------------------------------------------
6 李四 英語,語文
10 馬六 數學,物理,數學
8 王五 數學,英語,數學
3 張三 英語,語文,語文
3 (NULL) 英語,語文,數學,物理,數學,數學,英語,數學,英語,語文,語文

13.limit 分頁查詢

select * from 表名 limit 初始位置,記錄數;

2、使用聚合函數查詢

1.count()函數

1,count()函數用來統計記錄的條數;
2,與 group by 關鍵字一塊兒使用;

實例:

SELECT id,stuName,GROUP_CONCAT(course),COUNT(course) FROM t_grade GROUP BY stuName;
#執行結果
id stuName GROUP_CONCAT(course) COUNT(course)
--- ------- -------------------- -------------
6 李四 英語,語文 2
10 馬六 數學,物理,數學 3
8 王五 數學,英語,數學 3
3 張三 英語,語文,語文 3

2.sum()函數

1,sum()函數是求和函數;
2,與 group by關鍵字一塊兒使用;

實例:

SELECT stuName,GROUP_CONCAT(course),GROUP_CONCAT(score),SUM(score) FROM t_grade GROUP BY stuName;
#執行結果
stuName GROUP_CONCAT(course) GROUP_CONCAT(score) SUM(score)
------- ------------------- ------------------ ----------
李四 英語,語文 80,79 159
馬六 數學,物理,數學 60,54,95 209
王五 數學,英語,數學 81,89,90 260
張三 英語,語文,語文 87,77,91 255

3.avg()函數

1,avg()函數是求平均值的函數;
2,與 group by關鍵字一塊兒使用;

實例:

SELECT stuName,GROUP_CONCAT(course),GROUP_CONCAT(score),AVG(score) FROM t_grade GROUP BY stuName;
#執行結果
stuName GROUP_CONCAT(course) GROUP_CONCAT(score) AVG(score)
------- ------------------- ------------------ ----------
李四 英語,語文 80,79 79.5000
馬六 數學,物理,數學 60,54,95 69.6667
王五 數學,英語,數學 81,89,90 86.6667
張三 英語,語文,語文 87,77,91 85.0000

4.max()函數

1,max()函數是求最大值的函數;
2,與  group by關鍵字一塊兒使用;

實例1:

SELECT stuName,GROUP_CONCAT(score),MAX(score) FROM t_grade GROUP BY stuName;
#執行結果
stuName GROUP_CONCAT(score) MAX(score)
------ ------------------ ------------
李四 80,79 80
馬六 60,54,95 95
王五 81,89,90 90
張三 87,77,91 91

實例2:

SELECT stuName,MAX(score) FROM t_grade WHERE stuName="張三";
#執行結果
stuName MAX(score)
------- ----------
張三 91

5.min()函數

1,min()函數是求最小值的函數;
2,與 group by關鍵字一塊兒使用;

實例1:

SELECT stuName,GROUP_CONCAT(score),MIN(score) FROM t_grade GROUP BY stuName;
#執行結果
stuName GROUP_CONCAT(score) MIN(score)
------ ------------------ ------------
李四 80,79 79
馬六 60,54,95 54
王五 81,89,90 81
張三 87,77,91 77

實例2:

SELECT stuName,MIN(score) FROM t_grade WHERE stuName="張三";
#執行結果
stuName MIN(score)
------- ----------
張三 77

3、鏈接查詢

鏈接查詢是將兩個或兩個以上的表按照某個條件鏈接起來,從中選取須要的數據;

t_book表

id bookName price author bookTypeId
-- -------------- ------ --------- ------------
1 Java編程思想 100.00 埃史爾 1
2 Java從入門到精通 80.00 李鍾尉 1
3 三劍客 70.00 大仲馬 2
4 生理學(第二版) 24.00 劉先國 4

t_booktype表

id bookTypeName
-- --------------
1 計算機類
2 文學類
3 教育類

1.內鏈接查詢

內鏈接查詢是一種最經常使用的鏈接查詢。內鏈接查詢能夠查詢兩個或者兩個以上的表;(但有時會有某個表沒法顯示所有內容)

實例1:

SELECT * FROM t_book,t_booktype
#執行結果
id bookName price author bookTypeId id bookTypeName
-- -------------- ----- ------ ---------- -- ------------
1 Java編程思想 100.00 埃史爾 1 1 計算機類
1 Java編程思想 100.00 埃史爾 1 2 文學類
1 Java編程思想 100.00 埃史爾 1 3 教育類
2 Java從入門到精通 80.00 李鍾尉 1 1 計算機類
2 Java從入門到精通 80.00 李鍾尉 1 2 文學類
2 Java從入門到精通 80.00 李鍾尉 1 3 教育類
3 三劍客 70.00 大仲馬 2 1 計算機類
3 三劍客 70.00 大仲馬 2 2 文學類
3 三劍客 70.00 大仲馬 2 3 教育類
4 生理學(第二版) 24.00 劉先國 4 1 計算機類
4 生理學(第二版) 24.00 劉先國 4 2 文學類
4 生理學(第二版) 24.00 劉先國 4 3 教育類

實例2:

SELECT * FROM t_book,t_booktype WHERE t_book.bookTypeId = t_booktype.id
#執行結果
id bookName price author bookTypeId id bookTypeName
-- -------------- ------ ------- ---------- -- ------------
1 Java編程思想 100.00 埃史爾 1 1 計算機類
2 Java從入門到精通 80.00 李鍾尉 1 1 計算機類
3 三劍客 70.00 大仲馬 2 2 文學類

2.外鏈接查詢(左/右鏈接)

外鏈接能夠查出某一張表的全部信息;
SELECT 屬性名列表 FROM 表名 1 LEFT|RIGHT JOIN 表名 2 ON 表名 1.屬性名 1=表名 2.屬性名 2;
//LEFT 第一張表顯示所有內容,沒有對應值的字段用null表示
//RIGHT 第二張表顯示所有內容,沒有對應值的字段用null表示

實例1:

SELECT * FROM t_book LEFT JOIN t_bookType ON t_book.bookTypeId=t_bookType.id
#執行結果
id bookName price author bookTypeId id bookTypeName
-- ---------------- ------ ------- ---------- --- -----------
1 Java編程思想 100.00 埃史爾 1 1 計算機類
2 Java從入門到精通 80.00 李鍾尉 1 1 計算機類
3 三劍客 70.00 大仲馬 2 2 文學類
4 生理學(第二版) 24.00 劉先國 4 (NULL) (NULL)

4、子查詢

相關文章
相關標籤/搜索