美文网首页
数据库操作2 - join从句的使用

数据库操作2 - join从句的使用

作者: ChenME | 来源:发表于2020-02-16 16:35 被阅读0次

1. 内连接(inner join):将两张表公共的部分连接起来(取两张表的交集:A∩B)

-- select <select_list> from table_a a inner join table_b b on a.key = b.key;

select u1.user_name, u1.role role1, u2.role role2 from user1 u1 inner join user2 u2 on u1.user_name = u2.user_name;

-- 女帝 路飞の爱妻 王下七武海
1 inner join.png

2. 全外连接(full outer)

  1. A+B
-- select <select_list> from table_a a full outer join table_b b on a.key = b.key;(A+B)

-- 由于 MySql 中不支持全连接,所以使用 union all 来解决

select u1.user_name, u1.role role1, u2.role role2 from user1 u1 left join user2 u2 on u1.user_name = u2.user_name
union all
select u2.user_name, u1.role role1, u2.role role2 from user1 u1 right join user2 u2 on u1.user_name = u2.user_name;

-- 女帝 路飞の爱妻 王下七武海
-- 路飞 草帽の船长 null
-- 娜美 草帽航海士 null
-- 乔巴 草帽の船医 null
-- 女帝 路飞の爱妻 王下七武海
-- 红发 null  四皇成员一
-- 帝奇 null  四皇成员一
-- 百兽 null  四皇成员一
-- 玲玲 null  四皇成员一
2 full join 1.png
  1. (A+B)-(A∩B)
-- select <select_list> from table_a a full outer join table_b b on a.key = b.key where a.key is null or b.key is null;((A+B)-(A∩B))

-- 同理,也使用 union all 来解决

select u1.user_name, u1.role role1, u2.role role2 from user1 u1 left join user2 u2 on u1.user_name = u2.user_name where u2.role is null
union all
select u2.user_name, u1.role role1, u2.role role2 from user1 u1 right join user2 u2 on u1.user_name = u2.user_name where u1.role is null;

-- 路飞 草帽の船长 null
-- 娜美 草帽航海士 null
-- 乔巴 草帽の船医 null
-- 红发 null  四皇成员一
-- 帝奇 null  四皇成员一
-- 百兽 null  四皇成员一
-- 玲玲 null  四皇成员一
2 full join 2.png

3. 左外连接(left outer)

  1. 查询出来a表全部记录:A
-- select <select_list> from table_a a left join table_b b on a.key = b.key;(查询出来a表全部记录:A)

select u1.user_name, u1.role role1, u2.role role2 from user1 u1 left join user2 u2 on u1.user_name = u2.user_name;

-- 女帝 路飞の爱妻 王下七武海
-- 路飞 草帽の船长 null
-- 娜美 草帽航海士 null
-- 乔巴 草帽の船医 null
3 left join 1.png
  1. 只存在于a表,不存在于b表中的数据:A-B
--select <select_list> from table_a a left join table_b b on a.key = b.key where b.key is null;(只存在于a表,不存在于b表中的数据:A-B)

select u1.user_name, u1.role role1, u2.role role2 from user1 u1 left join user2 u2 on u1.user_name = u2.user_name where u2.role is null;

-- 路飞 草帽の船长 null
-- 娜美 草帽航海士 null
-- 乔巴 草帽の船医 null
3 left join 2.png

4. 右外连接(right outer)

  1. 查询出来b表全部记录:B
-- select <select_list> from table_a a right join table_b b on a.key = b.key;(查询出来a表全部记录:B)

select u2.user_name, u1.role role1, u2.role role2 from user1 u1 right join user2 u2 on u1.user_name = u2.user_name;

-- 女帝 路飞の爱妻 王下七武海
-- 红发 null  四皇成员一
-- 帝奇 null  四皇成员一
-- 百兽 null  四皇成员一
-- 玲玲 null  四皇成员一
4 right join 1.png
  1. 只存在于b表,不存在于b表中的数据:B-A
-- select <select_list> from table_a a right join table_b b on a.key = b.key where a.key is null;(只存在于a表,不存在于b表中的数据:B-A)

select u2.user_name, u1.role role1, u2.role role2 from user1 u1 right join user2 u2 on u1.user_name = u2.user_name where u1.role is null;

-- 红发 null  四皇成员一
-- 帝奇 null  四皇成员一
-- 百兽 null  四皇成员一
-- 玲玲 null  四皇成员一
4 right join 2.png

5. 交叉连接(cross),笛卡尔连接(A*B)

select u1.user_name, u1.role, u2.user_name, u2.role from user1 u1 cross join user2 u2; 

-- 结果是 4*5=20 条数据
5 cross join.png

6. join的使用技巧:

假设将 两张表中同时存在的人物role 属性,在 表1 中 改为 女儿岛国王,该如何操作?

update user1 set role = "女儿岛国王" where user1.user_name in 
(select u2.user_name from user1 u1 inner join user2 u2 on u1.user_name = u2.user_name);

-- 很容易想到上面这个语句,但是 MySql 不支持这个语句(1093 错误:不能更新在 from 从句中出现的表)
-- 这时,可以使用下面的方法进行更新

update user1 u1 join 
(select u2.user_name from user1 u1 inner join user2 u2 on u1.user_name = u2.user_name) tmp 
on u1.user_name = tmp.user_name set u1.role = "女儿岛国王";

select * from user1;

-- 1    路飞  草帽の船长
-- 2    娜美  草帽航海士
-- 3    女帝  女儿岛国王
-- 4    乔巴  草帽の船医
6 join 从句使用技巧1.png

相关文章

  • 数据库操作2 - join从句的使用

    1. 内连接(inner join):将两张表公共的部分连接起来(取两张表的交集:A∩B) 2. 全外连接(ful...

  • mysql

    join从句 精彩博文依照上面博文写笔记。 Inner join 内连接 left outer join 使用到...

  • Join从句

    SQL-Join从句 Join从句是SQL中用来处理两张表中关联数据的语句 使用以下两张表table_a和tabl...

  • JOIN从句

    前言 由于师父的缘故,平常获取数据都是从单个表获取,然后再PHP中拼接。自我感觉,对于初学者,这是有好处的,锻炼了...

  • 如何正确的使用join从句

    1、 SQL标准中join的类型 1:内连接。inner. 内连接是基于连接谓词将两张表的列组合在一起,产生新的结...

  • SQL-SQL优化-索引

    图文并茂详解 SQL JOIN Join 是关系型数据库系统的重要操作之一,一般关系型数据库中包含的常用 Join...

  • 一个Spark DataFrame操作的例子

    1 定义数据库连接 2 读取两个表 3 连接 使用join,默认是left out join。条件判断是相等。然后...

  • 【数据库】面试题汇总(持续更新)

    1.数据库中left join与right join,inner join,full join的区别### 2.关...

  • c#数据四种执行方法(ExecuteNonQuery)

    1.使用ExecuteReader()操作数据库 2.使用ExecuteNonQuery()操作数据库 3.使用E...

  • JOIN 把表连接起来

    启动 mysql 创建数据库 创建表 创建记录 使用 inner join left join right joi...

网友评论

      本文标题:数据库操作2 - join从句的使用

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