變數 (SQL Variables)
SQL 變數用來儲存臨時資料,可在 SQL 語句或預存程序中使用。不同資料庫系統的變數語法有所差異。
MySQL 變數
使用者定義變數
MySQL 的使用者定義變數以 @ 開頭:
-- 設定變數
SET @myvar = 100;
-- 或使用 SELECT
SELECT @myvar := 100;
-- 使用變數
SELECT * FROM products WHERE price < @myvar;
在查詢中設定變數
SELECT @total := SUM(amount) FROM orders;
SELECT @total; -- 顯示結果
SQL Server 變數
SQL Server 的區域變數以 @ 開頭,需先用 DECLARE 宣告:
-- 宣告變數
DECLARE @myvar INT;
-- 設定變數值
SET @myvar = 100;
-- 或使用 SELECT 設定
SELECT @myvar = 100;
-- 使用變數
SELECT * FROM products WHERE price < @myvar;
宣告時同時設定初始值
SQL Server 2008 以後版本支援:
DECLARE @myvar INT = 100;
多個變數
DECLARE @name VARCHAR(50), @age INT;
SET @name = '張三';
SET @age = 25;
變數實務應用 (Example)
儲存計算結果
DECLARE @avg_salary DECIMAL(10,2);
SELECT @avg_salary = AVG(Salary) FROM employees;
-- 找出高於平均薪資的員工
SELECT Name, Salary
FROM employees
WHERE Salary > @avg_salary;
動態計算
DECLARE @tax_rate DECIMAL(5,2) = 0.05;
SELECT
product_name,
price,
price * @tax_rate AS tax,
price * (1 + @tax_rate) AS total
FROM products;
MySQL vs SQL Server 變數比較
| 特性 | MySQL | SQL Server |
|---|---|---|
| 變數前綴 | @ | @ |
| 需宣告 | 不需要 | 需要 DECLARE |
| 設值語法 | SET 或 := | SET 或 SELECT |
| 作用範圍 | 連線期間有效 | 批次或程序內有效 |
系統變數
除了使用者定義變數,資料庫還有系統變數,用來控制資料庫行為或取得系統資訊。
MySQL 系統變數:
-- 查看系統變數
SHOW VARIABLES LIKE 'max_connections';
-- 全域變數使用 @@
SELECT @@version;
SQL Server 系統變數:
-- 系統函數
SELECT @@VERSION;
SELECT @@ROWCOUNT; -- 上一個語句影響的列數
SELECT @@IDENTITY; -- 最後插入的自動編號值