sql语句中的full join具体是怎么回事啊?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql语句中的full join具体是怎么回事啊?相关的知识,希望对你有一定的参考价值。

麻烦说地生动和详细些,谢谢另外,麻烦给个例子讲解下了。万分感谢~~

1、Join有时为了得到完整的结果,需要从两个或更多的表中获取结果。就需要执行join数据库中的表可通过键将彼此联系起来。主键(Primary Key)是一个列,在这个列中的每一行的值都是唯一的。

2、引用两个表,可以通过引用两个表的方式,从两个表中获取数据。

3、SQL INNER JOIN 关键字,在表中存在至少一个匹配时,INNER JOIN 关键字返回行。

4、SQL LEFT JOIN 关键字,LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行。

5、最后SQL RIGHT JOIN 关键字,RIGHT JOIN 关键字会右表 (table_name2) 那里返回所有的行,即使在左表 (table_name1) 中没有匹配的行。

参考技术A 简单明了地说,外连接分三种,即左连接(LEFT OUTER JOIN)、右连接(RIGHT OUTER JOIN)、全连接(FULL OUTER JOIN),下面就简单解析一下,假设有A和B两张表。1.A LEFT OUTER JOIN B表示把A表的记录都显示出来,把B表符合条件的结果集显示出来,不符合条件的用NULL表示。2.A RIGHT OUTER JOIN B表示把B表的记录都显示出来,把A表符合条件的结果集显示出来,不符合条件的用NULL表示。3.A FULL OUTER JOIN B 表示把A表和B表的记录都显示出来,不符合条件的用NULL表示。 参考技术B [TEST@ORA1] SQL>select * from a;

编号 姓名
---- ----------
1000 张三
2000 李四
3000 王五

[TEST@ORA1] SQL>select * from b;

编号 商品
---- ----------
1000 电视机
2000 录像机
4000 自行车

[TEST@ORA1] SQL>set null 空值--这里为了显示方面我把NULL定义成了[空值]

[TEST@ORA1] SQL>select a.*,b.* from a inner join b on a.编号=b.编号;

编号 姓名 编号 商品
---- ---------- ---- ----------
1000 张三 1000 电视机
2000 李四 2000 录像机

[TEST@ORA1] SQL>select a.*,b.* from a left join b on a.编号=b.编号;

编号 姓名 编号 商品
---- ---------- ---- ----------
1000 张三 1000 电视机
2000 李四 2000 录像机
3000 王五 空值 空值

[TEST@ORA1] SQL>select a.*,b.* from a right join b on a.编号=b.编号;

编号 姓名 编号 商品
---- ---------- ---- ----------
1000 张三 1000 电视机
2000 李四 2000 录像机
空值 空值 4000 自行车

[TEST@ORA1] SQL>select a.*,b.* from a full join b on a.编号=b.编号;

编号 姓名 编号 商品
---- ---------- ---- ----------
1000 张三 1000 电视机
2000 李四 2000 录像机
3000 王五 空值 空值
空值 空值 4000 自行车

---
以上,希望对你有所帮助。
参考技术C

SQL FULL OUTER JOIN 关键字

FULL OUTER JOIN 关键字只要左表(table1)和右表(table2)其中一个表中存在匹配,则返回行.

FULL OUTER JOIN 关键字结合了 LEFT JOIN 和 RIGHT JOIN 的结果。

具体用法参考:

from 树懒学堂-免费数据知识学习平台

参考技术D 若要通过在联接的结果中包括不匹配的行来保留不匹配信息,请使用完全外部联接。SQL Server 提供了完全外部联接运算符 FULL OUTER JOIN,它将包括两个表中的所有行,不论另一个表中是否有匹配的值。考虑通过 ProductID 列联接 Product 表和 SalesOrderDetail 表。结果只显示有销售订单的产品。ISO FULL OUTER JOIN 运算符指明:不管表中是否有匹配的数据,结果中都将包括两个表中的所有行。您可以在完全外部联接中包括 WHERE 子句,仅返回两表之间没有匹配数据的行。以下查询只返回没有匹配销售订单的产品以及没有匹配产品的销售订单(虽然本例中所有销售订单都有匹配的产品)。 http://msdn.microsoft.com/zh-cn/library/ms187518.aspx

mysql的几种join 及 full join 问题

【注:本文转自 https://blog.csdn.net/u012410733/article/details/63684663】

【注意】:Oracle数据库支持full join,mysql是不支持full join的,但仍然可以同过左外连接+ union+右外连接实现

初始化SQL语句:

/*join 建表语句*/
drop database if exists test;
create database test;
use test;
 
/* 左表t1*/
drop table if exists t1;
create table t1 (id int not null,name varchar(20));
insert into t1 values (1,t1a);
insert into t1 values (2,t1b);
insert into t1 values (3,t1c);
insert into t1 values (4,t1d);
insert into t1 values (5,t1f);
 
/* 右表 t2*/
drop table if exists t2;
create table t2 (id int not null,name varchar(20));
insert into t2 values (2,t2b);
insert into t2 values (3,t2c);
insert into t2 values (4,t2d);
insert into t2 values (5,t2f);
insert into t2 values (6,t2a);

 

1、笛卡尔积

两表关联,把左表的列和右表的列通过笛卡尔积的形式表达出来。

mysql> select * from t1 join t2;

 技术图片

 

2、左连接

两表关联,左表全部保留,右表关联不上用null表示。

mysql> select * from t1 left join t2 on t1.id = t2.id;

技术图片


技术图片

 

3、右连接

右表全部保留,左表关联不上的用null表示。

技术图片

mysql> select * from t1 right join t2 on t1.id =t2.id;

 技术图片

 

4、内连接

两表关联,保留两表中交集的记录。

技术图片

mysql> select * from t1 inner join t2 on t1.id = t2.id;

 技术图片

 

5、左表独有

两表关联,查询左表独有的数据。

技术图片

mysql> select * from t1 left join t2 on t1.id = t2.id where t2.id is null;

 技术图片

 

6、右表独有

两表关联,查询右表独有的数据。

技术图片

mysql> select * from t1 right join t2 on t1.id = t2.id where t1.id is  null;

 技术图片

 

7、全连接

两表关联,查询它们的所有记录。

技术图片

oracle里面有full join,但是在mysql中没有full join。我们可以使用union来达到目的。

mysql> select * from t1 left join t2 on t1.id = t2.id
    -> union 
    -> select * from t1 right join t2 on t1.id = t2.id;

 技术图片

 

8、并集去交集

两表关联,取并集然后去交集。

技术图片

mysql> select * from t1 left join t2 on t1.id = t2.id where t2.id is null
    -> union 
    -> select * from t1 right join t2 on t1.id = t2.id where t1.id is null;

 技术图片

以上是关于sql语句中的full join具体是怎么回事啊?的主要内容,如果未能解决你的问题,请参考以下文章

sql2005数据库只能执行查询语句不能执行删除语句是怎么回事啊,请问有没有遇到这个问题的朋友,执行delete

sql怎么把两张表合并成一张

SQL的JOIN语法解析(inner join, left join, right join, full outer join的区别)

SQL 中 exists 是怎么回事啊 怎么用啊 老师没讲懂 呵呵 高手都来帮忙啊

请高手解答几个sql的join的问题的疑惑。我用的是MSSqlserver。

SQL语句中的declare 是啥意思,具体怎么用啊