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