SQL - 表現式
こんにちは、未来のSQL魔術師たち!今日は、SQL表現式の世界への興味深い旅に出発します。プログラミングが初めてであっても心配しないでください。私はあなたの親切なガイドとして、ステップバイステップで進めていきます。このチュートリアルの終わりには、プロのようにSQL表現式を構築できるようになるでしょう!
SQL表現式とは?
まず基本から始めましょう。SQL表現式は、SQLクエリ内で使用できる式や計算です。一つ以上の値、演算子、SQL関数の組み合わせで、値を評価します。データベースクエリに味を加える秘密のソースだと思ってください!
例えば、製品テーブルがあり、全ての価格に10%の割引を適用したいとします。以下のような表現式を使用できます:
SELECT product_name, price, price * 0.9 AS discounted_price
FROM products;
このクエリでは、price * 0.9
が私たちのSQL表現式です。価格を0.9倍することで、10%の割引を適用しています。
SQLブール表現式
次に、ブール表現式について見ていきましょう。これらはSQL世界の真偽質問のようなものです。常にTRUE、FALSE、またはNULL(未知を意味します)のいずれかの結果になります。
ブール表現式は、データをフィルタリングしたり、クエリ内で決定を行いたいときに非常に有用です。以下はブール表現式で使用される一般的な演算子です:
演算子 | 説明 |
---|---|
= | 等しい |
<> | 等しくない |
> | より大きい |
< | より小さい |
>= | より大きいか等しい |
<= | より小さいか等しい |
AND | 論理AND |
OR | 論理OR |
NOT | 論理NOT |
以下に、これらを使用した例を示します:
-- 100ドル以上の価格を持つ全ての製品を見つける
SELECT * FROM products WHERE price > 100;
-- 直近30日間の注文を見つける
SELECT * FROM orders WHERE order_date >= CURRENT_DATE - INTERVAL '30 days';
-- ニューヨークまたはカリフォルニアのアクティブ顧客を見つける
SELECT * FROM customers
WHERE (state = 'NY' OR state = 'CA') AND is_active = TRUE;
これらの例のそれぞれで、WHERE
句の後ろにある部分がブール表現式です。データの各行に対してはい/いいえの質問を行っているようなものです。
SQL数値表現式
次に、数値表現式について見ていきましょう。これらはSQLの数学の問題のようなもので、数字と算術演算子を含みます。
以下は基本的な算術演算子です:
演算子 | 説明 |
---|---|
+ | 加算 |
- | 減算 |
* | 掛け算 |
/ | 除算 |
% | モジュロ(余り) |
以下に例を示します:
-- 在庫の総価値を計算する
SELECT product_name, quantity, price, quantity * price AS total_value
FROM inventory;
-- 従業員の年齢を計算する
SELECT first_name, last_name, EXTRACT(YEAR FROM CURRENT_DATE) - EXTRACT(YEAR FROM birth_date) AS age
FROM employees;
-- 使用された予算の割合を計算する
SELECT project_name, budget, spent, (spent / budget) * 100 AS percent_spent
FROM projects;
これらの例では、数値表現式を使用してデータに計算を適用しています。これは、既存データから新しい洞察を導出するのに非常に有用です。
SQL日付表現式
最後に、日付表現式について話しましょう。SQLでの日付の取り扱いは厄介なことがありますが、非常に強力です。日付表現式を使用することで、クエリ内で日付を操作および比較できます。
以下は一般的な日付関数です:
関数 | 説明 |
---|---|
CURRENT_DATE | 現在の日付を返す |
CURRENT_TIMESTAMP | 現在の日付と時刻を返す |
DATE_ADD | 指定された時間間隔を日付に追加する |
DATE_SUB | 指定された時間間隔を日付から引く |
DATEDIFF | 二つの日付の差を計算する |
以下にこれらを使用した例を示します:
-- 今日注文された注文を見つける
SELECT * FROM orders WHERE order_date = CURRENT_DATE;
-- 直近90日間注文しなかった顧客を見つける
SELECT * FROM customers
WHERE customer_id NOT IN (
SELECT DISTINCT customer_id
FROM orders
WHERE order_date >= CURRENT_DATE - INTERVAL '90 days'
);
-- 各注文がどれだけ前に注文されたか計算する
SELECT order_id, order_date,
DATEDIFF(CURRENT_DATE, order_date) AS days_ago
FROM orders;
これらの日付表現式を使用することで、日付に関する複雑な操作を行うことができます。これは、時間に基づくデータの分析には非常に重要です。
そして、ここまでましたね、皆さん!SQL表現式の世界を旅しました。ブール論理から数値計算、そして時間旅行(少しの)まで。心に留めておいてください、練習は完璧を生みます。これらの表現式を自分のクエリで実験してみてください。
最後に、ちょっとしたSQLジョークをどうぞ:データベース管理者はなぜ妻を離れましたか?彼女は多対多の関係を持っていました!(バダムタス!)
快適なクエリを楽しんでください。そして、あなたのジョインが常に迅速で、クエリがタイムアウトしないことを祈っています!
Credits: Image by storyset