SQL语法(UNION,JOIN)
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)的更多相关文章
- 使用or展开进行sql优化(即sql语法union all代替or可以提高效率)
问题: 这样一条sql应该怎么优化? select * from sys_user where user_code = 'zhangyong' or user_code in (select grp_ ...
- Linq to SQL 语法查询(链接查询,子查询 & in操作 & join,分组统计等)
Linq to SQL 语法查询(链接查询,子查询 & in操作 & join,分组统计等) 子查询 描述:查询订单数超过5的顾客信息 查询句法: var 子查询 = from c i ...
- sql语法:inner join on, left join on, right join on详细使用方法
inner join(等值连接) 只返回两个表中联结字段相等的行 left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右表中的所有 ...
- 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 ...
- sql语法:inner join on, left join on, right join on具体用法
inner join(等值连接) 仅仅返回两个表中联结字段相等的行 left join(左联接) 返回包含左表中的全部记录和右表中联结字段相等的记录 right join(右联接) 返回包含右表中的全 ...
- SQL中的JOIN语法详解
参考以下两篇博客: 第一个是 sql语法:inner join on, left join on, right join on详细使用方法 讲了 inner join, left join, righ ...
- [转]MySQL 最基本的SQL语法/语句
MySQL 最基本的SQL语法/语句,使用mysql的朋友可以参考下. DDL-数据定义语言(Create,Alter,Drop,DECLARE) DML-数据操纵语言(Select,Delete ...
- SQL语法整理
SQL是Structured Query Language的缩写,中文全名为结构化查询语言,是一种用于数据存储,查询,更新和管理的关系数据库系统. SQL语法 创建表 create table tab ...
- [Android新手区] SQLite 操作详解--SQL语法
该文章完全摘自转自:北大青鸟[Android新手区] SQLite 操作详解--SQL语法 :http://home.bdqn.cn/thread-49363-1-1.html SQLite库可以解 ...
随机推荐
- C# monitor keyboard and print pressed key
using System; using System.Windows.Forms; using System.Runtime.InteropServices; using System.Diagnos ...
- 正则表达式之match方法
一直以来,对正则表达式都是非常的恐惧的,以至于学习接口自动化时,到了正则,我就想放弃,于是乎,我将近有一个多月没有继续学习.某天睡醒,阳光正好,摊在床上冥想,我不能被眼前的坎挡住了我前进的路呀,说干就 ...
- 洛谷P1880 [NOI1995]石子合并 纪中21日c组T4 2119. 【2016-12-30普及组模拟】环状石子归并
洛谷P1880 石子合并 纪中2119. 环状石子归并 洛谷传送门 题目描述1 在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石 ...
- 吴裕雄--天生自然HADOOP操作实验学习笔记:mapreduce和yarn命令
实验目的 了解集群运行的原理 学习mapred和yarn脚本原理 学习使用Hadoop命令提交mapreduce程序 学习对mapred.yarn脚本进行基本操作 实验原理 1.hadoop的shel ...
- Lucene使用IKAnalyzer分词
1.分析器 所有分析器最终继承的类都是Analyzer 1.1 默认标准分析器:StandardAnalyzer 在我们创建索引的时候,我们使用到了Index ...
- sql 根据查询的记录生成序号的几种方式
row_number() order() 函数会为查询出来的每一行记录生成一个序号,依次排序且不会重复,注意使用row_number函数时必须要用over子句选择对某一列进行排序才能生成序号. ra ...
- JN_0012:win10的开机启动文件夹
1,登录所有用户时都能开机启动的启动文件夹.所有用户通用的开机启动文件夹地址是 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp ...
- 再访JavaScript对象(原型链和闭包)
一:原型链简介 JavaScript通常被描述为基于原型的语言 (从继承机制的角度)- 为了提供继承,对象(注意:区别于实例)可以拥有一个原型对象,它充当一个模板对象,它继承了方法和属性.对象的原型对 ...
- Docker学习参考网站
Docker——从入门到实践 https://www.yuque.com/grasilife/docker 2.阿里源网站:https://cr.console.aliyun.com 3.DaoClo ...
- PAT (Advanced Level) Practice 1036 Boys vs Girls (25 分)
This time you are asked to tell the difference between the lowest grade of all the male students and ...