JOIN 応用

JOIN演算子を応用してみる。

room
numname
1A教室
2B教室
3C教室
time
numname
1午前
2午後
3夕方
staff
numname
1田中
2鈴木
3佐藤
assign
rnumtnumsnum
123
231
312

準備

  1. 次のSQLをファイルとして作成。(room_setup131.sql)

    
    
    oddtbs=> \i room_setup131.sql
    ...
    oddtbs=> select * from room;
     num |  name
    -----+--------
       1 | A教室
       2 | B教室
       3 | C教室
    (3 rows)
    
  2. 次のSQLをファイルとして作成。(time_setup131.sql)

    
    
    oddtbs=> \i time_setup131.sql
    ...
    oddtbs=> select * from time;
     num | name
    -----+------
       1 | 午前
       2 | 午後
       3 | 夕方
    (3 rows)
    
  3. 次のSQLをファイルとして作成。(staff_setup131.sql)

    
    
    oddtbs=> \i staff_setup131.sql
    ...
    oddtbs=> select * from staff;
     num | name
    -----+------
       1 | 田中
       2 | 鈴木
       3 | 佐藤
    (3 rows)
    
  4. 次のSQLをファイルとして作成。(assign_setup131.sql)

    
    
    oddtbs=> \i assign_setup131.sql
    ...
    oddtbs=> select * from assign;
     rnum | tnum | snum
    ------+------+------
        1 |    2 |    3
        2 |    3 |    1
        3 |    1 |    2
    (3 rows)
    

VIEWの作成

  1. JOINを使用しない例

    ・次のように割り当てを名前で表示するビューを定義する。

    assign_v1
    roomtimestaff
    A教室午後佐藤
    B教室夕方田中
    C教室午前鈴木

    ・次のSQLをファイルとして作成。(assign_view131.sql)

    
    

    ・ログイン画面から実行

    oddtbs=> \i assign_view131.sql
    ...
    oddtbs=> select * from assign_v1;
      room  | time | staff
    --------+------+-------
     A教室 | 午後 | 佐藤
     B教室 | 夕方 | 田中
     C教室 | 午前 | 鈴木
    (3 rows)
    
  2. JOINを使用した例①

    ・上記と同じ内容のビュー(assign_v2)をJOINを使用して定義する。

    ・次のSQLをファイルとして作成。(assign_view132.sql)

    
    

    ・ログイン画面から実行

    oddtbs=> \i assign_view132.sql
    ...
    oddtbs=> select * from assign_v2;
      room  | time | staff
    --------+------+-------
     A教室 | 午後 | 佐藤
     B教室 | 夕方 | 田中
     C教室 | 午前 | 鈴木
    (3 rows)
    
  3. JOINを使用した例②

    ・次のように教室と時間帯の全ての組み合わせを表示するビューを定義する。

    assign_v2
    roomtimestaff
    A教室午前
    A教室午後佐藤
    A教室夕方
    B教室午前
    B教室午後
    B教室夕方田中
    C教室午前鈴木
    C教室午後
    C教室夕方

    ・次のSQLをファイルとして作成。(assign_view133.sql)

    
    

    ・ログイン画面から実行

    oddtbs=> \i assign_view133.sql
    ...
    oddtbs=> select * from assign_v3;
      room  | time | staff
    --------+------+-------
     A教室 | 午前 |
     A教室 | 午後 | 佐藤
     A教室 | 夕方 |
     B教室 | 午前 |
     B教室 | 午後 |
     B教室 | 夕方 | 田中
     C教室 | 午前 | 鈴木
     C教室 | 午後 |
     C教室 | 夕方 |
    (9 rows)
    

    ・教室と時間帯の行を追加してから確認

    oddtbs=> insert into room values(4, 'D教室');
    ...
    oddtbs=> insert into time values(4, '夜間');
    ...
    oddtbs=> select * from assign_v3;
      room  | time | staff
    --------+------+-------
     A教室 | 午前 |
     A教室 | 午後 | 佐藤
     A教室 | 夕方 |
     A教室 | 夜間 |
     B教室 | 午前 |
     B教室 | 午後 |
     B教室 | 夕方 | 田中
     B教室 | 夜間 |
     C教室 | 午前 | 鈴木
     C教室 | 午後 |
     C教室 | 夕方 |
     C教室 | 夜間 |
     D教室 | 午前 |
     D教室 | 午後 |
     D教室 | 夕方 |
     D教室 | 夜間 |
    (16 rows)
    
    教室と時間帯に関して全ての組み合わせが表示されている。