【MySQL高级】MySQL表的七种连接方式【附带练习sql】

04-08 6769阅读 0评论

文章目录

  • 连接
    • 七种JOIN介绍
    • 练习
      • 建表+存储数据
      • 笛卡尔积
      • 内连接
      • 左连接
      • 右连接
      • A表独有
      • B表独有
      • 全连接
        • 实现方式一:左连接+右连接+公共部分去重
        • 实现方式二:左连接+B独有
        • A独有+B独有
        • 文章说明

          连接

          七种JOIN介绍

          图形连接方式说明SQL
          【MySQL高级】MySQL表的七种连接方式【附带练习sql】 第1张内连接共有部分SELECT FROM TableA A INNER JOIN TableB B ON A.Key = B.Key;
          【MySQL高级】MySQL表的七种连接方式【附带练习sql】 第2张左连接A表独有+共有部分SELECT FROM TableA A LEFT JOIN TableB B ON A.Key = B.Key;
          【MySQL高级】MySQL表的七种连接方式【附带练习sql】 第3张右连接B表独有+共有部分SELECT FROM TableA A RIGHT JOIN TableB B ON A.Key = B.Key;
          【MySQL高级】MySQL表的七种连接方式【附带练习sql】 第4张A的独有SELECT FROM TableA A LEFT JOIN TableB B ON A.Key = B.Key WHERE B.Key IS NULL;
          【MySQL高级】MySQL表的七种连接方式【附带练习sql】 第5张B的独有SELECT FROM TableA A RIGHT JOIN TableB B ON A.Key = B.Key WHERE A.Key IS NULL;
          【MySQL高级】MySQL表的七种连接方式【附带练习sql】 第6张全连接A的独有+共有部分+B的独有SELECT FROM TableA A FULL OUTER JOIN TableB B ON A.Key = B.Key; MySQL不支持FULL OUTER JOIN这种语法
          【MySQL高级】MySQL表的七种连接方式【附带练习sql】 第7张A独有+B独有SELECT FROM TableA A FULL OUTER JOIN TableB B ON A.Key = B.Key WHERE A.Key IS NULL OR B.Key IS NULL; MySQL不支持FULL OUTER JOIN这种语法

          练习

          建表+存储数据

          CREATE TABLE `tbl_emp` (
          `id` int(11) NOT NULL AUTO_INCREMENT,
          `name` varchar(20) DEFAULT NULL,
          `deptId` int(11) DEFAULT NULL,
          PRIMARY KEY (`id`) ,
          KEY `fk_dept_id`(`deptId`)
          )ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8;
          CREATE TABLE `tbl_dept` (
          `id` int(11) NOT NULL AUTO_INCREMENT,
          `deptName` varchar(30) DEFAULT NULL,
          `locAdd` varchar(40) DEFAULT NULL,
          PRIMARY KEY (`id`)
          ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8;
          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);
          insert into tbl_emp(NAME,deptId) values('s9',51);
          

          【MySQL高级】MySQL表的七种连接方式【附带练习sql】 第8张

          【MySQL高级】MySQL表的七种连接方式【附带练习sql】 第9张

          笛卡尔积

          select * from tbl_emp,tbl_dept;
          

          5条数据和8条数据两两组合,一共40条,结果如下

          "id"       "name"     "deptId"    "id"      "deptName"   "locAdd"
          "1"        "z3"        "1"        "5"        "FD"        "15"
          "1"        "z3"        "1"        "4"        "MIS"        "14"
          "1"        "z3"        "1"        "3"        "MK"        "13"
          "1"        "z3"        "1"        "2"        "HR"        "12"
          "1"        "z3"        "1"        "1"        "RD"        "11"
          "2"        "z4"        "1"        "5"        "FD"        "15"
          "2"        "z4"        "1"        "4"        "MIS"        "14"
          "2"        "z4"        "1"        "3"        "MK"        "13"
          "2"        "z4"        "1"        "2"        "HR"        "12"
          "2"        "z4"        "1"        "1"        "RD"        "11"
          "3"        "z5"        "1"        "5"        "FD"        "15"
          "3"        "z5"        "1"        "4"        "MIS"        "14"
          "3"        "z5"        "1"        "3"        "MK"        "13"
          "3"        "z5"        "1"        "2"        "HR"        "12"
          "3"        "z5"        "1"        "1"        "RD"        "11"
          "4"        "w5"        "2"        "5"        "FD"        "15"
          "4"        "w5"        "2"        "4"        "MIS"        "14"
          "4"        "w5"        "2"        "3"        "MK"        "13"
          "4"        "w5"        "2"        "2"        "HR"        "12"
          "4"        "w5"        "2"        "1"        "RD"        "11"
          "5"        "w6"        "2"        "5"        "FD"        "15"
          "5"        "w6"        "2"        "4"        "MIS"        "14"
          "5"        "w6"        "2"        "3"        "MK"        "13"
          "5"        "w6"        "2"        "2"        "HR"        "12"
          "5"        "w6"        "2"        "1"        "RD"        "11"
          "6"        "s7"        "3"        "5"        "FD"        "15"
          "6"        "s7"        "3"        "4"        "MIS"        "14"
          "6"        "s7"        "3"        "3"        "MK"        "13"
          "6"        "s7"        "3"        "2"        "HR"        "12"
          "6"        "s7"        "3"        "1"        "RD"        "11"
          "7"        "s8"        "4"        "5"        "FD"        "15"
          "7"        "s8"        "4"        "4"        "MIS"        "14"
          "7"        "s8"        "4"        "3"        "MK"        "13"
          "7"        "s8"        "4"        "2"        "HR"        "12"
          "7"        "s8"        "4"        "1"        "RD"        "11"
          "8"        "s9"        "51"        "5"        "FD"        "15"
          "8"        "s9"        "51"        "4"        "MIS"        "14"
          "8"        "s9"        "51"        "3"        "MK"        "13"
          "8"        "s9"        "51"        "2"        "HR"        "12"
          "8"        "s9"        "51"        "1"        "RD"        "11"
          

          内连接

          SELECT * FROM tbl_emp a INNER JOIN tbl_dept b ON a.deptId = b.id;
          

          【MySQL高级】MySQL表的七种连接方式【附带练习sql】 第10张

          【MySQL高级】MySQL表的七种连接方式【附带练习sql】 第11张

          左连接

          SELECT * FROM tbl_emp a LEFT JOIN tbl_dept b ON a.deptId = b.id;
          

          【MySQL高级】MySQL表的七种连接方式【附带练习sql】 第12张

          【MySQL高级】MySQL表的七种连接方式【附带练习sql】 第13张

          右连接

          SELECT * FROM tbl_emp a RIGHT JOIN tbl_dept b ON a.deptId = b.id;
          

          【MySQL高级】MySQL表的七种连接方式【附带练习sql】 第14张

          【MySQL高级】MySQL表的七种连接方式【附带练习sql】 第15张

          A表独有

          【MySQL高级】MySQL表的七种连接方式【附带练习sql】 第16张

          【MySQL高级】MySQL表的七种连接方式【附带练习sql】 第17张

          SELECT * FROM tbl_emp a LEFT JOIN tbl_dept b ON a.deptId = b.id WHERE b.id is null;
          

          【MySQL高级】MySQL表的七种连接方式【附带练习sql】 第18张

          B表独有

          SELECT * FROM tbl_emp a RIGHT JOIN tbl_dept b ON a.deptId = b.id WHERE a.deptId is null;
          

          【MySQL高级】MySQL表的七种连接方式【附带练习sql】 第19张

          【MySQL高级】MySQL表的七种连接方式【附带练习sql】 第20张

          全连接

          【MySQL高级】MySQL表的七种连接方式【附带练习sql】 第21张

          【MySQL高级】MySQL表的七种连接方式【附带练习sql】 第22张

          尝试换一种方式实现:A的独有+共有+B的独有

          实现方式一:左连接+右连接+公共部分去重
          SELECT * FROM tbl_emp a LEFT JOIN tbl_dept b ON a.deptId = b.id 
          UNION 
          SELECT * FROM tbl_emp a RIGHT JOIN tbl_dept b ON a.deptId = b.id;
          

          【MySQL高级】MySQL表的七种连接方式【附带练习sql】 第23张

          实现方式二:左连接+B独有
          SELECT * FROM tbl_emp a LEFT JOIN tbl_dept b ON a.deptId = b.id 
          UNION 
          SELECT * FROM tbl_emp a RIGHT JOIN tbl_dept b ON a.deptId = b.id WHERE a.deptId is null;
          

          A独有+B独有

          【MySQL高级】MySQL表的七种连接方式【附带练习sql】 第24张

          SELECT * FROM tbl_emp a LEFT JOIN tbl_dept b ON a.deptId = b.id WHERE b.id is null 
          UNION 
          SELECT * FROM tbl_emp a RIGHT JOIN tbl_dept b ON a.deptId = b.id WHERE a.deptId is null;
          

          【MySQL高级】MySQL表的七种连接方式【附带练习sql】 第25张

          文章说明

          本文章为本人学习尚硅谷的学习笔记,文章中大部分内容来源于尚硅谷视频(点击学习尚硅谷相关课程),也有部分内容来自于自己的思考,发布文章是想帮助其他学习的人更方便地整理自己的笔记或者直接通过文章学习相关知识,如有侵权请联系删除,最后对尚硅谷的优质课程表示感谢。


免责声明
1、本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明。
2、本网站转载文章仅为传播更多信息之目的,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所
提供信息的准确性及可靠性,但不保证信息的正确性和完整性,且不对因信息的不正确或遗漏导致的任何
损失或损害承担责任。
3、任何透过本网站网页而链接及得到的资讯、产品及服务,本网站概不负责,亦不负任何法律责任。
4、本网站所刊发、转载的文章,其版权均归原作者所有,如其他媒体、网站或个人从本网下载使用,请在
转载有关文章时务必尊重该文章的著作权,保留本网注明的“稿件来源”,并白负版权等法律责任。

手机扫描二维码访问

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

发表评论

快捷回复: 表情:
评论列表 (暂无评论,6769人围观)

还没有评论,来说两句吧...

目录[+]