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库可以解 ...
随机推荐
- mssql sqlserver 如何将一个日期数据转换为"年份-月份"的格式呢?
摘要: 下文讲述在sqlserver数据库中,将日期数据转换为指定格式的方法分享,如下所示: 实验环境:sqlserver 2008 R2 实现思路: 实现方法1: 使用year函数和month函数获 ...
- windows本地安装Oracle数据库
一.下载Oracle 11g R2 for Windows. 官方网站: https://www.oracle.com/database/technologies/oracle-database-so ...
- SWIG 3 中文手册——10. 参数处理
目录 10 参数处理 10.1 typemaps.i 库 10.1.1 引言 10.1.2 输入参数 10.1.3 输出参数 10.1.4 输入 / 输出参数 10.1.5 使用不同的名称 10.2 ...
- go 函数传递结构体
我定义了一个结构体,想要在函数中改变结构体的值,记录一下,以防忘记 ep: type Matrix struct{ rowlen int columnlen int list []int } 这是一个 ...
- MySql优化之主从复制
第一步: 配置节点信息(配置完毕重启mysql) 找到my.cnf配置文件,这个文件在etc目录下使用命令修改my.cnf文件 vi /etc/my.cnf 主节点配置: server-id =55 ...
- 又一种获取redis cluster slots分布的小脚本
需要:昨晚学习了cluster slots命令,之前写的脚本,有可以换种方法获取到redis cluster slots 分布情况. cluster slots的结果如下: 4 5460 5.5.5. ...
- kafka消费服务调优
1.消费服务速度跟不上 2.top -H 观察是哪个线程最忙 3.多次使用jstack,看看最忙的那个线程在做什么
- Windows添加管理员用户
使用命令提示符添加用户并提升管理员权限 net user 查看当前所有系统用户 net user dan 123456 /add 添加用户名为dan 密码为123456的用户 net localgro ...
- selenium webdriver执行远程 第三方js解决方案
今天一个朋友问我问题 考虑了下直接上代码,这是伪代码不能执行,但是给出了思路 代码 url = 'http://www.qingmiaokeji.cn/test.js' res = urllib.re ...
- PAT - A1073
1073 Scientific Notation (20point(s)) 小数点移动的边界条件 小数点左移 超过数据左边界 小数点右移 未超过数据右边界 超过数据右边界 +0.1E+2 --> ...