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. 《HTML&CSS design and build websites》学习笔记(1)

    Chapter 1: Structure Chapter 2: Text <head>表示标题,默认显示在第一行. <title>表示抬头,显示在浏览器的标签页,还有窗口栏. ...

  2. 安装Nexus到Linux(源码)

    运行环境 系统版本:CentOS Linux release 7.4.1708 (Core) 软件版本:Sonatype-Nexus-3.14.0 硬件要求:无 安装过程 1. 调整系统参数 需要调整 ...

  3. 简单聊聊CSS中的3D技术之“立方体”

    简单聊聊CSS中的3D技术之“立方体” 大家好,我是今天的男一号,我叫小博主. 今天来聊一下我在前端“逆战班”学习中遇到的颇为有趣的3D知识.前端学习3周,见识稀疏,在下面的分享中如有不对的地方请大家 ...

  4. opencv —— 读取并播放视频 VideoCapture capture("C:/1.mp4");

    VideoCapture 读入视频的方法有两种: ①先实例化再初始化:VideoCapture capture:capture.open("C:/Users/齐明洋/Desktop/1.mp ...

  5. scrapy框架爬取多级页面

    spides.py # -*- coding: utf-8 -*- import scrapy from weather.items import WeatherItem from scrapy.cr ...

  6. IP后面带/30 /29 /27等是什么意思?

    那个代表你网络的位数,也就是能判断子网掩码.比如30 说明就是11111111.11111111.11111111.11111100 (30个1,2个0)然后转换成十进制就是255.255.255.2 ...

  7. JS基础-内置对象【字符串+Date+Math】

    JS内置对象[字符串] // charAt() 返回字符 // charCodeAt() 返回字符的unicode编码 var str="hello world"; console ...

  8. ng--tolist说明

    起步 下载模板: git clone https://github.com/tastejs/todomvc-app-template.git --depth 1 初始化项目: ng new todom ...

  9. SQL Tuning Health-Check Script (SQLHC) (文档 ID 1366133.1)

    Login to the database server and set the environment used by the Database Instance Download the &quo ...

  10. STM32CubeMX自建MDK工程的基本步骤

    根据需要调节各总线频率 最下方选项,√去掉,不用实时更新库,选择自己库所在路径就好. 点击左侧, 选择"Code Generator", 选择.c 和 .h文件不分开 最后,点击& ...