单表查询与多表查询

第一章 单表查询

第01节 分组查询
1、语法格式

基础语法

-- 简化写法
SELECT 分组字段,聚合函数 FROM 表名称 GROUP BY 分组字段;

-- 完整写法
SELECT 分组字段,聚合函数 FROM 表名称 WHERE 分组前条件 GROUP BY 分组字段 HAVING 分组后条件;

理解:分组的效果

1、分组之后,查询的结果只能是两个内容:要么是 分组的字段,要么是聚合函数

2、分组的效果,相当于是 字段当中,对相同的内容,进行去重合并单元格的效果。

2、案例代码
-- 需求:查看学生来自于哪些学院。可以根据学院进行分组
SELECT stu_college FROM student GROUP BY stu_college;

-- 注意:在分组之后,查询的结果必须是分组字段,或者聚合函数
-- 如果查询其他的操作是没有意义的。
SELECT * FROM student GROUP BY stu_college;  -- 错误写法

-- 需求:获取到男生当中的最大年龄和女生当中的最大年龄。
SELECT stu_sex,MAX(stu_age) FROM student GROUP BY stu_sex;

-- 需求:获取到大数据当中,男生当中的最大年龄和女生当中的最大年龄。
SELECT stu_sex,MAX(stu_age) FROM student WHERE stu_major = '大数据' GROUP BY stu_sex;

-- 需求:分别获取到计科当中,男生和女生的人数,要求每组人数不能超过2个人。
-- WHERE  表示分组之前的条件筛选, 后面不能跟聚合函数
-- HAVING 表示分组之后的条件筛选, 后面可以跟上聚合函数
SELECT stu_sex,COUNT(*) FROM student WHERE stu_major = '计科'  GROUP BY stu_sex HAVING COUNT(*)<=2;
3、注意事项

WHERE 和 HAVING 的区别?

1. 条件的区别:
	WHERE 表示的分组前的条件
	HAVING 表示分组后的条件

2. 聚合函数区别:
	WHERE 后面不可以跟上聚合函数
	HAVING 后面可以跟上聚合函数
第02节 分页查询
1、语法格式

基础语法

SELECT * FROM 表名称 LIMIT 跳过前面几条记录,展示几条记录;

公式

如果我们每页显示 N 条数据,想要显示 M 页。
计算公式如下: 
	左边的数据是 (M-1)*N
	右边的数据是 N
	
语法格式:
	SELECT * FROM 表名称 LIMIT (M-1)*N , N;
2、案例代码
-- 分页查询操作
-- 注意细节: 分页查询他是采用的 LIMIT 属于MySQL的方言,只有MySQL才有
-- 另外了解一下,在Oracle当中的分页是 ROWNUM 关键字
-- 在LIMIT后面跟上的两个整数表示的含义是什么?
-- 1. 左边的整数:跳过前面几条记录
-- 2. 右边的整数:显示几条记录
SELECT * FROM student LIMIT 2,3;

-- 后期,这里的两个整数可能会有意义的变化。
-- 第几页? 每页展示几条记录?
-- 每页展示3条数据, 想要展示第2页
-- 例如: 页数是 M, 每页条件是 N
SELECT * FROM student LIMIT (M-1)*N,N;
SELECT * FROM student LIMIT (4-1)*3,3;
SELECT * FROM student LIMIT 9,3;
第03节 单表小结
1、语法格式

书写格式

SELECT
	....查询的结果,我们需要什么字段,就在这里写什么.....
FROM
	....数据库当中,数据表的名称....
WHERE
	....查询的条件,分组前的筛选....
GROUP BY
	....表里面的字段名,根据字段分组....
HAVING
	....查询的条件,分组后的筛选....
ORDER BY
	....字段名称和排序规则....
LIMIT
	....分页....
2、解析格式

当我们拿到一个题目之后,如何编写SQL查询语句的问题。

1. 从哪些表当中去查找,我们想要的字段信息。 FROM 后面的语句
2. 查询的条件是什么呢? WHERE 语句
3. 是否需要分组呢?  如果需要则思考 GROUP BY 语句。 分组之后会不会有筛选,这里就要思考 HAVING 子句
4. 查询的结果和查询字段? 也就是需要写 SELECT 后的语句
-----------------------------
5. 是否需要排序呢?  如果有排序,则采用 ORDER BY
6. 是否需要分页操作? 如果有分页,采用 LIMIT 第几页,每页几条记录?

第二章 多表查询

第01节 基础理论
1、基础说明
在以后大家工作的过程当中,数据库操作不可能是单表的操作,必然是多表处理的操作,单表也会使用到。
当然后期,可以将多表转换成为单表操作之后,再去使用。

如果是多张表一起,如何进行查询操作呢?
常见的几种查询操作:
	(1) 笛卡尔积查询(不推荐使用)
	(2) 内连接查询
	(3) 外连接查询
	(4) 自关联查询
	(5) 子查询
2、数据准备
-- 创建数据库,如果不存在则创建
CREATE DATABASE IF NOT EXISTS mydb05 CHARACTER SET utf8;

-- 使用数据库
USE mydb05;

-- 部门表
DROP TABLE IF EXISTS dept;
CREATE TABLE IF NOT EXISTS  dept (
   id INT PRIMARY KEY PRIMARY KEY, -- 部门id
   dname VARC
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值