SQLのSELECT文で変数を使いこなすための完全ガイド

SQLでの変数操作とSELECT文の組み合わせについて、基本的な使い方から応用テクニックまでを解説します。実務で本当に使える変数活用法とは?

SQLのSELECT文における変数の活用方法

変数活用のポイント
📝
データの一時保存

クエリ実行中に値を保持し、後続の処理で活用できます

🔄
動的なクエリ生成

条件に応じて柔軟にクエリを構築できます

パフォーマンス向上

複雑なクエリを簡略化し、実行効率を改善できます

SQLの変数宣言と基本的な代入方法

変数を使用する際は、まず宣言が必要です。MySQLでは@記号を使用し、SQL ServerではDECLARE文を使用します。


-- MySQL
SET @user_name = "山田太郎"
-- SQL Server
DECLARE @user_name VARCHAR(50)
SET @user_name = '山田太郎'

 

変数の値を確認する場合は、単純なSELECT文で表示できます。


SELECT @user_name AS ユーザー名

SELECT文での変数活用パターン

SELECT文の結果を変数に格納する方法には、主に2つのパターンがあります。


-- パターン1: INTO句を使用
SELECT customer_name INTO @customer
FROM customers
WHERE customer_id = 1
-- パターン2: 代入演算子を使用
SELECT @customer := customer_name
FROM customers
WHERE customer_id = 1

動的クエリにおける変数の活用テクニック

検索条件を動的に変更したい場合、変数を活用することで柔軟なクエリを作成できます。


DECLARE @sql nvarchar(max)
DECLARE @search_date DATE = '2024-12-17'
SET @sql = '
SELECT *
FROM sales_table
WHERE 1=1'
IF @search_date IS NOT NULL
BEGIN
    SET @sql += ' AND sale_date = @search_date'
END
EXEC sp_executesql @sql, 
    N'@search_date DATE',
    @search_date

変数を使用した集計処理の効率化

複数のテーブルを跨ぐ集計処理では、中間結果を変数に保存することで処理を効率化できます。


DECLARE @total_amount DECIMAL(10,2)
DECLARE @avg_amount DECIMAL(10,2)
SELECT @total_amount = SUM(amount)
FROM sales_table
WHERE sale_date = CAST(GETDATE() AS DATE)
SELECT @avg_amount = @total_amount / COUNT(*)
FROM sales_table
WHERE sale_date = CAST(GETDATE() AS DATE)
SELECT 
    @total_amount AS 本日の売上合計,
    @avg_amount AS 平均売上額

SQLの変数スコープとエラーハンドリング

変数のスコープを理解し、適切なエラーハンドリングを実装することが重要です。


BEGIN TRY
    DECLARE @result INT
    SELECT @result = COUNT(*)
    FROM non_existing_table  -- エラーが発生する例
END TRY
BEGIN CATCH
    SELECT 
        ERROR_NUMBER() AS エラー番号,
        ERROR_MESSAGE() AS エラーメッセージ
END CATCH

 

注意点として、変数は適切なスコープ内でのみ有効であり、トランザクションやストアドプロシージャの終了時に破棄されます。また、大量データを扱う場合は、テーブル変数やテンポラリテーブルの使用を検討する必要があります。