サイトアイコン ITC Media

【SQL入門】SELECT文の基本|書き方を実例付きで徹底解説

✔以下の疑問をお持ちの方へ向けた記事です

「SQLのSELECT文とは何で、どのように使うのだろうか?」

「SQLのSELECT文の使い方を学びたい」

「SQLのSELECT文の具体的な使用例を見て理解したい」

✔この記事を読むことで得られる知識

この記事では、SQLのSELECT文の基本的な使い方から、その応用法まで、具体的な例を交えて詳細に説明します。

ぜひ最後までお読みください。

✔流し聞きOK】見ながら、聞きながら学びたい方はこちら

筆者プロフィール

【現職】プロダクトマネージャー

【副業】ブログ(月間20万PV)/YouTube/Web・アプリ制作

「プログラミング × ライティング × 営業」の経験を活かし、30後半からのIT系職へシフト。現在はプロダクトマネージャーとして、さまざまな関係者の間に入り奮闘してます。当サイトでは、実際に手を動かせるWebアプリの開発を通じて、プログラミングはもちろん、IT職に必要な情報を提供していきます。

【当ブログで紹介しているサイト】

当サイトチュートリアルで作成したデモ版日報アプリ

Django × Reactで開発したツール系Webアプリ

✔人に見せても恥ずかしくないコードを書こう

「リーダブルコード」は、わかりやすく良いコードの定義を教えてくれる本です。

  • 見るからにきれいなコードの書き方
  • コードの分割方法
  • 変数や関数の命名規則

エンジニアのスタンダートとすべき基準を一から解説しています。

何回も読むのに値する本なので、ぜひ手にとって読んでみてください。

SQLとSELECT文の基本

こちらでは、SQLとSELECT文の基本についてお伝えしていきます。

これらを理解することで、データベースから必要な情報を効率よく取り出すことが可能になります。

SQLとは:概念と基本的な役割

SQL(Structured Query Language)は、リレーショナルデータベース管理システム(RDBMS)でデータを操作するための言語です。

データの取得、挿入、更新、削除など、データベースに対するさまざまな操作をおこなえます。

SQLは標準化されているので、多くのデータベースシステムで共通して使用可能です。

SELECT文とは:定義と基本的な使用法

SELECT文は、SQLの中でも最も頻繁に使用されるコマンドのひとつです。

データベース内のテーブルから特定のデータを選択する際に使用します。

SELECT文の基本的な構文は 以下のとおり。

SELECT 列名 FROM テーブル名

この形式を用いてテーブルから必要なデータを取得します。

今回例として使用するテーブルの紹介

学生の成績データを保持する”students”テーブルを例として使用します。

このテーブルには、以下3つの列が含まれています。

テーブルを作成するSQLコードはこちらです。

CREATE TABLE students (
  name VARCHAR(255),
  score INT,
  subject VARCHAR(255)
);

INSERT INTO students (name, score, subject) VALUES ('John Doe', 90, 'Math');
INSERT INTO students (name, score, subject) VALUES ('Jane Doe', 85, 'Science');
INSERT INTO students (name, score, subject) VALUES ('Mike Smith', 75, 'History');
INSERT INTO students (name, score, subject) VALUES ('Sarah Jones', 65, 'English');
INSERT INTO students (name, score, subject) VALUES ('Peter Parker', 100, 'Chemistry');

 SELECT文の基本的な使用方法

次に、SELECT文の基本的な使用方法について解説します。

このセクションでは、どのようにしてSELECTで列を抽出するかを学びます。

また、列名のエイリアス設定についても解説します。

SELECT文の基本構文:特定の列を抽出する方法

SELECT文の基本的な構文は こちら。

SELECT 列名 FROM テーブル名;

この形式を用いて、テーブルから特定の列を抽出します。

例えば、studentsテーブルから学生の名前だけを抽出する場合は、以下のとおりです。

SELECT name FROM students;

このクエリを実行すると、studentsテーブルの全てのレコードから”name”列のみが抽出されます。

name
John Doe
Jane Doe
Mike Smith
Sarah Jones
Peter Parker

複数の列を抽出する方法

複数の列を抽出する場合は、列名をカンマ(,)で区切ります。

たとえば、学生の名前と得点を抽出するには、以下のとおりとします。

SELECT name, score FROM students;

このクエリを実行すると、”name”列と”score”列が抽出されます。

namescore
John Doe90
Jane Doe85
Mike Smith75
Sarah Jones65
Peter Parker100

すべての列を抽出する方法(*を用いた全列抽出)

全ての列を抽出するには、アスタリスク(*)を使用します。

たとえば、studentsテーブルの全ての列を抽出するには、以下のクエリとなります。

SELECT * FROM students;

このクエリを実行すると、テーブルの全ての列が抽出されます。

namescoresubject
John Doe90Math
Jane Doe85Science
Mike Smith75History
Sarah Jones65English
Peter Parker100Chemistry

ASを用いた列名のエイリアス設定

ASキーワードを使用して、結果セットの列名に別名(エイリアス)を設定できます。

