• mysql数据库,sql语句中连接查询,连表查询,内连接,外连接,左外连接,右外连接,inner join、left join、right join,全连接


    连表查询

    现有多张表:员工表 emp(员工编号、姓名、工资、部门号、经理编号)、部门表 dept(部门号、部门名称、部门位置)、工资等级表 salgrade(等级、工资下限、工资上限)

    连接查询:当查询的数据不在一张表的时候,需要用到连接查询。

    直接查询

    要求:查询员工的姓名、工资、部门名称、部门位置。

    select ename,salary,dname,location from emp,dept

    问题:直接查询两张表,会产生笛卡尔积(两张表的数据的乘积),怎么消除笛卡尔积?

    解决:使用下面的方法。----> 找出表之间的关系(也就是后面 on 的部分)

    内连接(inner join on)

    要求:查询员工的姓名、工资、部门名称、部门位置。

    语法1:select 字段名 from 左表,右表 where 左表.关联字段=右表.关联字段;

    比如:select ename,salary,dname,location from emp,dept where emp.deptno=dept.deptno;

    语法2(推荐):select 字段名 from 左表 [inner] join 右表 on 左表.关联字段=右表.关联字段;

    外连接
    左外连接(left join on)

    要求:查询员工的姓名、工资、部门名称、部门位置。要求查出所有员工信息,即使这个员工没有所属的部门。

    语法:select 字段名 from 左表 left join 右表 on 左表.关联字段=右表.关联字段;

    比如:select ename,salary,dname,location from emp left join dept on emp.deptno=dept.deptno;
    在这里插入图片描述

    右外连接(right join on)

    要求:查询员工的姓名、工资、部门名称、部门位置。要求查出所有部门信息,即使这个部门里面没有员工。

    语法:select 字段名 from 左表 right join 右表 on 左表.关联字段=右表.关联字段;
    在这里插入图片描述
    因此:

    • 内连接特点:左表中的数据必须要与右表中的数据相互关联,才会被查出来

    • 左外连接特点:左表中所有的数据都会被查出来,如果没有与右表中关联的数据则用 null 代替。

    • 右外连接特点:右表中所有的数据都会被查出来,如果没有与左表中关联的数据则用 null 代替。

    全连接

    全连接:集合左外连接、右外连接。mysql 不支持全连接,Oracle 支持(就是:full join on)。怎么办?合并查询。

    合并查询(union)

    union: 连接,并能去除重复的。union all: 连接,并不去除重复的。

    比如:

    select 字段名 from 左表 left join 右表 on 左表.关联字段=右表.关联字段
    union
    select 字段名 from 左表 right join 右表 on 左表.关联字段=右表.关联字段;
    
    • 1
    • 2
    • 3

    在这里插入图片描述
    注意: 在使用合并查询的时候,要保证两个结果的 列数、数据类型一致(没说字段名一致)

    上面的连接,on 后面都是等值判断,假如不是等值判断怎么办?

    在这里插入图片描述
    1、要求:查询员工的姓名、工资、工资等级

    比如:select ename,salary,grade from emp inner join salgrade on salary between losal and hisal;

    2、要求:查询员工的姓名、工资、工资等级、部门名称、部门位置

    比如:

    select ename,salary,grade,dname,location from emp 
    inner join salgrade on salary between losal and hisal
    inner join dept on emp.deptno=dept.deptno;
    
    • 1
    • 2
    • 3
  • 相关阅读:
    记一次某制造业ERP系统 CPU打爆事故分析
    联合投稿其乐融融 抖音共创助你大显身手
    记录:2022-9-15 罗马数字转正数 组合总和 分割回文串 信号量算法代码 文件共享 一致性语义 文件保护 文件系统结构
    Google 为造芯再掀“抢人大战”,英特尔 17 年老将加入
    【生成二维码】
    千脑智能理论会是未来指引智能机器设计的理论基石吗?
    linux 3.13版本nvme驱动阅读记录三
    打牌的贝贝(卡特兰数+组合数学)
    HTML静态网页成品作业(HTML+CSS)——VIVO介绍网页(1个页面)
    Spine2D骨骼动画播放器 - 微信小程序版
  • 原文地址:https://blog.csdn.net/zhangfuping123456789/article/details/134430023