多表查询,子查询
按雇员的id号升序取出,每页显示3条记录,请分别显示第一页,第二页,第三页
基本语法:select ....limit start ,rows 表示从start+1开始取,取出rows行,start从0开始计算
公式:select *from 表名 order by 列名 limit 每页显示记录数 *(第几页-1),每页显示记录数
请统计各部门group by 的平均工资AVG,并且是大于1000的having ,并且按照平均工资从高到低排序
-- 取出前两行记录;
SELECT AVG(salary),dept_number FROM emp
GROUP BY dept_number
HAVING AVG(salary)>1000
ORDER BY AVG(salary) DESC
LIMIT 0,2
mysql 表查询(数据分组总结)
select语句同时查询包含group by ,having,order by,limit 它们的顺序是group by,having,order by,limit
select column1,column2,column3....... from 表名
group by column(分组)
having condition (条件过滤)
order by column(排序)
limit start,rows;(分页显示)
多表查询的过滤条件不能少于表的个数-1,否则胡出现笛卡尔集
显示各个员工的姓名,工资及其工资的级别
-- select *from emp;
-- select *from sal_grade;
-- 三、 多表查询
SELECT DISTINCT enname,salary ,grade
FROM emp,sal_grade
WHERE salary BETWEEN lowsal AND heisal;
子查询
(一)单行子查询(嵌套查询)
- 如何显示与tom同一部门的所有员工
解析:1.先查询出tom的信息 2.再根据上面查询的结果当做子查询使用
-- 先查询表的结构
SELECT DISTINCT * FROM emp;
-- 从表中查询Tom的相关信息
SELECT DISTINCT dept_number
FROM emp
WHERE enname='tom';
(二)多行子查询(多行子查询指返回多行数据的子查询,使用关键字IN)
查询和部门2的工作相同的雇员的名字、岗位、工资、部门号,但是不含2号部门自己的员工?
/*分析:1.先查询2号部门有哪些工作
2.把上面的查询结果作为子查询使用
*/
SELECT DISTINCT *
FROM emp
WHERE dept_number=2;
SELECT enname,job,salary,dept_number
FROM emp
WHERE job IN(
SELECT DISTINCT job
FROM emp
WHERE dept_number=2
) AND dept_number !=2
想多了都是问题,做多了才是答案
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!