博客
关于我
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下cp命令的使用说明
查看>>
Linux下C程序内存、内存对齐问题 (实战)
查看>>
Linux下C语言编程--时间概念
查看>>
linux下debug与release编译的方法
查看>>
linux下echo命令详解(转)
查看>>
linux下Emacs编译手记
查看>>
linux下FTP安装与配置
查看>>
linux下IPTABLES配置详解 [[转]]
查看>>
Linux下jvm、tomcat、mysql、log4j优化配置笔记
查看>>
LINUX下KVM的安装与配置
查看>>
linux下lamp的搭建及论坛的实现
查看>>
Linux下mail服务器应用之邮件系统
查看>>
Linux下mail服务器应用之邮件系统的安全性
查看>>
Linux下memcache的安装和启动
查看>>
linux下mysql8安装
查看>>
linux下mysql启动和关闭
查看>>
Linux下mysql基本操作
查看>>
Linux下mysql常用操作命令
查看>>
linux下nc的使用
查看>>
Linux下php动态添加扩展
查看>>