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

这篇具有很好参考价值的文章主要介绍了【MYSQL高级】Mysql 表的七种连接方式【附带练习sql】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

连接

七种JOIN介绍

图形 连接方式 说明 SQL
mysql表连接,MYSQL,sql,mysql,数据库 内连接 共有部分 SELECT <select_list> FROM TableA A INNER JOIN TableB B ON A.Key = B.Key;
mysql表连接,MYSQL,sql,mysql,数据库 左连接 A表独有+共有部分 SELECT <select_list> FROM TableA A LEFT JOIN TableB B ON A.Key = B.Key;
mysql表连接,MYSQL,sql,mysql,数据库 右连接 B表独有+共有部分 SELECT <select_list> FROM TableA A RIGHT JOIN TableB B ON A.Key = B.Key;
mysql表连接,MYSQL,sql,mysql,数据库 A的独有 SELECT <select_list> FROM TableA A LEFT JOIN TableB B ON A.Key = B.Key WHERE B.Key IS NULL;
mysql表连接,MYSQL,sql,mysql,数据库 B的独有 SELECT <select_list> FROM TableA A RIGHT JOIN TableB B ON A.Key = B.Key WHERE A.Key IS NULL;
mysql表连接,MYSQL,sql,mysql,数据库 全连接 A的独有+共有部分+B的独有 SELECT <select_list> FROM TableA A FULL OUTER JOIN TableB B ON A.Key = B.Key; MySQL不支持FULL OUTER JOIN这种语法
mysql表连接,MYSQL,sql,mysql,数据库 A独有+B独有 SELECT <select_list> 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,mysql,数据库

mysql表连接,MYSQL,sql,mysql,数据库

笛卡尔积

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,mysql,数据库

mysql表连接,MYSQL,sql,mysql,数据库

左连接

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

mysql表连接,MYSQL,sql,mysql,数据库

mysql表连接,MYSQL,sql,mysql,数据库

右连接

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

mysql表连接,MYSQL,sql,mysql,数据库

mysql表连接,MYSQL,sql,mysql,数据库

A表独有

mysql表连接,MYSQL,sql,mysql,数据库

mysql表连接,MYSQL,sql,mysql,数据库

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

mysql表连接,MYSQL,sql,mysql,数据库

B表独有

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

mysql表连接,MYSQL,sql,mysql,数据库

mysql表连接,MYSQL,sql,mysql,数据库

全连接

mysql表连接,MYSQL,sql,mysql,数据库

mysql表连接,MYSQL,sql,mysql,数据库

尝试换一种方式实现: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,mysql,数据库

实现方式二:左连接+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,mysql,数据库

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,mysql,数据库

文章说明

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

到了这里,关于【MYSQL高级】Mysql 表的七种连接方式【附带练习sql】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 理解MySQL七种连接

    如上图是MySQL的七种连接 由于MySQ对于外连接支持SQL99语法,我们就以JOIN...ON举例    表t_dept                                                                                   表t_emp   1.内连接:A表,B表交叉的部分  INNER可省略,执行结果如下   2.左外连接:A表,

    2023年04月08日
    浏览(19)
  • MySQL表的高级增删改查

    聚合查询是针对行与行之间的计算,常见的聚合函数有: 函数 作用 COUNT(expr) 查询数据的数量 SUM(expr) 查询数据的总和 AVG(expr) 查询数据的平均值 MAX(expr) 查询数据的最大值 MIN(expr) 查询数据的最小值 count函数: 顾名思义,count函数就是用来统计我们表的行数的。 但注意的是,我

    2024年02月21日
    浏览(21)
  • 【MySQL】表的内外连接

    目录 一、内连接 二、外连接 1、左外连接 2、右外连接  内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选,我们前面学习的查询都是内连接,也是在开发过程中使用的最多的连接查询。 语法: 案例:显示SMITH的名字和部门名称 。 如果联合查询,左侧的表完

    2024年02月12日
    浏览(20)
  • 【MySql】表的内连接和外连接

    本篇博客主要介绍的内容是表的连接,在MySql中表的连接分为内连接和外连接,下面,我们直接进入主题把 内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选 ,我们前面学习的查询都是内连接,也是在开发过程中使用的最多的连接查询。 对于内连接,我们还是

    2024年02月10日
    浏览(31)
  • MySQL四种备份表的方式

    好久没有发布文章啦,直接上内容! 一、将表备份到物理机 二、将表备份在库里面(create复制表结构、insert复制表内容)  三、将表备份在库里面(create table as备份) 注:与2步骤备份在库里面不同的是 as 备份表不会备份主键和外键,只备份表数据  四、大家都知道日志文件

    2024年02月03日
    浏览(24)
  • 【MySQL】表的内外连接和视图

    表的连接分为内连和外连。 内连接实际上就是利用 where 子句对两种表形成的笛卡尔积进行筛选,我们前面学习的查询都是内连接,也是在开发过程中使用的最多的连接查询。 语法: 例如: 显示 JAMES 的名字和部门名称 用前面的写法直接用笛卡尔积: 用标准的内连接写法:

    2024年01月24日
    浏览(27)
  • Java连接MySQL实现增删改查--学生管理系统(附带注释源码!!!)

    项目源代码分享 Java的安装 java.jdk 3.8 安装Eclipse MySQL的安装 Navicat (测试使用的是 11. 1.13) 先了解整体流程再学具体代码,附件中代码都有注释 数据库的连接 数据准备 提前导入jar包 在工程下先新建一个 lib文件夹 把jar包复制进去然后右键构建路径 ,点击添加至构建路径,如

    2024年01月24日
    浏览(34)
  • 【MySQL系列】表的内连接和外连接学习

    「前言」文章内容大致是对MySQL表的内连接和外连接。 「归属专栏」MySQL 「主页链接」个人主页 「笔者」枫叶先生(fy) 内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选,前面篇章学习的查询都是内连 接,也是在开发过程中使用的最多的连接查询 内连接语法如

    2024年02月11日
    浏览(21)
  • SQL的七种JOIN

    在使用 join 时, on 和 where 条件的区别如下: on 条件是在生成临时表时使用的条件,它不管 on 中的条件是否为真,都会返回左边表中的记录。 where 条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有 join 的含义了,条件不符的就全部过滤掉。 数据准备,我

    2024年04月15日
    浏览(48)
  • pod的七种状态

    Pending(等待中) :当Pod被创建后,它处于等待中的状态。在等待中,Kubernetes正在尝试在节点上分配资源并启动Pod。这可能涉及下载镜像、分配IP地址、执行初始化容器等操作。如果Pod一直处于等待中,可能是由于资源不足、调度问题或其他原因导致。 Running(运行中) :一

    2024年02月05日
    浏览(22)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包