1.inner join 和 left join 区别
image.png总结:
- inner join只会满足所有连表条件的符合的数据;
- left jion只会满足sql语句左边表的条件查询,右表没有的则为空;(把左表当作主表,把右表中的字段匹配到左表中来,左表匹配不上的数据用null来填充)
- 例子:查询2号下单的用户在3号的复购情况,计算复购率,复购金额,只算完成订单;取出所有女性用户的计算
select count(t0.user_id) as base_cnt, count(t1.user_id) as rentention_cnt, count(t1/user_id)/count(t0.user_id) as retention_rate_id
(select dt,user_id from oder_data.orders where dt = '20221202' group by dt,user_id) t0 left join (select dt,user_id from order_data.orders where dt = '20221203' group by dt,user_id) t1 on t0.user_id = t1.user_id
2. 索引设计原则
2.1什么情况需要建立索引
- 索引不是越多越好①需要空间②需要维护,增加了逻辑后,需要从新编排
- 2.什么时候需要索引
①数据大于20w(1-2个)
②主键一定要建(如id)
③外键一定要
④经常查询的列
⑤经常作查询条件的列
⑥经常在order by,group by,distinct 后面的的列
⑦重复值比较多的不要建立(如,性别)
⑧数据类型为 text,image,bit 不能建立
⑨经常存取的列不需要建立(可以使用读写分离)
2.2 创建索引
image.png-
语法
image.png
create index i_account_outAmount on Account(OutAmount)
创建后500w数据的查询语句,从9秒变成0.1秒
image.png
image.png
3. 事务
pass
4. T-SQL编程
4.1 变量和赋值
image.png#定义
declare @name varchar(20), @age int
#赋值方法1
set @name='fxx'
set @age=18
#赋值方法2
select @age=18,@name = 'fxx'
##输出
select @age as fxx_age,@name as fxx_name
4.2 逻辑控制
-
begin ....end
相当于花括号
#交换两个数的值
declare @x int,@y int,@z int
set @x = 3
set @y =100
begin
set @z = @x
set @x = @y
set @y = @z
end
select @x x,@y y
- if 判断
if (select count(*) from score) >0
begin
print '考试人数大于0'
end
网友评论