图解 SQL 各种连接查询之间的区别

摘要:
有许多方法可以使用sql连接语法,例如left和inner。假设我们有两张桌子。有四条记录,其中两条同名,如下所示:让我们看看不同JOIN之间的差异。但是,应该注意,对于不匹配的记录,将使用null作为值。可以使用IFNULL进行判断。

关于sql的join语法 ,有很多种用法,如left,inner等等

   假设我们有两张表。Table A 是左边的表。Table B 是右边的表。其各有四条记录,其中有两条记录name是相同的,如下所示:让我们看看不同JOIN的不同。

图解 SQL 各种连接查询之间的区别第1张

1.  INNER JOIN

SELECT * FROM TableA  INNER JOIN TableB ON TableA.name = TableB.name

图解 SQL 各种连接查询之间的区别第2张

Inner join 产生的结果集中,是A和B的交集。

2. FULL [OUTER] JOIN 

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

图解 SQL 各种连接查询之间的区别第3张

Full outer join 产生A和B的并集。但是需要注意的是,对于没有匹配的记录,则会以null做为值。

可以使用IFNULL判断。

如SELECT * FROM TableA FULL OUTER JOIN TableB ON TableA.name = TableB.name
WHERE TableA.id IS null OR TableB.id IS null:可以查询出A与B的并集去掉A与B的交集的结果集

图解 SQL 各种连接查询之间的区别第4张

3. LEFT [OUTER] JOIN

图解 SQL 各种连接查询之间的区别第5张

 Left outer join 产生表A的完全集,而B表中匹配的则有值,没有匹配的则以null值取代

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

图解 SQL 各种连接查询之间的区别第6张

    产生在A表中有而在B表中没有的集合。

http://blog.csdn.net/xuanjiewu/article/details/50636465

免责声明:文章转载自《图解 SQL 各种连接查询之间的区别》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Crontab 错误分析及不执行原因SQLyog连接MySQL8.0报2058错误的完美解决方法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

SpringBoot+Mybatis---这一篇就够了!

typora-copy-images-to: SpringBoot+Mybatisimages SpringBoot整合MyBatis ------ 既然你都开始整合Mybatis了,我相信基本的SpringBoot项目创建你自己肯定是可以搞定的,所以我在这里就不多赘述了,话不多B,让我们直奔主题 MyBatis---半自动ORM框架 现如今,常见的持久...

mysql查看表中列信息

查看所有数据库中所有表的数据库名和表名 SELECT `TABLES`.`TABLE_SCHEMA`, `TABLES`.`TABLE_NAME` FROM `information_schema`.`TABLES` 查看所有数据库中所有基本表的数据库名和表名 SELECT `TABLES`.`TABLE_SCHEMA`, `TAB...

Javascript 操作select控件大全(新增、修改、删除、选中、清空、判断存在等)

1判断select选项中 是否存在Value="paraValue"的Item  2向select选项中 加入一个Item  3从select选项中 删除一个Item  4删除select中选中的项  5修改select选项中 value="paraValue"的text为"paraText"  6设置select中text="paraText"的第一个I...

MyBatis映射文件(编写SQL语句;可有可无(无的时候,使用注解编程))

 一、映射文件  1.简单的增删改(需要commit)---查 MyBatis允许增删改直接定义以下类型返回值   Integer、Long、Boolean、void 我们需要手动提交数据。   sqlSessionFactory.openSession();===>需要手动提交   sqlSessionFactory.openSession(tr...

常用的sql语句(转)

一、简单查询语句 1. 查看表结构 SQL>DESC emp; 2. 查询所有列 SQL>SELECT * FROM emp; 3. 查询指定列 SQL>SELECT empmo, ename, mgr FROM emp; SQL>SELECT DISTINCT mgr FROM emp; 只显示结果不同的项 4. 查询指定行 S...

ORACLE中能否找到未提交事务的SQL语句

  在Oracle数据库中,我们能否找到未提交事务(uncommit transactin)的SQL语句或其他相关信息呢?  关于这个问题,我们先来看看实验测试吧。实践出真知。   首先,我们在会话1(SID=63)中构造一个未提交的事务,如下所:   SQL> create table test   2  as   3  select * fro...