数据库-进阶8-分页查询

本文深入探讨了SQL中的分页查询,包括基本的LIMIT语法和应用场景。通过实例展示了如何查询特定范围的记录,以及如何结合WHERE、ORDER BY和HAVING子句进行复杂查询。同时,讲解了SQL99的内连接、外连接和交叉连接的语法及特点,帮助读者理解多表查询的不同方式。
摘要由CSDN通过智能技术生成

进阶8-分页查询

#进阶8 分页查询  ⭐(重要)
/*
	应用场景:当要显示的数据,一页显示不全,需要分页提交sql请求
	语法:
		select 查询列表
		from 表1
		【join type join 表2
		on 连接条件
		where 筛选条件
		group by 分组字段
		having 分组后的筛选
		order by 排序的字段】
		limit 【offset,】size;
		offset:要显示的起始索引(起始索引从 0 开始)
		size:要显示的条目个数
	特点:
		① limit 语句放在查询语句的最后
		② 公式 
			要显示的也是 page,每页的条目数 size
			select * 查询列表
			from 表
			limit (page-1)*size,size;
			
			size = 10
			page
			1	0
			2	10
			3	20
			
*/
#案例1:查询前5条员工信息
	SELECT * FROM employees LIMIT 0,5;
	SELECT * FROM employees LIMIT 5;
#案例2:查询第11条记录到第25条记录
	SELECT * FROM employees LIMIT 10,15;
#案例3:有奖金的员工信息,并且工资较高的前10名显示出来
	SELECT *
	FROM employees
	WHERE commission_pct IS NOT NULL
	ORDER BY salary DESC
	LIMIT 10;

# 已知表 stuinfo  id 学号,name 姓名,email 邮箱 john@126.com,gradeId 年级编号,sex 性别:男 女,age 年龄
# 已知表 grade  id 年级编号,gradeName 年级名称
#例题1:查询 所有学员的邮箱的用户名(注:邮箱 @ 前面的字符)
	SELECT SUBSTR(email,i,INSTR(email,'@')-1) 用户名
	FROM stuinfo;
#例题2:查询男生和女生的个数
	SELECT COUNT(*) 个数,sex
	FROM stuinfo
	GROUP BY sex;
#例题3:查询年龄 > 18 岁的所有学生的姓名和年纪名称
	SELECT NAME,gradeName
	FROM stuinfo s
	INNER JOIN grade g 
	ON g.id = s.gradeId
	WHERE age > 18;
#例题4:查询那个年级的最小年龄 > 20 岁
	# ① 每个年级的最小年龄
		SELECT MIN(age),gradeId
		FROM stuinfo
		GROUP BY gradeId
	# ② 在①的结果上筛选
		SELECT MIN(age),gradeId
		FROM stuinfo
		GROUP BY gradeId
		HAVING MIN(age) > 20;	
#例题5:试说出查询语句中涉及到的所有的关键字,以及执行先后顺序
	SELECT 查询列表		⑦
	FROM 表1		①
	连接类型 JOIN 表2	②
	ON 连接条件		③
	WHERE 筛选条件		④
	GROUP BY 分组列表	⑤
	HAVING 分组后的筛选	⑥
	ORDER BY 排序列表	⑧
	LIMIT 偏移,条目数;	⑨

#四、sql99语法
	#1.内连接
		#语法:
			SELECT 查询列表
			FROM 表1 别名
			【inner】 JOIN 表2 别名 ON 连接条件
			WHERE 筛选条件
			GROUP BY 分组列表
			HAVING 分组后的筛选
			ORDER BY 排序列表
			LIMIT 子句;
		#特点:
			# ① 表的顺序可以调换
			# ② 内连接的结果=多表的交集
			# ③ n 表连接至少需要 n-1 个连接条件
		#分类:
			等值连接
			非等值连接
			自连接
	#2.外连接
		#语法:
			SELECT 查询列表
			FROM 表1 别名
			LEFT|RIGHT|full【outer】 JOIN 表2 别名 ON 连接条件
			WHERE 筛选条件
			GROUP BY 分组列表
			HAVING 分组后的筛选
			ORDER BY 排序列表
			LIMIT 子句;
		#特点:
			# ① 查询的结果 = 主表中所有的行,如果从表和它匹配的将显示匹配行,如果从表没有匹配的则显示null
			# ② left join 左边的就是主表,right join 右边的就是主表,full join 两边都是主表
			# ③ 一般用于查询除了交集部分的剩余的不匹配的行
	#3.交叉连接		
		#语法:
			SELECT 查询列表
			FROM 表1 别名
			CROSS JOIN 表2 别名;
		#特点:类似于笛卡尔乘积	
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值