5. SQL 問い合わせの基本
SELECTFROMWHEREDISTINCTIN
BETWEENSQL 問い合わせの基本構造、
SQL による集計(AVG, SUM, COUNTなど)
1
URL: https://www.kkaneko.jp/de/ds/index.html
金子邦彦
謝辞:この資料では「いらすとや」のイラストを使用していま
アドバイス
アクティブな学習を実践しよう
SQLを学ぶ際に、プログラムを変更した結果を実際に見る
とも心がけましょう。実際のデータベース操作を通じて学習
を深めます。
簡単なスタートから
初めはシンプルなものからスタートしましょう。反復練習し
ましょう。
ステップ・バイ・ステップで応用に進む
SQLスキルを向上させるために、少しずつ難易度を上げ、今
まで自分ができなかったことにもチャレンジしましょう。
2
テーブルによるデータ管理の理解
SQLの柔軟性の理解
SQLによるデータアクセスのスキル向上
3
アウトライン
1. イントロダクション
2. SELECT, FROM, WHERE の役割
3. WHERE による選択、IN
4. 重複の排除、集約
5. 演習
4
SQLFiddle のサイトにアクセス
Webブラウザを使用
1. ウェブブラウザを開く
2. アドレスバーにSQLFiddleURLを入力
http://sqlfiddle.com/
URLが分からないときは、Googleなどの検索エンジンを利
用。「SQLFiddle」と検索し、表示された結果から
SQLFiddleのウェブサイトをクリック。
5
SQLFiddle の画面
6
右側のパネル: SQL問い合わせ
SELECT などを入力。
左側のパネル: テーブル定義、データ
の追加など。SQLCREATE TABLE
INSERT INTO などを入力。
実行ボタン
結果ウィンドウ
実行ボタン
SQLFiddle でのデータベース管理システムの選択
(高度な機能)
7
データベース管理システムの選択
(この授業では MySQL を使用)
5-1. イントロダクション
8
リレーショナルデータベースの仕組み
データをテーブルと呼ばれる表形式で保存
テーブル間関連で結ばれる。複雑な構造を持ったデータ
を効率的に管理することを可能に。
9
関連
リレーショナルデータベースの重要性
1. データの整合性: リレーショナルデータベースは、デー
タの整合性を保持するための機能を有する。これにより、
誤ったデータや矛盾したデータが保存されるのを防ぐこ
とができる。
2. 柔軟な問い合わせ(クエリ)能力: リレーショナルデー
タベースのSQLStructured Query Language)の使用に
より、複雑な検索やデータの抽出が可能になる。
3. トランザクションの機能: 一連の操作全体を一つの単位
として取り扱うことができる機能。これにより、データ
の一貫性と信頼性が向上する。
4. セキュリティ: アクセス権限の設定などにより、セキュ
リティを確保。
データの安全な保管、効率的なデータ検索・操作、ビジネス
や研究の意思決定をサポート。 10
SQL によるテーブル定義
テーブル名記録
属性名名前、得点、居室
属性のデータ型テキスト、数値、テキスト
データの整合性を保つための制約なし
11
CREATE TABLE 記録 (
名前 TEXT,
得点 INTEGER,
居室 TEXT);
データ追加のSQL
12
名前
得点
居室
徳川家康
85
1
源義経
78
2
西郷隆盛
90
3
豊臣秀吉
82
1
織田信長
75
2
記録
INSERT INTO 記録 VALUES('徳川家康', 85, '1');
INSERT INTO 記録 VALUES('源義経', 78, '2');
INSERT INTO 記録 VALUES('西郷隆盛', 90, '3');
INSERT INTO 記録 VALUES('豊臣秀吉', 82, '1');
INSERT INTO 記録 VALUES('織田信長', 75, '2');
演習1.テーブル定義と
データの追加
【トピックス】
1. SQL によるテーブル定義
2. SQL によるデータの追加
3. 問い合わせ(クエリ)による
確認
13
Webブラウザを使用
アドレスバーにSQLFiddleURLを入力
http://sqlfiddle.com/
URLが分からないときは、Googleなどの検索エンジンを利
用。「SQLFiddle」と検索し、表示された結果から
SQLFiddleのウェブサイトをクリック。
14
左側のパネルに、テーブル定義データの追加を行う
SQL を入れる。
15
CREATE TABLE 記録 (
名前 TEXT,
得点 INTEGER,
居室 TEXT);
INSERT INTO 記録 VALUES('徳川家康', 85, '1');
INSERT INTO 記録 VALUES('源義経', 78, '2');
INSERT INTO 記録 VALUES('西郷隆盛', 90, '3');
INSERT INTO 記録 VALUES('豊臣秀吉', 82, '1');
INSERT INTO 記録 VALUES('織田信長', 75, '2');
Build Schema」をクリック
16
右側のパネルに、問い合わせ(クエリ)を行う SQL を入
れる。
Run SQL」をクリック
SQL 文が実行され、結果が表示される。
下側のウインドウで、結果を確認
17
select * from 記録;
あとで使用するのでブラウザを閉じないこと
自習
次の SQL を試してみる。
SELECT 名前 FROM 記録;
SELECT 得点 FROM 記録;
結果
18
あとで使用するのでブラウザを閉じないこと
5-2. SELECTFROMWHERE
の役割
19
SELECT, FROM, WHERE を学ぶことのメリット
テーブルによるデータ管理
リレーショナルデータベースのテーブルによるデータ管
理についての理解が深まる。
SQLの柔軟性
条件を指定してテーブルからデータを取得する多彩な方
法を学ぶ。
SQL によるデータアクセス
テーブルから必要なデータを取得するスキルを習得。
20
SQL select, from, where
select
問い合わせ(クエリ)のための基本的な命令。
取得したいデータの指定
from
データ取得の対象となるテーブルを指定
例:select * from テーブル名;
where
特定の条件を満たす行の選択
例:select * from テーブル名 where 1 = 1;
21
SQL 理解のための前提知識
テーブル
データをテーブルと呼ばれる表形式で保存
問い合わせ(クエリ)
問い合わせ(クエリ)は、データベースから必要なデータ
を検索、加工するための指令
SELECT, FROM, WHERE など、多様なコマンドが存在。
結合、集計、ソート、副問い合わせなど、高度な操作も可
22
名前
得点
居室
徳川家康
85
1
源義経
78
2
西郷隆盛
90
3
豊臣秀吉
82
1
織田信長
75
2
23
テーブル「記録」からデータを取得すSQLの例
SELECT *FROM 記録;
SELECT 居室 FROM 記録;
SELECT DISTINCT 居室 FROM 記録;
SELECT 名前, 得点 FROM 記録 WHERE 得点 > 80;
SELECT 名前, 得点 FROM 記録 WHERE 得点 BETWEEN 80 AND 85;
SELECT AVG(得点)FROM 記録;
AVG, MAX, MIN, SUM: 平均、最大、最小、合計
COUNT: 行数
SELECT * FROM 記録 WHERE 居室 LIKE '%';
*階」、「階*」「**」のように書くことができる
Access では % でなく *
SELECT *FROM 記録 WHERE 居室 IN ('1', '2');
5-3. WHERE による選択、IN
の役割
24
WHERE による選択
問い合わせ(クエリ)では、条件を指定することにより、
データの行単位での選択を行う
WHERE 得点 > 80
得点が80より大きい」行を選択
WHERE 得点 BETWEEN 80 AND 85
得点が80以上かつ85以下」の範囲にある行を選択
WHERE 居室 LIKE '%';
居室が''で終わる」行を選択
ワイルドカード文字(*)は任意の文字列を表す
WHERE 居室 IN ('1', '2');
居室が'1'または'2'」のいずれかに一致する行を選択
25
IN の役割
26
SELECT *
FROM 記録
WHERE 居室 IN ('1', '2');
半角丸かっこ
で囲む
半角丸かっこ
で囲む
半角の
カンマ
複数の値比較
そのうち1つの値でも一致するものを結果とする
居室が'1'または'2'」のい
ずれかに一致する行を選択
5-4. 重複行の除去、集約
27
DISTINCT は重複行の除去
28
SELECT 居室 FROM 記録;SELECT DISTINCT 居室 FROM 記録
居室
1
2
3
1
2
結果
居室
1
2
3
結果
集約
29
AVG, MAX, MIN, SUM: 平均、最大、最小、合計
COUNT: 行数
名前
得点
居室
徳川家康
85
1
源義経
78
2
西郷隆盛
90
3
豊臣秀吉
82
1
織田信長
75
2
記録 SELECT AVG(得点)FROM 記録;
82
SELECT MAX(得点)FROM 記録;
90
SELECT MIN(得点)FROM 記録;
75
SELECT SUM(得点)FROM 記録;
410
30
*FROM 記録;
テーブルのすべて
居室 FROM 記録;
「居室」の列
をすべて
居室 FROM 記録
重複行
(同じ値の行)を除去
名前, 得点 FROM 記録
得点 > 80;
「名前」と「得点」の列で、
得点
80より大きい」行を選択
名前, 得点 FROM 記録
得点 BETWEEN 80 AND
「名前」と「得点」の列で、
得点
80以上かつ85以下」の範囲にある
行を選択
AVG(得点)FROM 記録;
すべての
「得点」の値平均
* FROM 記録
居室 LIKE '%';
居室が''で終わる」行を選択
* FROM 記録
居室 IN ('1', '2')
居室が'1'または'2'」のいずれ
かに一致する行を選択
5-5. 演習
31
演習2.SQL による問い合
わせ(クエリ)
【トピックス】
1. 選択
2. DISTINCT による重複行除去
3. パターンマッチング
4. IN を用いた条件指定
32
右側のパネルに、問い合わせ(クエリ)を行う SQL を入
れる。
33
SELECT 居室 FROM 記録;
SELECT DISTINCT 居室 FROM 記録;
②「Run SQL」をクリック
SQL 文が実行され、結果が表示される。
下側のウインドウで、結果を確認
右側のパネルに、問い合わせ(クエリ)を行う SQL を入
れる。 (以前の SQL は不要なので消す)
34
SELECT 名前, 得点 FROM 記録 WHERE 得点 >80;
SELECT 名前, 得点 FROM 記録 WHERE 得点 BETWEEN 80 AND 85;
⑤「Run SQL」をクリック
SQL 文が実行され、結果が表示される。
下側のウインドウで、結果を確認
右側のパネルに、問い合わせ(クエリ)を行う SQL を入
れる。 (以前の SQL は不要なので消す)
35
SELECT AVG(得点)FROM 記録;
⑧「Run SQL」をクリック
SQL 文が実行され、結果が表示される。
下側のウインドウで、結果を確認
右側のパネルに、問い合わせ(クエリ)を行う SQL を入
れる。(以前の SQL は不要なので消す)
36
SELECT * FROM 記録 WHERE 居室 LIKE '%';
SELECT * FROM 記録 WHERE 居室 IN ('1', '2');
⑪「Run SQL」をクリック
SQL 文が実行され、結果が表示される。
下側のウインドウで、結果を確認
自習
テーブル「記録」を使用してください
後ろのページに解答例を載せているので活用してください
SQLFiddle などを利用し、実際に実行してみると、理解が
進み、自分で間違いに気づくこともでき効果的です。
37
自習1.得点が80以上の人物を選択する
目的: WHERE句を使用して特定の条件を満たす行を選択す
る方法を学ぶ
得点が80以上のすべての人物を選択してください。
ヒント: WHERE句を使用して得点の条件を指定
38
自習2.1階に住む人物の名前を重複なく選択する
目的: DISTINCTを使用して重複する値を排除する方法を学
ぶ。
1階に住む人物の名前を選択してください。そのとき、重複
なく表示するようにしてください。
ヒント: DISTINCTWHERE句を組み合わせて使用
39
自習3.得点が70から90の範囲内の人物の名前と居室を選
目的: BETWEENを使用して、特定の範囲内のデータを選択
する方法を学ぶ。
BETWEEN を用いて、得点が70から90の範囲内のすべての
人物の名前と居室を選択してください。得点が 70, 90 の人
も含めてください。
ヒント: BETWEEN を使用して得点の範囲を指定
40
自習4.'織田'で始まる名前の人を選択
目的: LIKEを使用して特定のパターンに一致する行を選択す
る方法を学ぶ。
'織田'で始まる名前の人をすべて選択してください
ヒント: LIKEとワイルドカード%を使用してパターンマッチ
ングを行います。
41
自習5.得点の最大値を得る
目的: MAX を使用して「得点」の列の最大値を得る方法を学
得点の最大値を得てください
ヒント: SELECT MAX(得点) のように書くことで、得点の最
大値を得ることができます。
42
自習1 解答例: SELECT * FROM 記録 WHERE 得点 >= 80;
自習2 解答例: SELECT DISTINCT 名前 FROM 記録
WHERE 居室 = '1';
自習3 解答例: SELECT 名前, 居室 FROM 記録 WHERE
BETWEEN 70 AND 90;
自習4 解答例SELECT * FROM 記録 WHERE 名前 LIKE
'織田%';
自習5 解答例SELECT MAX(*) FROM;
43
全体まとめ
SQL理解の前提知識
テーブル: データを表形式で保存する構造。
問い合わせ(クエリ): データベースからデータを検索・加工するため
の指令。SELECTFROMWHEREなどのコマンドが存在し、高度な
操作も可能。
SQLselect, from, where
select
問い合わせ(クエリ)のための基本的な命令。
取得したいデータの指定
from
データ取得の対象となるテーブルを指
where
特定の条件を満たす行の選択 44
全体まとめ
WHERE による選択
問い合わせ(クエリ)では、条件を指定してデータの行単位で選択。
WHERE 得点 > 80 得点が80より大きい行を選択。
WHERE 得点 BETWEEN 80 AND 85 得点が80以上かつ85以下の行
選択。
WHERE 居室 LIKE '%'; 居室が''で終わる行を選択。ワイルドカー
ド(%)は任意の文字列を表す。
WHERE 居室 IN ('1', '2') 居室が'1'または'2'に一致する行を選
択。
45
全体まとめ
DISTINCTは重複行の除去
SELECT 居室 FROM 記録
SELECT DISTINCT 居室 FROM 記録
集約
AVG, MAX, MIN, SUM: 平均、最大、最小、合計。
SELECT AVG(得点) FROM 記録;
SELECT MAX(得点) FROM 記録;
SELECT MIN(得点) FROM 記録;
SELECT SUM(得点) FROM 記録;
46
居室
1
2
3
1
2
居室
1
2
3
テーブルによるデータ管理の理解
SELECTFROMWHEREを学ぶことで、リレー
ショナルデータベース内のテーブルにデータをどのよ
うに管理するかについて深い理解が得られます。
SQLの柔軟性の理解
SQLは柔軟な言語です。SQL の柔軟性を学ぶことで、
必要なデータを効率的に取得できるスキルを習得でき
ます
SQLによるデータアクセスのスキル向上
SELECTFROMWHEREを理解し、正確に使用で
きるようになることで、データベースから必要なデー
タを取得するスキルが向上します。これはデータ分析
レポート作成、ビジネスの意思決定において有用です
47