2.2 數(shù)據(jù)庫的增刪改查與常見數(shù)據(jù)庫函數(shù)

插入/添加數(shù)據(jù)

INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com');  -- 插入單條記錄
INSERT INTO users (name, email) VALUES 
    ('Charlie', 'charlie@example.com'),
    ('David', 'david@example.com');  -- 插入多條記錄
INSERT INTO users (name, email) 
SELECT name, email FROM old_users WHERE age > 20;  -- 從其他表復(fù)制

查詢數(shù)據(jù)

SELECT * FROM users;  -- 查詢所有記錄
SELECT name, email FROM users;  -- 查詢指定字段
SELECT DISTINCT name FROM users;  -- 去重查詢
SELECT * FROM users WHERE age > 20 ORDER BY name DESC;  -- 帶條件和排序
SELECT * FROM users LIMIT 10;  -- 限制結(jié)果集大小

刪除數(shù)據(jù)

DELETE FROM users WHERE id = 1;  -- 刪除單條記錄
DELETE FROM users WHERE age > 30;  -- 帶條件刪除
DELETE FROM users;  -- 刪除所有記錄

更新數(shù)據(jù)

UPDATE users SET email = 'new@example.com' WHERE id = 1;  -- 更新單條記錄
UPDATE users SET age = age + 1 WHERE name LIKE 'A%';  -- 帶條件更新
UPDATE users SET age = 25 WHERE id IN (1, 2, 3);  -- 使用IN運(yùn)算符
UPDATE users SET age = 25 WHERE age BETWEEN 20 AND 30;  -- 使用BETWEEN運(yùn)算符

多表操作

跨表操作屬于對選擇數(shù)據(jù)的進(jìn)階操作。在數(shù)據(jù)表設(shè)計過程中,為了避免將所有數(shù)據(jù)都存在一個數(shù)據(jù)表中,往往一張事物表存儲的信息是唯一的,如電商業(yè)務(wù)中:用戶基本信息表,商品基本信息表,訂單表,庫存表等,在實(shí)際業(yè)務(wù)分析中,如某次購買活動中的購買用戶畫像分析,就需要同時提取到訂單表信息和用戶基本信息進(jìn)行關(guān)聯(lián)分析,這時候就需要通過跨表關(guān)聯(lián)進(jìn)行數(shù)據(jù)的提取和匯總。
常見的跨表關(guān)聯(lián),主要以join的形式出現(xiàn),但也有時會將某張表作為where內(nèi)條件進(jìn)行使用。

SELECT u.name, o.order_id 
FROM users u 
JOIN orders o ON u.id = o.user_id;  -- 內(nèi)連接
SELECT u.name, o.order_id 
FROM users u 
LEFT JOIN orders o ON u.id = o.user_id;  -- 左連接

常見函數(shù)

時間函數(shù)

在處理mysql數(shù)據(jù)時,由于數(shù)據(jù)表基本存儲的都是事件信息,所以需要根據(jù)分析需求去計算不同事件信息之間的時間關(guān)系,時間函數(shù)就變得尤為重要。時間函數(shù)主要包括時間提取/轉(zhuǎn)換和時間計算兩個方向。

  • 時間提取/轉(zhuǎn)換函數(shù)
  1. 常見的時間提取函數(shù)主要包括:
函數(shù) 意義 例子
NOW() 返回當(dāng)前日期和時間 '2025-12-17 14:11:29'
CURRENT_TIMESTAMP() 等同于NOW() CURRENT_TIMESTAMP() → '2025-12-17 14:11:29'
SYSDATE() 返回當(dāng)前日期和時間 SYSDATE() → '2025-12-17 14:11:29'
LOCALTIME() 返回當(dāng)前日期和時間 LOCALTIME() → '2025-12-17 14:11:29'
LOCALTIMESTAMP() 返回當(dāng)前日期和時間 LOCALTIMESTAMP() → '2025-12-17 14:11:29'
  1. 時間日期函數(shù)
函數(shù) 意義 例子
CURDATE() 返回當(dāng)前日期 CURDATE() → '2025-12-17'
CURRENT_DATE() 等同于CURDATE() CURRENT_DATE() → '2025-12-17'
  1. 日期時間格式化
函數(shù) 意義 例子
DATE_FORMAT(date, format) 格式化日期時間 DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s') → '2025-12-17 14:11:29'
UNIX_TIMESTAMP() 返回當(dāng)前時間戳 UNIX_TIMESTAMP() → 1734432689
FROM_UNIXTIME(timestamp) 時間戳轉(zhuǎn)日期時間 FROM_UNIXTIME(1734432689) → '2025-12-17 14:11:29'
  • 時間/日期計算

主要是計算天數(shù)間隔,如注冊距今天數(shù),最近一次購買距今天數(shù),或者兩次購買時間間隔天數(shù)等,為后續(xù)分組分析做數(shù)據(jù)提取計算。

函數(shù) 意義 例子
TIMESTAMPDIFF(unit, start_time, end_time) 計算時間差(精確到秒) TIMESTAMPDIFF(MINUTE, '2025-12-17 14:00:00', NOW()) → 11
DATEDIFF(end_date, start_date) 計算日期差(天) DATEDIFF('2025-12-18', CURDATE()) → 1
ADDDATE(date, INTERVAL expr type) 日期加減 ADDDATE(CURDATE(), INTERVAL 1 DAY) → '2025-12-18'
SUBDATE(date, INTERVAL expr type) 日期減法 SUBDATE(CURDATE(), INTERVAL 1 HOUR) → '2025-12-17 13:11:29'

字符處理函數(shù)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容