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 的结果。
具体用法参考:
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的JOIN语法解析(inner join, left join, right join, full outer join的区别)
SQL 中 exists 是怎么回事啊 怎么用啊 老师没讲懂 呵呵 高手都来帮忙啊