您当前的位置:首页 > 电脑百科 > 数据库 > MYSQL

mysql中all用法和any的用法和内外连接,全外连接,联合查询,自连接

时间:2022-07-14 16:19:10  来源:  作者:秃头Java人

all的用法

与子查询配合使用

在all的用法中,有三种

第一种: <>all类似于not in 等效于not in

语法:select 列名 from 表名 where 列名 <> all(select 列名 from 表名 where 条件表达式);

例如1:显示表中与CLERK部门的员工工资都不同的员工姓名和工资.

select ename ,sal from emp
where sal<>all(select sal from emp where job='CLERK');

例如2:查看表中与SALESMAN岗位员工不同工资的员工姓名和工资.
select ename ,sal from emp
where sal<>all(select sal from emp where job='SALESMAN');

例如:3.查看表中与SCOTT不同部门的员工的员工姓名和工资。
select ename,sal from emp
where deptno <> all(select deptno from emp where ename='scott');

第二种: >all比子查询中的最大值还要大

例如:查看表中比30号部门最高工资的员工还高的员工姓名和工资

select ename,sal from emp
where sal > all(select sal from emp where deptno=30);

第三种: <all比子查询中的最小值还要小

例如:查看表中比10号部门最低工资的员工还要低的员工姓名和工资

select ename ,sal from emp
where sal < all (select sal from emp where deptno=10);

注意:= all 是不存在的

any的用法

与子查询配合使用

在any的用法中,有三种

语法:select 列名 from 表名 where 列名 = any (select 列名 from 表名 where 条件表达式);

第一种: = any 与任何一个相等

例如:查看表中与20号部门员工工资相同的员工姓名和工资

select ename,sal from emp where sal =any (select sal from emp where deptno = 20);

第二种: > any 比最低的高

例如:查看表中比20号部门工资最低的员工的工资高的员工姓名和工资

select ename,sal from emp where sal >any (select sal from emp where deptno = 20);

第三种:< any 比最高的低

例如:查看表中比10号部门工资最低的员工的工资高的员工姓名和工资

select ename,sal from emp where sal < any (select sal from emp where deptno = 10);

注意:除了= any 会包含自己,其余的<any和>any都不会包含自己.

内连接

说明:在表进行跨表查询时,查询结果只是返回符合连接条件的数据

关键字:inner join

语法:select 别名1.列名1,别名2.列名2 from 表名 1 [as] 别名1 inner join 表名2 [as] 别名2 on 别名1.列名3=别名2.列名3 where 列名4 =值;

lnner join 代替了原本的多表查询的逗号
第一个on替代了之前的多表查询用来建立联系的where

例:查询7934 工号的员工所在的部门名称,结果显示员工编号和部门名称

等值连接:

select empno,dame from emp e,dept d where e.deptno=d.deptno

and empno=7934;

内连接:

select empno ,dname from emp e inner join dept d on e.deptno=d.deptno where empno=7934;

例:查询SCOTT所在的城市使用内连接写

select ename,loc from emp e inner join dept d on e.deptno=d.deptno

where e.ename='scott';

三表内连接语法

语法1:

select列 ----最终要显示的数据列注意应有别名点出来
from第一张表 ---第一个数据源需要取别名
inner join第二张表 ---第二个数据源需要取别名
on 第一张表的列=第二张表的列 ---建立—二表的联系lnner join第三张表 ---第三个数据源需要取别名
on第二张表的列=第三张表的列 ---建立二三表的联系
where表达式 ---给到条件来筛选

例:查询讴歌教过哪些学生

select sname ,teacher
from student st inner join score sc on st.sno=sc.sno
inner join course cs on sc.cno=cs.cno where cs.teacher='讴歌';

语法2:

select列
from 第1张表

inner join 第2张表

inner join 第3张表
on 1表列=2表列 and 2表列=3表列

where 条件表达式

例:查询讴歌教过哪些学生

select sname ,teacher
from
student st inner join score sc inner join course cs
on st.sno=sc.sno and sc.cno=cs.cno where cs.teacher='讴歌';

外连接

左表:在多连接查询时第一个出现的表,称之为左表

右表:在多表连接查询是最后出现的表,称之为右表

左外连接:

