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