textarea添加内容mysql 数据库关联查询与视图
1、:合并查询结果
要求:两次查询的列数⼀致;推荐:查询的每⼀列,对应的列的类型⼀致
认识:
注意:
1. 多次sql语句取出的列名可能不⼀致,此时,以第1个sql的列名为准
2. 如果不同的语句中取出的⾏,有完全相同(每个列的值都相同),那么相同的⾏将会合并。
c语言入门免费教程3. 重复
select id, sum(num) from (select *from ta union select *from tb) as tmp group by id;//去重复:
select id, sum(num) from (select *from ta union all select *from tb) as tmp group by id;//不去重复,加all:
4. 如果⼦句中有order by、limit,需加⼩括号,推荐放到⼦句之后,即对最终合并的最后结果进⾏排序;
5. order by和limit组合使⽤后才有意义,如果order by不配合limit使⽤,会被语法分析器优化分析时去除,即单独使⽤order by⽆效
2、集合相乘,为笛卡尔积,其实就是两集合的完全组合
select from ta,tb;即ta tb的结果
连接查询:左连接、右连接、内连接
条件联合查询
1:连接表
2:连接条件 ;
左连接:left
select col1 col2,…coln from
//此时形成⼤表,完全当成普通表来看,后可跟
where,group,having…⼀样
右连接:right
select col1 col2,…coln from
on tableA 列=tableB 列 //连接条件
//此时形成⼤表,完全当成普通表来看,后可跟
where,group,having…⼀样
内连接:inner
select col1 col2,…coln from select goods_id,goods_name,shop_price from goods where shop_price<20 or shop_price>5000;select goods_id,goods_name,shop_price from goods where shop_price>5000 union select goods_id,goods_name,shop_price from goods where shop_pric 1
2
3tableA left join tableB //连接哪⼏个表on tableA 列=tableB 列 //连接条件mysql语句多表查询
1
2tableA right join tableB //连接哪⼏个表
1
on tableA 列=tableB 列 //连接条件
//此时形成⼤表,完全当成普通表来看,后可跟
where,group,having…⼀样
左右连接:A left join B;和B right join A;⼀样
左右连接可以相互转化(推荐使⽤左连接代替右连接,兼容性好⼀点)
href实现什么功能内连接:查询左右表都有的数据,是左右连接的交集,即:不要左有连接中NULL的那⼀部分
左右连接的并集,⽬前不⽀持mysql不⽀持外链接,但可以⽤Union达到⽬的
3、列增加
alter table 表名 add 列声明;增加的列默认在最后⼀列
可以⽤after来声明新增的列在哪⼀些后⾯
alter table 表名 add 列声明 after 列名;
新增放在第⼀列:alter table 表名 add 列声明 first;
合肥网站优化4、修改列
alter table 表名 change 被改变的列名,新的列声明;
5、删除列
alter table 表名 drop 列名;
6、视图:view
如果某个查询结果出现的⾮常频繁,也就是拿这个结果当做进⾏⼦查询出现的⾮常频繁。
上⾯两句是想保存⼀个查询结果到表⾥⾯,供其它查询⽤。
视图定义:是由查询结果⾏程的⼀张虚拟表。
视图创建:create view 视图名 as select语句;
视图删除:drop view 试图名;
为什么要视图?
1. 可以简化查询
2. 可以进⾏⼀些权限控制,把表的权限封闭,但开放相应的视图权限,视图⾥只开放部分数据
3. ⼤数据分表时可以⽤到 ⽐如,标的⾏数超过200万⾏时,就会变慢,可以吧⼀张表的数据拆成4张表来存放,即分散4张表。 分散⽅
库尔勒最新疫情法:最常⽤的可以⽤id取模来计算 例:$_GET[‘id’]=17, 17%4+1=2,
$tablename=‘news’.‘2’ select *from news2 where if=17;
还可以⽤视图,把4张表形成⼀张视图 create view news as select from n1 union select
from n2 union …
视图修改: alter view as select …
7、视图与表的关系:tableA inner join tableB //连接哪⼏个表
1create table g2 like goods;insert into g2 select ....
1
2
视图是表的查询结果,则表的数据改变了,影响视图的结果,即视图也跟着变;
视图的数据改变了?
0:视图增删改也会影响表
1:但是,视图并不是总是能增删改的
2:视图的数据与表的数据⼀⼀对应时,可以修改(对于视图insert还应注意:视图必须包含表中没有默认值的列,即:没有默认值的列必须包含进视图)
8、视图的algorithm
algorithm=merge/temptable/undefined
merge:当引⽤视图是,引⽤视图的语句与定义视图的语句合并
temptable:当引⽤视图时,根据视图的创建语句建⽴⼀个临时表
undefined:未定义,⾃动,让系统帮你选
merge,意味着视图只是⼀个规则,语句规则,当查询视图时,把查询视图的语句(⽐如where那些)与创建时的语句where⼦句等合并分析,形成⼀条select语句,执⾏的是融合的两个语句,查询的原表(原表);⽽temptable是根据创建语句瞬间创建⼀张临时表,然后查询视图的语句从该临时表查数据,最终执⾏2句话,取数据并放在临时表,然后再去查询临时表(临时表)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论