2023-12-08 工作心得

2023-12-14 09:58:56

1 别名不能作为 同一个sql里的where里条件约束

因为别名是在查询结果生成后才得到的,而?WHERE?子句是在查询结果生成前进行的筛选操作,所以别名不能直接用于?WHERE?子句中的条件筛选。


2?jpa sql里如果是删除或修改,加注解 @modifying @transactional


3 sql里的dateformat(时间,'%Y-%m-%d %H:%i:%m')


6 date_sub(CURRENT_TIME,区隔) 当前时间-区隔时间 得到一个新的时间。

更多例子:

-- 当前时间减去10分钟

SELECT DATE_SUB(CURRENT_TIME, INTERVAL 10 MINUTE) AS new_time;

-- 当前时间减去2天 SELECT DATE_SUB(CURRENT_TIME, INTERVAL 2 DAY) AS new_time;

-- 当前时间减去3周 SELECT DATE_SUB(CURRENT_TIME, INTERVAL 3 WEEK) AS new_time;

-- 当前时间减去6个月 SELECT DATE_SUB(CURRENT_TIME, INTERVAL 6 MONTH) AS new_time;

-- 当前时间减去1年 SELECT DATE_SUB(CURRENT_TIME, INTERVAL 1 YEAR) AS new_time;


7 join 和 left join 区别。join 内连接,返回两个表都符合条件的数据,left join ,返回左表全部,如果右表没有,用null填充

8 select * from 后面可以跟表,也可以跟子查询的结果(比如从表里搜某几列的数据)
9 left join 也是 可以跟表 也可以跟子查询的结果 on 的条件一定要写上(此时用别名可能更方便一点)

10 select后面跟的是要查询的内容。join 是从哪些表里查,where 后跟的是筛选的条件。

11 CONCAT() 函数可以拼接任意数量的参数

12 exists 和in的区别还是挺明显的。in 是从具体的条件里面捞,比id in(1,2,3,4)感觉像是 =1 or =2 or =3 等等的连结。
而 exists常用于子查询,相当于 if(条件是否为true){}。是否返回至少一行结果,是否有匹配结果。
exists 和 in 可以互相转化。比如;
exist:and not EXISTS ?(select z.unique_key from t_request_retry_log z?
? ? ? ? ? ? where z.unique_key = concat('cydj_npd_',t.holder_phone))

in:AND CONCAT('cydj_npd_', t.holder_phone) xx ?(SELECT z.unique_key FROM t_request_retry_log z)

SELECT customer_name
FROM customers
WHERE EXISTS (
? SELECT 1
? FROM orders
? WHERE orders.customer_id = customers.customer_id
);

13 distinct 去重某几列数据一样的结果集,
或者去count(distinct 列名),计算指定列的不重复值的数量

14 ifnull(a,0) 如果a为null,返回0,ifnull(a,1) 如果a为null,返回1?

15 round(a/b,2)相除然后保留2位小数

16 date_format(now(),'%Y')把当前时间变成年份 (%Y 年份 四位数 %y2位数

17 SUBSTR(r.insured_birthday FROM 1 FOR 4) 截取某列的字符串

18 row_number 的语法 看一下 感觉以后会用到唉。果然在insuranceOrderRepositroy类里的findOrdersNeededUpdateStatusWithLimit 这个方法 用得到了类似的方法。
row_number() over(partition by xx order by xx asc/desc) 根据什么分组 然后 根据什么排序 然后可以 再 where rn<=2 (这样去筛选前几名出来)

SELECT id, name, age
FROM (
? SELECT id, name, age, ROW_NUMBER() OVER (ORDER BY age DESC, name) AS rn
? FROM employees
) AS subquery
WHERE rn <= 2;

SELECT policy_no, period, ROW_NUMBER() OVER (PARTITION BY policy_no ORDER BY period DESC) AS row_num
FROM t_order
WHERE temp_table.row_num = 1;

19 ? ORDER BY ?和 group by 区别是什么。以及group by 的列 是不是必须在 select后查出来?
ordery by是排序 可以多个条件排序
group by是分组 ,既然是分组,一般常和聚合函数一起用做汇总,使查询结果更容易汇总和分析。


having 分组后再对数据进行过滤(row_number()函数后面跟having )
where 分组前对原始数据进过滤

20 case?
when a then b
when c then d?
else e end

21 date_add 往后加 interval ,date_sub 往前减 interval?

22 union删除重复行 union all 不删除重复行

23 exists 前面 加and ?如果找两个表之间的差集,
except不行就用left join 然后看区别(记得颠倒一下顺序 就能看出差别)

24?
SELECT * from t_car_clue where id != null;
SELECT * from t_car_clue where id is not ?null;?
SQL语句里一定要用后面这个,因为如果!=或= 和null比较,结果是不确定的。

25 map contains(某个key) 而不是map.get(key) !=null

26?@RefreshScope 注解

如果您想要在nacos配置信息发生变化时,动态更新 pushClueUrl 的值,您可以添加@RefreshScope 注解.

@Value("${xx.xxx.one.push.clue.url:http://xxxxx}")
? ? private String pushClueUrl; 这样的时候 都需要去 加个 @RefreshScope

文章来源:https://blog.csdn.net/tomorrow9813/article/details/134879106
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。