常见的sql类型
DDL:数据定义语言
DCL:数据控制语言
DML:数据操作语言
DPL:事务处理语言正确使用sql的重要性
增加数据库处理效率,减少应用的相应时间。
减少数据库服务器负载,增加服务器稳定性。
减少服务器通讯的网络流量。SQL标准中的join的类型
内连接(INNER)
全外连接(FULL OUTER)
左外连接(LEFT JOIN)
右外连接(RIGHT JOIN)
交叉连接(CROSS)
下面举例讲解几种连接用法技巧。
* Inner Join
内连接基于连接谓词将两张表的列组合在一起,产生新的结果表。
Left OUTER Join
Right OUTER Join
Full Join
Cross Join
交叉连接(笛卡尔连接或叉乘),如果A和B是两个集合,它们的交叉连接就记为:A*B。
select a.'user_name','a.over','b.user_name,b.'over' from user1 corss join user2 b;
技巧:
* 如何更新使用过滤条件中包括自身的表?
update user1 set over=;齐天大圣' where user1.'user_name' in (select b.'user_name' from user1 a inner join user2 b on
a.'user_name '= b.'user_name');
mysql报错,可以使用连接解决
···
update user1 a join (select b.’user_name’ form user1 a join user2 b
on a.user_name=b.user_name) b on a.user_name=b.user_name set a.over=’齐天大圣’)
“`
- 使用Join优化子查询
select a.user_name ,a.ober ,(select over form user2 b where a.user_name = b.user_name) as over2 from user1 a;
使用join 优化
select a.user_name ,a.ober,b.ober as over2 from user1 a left join user2 b on a.user_name = b.user_name;
- 使用Jon优化聚合子查询
select a.user_name,b.timestr,b.kills from user1 a join user_kills b on a.id= b.user_id where b.kills =(select MAX(c.kills )from user_kill c where c.user_id = b.user_id)
优化后
·“`
select a.user_name ,b.timestr,b.kills from user1 a
join user_kills b on a.id = b.user_id
join user_kills c on c.user_id = b.user_id
group by a.user_name,b.timestr,b.kills
having b..kills = MAX(c.kills);
* 如何实现分组选择
WITH tmp AS(
SELECT a.user_name ,b.timestr,b.kills,ROW_NUMBER() ober (partition by a.user_name order by b.kills) cnt
from user1 a join user_kills b on a.id = b.user_id)select *from tmp where cnt<=2;
mysql不支持,改造下即可,如下
···
select d.user_name,c.timestr,kills from (select user_id,timestr,kills,(select count(*) from user_kills b where b.user_id=a.user_id and a.kills<=b.kills) as cnt from user_kills a group by user_id,timestr,kills)c join user1 d on c.user_id=d.id
where cnt<=2;