• 【知识库】-数据库_MySQL 的七种 join


      掘金作者:haifeisi

      文章出处: MySQL 的七种 join

      Learn  [已经过测试校验]

        一、内连接

        二、左外连接

        三、右外连接

        四、左连接

        五、右连接

        六、全连接

        七、两张表中都没有出现的数据集

     

    准备工作

      创建数据库表'tbl_dept'和'tbl_emp'

    CREATE DATABASE db0206;
    USE db0206;
    
    CREATE TABLE `db0206`.`tbl_dept`(  
      `id` INT(11) NOT NULL AUTO_INCREMENT,
      `deptName` VARCHAR(30),
      `locAdd` VARCHAR(40),
      PRIMARY KEY (`id`)
    ) ENGINE=INNODB CHARSET=utf8;
    
    CREATE TABLE `db0206`.`tbl_emp`(  
      `id` INT(11) NOT NULL AUTO_INCREMENT,
      `name` VARCHAR(20),
      `deptId` INT(11),
      PRIMARY KEY (`id`),
      FOREIGN KEY (`deptId`) REFERENCES `db0206`.`tbl_dept`(`id`)
    ) ENGINE=INNODB CHARSET=utf8;
    View Code

      插入数据

    /*插入数据*/
    INSERT INTO tbl_dept(deptName,locAdd) VALUES('RD',11);
    INSERT INTO tbl_dept(deptName,locAdd) VALUES('HR',12);
    INSERT INTO tbl_dept(deptName,locAdd) VALUES('MK',13);
    INSERT INTO tbl_dept(deptName,locAdd) VALUES('MIS',14);
    INSERT INTO tbl_dept(deptName,locAdd) VALUES('FD',15);
    
    INSERT INTO tbl_emp(NAME,deptId) VALUES('z3',1);
    INSERT INTO tbl_emp(NAME,deptId) VALUES('z4',1);
    INSERT INTO tbl_emp(NAME,deptId) VALUES('z5',1);
    
    INSERT INTO tbl_emp(NAME,deptId) VALUES('w5',2);
    INSERT INTO tbl_emp(NAME,deptId) VALUES('w6',2);
    
    INSERT INTO tbl_emp(NAME,deptId) VALUES('s7',3);
    
    INSERT INTO tbl_emp(NAME,deptId) VALUES('s8',4);
    View Code

      'tbl_dept'表和'tbl_emp'表

              

    一、内连接

      内连接文氏图

      

    • 执行的sql语句以及执行的查询结果
    select * from tbl_dept a inner join tbl_emp b on a.id=b.deptId;

       

    二、左外连接

      左外连接文氏图

      

    • 执行的sql语句以及执行的查询结果
    select * from tbl_dept a left join tbl_emp b on a.id=b.deptId;

      

    三、右外连接

      右外连接文氏图

       

    • 执行的sql语句以及执行的查询结果
    select * from tbl_dept a right join tbl_emp b on a.id=b.deptId;

       

     四、左连接

       左连接文氏图

       

    • 执行的sql语句以及执行的查询结果
    select * from tbl_dept a left join tbl_emp b on a.id=b.deptId where b.deptId is null;

      

    五、右连接

      右连接文氏图 

      

    • 执行的sql语句以及执行的查询结果
    select * from tbl_dept a right join tbl_emp b on a.id=b.deptId where a.id is null;

     

     六、全连接

       全连接文氏图

    • 执行的sql语句以及执行的查询结果
    select * from tbl_dept a right join tbl_emp b on a.id=b.deptId 
    union 
    select * from tbl_dept a left join tbl_emp b on a.id=b.deptId;

      

     

     

    七、两张表中都没有出现的数据集

       文氏图

      

    • 执行的sql语句以及执行的查询结果
    select * from tbl_dept a right join tbl_emp b on a.id=b.deptId 
    union 
    select * from tbl_dept a left join tbl_emp b on a.id=b.deptId;

      

  • 相关阅读:
    Linux服务器上的node进程被kill问题排查
    轻松精通数据库管理之道——运维巡检系列
    30分钟带你熟练性能优化的那点儿事儿(案例说明)
    八年数据库之路的感悟
    SQL SERVER全面优化-------Expert for SQL Server 诊断系列
    入园记------我的DBA之路
    非常详细的 (VMware安装Centos7超详细过程)
    数据库自动收缩带来的严重问题
    解决数据库卡、慢,问题多,难管理——老技术的执著
    数据库优化案例——————某知名零售企业ERP系统
  • 原文地址:https://www.cnblogs.com/1138720556Gary/p/11196351.html
Copyright © 2020-2023  润新知