• 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后的子查询返回的结果只能是返回一条,当多余一条的时候,就会报错!!!

  • 相关阅读:
    公众号H5微信生态
    1--Linux:环境安装与Linux常识
    Adult Data Set
    Java进阶学习路线图
    “低代码”编程或将是软件开发的未来
    【100天精通Python】Day56:Python 数据分析_Pandas数据清洗和处理
    2022“杭电杯” 中国大学生算法设计超级联赛(8)5 7题解
    【面试题】2023知乎暑期实习算法实习生(LLM方向)面经
    java毕业生设计校园招聘管理系统计算机源码+系统+mysql+调试部署+lw
    模拟考试题库答题流量主小程序开发
  • 原文地址:https://blog.csdn.net/m0_73968621/article/details/132678288