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

与子查询配合使用

在all的用法中,有三种

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

例如1:显示表中与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’);

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

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

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

与子查询配合使用

在any的用法中,有三种

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

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

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

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

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

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

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

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

关键字: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’;

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=’讴歌’;

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

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

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

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

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 );

Original: https://www.cnblogs.com/cn-zhouchao/p/16474409.html
Author: 小胖子学编程
Title: mysql中all用法和any的用法和内连接和外连接,全外连接,联合查询,自连接

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/619415/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 阿里慢SQL治理5大经典案例

    菜鸟供应链金融慢sql治理已经有一段时间,自己负责的应用持续很长时间没有慢sql告警,现阶段在推进组内其他成员治理应用慢sql。这里把治理过程中的一些实践拿出来分享下。 一、全表扫…

    数据库 2023年5月24日
    0126
  • 1_Layui

    官网:https://www.layui.com/ 在官网首页, 可以很方便的下载Layui Layui是一款经典模块化前端UI框架, 我们只需要定义简单的HTML,CSS,JS即…

    数据库 2023年6月11日
    092
  • GreatSQL vs MySQL性能测试来了,速围观~

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。 GreatSQL是MySQL的国产分支版本,使用上与MySQL一致。 1.结论先行 无论ibp(inn…

    数据库 2023年6月11日
    088
  • 标识多个物体并返回物体中心坐标方法的实现

    概述 在图像处理时,可能不可避免的需要计算图像中目标体的中心点,因而本片文章重点讲如何用传统图像处理方式来计算图像中目标体的中心。 方案 刚开始在考虑这个问题时其实也考虑了很多方法…

    数据库 2023年6月11日
    0115
  • 腾讯云linux系统安装FTP操作

    命令 rpm -qa | grep vsftpd 来查看是否安装相应的包ftp 如下图已安装 一:安装FTP: 1、命令:yum install -y vsftpd 2、装之后首先…

    数据库 2023年6月11日
    059
  • 你的 SQL 还在回表查询吗?快给它安排覆盖索引

    什么是回表查询 小伙伴们可以先看这篇文章了解下什么是聚集索引和辅助索引:Are You OK?主键、聚集索引、辅助索引,简单回顾下,聚集索引的叶子节点包含完整的行数据,而非聚集索引…

    数据库 2023年5月24日
    084
  • JDK卸载

    win+r,进入cmd,输入java -version显示命令不存在即删除成功 Original: https://www.cnblogs.com/Icy01/p/16298149…

    数据库 2023年6月11日
    074
  • MariaDB主从备份

    MariaDB主从备份 修改my.ini的参数 注释第30行左右的bind-address bind-address=127.0.0.1 注释61行左右的log-bin=mysql…

    数据库 2023年6月9日
    066
  • MySQL实战45讲 12

    12 | 为什么我的MySQL会”抖”一下? 一条 SQL 语句,正常执行的时候特别快,但是 有时也不知道怎么回事,它就会变得特别慢,并且这样的场景很难复现…

    数据库 2023年6月16日
    095
  • 【StoneDB】产品FAQ

    StoneDB与MySQL的兼容性如何?StoneDB高度兼容MySQL 5.6、5.7协议和MySQL生态等重要特性,支持MySQL常用的功能及语法。由于StoneDB本身的一些…

    数据库 2023年5月24日
    081
  • 索引

    一种数据结构,帮助我们快速的定位元素 主键索引 唯一索引 普通索引 联合索引(最左匹配原则) 对某字段进行范围会使索引失效 全文索引 如何让性能优秀 减少I/O次数 避免回旋 根据…

    数据库 2023年6月11日
    068
  • [LeetCode]21. 合并两个有序链表

    将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例: 输入:1->2->4, 1->3->4输出:1-&…

    数据库 2023年6月9日
    096
  • springboot~elasticsearch对nested集合类型的字段进行不等于的检索

    对于es的数据类型来说,如果它是一个复杂类型,而我们需要把复杂类型进行检索,那么应该定义成 nested类型,而对于它的检索,如果是非集合数据,它与其它类型没有分别;而如果你的ne…

    数据库 2023年6月6日
    093
  • Java绘图基础

    Graphics 绘图类 Graphic是一个抽象的画笔对象,可以在组件上绘制丰富多彩的几何图形和位图。Graphics类封装了Java支持的基本绘图操作所需的属性,主要包括 颜色…

    数据库 2023年6月16日
    078
  • MySQL 数据备份与恢复

    数据备份 使用 mysqldump 命令可以将数据库中的数据备份成一个文本文件,表的结构和数据以 SQL 的形式将存储生成的文本文件 mysqldump -u username -…

    数据库 2023年5月24日
    0125
  • mysql中all用法和any的用法和内连接和外连接,全外连接,联合查询,自连接

    与子查询配合使用 在all的用法中,有三种 语法:select 列名 from 表名 where 列名 <> all(select 列名 from 表名 where 条…

    数据库 2023年5月24日
    0112
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球