当前位置: 首页 > article >正文

7.MySQL复合查询

个人主页:Lei宝啊 

愿所有美好如期而遇


目录

复合查询

基本查询回顾

多表查询

自连接

子查询

单行子查询

多行子查询

多列子查询

在from子句中使用子查询

合并查询

union

union all

实战OJ


复合查询

前面我们讲解的mysql表的查询都是对一张表进行查询,在实际开发中这远远不够

基本查询回顾

回顾我们建的表

以及三张表内的数据

  

查询工资高于500或岗位为MANAGER的雇员,同时还要满足他们的姓名首字母为大写的J

按照部门号升序而雇员的工资降序排序

使用年薪进行降序排序

显示工资最高的员工的名字和工作岗位

显示工资高于平均工资的员工信息

显示每个部门的平均工资和最高工资

显示平均工资低于2000的部门号和它的平均工资

显示每种岗位的雇员总数,平均工资

多表查询

实际开发中往往数据来自不同的表,所以需要多表查询。本节我们用一个简单的公司管理系统,有三张表EMP,DEPT,SALGRADE来演示如何进行多表查询,也就是上面我们给出的表。

显示雇员名、雇员工资以及所在部门的名字

(因为上面的数据来自EMP和DEPT表,因此要联合查询)

显示部门号为10的部门名,员工名和工资

显示各个员工的姓名,工资,及工资级别

 

自连接

自连接是指在同一张表连接查询

显示员工FORD的上级领导的编号和姓名(mgr是员工领导的编号--empno)

使用的子查询

使用多表查询(自查询)

子查询

子查询是指嵌入在其他sql语句中的select语句,也叫嵌套查询

单行子查询

返回一行记录的子查询

显示SMITH同一部门的员工

多行子查询

返回多行记录的子查询

in关键字;查询和10号部门的工作岗位相同的雇员的名字,岗位,工资,部门号,但是不包含10自
己的

all关键字;显示工资比部门30的所有员工的工资高的员工的姓名、工资和部门号

any关键字;显示工资比部门30的任意员工的工资高的员工的姓名、工资和部门号(包含自己部门
的员工)

 

多列子查询

单行子查询是指子查询只返回单列,单行数据;多行子查询是指返回单列多行数据,都是针对单列而言的,而多列子查询则是指查询返回多个列数据的子查询语句

查询和SMITH的部门和岗位完全相同的所有雇员,不含SMITH本人

在from子句中使用子查询

子查询语句出现在from子句中。这里要用到数据查询的技巧,把一个子查询当做一个临时表使用。

显示每个高于自己部门平均工资的员工的姓名、部门、工资、平均工资

先找出各个部门的平均工资,将其与emp表做笛卡尔积后,通过工资和部门条件筛选出来。

select ename,emp.deptno,sal,avgsal

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

where emp.deptno=avg.deptno

and sal>avgsal;

也许你会有疑问,avgsal不是求平均值吗,前面三个数据没有分组,为什么能够做聚合?首先,我们在from那里就已经做出了avgsal的表,而且已经拼接。

查找每个部门工资最高的人的姓名、工资、部门、最高工资

select ename,sal,emp.deptno,m 

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

where emp.deptno=max.deptno

and sal=m;

显示每个部门的信息(部门名,编号,地址)和人员数量

子查询

select dept.dname,emp.deptno,dept.loc,count

from (select deptno, count(*) count from emp group by deptno) emp,dept

where emp.deptno=depto;

多表查询 

select dept.dname,dept.deptno,dept.loc,count(*)

from emp,dept

where emp.deptno=dept.deptno

group by dname,loc,dept.deptno;

合并查询

在实际应用中,为了合并多个select的执行结果,可以使用集合操作符 union,union all

union

该操作符用于取得两个结果集的并集。当使用该操作符时,会自动去掉结果集中的重复行

将工资大于2500或职位是MANAGER的人找出来

union all

该操作符用于取得两个结果集的并集。当使用该操作符时,不会去掉结果集中的重复行。

实战OJ

查找所有员工入职时候的薪水情况_牛客题霸_牛客网 (nowcoder.com)

select emp.emp_no,sal.salary from employees emp,salaries sal

where emp.emp_no=sal.emp_no and emp.hire_date=sal.from_date

order by emp.emp_no desc;

获取所有非manager的员工emp_no_牛客题霸_牛客网 (nowcoder.com)

select emp_no from employees

where emp_no not in (select emp_no from dept_manager);

获取所有员工当前的manager_牛客题霸_牛客网 (nowcoder.com) 

select emp.emp_no,man.emp_no manager from dept_emp emp,dept_manager man

where emp.dept_no=man.dept_no

and emp.emp_no<>man.emp_no;


http://www.kler.cn/a/106667.html

相关文章:

  • 供应链管理、一件代发系统功能及源码分享 PHP+Mysql
  • 基于 PyTorch 从零手搓一个GPT Transformer 对话大模型
  • 神经网络与Transformer详解
  • 针对gitgitee的使用
  • react之了解jsx
  • 基于STM32设计的森林火灾监测系统(华为云IOT)_263
  • seacms_CNVD-2020-22721_v10.1漏洞分析与复现
  • [Java]前中后序遍历二叉树/递归与非递归
  • 结构体数组经典运用---选票系统
  • Mybatis中延迟加载~
  • MySQL基础入门教程(InsCode AI 创作助手)
  • 【JavaScript】零碎知识点汇总
  • AUTOSAR汽车电子嵌入式编程精讲300篇-基于 CAN 总线的车辆数据采集与远程监控系统研发(下)
  • 【数据结构】模拟实现栈和队列
  • 计算机网络相关硬件介绍
  • Flutter extended_image库设置内存缓存区大小与缓存图片数
  • input实现手机验证码输入
  • 代码随想录算法训练营第3天| 203.移除链表元素 、 707.设计链表 、 206.反转链表
  • sqoop连接MYSQL报错处理
  • 基于PyTorch的MNIST手写体分类实战
  • Mac版好用的Git客户端 Fork 免激活
  • c# 操作word中的表格 批量复制和批量插入
  • 修改svc的LoadBalancer的IP引发的惨案
  • Nacos的安装和实操
  • 2023NOIP A层联测19-多边形
  • 基于nodejs+vue人脸识别考勤管理系统的设计与实现