實戰代碼(十四):常用MySQL語句速查筆記

本文主要記錄下日常略微複雜且比較常用的SQL語句,持續更新……

一、重複數據

查看是否存在重複數據

SELECT `code`, guid, COUNT(1) FROM crosshistory WHERE in_or_out = 1 GROUP BY guid having COUNT(1) > 1

清除重複數據

DELETE FROM crosshistory WHERE `code` in ( SELECT `code` from (SELECT `code` FROM crosshistory WHERE in_or_out = 1 GROUP BY guid having COUNT(1) > 1 ) AS temp )

二、插入/更新

如果數據不存在則執行插入操作,如果數據已經存在則執行更新操作

INSERT INTO visitors(`timestamp`,unique_visitors) VALUES("2021-01-01",10) on DUPLICATE KEY UPDATE `timestamp` = "2021-01-01", unique_visitors = 44;

三、時間格式化

# CONCAT:拼接字符串
# DATE_FORMAT:日期格式化
SELECT value,value1,value2,value3,value4,DATE_FORMAT(create_time,'%Y-%m-%d %H:%i:%s') AS createTime,CONCAT(value,value1,DATE_FORMAT(create_time,'%Y%m%d%H%i%s’),value2) AS rowkey FROM table_name

四、字符串處理

// 32號樓a棟__5層__512
// substring_index有分隔字符串的作用,取第一個分隔符前的字符串,結果:32號樓a棟
substring_index(building_code, "__", 1) 
// 取第2個分隔符前的字符串,結果:32號樓a棟__5層
substring_index(building_code, "__", 2)

五、IF

// 如果A等於0,返回yes,否則返回no
if(A == 0, yes, no)

六、去除空格

UPDATE config SET event_name = TRIM(event_name)
# 去除左側空格
UPDATE config SET event_name = LTRIM(event_name)

七、生成隨機數

取 20-100之間的隨機數
ROUND(RAND() * 100 + 20)

八、多表聯查--左連接

# 左連接
SELECT a.*, IF(b.equip_name IS null, "設備缺失", b.equip_name) as equip_name FROM operate_alarm_video as a
LEFT JOIN basic_equipment AS b
ON a.signal_id = b.signal_id
WHERE a.data_time >= #{startTime} AND a.data_time < #{stopTime}

九、獲取表的字段

select COLUMN_NAME from information_schema.COLUMNS where table_name = 'user' and table_schema = 'database_name';
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章