某个班级学生信息表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、子查询