mysqljoin默认是什么(mysql-joins具体用法说明)
mysqljoin默认是什么
mysql-joins具体用法说明目录
- Join 语法:
- 1、Inner JOIN: (内连接)
- 2、Left JOIN: (左连接)
- 3、Left Excluding JOIN: (左连接排除内连接结果)
- 4、Right JOIN: (右连接)
- 5、Right Excluding JOIN: (右连接排除内连接结果)
- 6、Outer JOIN: (外连接)
- 7、Outer Excluding JOIN: (外连接排除内连接结果)
join对于接触过数据库的人,这个词都不陌生,而且很多人很清楚各种join,还有很多人对这个理解也不是很透彻。
假设我们有两个表,table_a和table_b。这两个表中的数据如下所示:
|
table_a | table_b pk value | pk value ---- ---------- | ---- ---------- 1 fox | 1 trot 2 cop | 2 car 3 taxi | 3 cab 6 washington | 6 monument 7 dell | 7 pc 5 arizona | 8 microsoft 4 lincoln | 9 apple 10 lucent | 11 scotch |
join 语法:
|
join_table: table_reference join table_factor [join_condition] //内连接 | table_reference { left | right | full } [ outer ] join table_reference join_condition //外连接 | table_reference left semi join table_reference join_condition //左半连接 | table_reference cross join table_reference [join_condition] ( as of hive 0.10) table_reference: table_factor //表 | join_table // join 语句 table_factor: tbl_name [alias] //表名[别名] | table_subquery alias //子查寻[别名] | ( table_references ) //带空号的table_reference join_condition: on expression // on 开头的条件语句 |
1、inner join: (内连接)
这是最简单、最容易理解的连接,也是最常见的连接。此查询将返回左表(表a)中具有右表(表b)中匹配记录的所有记录。此连接写成如下:
|
select <select_list> from table_a a inner join table_b b on a. key = b. key |
|
-- inner join select a.pk as a_pk, a.value as a_value, b.value as b_value, b.pk as b_pk from table_a a inner join table_b b on a.pk = b.pk a_pk a_value b_value b_pk ---- ---------- ---------- ---- 1 fox trot 1 2 cop car 2 3 taxi cab 3 6 washington monument 6 7 dell pc 7 (5 row(s) affected) |
2、left join: (左连接)
此查询将返回左表(表a)中的所有记录,而不管这些记录是否与右表(表b)中的任何记录匹配。它还将从正确的表中返回任何匹配的记录。此连接写成如下:
|
select <select_list> from table_a a left join table_b b on a. key = b. key |
|
-- left join select a.pk as a_pk, a.value as a_value, b.value as b_value, b.pk as b_pk from table_a a left join table_b b on a.pk = b.pk a_pk a_value b_value b_pk ---- ---------- ---------- ---- 1 fox trot 1 2 cop car 2 3 taxi cab 3 4 lincoln null null 5 arizona null null 6 washington monument 6 7 dell pc 7 10 lucent null null (8 row(s) affected) |
3、left excluding join: (左连接排除内连接结果)
此查询将返回左表(表a)中与右表(表b)中的任何记录都不匹配的所有记录。此连接写成如下:
|
select <select_list> from table_a a left join table_b b on a. key = b. key where b. key is null |
|
-- left excluding join select a.pk as a_pk, a.value as a_value, b.value as b_value, b.pk as b_pk from table_a a left join table_b b on a.pk = b.pk where b.pk is null a_pk a_value b_value b_pk ---- ---------- ---------- ---- 4 lincoln null null 5 arizona null null 10 lucent null null (3 row(s) affected) |
4、right join: (右连接)
此查询将返回右表(表b)中的所有记录,而不管这些记录中是否有任何记录与左表(表a)中的记录相匹配。它还将返回左表中的任何匹配记录。此连接写成如下:
|
select <select_list> from table_a a right join table_b b on a. key = b. key |
|
-- right join select a.pk as a_pk, a.value as a_value, b.value as b_value, b.pk as b_pk from table_a a right join table_b b on a.pk = b.pk a_pk a_value b_value b_pk ---- ---------- ---------- ---- 1 fox trot 1 2 cop car 2 3 taxi cab 3 6 washington monument 6 7 dell pc 7 null null microsoft 8 null null apple 9 null null scotch 11 (8 row(s) affected) |
5、right excluding join: (右连接排除内连接结果)
此查询将返回右表(表b)中与左表(表a)中的任何记录都不匹配的所有记录。此连接写成如下:
|
select <select_list> from table_a a right join table_b b on a. key = b. key where a. key is null |
|
-- right excluding join select a.pk as a_pk, a.value as a_value, b.value as b_value, b.pk as b_pk from table_a a right join table_b b on a.pk = b.pk where a.pk is null a_pk a_value b_value b_pk ---- ---------- ---------- ---- null null microsoft 8 null null apple 9 null null scotch 11 (3 row(s) affected) |
6、outer join: (外连接)
此联接也可以称为完全外联接或完全联接。此查询将返回两个表中的所有记录,连接左表(表a)中与右表(表b)中的记录相匹配的记录。此连接写成如下:
|
select <select_list> from table_a a full outer join table_b b on a. key = b. key |
|
-- outer join select a.pk as a_pk, a.value as a_value, b.value as b_value, b.pk as b_pk from table_a a full outer join table_b b on a.pk = b.pk a_pk a_value b_value b_pk ---- ---------- ---------- ---- 1 fox trot 1 2 cop car 2 3 taxi cab 3 6 washington monument 6 7 dell pc 7 null null microsoft 8 null null apple 9 null null scotch 11 5 arizona null null 4 lincoln null null 10 lucent null null (11 row(s) affected) |
7、outer excluding join: (外连接排除内连接结果)
此查询将返回左表(表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 |
|
-- outer excluding join select a.pk as a_pk, a.value as a_value, b.value as b_value, b.pk as b_pk from table_a a full outer join table_b b on a.pk = b.pk where a.pk is null or b.pk is null a_pk a_value b_value b_pk ---- ---------- ---------- ---- null null microsoft 8 null null apple 9 null null scotch 11 5 arizona null null 4 lincoln null null 10 lucent null null (6 row(s) affected) |
注意,在外部联接上,首先返回内部连接记录,然后返回右连接记录,最后返回左连接记录(至少,我的microsoft sql server就是这样做的;当然,这不需要使用任何orderby语句)。您可以访问维基百科文章以获得更多信息(但是,条目不是图形化的)。我还创建了一个备忘单,您可以在需要时打印出来。如果您右键单击下面的图像并选择“将目标保存为.”,您将下载完整大小的图像。
到此这篇关于mysql-joins具体用法说明的文章就介绍到这了,更多相关mysql-joins用法内容请搜索开心学习网以前的文章或继续浏览下面的相关文章希望大家以后多多支持开心学习网!
原文链接:https://blog.csdn.net/apple_54172342/article/details/112276917
- mysql的存储性能优化(MySQL的查询缓存和Buffer Pool)
- mysql多表连接优化(浅谈Mysql多表连接查询的执行细节)
- mysql首次登录不上怎么办(Mysql匿名登录无法创建数据库问题解决方案)
- mysql常用四种日志(MySQL 撤销日志与重做日志Undo Log与Redo Log相关总结)
- mysql权限收回(MySQL如何利用DCL管理用户和控制权限)
- mysql5.7.36详细安装(CenOS6.7下mysql 8.0.22 安装配置方法图文教程)
- mysql中怎么删除整张表(MySQL如何优雅的删除大表实例详解)
- mysql自增主键创建过程(深入谈谈MySQL中的自增主键)
- mysql语句性能分析(聊聊MySQL的COUNT*的性能)
- mysql insert into 怎么用(MySQL中INSERT的一般用法)
- windows 安装解压版 mysql5.7.28 winx64的详细教程(windows 安装解压版 mysql5.7.28 winx64的详细教程)
- mysql索引b+树和b树(MySQL使用B+Tree当索引的优势有哪些)
- mysql中json的支持(MySQL中json字段的操作方法)
- mysql修改初始密码教程(使用MySQL命令行修改密码)
- mysql日常运维(MySQL从库维护经验分享)
- mysql变量技巧(mysql用户变量与set语句示例详解)
- 蓝底证件照怎么制作 证件照换底色 换尺寸快速搞定(蓝底证件照怎么制作)
- 你喜欢足球吗 足球如何点亮世界的(足球如何点亮世界的)
- 不可分鸽是什么梗(不可分鸽是什么梗)
- 古代的鸽子是爱情的象征,并非和平的使者(古代的鸽子是爱情的象征)
- 一课译词 放鸽子(一课译词放鸽子)
- 终于来了,淘宝更改账户名测试中,快去看看你能不能修改(淘宝更改账户名测试中)
热门推荐
- pjs计算方式(JS代码编译器Monaco使用方法)
- dede如何联动筛选(dede 标签调用大全 dedecms 隔五行一个分割线等标签调用)
- MySql中date、datetime、time类型的区别
- thinkphp5 新增模块(Thinkphp5.0框架的Db操作实例分析连接、增删改查、链式操作等)
- css分割线使用教程(css实现文章分割线样式的多种方法总结)
- php如何异步操作(php链式操作的实现方式分析)
- 阿里云ecs怎么当成云主机用(阿里云ECS服务器入门使用流程新手必看教程)
- dropdownlist绑定枚举值
- vs中找不到bin文件夹
- dedecms列表栏目使用教程(DedeCMS文章列表每5隔行加横线的实现方法)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9