✔以下の疑問をお持ちの方へ向けた記事です
「SQLのSELECT文とは何で、どのように使うのだろうか?」
「SQLのSELECT文の使い方を学びたい」
「SQLのSELECT文の具体的な使用例を見て理解したい」
✔この記事を読むことで得られる知識
- SQLのSELECT文の基本的な使い方
- SELECT文の応用法
- SQLのSELECT文を用いた具体的な使用例
この記事では、SQLのSELECT文の基本的な使い方から、その応用法まで、具体的な例を交えて詳細に説明します。
ぜひ最後までお読みください。
✔流し聞きOK】見ながら、聞きながら学びたい方はこちら
SQLとSELECT文の基本
こちらでは、SQLとSELECT文の基本についてお伝えしていきます。
これらを理解することで、データベースから必要な情報を効率よく取り出すことが可能になります。
- SQLとは:概念と基本的な役割
- SELECT文とは:定義と基本的な使用法
- 今回例として使用するテーブルの紹介
SQLとは:概念と基本的な役割
SQL(Structured Query Language)は、リレーショナルデータベース管理システム(RDBMS)でデータを操作するための言語です。
データの取得、挿入、更新、削除など、データベースに対するさまざまな操作をおこなえます。
SQLは標準化されているので、多くのデータベースシステムで共通して使用可能です。
SELECT文とは:定義と基本的な使用法
SELECT文は、SQLの中でも最も頻繁に使用されるコマンドのひとつです。
データベース内のテーブルから特定のデータを選択する際に使用します。
SELECT文の基本的な構文は 以下のとおり。
SELECT 列名 FROM テーブル名
この形式を用いてテーブルから必要なデータを取得します。
今回例として使用するテーブルの紹介
学生の成績データを保持する”students”テーブルを例として使用します。
このテーブルには、以下3つの列が含まれています。
- name:学生名
- score:得点
- subject:科目
テーブルを作成する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文の基本構文:特定の列を抽出する方法
- 複数の列を抽出する方法
- すべての列を抽出する方法(*を用いた全列抽出)
- ASを用いた列名のエイリアス設定
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”列が抽出されます。
name | score |
---|---|
John Doe | 90 |
Jane Doe | 85 |
Mike Smith | 75 |
Sarah Jones | 65 |
Peter Parker | 100 |
すべての列を抽出する方法(*を用いた全列抽出)
全ての列を抽出するには、アスタリスク(*)を使用します。
たとえば、studentsテーブルの全ての列を抽出するには、以下のクエリとなります。
SELECT * FROM students;
このクエリを実行すると、テーブルの全ての列が抽出されます。
name | score | subject |
---|---|---|
John Doe | 90 | Math |
Jane Doe | 85 | Science |
Mike Smith | 75 | History |
Sarah Jones | 65 | English |
Peter Parker | 100 | Chemistry |
ASを用いた列名のエイリアス設定
ASキーワードを使用して、結果セットの列名に別名(エイリアス)を設定できます。
これは、結果セットの列名をより理解しやすい名前に変更したり、列名が長すぎて扱いにくい場合に便利です。
以下のように各列に新しい名前をつけて実行してみましょう。
SELECT name AS StudentName, score AS StudentScore FROM students;
StudentName | StudentScore |
---|---|
John Doe | 90 |
Jane Doe | 85 |
Mike Smith | 75 |
Sarah Jones | 65 |
Peter Parker | 100 |
結果セットの列名は”StudentName”と”StudentScore”になります。
WHERE句の使用方法
次に、WHERE句の使用方法について解説します。
このセクションでは、WHERE句の定義と基本的な使用法、そして複数条件の指定方法について学びます。
- WHERE句とは:定義と基本的な使用法
- WHERE句を用いた条件指定の基本
- 複数条件の指定:ANDとORの使用方法
詳しくはこちらでも解説しています。
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を用いて複数の条件を指定できます。
- 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を用いた結果のソート方法
- GROUP BYを用いた結果のグループ化方法
詳しくはこちらの記事でも解説しています。
ORDER BYを用いた結果のソート方法
ORDER BY句は、SELECT文で取得した結果を特定の列の値に基づいてソート(並び替え)するために使用されます。
基本的な構文はこちら。
SELECT 列名 FROM テーブル名 ORDER BY 列名 [ASC|DESC];
いくつか説明を加えると以下のとおりです。
- ASC:昇順(小さいものから大きいものへ)
- DESC:降順(大きいものから小さいものへ)
例えば、studentsテーブルから全ての学生の名前と得点を抽出して、昇順に並べ替える方法を挙げます。
SELECT name, score FROM students ORDER BY score DESC;
name | score |
---|---|
Peter Parker | 100 |
John Doe | 90 |
Jane Doe | 85 |
Mike Smith | 75 |
Sarah Jones | 65 |
GROUP BYを用いた結果のグループ化方法
GROUP BY句は、特定の列の値に基づいて結果をグループ化するために使用されます。
グループ化することで、そのグループに対して集計関数(COUNT、SUM、AVGなど)を適用できるようになります。
基本的な構文は以下のとおり。
SELECT 列名, 集計関数(列名) FROM テーブル名 GROUP BY 列名
例えばstudentsテーブルから科目ごとの平均得点を計算するには、こちらのクエリになります。
SELECT subject, AVG(score) FROM students GROUP BY subject;
集約関数とHAVING句の使用方法
このセクションでは、SQLの集約関数とHAVING句について説明します。
これらの概念を理解することで、より複雑なデータ分析が可能となります。
具体的には以下のトピックについて解説していきます。
- 集約関数とは:定義と基本的な使用法
- HAVING句を用いた集約結果のフィルタリング
集約関数とは:定義と基本的な使用法
集約関数は、特定の列の全ての値に対する計算を行い、その結果を一つの値として返す関数です。
最もよく使用される集約関数には、以下のようなものがあります。
- COUNT(件数のカウント)
- SUM(合計値の算出)
- AVG(平均値の算出)
- MAX(最大値の取得)
- MIN(最小値の取得)
こちらが例です。
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とは:定義と基本的な使用法
- INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL 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種類。
- INNER JOIN
- LEFT JOIN
- RIGHT JOIN
- FULL JOIN
これらは結合の方法(どの行を結果に含むか)を変えるもので、その違いを理解することで適切な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文で新規追加
- UPDATE文でデータの更新
- DELETE文でデータの削除
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 条件;
詳しくはこちらをどうぞ。
まとめ
当記事の内容をまとめます。
- SELECT文でデータを抽出できる
- 複数の句と組み合わせてより複雑な条件でデータを取り出せる
- 使用例を元に手を動かしてみるのがおすすめ
SQLの学習は、ここで終わりではありません。
今後もSQLの各文法や関数を学び、練習し続けることで、あなたのSQLスキルはさらに高まるでしょう。
この知識が、あなたのSQL学習の一助となり、データ抽出や分析作業の効率化に貢献となれば嬉しいです。