MySQL实现全关联 full outer join
SQL LEFT JOIN 关键字
LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行。
LEFT JOIN 关键字语法
SELECT column_name(s)
FROM table_name1
LEFT JOIN table_name2
ON table_name1.column_name=table_name2.column_name
注释:在某些数据库中, LEFT JOIN 称为 LEFT OUTER JOIN。
SQL RIGHT JOIN 关键字
RIGHT JOIN 关键字会右表 (table_name2) 那里返回所有的行,即使在左表 (table_name1) 中没有匹配的行。
RIGHT JOIN 关键字语法
SELECT column_name(s)
FROM table_name1
RIGHT JOIN table_name2
ON table_name1.column_name=table_name2.column_name
注释:在某些数据库中, RIGHT JOIN 称为 RIGHT OUTER JOIN。
SQL FULL JOIN 关键字
只要其中某个表存在匹配,FULL JOIN 关键字就会返回行。
FULL JOIN 关键字语法
SELECT column_name(s)
FROM table_name1
FULL JOIN table_name2
ON table_name1.column_name=table_name2.column_name
注释:在某些数据库中, FULL JOIN 称为 FULL OUTER JOIN。
很苦恼 MySQL不支持全关联,只能实现左右关联,通过观察左右关联的结果数据发现,我们可以根据左右关联的结果实现 全关联:
思路很简单:
左关联结果表:
tempa
右关联结果表:
tempb
全关联结果表:
select * from (
select * from tempa
union
select * from tempb) c;
用例验证:
1.建表语句(基础表)
drop table if exists data_stock1;
create table data_stock (account varchar(10),amount1 int,init_date varchar(20));
INSERT INTO `data_stock1` VALUES ('', 210, '');
INSERT INTO `data_stock1` VALUES ('', 70, '');
INSERT INTO `data_stock1` VALUES ('', 200, '');
INSERT INTO `data_stock1` VALUES ('', 30, '');
INSERT INTO `data_stock1` VALUES ('', 10, ''); drop table if exists data_stock1;
create table data_stock (account varchar(10),amount2 int,init_date varchar(20));
INSERT INTO `data_stock2` VALUES ('', 70, '');
INSERT INTO `data_stock2` VALUES ('', 200, '');
INSERT INTO `data_stock2` VALUES ('', 30, '');
INSERT INTO `data_stock2` VALUES ('', 10, '');
INSERT INTO `data_stock2` VALUES ('', 30, '');
2.全联接生成实验
SELECT * from data_stock1 ORDER BY init_date;
SELECT * from data_stock2 ORDER BY init_date;
-- 左联 left JOIN 结果存到临时表
Drop table if EXISTS tempA;
create TABLE tempA(account VARCHAR(10),amount1 int,init_date VARCHAR(20),account1 VARCHAR(10),amount2 int,init_date1 VARCHAR(10)) AS -- 插入的数据
select a.*,b.account as account1,amount2,b.init_date as init_date1 from data_stock1 a LEFT JOIN data_stock2 b
on a.account= b.account and a.init_date=b.init_date; -- 右联 right JOIN 存到临时表
Drop table if EXISTS tempB;
create TABLE tempB(account VARCHAR(10),amount1 int,init_date VARCHAR(20),account1 VARCHAR(10),amount2 int,init_date1 VARCHAR(10)) AS
-- 插入的数据
select a.*,b.account as account1,amount2,b.init_date as init_date1 from data_stock1 a RIGHT JOIN data_stock2 b
on a.account= b.account and a.init_date=b.init_date; -- 全联 full outer JOIN
Drop table if EXISTS tempc;
create table tempc(account VARCHAR(10),amount1 int,init_date VARCHAR(20),account1 VARCHAR(10),amount2 int,init_date1 VARCHAR(10)) AS
-- 插入的数据 SELECT * from (
select * from tempa
union
SELECT * from tempb) b;


3.后续操作,计算amount1 + amount2
SELECT IFNULL(account,account1),IFNULL(init_date,init_date1), IFNULL(amount1,0)+IFNULL(amount1,0) AS
total from tempc where (account=account1) and (init_date=init_date1) ;

