SQL:論理式、比較演算子、CASE式を使って真偽値をクエリする
SQL SELECT ステートメントでブール値を返す
論理式を使用する
WHERE
句に論理式を使用すると、条件が真の場合にのみ行が返されます。これは、ブール値 TRUE
を返すのと同じです。
SELECT *
FROM customers
WHERE active = TRUE;
このクエリは、active
列の値が TRUE
であるすべての顧客レコードを返します。
比較演算子を使用する
SELECT
句で比較演算子を使用して、2 つの値を比較し、真偽値を返すことができます。
SELECT customer_id,
CASE WHEN age >= 18 THEN 'adult'
ELSE 'minor'
END AS age_group
FROM customers;
このクエリは、age
列の値が 18 歳以上の場合に "adult"、それ以外の場合は "minor" という文字列を含む新しい列 age_group
を持つ結果セットを返します。
CASE
式を使用して、条件に基づいてさまざまな値を返すことができます。
SELECT product_id,
CASE WHEN stock_level > 0 THEN 'in stock'
ELSE 'out of stock'
END AS stock_status
FROM products;
このクエリは、stock_level
列の値が 0 より大きい場合に "in stock"、それ以外の場合は "out of stock" という文字列を含む新しい列 stock_status
を持つ結果セットを返します。
ブール関数を使用する
SQL には、さまざまなブール値を返す関数があります。たとえば、ISNULL
関数は、値が NULLかどうかを確認し、TRUE
または FALSE
を返します。
SELECT customer_id,
ISNULL(email, 'no email address') AS email_address
FROM customers;
このクエリは、email
列に値がある場合はその値を、そうでない場合は "no email address" という文字列を含む新しい列 email_address
を持つ結果セットを返します。
補足
- 上記はほんの一例であり、SQL でブール値を返す方法は他にもたくさんあります。
- 使用する方法は、特定の要件によって異なります。
- 結果セットにブール値を含める必要がある場合は、上記のいずれかの方法を使用できます。
このコードは、customers
テーブルから active
列が TRUE
のすべてのレコードを選択するクエリです。
SELECT *
FROM customers
WHERE active = TRUE;
このコードは、customers
テーブルから age
列が 18 歳以上のすべてのレコードを選択し、新しい列 age_group
に "adult" または "minor" という値を含めるクエリです。
SELECT customer_id,
CASE WHEN age >= 18 THEN 'adult'
ELSE 'minor'
END AS age_group
FROM customers;
CASE 式を使用する
このコードは、products
テーブルから stock_level
列が 0 より大きいすべてのレコードを選択し、新しい列 stock_status
に "in stock" または "out of stock" という値を含めるクエリです。
SELECT product_id,
CASE WHEN stock_level > 0 THEN 'in stock'
ELSE 'out of stock'
END AS stock_status
FROM products;
SELECT customer_id,
ISNULL(email, 'no email address') AS email_address
FROM customers;
これらの例は、SQL でブール値を返すさまざまな方法を示すほんの一例です。特定の要件に応じて、さまざまな方法を組み合わせて使用できます。
SQL でブール値を返すその他の方法
ビット演算子を使用して、ビットレベルで値を操作できます。たとえば、BITXOR
演算子を使用して、2 つのビット値が同じかどうかを確認できます。
SELECT customer_id,
BITXOR(active, deleted) AS is_active_but_not_deleted
FROM customers;
このクエリは、active
列と deleted
列のビット値が異なるすべてのレコードを選択し、新しい列 is_active_but_not_deleted
に TRUE
または FALSE
を含めます。
SQL には、さまざまな論理値を返す関数があります。たとえば、NOT
関数は、論理式の値を反転します。
SELECT customer_id,
NOT active AS is_inactive
FROM customers;
このクエリは、customers
テーブルからすべてのレコードを選択し、新しい列 is_inactive
に active
列の値の反対の値を含めます。
サブクエリを使用して、より複雑な論理をクエリに含めることができます。
SELECT customer_id,
EXISTS (
SELECT 1
FROM orders
WHERE customer_id = customers.customer_id
) AS has_orders
FROM customers;
このクエリは、customers
テーブルからすべてのレコードを選択し、新しい列 has_orders
に、対応する顧客 ID で orders
テーブルに少なくとも 1 つのレコードがあるかどうかを示す値を含めます。
結合を使用して、2 つのテーブルからデータを結合し、ブール値を導き出すことができます。
SELECT c.customer_id,
o.order_id IS NOT NULL AS has_orders
FROM customers c
LEFT JOIN orders o ON c.customer_id = o.customer_id;
sql select boolean