2023-12-08 工作心得

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

你可能感兴趣的:(java,数据库,sql)