说明:使用左连接进行多表连接查询时,如果某个表中的数据需要全部显示,那查询时就使用这个方法。

查询时将这个表作为主表即左表,在右表符合条件的数据会显示

在查询的结果中,在右表中不符合条件的数据,也会显示,但是不符合条件的查询字段显示是null

关键字:left join

语法:

select 别名1.列名,别名2.列名2

from 表名1 [as] 别名1

left join 表名2[as]别名2

on 别名1.列名3=别名2.列名3

where 条件表达式

例如:查询哪个部门没有员工,结果显示部门名称、员工编号

select dname,empno from dept d left join emp e
on e.deptno=d.deptno where empno is null;

例如:查询哪个部门没有员工,结果显示部门名称、员工编号

select dname,empno from dept d left join emp e
on e.deptno=d.deptno where empno is null;

例如:查询哪个人没有领导 显示姓名,mgr

select e.ename,e.mgr from emp e left join emp d on e.empno=d.empno
where e.mgr is null;

select ename,mgr from emp where mgr is null;

例如:查询每位的员工的工资和津贴(comm),显示员工姓名,工资和津贴

select e.ename,e.sal ,comm from emp e left join emp d on e.empno=d.empno;

右外连接:

说明:使用右连接进行多表连接查询时,如果某个表中的数据需要全部显示,那查询时就使用这个方法。

查询时将这个表作为主表即右表,在左表符合条件的数据会显示

在查询的结果中,在左表中不符合条件的数据,也会显示,但是不符合条件的查询字段显示是null

关键字:right join

语法:

select 别名1.列名,别名2.列名2

from 表名1 [as] 别名1

right join 表名2[as]别名2

on 别名1.列名3=别名2.列名3

where 条件表达式

注意:
左右连接的语句写法上区别就是主表副表相反

左连接的主表是关键字左边的表

右链接的主表是关键字右表的表

左右连接的显示结果会根据主副表的不同而不同

左连接左表列会全显示,右表匹配上的列但是没有相应值的会显示null,若左表的列少于右表的列则右表多的列不会显示
右链接右表列会全显示,左表匹配上的列但是没有相应值的会显示null,若右表的列少于左表的列则左表多的列不会显示

全外连接

注意:MySQL没有全外连接,只做了解

关键字:full join

语法:

select 别名1.列名,别名2.列名2

from 表名1 [as] 别名1

full join 表名2[as]别名2 ----

on 别名1.列名3=别名2.列名3 ----建立两张表之间的联系

where 条件表达式

联合查询

关键字:union 只做了解

作用:主要是用作将左连接和右连接查询拼接到一起

语法:

(select 别名1.列名,别名2.列名2

from 表名1 [as] 别名1

left join 表名2[as]别名2 ----

on 别名1.列名3=别名2.列名3 ----建立两张表之间的联系

where 条件表达式)

union

(select 别名1.列名,别名2.列名2

from 表名1 [as] 别名1

right join 表名2[as]别名2 ----

on 别名1.列名3=别名2.列名3 ----建立两张表之间的联系

where 条件表达式);

自连接

说明:在 mysaL中有时会有一些特殊情况,需要将一张表当做两张表来查询,显示出需要的数据,因为两张是相同的,所以几乎所有的列都是通过别名点出来的,那么可以使用到自连接.

关键字: exists

例如:查询哪些员工是领导

select a.ename --先确定需要查询显示的列,但是这个列是
我们首次查询这张表时的列
from emp a ---数据源,是首次查询的表
where exists --- exists意思是存在,根据该关键字后面的子查询
结果来进行判断,如果判断结果是 true (子查询有结果),那么主查询语句将有符合条件的返回值
(select b.empno from emp b where b.mgr = a.empno); ---子查询中的数据源,可以理解成我们第二次查这张表.

语法:

Select 别名1.列名1,别名1.列名2

from 表名 [as] 别名1

where exists

(select别名⒉.列名 3 from表名[as]别名 2 where建立两张表联系语句);

例如:查询哪些员工是领导

第一种方法:

select ename from emp where empno in(select distinct mgr from emp);

第二种方法:

自连接:

select a.ename from emp a

where exists

(select b.empno from emp b where b.mgr=a.empno );

例如:查询哪些员工不是领导

