2 Star 0 Fork 0

wscaco3 / mysql_tech

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
joinjie_shao.md 2.55 KB
一键复制 编辑 原始数据 按行查看 历史
wscaco3 提交于 2015-11-21 09:51 . Update joinjie_shao.md

join介绍

##sql标准中的join类型

  • 内连接 inner
  • 全外连接 full outer
  • 左外连接 left outer
  • 右外连接 right outer
  • 交叉连接 cross

join 的简写

  • inner join 的简写 join
  • left outer join 的简写 left join
  • right outer join 的简写 right join

##inner join SELECT * FROM TableA INNER JOIN TableB ON TableA.name = TableB.name

例子

SELECT a.user_name,a.over,b.over FROM user1 a JOIN user2 b ON a.user_name = b.user_name;

| user_name | over | over | |--|--| | 孙悟空 | 斗战圣佛 | 成佛 |

left outer join

SELECT * FROM TableA LEFT OUTER JOIN TableB ON TableA.name = TableB.name

SELECT * FROM TableA LEFT OUTER JOIN TableB ON TableA.name = TableB.name WHERE TableB.id IS null

例子

SELECT a.user_name,a.over,b.over FROM user1 a LEFT JOIN user2 b ON a.user_name = b.user_name
user_name over over
孙悟空 斗战圣佛 成佛
唐僧 旃檀功德佛 NULL
猪八戒 净坛使者 NULL
沙僧 金身罗汉 NULL

right outer join

与左连接类似,链接反向相反。

full outer join

SELECT * FROM TableA FULL OUTER JOIN TableB ON TableA.name = TableB.name

SELECT * FROM TableA FULL OUTER JOIN TableB ON TableA.name = TableB.name 
WHERE TableA.id IS null OR TableB.id IS null

mysql不支持full join的解决方案 使用union all

SELECT a.user_name,a.over,b.over FROM user1 a left join user2 b ON a.user_name = b.user_name 
union all 
select b.user_name,b.over,a.over from user1 a right join user2 b on b.user_name = a.user_name;
user_name over over
孙悟空 斗战圣佛 成佛
唐僧 旃檀功德佛 NULL
猪八戒 净坛使者 NULL
沙僧 金身罗汉 NULL
孙悟空 成佛 斗战圣佛
牛魔王 被降伏 NULL
蛟魔王 被降伏 NULL
鹏魔王 被降伏 NULL
狮驼王 被降伏 NULL

cross join

SELECT * FROM TableA CROSS JOIN TableB

这个笛卡尔乘积会产生 4 x 5 = 16 条记录,一般来说,我们很少用到这个语法。但是我们得小心,如果不是使用嵌套的select语句,一般系统都会产生笛卡尔乘积然再做过滤。这是对于性能来说是非常危险的,尤其是表很大的时候。

马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/wscaco3/mysql_tech.git
git@gitee.com:wscaco3/mysql_tech.git
wscaco3
mysql_tech
mysql_tech
master

搜索帮助

344bd9b3 5694891 D2dac590 5694891