• 検索結果がありません。

(Access データベースシステム演習 ) ae-11. 副問い合わせ

N/A
N/A
Protected

Academic year: 2021

シェア "(Access データベースシステム演習 ) ae-11. 副問い合わせ"

Copied!
41
0
0

読み込み中.... (全文を見る)

全文

(1)

ae-11. 副問い合わせ

(Access データベースシステム演習)

キーワード:

問い合わせ(クエリ),副問い合わせ, IN,SQL ビュー

https://www.kkaneko.jp/cc/access/index.html 1

金子邦彦

(2)

今日の授業で行うこと(1)

2

元データ

AA

さんが受けている科目(=国語)

を1つでも受講している人は?

select

氏名

from

成績

where

科目名

in (select

科目名

from

成績

where

氏名

='AA');

成績

氏名 科目名 得点

AA 国語 90

BB 算数 80

CC 国語 100

DD 国語 95

DD 算数 90

EE 英語 90

科目名 国語

氏名

AA

CC DD

(3)

今日の授業で行うこと(2)

3

元データ

最高点(100点)をとった人は?

select

氏名

from

成績

where

得点

= (select max(

得点

) from

成績

);

成績

氏名 科目名 得点

AA 国語 90

BB 算数 80

CC 国語 100

DD 国語 95

DD 算数 90

EE 英語 90

得点

100

氏名

CC

(4)

今日学習することはなぜ大切なのか

4

問い合わせ(クエリ)の結果を使った問い合わせ(クエ

リ)ができるようになる.複数のテーブルがあってもOK

氏名 科目名 得点

AA 国語 90

BB 算数 80

CC 国語 100

DD 国語 95

DD 算数 90

EE 英語 90

得点

100

氏名

CC

(5)

SQL の書き方の例

5

SELECT

*

やフィールド名の並び>

FROM

<テーブル名の並び>

WHERE

<選択条件>

2

つ以上のテーブル名を 並べるので、

半角カンマで区切る

2

つ以上のときは

半角カンマで区切る

(6)

SQL の書き方の例

6

SELECT

*

やフィールド名の並び>

FROM

<テーブル名の並び>

WHERE

<選択条件>

まとめページ

2

つ以上のテーブル名を 並べるので、

半角カンマで区切る

2

つ以上のときは

半角カンマで区切る

選択条件が

<属性名>

IN ( SELECT

<フィールド名>

FROM

<テーブル名の並び>

WHERE

<選択条件>

)

<属性名>

IN (

SQL

問い合わせ>

)

のようになる

のときは

(7)

5-1 SQL の IN

7

(8)

SQL の IN

8

まとめページ

選択条件で,複数の値のどれか1つに 一致するという条件を指定したいとき

SELECT 氏名 FROM 成績

WHERE 科目名 IN ('算数', '英語');

氏名 DDBB

EE

「算数」か「英語」を受講している人は?

(どちらか1つあれば良い)

氏名 科目名 得点

AA 国語 90

BB 算数 80

CC 国語 100

DD 国語 95

DD 算数 90

EE 英語 90

(9)

SQL の IN

9

まとめページ

SELECT 氏名 FROM 成績

WHERE 科目名 IN (' 算数 ', ' 英語 ');

半角丸かっこ

で囲む 半角丸かっこ

で囲む 半角の

カンマ

(10)

5-2 副問い合わせの例

10

(11)

11

副問い合わせ

◆ 副問い合わせなし

SELECT

科目名

FROM

成績

WHERE

氏名

='AA';

SELECT

氏名

FROM

成績

WHERE

科目名

