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

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

查询时将该表作为主表,即左表,显示右表符合条件的数据。

[En]

When querying, use this table as the main table, that is, the left table, and the qualified data in the right table will be displayed.

在查询的结果中,在右表中不符合条件的数据,也会显示,但是不符合条件的查询字段显示是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;

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

查询时将该表作为主表,即右表,显示左表符合条件的数据。

[En]

When querying, use this table as the main table, that is, the right table, and the qualified data in the left table will be displayed.

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

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

from 表名1 [as] 别名1

right join 表名2[as]别名2

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

where 条件表达式

注意:
左右连句的不同之处在于主表和副表是相对的。

[En]

The difference in the sentence writing of the left-right connection is that the main table and the secondary table are opposite.

连接到左侧的主表是关键字左侧的表

[En]

The main table connected to the left is the table to the left of the keyword

链接到右侧的主表是关键字右侧的表。

[En]

The main table linked to the right is the table on the right of the keyword.

左右连接的显示结果将根据主表和辅表的不同而不同。

[En]

The display results of the left and right connections will vary according to the primary and secondary tables.

左连接左表列会全显示,右表匹配上的列但是没有相应值的会显示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 –先确定需要查询显示的列,但是这个列是
我们第一次查询此表时的列

[En]

The column when we first queried this table

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/505228/

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

(0)

大家都在看

  • MYSQL/Oracle中常用函数总结

    记录在日常工作或者学习中中使用到的函数,以下是做一个备忘~ MySQL: 窗口函数: 原文地址:https://zhuanlan.zhihu.com/p/92654574 1、窗口…

    数据库 2023年6月14日
    092
  • 翻译|使用 StatefulSet 运行数据库应用

    本文介绍 Kubernetes 支持数据库等有状态应用的常见解决方案:StatefulSet。 我们在构建机器学习向量管理时面临的一个重要问题是:如何持久化数据,避免数据丢失? […

    数据库 2023年5月24日
    091
  • Redis内存满了怎么办(新年快乐)

    Redis内存满了怎么办(新年快乐) 入我相思门,知我相思苦。 长相思兮长相忆,短相思兮无穷极。 一、配置文件 Redis长期使用或者不设置过期时间,导致内存爆满或不足,可以到Re…

    数据库 2023年6月14日
    056
  • Java学习-第一部分-第二阶段-第五节:集合

    集合 笔记目录:(https://www.cnblogs.com/wenjie2000/p/16378441.html) 前面我们保存多个数据使用的是数组,那么数组有不足的地方,我…

    数据库 2023年6月11日
    087
  • 正则表达式

    正则表达式:REGEXP,REGular EXPression。正则表达式分为两类: Basic REGEXP(基本正则表达式 Extended REGEXP(扩展正则表达式) 元…

    数据库 2023年6月15日
    0129
  • MySQL启动过程详解一:启动整体流程

    MySQL启动流程如下: 设置进程名 处理配置文件及启动参数以及部分模块初始化,这包括: 2.1 从配置文件中读取选项,把他们放在 argc 和 argv 已有的参数之前 2.2 …

    数据库 2023年6月9日
    053
  • [javaweb]监听器统计网页在线人数

    监听器 1.配置监听器 package com.javaweb.controller; import javax.servlet.ServletContext; import ja…

    数据库 2023年6月16日
    085
  • Python实现XMind测试用例快速转Excel用例

    转载请注明出处❤️ 作者:测试蔡坨坨 原文链接:caituotuo.top/c2d10f21.html 你好,我是测试蔡坨坨。 今天分享一个Python编写的小工具,实现XMind…

    数据库 2023年6月11日
    075
  • MySQL约束

    约束 约束(constraint)概述 为什么要约束 为了保证数据完整性 什么是约束 对表中 字段的(强制)限制 约束的分类 角度一:字段个数 单类约束,多列约束 角度二:约束的作…

    数据库 2023年5月24日
    083
  • 2022-8-10 JAVA的反射机制

    反射机制 AVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方…

    数据库 2023年6月14日
    069
  • Java学习-第一部分-第二阶段-项目实战:坦克大战【1】

    坦克大战【1】 笔记目录:(https://www.cnblogs.com/wenjie2000/p/16378441.html) 坦克大战游戏 为什么写这个项目✔好玩✔涉及到ja…

    数据库 2023年6月11日
    066
  • Java项目服务器跨域设置

    引入jar包 cors-filter-2.6 :http://central.maven.org/maven2/com/thetransactioncompany/cors-fil…

    数据库 2023年6月16日
    073
  • MySQL——基础查询与条件查询

    基础查询 /* 语法: select 查询列表 from 表名; 类似于:System.out.println(打印东西); 1、查询列表可以是:表中的字段、常量值、表达式、函数 …

    数据库 2023年5月24日
    0102
  • 基于Redis&MySQL接口幂等性设计

    基于Redis&MySQL接口幂等性设计 欲把相思说似谁,浅情人不知。 幂等性即多次调用接口或方法不会改变业务状态,可以保证重复调用的结果和单次调用的结果一致。 前端重复提…

    数据库 2023年6月14日
    070
  • B树详解

    B树系列文章 1. B树-介绍 2. B树-查找 3. B树-插入 4. B树-删除 什么是B树 B树(英语:B-tree)是一种自平衡的树,能够保持数据有序。使用B树这种数据结构…

    数据库 2023年6月14日
    091
  • 【StoneDB技术解析】验证相关数据包是否需要解压缩

    在StoneDB中,数据包分为以下几类: 通过对数据包的划分,知识网格技术过滤掉不相关的数据包,读取相关的数据包和可疑的数据包。其中相关的数据包不需要解压缩,只读取元数据,不会发生…

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