数据库mysql-6-复合查询

本文深入探讨了SQL查询中的多表查询,包括如何在不同表间联合检索数据,以及指定字段所属表以避免冲突。此外,介绍了自连接的概念,展示了如何在一个表中进行自我连接查询。子查询部分涵盖了单行、多行和多列子查询的用法,以及all、any关键字的应用。同时,讲解了如何在from子句中使用子查询,以及如何通过union和unionall操作合并查询结果。这些技术对于高效地处理复杂数据库查询至关重要。
摘要由CSDN通过智能技术生成

1.多表查询

本质上是数据分布在不同的数据表中,在查询的时候,需要在不同的表中进行查询,但是我们只想写一个sql,所以就产生了多表查询;  

一个sql语句当中,where后面的约束条件依赖一个select语句的查询结果;

注意:多表查询时,要注意查询的列是属于哪一个表当中的,如果多个表当中存在相同名称的字段,则需要指定该字段属于哪一个表,否则mysql的服务端层,在解析sql语句的时候,是没有办法进行区分的,就会报错。

eg:显示雇员名、雇员工资以及所在部门的名字,需要多表查询

 eg:显示雇员编号、雇员名、雇员工资以及所在部门的地址,需要多表查询

eg:显示部门号为20的部门名,员工名和工资

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

2.自连接

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

eg:显示员工ADAMS的上级领导的编号和姓名

使用子查询:

使用多表查询(自查询) 

3.子查询

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

(1)单行子查询

外层select,内层select;内层查询的内容是单行单列的

eg:显示FORD同一部门的员工

 eg:显示JONES同一工作的员工

(2)多行子查询

本质上指的是内层的select查询出来的结果是单列多行的

  • in关键字:外层select的约束条件只要满足内层select查询出来的任意一个结果

eg:查询和30号部门的工作相同的雇员的名字,岗位,工资,部门号,但是不包含30自己的

  • all关键字:全部

eg:显示工资比部门30的所有员工的工资高的员工的姓名、工资和部门号

  • any关键字:任意

eg:显示工资比部门10的任意员工的工资高的员工的姓名、工资和部门号

(3)多列子查询

本质上是单行多列的数据,本质上内层的select搜索了多列的数据

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

 4.在from子句中使用子查询

子查询的语句在from子句中出现,是把子查询当做一个临时表来使用

eg:显示低于自己部门平均工资的员工的姓名、部门、工资、平均工资

eg: 查找每个部门工资最低的人的姓名、工资、部门、最低工资

 5.合并查询

为了合并多个select的执行结果,可以使用集合操作符union、union all

(1)union 

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

(2)union all

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

(3)例子:查询工资大于2000或职位是MANAGER的人

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值