これは、結果セットの列名をより理解しやすい名前に変更したり、列名が長すぎて扱いにくい場合に便利です。

以下のように各列に新しい名前をつけて実行してみましょう。

SELECT name AS StudentName, score AS StudentScore FROM students;
StudentNameStudentScore
John Doe90
Jane Doe85
Mike Smith75
Sarah Jones65
Peter Parker100

結果セットの列名は”StudentName”と”StudentScore”になります。

 WHERE句の使用方法

次に、WHERE句の使用方法について解説します。

このセクションでは、WHERE句の定義と基本的な使用法、そして複数条件の指定方法について学びます。

詳しくはこちらでも解説しています。

WHERE句とは:定義と基本的な使用法

WHERE句は、SQL文に条件を付け加えるために使用されます。

これを用いることで、特定の条件を満たすレコードのみを抽出したり、更新したり、削除したりできます。

基本的な構文はこちらです。

SELECT 列名 FROM テーブル名 WHERE 条件;

こちらは、studentsテーブルから得点が80点以上の学生の名前を抽出する場合の例です。

SELECT name FROM students WHERE score >= 80;

このクエリを実行すると、”score”列が80以上のレコードから”name”列のみが抽出されます。

name
John Doe
Jane Doe
Peter Parker

WHERE句を用いた条件指定の基本

WHERE句では比較演算子を用いて条件を指定します。

一般的に使用される比較演算子には、以下のようなものがあります。

以下は得点90点と等しい学生を抽出する例です。

SELECT name FROM students WHERE score = 90;
name
Jane Doe

複数条件の指定:ANDとORの使用方法

WHERE句では、ANDとORを用いて複数の条件を指定できます。

例えば得点が80点以上で、かつ科目が数学である学生を抽出方法はこちら。

SELECT name FROM students WHERE score >= 70 AND subject = 'History';

このクエリを実行すると、”score”列が70以上で、かつ”subject”列が’History’であるレコードから”name”列のみが抽出されます。

name
Mike Smith

ソートとグループ化:ORDER BYとGROUP BY

こちらでは、SQLのソートとグループ化についてお伝えします。

ソートとグループ化に関する知識を持つことで、データ分析の幅が広がります。

以下の項目を詳しく見ていきましょう。

詳しくはこちらの記事でも解説しています。

ORDER BYを用いた結果のソート方法

ORDER BY句は、SELECT文で取得した結果を特定の列の値に基づいてソート(並び替え)するために使用されます。

基本的な構文はこちら。

SELECT 列名 FROM テーブル名 ORDER BY 列名 [ASC|DESC];

いくつか説明を加えると以下のとおりです。

例えば、studentsテーブルから全ての学生の名前と得点を抽出して、昇順に並べ替える方法を挙げます。

SELECT name, score FROM students ORDER BY score DESC;
namescore
Peter Parker100
John Doe90
Jane Doe85
Mike Smith75
Sarah Jones65

GROUP BYを用いた結果のグループ化方法

GROUP BY句は、特定の列の値に基づいて結果をグループ化するために使用されます。

グループ化することで、そのグループに対して集計関数(COUNT、SUM、AVGなど)を適用できるようになります。

基本的な構文は以下のとおり。

SELECT 列名, 集計関数(列名) FROM テーブル名 GROUP BY 列名

例えばstudentsテーブルから科目ごとの平均得点を計算するには、こちらのクエリになります。

SELECT subject, AVG(score) FROM students GROUP BY subject;

集約関数とHAVING句の使用方法

このセクションでは、SQLの集約関数とHAVING句について説明します。

これらの概念を理解することで、より複雑なデータ分析が可能となります。

具体的には以下のトピックについて解説していきます。

集約関数とは:定義と基本的な使用法

集約関数は、特定の列の全ての値に対する計算を行い、その結果を一つの値として返す関数です。

最もよく使用される集約関数には、以下のようなものがあります。

こちらが例です。

SELECT COUNT(*) FROM students;

このクエリを実行すると、studentsテーブルのレコード数が返されます。

HAVING句を用いた集約結果のフィルタリング

HAVING句は、GROUP BY句と一緒に使用され、グループ化したデータに対する条件を指定するもの。

WHERE句が行全体に対して条件を適用するのに対し、HAVING句は集約関数を含む条件を指定できます。

studentsテーブルから科目ごとに平均点が60点以上のものを抽出するには、以下のようなクエリとなるでしょう。

SELECT subject, AVG(score) FROM students GROUP BY subject HAVING AVG(score) >= 60;

このクエリを実行すると、科目ごとの平均点が60点以上の科目とその平均点が表示されます。

これで、集約関数とHAVING句についての基本的な知識を得ることができました。

次に、テーブル間でデータを結合するためのJOINについて見ていきましょう。

JOINによるテーブルの結合

このセクションでは、SQLのJOINについて解説します。

JOINは複数のテーブルを連結し、一つの結果セットを作成する強力なツールです。

具体的には以下のトピックについて解説していきます。

JOINとは:定義と基本的な使用法

