社員の情報を部署名を含めて表示する。そのためには社員テーブル(emp)の他、部署テーブル(dep)も必要となる。
SELECT文で複数テーブルを指定。
oddtbs=> select * from dep, emp;
code | name | code | depcode | name | gender
------+--------+--------+---------+----------+--------
1001 | 総務部 | 564001 | 1002 | 鈴木義男 | 1
1001 | 総務部 | 564002 | 1003 | 斎藤洋子 | 2
1001 | 総務部 | 564003 | 1001 | 山田美樹 | 2
1001 | 総務部 | 564004 | 1002 | 田中秀明 | 1
1002 | 営業部 | 564001 | 1002 | 鈴木義男 | 1
1002 | 営業部 | 564002 | 1003 | 斎藤洋子 | 2
1002 | 営業部 | 564003 | 1001 | 山田美樹 | 2
1002 | 営業部 | 564004 | 1002 | 田中秀明 | 1
1003 | 開発部 | 564001 | 1002 | 鈴木義男 | 1
1003 | 開発部 | 564002 | 1003 | 斎藤洋子 | 2
1003 | 開発部 | 564003 | 1001 | 山田美樹 | 2
1003 | 開発部 | 564004 | 1002 | 田中秀明 | 1
(12 rows)
depとempの全ての行が組み合わされるため、12行も出力されている。
条件を指定。
oddtbs=> select * from dep, emp where dep.code = emp.depcode;
code | name | code | depcode | name | gender
------+--------+--------+---------+----------+--------
1002 | 営業部 | 564001 | 1002 | 鈴木義男 | 1
1003 | 開発部 | 564002 | 1003 | 斎藤洋子 | 2
1001 | 総務部 | 564003 | 1001 | 山田美樹 | 2
1002 | 営業部 | 564004 | 1002 | 田中秀明 | 1
(4 rows)
depテーブルのcode列とempテーブルのdepcode列の値が同じである組み合わせのみが選択されている。
テーブルの別名(相関名)を使用。
SELECT ... FROM テーブル名 別名, ...; または SELECT ... FROM テーブル名 AS 別名, ...;
oddtbs=> select * from dep d, emp e where d.code = e.depcode; ... oddtbs=> select * from dep as d, emp as e where d.code = e.depcode; ...
結果は前回と同様。
列の選択
次のSQLをファイルとして作成。(join051.sql)
oddtbs=> \i join051.sql
code | name | depcode | name | gender
--------+----------+---------+--------+--------
564001 | 鈴木義男 | 1002 | 営業部 | 1
564002 | 斎藤洋子 | 1003 | 開発部 | 2
564003 | 山田美樹 | 1001 | 総務部 | 2
564004 | 田中秀明 | 1002 | 営業部 | 1
(4 rows)
empテーブルのcode列は出力されていない。が、出力列名でnameが重複してしまっている。
列の別名
次のSQLをファイルとして作成。(join052.sql)
oddtbs=> \i join052.sql
empcode | empname | depcode | depname | gender
---------+----------+---------+---------+--------
564001 | 鈴木義男 | 1002 | 営業部 | 1
564002 | 斎藤洋子 | 1003 | 開発部 | 2
564003 | 山田美樹 | 1001 | 総務部 | 2
564004 | 田中秀明 | 1002 | 営業部 | 1
(4 rows)
出力結果の列名の重複が解消された。
SELECT文自体に名前をつけて定義することができ、これをビュー(VIEW)という。先ほどのSELECT文をVIEWとして定義する。
CREATE VIEW ビュー名 AS SELECT文;
次のSQLをファイルとして作成。(emp_view051.sql)
ログイン画面から実行。
oddtbs=> \i emp_view051.sql ... oddtbs=> select * from emp_v; empcode | empname | depcode | depname | gender ---------+----------+---------+---------+-------- 564001 | 鈴木義男 | 1002 | 営業部 | 1 564002 | 斎藤洋子 | 1003 | 開発部 | 2 564003 | 山田美樹 | 1001 | 総務部 | 2 564004 | 田中秀明 | 1002 | 営業部 | 1 (4 rows)