mysql--联合union、连接 left right inner join、视图学习

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),则修改成功,否则失败(像整体的修改无法确切决定局部的修改);

注意:向视图insert into插入数据时,若元表的列没有定义默认值,则需要我们给出值。否则insert into语句执行失败。

视图的algorithm:

merge:把创建视图的sql语句和查询的sql语句进行合并处理数据。按照WGOL规则进行合并。

temptable:分开执行sql语句。

语句:CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]   VIEW view_name [(column_list)]    AS select_statement    [WITH [CASCADED | LOCAL] CHECK OPTION]

陆续更新............

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值