NU:LOGiC Logo

【SQL】SELECT文の書き方:データベースからデータを取得する基本手順

【SQL】SELECT文の書き方:データベースからデータを取得する基本手順

データベース操作の基本であるSQLのSELECT文。これを理解し、適切に使用することで、情報の取得が格段にスムーズになります。この記事では、SELECT文の使い方やその関連構文を詳しく解説しています。

3行で要約すると

  • SELECT文の基本構造と、データベースからの情報取得の基本手順を学ぶ。
  • WHERE, ORDER BY, JOIN, GROUP BYなどの関連構文でデータを絞り込み、整理、結合する方法を理解する。
  • 実例を交えて、SELECT文を日常の業務やデータ解析でいかに効果的に活用するかを探る。

SELECT文とは?

SQL(Structured Query Language)は、データベースとやり取りするための言語です。その中でも、SELECT文はデータベースからデータを取得するための基本的な文として使用されます。データベースに保存されている情報を表示したい場合、SELECT文を使ってデータを「選択」します。

SELECT文の基本構造

SELECT文の基本的な書き方は以下のようになります。

SELECT カラム名1, カラム名2, ...
FROM テーブル名;

例えば、usersというテーブルからnameageのカラムを取得したい場合は、次のように書きます。

SELECT name, age
FROM users;

こうすることで、usersテーブルの中からnameageの情報を全て取得することができます。


SELECT文の用途

SELECT文は、データベースから情報を取得する際の基本です。以下は、SELECT文の主な用途と具体的なシチュエーションの例です。

  • ウェブサイトのユーザー情報の一覧表示:

    • 例: ユーザー管理ページやアカウントページで表示
    SELECT user_name, email, registration_date 
    FROM users;
    
  • ショッピングサイトの商品情報の取得:

    • 例: 商品ページや検索結果ページでの表示
    SELECT product_name, price, stock, image_url 
    FROM products;
    
  • ブログの記事の一覧や詳細表示:

    • 例: トップページやカテゴリ別ページでの表示
    SELECT title, publication_date, excerpt 
    FROM blog_posts 
    WHERE category = 'Tech';
    
  • 統計情報の集計:

    • 例: 月間の訪問者数や商品の月間売上
    SELECT COUNT(visitor_id) AS monthly_visitors, MONTH(visit_date) AS visit_month 
    FROM site_visits 
    GROUP BY visit_month;
    
  • 条件に合致するデータのフィルタリング:

    • 例: 特定のキーワードで記事を検索
    SELECT title, publication_date 
    FROM blog_posts 
    WHERE content LIKE '%SQL%';
    
    • 例: 特定の価格帯の商品を検索
    SELECT product_name, price 
    FROM products 
    WHERE price BETWEEN 1000 AND 5000;
    
  • 外部APIとの連携:

    • 例: 外部のサービスやアプリとのデータのやり取り
    SELECT user_name, last_login_date 
    FROM users 
    WHERE last_login_date > '2023-01-01';
    

このように、SELECT文は多岐にわたる場面で使用されます。特定の条件を満たすデータだけを取得したい場合や、データを特定の順序で並べ替えたい場合など、さまざまなオプションを付け加えることで、柔軟なデータの取得が可能です。

WHERE句:条件を絞り込む

データベースにはたくさんのデータが保存されていますが、全てのデータを取得することは少ないですよね。特定の条件を満たすデータだけを取得したい場合には、WHERE句を使って条件を指定します。

基本的な比較演算子

WHERE句で使うことができる比較演算子にはいくつかの種類があります。以下はその基本的なものです。

  • = : 等しい
  • != or <> : 等しくない
  • < : より小さい
  • > : より大きい
  • <= : 以下
  • >= : 以上

例として、usersテーブルから20歳以上のユーザーの名前と年齢を取得したい場合は、次のように書きます。

SELECT name, age
FROM users
WHERE age >= 20;

複数条件の組み合わせ

1つの条件だけでなく、複数の条件を組み合わせてデータを取得することもできます。その場合、以下のような論理演算子を使用します。

  • AND : 両方の条件が真の場合に真となる
  • OR : どちらかの条件が真の場合に真となる

例えば、usersテーブルから20歳以上かつ名前が"Yamada"のユーザーを取得したい場合は、次のように書きます。

SELECT name, age
FROM users
WHERE age >= 20 AND name = 'Yamada';

このように、WHERE句を使うことで、特定の条件を満たすデータだけを簡単に取得することができます。

ORDER BY句:データを並び替える

