LEFT OUTER JOIN testdb=# \d test.member test.department
testdb=# SELECT * FROM member;
no | name | tel | groupno
----+------+-------------+---------
1 | 石川 | 01201234567 | 2
2 | 鈴木 | 01201234568 | 3
3 | 児玉 | 01201234569 | 2
(3 rows)
testdb=# SELECT * FROM department;
groupno | groupname | boss | tel
---------+-----------+------+-------------
1 | 人事部 | 蜂谷 | 01201234561
2 | 総務 | 石川 | 01201234567
(2 rows)
testdb=# SELECT * FROM member LEFT OUTER JOIN department USING (groupNo);
groupno | no | name | tel | groupname | boss | tel
---------+----+------+-------------+-----------+------+-------------
2 | 1 | 石川 | 01201234567 | 総務 | 石川 | 01201234567
3 | 2 | 鈴木 | 01201234568 | | |
2 | 3 | 児玉 | 01201234569 | 総務 | 石川 | 01201234567
(3 rows)
OUTER JOIN句から外部結合が行われていることが分かります。
外部結合では結合キーの値が等しいデータに加えて、条件に一致しなかったデータが取得されます。
問題のSQL文では結合キーに「groupNo」を指定してLEFT OUTER JOINを用いているため、「groupNo」カラムの値が一致するデータに加えて、条件に一致しなかった「member」テーブルの残りのデータも取得されることが分かります。
「groupNo」カラムの値が一致するデータが「groupNo = 2」を満たす2件、「member」テーブルの残りのデータが1件であるため、取得されるデータは3件です。