MySQL实现全关联 full outer join的更多相关文章
- Mysql多表表关联查询 inner Join left join right join
Mysql多表表关联查询 inner Join left join right join
- 关联Left Outer Join的第一条记录
数据准备 CREATE TABLE person (person_id ), lastname )) / INSERT ALL INTO person (person_id, firstname, l ...
- MySQL高级知识(二)——Join查询
前言:该篇主要对MySQL中join语句的七种情况进行总结. 0.准备 join主要根据两表或多表之间列的关系,从这些表中进行数据的查询. 首先创建两张表:tb_emp(员工表)和tb_dept(部门 ...
- Linq表连接大全(INNER JOIN、LEFT OUTER JOIN、RIGHT OUTER JOIN、FULL OUTER JOIN、CROSS JOIN)
我们知道在SQL中一共有五种JOIN操作:INNER JOIN.LEFT OUTER JOIN.RIGHT OUTER JOIN.FULL OUTER JOIN.CROSS JOIN 1>先创建 ...
- SQL FULL OUTER JOIN 关键字
SQL FULL OUTER JOIN 关键字 SQL FULL OUTER JOIN 关键字 FULL OUTER JOIN 关键字只要左表(table1)和右表(table2)其中一个表中存在匹配 ...
- mysql inner join,full outer join,left join,right jion
https://sites.google.com/site/349624yu/courses/mysql/mysqldbgjzcx inner join,full outer join,left jo ...
- oracle 内连接(inner join)、外连接(outer join)、全连接(full join)
转自:https://premier9527.iteye.com/blog/1659689 建表语句: create table EMPLOYEE(EID NUMBER,DEPTID NUMBER,E ...
- SQL Fundamentals || 多表查询(内连接,外连接(LEFT|RIGHT|FULL OUTER JOIN),自身关联,ON,USING,集合运算UNION)
SQL Fundamentals || Oracle SQL语言 一.多表查询基本语法 在进行多表连接查询的时候,由于数据库内部的处理机制,会产生一些“无用”的数据,而这些数据就称为笛卡尔积. 多表查 ...
- mysql实现full outer join
由于MySQL设计时不支持full outer join, 所以如果有全连接需求时,需要一点小技巧来实现. 假设有两个表t1,t2 full outer join 的效果和下面的效果一样: SELEC ...
随机推荐
- 【jQuery】 JQ和HTML以及JQ遍历元素
JQ & HTML JQ作为一个JS库,很好地继承了JS和HTML互动的特点,并且还给出了包装得更好,操作层次更高的方法.和之前JQ的内容一样,方法的表现形式是$(selector).acti ...
- 【Python】 html解析BeautifulSoup
BeautifulSoup bs是个html解析模块,常用来做爬虫? ■ 安装 BeautifulSoup可以通过pip来安装,用pip install beautifulsoup4 即可.但是仅仅这 ...
- python实现维吉利亚密码加密(Vigenère cipher)
最近有个朋友问我关于维吉利亚密码如何用python实现加密,研究之后发现这是个挺好玩的东西,遂决定写篇博文记录一下. 一.何谓维吉利亚密码 第一列是密钥字母列,第一行是明文字母行.不难看出维吉利亚密码 ...
- MySQL使用和操作总结
简介 MySQL是一种DBMS,即它是一种数据库软件.DBMS可分为两类:一类是基于共享文件系统的DBMS,另一类是基于客户机——服务器的DBMS.前者用于桌面用途,通常不用于高端或更关键应用. My ...
- postman简单教程-环境变量,全局变量的设置及作用
讲postman环境变量设置之前,先讲一个小插曲,环境变量.全局变量的区别在于Globals,只能用一组,而Environmen可以设置多组,所以我更喜欢设置环境变量 1.环境变量-Environme ...
- iptables.sh 初始化防火墙配置
#!/bin/bash iptables -F iptables -X iptables -Z iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT ...
- 爬虫(scrapy--豆瓣TOP250)
# -*- coding: utf-8 -*- import scrapy from douban_top250.items import DoubanTop250Item class MovieSp ...
- java中的IO 的示例
字符流 package jd_1; import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.FileNot ...
- (译文)开始学习Vue——构建你的第一个Vue应用
我们要构建如下组件:(最终代码在这里:https://codesandbox.io/s/38k1y8x375) 开始 Vue是支持单文件组件的,但是我们不准备这么做.你也可以构建一个全局的组件,通过V ...
- 通过cmd命令行连接mysql数据库
找到 mysqld.exe所在的路径 使用cd切换到msyqld.exe路径下 输入mysql连接命令,格式如下 Mysql -P 端口号 -h mysql主机名\ip -u root (用户) ...