8. 種々の問い合わせ
IN、副問い合わせ、論理演算、AND
OR
1
金子邦彦
(データベース演習)
URL: https://www.kkaneko.jp/de/de/index.html
SQLスキルの向上
SQLの複数の機能(INBETWEENANDOR、副問い合
わせ)の理解と実践により、データベースの能力が向上しま
す。これは、データの検索や操作における作業の効率を高め
る。
データ処理スキルの向上
副問い合わせなど、多様な SQL コマンドの利用と通じて
データベースの問い合わせに対する深いが深まり、データ処
理スキルが向上する。
問題解決能力と論理的思考力
問題解決や論理的思考力が向上する。データベースに対する
自信を高め、新たな課題に対する満足感や達成感にもつなが
る。
2
8-1. イントロダクション
3
リレーショナルデータベースの仕組み
データをテーブルと呼ばれる表形式で保存
テーブル間関連で結ばれる。複雑な構造を持ったデータ
を効率的に管理することを可能に。
4
関連
5
SELECT
*FROM 記録;
テーブルのすべて
SELECT
居室 FROM 記録;
「居室」の列
をすべて
SELECT DISTINCT
居室 FROM 記録
;
重複行
(同じ値の行)を除去
SELECT
名前, 得点 FROM 記録
WHERE
得点 > 80;
「名前」と「得点」の列で、
得点
80より大きい」行を選択
SELECT
名前, 得点 FROM 記録
WHERE
得点 BETWEEN 80 AND
85;
「名前」と「得点」の列で、
得点
80以上かつ85以下」の範囲にある
行を選択
SELECT
AVG(得点)FROM 記録;
すべての
「得点」の値平均
SELECT
* FROM 記録
WHERE
居室 LIKE '%';
居室が''で終わる」行を選択
SELECT
* FROM 記録
WHERE
居室 IN ('1', '2')
居室が'1'または'2'」のいずれ
かに一致する行を選択
範囲指定 AND BETWEEN の利用
AND ・・・ 複数の条件をつなげる
BETWEEN
6
select ID, COST
from ORDERS
where COST >= 10 and COST <= 100;
where COST >= 10 and COST <= 100」の代わりに
where COST between 10 and 100」を使ことがで
きる(同じ結果が得られる)
select ID, COST
from ORDERS
where COST between 10 and 100;
10以上 100以下
10以上 100以下
SQL IN
複数の値のいずれ一致するかかテスト
OR 複数の条件を並べるよりも簡潔
IN を使用
SELECT *
FROM 成績
WHERE 科目 IN ('国語', '算数’);
OR で複数の条件を並べる】
SELECT *
FROM 成績
WHERE 科目 = '国語' OR 科目 = '算数'; 7
SQL IN
複数の値のいずれ一致するかかテスト
SELECT *
FROM 成績
WHERE 科目 IN ('国語', '算数’);
8
半角丸かっこ
で囲む
半角丸かっこ
で囲む
半角の
カンマ
副問い合わせ
副問い合わせは、別のSQL問い合わせ(クエリ)
内に埋め込まれたSQL問い合わせ(クエリ)
9
SELECT 受講者 FROM 成績 WHERE 得点 =
(SELECT MAX(得点) FROM 成績);副問い合わせ
複数の SQL の組み合わせ
10
成績
科目 受講者 得点
国語
A
85
国語
B
90
算数
A
90
算数
B
96
理科
A
95
SELECT 受講者 FROM 成績 WHERE 得点 = 96;
SELECT MAX(得点) FROM 成績 WHERE 科目;
組み合わせる。
かっこと = を使用
SELECT 受講者 FROM 成績 WHERE 得点 =
(SELECT MAX(得点) FROM 成績);
単一行問い合わせと複数行問い合わせ
異なるタイプの副問い合わせ
単一行副問い合わせ
副問い合わせは、必ず、一つの行のみを返す。
比較演算子(=, <, > など)と共に使用。
例:SELECT * FROM 従業員 WHERE 給与 =(SELECT
MAX(給与) FROM 従業員);
複数行副問い合わせ
副問い合わせは、複数の行を返すことがありえる
IN などと共に使用。
SELECT * FROM 従業員 WHERE 部署ID IN (SELECT 部署
ID FROM 部署 WHERE 場所 = '東京');
11
リレーショナルデータベースシステムにおける
AND OR の使用
SQLでは、複数条件を組み合わせる際 AND OR を使用
AND
条件AAND 条件B
条件Aと条件B両方が成立
OR
条件AOR 条件B
条件A、条件Bいずれか、または両方が成立
注意点: ORは「どちらか一方を選ぶ」とい味ではありません
12
8-2. 演習
13
いまから演習で行こと、注意点
次のテーブルを作成
Access での注意点】
SQLビューでは、SQL文を1つずつ実行
(複数まとめての一括実行ができない)
CREATE TABLE では、「実行」の後、画面が変化しない
が実行できている
INSERT INTO では、「実行」の後、確認表示が出る。そ
の後、画面が変化しないが実行できている 14
演習1.Access SQL
ビューを用いたテーブル定
とデータの追加
トピックス
SQLビューを開く
SQL文の編集
create table
insert into
SQL文の実行
15
演習
1. パソコンを使用する
前もって Access をインストールしておくこと
2. Access 起動する
3. Access で、「空のデータベース」を選び、「作成」を
クリック.
16
4. テーブルツール画面が表示されることを確認
17
5. 次の手順で、SQLビューを開く.
18
デザイン」タブで、「
」を展開し「SQL
ビュー」を選ぶ
作成」タブで、
クエリデザイン
をクリック
このような
表示が出た
ときは
閉じる」を
クリック
19
6. SQL ビューに、次の SQL を1つずつ入れ、「実行」ボ
タンで、SQLを実行.結果を確認
CREATE TABLE 成績 (
科目 TEXT,
受講者 TEXT,
得点 INTEGER);
INSERT INTO 成績 VALUES('国語', 'A', 85);
INSERT INTO 成績 VALUES('国語', 'B', 90);
INSERT INTO 成績 VALUES('算数', 'A', 90);
INSERT INTO 成績 VALUES('算数', 'B', 96);
INSERT INTO 成績 VALUES('理科', 'A', 95);
INSERT INTOでは、「実行」の後、確認
表示が出る。その後、画面が変化しない
が実行できている
間違ってしまったときは、テーブルの削除
を行ってからやり直した方が早い場合がある
20
テーブルビューで、削除した
いテーブルを右クリックして、
削除
テーブルを削除するときは、
間違って必要なテーブルを削除しない
ように、十分に注意する!
(元に戻せない)
演習2.種々のSQL問い合わ
せ. Access SQL ビューを
使用.
【トピックス
1. 単純な表
2. ANDによる範囲指
3. ANDBETWEENによる範
4. 範囲指定と別の条件の組み合わ
5. SQL IN
6. 最高得点講者
7. 平均得点よりも高いことを条件
とする検 21
Access SQL ビューを用いた問い合わせ
Access SQLビュー開く
SQL 編集select, from, where を使用
: select * from テーブル名 where 1 = 1;
SQL 実行
実行の結果、データシートビューに画面が変わり、そこに
問い合わせの結果が表示される
さらにSQL 文の編集、実行を続ける場合には、画面を
SQL ビューに切り替える
22
23
SQL 問い合わせ(クエリ)で使用する2つのビュ
SQL ビュー
SQL 文の作成編集 データシートビュー
問い合わせ(クエリ)
結果
実行
表示 + SQL ビュー
マウス操作でビューを切り替え
1. 次の手順で、SQLビューを開く.
24
デザイン」タブで、「
」を展開し「SQL
ビュー」を選ぶ
作成」タブで、
クエリデザイン
をクリック
このような
表示が出た
ときは
閉じる」を
クリック
25
2. SQL ビューに、次の SQL を1つずつ入れ、「
」ボタンで、SQLを実行.結果を確認
1. 単純な表示
SELECT * FROM 成績;
2. ANDによる範囲指定
SELECT * FROM 成績 WHERE 得点 >= 85 AND 得点 <= 90;
26
(続き)
3. ANDBETWEENによる範囲指定(2. と同じ結果
SELECT * FROM 成績 WHERE 得点 BETWEEN 85 AND 90;
4.範囲指定と別の条件の組み合わせ
SELECT * FROM 成績 WHERE 科目 = '国語' AND 得点 BETWEEN 90
AND 100;
27
(続き)
5. SQL IN
SELECT * FROM 成績 WHERE 科目 IN ('国語', '算数');
6.最高得点の受講者
SELECT 受講者 FROM 成績 WHERE 得点 =
(SELECT MAX(得点) FROM 成績);
28
(続き)
7. 平均得点よりも高いことを条件とする検索
SELECT * FROM 成績 WHERE 得点 >
(SELECT AVG(得点) FROM 成績);
8-3. 実データを用いた演習
29
演習の目的と形式
目的:実データを使い、グループ化と集約の有用
性を確認する。SQLのスキルアップも行
形式:自習形式(資料を見ながら各自実施して
ださ
30
演習の内容
31
SQL を用いたグループ化と集約、そのバリエーションと有用
性を知る
成人調査データを利用
実演・実習で使データベース
データの出典:Lichman, M. (2013).
UCI Machine Learning Repository [http://archive.ics.uci.edu/ml].
Irvine, CA: University of California, School of Information and Computer Science (米国)
32
このデータを使います
(演習では、特定の職業、学歴、性別、母国を差別的に見ないようにしてください)
米国成人調査データ
(1994年、米国における統計調査データのうち 32561 人分)
演習用のデータベースファイル
演習用の Access データベースファイル
セレッソの利用者は,セレッソからもダンロード可能
ファイル名: db4-4.accdb
コンテンツの有効化」のメッセージが出たときは、確認
え、次にすすむ
つぎのよな表示が出たときは、確認のえ、「はい
33
米国成人調査データ
34
選択
35
SELECT *
FROM 米国成人調査データ
WHERE 教育 IN ('10th', '11th');
10th, 11th だけが選ばれている
選択
36
SELECT *
FROM 米国成人調査データ
WHERE 母国 IN ('インド', 'メキシコ');
インド,メキシコだけが選ばれている
37
最高年齢
SELECT MAX(年齢)
FROM 米国成人調査データ;
38
SELECT *
FROM 米国成人調査データ
WHERE 年齢 =
(SELECT MAX (年齢) FROM 米国成人調査データ);
副問い合わせ 最高点についての情報
自習.次の SQL を実行し、SQLへの理解を深め、復習も
特定の職業に従事しているすべての人のリストを取得する:
SELECT * FROM 米国成人調査データ WHERE 職業 = '専門職';
特定の年齢範囲内の人々の数をカントする:
SELECT COUNT(*) FROM 米国成人調査データ WHERE 年齢
BETWEEN 20 AND 30;
母国ごとの平均週当たり労働時間を計算する:
SELECT 母国, AVG(週当たり労働時間) FROM 米国成人調査デー
GROUP BY 母国;
特定の職業の最大教育年数を持つ人々を選択
SELECT * FROM 米国成人調査データ WHERE 教育年数 =
(SELECT MAX(教育年数) FROM 米国成人調査データ);
39