SQLによるデータベースの検索(SELECT文の基本)

SQLの SELECT 文は、データベースからデータを取得するための最も基本的なコマンドです。ここでは、SELECT 文の基本的な使い方と、検索条件の指定方法について解説します。

SELECT文の基本構文

データの検索

SELECT 文は、指定したテーブルから列(カラム)を選択してデータを取得します。

SELECT 列リスト FROM 表名;
  • 列リスト: 取得したい列の名前をカンマ区切りで指定します。すべての列を取得する場合は * を使用します。
  • 表名: データを取得したいテーブルの名前を指定します。

例:

SELECT column1, column2 FROM my_table; -- my_tableからcolumn1とcolumn2を取得
SELECT * FROM my_table;             -- my_tableからすべての列を取得

テーブル構造の確認

テーブルの構造(列名、データ型、NULL許容など)を確認するには、DESCRIBE または DESC コマンドを使用します。

DESCRIBE 表名;
-- または
DESC 表名;

例:

DESCRIBE my_table;

重複データの排除

DISTINCT キーワードを使用すると、選択した列の重複する値を排除し、一意な値のみを取得できます。

SELECT DISTINCT 列リスト FROM 表名;

例:

SELECT DISTINCT category FROM products; -- productsテーブルから重複しないカテゴリ名を取得

検索条件の指定

WHERE 句を使用すると、特定の条件を満たすレコードのみを検索できます。

SELECT 列リスト FROM 表名
WHERE 検索条件;

例:

SELECT * FROM users WHERE age > 30; -- usersテーブルから年齢が30歳より大きいユーザーを取得

結果のソート

ORDER BY 句を使用すると、検索結果を指定した列の順序でソートできます。

SELECT 列リスト FROM 表名
WHERE 検索条件
ORDER BY 列名 [ASC|DESC];
  • ASC: 昇順(デフォルト)
  • DESC: 降順

例:

SELECT name, age FROM users ORDER BY age DESC; -- usersテーブルを年齢の降順でソート
SELECT product_name, price FROM products ORDER BY price ASC, product_name ASC; -- 価格で昇順、同じ価格なら製品名で昇順

検索条件の演算子

WHERE 句で利用できる主な演算子です。

  • BETWEEN: 指定した範囲内の値を検索します(両端を含む)。
    SELECT * FROM orders WHERE order_date BETWEEN '2023-01-01' AND '2023-01-31';
    
  • IN: 指定したリスト内のいずれかの値と一致するものを検索します。
    SELECT * FROM employees WHERE department_id IN (10, 20, 30);
    
  • LIKE: 文字列の部分一致検索を行います。ワイルドカードを使用します。
    • %: 0文字以上の任意の文字列
    • _: 任意の1文字
    SELECT * FROM products WHERE product_name LIKE 'Apple%'; -- 'Apple'で始まる製品名
    SELECT * FROM customers WHERE phone_number LIKE '___-____-____'; -- 特定の形式の電話番号
    
  • IS NULL / IS NOT NULL: NULL値(値がない状態)を検索します。
    SELECT * FROM users WHERE email IS NULL; -- メールアドレスが登録されていないユーザー
    SELECT * FROM products WHERE description IS NOT NULL; -- 説明が登録されている製品
    

その他の注意点

  • 文字列検索の大文字小文字の区別: データベースシステム(RDBMS)によっては、文字列検索において大文字と小文字を区別しない場合があります(例: MySQLのデフォルト設定)。厳密な区別が必要な場合は、RDBMSのドキュメントを確認し、適切な設定や関数を使用してください。
  • 論理演算子: 複数の検索条件を組み合わせるには、AND, OR, NOT などの論理演算子を使用します。
    • NOT, AND, OR の順で優先順位が評価されます。
    • 括弧 () を使用することで、優先順位を明示的に変更できます。
    SELECT * FROM products WHERE category = 'Electronics' AND price > 10000;
    SELECT * FROM users WHERE (age < 18 OR age > 65) AND country = 'Japan';
    

これらの基本的な構文と演算子を理解することで、SQLを使ったデータベースからのデータ検索を効果的に行うことができます。