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式: 比較的シンプルで分かりやすいコードが書けます。