SQL基础篇(进阶八)-分页查询

#进阶八: 分页查询 ※
/*
应用场景:当要显示的数据,一页显示不全,需要分页提交sql请求

语法:

select 查询列表
	from 表
	【join typejoin2
	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: 查询钱五条的员工信息

SELECT *
FROM `employees`
LIMIT 0,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;

P96
#一、查询所有学员的邮箱的用户名 (注:邮箱中@前面的字符)

SELECT SUBSTR( email,1,INSTR(email,'@'-1)) 用户名
FROM stuinfo;

#二、查询一下男生和女生的个数

SELECT COUNT(*)
FROM stuinfo 
GROUP BY sex;

#三、查询年龄>18的所有学生的姓名和年级名称

SELECT NAME, gradeName
FROM stuinfo AS s
LEFT JOIN grade AS g
ON s.gradeId = g.id
WHERE s.age>18;

#查询哪个年级的学生最小年龄>20岁

SELECT MIN(age) 最小年龄,gradeID
FROM stuinfo 
GROUP BY gradeID
HAVING 最小年龄>20;

#试说出查询语句中设计到所有的关键词,以及执行先后顺序

SELECT 查询列表		7	
FROM 表 		1 
连接类型 JOIN 表2	2
ON 连接条件		3
WHERE 筛选条件		4
GROUP BY 分组列表	5
HAVING 分组后的筛选	6
ORDER BY 排序列表	8
LIMIT 偏移,条目数 	9

#1.查询工资最低的员工信息:last_name,salary

SELECT MIN(salary)
FROM `employees`
SELECT `last_name`,`salary`
FROM `employees`
WHERE salary =(
	SELECT MIN(salary)
	FROM `employees`

);

#2.查询平均工资最低的部门信息

SELECT AVG(salary) AS 平均值,`department_id`
FROM `employees`
GROUP BY `department_id`
SELECT MIN(平均值)
FROM (
	SELECT AVG(salary) AS 平均值,`department_id`
	FROM `employees`
	GROUP BY `department_id`) AS ag_e;
SELECT *
FROM `departments` d
WHERE d.`department_id` =(
SELECT `department_id`
FROM `employees`
GROUP BY `department_id`
HAVING AVG(salary) =(
		SELECT MIN(平均值)
	FROM (
		SELECT AVG(salary) AS 平均值,`department_id`
		FROM `employees`
		GROUP BY `department_id`) AS ag_e)
)

#简单:方式二:

SELECT AVG(salary),`department_id`
FROM `employees`
GROUP BY `department_id`
ORDER BY AVG(salary)
LIMIT 1;
SELECT *
FROM `departments`
WHERE `department_id`=(
	SELECT `department_id`
	FROM `employees`
	GROUP BY `department_id`
	ORDER BY AVG(salary)
	LIMIT 1

);

#3.查询平均工资最低的部门信息和该部门的平均工资

SELECT d.*, ag
FROM `departments` d
INNER JOIN (
	SELECT AVG(salary) ag,`department_id`
	FROM `employees`
	GROUP BY `department_id`
	ORDER BY AVG(salary)
	LIMIT 1
) AS ag_dep
ON d.`department_id`=ag_dep.`department_id`

#4.查询平均工资最高的job信息

SELECT AVG(salary) ag,`job_id`
FROM `employees`
GROUP BY job_id
ORDER BY AVG(salary) DESC
LIMIT 1;
SELECT *
FROM `jobs`
WHERE `job_id`=(
	SELECT `job_id`
	FROM `employees`
	GROUP BY job_id
	ORDER BY AVG(salary) DESC
	LIMIT 1
	)

#5.查询平均工资高于公司平均工资的部门有哪些?

SELECT AVG(`salary`)
FROM `employees`

SELECT `department_id`,AVG(`salary`)
FROM `employees`
GROUP BY `department_id`

SELECT `department_id`
FROM (
	SELECT `department_id`,AVG(`salary`) ag
	FROM `employees`
	GROUP BY `department_id`) AS ag_dep
WHERE ag_dep.ag> (
	
SELECT AVG(`salary`)
FROM `employees`
)

#老师:

SELECT `department_id`,AVG(`salary`)
FROM `employees`
GROUP BY `department_id`
HAVING AVG(`salary`)>(

	SELECT AVG(`salary`)
	FROM `employees`

)

#6.查询出公司中所有manager的详细信息

SELECT DISTINCT `manager_id`
FROM `employees`

SELECT *
FROM (
	SELECT DISTINCT`manager_id`
	FROM `employees`) AS m
LEFT JOIN `employees` AS e
ON m.`manager_id`=e.`employee_id`

#老师:

SELECT * 
FROM `employees`
WHERE `employee_id`= ANY(
	SELECT DISTINCT `manager_id`
	FROM `employees`
)

#7.各个部门中 最高工资中最低的那个部门的 最低工资是多少
#各个部门的最高工资

SELECT MAX(`salary`),`department_id`
FROM `employees`
GROUP BY `department_id`

#各个部门中 最高工资中最低的那个部门

SELECT MAX(`salary`),`department_id`
FROM `employees`
GROUP BY `department_id`
ORDER BY MAX(`salary`) 
LIMIT 1

#这个部门的最低工资是

SELECT MIN(`salary`),`department_id`
FROM `employees`
WHERE `department_id`=(
	SELECT`department_id`
	FROM `employees`
	GROUP BY `department_id`
	ORDER BY MAX(`salary`) 
	LIMIT 1
)
GROUP BY `department_id`

#8.查询平均工资最高的部门的manager 的详细信息:last_namedepartment_id,email,salary
#平均工资最高的部门

SELECT MAX(`salary`),`department_id`
FROM `employees`
GROUP BY `department_id`
ORDER BY MAX(`salary`) DESC
LIMIT 1

SELECT DISTINCT manager_id
FROM `employees`
WHERE `department_id`=(
	SELECT `department_id`
	FROM `employees`
	GROUP BY `department_id`
	ORDER BY MAX(`salary`) DESC
	LIMIT 1
)
SELECT `last_name`,`department_id`,`email`,`salary`
FROM `employees`
WHERE `employee_id`= ANY(
	SELECT DISTINCT manager_id
	FROM `employees`
	WHERE `department_id`=(
		SELECT `department_id`
		FROM `employees`
		GROUP BY `department_id`
		ORDER BY MAX(`salary`) DESC
		LIMIT 1)
)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值