【SQL】【Join基础】了解sql中的join用法,看这一篇就够了
转自: https://www.cnblogs.com/reaptomorrow-flydream/p/8145610.html
SQL JOIN 子句用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段。
最常见的 JOIN 类型:SQL INNER JOIN(简单的 JOIN)、SQL LEFT JOIN、SQL RIGHT JOIN、SQL FULL JOIN,其中前一种是内连接,后三种是外链接。
假设我们有两张表,Table A是左边的表,Table B是右边的表。
id | name |
1 | |
2 | 淘宝 |
3 | 微博 |
4 |
id | address |
1 | 美国 |
5 | 中国 |
3 | 中国 |
6 | 美国 |
INNER JOIN
内连接是最常见的一种连接,只连接匹配的行。
inner join语法
select column_name(s)
from table 1
INNER JOIN table 2
ON
table 1.column_name=table 2.column_name
注释:INNER JOIN与JOIN是相同
INNER JOIN产生的结果集中,是1和2的交集。
select * from Table A inner join Table B
on Table A.id=Table B.id
执行以上SQL输出结果如下:
id | name | address |
1 | 美国 | |
3 | 微博 | 中国 |
LEFT JOIN
LEFT JOIN返回左表的全部行和右表满足ON条件的行,如果左表的行在右表中没有匹配,那么这一行右表中对应数据用NULL代替。
LEFT JOIN 语法
select column_name(s)
from table 1
LEFT JOIN table 2
ON table 1.column_name=table 2.column_name
注释:在某些数据库中,LEFT JOIN 称为LEFT OUTER JOIN
LEFT JOIN产生表1的完全集,而2表中匹配的则有值,没有匹配的则以null值取代。
select * from Table A left join Table B
on Table A.id=Table B.id
执行以上SQL输出结果如下:
id | name | address |
1 | 美国 | |
2 | 淘宝 | null |
3 | 微博 | 中国 |
4 | null |
RIGHT JOIN
RIGHT JOIN返回右表的全部行和左表满足ON条件的行,如果右表的行在左表中没有匹配,那么这一行左表中对应数据用NULL代替。
RIGHT JOIN语法
select column_name(s)
from table 1
RIGHT JOIN table 2
ON table 1.column_name=table 2.column_name
注释:在某些数据库中,RIGHT JOIN 称为RIGHT OUTER JOIN
RIGHT JOIN产生表2的完全集,而1表中匹配的则有值,没有匹配的则以null值取代。
select * from Table A right join Table B
on Table A.id=Table B.id
执行以上SQL输出结果如下:
id | name | address |
1 | 美国 | |
5 | null | 中国 |
3 | 微博 | 中国 |
6 | null | 美国 |
FULL OUTER JOIN
FULL JOIN 会从左表 和右表 那里返回所有的行。如果其中一个表的数据行在另一个表中没有匹配的行,那么对面的数据用NULL代替
FULL OUTER JOIN语法
select column_name(s)
from table 1
FULL OUTER JOIN table 2
ON table 1.column_name=table 2.column_name
FULL OUTER JOIN产生1和2的并集。但是需要注意的是,对于没有匹配的记录,则会以null做为值。
select * from Table A full outer join Table B
on Table A.id=Table B.id
执行以上SQL输出结果如下:
id | name | address |
1 | 美国 | |
2 | 淘宝 | null |
3 | 微博 | 中国 |
4 | null | |
5 | null | 中国 |
6 | null | 美国 |
【SQL】【Join基础】了解sql中的join用法,看这一篇就够了的更多相关文章
- Java中的多线程=你只要看这一篇就够了
如果对什么是线程.什么是进程仍存有疑惑,请先Google之,因为这两个概念不在本文的范围之内. 用多线程只有一个目的,那就是更好的利用cpu的资源,因为所有的多线程代码都可以用单线程来实现.说这个话其 ...
- PL/SQL编程基础——PL/SQL简介
课程教师:李兴华 课程学习者:阳光罗诺 日期:2018-07-28 知识点: 1. 了解PL/SQL的主要特点 2. 掌握PL/SQL块的基本结构 PL/SQL PL/SQL是Oracle在关系数据库 ...
- 面试中问你MySql,这一篇就够了
说一说主键索引与唯一索引 主键是一种约束,唯一索引是一种索引,两者在本质上是不同的. 主键索引默认是聚簇索引.唯一索引一般是非聚簇索引. 主键索引不能为空,唯一索引在InnoDB中可以出现多个null ...
- java 线程基础篇,看这一篇就够了。
前言: Java三大基础框架:集合,线程,io基本是开发必用,面试必问的核心内容,今天我们讲讲线程. 想要把线程理解透彻,这需要具备很多方面的知识和经验,本篇主要是关于线程基础包括线程状态和常用方法. ...
- Python3中的列表用法,看这一篇就够了
类似C语言中的列表用法 ---------------------------------------------------------------------------------------- ...
- 【SQL server基础】SQL视图加密,永久隐藏视图定义的文本
SQL可以对视图进行加密.也就是,可永久隐藏视图定义的文本. 注意 此操作不可逆.加密视图后,无法再修改它,因为无法再看到视图定义.如果需要修改加密视图,则必须删除它并重新创建另一个视图. 示例代 ...
- 【SQL server基础】SQL存储过程和函数的区别
本质上没区别.只是函数有如:只能返回一个变量的限制.而存储过程可以返回多个.而函数是可以嵌入在sql中使用的,可以在select中调用,而存储过程不行.执行的本质都一样. 函数限制比较多,比 ...
- 学习笔记:oracle学习三:SQL语言基础之sql语言简介、用户模式
目录 1.sql语言简介 1.1 sql语言特点 1.2 sql语言分类 1.3 sql语言的编写规则 2.用户模式 2.1 模式与模式对象 2.2 实例模式scott 本系列是作为学习笔记,用于记录 ...
- spark中的pair rdd,看这一篇就够了
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是spark专题的第四篇文章,我们一起来看下Pair RDD. 定义 在之前的文章当中,我们已经熟悉了RDD的相关概念,也了解了RDD基 ...
随机推荐
- cmd强行终止进程
找到某个进程对应的端口号 Netstat -ano|findstr 8080 通过ip 地址,强行 taskkill /PID 11048 但有的情况下终止不了,需要通过下列方式进行 task ...
- Redis入门——Java接口
1. maven配置 <dependency> <groupId>redis.clients</groupId> <artifactId>jedis&l ...
- Axis2之wsdl2java工具
本章主要介绍axis2的wsdl2java工具的使用. Axis2提供了一个wsdl2java命令可以根据WSDL文件自动产生调用WebService的代码.wsdl2java命令可以在<Axi ...
- [转载]SQL Server中的事务与锁
了解事务和锁 事务:保持逻辑数据一致性与可恢复性,必不可少的利器. 锁:多用户访问同一数据库资源时,对访问的先后次序权限管理的一种机制,没有他事务或许将会一塌糊涂,不能保证数据的安全正确读写. 死锁: ...
- 常用linux命令行
1.ls命令 ls -a 列出目录所有文件,包含以.开始的隐藏文件 ls -A 列出除.及..的其它文件 ls -r 反序排列 ls -t 以文件修改时间排序 ls -S 以文件大小排序 ls -h ...
- 基于STM32F4移植W5500官方驱动库ioLibrary_Driver(转)
源: 基于STM32F4移植W5500官方驱动库ioLibrary_Driver 参考: 基于STM32+W5500 的Ethernet和Internet移植 Upgrade W5500 Throug ...
- EDK II之DXE Core框架简介
本文旨在简单的介绍一下DXE阶段的工作原理: UDK2015的开源代码下载:https://github.com/tianocore/tianocore.github.io/wiki/EDK-II D ...
- 开启redis-server提示 # Creating Server TCP listening socket *:6379: bind: Address already in use--解决方法
在bin目录中开启Redis服务器,完整提示如下: 3496:C 25 Apr 00:56:48.717 # Warning: no config file specified, using the ...
- Docker学习笔记之为容器配置网络
0x00 概述 在互联网时代,网络已经成为绝大多数应用进行数据交换的主要通道,Docker 作为集群部署的利器,在网络支持上也下了许多功夫.功能丰富和强大,并不代表使用复杂,在 Docker 的封装下 ...
- CI(CodeIgniter)框架下使用非自带类库实现邮件发送
在项目开发过程中,需要到了邮件提醒功能.首先想到的是CI自身带不带邮件发送类,查看帖子,发现CI本身自带,然后试着利用CI自身带的类库来实现,经过搜搜很多帖子,不少开发者反馈CI自身的Email类有问 ...