IN ('

国語

');

問い合わせの結果を,別の問い合わせで使いたいとき

◆ 副問い合わせあり

SELECT 氏名 FROM 成績 WHERE 科目名 IN (SELECT 科目名 FROM 成績 WHERE 氏名='AA');

AA

さんが受けている科目を1つでも受講している人は?

(12)

12

副問い合わせ

元データ 成績

氏名 科目名 得点

AA 国語 90

BB 算数 80

CC 国語 100

DD 国語 95

DD 算数 90

EE 英語 90

SELECT 科目名 FROM 成績 WHERE 氏名='AA';

SELECT 氏名 FROM 成績 WHERE 科目名 IN ('国語');

科目名 国語

氏名AA DDCC

問い合わせの結果を、別の問い合わせで使いた

いことがある

(13)

13

副問い合わせ

問い合わせの結果を、別の問い合わせで使いた いことがある

元データ 成績

氏名 科目名 得点

AA 国語 90

BB 算数 80

CC 国語 100

DD 国語 95

DD 算数 90

EE 英語 90

SELECT 科目名 FROM 成績 WHERE 氏名='AA';

SELECT 氏名 FROM 成績 WHERE 科目名 IN ('国語');

科目名 国語

氏名AA DDCC

問い合わせの結果を,

別の問い合わせで使いたい

(14)

科目名国語 算数

14

こんな場合もあります

元データ

成績

SELECT 科目名 FROM 成績 WHERE 氏名='DD';

SELECT 氏名 FROM 成績 WHERE 科目名 IN ('国語', '算数');

氏名AA

CCBB DDDD

問い合わせの結果を,

別の問い合わせで使いたい

DD

さんが受けている科目を1つでも受講している人は?

氏名 科目名 得点

AA 国語 90

BB 算数 80

CC 国語 100

DD 国語 95

DD 算数 90

EE 英語 90

結果にDD2個あるのは間違いではない(元のテーブルにDD2個あるから)

(15)

15

副問い合わせ

◆ 副問い合わせなし

SELECT

科目名

FROM

成績

WHERE

氏名

='DD';

SELECT

氏名

FROM

成績

WHERE

科目名

IN ('

国語

', '

算数

');

問い合わせの結果を,別の問い合わせで使いたいとき

◆ 副問い合わせあり

SELECT 氏名 FROM 成績 WHERE 科目名 IN (SELECT 科目名 FROM 成績 WHERE 氏名='DD');

DD

さんが受けている科目を1つでも受講している人は?

この部分が副問い合わせ

(16)

5-3 副問い合わせの記述法

16

(17)

選択条件のバリエーション

◆ <属性名>

IN (

SQL

問い合わせ>

)

◆ <属性名>

= (

SQL

問い合わせ>

)

17

この「SQL問い合わせ」の結果が

複数個あっても動作する(1個でも

OK

この「SQL問い合わせ」の結果が

1個でないと動作しない(複数個はだめ)

SQL

問い合わせを

半角丸かっこで囲む

SQL

問い合わせを

半角丸かっこで囲む

(18)

<属性名> IN ( < SQL 問い合わせ> ) の例(1)

18

AA

さんが受けている科目を1つでも受講している人は?

SELECT 氏名 FROM 成績 WHERE 科目名 IN (SELECT 科目名 FROM 成績 WHERE 氏名='AA');

氏名 科目名 得点

AA 国語 90

BB 算数 80

CC 国語 100

DD 国語 95

DD 算数 90

EE 英語 90

氏名AA DDCC

(19)

<属性名> IN ( < SQL 問い合わせ> ) の例(2)

19

AA

さんが受けている科目を1つでも受講している人は?

SELECT 氏名 FROM 成績 WHERE 科目名 IN (SELECT 科目名 FROM 成績 WHERE 氏名='DD');

氏名 科目名 得点

AA 国語 90

BB 算数 80

CC 国語 100

DD 国語 95

DD 算数 90

EE 英語 90

氏名AA

CCBB DDDD

この「SQL問い合わせ」の結果が

複数個あっても動作する

(20)

<属性名> = ( < SQL 問い合わせ> ) の例

20

最高点をとった人は?

SELECT

氏名

FROM

成績

WHERE

得点

= (SELECT MAX(

得点

) FROM

成績

);

氏名

CC

氏名 科目名 得点

AA 国語 90

BB 算数 80

CC 国語 100

DD 国語 95

DD 算数 90

EE 英語 90

=

」を使っているので,

この「SQL問い合わせ」の結果が

1個でないと動作しない

(21)

5-4 副問い合わせを含む SQL

21

(22)

実習タイム その①

1. Windows 8 を起動し、ログインしなさい 2. Access 2013 を起動しなさい

3. Access 2013 で、空のデスクトップデータベースを新規作成しな さい.ファイル名は「データベース11.accdb」にしなさい

22

(23)

実習タイム その①

4. 次のような成績テーブルを考える.

23

氏名 科目名 得点

AA

国語

90

BB

算数

80

CC

国語

100

DD

国語

95

DD

算数

90

EE

英語

90

(24)

実習タイム その①

24

5. テーブル名「成績」のテーブル定義を行いなさい

フィールド名 データ型

氏名 短いテキスト 科目名 短いテキスト 得点 数値型

主キー

は無い

(25)

実習タイム その①

25

6.

データシートビューを使って、テーブル「成績」に データを入力しなさい.

氏名はすべて

半角か全角かどちらかに そろえる

(半角と全角を混ぜない)

データシートビュー データ

入力

(26)

実習タイム その①

7. Access 2013 で、SQLビューを開きなさい.

26

②「成績」を選 び、「追加」を

クリック

③「閉じる」

クリック

④「デザイン」タブで、「表 示」を展開し「SQLビュー」

を選ぶ

①「作成」タブで、

「クエリデザイン」

をクリック

(27)

実習タイム その①

8. Access 2013 の SQL ビューに、次の SQL を入れなさい

9. 「実行」ボタンを押して、実行しなさい. 確認したら、SQL

ビューに戻りなさい

27

select

氏名

from

成績

where

科目名

in (select

科目名

from

成績

where

氏名

='AA');

AA

さんが受けている科目を

1つでも受講している人は?

(28)

実習タイム その①

10. Access 2013 の SQL ビューに、次の SQL を入れなさい

11. 「実行」ボタンを押して、実行しなさい.

28

select

氏名

from

成績

where

得点

=

(select max(

得点

) from

成績

);

最高点をとった人は?

(29)

チャレンジ課題

29

(30)

課題 学生テーブルと、試験テーブルを考える.

(試験テーブルは次のページに記載している).

30

学生番号 名前 所属

101

織田 情報

102

豊臣 情報

103

徳川 情報

201

ルーズベルト スマート

202

ワシントン スマート

学生テーブル

(31)

31

試験テーブル

学生番号 科目名 成績

101

データベース

90

101

数学

80

102

プログラミング

85 102

プロセッサ

100

103

数学

95

201

数学

90

201

エレクトロニクス

90

202

英語

90

202

組み込み

100

(32)

課題

32

学生テーブルと、試験テーブルのテーブル定義を行いなさい

・ 今回は、テーブル定義についても自分で考えなさい

・ なお、今回は、主キーを設定しなくても、後の問題を解く

のに支障はない

(33)

課題

33

データシートビューを使って、ページ31とページ32

の通りに、データを入力しなさい

(34)

試験のテーブルを使い,「数学か英語の試験を受けた学生の 学生番号」を得る、次の

SQL

を実行しなさい

select

学生番号

from

試験

where

科目名

in ('

数学

', '

英語

');

次の結果が得られることを確認しなさい

34

101

103

201

202

(35)

問題

(1)前のページを参考に、

「数学かプログラミングを受けた学生の学生番号」を得るSQL を考えなさい.パソコンで実行して確認しなさい

(2)前のページを参考に、

「データベースかプログラミングを受けた学生の学生番号」を得 るSQLを考えなさい.パソコンで実行して確認しなさい

35

(36)

学生のテーブルから,「名前」が「織田」である学生と同じ

「所属」である学生の名前を得る、次の

SQL

を実行しなさい

select

名前

from

学生

where

所属

= (select

所属

from

学生

where

名前

='

織田

');

次の結果が得られることを確認しなさい

36

織田

豊臣

徳川

(37)

問題

(3)前のページを参考に、

「名前」が「ワシントン」である学生と同じ「所属」である学生の名前 を得るSQLを考えなさい.パソコンで実行して確認しなさい

37

(38)

試験のテーブルから,「成績」が「最高値」である「科目 名」を得る、次の

SQL

を実行しなさい

select

科目名

from

試験

where

成績

= (select max(

成績

) from

試験

);

次の結果が得られることを確認しなさい

38

プロセッサ

組み込み

(39)

問題

(4)前のページを参考に、

試験のテーブルから,「成績」が「最高値」である「学生番号」を得る SQLを考えなさい.パソコンで実行して確認しなさい

(5)試験のテーブルから,「成績」が「最低値」である「学生番号」

を得るSQLを考えなさい.パソコンで実行して確認しなさい

max

のかわりに「

min

」をつかうことを考えなさい

39

(40)

試験のテーブルを使い,「学生番号」が「

101

」である学生が受 けた試験と同じ科目名の試験を1つでも受けた学生の学生番号を 得る、次の

SQL

を実行しなさい

select

学生番号

from

試験

where

科目名

in (select

科目名

from

試験

where

学生番号

= 101);

次の結果が得られることを確認しなさい

40

101101 103201

101

が複数あるのは間違いではない

(41)

問題

(6)前のページを参考に、

「学生番号」が「

201

」である学生が受けた試験と同じ科目名 の試験を1つでも受けた学生の学生番号

をSQLを考えなさい.パソコンで実行して確認しなさい

41

参照

関連したドキュメント

氏名..

全体として 11 名減となっています。 ( 2022 年3 月31 日付) 。 2021 年度は,入会・資料請求等の問い合わせは 5 件あり,前

なごみ 11 名(2 ユニット) 、ひだまり 8 名(2 ユニット)短期入所(合計 4 名) あすわ 2 名、ひまわりの家 2 名

授業科目の名称 講義等の内容 備考

卒論の 使用言語 選考要件. 志望者への

国際地域理解入門B 国際学入門 日本経済基礎 Japanese Economy 基礎演習A 基礎演習B 国際移民論 研究演習Ⅰ 研究演習Ⅱ 卒業論文

授業は行っていません。このため、井口担当の 3 年生の研究演習は、2022 年度春学期に 2 コマ行います。また、井口担当の 4 年生の研究演習は、 2023 年秋学期に 2

使用言語 日本語 選考要件. 登録届を提出するまでに個別面談を受けてください。留学中で直接面談 できない場合は Skype か