WHERE 句
PostgreSQL の WHERE 句は、指定した条件に基づいてクエリ内の行をフィルター処理するために使用され、ニーズを満たすデータのみを取得できます。
これは、さまざまなオプションを備えた強力なフィルター処理ツールであり、ユーザーは条件を組み合わせ、論理演算子を適用し、出力を書式設定して複雑なクエリ要件に対応することができます。
単一の条件に基づくフィルター処理
SELECT product_name, price, unit
FROM sales.products
WHERE price > 50;
このクエリでは、 price が 50 を超える製品を取得します。
複数の条件 (AND、OR) に基づくフィルター処理
SELECT customer_name, country, city, NOW() AS query_time
FROM sales.customers
WHERE country = 'Germany'
AND city = 'Berlin';
このクエリは、ドイツの顧客のうち、ベルリンに在住している顧客を取得し、query_time という名前が付いた計算列を投影し、その値は組み込み関数 NOW() によって生成されます。
組み込み関数は、データベース システムが提供する組み込み関数で、数学的計算、文字列操作、システム生成値の取得などの特定の操作を実行します。 この例では、NOW() を使用して、クエリが実行された正確な日付と時刻をフェッチし、データが取得されたタイミングに関する分析情報を強化します。 その他の組み込み関数の例には、現在の日付を返す CURRENT_DATE や、指定された文字列の長さを計算する LENGTH() があります。
SELECT product_name, category_id, CAST(price AS VARCHAR) as price_text
FROM sales.products
WHERE category_id = 1
OR category_id = 8;
このクエリでは、カテゴリ 1 (飲料) またはカテゴリ 8 (シーフード) に属する製品を選択します。 さらに、CAST 関数を使用して、price 列をテキスト形式に変換し、結果に price_text として表示します。
複数の条件に基づくフィルター処理 (IN、NOT IN)
SELECT product_name, category_id, CAST(price as VARCHAR) as price_text
FROM sales.products
WHERE category_id IN (1,8);
このクエリは前のクエリと同じ結果を生成しますが、OR の代わりに IN 句を使用します。 IN 句は、列が指定したリスト内のいずれかの値と一致するかどうかを確認することで、レコードをフィルター処理します。
SELECT customer_name, country
FROM sales.customers
WHERE country NOT IN ('USA');
このクエリでは、米国に拠点を置かない顧客が検索されます。
SELECT order_id, order_date, EXTRACT(MONTH FROM order_date) AS order_month
FROM sales.orders
WHERE EXTRACT(MONTH FROM order_date) = 1;
このクエリでは、EXTRACT 関数を使用して 1 月に行われた注文を取得し、order_date 列から月を分離し、order_month として表示します。
パターン マッチングでの LIKE の使用
SELECT customer_name, address
FROM sales.customers
WHERE customer_name LIKE 'A%';
このクエリでは、名前が 'A' で始まる顧客を取得します。 文字列リテラル内の % 記号は、パターン マッチングの際に LIKE 演算子で使用されるワイルドカードです。 これは 0 個以上の文字を表し、クエリは文字 'A' で始まり、その後に任意の文字シーケンスが続く任意の customer_name を照合できます。 たとえば、クエリ結果には "Alice" や "Andrew" などの名前が含まれます。
SELECT product_id, product_name
FROM sales.products
WHERE product_name LIKE '%Chocolate%';
このクエリでは、名前に "Chocolate" という単語が含まれている製品を取得します。 クエリで "Chocolate" という単語の前後に配置すると、任意の場所 (先頭、中央、末尾) に "Chocolate" が表示される製品名を照合することができます。 たとえば、クエリ結果には、"Teatime Chocolate Biscuits" や "Chocolate" などの製品名が含まれます。
複数値での IN および NOT IN の使用
SELECT customer_name AS full_name
FROM sales.customers
WHERE country IN ('Germany', 'France', 'UK');
このクエリでは、country がドイツ、フランス、または英国に指定されている顧客の一覧を取得します。 SQL 演算子の IN を使用して、クエリは国の列で、指定された値のセット ('Germany'、'France'、'UK') と一致しているデータがないかチェックします。 国の列の値がこれら 3 つのオプションのいずれかに対応する場合、対応する顧客名が返され、エイリアス full_name の下に表示されます。
SELECT *
FROM sales.products
WHERE category_id NOT IN (1, 3);
このクエリでは、カテゴリ 1 または 3 に分類されていない製品を取得します。
範囲値での BETWEEN の使用
SELECT *
FROM sales.products
WHERE price BETWEEN 20 and 40;
このクエリでは、価格が 20 - 40 通貨単位 (20 および 40 を含む) の製品を取得します。
SQL の BETWEEN ステートメントは、指定した値の範囲内のデータをフィルター処理するために使用されます。 これは包含的で、範囲に指定された境界値が含まれます。 これは、数値、日付、またはテキスト値 (該当する場合) に基づいてデータセットを絞り込む場合に便利です。 これにより、複数の条件演算子 (>= と <= など) を使用せずに、範囲を簡潔かつ読みやすい方法で定義できます。
null 値での IS NULL および IS NOT NULL の使用
SELECT *
FROM sales.customers
WHERE postal_code IS NULL;
このクエリは、postal_code がない顧客を取得します。
SQL では、NULL はデータベース内のデータの欠落または未定義を表します。
これはゼロ、空の文字列、または他の種類の値と等価ではなく、値が存在しないことを示します。
NULL を処理するには、IS NULL のようなフィルターを使用して欠落値を含むレコードを特定したり、IS NOT NULL を使用してデータが特定されているレコードを検索したりできます。
これらのフィルターはデータのクレンジングに有用で、修正、除外、または特殊な処理のためにレコードを分離するのに役立ちます。