de-8. SQLにおける副問い合わせ
と論理演算子(AND, OR)の基
1
金子邦彦
(データベース演習)
URL: https://www.kkaneko.jp/de/de/index.html
8-1. イントロダクション
2
リレーショナルデータベースの仕組み
データをテーブルと呼ばれる表形式で保存
テーブル間関連で結ばれる
複雑な構造を持ったデータを効率的に管理することを可能
3
関連
商品
ID
商品名
単価
1
みかん
50
2
りんご
100
3
メロン
500
購入者
商品番号
X
1
X
3
Y
2
購入
範囲指定の方法
AND を用いる範囲指定
複数の条件「COST >= 10」,「COST <= 100 」をつなげる
BETWEEN を用いる範囲指定
where COST >= 10 and COST <= 100」と
where COST between 10 and 100」は、同じ結果
10 以上 100以下)を得ることができる
4
select ID, COST
from ORDERS
where COST >= 10 and COST <= 100;
select ID, COST
from ORDERS
where COST between 10 and 100;
10以上 100以下
10以上 100以下
IN 演算子の基本
SQL IN 演算子は,複数の値のいずれか一致するか
うかをテストする.
例:WHERE 科目 IN ('国語', '算数’);
OR 演算子で,複数の値を並べるよりも簡潔
例:WHERE 科目 = '国語' OR 科目 = '算数’;
IN を用いた SQL の例 科目が国語または算数に一致
SELECT *
FROM 成績
WHERE 科目 IN ('国語', '算数’);
5
IN 演算子の構文
IN演算子で「複数の値のいずれか一致するか」を指定す
る際は,半角の丸かっこ全体を囲み,値と値の間は半角
のカンマで区切る
SELECT *
FROM 成績
WHERE 科目 IN ('国語', '算数’);
6
半角丸かっこ
で囲む
半角丸かっこ
で囲む
半角の
カンマ
副問い合わせ
副問い合わせは,別のSQL問い合わせ(クエリ)内に埋め込
まれたSQL問い合わせ(クエリ)である.
7
SELECT 受講者 FROM 成績 WHERE 得点 =
(SELECT MAX(得点) FROM 成績);
副問い合わせ
複数 SQL の組み合わせ
8
成績
科目 受講者 得点
国語
A
国語
B
算数
A
算数
B
理科
A
SELECT 受講者 FROM 成績 WHERE 得点 =
(SELECT MAX(得点) FROM 成績);
副問い合わせを使用することで,複数のSQLを組み合わせる
ことができる.
例:成績テーブルから最高得点受講者を検索する場合,
MAX関数による副問い合わせ主問い合わせを組み合わせ
使用する.
問い合わせの種類
単一行副問い合わせ
副問い合わせは,必ず,一つの行のみを返す
比較演算子(=, <, > など)と共に使用。
例:SELECT * FROM 従業員 WHERE 給与 = (SELECT
MAX(給与) FROM 従業員);
複数行副問い合わせ
副問い合わせは,複数の行を返す可能性がありえる
IN などと共に使用。
SELECT * FROM 従業員 WHERE 部署ID IN (SELECT 部署
ID FROM 部署 WHERE 場所 = '東京');
9
ANDOR 演算子の使用
SQLでは,AND演算子両方の条件が成立する場合を,
OR演算子いずれかの条件が成立する場合を選択する.
ORは「どちらか一方を選ぶ」という意味ではなく,両方
の条件が成立する場合も含まれる
AND
【条件A AND 【条件B
条件Aと条件B両方の条件が成立
OR
【条件A OR 【条件B
条件A、条件Bいずれの条件が成立(両方が成立する
場合を含む)
10
まとめ
副問い合わせ
別のSQL問い合わせ内に埋め込まれた問い合わせ(クエ
リ).複雑な条件を実現する.
IN演算子
値の一致についての判定を行う演算子.
AND/OR演算子
ANDは両条件の成立,ORはいずれかの条件成立を選択す
る基本的な論理演算子
BETWEEN演算子
値の範囲指定を簡潔に記述できる演算子.
11
12
SELECT
*
テーブルの全表示
SELECT
属性名あるいは属性名リスト
特定属性の表示
DISTINCT
重複除去
WHERE
条件指定
LIKE
パターンマッチ
GROUP BY
グループ化
COUNT
行数のカウント
SUM, AVG, MAX, MIN
合計,平均,最大,最小
BETWEEN
範囲指定
IN
値の一致
AND
両方の条件が成立
OR
いずれかの条件が成立
基本的な SQL 文のまとめ
8-2. 演習
13
いまから演習で行うこと、注意点
次のテーブルを作成
Access での注意点
SQLビューでは、SQL文を1つずつ実行
(複数まとめての一括実行ができない)
CREATE TABLE では、「実行」の後、画面が変化しない
が実行できている
INSERT INTO では、「実行」の後、確認表示が出る。そ
の後、画面が変化しないが実行できている
14
SQL 理解のための前提知識
テーブル
データをテーブルと呼ばれる表形式で保存
問い合わせ(クエリ)
問い合わせ(クエリ)は、データベースから必要なデータ
を検索、加工するための指令
SELECT, FROM, WHERE など、多様なコマンドが存在。
結合、集計、ソート、副問い合わせなど、高度な操作も可
15
ID
商品名
単価
1
みかん
50
2
りんご
100
3
メロン
500
購入者
商品番号
X
1
X
3
Y
2
SQL によるテーブル定義
テーブル名成績
属性名科目、受講者、得点
属性のデータ型テキスト、テキスト、数値
データの整合性を保つための制約なし
16
CREATE TABLE 成績 (
科目 TEXT,
受講者 TEXT,
得点 INTEGER);
データ追加のSQL
17
成績
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);
科目 受講者 得点
国語
A
国語
B
算数
A
算数
B
理科
A
演習1.Access SQL
ビューを用いたテーブル定義
とデータの追加
【トピックス】
SQLビューを開く
SQL文の編集
create table
insert into
SQL文の実行
18
演習
1. パソコンを使用する
前もって Access をインストールしておくこと
2. Access 起動する
3. Access で、空のデータベース」を選び、「作成」を
クリック.
19
4. テーブルツール画面が表示されることを確認
20
5. 次の手順で、SQLビューを開く.
21
②「デザイン」タブで、
表示」を展開し「SQL
ビュー」を選ぶ
①「作成」タブで、
クエリデザイン
をクリック
このような
表示が出た
ときは
閉じる」を
クリック
22
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では、「実行」の後、確認
表示が出る。その後、画面が変化しない
が実行できている
間違ってしまったときは、テーブルの削除
を行ってからやり直した方が早い場合がある
23
テーブルビューで、削除した
いテーブルを右クリックして、
削除
テーブルを削除するときは、
間違って必要なテーブルを削除しない
ように、十分に注意する!
(元に戻せない)
演習2.種々のSQL問い合わせ.
Access SQL ビューを使用.
トピックス
1. 単純な表示
2. ANDによる範囲指定
3. ANDBETWEENによる範囲指定
4. 範囲指定と別の条件の組み合わ
5. SQL IN
6. 最高得点の受講者
7. 平均得点よりも高いことを条件
とする検索
24
Access SQL ビューを用いた問い合わせ
Access SQLビュー開く
SQL 編集select, from, where を使用
: select * from テーブル名 where 1 = 1;
SQL 実行
実行の結果、データシートビューに画面が変わり、そこに
い合わせの結果が表示される
さらにSQL 文の編集、実行を続ける場合には、画面を SQL
ビューに切り替える
25
26
SQL 問い合わせ(クエリ)で使用する2つのビュー
SQL ビュー
SQL 文の作成編集
データシートビュー
問い合わせ(クエリ)
結果
実行
表示 + SQL ビュー
マウス操作でビューを切り替え
1. 次の手順で、SQLビューを開く.
27
②「デザイン」タブで、
表示」を展開し「SQL
ビュー」を選ぶ
①「作成」タブで、
クエリデザイン
をクリック
このような
表示が出た
ときは
閉じる」を
クリック
28
2. SQL ビューに、次の SQL を1つずつ入れ、「
」ボタンで、SQLを実行.結果を確認
1. 単純な表示
SELECT * FROM 成績;
2. ANDによる範囲指定
SELECT * FROM 成績 WHERE 得点 >= 85 AND 得点 <= 90;
29
(続き)
3. ANDBETWEENによる範囲指定2. と同じ結果
SELECT * FROM 成績 WHERE 得点 BETWEEN 85 AND 90;
4.範囲指定と別の条件の組み合わせ
SELECT * FROM 成績 WHERE 科目 = '国語' AND 得点 BETWEEN 90
AND 100;
30
(続き)
5. SQL IN
SELECT * FROM 成績 WHERE 科目 IN ('国語', '算数');
6.最高得点の受講者
SELECT 受講者 FROM 成績 WHERE 得点 =
(SELECT MAX(得点) FROM 成績);
31
(続き)
7. 平均得点よりも高いことを条件とする検
SELECT * FROM 成績 WHERE 得点 >
(SELECT AVG(得点) FROM 成績);
8-3. 実データを用いた演習
32
演習の目的と形式
目的:実データを使い、グループ化と集約の有用
性を確認する。SQLのスキルアップも行う
形式:発展演習形式(資料を見ながら各自実施し
てください
33
演習の内容
34
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 (米国)
35
このデータを使います
(演習では、特定の職業、学歴、性別、母国を差別的に見ないようにしてください)
米国成人調査データ
(1994年、米国における統計調査データのうち 32561 人分)
演習用のデータベースファイル
演習用の Access データベースファイル
セレッソの利用者は,セレッソからもダウンロード可能
ファイル名: db4-4.accdb
コンテンツの有効化」のメッセージが出たときは、確認
のうえ、次にすすむ
つぎのような表示が出たときは、確認のうえ、「はい
36
米国成人調査データ
37
選択
38
SELECT *
FROM 米国成人調査データ
WHERE 教育 IN ('10th', '11th');
10th, 11th だけが選ばれている
選択
39
SELECT *
FROM 米国成人調査データ
WHERE 母国 IN ('インド', 'メキシコ');
インド,メキシコだけが選ばれている
40
最高年齢
SELECT MAX(年齢)
FROM 米国成人調査データ;
41
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 米国成人調査データ);
42