price_tbl
id | name | price |
101 | えんぴつ | 50 |
201 | せっけん | 200 |
102 | けしごむ | 100 |
kosuu_tbl
id | kosuu |
101 | 10 |
102 | 5 |
103 | 7 |
内部結合
指定された列のデータが一致するものだけ取り出す。
DB=> select A.列名, A.列名, B.列名, ...
from テーブル1 A(別名)inner join テーブル2 B(別名)on A.列名 = B.列名;
DB=> select A.id, A.name, A.price, B.kosuu
from price_tbl A inner join kosuu_tbl B on A.id = B.id;
DB=> select 列名, 列名, ... from テーブル1 natural join テーブル2;
DB=> select id, name, price, kosuu from price_tbl natural join kosuu_tbl;
DB=> select 列名, 列名, ... from テーブル1 join テーブル2 using( 列名 );
DB=> select id, name, price, kosuu from price_tbl join kosuu_tbl using( id );
id | name | price | kosuu |
101 | えんぴつ | 50 | 10 |
102 | けしごむ | 100 | 5 |
外部結合
結合するテーブルに該当データがなくても結合できる。該当データがない場合には、
NULL 値となる。左側にあるテーブルを基準とする left join
、右側にあるテーブルを基準とする right join
がある。
・left join(join の左側にあるテーブルを基準)
DB=> select A.列名, A.列名, B.列名, ...
from テーブル1 A(別名)left join テーブル2 B(別名)on A.列名 = B.列名;
DB=> select A.id, A.name, A.price, B.kosuu
from price_tbl A left join kosuu_tbl B on A.id = B.id;
DB=> select 列名, 列名, ... from テーブル1 natural left join テーブル2;
DB=> select id, name, price, kosuu from price_tbl natural left join kosuu_tbl;
DB=> select 列名, 列名, ... from テーブル1 left join テーブル2 using( 列名 );
DB=> select id, name, price, kosuu from price_tbl left join kosuu_tbl using( id );
id | name | price | kosuu |
101 | えんぴつ | 50 | 10 |
102 | けしごむ | 100 | 5 |
201 | せっけん | 200 | NULL |
・right join(join の右側にあるテーブルを基準)
DB=> select A.列名, A.列名, B.列名, ...
from テーブル1 A(別名)right join テーブル2 B(別名)on A.列名 = B.列名;
DB=> select B.id, A.name, A.price, B.kosuu
from price_tbl A right join kosuu_tbl B on A.id = B.id;
DB=> select 列名, 列名, ... from テーブル1 natural right join テーブル2;
DB=> select id, name, price, kosuu from price_tbl natural right join kosuu_tbl;
DB=> select 列名, 列名, ... from テーブル1 right join テーブル2 using( 列名 );
DB=> select id, name, price, kosuu from price_tbl right join kosuu_tbl using( id );
id | name | price | kosuu |
101 | えんぴつ | 50 | 10 |
102 | けしごむ | 100 | 5 |
103 | NULL | NULL | 7 |
交差結合
該当するデータを全て組み合わせる。
DB=> select A.列名, A.列名, B.列名, ...
from テーブル1 A(別名)cross join テーブル2 B(別名);
DB=> select A.id, A.name, A.price, B.id, B.kosuu
from price_tbl A cross join kosuu_tbl B;
DB=> select * from テーブル1 cross join テーブル2;
DB=> select * from price_tbl cross join kosuu_tbl;
id | name | price | id | kosuu |
101 | えんぴつ | 50 |
101 | 10 |
201 | せっけん |
200 |
101 | 10 |
102 | けしごむ |
100 |
101 | 10 |
101 | えんぴつ |
50 |
102 | 5 |
201 | せっけん |
200 |
102 | 5 |
102 | けしごむ | 100 |
102 | 5 |
101 | えんぴつ |
50 |
103 | 7 |
201 | せっけん |
200 |
103 | 7 |
102 | けしごむ |
100 |
103 | 7 |
ユニオン
検索結果を合わせたものを取得、重複データは含まれない。列数と、属性が同じでなくては成らない。
DB=> select 列名, 列名, ... from テーブル1
union
select 列名, 列名, ... from テーブル2;
DB=> select id from price_tbl union select id from kosuu_tbl order by id;
ユニオン(重複あり)
union の替わりに、union all を使用。
DB=> select id from price_tbl union all select id from kosuu_tbl order by id;
id |
101 |
101 |
102 |
102 |
103 |
201 |
intersect
検索結果から、共通部分を取得。
DB=> select id from price_tbl intersect select id from kosuu_tbl order by id;
except
1番目の検索結果引く、2番目の検索結果を取得。
DB=> select id from price_tbl except select id from kosuu_tbl order by id;