SQL inner join, join, left join, right join, full outer join
基本信息
创建两个表a1, a2。
两个表的重要差别是:
a1中有5,'wu',a2中没有。a2中有4,'li',而a1中没有。


创建表和插入数据的代码如下:
-- 创建a1表
create table a1(
userid integer PRIMARY KEY,
username varchar(20)
);
-- 创建a2表
create table a2(
userid integer primary key,
username varchar(20)
);
insert into a1 values(1,'he');
insert into a1 values(2,'xiao');
insert into a1 values(3,'zhang');
insert into a1 values(5,'wu');
insert into a2 values(3,'zhang');
insert into a2 values(2,'xiao');
insert into a2 values(1,'he');
insert into a2 values(4,'li');
left join, right join
left join 是左外联,完整的写法是left outer join。 这种连接,会把左表的一切保留,用右侧去匹配,匹配不了的为null。如:
select a1.userid, a2.userid from a1 left join a2 on a1.userid=a2.userid;
得到的结果是:

注意到最后一行,左表a1的5被保留,而右表a2没有与之对应的,因此为空。
右连接也一样,只不过把右表中的保留,左表去匹配,对不上的为null。
select a1.userid, a2.userid from a1 right join a2 on a1.userid=a2.userid;

full outer join
全外连接是把左右两边匹配,并且两边都保留,匹配不上就是null。
select a1.userid, a2.userid from a1 full outer join a2 on a1.userid=a2.userid;
得到的结果是:

注意后两行,都被保留了。这是与接下来inner join 最大的不同,inner join 会把这些匹配不上的都去掉。
inner join
注意如果不写任何left, rigth, full, inner, 只写一个join, 那么等同于Inner join. 即: join 全等于 inner join。 另外得到笛卡尔集再用where筛选,也可以获取到和inner join 一样的效果。详看最后一节。
inner join 会把左右匹配不上的都去掉,只保留那些匹配得上的。
select a1.userid, a2.userid from a1 inner join a2 on a1.userid=a2.userid;

笛卡尔集
以下代码,由于没有匹配和相等的列,因此会把所有可能的序列都列出来。
select a1.userid, a2.userid from a1,a2;

如果添加上where的条件筛选,就跟 inner join等同。
select a1.userid, a2.userid from a1,a2 where a1.userid=a2.userid;

SQL inner join, join, left join, right join, full outer join的更多相关文章
- SQL的JOIN语法解析(inner join, left join, right join, full outer join的区别)
原文链接:http://www.powerxing.com/sql-join/ 总的来说,四种JOIN的使用/区别可以描述为: left join 会从左表(shop)那里返回所有的记录,即使在右表( ...
- SQL中的left outer join,inner join,right outer join用法详解
这两天,在研究SQL语法中的inner join多表查询语法的用法,通过学习,发现一个SQL命令,竟然涉及到很多线性代数方面的知识,现将这些知识系统地记录如下: 使用关系代数合并数据1 关系代数合并数 ...
- SQL OUTER JOIN
When we want to select out all the record from two table, no matter it's present at second table or ...
- 009-Hadoop Hive sql语法详解4-DQL 操作:数据查询SQL-select、join、union、udtf
一.基本的Select 操作 语法SELECT [ALL | DISTINCT] select_expr, select_expr, ...FROM table_reference[WHERE whe ...
- SQL:OUTER JOIN使用方法具体解释
SQL--JOIN使用方法 外联接. 外联接能够是左向外联接.右向外联接或完整外部联接. 在 FROM 子句中指定外联接时,能够由下列几组keyword中的一组指定: LEFT JOIN 或 LEF ...
- left join 和 left outer join 的区别
left join 和 left outer join 的区别 通俗的讲: A left join B 的连接的记录数与A表的记录数同 A right join ...
- HIVE中join、semi join、outer join
补充说明 left outer join where is not null与left semi join的联系与区别:两者均可实现exists in操作,不同的是,前者允许右表的字段在select或 ...
- hive 包含操作(left semi join)(left outer join = in)迪卡尔积
目前hive不支持 in或not in 中包含查询子句的语法,所以只能通过left join实现. 假设有一个登陆表login(当天登陆记录,只有一个uid),和一个用户注册表regusers(当天注 ...
- inner join, left join, right join, full outer join的区别
总的来说,四种join的区别可以描述为: left join 会从左表(shop)那里返回所有的记录,即使在右表(sale_detail)中没有匹配的行. right outer join 右连接,返 ...
- sqlite数据库执行full outer join
sqlite数据库执行full outer join时提示:RIGHT and FULL OUTER JOINs are not currently supported. sqlite数据库不支持(+ ...
随机推荐
- MySQL学习之SQL基础(一)DDL
Sql基础 DDL (data defination language) 创建表 CREATE TABLE emp( ename varchar(10), hiredate date, sal dec ...
- push 和 append 以及appendchild 用法和区别
push() 给数组添加元素,并且返回数组长度 如 : arr.push('a') append() 是jq写法,添加节点到指定父级节点的子节点列表末尾 appendchild() 是append原生 ...
- vue - data 接收 props 的值
<template> <div> <div v-for="todo in a" :key="todo.id"> ...
- 062、Java中的方法重载
01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ...
- delphi 讲的比较详细的多线程(推荐)
在了解多线程之前我们先了解一下进程和线程的关系 一个程序至少有一个主进程,一个进程至少有一个线程. 为了保证线程的安全性请大家看看下面介绍 Delphi多线程同步的一些处理方案大家可以参考:http: ...
- 吴裕雄 Bootstrap 前端框架开发——Bootstrap 字体图标(Glyphicons):glyphicon glyphicon-asterisk
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...
- 吴裕雄 Bootstrap 前端框架开发——Bootstrap 辅助类:屏幕阅读器
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- NOR Flash驱动
驱动程序 1 ] ] );81 ;83 }84 85 86 static void __exit nor_exit(void)87 {88 iounmap(nor_ ...
- C语言中可变参数的原理——printf()函数
函数原型: int printf(const char *format[,argument]...) 返 回 值: 成功则返回实际输出的字符数,失败返回-1. 函数说明: 使用过C语言的人所再熟悉不过 ...
- S7-300 实训3 异步电机正反转控制
含有视频 方便以后查阅 参考书籍 跟我动手学 S7-300/400 PLC 第2版 廖常初 主编 实训3 异步电动机 正反转控制 步骤1 步骤2 在 cycle execution 前方 右击 插入 ...