美文网首页
15.多表查询--内连接

15.多表查询--内连接

作者: Liuzhl | 来源:发表于2018-12-21 11:17 被阅读100次

    1. 合并结果集

    • 只要从多张表查出来的数据的结果集列数和类型相同,就能合并
    • UNION ALL 不去重
    SELECT deptno, dname FROM dept
    UNION ALL
    SELECT empno, ename FROM emp
    
    • UNION 去重
    SELECT deptno, dname FROM dept
    UNION
    SELECT empno, ename FROM emp
    

    内连接

    1. 笛卡尔积
    • 直接查询2张表会产生笛卡尔积,即a表的每条数据都要匹配一次b表的每条数据,那么总数据就是 a表数据条数 * b表数据条数,这里面的有许多数据都不是我们需要的
    SELECT * FROM emp, dept
    
    笛卡尔积.png
    • 这里截取了12条数据,只有3条数据是我们需要的,条件就是emp.deptno = dept.deptno, 所以我们就可以用这个条件来去除笛卡尔积
    SELECT * FROM emp, dept WHERE emp.deptno = dept.deptno
    
    去除笛卡尔积后的结果.png

    2. 多表取指定列,以及表别名

    • 在多表中取出指定列来得到一个结果集,需要指定表名
    • 如查询员工名字、工作、工资、部门
    SELECT emp.ename, emp.job, emp.sal, dept.dname 
    FROM emp, dept
    WHERE emp.deptno = dept.deptno
    
    查询多表指定列.png
    • 有些时候,因为命名规范会造成表名过长,我们可以给表取别名来简化sql语句
    SELECT e.ename, e.job, e.sal, d.dname 
    FROM emp e, dept d
    WHERE e.deptno = d.deptno
    
    内连接的3种写法
    1. 方言, 只在mysql数据库中生效,也就是上面我们用的写法
    SELECT * FROM 表1, 表2 WHERE表1.xx = 表2.xx
    SELECT * FROM emp, dept WHERE emp.deptno = dept.deptno
    
    1. 标准: sql规范
    SELECT * FROM 表1 INNER JOIN 表2 ON 表1.xx = 表2.xx
    SELECT * FROM emp INNER JOIN dept ON emp.deptno = dept.deptno
    
    1. 自然:根据2张表中列名相同的列进行自动匹配
    SELECT * FROM 表1 NATURAL JOIN 表2 
    SELECT * FROM emp NATURAL JOIN dept
    

    相关文章

      网友评论

          本文标题:15.多表查询--内连接

          本文链接:https://www.haomeiwen.com/subject/uhylkqtx.html