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 數據庫操作更高效、更靈活。