PR

【SQL】SELECT文の基本をわかりやすく3分で解説

Database

SELECT文は指定したテーブルからレコードを抽出する際に用いるSQL文で、SQL文全体の中で最も頻繁に用いられる構文です。

SELECT 列名1, 列名2, ... 
FROM テーブル名
WHERE 条件式;

参考 SQLとは?

SELECT文は何も見なくてもすらすらと書けるのが、プログラマー/システムエンジニアとしての基本です!是非最後までご覧ください。

このページで学べる内容
  • SELECT文の基本
    • カラムを指定
    • 全カラムを指定
    • AS:別名の付与
  • WHERE:抽出条件の指定

SELECT文の基本を知らないと、どの言語を扱うプログラマーであっても現場でも大変苦労します。このページの内容は確実に理解するようにしましょう!

スポンサーリンク

SELECT文の基本

テーブルからデータを取得する際の基本的なSELECT文は以下の通りです。

SELECT 列名1, 列名2, ... 
FROM テーブル名
WHERE 条件式;
  • SELECT: 取得したいカラム(列)を指定します。
  • FROM: どのテーブルからデータを取得するかを指定します。
  • WHERE任意): 取得するデータの条件を指定します。この句はオプションで、指定しなければテーブルの全てのデータが取得されます。
句(clause)

句 とはSQLを構成する要素のこと。SELECT / FROM などのSQLキーワードから始まるフレーズを指します。

SELECT句やFROM句などというように「SQLキーワード+句」とセットで呼称するのが一般的です。

以下は、employeesというテーブルからfirst_namelast_nameを取得する例です。

取得したいカラムが複数ある場合は「,」で区切ります。

/* 対象テーブルのレコード
+----+------------+-----------+-------------+
| id | first_name | last_name | department  |
+----+------------+-----------+-------------+
|  1 | John       | Doe       | Engineering |
|  2 | Jane       | Smith     | HR          |
|  3 | Alice      | Johnson   | Sales       |
|  4 | Bob        | White     | Engineering |
+----+------------+-----------+-------------+
*/

-- 全ての従業員の名前を取得
SELECT first_name, last_name 
FROM employees;

/* 結果
+------------+-----------+
| first_name | last_name |
+------------+-----------+
| John       | Doe       |
| Jane       | Smith     |
| Alice      | Johnson   |
| Bob        | White     |
+------------+-----------+
*/

-- first_nameが"John"である従業員の名前と部署を取得
SELECT first_name, last_name, department
FROM employees 
WHERE first_name = 'John';

/* 
+------------+-----------+-------------+
| first_name | last_name | department  |
+------------+-----------+-------------+
| John       | Doe       | Engineering |
+------------+-----------+-------------+
*/

↑の形がSELECT文の基本中の基本です。

WHERE:抽出条件の指定

WHERE句についてはいくつかの注意点があるので、1から基本から再度振り返っておきます。

  • WHERE任意): 取得するデータの条件を指定。指定しなければテーブルの全てのデータが取得される。

例えば、↓のテーブルから「Suzuki」さんに関するデータを取得したいような場合。

このようなシーンで利用されるのがWHERE句です。

where句
図1:where句

レコードを抽出する条件を指定する場合、以下のようにWHERE句を用います。

MemberList テーブルから "Name" 列が「Suzuki」となっているものを取得する場合のサンプルコードがこちらです。

SELECT Number, Name, Address, PhoneNumber
  FROM MemberList
 WHERE Name = "Suzuki";

WHERE句を利用する際の注意点

  1. データ型の一致WHERE句で条件を指定する際、比較するカラムのデータ型と比較値のデータ型が一致していることを確認する必要があります。データ型が異なるとエラーが発生する場合があります。
  2. NULLの取り扱い: DBMSによっては、NULLとの比較に特別な取り扱いが必要です。例えば、= NULLではなくIS NULLを使用する必要があるなど。
  3. 複数の条件の組み合わせ: ANDORを使用して複数の条件を組み合わせる際、適切な括弧を使用して条件の優先順位を明確にすることが重要です。
  4. パフォーマンス: 複雑な条件やサブクエリ、JOINなどを多用すると、クエリのパフォーマンスに影響が出ることがあります。クエリの最適化やEXPLAINコマンドを使用して実行計画を確認することで、ボトルネックを特定し最適化の方向性を探ることができます。

SELECT *:すべてのカラムを抽出する

テーブルのカラムが多くなっていくと、1つ1つのカラムをSELECT句で指定するのは大変です。

そこで、テーブルにあるすべてのカラムを抽出したい場合は「* アスタリスク」を用います。

SELECT * の基本

  • *はワイルドカードとして機能し、テーブル内のすべてのカラムを意味する。
  • このコマンドは、テーブルの内容を迅速に確認したい時や、テーブルの構造(どのようなカラムがあるか)を知りたい場合に便利です。
SELECT *
  FROM (テーブル名);

例えばテーブル「employees」からすべてのカラムを抽出したい場合は以下のように記述します。

