H2 數據庫中的視圖與別名及時間處理關鍵字
在 H2 數據庫的日常操作中,視圖能簡化複雜查詢,別名讓語句更清爽,時間處理關鍵字則能精準駕馭日期時間數據。這些關鍵字看似小巧,卻能在實際應用中大幅提升操作效率,讓數據處理更得心應手。
視圖相關關鍵字
視圖是虛擬的表,由查詢結果定義,CREATE VIEW、OR REPLACE、DROP VIEW是管理視圖的核心關鍵字。
CREATE VIEW能把常用的複雜查詢封裝成視圖,後續直接查詢視圖即可。比如經常需要關聯用户表和訂單表查詢用户的最新訂單信息,就可以創建這樣的視圖:
CREATE VIEW user_latest_orders AS
SELECT
u.user_id,
u.username,
o.order_id,
o.order_no,
o.order_time
FROM
users u
LEFT JOIN
orders o ON u.user_id = o.user_id
WHERE
o.order_time = (SELECT MAX(order_time) FROM orders WHERE user_id = u.user_id);
之後想查看用户最新訂單,直接查視圖:
SELECT * FROM user_latest_orders WHERE username = '張三';
如果業務需求變化,視圖需要調整,OR REPLACE能幫上忙,它可以替換已存在的視圖而不報錯:
CREATE OR REPLACE VIEW user_latest_orders AS
SELECT
u.user_id,
u.username,
o.order_id,
o.order_no,
o.order_time,
o.pay_amount
FROM
users u
LEFT JOIN
orders o ON u.user_id = o.user_id
WHERE
o.order_time = (SELECT MAX(order_time) FROM orders WHERE user_id = u.user_id);
這樣就給視圖新增了pay_amount字段,無需先刪除舊視圖。
當視圖不再需要時,DROP VIEW可以將其刪除,加上IF EXISTS更安全:
DROP VIEW IF EXISTS user_latest_orders;
別名關鍵字
AS是別名關鍵字,能給表、字段起臨時名稱,讓 SQL 語句更簡潔易讀。
給表起別名在多表關聯時特別有用,比如關聯三張表時:
SELECT
u.username,
o.order_no,
p.product_name
FROM
users AS u
JOIN
orders AS o ON u.user_id = o.user_id
JOIN
order_products AS op ON o.order_id = op.order_id
JOIN
products AS p ON op.product_id = p.product_id;
這裏u、o、op、p分別是四張表的別名,避免了重複書寫長表名。
給字段起別名能讓查詢結果更直觀,比如:
SELECT
order_id AS '訂單ID',
order_no AS '訂單編號',
pay_amount AS '支付金額',
order_time AS '下單時間'
FROM orders;
查詢結果的列名會顯示為設置的別名,更易理解。
時間處理關鍵字
H2 提供了豐富的時間處理關鍵字,CURRENT_DATE、CURRENT_TIME、CURRENT_TIMESTAMP能獲取當前時間,DATEADD、DATEDIFF則能進行時間計算。
CURRENT_DATE返回當前日期,CURRENT_TIME返回當前時間,CURRENT_TIMESTAMP返回當前日期時間,比如插入記錄時自動記錄創建時間:
INSERT INTO logs (content, create_date, create_time, create_timestamp)
VALUES ('系統啓動', CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP);
DATEADD可以給日期時間增加指定的時間間隔,比如計算 3 天后的日期:
SELECT DATEADD(DAY, 3, CURRENT_DATE) AS three_days_later;
還能計算 1 小時後的時間:
SELECT DATEADD(HOUR, 1, CURRENT_TIME) AS one_hour_later;
DATEDIFF用於計算兩個日期時間之間的間隔,比如計算兩個訂單的時間差(天數):
SELECT
o1.order_no AS order1,
o2.order_no AS order2,
DATEDIFF(DAY, o1.order_time, o2.order_time) AS day_diff
FROM
orders o1, orders o2
WHERE
o1.order_id = 1 AND o2.order_id = 2;
這些關鍵字在簡化查詢、優化語句可讀性和處理時間數據方面各有千秋。合理運用視圖關鍵字能減少重複代碼,別名關鍵字讓 SQL 更易維護,時間處理關鍵字則能輕鬆應對各類時間相關的業務需求,讓 H2 數據庫操作更高效、更靈活。