4. SQL 問い合わせの能力
SQL 問い合わせの広範な能力(結合や副問い
合わせなど)、使用法、
(オンラインツール SQLFiddle を使用)
1
URL: https://www.kkaneko.jp/de/ds/index.html
金子邦彦
謝辞:この資料では「いらすとや」のイラストを使用しています
実践的スキルと問題解決能力の向上
自由で自主性を重視する SQL 学習環境
将来の成長の展望
実践的なSQLスキルを身につけることができ、自分自身の
ペースで効率的に学べる環境が提供され、多様な個人成長の
機会が広がります。
2
アウトライン
1. イントロダクション
2. オンラインツール SQLFiddle のメ
リットと基本操作
3. SQL によるデータの追加
4. SQL の全体像
5. テーブル定義(SQL を使用)
6. データの追加(SQL を使用)
7. 種々の問い合わせ(クエリ)
SQL を使用)
3
4-1. イントロダクション
4
リレーショナルデータベースの仕組み
データをテーブルと呼ばれる表形式で保存
テーブル間関連で結ばれる。複雑な構造を持ったデータ
を効率的に管理することを可能に。
5
関連
リレーショナルデータベースの重要性
1. データの整合性: リレーショナルデータベースは、デー
タの整合性を保持するための機能を有する。これにより、
誤ったデータや矛盾したデータが保存されるのを防ぐこ
とができる。
2. 柔軟な問い合わせ(クエリ)能力: リレーショナルデー
タベースのSQLStructured Query Language)の使用に
より、複雑な検索やデータの抽出が可能になる。
3. トランザクションの機能: 一連の操作全体を一つの単位
として取り扱ことができる機能。これにより、データ
の一貫性と信頼性が向上する。
4. セキュリティ: アクセス権限の設定などにより、セキュ
リティを確保。
データの安全な保管、効率的なデータ検索・操作、ビジネス
や研究の意思決定をサポート。 6
SQL のキーワード select, from, where
select
問い合わせ(クエリ)のための基本的な命令。
取得したいデータの指定
from
データ取得の対象となるテーブルを指定
例:select * from テーブル名;
where
特定の条件を満たす行の選択
例:select * from テーブル名 where 1 = 1;
7
8
SQL による問い合わせの例
SQLは簡潔で単純
SELECT * FROM 商品;
SELECT 商品名, 単価 FROM 商品;
SELECT 商品名, 単価 FROM 商品 WHERE 単価 > 80;
4-2. オンラインツール
SQLFiddle のメリットと基本操作
9
オンラインで SQL を実行できるサイト
SQLFiddle
http://sqlfiddle.com/
シンプルなインタフェース
があり、SQLの理解に便利
10
DBFiddle
https://www.db-fiddle.com/
シンプルなインタフェースが
あり、SQLの理解に便利
オンラインで SQL を学ぶ
メリット
アクセスの手軽さ: Webブラザがあれば、どこからでも
アクセスでき、学ぶことができる。
インストール不要: データベースソフトェアのインス
トールが不要。
時間や場所に縛られない: 自分の都合にあわせて練習でき
る。
注意点
制限事項: オンラインツールは、全てのSQL機能をカバー
していない場合や、大量データの取り扱いが難しい場合が
あります。
セキュリティ: 秘密情報はオンラインツールにアップロー
ドしない。(オンラインツールでは情報漏洩に気を付け
る) 11
SQLFiddle のサイトにアクセス
Webブラザを使用
1. ェブブラザを開く
2. アドレスバーにSQLFiddleURLを入力
http://sqlfiddle.com/
URLが分からないときは、Googleなどの検索エンジンを利
用。「SQLFiddle」と検索し、表示された結果から
SQLFiddleェブサイトをクリック。
12
SQLFiddle の画面
13
右側のパネル: SQL問い合わせ
SELECT などを入力。
左側のパネル: テーブル定義、デー
タの追加など。SQLCREATE TABLE
INSERT INTO などを入力。
実行ボタン
結果ィンド
実行ボタン
SQLFiddle でのデータベース管理システムの選択
(高度な機能)
14
データベース管理システムの選択
(この授業では MySQL を使用)
まとめ
SQLFiddleの要点
アクセス: Webブラザから簡単にアクセ
http://sqlfiddle.com/
インストール不要: ソフトェアは不要
注意点
セキュリティ: 秘密情報は避ける
画面構成
左パネル: テーブル定義、データ追加
右パネル: SQLい合わせ
15
4-3. SQL によるデータの追加
16
SQL によるデータの追加
テーブルに行を追加する
SQL でのコマンド: INSERT INTO
次は、テーブル「朝食と値段」に、3行のデータを追加。
INSERT INTO 朝食と値段 VALUES ('A', 'カレーライス', 400);
INSERT INTO 朝食と値段 VALUES ('B', 'どん', 250);
INSERT INTO 朝食と値段 VALUES ('C', 'カレーライス', 400);
17
名前
朝食
値段
A
カレーライス
400
B
どん
250
C
カレーライス
400
演習1.SQLFiddle を用い
SQL の実行
トピックス
1. SQLFiddle
2. SQL によるテーブル定義
3. SQL によるデータの追加
4. SQL による問い合わせ(クエ
リ)
18
Webブラザを使用
アドレスバーにSQLFiddleURLを入力
http://sqlfiddle.com/
URLが分からないときは、Googleなどの検索エンジンを利
用。「SQLFiddle」と検索し、表示された結果から
SQLFiddleェブサイトをクリック。
19
左側のパネルに、テーブル定義データの追加を行
SQL を入れる。
Build Schema」をクリック
20
create table 朝食と値段 (
名前 text,
朝食 text,
値段 integer
);
insert into 朝食と値段 values ('A', 'カレーライス', 400);
insert into 朝食と値段 values ('B', 'うどん', 250);
insert into 朝食と値段 values ('C', 'カレーライス', 400);
右側のパネルに、問い合わせ(クエリ)を行SQL を入
れる。
Run SQL」をクリック
下側のインドで、結果を確認
21
select * from 朝食と値段;
まとめ
SQLINSERT INTOによるデータ追加
テーブルに行(データ)を追加
INSERT INTO 朝食と値 VALUES ('A', 'ーライス', 400);
オンライン実行(SQLFiddleを使用)
SQLFiddle では、左側のパネルに、テーブル定義create
table)とデータ追加insert into)を書く
22
4-4. SQL の全体像
23
授業での SQL の学習の進め方
授業での SQL の学習は以下の順番で進めます。
【今回の授業】
概観SQLの主要な機能を簡単に紹介します。
【次回から】
基礎を固める:SELECT, FROM, WHEREなど、基本的な
機能をしっかりと理解します。
応用に進む:基本がマスターできたら、JOINGROUP
BYなどの応用的な命令に進みます。
このよ段階を踏んで学ぶことで、効率的にSQLをマス
ターできます。
24
最初に全体像を把握する学習のメリット
広範な理解SQL多様な機能と用途早期に理解できま
す。
学習意欲の向上:多くの機能を初めて体験することで、何
ができるのかを知り、興味が湧きます
効率的な学習:全体像を先に知ることで、後の学習がス
ムーズに進みます
注意点
自分のペースで:最初の授業ですべてをマスターする必要
はありません。
基礎の確立次回以降で基本的な部分をしっかり学び、そ
の後で応用に進みます。
25
SQL 問い合わせの全体像
select: データの検索・加工や射影
例:SELECT * FROM employees
from: 問い合わせ対象テーブルの指定
例:FROM employees
where: 条件に一致する行を選択
例:WHERE age > 30
join, on: 結合、結合条件
例:JOIN B ON A.b_id = B.id
insert into: 新しい行の追加(挿入)
update, set: 条件に一致する行を更新
delete from: 条件に一致する行を削除
26
SQL 問い合わせの全体像
distinct: 重複行の除去
例:SELECT DISTINCT age FROM employees
count: 行数のカント
例:SELECT COUNT(*) FROM employees
avg, max, min, sum: 平均、最大、最小、合計の計算
例:AVG(salary), MAX(salary)
group by: 属性でグループ化
例:GROUP BY department_id
order by: 並べ替え(ソート)
例:ORDER BY age
副問い合わせ: SQL文の中に別のSQL文を埋め込む。
例:
WHERE salary > (SELECT AVG(salary) FROM employees)
27
SQL のその他のトピックス
原則、大文字と小文字を区別しない
SELECT select は同じ意味
途中で改行しても意味が変わらない
複数のテーブルから「あるテーブルの特定の属性」を特定する
のに .」を使
T.id テーブル T id 属性
種々のータのサポート
integer は整数,text はテキスト,
datetime は日付、real は浮動小数点
比較演算 <, <=, >, >=, =, <> や範囲指定 between
テキストのパターンマッチ like
問い合わせ以外のさまざまな機能
トランザクション (begin, commit, rollback)、
性能向上のためのインデック (create index) 28
まとめ
態度
好奇心: SQLの多様な機能と用途に味を持つ
自主性: 自分のペースで学び、ときには、疑問点や興味のある点を
ら調べる
継続性: 基礎から応用まで段階的に学ぶ意欲を持つ
授業での SQL の学習の進め方
最初は概: SQL主要な機能を広く浅く理解する
基礎を固める: 次に、基本的な命令(SELECT, FROM, WHERE
ど)をマスターする
メリットと注意点
学習意欲の向上: くの機能を体験することで興味が湧く
効率的な学習: 全体像を先に知ることで後の学習がスムーズ進む
自分のペースで: 最初にすべてをマスターする必要はない
基礎の確: 次回以降で基本をマスター、その後で応用に進 29
4-5. テーブル定義(SQL を使
用)
30
関連する 2つのテーブル
31
id name age salary department_id
1
Alice
30
50000
2
Bob
40
60000
3
Charlie
35
70000
従業員
id name
1
HR
2
Engineering
部署
関連
SQL によるテーブル定義
テーブル名従業員
属性名idnameagesalarydepartment_id
属性のデータ型数値、テキスト、数値、数値、数値
データの整合性を保つための制約なし
32
CREATE TABLE 従業員 (
id INTEGER,
name TEXT,
age INTEGER,
salary INTEGER,
department_id INTEGER);
SQL によるテーブル定義
テーブル名部署
属性名idname
属性のデータ型数値、テキスト
データの整合性を保つための制約なし
33
CREATE TABLE 部署 (
id INTEGER,
name TEXT);
4-6. データの追加(SQL を使
用)
34
データ追加のSQL
35
id name age salary department_id
1
Alice
30
50000
1
2
Bob
40
60000
1
3
Charlie
35
70000
2
従業員
id name
1
HR
2
Engineering
部署
INSERT INTO 従業員 VALUES (1, 'Alice', 30, 50000, 1);
INSERT INTO 従業員 VALUES (2, 'Bob', 40, 60000, 1);
INSERT INTO 従業員 VALUES (3, 'Charlie', 35, 70000, 2);
INSERT INTO 部署 VALUES (1, 'HR');
INSERT INTO 部署 VALUES (2, 'Engineering');
演習2.テーブル定義と
データの追加
トピックス
1. SQL によるテーブル定義
2. SQL によるデータの追加
3. 問い合わせ(クエリ)による
確認
36
Webブラザを使用
アドレスバーにSQLFiddleURLを入力
http://sqlfiddle.com/
URLが分からないときは、Googleなどの検索エンジンを利
用。「SQLFiddle」と検索し、表示された結果から
SQLFiddleェブサイトをクリック。
37
左側のパネルに、テーブル定義データの追加を行
SQL を入れる。(以前の SQL が残っていたら不要なので消
す)
38
CREATE TABLE 従業員 (
id INTEGER,
name TEXT,
age INTEGER,
salary INTEGER,
department_id INTEGER);
CREATE TABLE 部署 (
id INTEGER,
name TEXT);
INSERT INTO 従業員 VALUES (1, 'Alice', 30, 50000, 1);
INSERT INTO 従業員 VALUES (2, 'Bob', 40, 60000, 1);
INSERT INTO 従業員 VALUES (3, 'Charlie', 35, 70000, 2);
INSERT INTO 部署 VALUES (1, 'HR');
INSERT INTO 部署 VALUES (2, 'Engineering');
Build Schema」をクリック
39
右側のパネルに、問い合わせ(クエリ)を行SQL を入
れる。
Run SQL」をクリック
2つの SQL 文が一括実行され、結果が表示される。
下側のインドで、結果を確認
40
select * from 従業員;
select * from 部署;
あとで使用するのでブラウザを閉じないこと
自習
次の SQL を試してみる。
SELECT age FROM 従業員;
SELECT * FROM 従業員 WHERE age = 30;
結果
41
あとで使用するのでブラウザを閉じないこと
4-7. 種々の問い合わせ(クエ
リ)(SQL を使用)
42
選択
43
CUST
PRODUCT
PRICE
100
P100
20
101
P100
30
101
X200
1000
102
P300
100
元のテーブル
テーブル名: P
選択
SELECT *
FROM P
WHERE PRICE > 50;
誰が、何を、いくらで買ったか
選択は、特定の条件に一致する行を選択
選択と射影の組み合わせ
44
SELECT PRODUCT
FROM P
WHERE PRICE > 50;
射影は、必要な属性のみを抽出
CUST
PRODUCT
PRICE
100
P100
20
101
P100
30
101
X200
1000
102
P300
100
元のテーブル
テーブル名: P
誰が、何を、いくらで買ったか
選択と射影の組み合わせ
テーブル結合
45
テーブル
テーブル
結合
テーブル
重複行除去
46
CUST
PRODUCT
PRICE
100
P100
20
101
P100
30
101
X200
1000
102
P300
100
元のテーブル
テーブル名: P
重複行除去しない
SELECT CUST
FROM P;
誰が、何を、いくらで買ったか
重複行除去する
SELECT DISTINCT CUST
FROM P;
グループ化
47
CUST
PRODUCT
PRICE
100
P100
20
101
P100
30
101
X200
1000
102
P300
100
元のテーブル
テーブル名: P
SELECT CUST, COUNT(*)
FROM P
GROUP BY CUST;
誰が、何を、いくらで買ったか
CUST 属性について 100, 101, 102
のグループ化が行われる
指定した属性についてグループ化
100
1
101
2
102
1
並べ替え(ソート)
48
CUST
PRODUCT
PRICE
100
P100
20
101
P100
30
101
X200
1000
102
P300
100
元のテーブル
テーブル名: P
並べ替え(ソート)
SELECT *
FROM P
ORDER BY PRICE;
誰が、何を、いくらで買ったか
PRICE で並べ替え
指定した属性についてソートする
副問い合わせ
49
CUST PRODUCT PRICE
100
P100
20
101
P100
30
101
X200
1000
102
P300
100
元のテーブル
テーブル名: P
テーブル名: C
誰が、何を、いくらで買ったか
ID NAME MEMBER
100
BBB
2023/10/02
101
AAA
2023/10/10
102
CCC
2023/10/15
名簿(番号と氏名と入会日)
副問い合わせ
SELECT NAME
FROM C
WHERE ID IN
(SELECT CUST
FROM P
WHERE PRODUCT='P100'); P100 を買ったのは誰?
演習3.SQL い合わせ
(クエリ)の概観
【トピックス
1. データの検索や射影
2. 問い合わせ対象テーブルの指定
3. 選択
4. 結合、結合条
5. 重複行の除去
6. 行数のカント
7. 平均、最大、最小、合計の計算
8. 属性でグルー
9. 並べ替え(ソート)
10. 副問い合わせ 50
右側のパネル。残っている SQL
消す
次の SQL を入
れる。Run SQL」をクリック
51
SELECT * FROM 従業員;
SELECT name, age FROM 従業員;
SELECT(データの検索や射影)
SELECTは、データベースからデータを取得す
ための基本。
2つめの SQL では、name, age 属性で射影
右側のパネル。残っている SQL
消す
次の SQL を入
れる。Run SQL」をクリック
52
SELECT name FROM 従業員;
SELECT name FROM 部署;
FROM(問い合わせ対象テーブルの指定)
FROMは、問い合わせ(クエリ)が対象とするテーブルを
指定する
右側のパネル。残っている SQL
消す
次の SQL を入
れる。Run SQL」をクリック
53
SELECT * FROM 従業員 WHERE age > 30;
WHERE(選択)
WHEREは、特定の条件に一致する行を選択するために使う。
age の値が 30 より大きいという条件で選択
右側のパネル。残っている SQL
消す
次の SQL を入
れる。Run SQL」をクリック
54
SELECT 従業員.name, 部署.name
FROM 従業員
JOIN 部署 ON 従業員.department_id = 部署.id;
JOINON(結合、結合条件)
関係のあるテーブルを、結合条件を指定して1つに結合する
右側のパネル。残っている SQL
消す
次の SQL を入
れる。Run SQL」をクリック
55
SELECT DISTINCT department_id FROM 従業員;
DISTINCT(重複行の除去)
SELECTは、データベースからデータを取得す
ための基本。
右側のパネル。残っている SQL
消す
次の SQL を入
れる。Run SQL」をクリック
56
SELECT COUNT(*) FROM 従業員;
COUNT(行数のカウント)
COUNTは、行数をカウントする。
テーブル全体の行数をカウント
右側のパネル。残っている SQL
消す
次の SQL を入
れる。Run SQL」をクリック
57
SELECT AVG(salary), MAX(salary), MIN(salary), SUM(salary)
FROM 従業員;
AVGMAXMINSUM(平均、最大、最小、合計の計算)
これらは、数値データに対する平均、最大、最小、合計
を計算する。
salary の値の平均、最大、最小、合計
右側のパネル。残っている SQL
消す
次の SQL を入
れる。Run SQL」をクリック
58
SELECT department_id, COUNT(*)
FROM 従業員
GROUP BY department_id;
GROUP BY(属性でグループ化)
GROUP BY は、指定した属性についてグループ化する。
department_id の属性について 1 2 でグループ化が行われ、
それぞれの行数をカウント
右側のパネル。残っている SQL
消す
次の SQL を入
れる。Run SQL」をクリック
59
SELECT name, age
FROM 従業員
ORDER BY age DESC;
ORDER BY(並べ替え(ソート))
ORDER BY は、指定した属性についてソートする。
salary 属性の値が高い行を先に表示
右側のパネル。残っている SQL
消す
次の SQL を入
れる。Run SQL」をクリック
60
SELECT * FROM 従業員
WHERE salary > (SELECT AVG(salary) FROM 従業員);
副問い合わせ
INや括弧()は、SQLでさまざまな用語があるが、問い合わ
せ内に別の問い合わせを含めるときにも使える。
これは、ある問い合わせの結果を別の問い合わせのために
使うもの。
salary 属性の値が、salary 属性の平均よりも高いという条件で選択
全体まとめ
オンラインツール SQLFiddle のメリット
アクセスの手軽さ: Webブラザがあればどこからでもアクセス可能。
インストール不要: データベースソフトェアのインストールが不要。
時間や場所に縛られない: 自分の都合に合わせて練習可能。
SQLによるデータの追加
INSERT INTO コマンドでテーブルに行を追加。
: INSERT INTO 朝食と値段 VALUES ('A', 'カレーライス', 400);
授業でのSQLの学習の進め方
概観から始め、次回から、基本的な機能をマスターしながら、応用に進む。
学習意欲の向上と効率的な学習が可能。
SQL問い合わせの全体像
SELECT, FROM, WHERE など、多様なコマンドが存在。
結合、集計、ソート、副問い合わせなど、高度な操作も可能。
61
全体まとめ
テーブル定義
CREATE TABLE でテーブルを定義。
: CREATE TABLE 従業員 (id INTEGER, name TEXT, age INTEGER,
salary INTEGER, department_id INTEGER);
主要なSQLの機能
1.データの検索や射影 (SELECT)
2.問い合わせ対象テーブルの指定 (FROM)
3.条件による選択 (WHERE)
4.テーブルの結合 (JOIN, ON)
5.重複行の除去 (DISTINCT)
6.行数のカント (COUNT)
7.平均、最大、最小、合計の計算 (AVG, MAX, MIN, SUM)
8.属性でグループ化 (GROUP BY)
9.並べ替え(ソート) (ORDER BY)
10.副問い合わせ 62
実践的スキルと問題解決能力の向上
SQLの基本から応用までを学び、オンラインツール
SQLFiddle)での演習を、アクティブラーニングで実施す
ることで、即戦力となるスキルと論理的思考が身につきます。
自由で自主性を重視する SQL 習環
場所や時間に縛られず、自分自身のペースで学べるオ
ンライン環境が、学習意欲を高め、自信をつける基盤
を提供します。
将来の成長の展望
SQLは多くの職種で求められるスキルです。基礎からしっか
りと学ぶことで、将来的に多様なキャリアパスが開かれ、自
信と成長の機会が広がります。
実践的なSQLスキルを身につけることができ、自分自身の
ペースで効率的に学べる環境が提供され、多様な個人成長の
機会が広がります。
63
自習1:テーブルの作成とデータの追加
目的: SQLの基本的なテーブル作成とデータ挿入について、
理解を深める
SQLFiddleCREATE TABLEINSERT INTOを使って、従
業員と部署のテーブルを定義し、データを追加してみましょ
。資料をなるべく見ずに、どこまで自力で行えるか確認し
てみましょ
自習は提出の必要はありません。
64
自習2:単純なデータの検索
目的: SELECTFROMを使った基本的なデータの検索
従業員テーブルから、age の属性だけを射影する SQLを考
え、実行して確認してみましょ
自習は提出の必要はありません。
65
自習3:条件に基づいたデータの検索
目的: WHEREを使って条件に合ったデータを選択
従業員テーブルから、年齢が 35 より大きい従業員のデータ
を選択する SQLを考え、実行して確認してみましょ
自習は提出の必要はありません。
66
自習1.解答例
67
CREATE TABLE 従業員 (
id INTEGER,
name TEXT,
age INTEGER,
salary INTEGER,
department_id INTEGER);
CREATE TABLE 部署 (
id INTEGER,
name TEXT);
INSERT INTO 従業員 VALUES (1, 'Alice', 30, 50000, 1);
INSERT INTO 従業員 VALUES (2, 'Bob', 40, 60000, 1);
INSERT INTO 従業員 VALUES (3, 'Charlie', 35, 70000, 2);
INSERT INTO 部署 VALUES (1, 'HR');
INSERT INTO 部署 VALUES (2, 'Engineering');