MySQL Join 类型

1 Join 类型有哪些

SQL Join 类型的区别
image.png

  • Inner Join: 左,右表都有的数据
  • Left Join: 左表返回所有的行, 右表没有的补充为 NULL
  • Right Loin: 右表返回所有的行, 左表没有的补充为 NULL
  • Full Outer Join: 左表 + 右表 所有数据

用户表:
image.png
答题表:
image.png

2 Inner Join

查询左表 和 右表都有的数据
用户表 user_no = 1000 和 答题表 user_no = 6543 , 不在交集范围, 没有在查询出来

-- inner join --
select tup.user_no, tup.university, tqpd.question_id, tqpd.result  
    from t_user_profile tup inner join t_question_practice_detail tqpd  
        on tup.user_no = tqpd.user_no;

image.png

3 Left Join

左表返回所有的行, 右表没有的补充为 NULL
用户表 user_no = 1000 对应的答题信息为空, 补充 NULL, 答题表 user_no = 6543 不在查询范围

-- left join --
select tup.user_no, tup.university, tqpd.question_id, tqpd.result  
    from t_user_profile tup left join t_question_practice_detail tqpd  
        on tup.user_no = tqpd.user_no;

image.png

4 Right Join

右表返回所有的行, 左表没有的补充为 NULL
答题表 user_no = 6543 对应的用户信息为空, 补充 NULL, 用户表 user_no = 1000 不在查询范围

-- right join --  
select tup.user_no, tup.university, tqpd.question_id, tqpd.result  
    from t_user_profile tup right join t_question_practice_detail tqpd  
        on tup.user_no = tqpd.user_no;

image.png

5 Full Join

在 MySQL 中没有 Full Join, 可以用 left join 和 right join 实现
用户表 user_no = 1000 对应的答题信息补充 NULL, 答题表 user_no = 6543 对应的用户信息补充 NULL

-- left join and right join --  
select tup.user_no, tup.university, tqpd.question_id, tqpd.result  
    from t_user_profile tup left join t_question_practice_detail tqpd  
        on tup.user_no = tqpd.user_no  
union  
select tup.user_no, tup.university, tqpd.question_id, tqpd.result  
    from t_user_profile tup right join t_question_practice_detail tqpd  
        on tup.user_no = tqpd.user_no;

image.png

  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL中的JOIN是一种用于将多个表连接起来的操作。它允许我们从不同的表中检索数据,并将它们根据指定的条件组合在一起。MySQL中有几种不同的JOIN类型,包括内连接、左外连接、右外连接和全外连接。 1. 内连接(INNER JOIN)是最常用的JOIN类型。它只返回那些在两个表中都存在的记录。在MySQL中,INNER JOIN关键字用于指定两个表之间的连接条件。以下是一个内连接的示例: SELECT * FROM table1 INNER JOIN table2 ON table1.key = table2.key; 这将返回两个表中key值相等的记录。 2. 左外连接(LEFT JOIN)返回左边表中的所有记录,以及与右边表中符合条件的记录。如果右边表中没有与左边表中的记录匹配的记录,则结果中的右边表列将包含NULL值。以下是一个左外连接的示例: SELECT * FROM table1 LEFT JOIN table2 ON table1.key = table2.key; 这将返回左边表中的所有记录,并且如果右边表中有与之匹配的记录,则返回匹配的记录,否则返回NULL值。 3. 右外连接(RIGHT JOIN)与左外连接类似,只是左右表的顺序颠倒。它返回右边表中的所有记录,以及与左边表中符合条件的记录。如果左边表中没有与右边表中的记录匹配的记录,则结果中的左边表列将包含NULL值。以下是一个右外连接的示例: SELECT * FROM table1 RIGHT JOIN table2 ON table1.key = table2.key; 这将返回右边表中的所有记录,并且如果左边表中有与之匹配的记录,则返回匹配的记录,否则返回NULL值。 4. 全外连接(FULL OUTER JOIN)返回两个表中的所有记录,无论它们是否匹配。如果某个表中的记录在另一个表中没有匹配的记录,则结果中的相应列将包含NULL值。MySQL中并没有直接支持全外连接的语法,但可以使用UNION操作符结合左外连接和右外连接来实现全外连接的效果。 SELECT * FROM table1 LEFT JOIN table2 ON table1.key = table2.key UNION SELECT * FROM table1 RIGHT JOIN table2 ON table1.key = table2.key; 这将返回两个表中的所有记录,并且如果有匹配的记录,则返回匹配的记录。 总结起来,MySQL中的JOIN操作允许我们根据指定的条件将多个表连接在一起,并检索所需的数据。具体使用哪种JOIN类型取决于我们需要的结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值