データを取得する際、デフォルトの並び順ではなく、特定のカラムの値に基づいてデータを並び替えたい場合があります。例えば、商品の価格順やユーザーの年齢順など、様々なシチュエーションでデータの並び替えが必要となります。その際には、ORDER BY句を使用します。

昇順・降順の指定

ORDER BY句を使う際、どのカラムで並び替えるかを指定するとともに、昇順(ASC)か降順(DESC)かも指定します。

例えば、usersテーブルからデータを取得し、年齢の若い順(昇順)に並べたい場合は以下のように書きます。

SELECT name, age
FROM users
ORDER BY age ASC;

逆に、年齢の高い順(降順)にデータを取得したい場合は、以下のように書きます。

SELECT name, age
FROM users
ORDER BY age DESC;

複数のカラムでのソート

ORDER BY句では、1つだけでなく複数のカラムでデータを並び替えることもできます。複数のカラムを指定すると、最初に指定したカラムで並び替えた後、次に指定したカラムで並び替えが行われます。

例として、usersテーブルで、まず性別(gender)を元に並び替え、その後に年齢(age)で並び替えたい場合は、以下のように書きます。

SELECT name, gender, age
FROM users
ORDER BY gender ASC, age DESC;

このように、ORDER BY句を活用することで、必要な順序でデータを簡単に取得することができます。

JOIN句:テーブルを結合する

データベースの中には、複数のテーブルが存在し、それぞれのテーブルには異なる情報が保存されています。ときには、2つ以上のテーブルから情報を組み合わせて取得したい場面があります。その際に使用するのが、JOIN句です。

INNER JOINの基本

INNER JOINは、複数のテーブルの中から共通するデータだけを取得する方法です。具体的には、結合条件に合致するデータだけが結果として返されます。

考え方としては、テーブルAとテーブルBがあり、それぞれのテーブルに共通するカラム(例えば、user_id)を基にデータを結合するというものです。

例として、usersテーブルとordersテーブルをuser_idで結合したい場合、以下のように書きます。

SELECT users.name, orders.product_name
FROM users
INNER JOIN orders ON users.user_id = orders.user_id;

このSQL文は、ユーザーの名前とそのユーザーが注文した商品名を取得します。

LEFT JOIN、RIGHT JOINの違い

INNER JOIN以外にも、LEFT JOINRIGHT JOINという結合方法が存在します。

  • LEFT JOIN:テーブルAの全てのデータと、テーブルBの中で結合条件に合致するデータを取得します。
  • RIGHT JOIN:テーブルBの全てのデータと、テーブルAの中で結合条件に合致するデータを取得します。

例えば、usersテーブルの全てのユーザーと、そのユーザーが注文した商品(もし注文していなければ、商品情報はNULL)を取得する場合、以下のように書きます。

SELECT users.name, orders.product_name
FROM users
LEFT JOIN orders ON users.user_id = orders.user_id;

JOIN句を使うことで、複数のテーブルから必要な情報を組み合わせて取得することができます。これにより、データベース内の情報をより柔軟に活用することが可能となります。

GROUP BY句:データをまとめる

データベースから情報を取得する際に、特定のカラムの値に基づいてデータをまとめたい場面があります。例えば、商品カテゴリごとの売上合計や、都道府県ごとのユーザー数など、データを集約して取得することが求められる場合です。その際に使用するのが、GROUP BY句です。

カラムごとのデータのまとめ方

GROUP BY句を使うことで、指定したカラムの値ごとにデータをまとめることができます。例として、salesテーブルがあり、商品カテゴリごとの売上合計を取得したい場合、以下のように書きます。

SELECT category, SUM(sales_amount)
FROM sales
GROUP BY category;

このSQL文により、各商品カテゴリごとの売上合計が取得できます。

HAVING句との組み合わせ

GROUP BY句を使用する際、集約したデータの中からさらに特定の条件を満たすものだけを抽出したい場合があります。その場合、HAVING句を使って条件を指定します。

例えば、上記の商品カテゴリごとの売上合計の中で、売上合計が10,000円以上のカテゴリだけを取得したい場合、以下のように書きます。

SELECT category, SUM(sales_amount) AS total_sales
FROM sales
GROUP BY category
HAVING total_sales >= 10000;

このように、GROUP BY句とHAVING句を組み合わせることで、集約したデータの中からさらに条件を満たすものだけを簡単に取得することができます。

終わりに

SQLの構文は多岐にわたり、難しく感じるかもしれません。しかし、実際に手を動かして練習を積むことで、自然と理解が深まります。今回紹介した基本的な構文をマスターすれば、日常の業務やデータ解析において、データベースからの情報取得が格段にスムーズになります。是非とも、実際の環境での練習を重ね、SQLのスキルを磨いていきましょう。