• MySQL——连接查询与子查询


    一、连接查询

    单表查询:在一张表当中查询数据,叫做单表查询。

    连接查询,结合俩(多)张表,在俩张(多)表当中查询数据,在一张表当中查询一部分,在另一张表当中查询另一部分数据,这种跨表查询,连接多张表查询数据的方法叫做连接查询!

    连接查询分为:SQL92语法,SQL99语法。目前主流使用SQL99语法。

    SQL92 的语法 结构更加的粗糙,语法结构不清晰 表连接的判断和其他条件都放在了where 后面,非常的混乱。select.....from .....where....

    SQL99的语法结构清晰,某一个表和另一个表连接用 join, 然后判断条件放在on 的后面。select.....from......inner join.....on.....inner join....on....where.....(inner 可以省略,但加上语法结构更清晰)

    笛卡尔积现象:

    当连接俩张表进行查询的时候,如果没有任何限制的情况下,查询的次数为两张表所有记录的乘积!

    这个时候内外连接的限制条件的作用就体现出来了!

    1、内连接:

    等值连接:查询结果是由where 条件的等号来 决定的

    上面虽然查询出来想要的结果,但是查询次数依旧没有减少,只是筛选出来了而已。同时我们也知道在今后连接的表的数量越少越好,否则会使效率降低!

    非等值连接:

    自连接:一张表当做两张表来解决。

    2、外连接(right/left + outer[outer可以省略]):

    内连接与外连接的区别:内连接没有主次关系,两(多)张表是平级的,而外连接有主次关系,主要是查什么,其次是查什么!

    左外连接(left): 表示join关键字左边的表是主表,主要是查出左边表的数据,顺带将右边的表的数据也查出来。

    右外连接(right):表示join关键字右边的表是主表,主要是查出右边表的数据,顺带将左边的表的数据也查出来。

    总结:外连接的查询次数 >= 内连接的查询次数。

    多表连查:

    使用select .....from ......join....on......join....on.....where.....group by .......having........order by .......

    例如查:找出每个员工的部门名称和工资等级,上级领导,显示出员工名字,领导名,部门名,工资,工资等级。

    select e.ename,d.dname,n.ename as '上级',e.sal,s.grade from emp e join dept d on e.deptno = d.deptno left join emp n on e.mgr = n.empno join salgrade s on e.sal between s.losal and s.hisal;

    三、全连接(用的很少)


    二、子查询

    子查询:select 语句当中嵌套select语句,被嵌套的select语句被称为子查询。

    子查询语句可以放在select ,from ,where 后面。

    where子句中出现子查询:

    例如:查询员工当中大于800元的员工姓名和工资

    from 子句当中出现子查询:

    注意:from 当中的子查询,可以把子查询当中查出来的东西当中一张临时表。

    例如:找出每个岗位的平均工资的薪资等级?

    select t.*,s.grade from (select job,avg(sal) as avgsal from emp group by job) t join salgrade s on t.avgsal between s.losal and s.hisal;

    select t.*,s.grade from (select ename,avg(sal) as avgsal from emp) t join salgrade s on t.avgsal between s.losal and s.hisal;

    select 子句当中的出现的子查询:

    查询每个员工的部门名称,要求显示部门名和员工名?

    select e.ename,e.deptno,(select dname from dept join emp on emp.deptno = dept.deptno) from emp e;

    注意:select后的子查询返回的结果只能是返回一条,当多余一条的时候,就会报错!!!

  • 相关阅读:
    Java安全之SnakeYaml反序列化分析
    python LeetCode 88 刷题记录
    代码检视的新姿势!在IDEA中得到沉浸式Code Review新体验
    查出来这个表中evaluation_num字段中以2023开头的最大的尾数是几,instr用法
    VM使用-pin针同心度检测
    《树莓派项目实战》第七节 使用声音传感器检测声音
    dify接入文心一言出错
    开源项目丨Taier1.2版本发布,新增工作流、租户绑定简化等多项功能
    商汤绝影车路协同“进城”!10+个智能网联应用,100+场景算法应用,感知范围扩大1000倍...
    移动应用程序管理(MAM)
  • 原文地址:https://blog.csdn.net/m0_73968621/article/details/132678288