• MySQL表查询--多表笛卡尔积和子连接


    1.mysql多表查询

    说明
    多表查询是指基于两个和两个以上的表查询,在实际应用中,查询单个表可能不能满足你的需求,(如下面的课堂练习),需要使用到(dept表和emp表)

    1. 多表查询 显示雇员名,雇员工资及所在部门的名字【笛卡尔集】
    2. 小技巧:多表查询的条件不能少于表的个数-1,否则会出现笛卡尔集
    3. 如何显示部门号为10的部门名、员工名和工资。
    4. 显示各个员工的姓名,工资,及其工资的级别

    1.规则

    在默认情况下:当两个表查询时,规则

    1. 从第一张表中,取出一行和第二张表的每一行进行组合,返回结果[含有两张表的所有列].
    2. 一共返回的记录数第一张表行数*第二张表的行数
    3. 这样多表查询默认处理返回的结果,称为笛卡尔集
    4. 解决这个多表的关键就是要写出正确的过滤条件 where,需要程序员进行分析

    2.代码演示

    -- 多表查询
    -- ?显示雇员名,雇员工资及所在部门的名字 【笛卡尔集】
    /*
    	分析
    	1. 雇员名,雇员工资 来自 emp表
    	2. 部门的名字 来自 dept表
    	3. 需求对 emp 和 dept查询  ename,sal,dname,deptno
    	4. 当我们需要指定显示某个表的列是,需要 表.列表
    */
    SELECT ename,sal,dname,emp.deptno
    	FROM emp, dept 
    	WHERE emp.deptno = dept.deptno
    	
    SELECT * FROM emp;
    SELECT * FROM dept;
    SELECT * FROM salgrade;
    -- 老韩小技巧:多表查询的条件不能少于 表的个数-1, 否则会出现笛卡尔集
    -- ?如何显示部门号为10的部门名、员工名和工资 
    SELECT ename,sal,dname,emp.deptno
    	FROM emp, dept 
    	WHERE emp.deptno = dept.deptno AND emp.deptno = 10
    
    -- ?显示各个员工的姓名,工资,及其工资的级别
    
    -- 思路 姓名,工资 来自 emp 13
    --      工资级别 salgrade 5
    -- 写sql , 先写一个简单,然后加入过滤条件...
    SELECT ename, sal, grade 
    	FROM emp , salgrade
    	WHERE sal BETWEEN losal AND hisal; 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    2.子连接

    子连接是指在同一张表的连接查询【将同一张表看作两张表】

    -- 多表查询的 自连接
    
    -- 思考题: 显示公司员工名字和他的上级的名字
    
    -- 老韩分析: 员工名字 在emp, 上级的名字的名字 emp
    -- 员工和上级是通过 emp表的 mgr 列关联
    -- 这里老师小结:
    -- 自连接的特点 1. 把同一张表当做两张表使用
    --               2. 需要给表取别名 表名  表别名 
    --		 3. 列名不明确,可以指定列的别名 列名 as 列的别名		
    SELECT worker.ename AS '职员名' ,  boss.ename AS '上级名'
    	FROM emp worker, emp boss
    	WHERE worker.mgr = boss.empno;
    SELECT * FROM emp;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    在这里插入图片描述

  • 相关阅读:
    verilog写rom,采用端口排序顺序例化
    oppo A57刷机包更新
    从原始边列表到邻接矩阵Python实现图数据处理的完整指南
    【Python刷题篇】——Python入门 09 字典(下)
    使用VirtualLab Fusion仿真多层双折射反射偏振器
    【 C++ 】stack、queue、优先级队列、仿函数、容器适配器
    Decoder与Encoder重要组件
    Linux 爱好者线下沙龙:成都场圆满结束 & 下一场西子湖畔相见 | LLUG·第五站
    element表格实现单选框
    记录在linux上单机elasticsearch8和kibana8
  • 原文地址:https://blog.csdn.net/qq_59708493/article/details/126486626