外链论坛

 找回密码
 立即注册
搜索
查看: 82|回复: 5

数据库连接总结(内连接,外连接,全连接)

[复制链接]

3074

主题

148

回帖

9911万

积分

论坛元老

Rank: 8Rank: 8

积分
99118896
发表于 2024-8-4 09:35:41 | 显示全部楼层 |阅读模式

平常连接类型

归类

本文中运用数据库环境:MySQL 5.7

SQL joins 经典图

准备SQL语句

CREATE TABLE `t_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 `t_dept` ( `id` int(11) NOT NULLAUTO_INCREMENT,`deptName` varchar(30) DEFAULT NULL, `locAdd` varchar(40) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET= utf8;INSERT INTO t_dept(deptName,locAdd) VALUES(开发, 21); INSERT INTO t_dept(deptName,locAdd) VALUES(人力资源部, 22); INSERT INTO t_dept(deptName,locAdd) VALUES(市场部, 23); INSERT INTO t_dept(deptName,locAdd) VALUES(后勤部, 24); INSERT INTO t_dept(deptName,locAdd) VALUES(总经办, 25); INSERT INTO t_emp(NAME, deptId) VALUES(张三, 1); INSERT INTOt_emp(NAME, deptId) VALUES(李四, 1); INSERT INTO t_emp(NAME, deptId) VALUES(王五, 1); INSERT INTO t_emp(NAME, deptId) VALUES(赵六, 2); INSERT INTO t_emp(NAME, deptId) VALUES(刘一, 2); INSERT INTO t_emp(NAME, deptId) VALUES(钱七, 3); INSERT INTO t_emp(NAME, deptId) VALUES(关八, 4); INSERT INTO t_emp(NAME, deptId) VALUES(孙九, 51);

交叉连接(cross join)

交叉联接叫作作笛卡尔积。交叉连接返回左表中的所有行,左表中的每一行与右表中的所有行组合。

实现方式:

(1)隐式交叉连接(CROSS JOIN)

select * from t_dept td ,t_emp te ;

(2)显式交叉连接

select * from t_dept td cross join t_emp te ;

结果:

笛卡尔积结果

内连接 (inner join)

内连接是最常用的连接操作。从数学的方向便是求两个表的交集;从笛卡尔积的方向便是从笛卡尔积中挑出ON子句要求成立的记录。 通常内连接on要求运用=,因此大众觉得内连接便是等值连接。

实现方式:

select * from t_dept td innerjoin t_emp te on td .id > te.id ;

结果:

备注:只是说明一个例子,可能实质业务道理

1.1.1.6. 等值连接 (equijoin)

等值连接是关系运算-连接运算的一种常用的连接方式。是要求连接(或叫作θ连接)在连接运算符为“=”号时,即θ=0时的一个特例;等值连接是一种特殊内连接。

平常的实现方式:

select * from t_dept td inner join t_emp te on td .id = te.deptId ; select * from t_dept td, t_emp te where td .id = te.deptId ; select * from t_dept td joint_emp teon td .id = te.deptId ;

结果如下:

自然连接(natural join)

自然连接是一种特殊的等值连接,它需求两个关系中进行比较的分量必要是相同的属性组(字段),并且在结果中把重复的属性列去掉。

实现方式:

select * from t_dept td natural joint_emp te

结果:

左连接(left join)

左连接的含义便是求两个表左表和右表的交集外加左表剩下的数据。依旧从笛卡尔积的方向讲,便是先从笛卡尔积中挑出ON子句要求成立的记录,而后加上左表中剩余的记录。

实现方式:

select * from t_dept td left join t_emp te ontd .id = te.deptId ;

结果:

右连接

右连接RIGHT JOIN便是求两个表左和右表的交集外加右表B剩下的数据。再次从笛卡尔积的方向描述,右连接便是从笛卡尔积中挑出ON子句要求成立的记录,而后加上右表中剩余的记录。

实现方式:

select * from t_dept td right join t_emp te ontd .id = te.deptId ;

结果:

全连接

全外连接便是求两个表A和B集合的并集。从笛卡尔积的方向便是从笛卡尔积中挑出ON子句要求成立的记录,而后加上左表中剩余的记录,最后加上右表中剩余的记录。另一MySQL不支持OUTER JOIN,然则咱们能够对左连接和右连接的结果做 UNION 操作来实现。

实现方式:

select * from t_dept td left join t_emp te on td .id = te.deptId union select * from t_dept td right join t_emp te on td .id = te.deptId ;

结果:





上一篇:详解区分内连接、左连接、外连接、union、union all等sql连接
下一篇:华中科技大学提出超材料逆向设计新方法
回复

使用道具 举报

1

主题

754

回帖

-3

积分

限制会员

积分
-3
发表于 2024-8-30 03:17:07 | 显示全部楼层
谷歌外贸网站优化技术。
回复

使用道具 举报

0

主题

1万

回帖

1

积分

新手上路

Rank: 1

积分
1
发表于 2024-9-8 07:48:15 | 显示全部楼层
你的话语真是温暖如春,让我心生感激。
回复

使用道具 举报

0

主题

1万

回帖

1

积分

新手上路

Rank: 1

积分
1
发表于 2024-9-8 15:43:30 | 显示全部楼层
同意、说得对、没错、我也是这么想的等。
回复

使用道具 举报

3090

主题

3万

回帖

9909万

积分

论坛元老

Rank: 8Rank: 8

积分
99098764
发表于 2024-10-23 19:03:43 | 显示全部楼层
外贸B2B平台有哪些?
回复

使用道具 举报

3121

主题

3万

回帖

9910万

积分

论坛元老

Rank: 8Rank: 8

积分
99108633
发表于 2024-11-14 00:26:06 | 显示全部楼层
你的见解独到,让我受益匪浅,非常感谢。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站点统计|Archiver|手机版|小黑屋|外链论坛 ( 非经营性网站 )|网站地图

GMT+8, 2024-11-23 02:31 , Processed in 0.103237 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.