【转】mysql的union、left join、 right join、 inner join和视图学习
1.联合 union 进行多个查询语句时,要求多次查询的结果列数必须一样。此时,查询的结果以第一个sql语句的列名为准且union会自动去重复我们应该使用union all。 例......

1.联合 union 进行多个查询语句时,要求多次查询的结果列数必须一样。此时,查询的结果以第一个sql语句的列名为准且union会自动去重复我们应该使用union all。
例如:
select id,sum(num) from (select * from ta union all select * from tb) as tmp group by id;
select id,sum(num) from (select * from ta union select * from tb);
select id,sum(num) from (select * from ta union select * from tb) as tmp;
请自己测试以上三个语句的结果;
注意:ta和tb的列数必须一样,否则不能写成 select * from ta union select * from tb;*应该替换成具体的字段名;
当子语句的中含有where、order by或limit时,子语句应该用括号括起来。
如:
select id,sum(num) from (select * from taorder by id desc union all select * from tb order by id desc) as tmp group by id; 错误的写法
select id,sum(num) from ((select * from ta order by id desc) union all
(select * from tb order by id desc)) as tmp group by id;
正确的写法,重复了而且得不到想要的结果
select id,sum(num) from ((select * from ta ) union all (select * from tb) order by id desc) as tmp group by id; 一般都是写在合并后
在字句中,只有order by 配合 limit 使用才会有意义,否则会被语法分析器去除。
2.连接 join、left join、right join、inner join左连接、右连接、内连接、外连接(目前MySQL并不支持,但是可以用 左连接+union+连接 实现)
连接的意义是:为了得到更完整的信息(如:学生信息),此时,我需要从更多的表(可能是学生信息表、学生成绩、学生家庭表等)进行查找。
JOIN: 如果表中有至少一个匹配,则返回行。
LEFT JOIN(以左表为基准): 即使右表中没有匹配,也从左表返回所有的行。
RIGHT JOIN(以右表为基准): 即使左表中没有匹配,也从右表返回所有的行。
左连接和有连接是可以互换的。如 ta left join tb =========== tb right join ta 都是表示以ta表为基准进行查询。
可以多次使用连接,但是当重复连接某一张表的时候,我们应该使用 as 给表取别名。
如:selectt1.name,`match_result`,t2.name,`match_time` from ta left jointb
as t1 on ta.host_id=t1.id left join tb as t2 on ta.guest_id =t2.id;
3.视图的学习(可以对一些开发人员访问数据库的权限进行设置,看到该看到的,不该看到的就无法看到,如:sina.qq开发的接口,第三方用户只能使用一些数据)
定义:视图是虚表,是从一个或几个基本表(或视图)中导出的表,在系统的数据字典中仅存放了视图的定义,不存放视图对应的数据。
作用:
简单性(看到的就是需要的)、安全性(通过视图用户只能查询和修改他们所能见到的数据)、大数据分表的时候用到(当一张表的数据量比较大的时候)。使用权限可被限制在基表的行的子集上。使用权限可被限制在基表的列的子集上。使用权限可被限制在基表的行和列的子集上。使用权限可被限制在多个基表的连接所限定的行上。使用权限可被限制在基表中的数据的统计汇总上。使用权限可被限制在另一视图的一个子集上,或是一些视图和基表合并后的子集上。
视图与表的关系(他们是一一对应的,类似函数与反函数的关系):
1.修改某张表时,则与该表有关视图的数据也会发生变化。
2.修改视图时,若视图的列和表的列一一对应(也就是说没有聚合函数sum() avg() count() max() min()等、group by),则修改成功,否则失败(像整体的修改无法确切决定局部的修改);
文档来源:mysql的union、left join、 right join、 inner join和视图学习
【转】mysql的union、left join、 right join、 inner 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(join)、left join、right join、full outer join、union、union all的区别
对于SQL的Join,在学习起来可能是比较乱的.我们知道,SQL的Join语法有很多inner的,有outer的,有left的,有时候,对于Select出来的结果集是什么样子有点不是很清楚.Codin ...
- MySQL(12)---纪录一次left join一对多关系而引起的BUG
MySQL(11)---纪录一次left join一对多关系而引起的bug BUG背景 我们有一个订单表 和 一个 物流表 它们通过 订单ID 进行一对一的关系绑定.但是由于物流表在保存订单信息的时候 ...
- mysql驱动表与被驱动表及join优化
驱动表与被驱动表 先了解在join连接时哪个表是驱动表,哪个表是被驱动表:1.当使用left join时,左表是驱动表,右表是被驱动表2.当使用right join时,右表时驱动表,左表是驱动表3.当 ...
- MySQL之表、列别名及各种JOIN连接详解
MySQL在SQL中,合理的别名可以让SQL更容易以及可读性更高.别名使用as来表示,可以分为表别名和列别名,别名应该是先定义后使用才对,所以首先要了解sql的执行顺序(1) from(2) on(3 ...
- Mysql常用sql语句(16)- inner join 内连接
测试必备的Mysql常用sql语句系列 https://www.cnblogs.com/poloyy/category/1683347.html 前言 利用条件表达式来消除交叉连接(cross joi ...
- MYSQL之union和order by分析([Err] 1221 - Incorrect usage of UNION and ORDER BY)
我在一个业务中采用了按月的分表策略,当查询的条件跨月的时候,使用了union all汇总2个表的数据,并按插入时间倒序排列.查询并不复杂,但是当执行的时候却报错了. SELECT * FROM `ta ...
- 1122MySQL性能优化之 Nested Loop Join和Block Nested-Loop Join(BNL)
转自http://blog.itpub.net/22664653/viewspace-1692317/ 一 介绍 相信许多开发/DBA在使用MySQL的过程中,对于MySQL处理多表关联的方式或者说 ...
- hadoop 多表join:Map side join及Reduce side join范例
最近在准备抽取数据的工作.有一个id集合200多M,要从另一个500GB的数据集合中抽取出所有id集合中包含的数据集.id数据集合中每一个行就是一个id的字符串(Reduce side join要在每 ...
随机推荐
- SQL Server 深入解析索引存储(中)
标签:SQL SERVER/MSSQL SERVER/数据库/DBA/索引体系结构/堆 概述 本篇文章是关于堆的存储结构.堆是不含聚集索引的表(所以只有非聚集索引的表也是堆).堆的 sys.parti ...
- 分享一个css3写的气泡对话框,适合于即时通讯和留言本的动态内容
效果预览: css code .message_content{width:100%;margin-top:10px;clear:both;float:left;} .face{float:left; ...
- TODO:Node.js pm2使用方法
TODO:Node.js pm2使用方法 pm2 是一个带有负载均衡功能的Node应用的进程管理器. 当你要把你的独立代码利用全部的服务器上的所有CPU,并保证进程永远都活着,0秒的重载, PM2是完 ...
- 《Entity Framework 6 Recipes》中文翻译系列 (14) -----第三章 查询之查询中设置默认值和存储过程返回多结果集
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 3-6在查询中设置默认值 问题 你有这样一个用例,当查询返回null值时,给相应属性 ...
- [译]如何防止elasticsearch的脑裂问题
本文翻译自blog.trifork.com的博文 地址是http://blog.trifork.com/2013/10/24/how-to-avoid-the-split-brain-problem- ...
- linux java 版本
之前linux已经安装了1.6的版本, 我想要升级,于是安装了1.7, /etc/profile 的最后几行是这么写的: JAVA_HOME=/usr/java/jdk1.7.0_79JRE_HOME ...
- Angularjs学习---官方phonecat实例学习angularjs step0 step1
接下来一系列的文章都是学习https://docs.angularjs.org/tutorial的笔记,主要学习的angular-phonecat项目的实现,来介绍angularjs的使用. 1.下载 ...
- C#设计模式-代理模式
在软件开发过程中,有些对象有时候会由于网络或其他的障碍,以至于不能够或者不能直接访问到这些对象,如果直接访问对象给系统带来不必要的复杂性,这时候可以在客户端和目标对象之间增加一层中间层,让代理对象代替 ...
- 用Mindjet MindManager 15 打开文件后停止响应的解决方法
这个是因为文件里面有很多规格不统一的注释(那个像小本子的图标[里面就是注释部分]),默认编码是utf-8的,如果不一样的话就会出现这个问题.网上大多数都是让咱们删掉注释再打开 弱弱的问一下,如果我都把 ...
- ASP.NET WebAPi之断点续传下载(下)
前言 上一篇我们穿插了C#的内容,本篇我们继续来讲讲webapi中断点续传的其他情况以及利用webclient来实现断点续传,至此关于webapi断点续传下载以及上传内容都已经全部完结,一直嚷嚷着把S ...