某個班級學生信息表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、子查詢