数据库SQL工作学习:
整理下工作中遇到到一下有难度的SQL
1 in和exists的区别:
通常来说能用exists解决的就绝对不用in,因为in的时候字段多了会引起索引不生效,影响搜索的效率,而exists不会影响索引1、 exists的用法
select a.* from t_review_blacklist a WHERE
not exists (select 1 from t_baidu_blacklist_add b where b.t_review_blacklist_id = a.id )
order by a.id desc limit 1000 ;
2、 in的用法
select a.* from t_review_blacklist a WHERE
and a.id not in (select b.a_id from t_baidu_blacklist_add b )
order by a.id desc limit 1000 ;
在平常的写SQL语句做开发和查询的时候,善用order by 和limit会提高效率.
in和exists的区别原理详解:https://www.cnblogs.com/zhuyeshen/p/10955417.html
2:指定天数动态查询
比如:指定查询超时几天的订单1、查询超时七天的订单,当前时间-订单实际 >= 7 并且 < 6
SELECT * FROM t_collection WHERE overdue_time >= (NOW() - interval ‘1’ day * 7) and overdue_time < (NOW() - interval ‘1’ day * 6) order by overdue_time desc limit 1000;
3:decode、case when区别
case表达式和decode函数具有同样的功能。decode是Oracle数据库特有的函数,而case表达式则是符合SQL/92标准的语法。
1、decode
SELECT p.*,decode(p.product_type_id,1,‘book’,2,‘video’,3,‘dvd’,4,‘cd’,‘magazine’) type_name
FROM products p;
2、case when
select p.*,CASE p.product_type_id
WHEN 1 THEN ‘book’
WHEN 2 THEN ‘video’
WHEN 3 THEN ‘dvd’
WHEN 4 THEN ‘cd’
ELSE ‘magazine’
END type_name
from products p;