MYSQL学习笔记(四)查询数据

本文详细介绍了SQL查询的基础知识,包括单表查询、聚合函数查询、连接查询及子查询等内容,并通过具体实例展示了如何运用这些查询技巧来高效地获取所需数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

某个班级学生信息表t_grade结构和数据如下:

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.查询所有字段

select * from 表名;

2.查询特定字段

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

3.where条件查询

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.空值查询

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 初始位置,记录数;

二、使用聚合函数查询

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

三、连接查询

连接查询是将两个或两个以上的表按照某个条件连接起来,从中选取需要的数据;

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)

四、子查询

转载于:https://my.oschina.net/u/2321708/blog/742423

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值