JOINとは、2つ以上のテーブルから関連するデータを結合し、一つのテーブルのように扱うための操作です。

例えば、学生の情報が保存されたstudentsテーブルと、科目の情報が保存されたsubjectsテーブルがあるとします。

JOINを使えば、各学生がどの科目を受講しているかを一覧で表示できるのです。

基本的な構文は以下のとおり。

SELECT 列名 FROM テーブル名1 JOIN テーブル名2 ON 結合条件;

以下は一例です。

SELECT students.name, subjects.subject_name FROM students JOIN subjects ON students.subject_id = subjects.id;

学生の名前と受講科目の名前が一覧表示されます。

INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOINの比較と使用例

SQLのJOINは以下の4種類。

これらは結合の方法(どの行を結果に含むか)を変えるもので、その違いを理解することで適切なJOINを選択できます。

INNER JOIN

結合するテーブルの両方に存在するデータのみを結果として返します。

SELECT students.name, subjects.subject_name FROM students INNER JOIN subjects ON students.subject_id = subjects.id;

studentsテーブルとsubjectsテーブルの両方に存在するデータ、つまり受講科目が登録されている学生の情報のみを返します。

LEFT JOIN

左側のテーブル(最初に指定したテーブル)の全てのデータと、右側のテーブルから結合条件に一致するデータを返します。

右側のテーブルに一致するデータがない場合でも、左側のテーブルのデータは常に表示されます。

これは、例えば全学生の名前と、それぞれが受講している科目名(受講科目がない場合はNULL)を一覧表示するのに役立ちます。

RIGHT JOINとFULL JOIN

それぞれ左側のテーブルと右側のテーブル、または両方のテーブルからデータを取得しますが、これらは一部のデータベースシステムではサポートされていないことに注意してください。

これで、JOINについての基本的な知識を得ることができました。

次に、一つのクエリ内で別のクエリを利用するサブクエリについて見ていきましょう。

サブクエリの使用方法

このセクションでは、サブクエリについて解説します。

サブクエリは一つのクエリ内で別のクエリを利用するための手段で、より複雑な問い合わせを可能にします。

具体的には以下のトピックについて解説していきます。

サブクエリとは:定義と基本的な使用法

サブクエリとは、一つのSQLクエリの中に含まれる別のSQLクエリのことを指します。

このサブクエリは、主クエリが必要とする値を動的に生成したり、一部のデータをフィルタリングするために使用されます。

サブクエリは主にSELECT, INSERT, UPDATE, DELETE文の中で使用され、主クエリと共に動作します。

以下が基本構文です。

SELECT 列名 FROM テーブル名 WHERE 列名 = (サブクエリ)

この “(サブクエリ)” の部分で、主クエリが必要とする特定の値を生成します。

サブクエリの使用例:スカラーサブクエリとコルレーションサブクエリ

サブクエリにはいくつかのタイプがありますが、ここでは以下の2つをご紹介します。

スカラーサブクエリ

単一の値を返すサブクエリです。

SELECT name FROM students WHERE score = (SELECT MAX(score) FROM students;

スカラーサブクエリ(SELECT MAX(score) FROM students)を使って、最高得点を取った学生の名前を取得します。

コルレーションサブクエリ

こちらは、主クエリの各行に対して個別に実行されるサブクエリです。

これは通常、主クエリの列を参照するため、その結果は主クエリの各行に依存します。

SELECT name, score FROM students s WHERE score > (SELECT AVG(score) FROM students WHERE class = s.class);

各クラスの平均点よりも高い得点を取った学生の名前と得点を取得します。

これで、サブクエリの基本的な知識と使用方法について学びました。次に、データの追加、更新、削除について見ていきましょう。

データ操作:INSERT, UPDATE, DELETE文

このセクションでは、データの追加、更新、削除を行うためのSQLの基本的なコマンドについて解説します。

これらのコマンドはデータベースの管理に欠かせないツールです。

具体的には以下のトピックについて解説していきます。

INSERT文で新規追加

INSERT文は、テーブルに新しい行を追加するためのSQLのコマンドです。

基本的な構文はこちら。

INSERT INTO テーブル名 (列名1, 列名2, …) VALUES (値1, 値2, …);

詳しくはこちらで解説しています。

UPDATE文でデータの更新

UPDATE文は、テーブルの既存の行を更新するためのSQLのコマンドです。

UPDATE テーブル名 SET 列名1 = 値1, 列名2 = 値2, … WHERE 条件;

UPDATE文についてはこちらが詳しいです。

DELETE文でデータの削除

DELETE文は、テーブルから行を削除するためのSQLコマンド

DELETE FROM テーブル名 WHERE 条件;

詳しくはこちらをどうぞ。

まとめ

当記事の内容をまとめます。

SQLの学習は、ここで終わりではありません。

今後もSQLの各文法や関数を学び、練習し続けることで、あなたのSQLスキルはさらに高まるでしょう。

この知識が、あなたのSQL学習の一助となり、データ抽出や分析作業の効率化に貢献となれば嬉しいです。

モバイルバージョンを終了