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件です。

この記事が気に入ったらサポートをしてみませんか?