SELECT * FROM employees;

結果はすべてのカラムがそのまま抽出されます。

「*」を使用すると、結果の並び順は「CREATE TABLE」で定義した通りに出力されます。

結果の並び順を変更したい場合には、SELECT句でカラム名を順番を変えて記述する必要があります。

「*」を利用すればSQL文の記述も早くなりカラム名指定などのミスも格段に減ります。

ただし、すべてのカラムを抽出する分、SQL実行のパフォーマンスも落ちてしまうというデメリットも存在します。

ちょっとしたときにSELECT文を書くようなときは「*」指定はOKですが、例えば高効率なパフォーマンスが求められる場合や、抽出したいカラムが決まっている場合は1個1個カラムを指定するように心がけることをおすすめします。

注意点

  1. パフォーマンス:大きなテーブルでSELECT * を使うと、不要なデータも読み込むことになり、システムのパフォーマンスに影響を与える可能性があります。必要なカラムのみを指定してデータを取得することが、効率的です。
  2. 明確さ: カラムを明示的に指定することで、コードが読みやすくなり、どの情報が取得されるのか明確になります。SELECT *を使うと、後からコードを見返したときに、どの情報が取得されているのかすぐにはわからない場合があります。
  3. スキーマ変更の影響: テーブルの構造(スキーマ)が変更された場合、SELECT *を使用しているSQLはその変更を反映して結果を返します。これは予期しない結果をもたらす可能性があります。

AS:カラム名に別名を付与して抽出

SQL文では、抽出するカラム名に別名を付与してレコードを抽出することが可能です。

SELECT Number      AS "番号", 
       Name        AS "氏名", 
       Address     AS "住所", 
       PhoneNumber AS "電話番号"
  FROM MemberList;
select AS
SELECT文(ASキーワード)

通常、テーブルのカラム名はアルファベットか数字で表されている場合が多いのですが、これだと少し分かりづらい場面があります。このようなタイミングでASキーワードを利用して日本語の別名を付与してあげたりする使い方もできます。

日本語で別名を付与する場合は必ず「" ダブルクォーテーション」で囲んであげる必要があります。

もし、別名もアルファベットで付与する場合にはダブルクォーテーションは不要です。

SELECT Number      AS A, 
       Name        AS B, 
       Address     AS C, 
       PhoneNumber AS D
  FROM MemberList;

WHERE句では別名(AS)は使用不可

WHERE句の注意点の1つが、別名使用不可という点です。

例えば以下のような利用方法はできません。

SELECT Number      AS A, 
       Name        AS B, 
       Address     AS C, 
       PhoneNumber AS D
  FROM MemberList
 WHERE B = "Suzuki";

せっかくASキーワードで別名を付けたのだからWHERE句でも使いたい・・・!という気持ちもしますが、SQLではNGです。データベース初心者にとっては陥りがちなミスの1つでもあるので、しっかり頭に入れておきましょう。

SQL:SELECT文のまとめ

このページのまとめ
  • 指定したテーブルからレコードを抽出するにはSELECT文を用いる
  • SELECT句:抽出するカラムを指定
    • * アスタリスクで全カラムを抽出
    • ASキーワードで別名を指定
  • FROM句:抽出するテーブルを指定
  • WHERE句:抽出する条件を指定
-- SELECT文の基本
SELECT * FROM employees;

-- 複雑なSELECT文
SELECT first_name, last_name, salary
FROM employees
WHERE salary > 50000
ORDER BY salary DESC;

-- より複雑なSELECT文
SELECT e1.first_name, e1.last_name, e1.salary, d.department_name
FROM employees e1
INNER JOIN (
    SELECT department_id, AVG(salary) AS avg_salary
    FROM employees
    GROUP BY department_id
) AS e2 ON e1.department_id = e2.department_id
INNER JOIN departments d ON e1.department_id = d.department_id
WHERE e1.salary > e2.avg_salary
ORDER BY d.department_name, e1.salary DESC;

現在のスキルに今一つ満足できていないシステムエンジニア/プログラマーの方へ。

SQLやデータベースの仕組みを1から学習したい方(学び直したい方)向けに、現役エンジニア達のスキルを結集して 完全無料 のSQL教材を作成しました。是非この機会にブックマークを!

読者料典 【完全無料】SQL:初心者向け学習ロードマップ ←こちらから!

このWebサイトは現役のエンジニアが以下3点を目的として運営しています。

  1. 勉強:一度理解した内容を忘れないように。
    → アウトプットは「最強のインプット」である! 
  2. 備忘:忘れたとしても後から見返せるように。
    → 未来の自分への「お手紙」を書いています。 
  3. 共有:〇〇ってこうだったんだ!の感動をシェアできるように。
    → あなたの知識は誰かにとっての「価値ある情報」です。 

副業ブログの始め方はこちらから

スポンサーリンク
DatabaseIT-Skills
シェアする
ビズドットオンラインをフォローする
タイトルとURLをコピーしました