SQLiteでCASE WHEN THEN END構文を使う
SQLiteでIFステートメントを使う方法
CASE式は、条件に応じて異なる値を返す式です。SELECTクエリ内でCASE式を使うことで、IFステートメントのような処理を実現できます。
例:
SELECT
CASE
WHEN age >= 18 THEN '成人'
ELSE '未成年'
END AS 年齢区分
FROM users;
このクエリは、users
テーブルのage
列の値に基づいて、年齢区分
という新しい列を作成します。
age
が18以上の場合、年齢区分
は成人
になります。
CASE式は、複数の条件を処理するためにも使えます。
SELECT
CASE
WHEN age >= 18 AND gender = '男性' THEN '成人男性'
WHEN age >= 18 AND gender = '女性' THEN '成人女性'
ELSE '未成年'
END AS 年齢区分
FROM users;
IIF関数は、条件に応じて2つの値のうち一方を返す関数です。
SELECT
IIF(age >= 18, '成人', '未成年') AS 年齢区分
FROM users;
IIF関数は、CASE式よりも簡潔に記述できますが、条件が複雑な場合はCASE式の方が分かりやすい場合があります。
サブクエリを使って、条件に応じて異なる値を返すこともできます。
SELECT
u.name,
(SELECT CASE WHEN age >= 18 THEN '成人' ELSE '未成年' END) AS 年齢区分
FROM users AS u;
- サブクエリは、
age
列の値に基づいて、成人
または未成年
を返します。
サブクエリを使う方法は、複雑な条件を処理する場合に有効です。
SQLiteはIFステートメントを直接サポートしていないものの、CASE式、IIF関数、サブクエリを使うことで、条件分岐を実現できます。これらの方法を使いこなすことで、より柔軟なSELECTクエリを作成できます。
-- テーブル作成
CREATE TABLE users (
id INTEGER PRIMARY KEY,
name TEXT,
age INTEGER,
gender TEXT
);
-- データ挿入
INSERT INTO users (name, age, gender) VALUES ('John Doe', 25, '男性');
INSERT INTO users (name, age, gender) VALUES ('Jane Doe', 17, '女性');
-- CASE式を使う
SELECT
name,
CASE
WHEN age >= 18 THEN '成人'
ELSE '未成年'
END AS 年齢区分
FROM users;
-- IIF関数を使う
SELECT
name,
IIF(age >= 18, '成人', '未成年') AS 年齢区分
FROM users;
-- サブクエリを使う
SELECT
name,
(SELECT CASE WHEN age >= 18 THEN '成人' ELSE '未成年' END) AS 年齢区分
FROM users;
このコードを実行すると、以下の結果が出力されます。
| name | 年齢区分 |
|-------------|-----------|
| John Doe | 成人 |
| Jane Doe | 未成年 |
このコードは、CASE式、IIF関数、サブクエリを使って、age
列の値に基づいて年齢区分
という新しい列を作成します。
SQLiteでIFステートメントを実現する他の方法
COALESCE関数は、最初の引数がNULLの場合、2番目の引数を返す関数です。
SELECT
name,
COALESCE(age, '年齢不明') AS 年齢
FROM users;
COALESCE関数は、NULL値を処理する際に有効です。
CASE WHEN THEN END構文は、条件に応じて異なる値を返す式です。
SELECT
name,
CASE WHEN age >= 18 THEN '成人'
ELSE '未成年'
END AS 年齢区分
FROM users;
CASE WHEN THEN END構文は、CASE式とほぼ同じですが、より簡潔に記述できます。
WITH句は、中間的な結果を保存して、その結果をクエリ内で参照できる機能です。
WITH 年齢区分 AS (
SELECT
id,
CASE WHEN age >= 18 THEN '成人'
ELSE '未成年'
END AS 年齢区分
FROM users
)
SELECT
u.name,
a.年齢区分
FROM 年齢区分 AS a
INNER JOIN users AS u ON u.id = a.id;
- WITH句を使って、
年齢区分
という中間的な結果を保存します。 - SELECTクエリで、
年齢区分
とusers
テーブルを結合します。
WITH句を使う方法は、複雑なクエリを分かりやすく記述する際に有効です。
sql sqlite