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库可以解 ...
随机推荐
- 一、threejs————灯光阴影
threejs设置阴影有三个注意点 1.只有支持阴影的灯光才可以 pointLight,spotlight,directionallight 2.添加摄像机辅助器 THREE.CameraHelper ...
- pgspider gzip fdw试用(集成gzip+http+graphql-engine)
gzip 也是一个在实际中比较有用的处理工具,可以减少数据传输,以下是集成gzip http 以及plv8 的处理 gzip Docker 镜像 Dockerfile FROM dalongrong/ ...
- linux 下生成 ssh 公私钥
生成命令 ssh-keygen -t rsa -C "763941715@qq.com" 密匙目录 cd ~/.ssh 公钥 id_rsa.pub 私钥 id_rsa
- Notes writer Pro
Notes writer Pro pen钢笔和Pencil铅笔发现没啥区别 笔记软件使用说明书: https://www.lanzous.com/i777i3c
- XGBoost学习笔记1
XGBoost XGBoost这个网红大杀器,似乎很好用,完事儿还是自己推导一遍吧,datacamp上面有辅助的课程,但是不太涉及原理 它究竟有多好用呢?我还没用过,先搞清楚原理,hahaha~ 参考 ...
- Mybatis的延迟加载和立即加载
Mybatis的延迟加载和立即加载 示例:在一对多中,当我们有一个用户,他有100个帐户 问题1:在查询用户时,要不要把关联的账户查出来? 问题2:在查询账户时,要不要把关联的用户信息查出来? 问题1 ...
- jdk8配置
Java SE Development Kit 8u241 下载 https://www.oracle.com/java/technologies/javase/javase-jdk8-downloa ...
- Joomla 3.0.0 --> 3.4.6-RCE复现
Joomla是一款网站管理系统CMS,最近曝出其3.00-3.4.6的joomla版本存在一个RCE漏洞. 并且大佬已将exp放在了github上,下载地址:https://www.exploit-d ...
- 从首个IMO季军谈起 作者 : 付云皓
刚刚过去的IMO,中国史无前例地获得了第三名,也是自1997年来近20年首次跌出前二.感谢微信等社交软件,相信现在这个新闻已经以火箭的速度传播了. 作为一个与数学竞赛及IMO打了多年交道的人,我一直有 ...
- Fastbin attack
Fastbin Attack 暂时接触到了两种针对堆分配机制中fastbin的攻击方式,double free和house of spirit Double free 基本原理 与uaf是对free之 ...