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。

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

JOIN(INNER JOIN)

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

JOIN语法

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

执行SQL语句

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

输出结果如下

  1. +----+---------+----+---------+
  2. | id | name | id | address |
  3. +----+---------+----+---------+
  4. | 1 | Google | 1 | USA |
  5. | 2 | Alibaba | 2 | CN |
  6. | 4 | PingCAP | 4 | CN |
  7. +----+---------+----+---------+

LEFT JOIN(LEFT OUTER JOIN)

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

LEFT JOIN 语法

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

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

执行SQL语句

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

输出结果如下

  1. +----+---------+------+---------+
  2. | id | name | id | address |
  3. +----+---------+------+---------+
  4. | 1 | Google | 1 | USA |
  5. | 2 | Alibaba | 2 | CN |
  6. | 3 | Oracle | NULL | NULL |
  7. | 4 | PingCAP | 4 | CN |
  8. +----+---------+------+---------+

RIGHT JOIN(RIGHT OUTER JOIN)

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

RIGHT JOIN语法

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

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

执行SQL语句

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

输出结果如下

  1. +------+---------+----+---------+
  2. | id | name | id | address |
  3. +------+---------+----+---------+
  4. | 1 | Google | 1 | USA |
  5. | 2 | Alibaba | 2 | CN |
  6. | 4 | PingCAP | 4 | CN |
  7. | NULL | NULL | 5 | UK |
  8. +------+---------+----+---------+

FULL OUTER JOIN

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

FULL OUTER JOIN语法

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

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

执行SQL语句

  1. 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. 回炉重造之重读Windows核心编程-004-进程

    进程是一个正在运行的程序的实例,由内核对象和地址空间组成.进程是不活泼的,执行地址空间中代码的是在它的环境中运行线程.每个线程都需要自己的一组CPU寄存器和堆栈. 为了让所有线程都能运行,操作系统就要 ...

  2. [CodeIgniter4]讲解-启动流程

    https://codeigniter.org.cn/forums/thread-31030-1-1.html CodeIgniter 是一个小巧但功能强大的 PHP 框架,作为一个简单而“优雅”的工 ...

  3. Excel 2016双击文件打开后是空白,再次双击才能打开(或者通过文件,打开才能打开)

    问题描述: 直接双击excel文件打开后是空白的,几乎所有功能都无法使用.但是再次双击该文件能够打开,或者通过文件 --> 打开的方式才能打开. 虽说能够打开文件,但是对于咱们这种追求完美的人来 ...

  4. C# WPF简况(2/3)

    微信公众号:Dotnet9,网站:Dotnet9,问题或建议:请网站留言, 如果对您有所帮助:欢迎赞赏. C# WPF简况(2/3) 阅读导航 本文背景 代码实现 本文参考 1.本文背景 承接上文(C ...

  5. MATLAB实例:二元高斯分布图

    MATLAB实例:二元高斯分布图 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 1. MATLAB程序 %% demo Multivariate No ...

  6. day 15 内置函数

    内置函数 不用def定义能直接用的函数,带括号的 locals() # 返回本地作用域中的所有名字 globals() # 返回全局作用域中的所有名字 global 变量 nonlocal 变量 迭代 ...

  7. Zabbbix之十二------Zabbix实现微信报警通知及创建聚合图形

    实战一:实现zabbix监控微信报警 1.在企业微信上注册账号 1.注册企业微信,管理员需要写上自己的真实姓名,扫描以下的二维码,与微信关联真实姓名. 2.登陆企业微信,然后创建一个微信故障通知应用 ...

  8. python学习随笔2:python判断和循环

    1.if-else _username = 'heyue' _password = ' username = input("username:") password = input ...

  9. JAVA 递归线程池测试 ExecutorService / ForkJoinPool

    测试工具使用递归的方式获取子进程的Msg消息,目前有2种常用的ExecutorService / ForkJoinPool 为了测试哪种效果较好,我们来写个测试Demo,循环5555555次+1(加锁 ...

  10. Vue开发环境跨域访问

    Vue开发环境跨域访问其他服务器或者本机其他端口,需要配置项目中config/index.js文件,修改如下 module.exports = { dev: { // Paths assetsSubD ...