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、子查询

相关文章
相关标签/搜索