第一种方法:

select ename from emp where empno not in(select distinct mgr from emp where mgr is not null );

第二种方法:

自连接:

select a.ename from emp a

where not exists

(select b.empno from emp b where b.mgr=a.empno );



Tags:mysql   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
MySQL 核心模块揭秘
server 层会创建一个 SAVEPOINT 对象,用于存放 savepoint 信息。binlog 会把 binlog offset 写入 server 层为它分配的一块 8 字节的内存里。 InnoDB 会维护自己的 savepoint...【详细内容】
2024-04-03  Search: mysql  点击:(10)  评论:(0)  加入收藏
MySQL 核心模块揭秘,你看明白了吗?
为了提升分配 undo 段的效率,事务提交过程中,InnoDB 会缓存一些 undo 段。只要同时满足两个条件,insert undo 段或 update undo 段就能被缓存。1. 关于缓存 undo 段为了提升分...【详细内容】
2024-03-27  Search: mysql  点击:(18)  评论:(0)  加入收藏
MySQL:BUG导致DDL语句无谓的索引重建
对于5.7.23之前的版本在评估类似DDL操作的时候需要谨慎,可能评估为瞬间操作,但是实际上线的时候跑了很久,这个就容易导致超过维护窗口,甚至更大的故障。一、问题模拟使用5.7.22...【详细内容】
2024-03-26  Search: mysql  点击:(14)  评论:(0)  加入收藏
从 MySQL 到 ByteHouse,抖音精准推荐存储架构重构解读
ByteHouse是一款OLAP引擎,具备查询效率高的特点,在硬件需求上相对较低,且具有良好的水平扩展性,如果数据量进一步增长,可以通过增加服务器数量来提升处理能力。本文将从兴趣圈层...【详细内容】
2024-03-22  Search: mysql  点击:(29)  评论:(0)  加入收藏
MySQL自增主键一定是连续的吗?
测试环境:MySQL版本:8.0数据库表:T (主键id,唯一索引c,普通字段d)如果你的业务设计依赖于自增主键的连续性,这个设计假设自增主键是连续的。但实际上,这样的假设是错的,因为自增主键不...【详细内容】
2024-03-10  Search: mysql  点击:(15)  评论:(0)  加入收藏
准线上事故之MySQL优化器索引选错
1 背景最近组里来了许多新的小伙伴,大家在一起聊聊技术,有小兄弟提到了MySQL的优化器的内部策略,想起了之前在公司出现的一个线上问题,今天借着这个机会,在这里分享下过程和结论...【详细内容】
2024-03-07  Search: mysql  点击:(33)  评论:(0)  加入收藏
MySQL数据恢复,你会吗?
今天分享一下binlog2sql,它是一款比较常用的数据恢复工具,可以通过它从MySQL binlog解析出你要的SQL,并根据不同选项,可以得到原始SQL、回滚SQL、去除主键的INSERT SQL等。主要...【详细内容】
2024-02-22  Search: mysql  点击:(54)  评论:(0)  加入收藏
如何在MySQL中实现数据的版本管理和回滚操作?
实现数据的版本管理和回滚操作在MySQL中可以通过以下几种方式实现,包括使用事务、备份恢复、日志和版本控制工具等。下面将详细介绍这些方法。1.使用事务:MySQL支持事务操作,可...【详细内容】
2024-02-20  Search: mysql  点击:(56)  评论:(0)  加入收藏
为什么高性能场景选用Postgres SQL 而不是 MySQL
一、 数据库简介 TLDR;1.1 MySQL MySQL声称自己是最流行的开源数据库,它属于最流行的RDBMS (Relational Database Management System,关系数据库管理系统)应用软件之一。LAMP...【详细内容】
2024-02-19  Search: mysql  点击:(40)  评论:(0)  加入收藏
MySQL数据库如何生成分组排序的序号
经常进行数据分析的小伙伴经常会需要生成序号或进行数据分组排序并生成序号。在MySQL8.0中可以使用窗口函数来实现,可以参考历史文章有了这些函数,统计分析事半功倍进行了解。...【详细内容】
2024-01-30  Search: mysql  点击:(56)  评论:(0)  加入收藏
▌简易百科推荐
MySQL 核心模块揭秘
server 层会创建一个 SAVEPOINT 对象,用于存放 savepoint 信息。binlog 会把 binlog offset 写入 server 层为它分配的一块 8 字节的内存里。 InnoDB 会维护自己的 savepoint...【详细内容】
2024-04-03  爱可生开源社区    Tags:MySQL   点击:(10)  评论:(0)  加入收藏
MySQL 核心模块揭秘,你看明白了吗?
为了提升分配 undo 段的效率,事务提交过程中,InnoDB 会缓存一些 undo 段。只要同时满足两个条件,insert undo 段或 update undo 段就能被缓存。1. 关于缓存 undo 段为了提升分...【详细内容】
2024-03-27  爱可生开源社区  微信公众号  Tags:MySQL   点击:(18)  评论:(0)  加入收藏
MySQL:BUG导致DDL语句无谓的索引重建
对于5.7.23之前的版本在评估类似DDL操作的时候需要谨慎,可能评估为瞬间操作,但是实际上线的时候跑了很久,这个就容易导致超过维护窗口,甚至更大的故障。一、问题模拟使用5.7.22...【详细内容】
2024-03-26  MySQL学习  微信公众号  Tags:MySQL   点击:(14)  评论:(0)  加入收藏
从 MySQL 到 ByteHouse,抖音精准推荐存储架构重构解读
ByteHouse是一款OLAP引擎,具备查询效率高的特点,在硬件需求上相对较低,且具有良好的水平扩展性,如果数据量进一步增长,可以通过增加服务器数量来提升处理能力。本文将从兴趣圈层...【详细内容】
2024-03-22  字节跳动技术团队    Tags:ByteHouse   点击:(29)  评论:(0)  加入收藏
MySQL自增主键一定是连续的吗?
测试环境:MySQL版本:8.0数据库表:T (主键id,唯一索引c,普通字段d)如果你的业务设计依赖于自增主键的连续性,这个设计假设自增主键是连续的。但实际上,这样的假设是错的,因为自增主键不...【详细内容】
2024-03-10    dbaplus社群  Tags:MySQL   点击:(15)  评论:(0)  加入收藏
准线上事故之MySQL优化器索引选错
1 背景最近组里来了许多新的小伙伴,大家在一起聊聊技术,有小兄弟提到了MySQL的优化器的内部策略,想起了之前在公司出现的一个线上问题,今天借着这个机会,在这里分享下过程和结论...【详细内容】
2024-03-07  转转技术  微信公众号  Tags:MySQL   点击:(33)  评论:(0)  加入收藏
MySQL数据恢复,你会吗?
今天分享一下binlog2sql,它是一款比较常用的数据恢复工具,可以通过它从MySQL binlog解析出你要的SQL,并根据不同选项,可以得到原始SQL、回滚SQL、去除主键的INSERT SQL等。主要...【详细内容】
2024-02-22  数据库干货铺  微信公众号  Tags:MySQL   点击:(54)  评论:(0)  加入收藏
如何在MySQL中实现数据的版本管理和回滚操作?
实现数据的版本管理和回滚操作在MySQL中可以通过以下几种方式实现,包括使用事务、备份恢复、日志和版本控制工具等。下面将详细介绍这些方法。1.使用事务:MySQL支持事务操作,可...【详细内容】
2024-02-20  编程技术汇    Tags:MySQL   点击:(56)  评论:(0)  加入收藏
MySQL数据库如何生成分组排序的序号
经常进行数据分析的小伙伴经常会需要生成序号或进行数据分组排序并生成序号。在MySQL8.0中可以使用窗口函数来实现,可以参考历史文章有了这些函数,统计分析事半功倍进行了解。...【详细内容】
2024-01-30  数据库干货铺  微信公众号  Tags:MySQL   点击:(56)  评论:(0)  加入收藏
mysql索引失效的场景
MySQL中索引失效是指数据库查询时无法有效利用索引,这可能导致查询性能显著下降。以下是一些常见的MySQL索引失效的场景:1.使用非前导列进行查询: 假设有一个复合索引 (A, B)。...【详细内容】
2024-01-15  小王爱编程  今日头条  Tags:mysql索引   点击:(88)  评论:(0)  加入收藏
站内最新
站内热门
站内头条