SQL语法

union, union all

UNION 操作符用于合并两个或多个 SELECT 语句的结果集。

注意,UNION 内部的每个SELECT语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每个SELECT语句中的列的顺序必须相同。

UNION语法

SELECT column_name(s) FROM table1

UNION

SELECT column_name(s) FROM table2;

注释:默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。

UNION ALL语法

SELECT column_name(s) FROM table1

UNION ALL

SELECT column_name(s) FROM table2;

注释:UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。

JOIN

举例我们有两张表,t1和t2。

drop database if exists db1;
create database if not exists db1 character set utf8mb4;
use db1; drop table if exists t1;
create table if not exists t1(
`id` int not null primary key,
`name` varchar(10) not null);
insert into t1(`id`,`name`)
values(1,"Google"),(2,"Alibaba"),(3,"Oracle"),(4,"PingCAP"); drop table if exists t2;
create table if not exists t2(
`id` int not null primary key,
`address` varchar(10) not null);
insert into t2(`id`,`address`)
values(1,"USA"),(2,"CN"),(5,"UK"),(4,"CN"); select * from t1 order by `id`;
select * from t2 order by `id`;
+----+---------+
| id | name |
+----+---------+
| 1 | Google |
| 2 | Alibaba |
| 3 | Oracle |
| 4 | PingCAP |
+----+---------+ +----+---------+
| id | address |
+----+---------+
| 1 | USA |
| 2 | CN |
| 4 | CN |
| 5 | UK |
+----+---------+

JOIN(INNER JOIN)

内连接是最常见的一种连接,只连接匹配的行。

JOIN语法

SELECT column_name(s) FROM table1
INNER JOIN table2
ON table1.column_name=table2.column_name

执行SQL语句

select * from t1 join t2 on t1.id = t2.id order by t1.id;

输出结果如下

+----+---------+----+---------+
| id | name | id | address |
+----+---------+----+---------+
| 1 | Google | 1 | USA |
| 2 | Alibaba | 2 | CN |
| 4 | PingCAP | 4 | CN |
+----+---------+----+---------+

LEFT JOIN(LEFT OUTER JOIN)

LEFT JOIN返回左表的全部行和右表满足ON条件的行,如果左表的行在右表中没有匹配,那么这一行右表中对应数据用NULL代替。

LEFT JOIN 语法

SELECT column_name(s) FROM table1
LEFT JOIN table2
ON table1.column_name=table2.column_name

LEFT JOIN产生表1的完全集,而2表中匹配的则有值,没有匹配的则以null值取代。

执行SQL语句

select * from t1 left join t2 on t1.id = t2.id order by t1.id;

输出结果如下

+----+---------+------+---------+
| id | name | id | address |
+----+---------+------+---------+
| 1 | Google | 1 | USA |
| 2 | Alibaba | 2 | CN |
| 3 | Oracle | NULL | NULL |
| 4 | PingCAP | 4 | CN |
+----+---------+------+---------+

RIGHT JOIN(RIGHT OUTER JOIN)

RIGHT JOIN返回右表的全部行和左表满足ON条件的行,如果右表的行在左表中没有匹配,那么这一行左表中对应数据用NULL代替。

RIGHT JOIN语法

SELECT column_name(s) FROM table1
RIGHT JOIN table2
ON table1.column_name=table2.column_name

RIGHT JOIN产生表2的完全集,而1表中匹配的则有值,没有匹配的则以null值取代。

执行SQL语句

select * from t1 right join t2 on t1.id = t2.id order by t2.id;

输出结果如下

+------+---------+----+---------+
| id | name | id | address |
+------+---------+----+---------+
| 1 | Google | 1 | USA |
| 2 | Alibaba | 2 | CN |
| 4 | PingCAP | 4 | CN |
| NULL | NULL | 5 | UK |
+------+---------+----+---------+

FULL OUTER JOIN

FULL JOIN 会从左表和右表那里返回所有的行。如果其中一个表的数据行在另一个表中没有匹配的行,那么对面的数据用NULL代替。

FULL OUTER JOIN语法

SELECT column_name(s) FROM table1
FULL OUTER JOIN table2
ON table1.column_name=table2.column_name

FULL OUTER JOIN产生1和2的并集。但是需要注意的是,对于没有匹配的记录,则会以null做为值。

执行SQL语句

select * from t1 full outer join t2 on t1.id = t2.id order by t1.id;

