SQL IFステートメントの代替方法:CASE式、COALESCE関数、IIF関数など
SQLにおけるIF、BEGIN、END、END IFの解説
例:
IF EXISTS (SELECT * FROM Customers WHERE Country = 'Japan')
BEGIN
SELECT COUNT(*) AS CustomerCount FROM Customers WHERE Country = 'Japan';
END
ELSE
SELECT 'No customers from Japan found.';
END IF;
上記の例では、Customers
テーブルにCountry
列がJapan
であるレコードが存在するかどうかをチェックします。
- 存在する場合、BEGINとENDで囲まれたブロックが実行され、
Japan
の顧客数を表示します。 - 存在しない場合、
ELSE
ブロックが実行され、「No customers from Japan found.」というメッセージが表示されます。
BEGINとENDは、単一のIFステートメントだけでなく、ELSEやELSEIFステートメントを含む複雑な条件分岐にも使用できます。
DECLARE @Age INT = 25;
IF @Age >= 18
BEGIN
SELECT 'You are an adult.';
END
ELSEIF @Age >= 13
BEGIN
SELECT 'You are a teenager.';
END
ELSE
BEGIN
SELECT 'You are a child.';
END
END IF;
上記の例では、@Age
変数の値に基づいて、3つの異なるメッセージのいずれかを表示します。
ポイント:
- BEGINとENDは、必ずペアで使用されます。
- END IFは、IFステートメントの終わりを示すために常に必要です。
- ELSEとELSEIFは、オプションのステートメントです。
- BEGINとENDを使って複数のステートメントをグループ化することで、コードの可読性と保守性を向上させることができます。
DECLARE @Age INT = 25;
DECLARE @DiscountRate DECIMAL(5,2);
IF @Age >= 65
BEGIN
SET @DiscountRate = 0.25;
END
ELSEIF @Age >= 50
BEGIN
SET @DiscountRate = 0.15;
END
ELSE
BEGIN
SET @DiscountRate = 0.10;
END
SELECT @DiscountRate AS DiscountRate;
在庫状況に基づいてメッセージを表示する
DECLARE @ProductID INT = 123;
DECLARE @Quantity INT;
SELECT @Quantity = Quantity FROM Products WHERE ProductID = @ProductID;
IF @Quantity > 0
BEGIN
SELECT 'Product is in stock.';
END
ELSE
BEGIN
SELECT 'Product is out of stock.';
END
注文ステータスに基づいてメールを送信する
DECLARE @OrderID INT = 456;
DECLARE @OrderStatus VARCHAR(50);
SELECT @OrderStatus = OrderStatus FROM Orders WHERE OrderID = @OrderID;
IF @OrderStatus = 'Shipped'
BEGIN
EXEC sp_SendEmail '[email protected]', 'Your order has been shipped.';
END
テーブルが存在するかどうかをチェックする
IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Customers')
BEGIN
SELECT 'Customers table exists.';
END
ELSE
BEGIN
SELECT 'Customers table does not exist.';
END
これらのサンプルコードは、SQLにおけるIF、BEGIN、END、END IFの使用方法を示しています。
SQLにおけるIFステートメントの代替方法
CASE式は、複数の条件に基づいて異なる値を返すのに役立ちます。
SELECT CASE WHEN Country = 'Japan' THEN 'Japanese'
WHEN Country = 'USA' THEN 'American'
ELSE 'Other'
END AS Nationality
FROM Customers;
上記の例では、Customers
テーブルのCountry
列に基づいて、Nationality
列に値を設定します。
COALESCE関数は、最初の引数がNULLの場合、2番目の引数を返すのに役立ちます。
SELECT COALESCE(FirstName, 'Unknown') AS FullName
FROM Customers;
上記の例では、Customers
テーブルのFirstName
列がNULLの場合、FullName
列に「Unknown」という値を設定します。
IIF関数は、条件が真の場合に1番目の引数を、偽の場合に2番目の引数を返すのに役立ちます。
SELECT IIF(Age >= 18, 'Adult', 'Child') AS AgeGroup
FROM Customers;
UPDATEステートメントは、条件に基づいてテーブルのデータを更新するのに役立ちます。
UPDATE Customers
SET DiscountRate = 0.25
WHERE Country = 'Japan';
上記の例では、Country
列がJapan
であるCustomers
テーブルのレコードのDiscountRate
列を0.25に更新します。
これらの方法は、それぞれ異なる利点と欠点があります。どの方法を使用するかは、特定の要件によって異なります。
sql