SQLiteのBoolean expressionでできること:条件分岐、データフィルタリング、データ操作をマスターしよう
Boolean expression とは
Boolean expression は、真 (TRUE) または偽 (FALSE) のいずれかの値を返す論理式です。SQLite では、Boolean expression を用いて、以下の操作を実行できます。
- データ操作: データの更新や削除を条件付きで行う
- データフィルタリング: 特定の条件に合致するデータのみを取得する
- 条件分岐: 特定の条件が満たされた場合のみ、処理を実行する
Boolean expression の構成要素
Boolean expression は、以下の要素で構成されます。
- 関数: 特定の処理を実行して真偽値を返す関数
- 列名: テーブル内の列を参照する名前
- リテラル: 真偽値、文字列、数値などの定数
- 論理演算子: 複数の Boolean expression を組み合わせ、真偽値を返す演算子です。例:
AND
(かつ),OR
(または),NOT
(非) - 比較演算子: 2 つの値を比較し、真偽値を返す演算子です。例:
=
(等しい),!=
(等しくない),>
(より大きい),<
(より小さい),>=
(以上),<=
(以下)
Boolean expression の構文
Boolean expression の基本的な構文は以下の通りです。
<比較演算子> <左辺値> <右辺値>
例:
`age > 18` # 年齢が 18 歳以上の場合
`name = 'John Doe'` # 名前が "John Doe" の場合
複数の Boolean expression を組み合わせる場合は、論理演算子を用います。
<Boolean expression> <AND/OR/NOT> <Boolean expression>
`age > 18 AND gender = 'Male'` # 年齢が 18 歳以上で、性別が男性の場合
`NOT (name = 'John Doe' OR age < 18)` # 名前が "John Doe" ではないか、年齢が 18 歳未満の場合
条件分岐
条件分岐は、特定の条件が満たされた場合のみ、処理を実行するものです。
SELECT * FROM customers
WHERE age > 18;
このクエリは、年齢が 18 歳以上の顧客のみを抽出します。
データフィルタリング
データフィルタリングは、特定の条件に合致するデータのみを取得するものです。
DELETE FROM orders
WHERE status = 'Cancelled';
このクエリは、ステータスが "Cancelled" の注文のみを削除します。
データ操作
データ操作は、データの更新や削除を条件付きで行うものです。
UPDATE employees
SET salary = salary * 1.1
WHERE department = 'Sales';
このクエリは、営業部の従業員の給与を 10% 上昇させます。
サンプル 1: 特定の年齢層の顧客を抽出する
SELECT * FROM customers
WHERE age BETWEEN 20 AND 30;
サンプル 2: 特定のステータスを持つ注文を更新する
この例では、ステータスが "Pending" の注文のステータスを "Shipped" に更新するクエリを実行します。
UPDATE orders
SET status = 'Shipped'
WHERE status = 'Pending';
サンプル 3: 特定の条件を満たさない商品を削除する
この例では、在庫数が 0 の商品を削除するクエリを実行します。
DELETE FROM products
WHERE quantity = 0;
サンプル 4: 論理演算子を用いた複雑な条件分岐
この例では、年齢が 25 歳以上で、かつ性別が女性である顧客を抽出するクエリを実行します。
SELECT * FROM customers
WHERE age >= 25 AND gender = 'Female';
この例では、現在の日付が誕生日である顧客を抽出するクエリを実行します。
SELECT * FROM customers
WHERE birthday = date('now');
- データベースの操作を行う前に、必ずバックアップを取ることを忘れないでください。
CASE式
CASE式は、条件に応じて異なる値を返す式です。「Boolean expression」と同様に、条件分岐やデータフィルタリングなどに活用できます。
SELECT
customer_id,
CASE
WHEN age >= 18 THEN 'Adult'
ELSE 'Minor'
END AS age_group
FROM customers;
この例では、CASE式を用いて顧客の年齢層を「Adult」と「Minor」に分類しています。
サブクエリ
サブクエリは、別のクエリを埋め込んだクエリです。「Boolean expression」と同様に、データの絞り込みや条件付きの処理に利用できます。
SELECT * FROM customers
WHERE customer_id IN (
SELECT customer_id FROM orders
WHERE status = 'Shipped'
);
この例では、サブクエリを用いて、過去に注文を完了したことがある顧客のみを抽出しています。
関数
条件に応じて真偽値を返す関数を用いることもできます。
SELECT * FROM customers
WHERE is_adult(age);
この例では、is_adult
という架空の関数を用いて、18歳以上の顧客のみを抽出しています。
ビット演算
ビット演算を用いて、条件に応じて異なる値を表現することもできます。
SELECT
customer_id,
(age >= 18) AS is_adult_bit
FROM customers;
この例では、ビット演算を用いて、18歳以上の顧客を「1」、それ以外の顧客を「0」としています。
結合
複数のテーブルを結合し、条件に応じてデータを取得することもできます。
SELECT c.customer_id, o.status
FROM customers AS c
LEFT JOIN orders AS o ON c.customer_id = o.customer_id
WHERE o.status = 'Shipped';
この例では、結合を用いて、過去に注文を完了したことがある顧客のみの顧客IDと注文ステータスを取得しています。
最適な代替方法の選択
上記の代替方法それぞれには長所と短所があります。状況に応じて、最も適切な方法を選択する必要があります。
- 結合: 複数のテーブルから関連データを取得するのに適しています。
- ビット演算: 処理速度が速いですが、コードが分かりにくくなる場合があります。
- 関数: コードの再利用性を高めることができます。
- サブクエリ: 複雑な条件を処理するのに適しています。
- CASE式: 比較的シンプルで分かりやすいコードが書けます。