SQL语法(UNION,JOIN)的更多相关文章

  1. 使用or展开进行sql优化(即sql语法union all代替or可以提高效率)

    问题: 这样一条sql应该怎么优化? select * from sys_user where user_code = 'zhangyong' or user_code in (select grp_ ...

  2. Linq to SQL 语法查询(链接查询,子查询 & in操作 & join,分组统计等)

    Linq to SQL 语法查询(链接查询,子查询 & in操作 & join,分组统计等) 子查询 描述:查询订单数超过5的顾客信息 查询句法: var 子查询 = from c i ...

  3. sql语法:inner join on, left join on, right join on详细使用方法

    inner join(等值连接) 只返回两个表中联结字段相等的行 left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右表中的所有 ...

  4. SQL的inner join、left join、right join、full outer join、union、union all

    主题: SQL的inner join.left join.right join.full outer join.union.union all的学习. Table A和Table B表如下所示: 表A ...

  5. sql语法:inner join on, left join on, right join on具体用法

    inner join(等值连接) 仅仅返回两个表中联结字段相等的行 left join(左联接) 返回包含左表中的全部记录和右表中联结字段相等的记录 right join(右联接) 返回包含右表中的全 ...

  6. SQL中的JOIN语法详解

    参考以下两篇博客: 第一个是 sql语法:inner join on, left join on, right join on详细使用方法 讲了 inner join, left join, righ ...

  7. [转]MySQL 最基本的SQL语法/语句

    MySQL 最基本的SQL语法/语句,使用mysql的朋友可以参考下.   DDL-数据定义语言(Create,Alter,Drop,DECLARE) DML-数据操纵语言(Select,Delete ...

  8. SQL语法整理

    SQL是Structured Query Language的缩写,中文全名为结构化查询语言,是一种用于数据存储,查询,更新和管理的关系数据库系统. SQL语法 创建表 create table tab ...

  9. [Android新手区] SQLite 操作详解--SQL语法

    该文章完全摘自转自:北大青鸟[Android新手区] SQLite 操作详解--SQL语法  :http://home.bdqn.cn/thread-49363-1-1.html SQLite库可以解 ...

随机推荐

  1. Oracle修改用户Profile SESSIONS_PER_USER 限制

    一.Profile目的: Oracle系统中的profile可以用来对用户所能使用的数据库资源进行限制,使用Create Profile命令创建一个Profile,用它来实现对数据库资源的限制使用,如 ...

  2. XSS之Beef的使用

    0x01 Beef简介 BeEF是The Browser Exploitation Framework的缩写.它是一种专注于Web浏览器的渗透测试工具. beef管理.挂钩web浏览器的过程: 生成交 ...

  3. memcached与redis比较

    1- memcached介绍 Memcached是一个自由开源的,高性能,分布式内存对象缓存系统. Memcached是以LiveJournal旗下Danga Interactive公司的Brad F ...

  4. bootstrap支持ie8 让IE6 IE7 IE8 IE9 IE10 IE11支持Bootstrap的解决方法

    做一个在线系统,PC端也要做,但要兼容千恶的IE8[IE6 是万恶,打死我都不会管IE6],IE8 是我底线了md, 在IE8下 bottstrap 错乱,变形,不支持一些属性的问题,下面看了一篇 某 ...

  5. 分享10个免费或便宜的Photoshop替代工具

    说到编辑照片和图像文件,一般很多人都使用photoshop软件.然而,使用现在的最新版本Photoshop CC每月最低也要支付980日元,感觉使用门槛有点高的人应该不少吧. 有一篇文章,推荐了10个 ...

  6. 项目启动时报错:java.io.EOFException

    解决方案 删除Tomcat里面的work\Catalina\localhost下的项目文件内容即可解决 问题原因 原因是由于项目测试中class文件或者其它文件更新过频繁

  7. C#简单的LogHelper

    适用于不想使用log4net等第三方的Log工具的LogHelper.正规的还是要使用<C# 工具类LogHelper>的这种做法. using System; using System. ...

  8. SVN提交更新文件,抛出"svn: No such revision 27106"异常问题处理

    SVN,不管是更新或者是提交原来存在的文件,都会抛出此异常"svn: No such revision 27106",注意,是原来存在的文件,要是新增的文件,不会出现此问题. 百度 ...

  9. linux笔记-硬件命令【2】

    1- 磁盘 1.1- 查看电脑磁盘类型 cat /sys/block/sda/queue/rotational 0 #固态盘 cat /sys/block/sdb/queue/rotational 1 ...

  10. 手写数字识别——基于LeNet-5卷积网络模型

    在<手写数字识别——利用Keras高层API快速搭建并优化网络模型>一文中,我们搭建了全连接层网络,准确率达到0.98,但是这种网络的参数量达到了近24万个.本文将搭建LeNet-5网络, ...