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和视图学习的更多相关文章

  1. 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 ...

  2. 图解SQL的inner join(join)、left join、right join、full outer join、union、union all的区别

    对于SQL的Join,在学习起来可能是比较乱的.我们知道,SQL的Join语法有很多inner的,有outer的,有left的,有时候,对于Select出来的结果集是什么样子有点不是很清楚.Codin ...

  3. MySQL(12)---纪录一次left join一对多关系而引起的BUG

    MySQL(11)---纪录一次left join一对多关系而引起的bug BUG背景 我们有一个订单表 和 一个 物流表 它们通过 订单ID 进行一对一的关系绑定.但是由于物流表在保存订单信息的时候 ...

  4. mysql驱动表与被驱动表及join优化

    驱动表与被驱动表 先了解在join连接时哪个表是驱动表,哪个表是被驱动表:1.当使用left join时,左表是驱动表,右表是被驱动表2.当使用right join时,右表时驱动表,左表是驱动表3.当 ...

  5. MySQL之表、列别名及各种JOIN连接详解

    MySQL在SQL中,合理的别名可以让SQL更容易以及可读性更高.别名使用as来表示,可以分为表别名和列别名,别名应该是先定义后使用才对,所以首先要了解sql的执行顺序(1) from(2) on(3 ...

  6. Mysql常用sql语句(16)- inner join 内连接

    测试必备的Mysql常用sql语句系列 https://www.cnblogs.com/poloyy/category/1683347.html 前言 利用条件表达式来消除交叉连接(cross joi ...

  7. MYSQL之union和order by分析([Err] 1221 - Incorrect usage of UNION and ORDER BY)

    我在一个业务中采用了按月的分表策略,当查询的条件跨月的时候,使用了union all汇总2个表的数据,并按插入时间倒序排列.查询并不复杂,但是当执行的时候却报错了. SELECT * FROM `ta ...

  8. 1122MySQL性能优化之 Nested Loop Join和Block Nested-Loop Join(BNL)

    转自http://blog.itpub.net/22664653/viewspace-1692317/ 一 介绍  相信许多开发/DBA在使用MySQL的过程中,对于MySQL处理多表关联的方式或者说 ...

  9. hadoop 多表join:Map side join及Reduce side join范例

    最近在准备抽取数据的工作.有一个id集合200多M,要从另一个500GB的数据集合中抽取出所有id集合中包含的数据集.id数据集合中每一个行就是一个id的字符串(Reduce side join要在每 ...

随机推荐

  1. 如何在 ASP.NET MVC 中集成 AngularJS(3)

    今天来为大家介绍如何在 ASP.NET MVC 中集成 AngularJS 的最后一部分内容. 调试路由表 - HTML 缓存清除 就在我以为示例应用程序完成之后,我意识到,我必须提供两个版本的路由表 ...

  2. Java 浅析内部类

    这篇文章主要讲述Java 内部类的相关知识,主要讲解下面的知识点. 内部类的概念 内部类的特点与使用 多种形式内部类 为什么要使用内部类 内部类的概念 内部类是指在一个类的内部定义了另一个类.例如下面 ...

  3. 【原】Python 用例:二进制写入和读取文件内容

    import pickle as p shoplistfile='shoplist.data' shoplist=['apple','carrot'] # because the dump opera ...

  4. ActiveMQ的介绍及使用实例.

    今天就来说下 这个项目中使用ActiveMQ的情况, MQ: message queue, 顾名思义就是消息队列的意思. 一: 使用场景:  消息队列在大型电子商务类网站,如京东.淘宝.去哪儿等网站有 ...

  5. myeclipse转到函数定义的方法去

    转到函数的定义CTRl+鼠标左击 myeclipse自动补全的快捷键 alt+/

  6. 浅谈ThinkPHP3.2的子域名部署和路由优化(一)

    前言:建立一个网站系统,往往包含多个子网站,例如PC官网,移动端官网,后台管理,数据源自一个相同的数据库,整个架构上,从ThinkPHP来看,可以大体理解为Model(M)是一样的,Controlle ...

  7. 【Win 10 应用开发】RTM版的UAP项目解剖

    Windows 10 发布后,其实SDK也偷偷地在VS的自定义安装列表中出现了,今天开发人员中心也更新了下载.正式版的SDK在API结构上和以前预览的时候是一样的,只是版本变成10240罢了,所以大家 ...

  8. Java之控制反转和依赖注入

    1.简介 依赖注入和控制反转,目的是为了使类与类之间解耦合,提高系统的可扩展性和可维护性,下面通过一个例子来引入这一概念. 2.案例 1)一般情况下的类耦合 Main.java public clas ...

  9. html规范

    1 前言 HTML 作为描述网页结构的超文本标记语言,在百度一直有着广泛的应用.本文档的目标是使 HTML 代码风格保持一致,容易被理解和被维护. 2 代码风格 2.1 缩进与换行 [强制] 使用 4 ...

  10. CSS字体记录

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAaYAAACnCAIAAADVOG9FAAAgAElEQVR4nOy9eXwcxZk/vL/9ve8eb7 ...