博客
关于我
Linux下学【MySQL】中如何实现:多表查询(配sql+实操图+案例巩固 通俗易懂版~)
阅读量:792 次
发布时间:2023-02-02

本文共 2366 字,大约阅读时间需要 7 分钟。

MySQL复合查询与多表技巧

绪论

本章将深入探讨MySQL中的复合查询与多表查询,特别是通过子查询和笛卡尔积的方式,轻松应对实际工作中的复杂数据问题。

复合查询

单表查询回顾

在实际开发中,单表查询显然远远不够。需要通过复合查询来处理多表数据。

查询工资高于500或岗位为MANAGER的雇员

select * from emp where sal > 500 or job = 'MANAGER'

姓名首字母为J的雇员

select ename from emp where substring(ename,1,1) = 'J'

按部门和工资排序

select * from emp order by deptno asc, sal desc

年薪计算与排序

确保年薪计算无异常:

select sal * 12 + ifnull(comm, 0) as annual_salary from emp

最终排序:

select * from emp order by annual_salary desc

获取工资最高的员工信息

select max(sal) from emp
select ename, job from emp where sal = (select max(sal) from emp)

平均工资与高于平均工资的雇员

平均工资计算:

select avg(sal) from emp

筛选工资高于平均工资的雇员:

select * from emp where sal > (select avg(sal) from emp)

每部门的平均与最高工资

通过group by实现:

select deptno, max(sal), avg(sal) from emp group by deptno

更详细显示:

select deptno, max(sal), avg(sal) from emp group by deptno having deptno != 10

平均工资低于2000的部门编号

select deptno, avg(sal) from emp group by deptno having avg(sal) < 2000

每岗位的雇员总数及平均工资

select job, count(empno), avg(sal) from emp group by job

多表查询

显示部门10的详细信息

select ename, sal, dname from emp, dept where emp.deptno = dept.deptno and dept.deptno = 10

各部门员工总数及平均工资

select dname, count(empno), round(avg(sal), 2) from dept, emp where dept.deptno = emp.deptno group by dname

员工信息加上薪酬级别

创建中间表salgrade并处理:

select ename, sal, dname, job from emp, dept where emp.deptno = dept.deptno

自连接与嵌套查询

显示FORD的上级领导信息:

select mgr from emp where ename = 'FORD'select ename, empno from emp where ename = (select mgr from emp where ename = 'FORD')

子查询应用

单行子查询

显示Smith同一部门的雇员:

select * from emp where deptno = (select deptno from emp where ename = 'Smith')

多行子查询

查询与10号部门岗位相同的雇员:

select ename, job, sal, deptno from emp where deptno != 10 and job in (select distinct job from emp where deptno = 10)

子查询与from子句结合

显示每个部门高于平均工资的雇员:

select deptno, ename, sal, avg_sal from emp, (select deptno, avg(sal) as avg_sal from emp group by deptno) tmp where emp.deptno = tmp.deptno and emp.slab > tmp.avg_sal

any与all子查询

显示工资高于部门30的任意雇员:

select * from emp where sal > (select max(sal) from emp where deptno = 30)

多列子查询

查询岗位完全相同的雇员:

select ename, deptno, job from emp where ename in (select ename from emp where job = 'developer')

合并查询

union操作

显示工资大于2500或职位为MANAGER的雇员:

select ename, job from emp where sal > 2500 or job = 'MANAGER' union allselect ename, job from emp where sal > 2500 or job = 'MANAGER'

union all操作

注意结果列完整性,适用于可重复的数据:

转载地址:http://jdzfk.baihongyu.com/

你可能感兴趣的文章
Linux 运维王者从不离手的10款工具,全用过会变成高手?
查看>>
Linux 运行SHELL报错“-BASH: ./TEST.SH: /BIN/BASH^M: BAD INTERPRETER: NO SUCH FILE OR DIRECTORY”
查看>>
Linux 这4个进程相关的命令,太好用!
查看>>
Linux 进程和系统监测
查看>>
Linux 进程管理及监控与性能评估
查看>>
Linux 进程管理详解
查看>>
Linux 进程间通信 --- 信号通信 --- signal --- signal(SIGINT, my_func); --- 按键驱动异步通知...
查看>>
linux 通过inode删除文件
查看>>
Linux 通过SSH跳板机实现端口转发
查看>>
Linux 通过压缩包安装 MySQL 并设置远程连接教程
查看>>
Linux 通过监控系统内存并定时重启指定服务
查看>>
Linux 部署ASP.NET SQLite 应用 的坎坷之旅 附demo及源码
查看>>
linux 配置 skywalking
查看>>
linux 配置 vsftpd 匿名用户可增加、修改、删除文件
查看>>
Linux 重置root密码和修改用户密码
查看>>
Linux 问题故障定位的技巧大全
查看>>
linux 防火墙操作
查看>>
Linux&Debian系统安装nginx
查看>>
Linux(Centos)上使用crontab实现定时任务(定时执行脚本)
查看>>
Linux(Centos)远程传输文件到另一台电脑机器上---指令(scp)
查看>>