#集合演算
集合演算はレコードの集合で、テーブル通しの四則演算ができる。
##テーブルの足し算と引き算
###UNION
テーブルの足し算
まずはテーブルの準備。
商品テーブルが既にあるので、商品テーブル2を作成する。
create table shohin2
(shohin_id char(4) not null,
shohin_mei varchar(100) not null,
shoihin_bunrui varchar(32) not null,
hanbai_tanka integer ,
shiire_tanka integer ,
torokubi date ,
primary key (shohin_id));
CREATE TABLE
begin transaction;
insert into shohin2 values ('0001', 'Tシャツ', '衣服', 1000, 500, '2008-09-20'),
('0002', '穴あけパンチ', '事務用品', 500, 320, '2009-09-11'),
('0003', 'カッターシャツ', '衣服', 4000, 2800, null),
('0009', '手袋', '衣服', 800, 500, null),
('0010', 'やかん', 'キッチン用品', 2000, 1700, '2009-09-20');
INSERT 0 5
commit;
COMMIT
商品テーブルと商品テーブル2を足し算する。
select shohin_id, shohin_mei
from shohin
union
select shohin_id, shohin_mei
from shohin2;
shohin_id | shohin_mei
-----------+----------------
0006 | フォーク
0009 | 手袋
0005 | 圧力鍋
0007 | おろしがね
0008 | ボールペン
0002 | 穴あけパンチ
0001 | Tシャツ
0003 | カッターシャツ
0004 | 包丁
0010 | やかん
(10 rows)
集合演算の注意事項は演算対象となるレコードの列数は同じでないとエラーになる。
select shohin_id, shohin_mei
from shohin
union
select shohin_id, shohin_mei, hanbai_tanka
from shohin2;
ERROR: each UNION query must have the same number of columns
LINE 4: select shohin_id, shohin_mei, hanbai_tanka
足し算の対象となるレコードの列のデータ型が一致していること
select shohin_id, hanbai_tanka
from shohin
union
select shohin_id, torokubi
from shohin2;
ERROR: UNION types integer and date cannot be matched
LINE 4: select shohin_id, torokubi
SELECT文はどんなものを指定しても良いが、ORDER BY句は最後に一つだけ。
select shohin_id, shohin_mei
from shohin
where shohin_bunrui = 'キッチン用品'
union
select shohin_id,shohin_mei
from shohin2
where shohin_bunrui = 'キッチン用品'
order by shohin_id;
shohin_id | shohin_mei
-----------+------------
0004 | 包丁
0005 | 圧力鍋
0006 | フォーク
0007 | おろしがね
0010 | やかん
(5 rows)
ALLオプション
ALLをつけることで重複している行を表示させる
--allオプションなし
select shohin_id,shohin_mei
from shohin
union
select shohin_id, shohin_mei
from shohin2;
shohin_id | shohin_mei
-----------+-------------
0006 | フォーク
0009 | 手袋
0005 | 圧力鍋
0007 | おろしがね
0008 | ボールペン
0002 | 穴あけパンチ
0001 | Tシャツ
0003 | カッターシャツ
0004 | 包丁
0010 | やかん
(10 rows)
--allオプションあり
select shohin_id,shohin_mei
from shohin
union all
select shohin_id, shohin_mei
from shohin2;
shohin_id | shohin_mei
-----------+----------------
0001 | Tシャツ
0002 | 穴あけパンチ
0003 | カッターシャツ
0004 | 包丁
0005 | 圧力鍋
0006 | フォーク
0007 | おろしがね
0008 | ボールペン
0001 | Tシャツ
0002 | 穴あけパンチ
0003 | カッターシャツ
0009 | 手袋
0010 | やかん
(13 rows)
###INTERSECT
共通部分の選択ができる
select shohin_id, shohin_mei
from shohin
intersect
select shohin_id, shohin_mei
from shohin2
group by shohin_id;
shohin_id | shohin_mei
-----------+----------------
0002 | 穴あけパンチ
0001 | Tシャツ
0003 | カッターシャツ
(3 rows)
select shohin_id, shohin_mei
from shohin
except
select shohin_id, shohin_mei
from shohin2;
shohin_id | shohin_mei
-----------+------------
0006 | フォーク
0005 | 圧力鍋
0004 | 包丁
0007 | おろしがね
0008 | ボールペン
(5 rows)
上記の逆
select shohin_id, shohin_mei
from shohin2
except
select shohin_id, shohin_mei
from shohin;
shohin_id | shohin_mei
-----------+------------
0009 | 手袋
0010 | やかん
(2 rows)
##結合
結合はテーブルどうしを結合して列を増やすことができる。
結合は非常に多様。
代表は内部結合(INNER JOIN) と 外部結合(OUTER JOIN)
###INNER JOIN
ここでは商品テーブルと店舗テーブルのデータを用意する。
まずはそれぞれどんな値が入っているか確認する。
--商品テーブル
select * from shohin ;
shohin_id | shohin_mei | shohin_bunrui | hanbai_tanka | shiire_tanka | torokubi
-----------+----------------+---------------+--------------+--------------+------------
0001 | Tシャツ | 衣服 | 1000 | 500 | 2009-09-20
0002 | 穴あけパンチ | 事務用品 | 500 | 320 | 2009-09-11
0003 | カッターシャツ | 衣服 | 4000 | 2800 |
0004 | 包丁 | キッチン用品 | 3000 | 2800 | 2009-09-20
0005 | 圧力鍋 | キッチン用品 | 6800 | 5000 | 2009-01-15
0006 | フォーク | キッチン用品 | 500 | | 2009-09-20
0007 | おろしがね | キッチン用品 | 880 | 790 | 2008-04-28
0008 | ボールペン | 事務用品 | 100 | | 2009-11-11
(8 rows)
--店舗テーブル
select * from tenposhohin ;
tenpo_id | tenpo_mei | shohin_id | suryo
----------+-----------+-----------+-------
000A | 東京 | 0001 | 30
000A | 東京 | 0002 | 50
000A | 東京 | 0003 | 15
000B | 名古屋 | 0002 | 30
000B | 名古屋 | 0003 | 120
000B | 名古屋 | 0004 | 20
000B | 名古屋 | 0006 | 10
000B | 名古屋 | 0007 | 40
000C | 大阪 | 0003 | 20
000C | 大阪 | 0004 | 50
000C | 大阪 | 0006 | 90
000C | 大阪 | 0007 | 70
000D | 福岡 | 0001 | 100
(13 rows)
テーブル単体で見ると店舗テーブルからはどの商品があるのかわかりづらい。
また商品テーブルから見ると、どの商品がどこで扱われているかわかりにく。
なので、INNER JOINを使用してわかりやすくする。
select ts.*, s.*
from tenposhohin as ts inner join shohin as s
on ts.shohin_id = s.shohin_id;
tenpo_id | tenpo_mei | shohin_id | suryo | shohin_id | shohin_mei | shohin_bunrui | hanbai_tanka | shiire_tanka | torokubi
----------+-----------+-----------+-------+-----------+----------------+---------------+--------------+--------------+------------
000A | 東京 | 0001 | 30 | 0001 | Tシャツ | 衣服 | 1000 | 500 | 2009-09-20
000A | 東京 | 0002 | 50 | 0002 | 穴あけパンチ | 事務用品 | 500 | 320 | 2009-09-11
000A | 東京 | 0003 | 15 | 0003 | カッターシャツ | 衣服 | 4000 | 2800 |
000B | 名古屋 | 0002 | 30 | 0002 | 穴あけパンチ | 事務用品 | 500 | 320 | 2009-09-11
000B | 名古屋 | 0003 | 120 | 0003 | カッターシャツ | 衣服 | 4000 | 2800 |
000B | 名古屋 | 0004 | 20 | 0004 | 包丁 | キッチン用品 | 3000 | 2800 | 2009-09-20
000B | 名古屋 | 0006 | 10 | 0006 | フォーク | キッチン用品 | 500 | | 2009-09-20
000B | 名古屋 | 0007 | 40 | 0007 | おろしがね | キッチン用品 | 880 | 790 | 2008-04-28
000C | 大阪 | 0003 | 20 | 0003 | カッターシャツ | 衣服 | 4000 | 2800 |
000C | 大阪 | 0004 | 50 | 0004 | 包丁 | キッチン用品 | 3000 | 2800 | 2009-09-20
000C | 大阪 | 0006 | 90 | 0006 | フォーク | キッチン用品 | 500 | | 2009-09-20
000C | 大阪 | 0007 | 70 | 0007 | おろしがね | キッチン用品 | 880 | 790 | 2008-04-28
000D | 福岡 | 0001 | 100 | 0001 | Tシャツ | 衣服 | 1000 | 500 | 2009-09-20
(13 rows)
--as(テーブルの省略)を使わないで書く書き方
select tenposhohin.*,shohin.*
from tenposhohin inner join shohin on shohin.shohin_id = tenposhohin.shohin_id ;
tenpo_id | tenpo_mei | shohin_id | suryo | shohin_id | shohin_mei | shohin_bunrui | hanbai_tanka | shiire_tanka | torokubi
----------+-----------+-----------+-------+-----------+----------------+---------------+--------------+--------------+------------
000A | 東京 | 0001 | 30 | 0001 | Tシャツ | 衣服 | 1000 | 500 | 2009-09-20
000A | 東京 | 0002 | 50 | 0002 | 穴あけパンチ | 事務用品 | 500 | 320 | 2009-09-11
000A | 東京 | 0003 | 15 | 0003 | カッターシャツ | 衣服 | 4000 | 2800 |
000B | 名古屋 | 0002 | 30 | 0002 | 穴あけパンチ | 事務用品 | 500 | 320 | 2009-09-11
000B | 名古屋 | 0003 | 120 | 0003 | カッターシャツ | 衣服 | 4000 | 2800 |
000B | 名古屋 | 0004 | 20 | 0004 | 包丁 | キッチン用品 | 3000 | 2800 | 2009-09-20
000B | 名古屋 | 0006 | 10 | 0006 | フォーク | キッチン用品 | 500 | | 2009-09-20
000B | 名古屋 | 0007 | 40 | 0007 | おろしがね | キッチン用品 | 880 | 790 | 2008-04-28
000C | 大阪 | 0003 | 20 | 0003 | カッターシャツ | 衣服 | 4000 | 2800 |
000C | 大阪 | 0004 | 50 | 0004 | 包丁 | キッチン用品 | 3000 | 2800 | 2009-09-20
000C | 大阪 | 0006 | 90 | 0006 | フォーク | キッチン用品 | 500 | | 2009-09-20
000C | 大阪 | 0007 | 70 | 0007 | おろしがね | キッチン用品 | 880 | 790 | 2008-04-28
000D | 福岡 | 0001 | 100 | 0001 | Tシャツ | 衣服 | 1000 | 500 | 2009-09-20
(13 rows)
FORM区にtenposhohinとshohinを二つ書いている。
それを実現するのがINNER JOIN
WHERE区と組み合わせて絞り込むこともできる
例えば東京店だけ探したい場合は以下のようにかける
select tenposhohin.*,shohin.*
from tenposhohin
inner join shohin
on shohin.shohin_id = tenposhohin.shohin_id
where tenposhohin.tenpo_id = '000A';
tenpo_id | tenpo_mei | shohin_id | suryo | shohin_id | shohin_mei | shohin_bunrui | hanbai_tanka | shiire_tanka | torokubi
----------+-----------+-----------+-------+-----------+----------------+---------------+--------------+--------------+------------
000A | 東京 | 0001 | 30 | 0001 | Tシャツ | 衣服 | 1000 | 500 | 2009-09-20
000A | 東京 | 0002 | 50 | 0002 | 穴あけパンチ | 事務用品 | 500 | 320 | 2009-09-11
000A | 東京 | 0003 | 15 | 0003 | カッターシャツ | 衣服 | 4000 | 2800 |
(3 rows)
###外部結合 OUTER JOIN
外部結合と内部結合は2つのテーブルをON句でつなぎ、2つのテーブルから同時に列を選択する使い方は変わらない。
まずはOUTER JOINの挙動を確認する。
select tenposhohin.*,shohin.*
from tenposhohin
right outer join shohin
on shohin.shohin_id = tenposhohin.shohin_id ;
tenpo_id | tenpo_mei | shohin_id | suryo | shohin_id | shohin_mei | shohin_bunrui | hanbai_tanka | shiire_tanka | torokubi
----------+-----------+-----------+-------+-----------+----------------+---------------+--------------+--------------+------------
000A | 東京 | 0001 | 30 | 0001 | Tシャツ | 衣服 | 1000 | 500 | 2009-09-20
000A | 東京 | 0002 | 50 | 0002 | 穴あけパンチ | 事務用品 | 500 | 320 | 2009-09-11
000A | 東京 | 0003 | 15 | 0003 | カッターシャツ | 衣服 | 4000 | 2800 |
000B | 名古屋 | 0002 | 30 | 0002 | 穴あけパンチ | 事務用品 | 500 | 320 | 2009-09-11
000B | 名古屋 | 0003 | 120 | 0003 | カッターシャツ | 衣服 | 4000 | 2800 |
000B | 名古屋 | 0004 | 20 | 0004 | 包丁 | キッチン用品 | 3000 | 2800 | 2009-09-20
000B | 名古屋 | 0006 | 10 | 0006 | フォーク | キッチン用品 | 500 | | 2009-09-20
000B | 名古屋 | 0007 | 40 | 0007 | おろしがね | キッチン用品 | 880 | 790 | 2008-04-28
000C | 大阪 | 0003 | 20 | 0003 | カッターシャツ | 衣服 | 4000 | 2800 |
000C | 大阪 | 0004 | 50 | 0004 | 包丁 | キッチン用品 | 3000 | 2800 | 2009-09-20
000C | 大阪 | 0006 | 90 | 0006 | フォーク | キッチン用品 | 500 | | 2009-09-20
000C | 大阪 | 0007 | 70 | 0007 | おろしがね | キッチン用品 | 880 | 790 | 2008-04-28
000D | 福岡 | 0001 | 100 | 0001 | Tシャツ | 衣服 | 1000 | 500 | 2009-09-20
| | | | 0008 | ボールペン | 事務用品 | 100 | | 2009-11-11
| | | | 0005 | 圧力鍋 | キッチン用品 | 6800 | 5000 | 2009-01-15
(15 rows)
上記をよく見ると、店舗が紐づいてない商品も出力されている。
つまり指定した片方のテーブルが全て表示される。
なので、たとえば店舗が登録されてない商品を出力するのは以下のようにかける
select tenposhohin.*,shohin.*
from tenposhohin
right outer join shohin
on shohin.shohin_id = tenposhohin.shohin_id
where tenposhohin.tenpo_id is null ;
tenpo_id | tenpo_mei | shohin_id | suryo | shohin_id | shohin_mei | shohin_bunrui | hanbai_tanka | shiire_tanka | torokubi
----------+-----------+-----------+-------+-----------+------------+---------------+--------------+--------------+------------
| | | | 0008 | ボールペン | 事務用品 | 100 | | 2009-11-11
| | | | 0005 | 圧力鍋 | キッチン用品 | 6800 | 5000 | 2009-01-15
(2 rows)
また外部結合はマスタテーブルが全て出力される。
どちらのテーブルをマスタにするかでLEFTとRIGHTを使い分ける。
select tenposhohin.*,shohin.*
from tenposhohin
left outer join shohin --マスタテーブルが店舗商品
on shohin.shohin_id = tenposhohin.shohin_id;
tenpo_id | tenpo_mei | shohin_id | suryo | shohin_id | shohin_mei | shohin_bunrui | hanbai_tanka | shiire_tanka | torokubi
----------+-----------+-----------+-------+-----------+-----------+-------------+--------------+--------------+------------
000A | 東京 | 0001 | 30 | 0001 | Tシャツ | 衣服 | 1000 | 500 | 2009-09-20
000A | 東京 | 0002 | 50 | 0002 | 穴あけパンチ | 事務用品 | 500 | 320 | 2009-09-11
000A | 東京 | 0003 | 15 | 0003 | カッターシャツ | 衣服 | 4000 | 2800 |
000B | 名古屋 | 0002 | 30 | 0002 | 穴あけパンチ | 事務用品 | 500 | 320 | 2009-09-11
000B | 名古屋 | 0003 | 120 | 0003 | カッターシャツ | 衣服 | 4000 | 2800 |
000B | 名古屋 | 0004 | 20 | 0004 | 包丁 | キッチン用品 | 3000 | 2800 | 2009-09-20
000B | 名古屋 | 0006 | 10 | 0006 | フォーク | キッチン用品 | 500 | | 2009-09-20
000B | 名古屋 | 0007 | 40 | 0007 | おろしがね | キッチン用品 | 880 | 790 | 2009-04-28
000C | 大阪 | 0003 | 20 | 0003 | カッターシャツ | 衣服 | 4000 | 2800 |
000C | 大阪 | 0004 | 50 | 0004 | 包丁 | キッチン用品 | 3000 | 2800 | 2009-09-20
000C | 大阪 | 0006 | 90 | 0006 | フォーク | キッチン用品 | 500 | | 2009-09-20
000C | 大阪 | 0007 | 70 | 0007 | おろしがね | キッチン用品 | 880 | 790 | 2009-04-28
000D | 福岡 | 0001 | 100 | 0001 | Tシャツ | 衣服 | 1000 | 500 | 2009-09-20
(13 rows)
###3つのテーブルを内部結合してみる
まずは3つめのテーブルの準備
create table zaikoshohin
( souko_id char(4) not null,
shohin_id char(4) not null,
zaiko_suryo integer not null,
primary key (souko_id, shohin_id));
CREATE TABLE
begin transaction;
BEGIN
insert into zaikoshohin (souko_id, shohin_id, zaiko_suryo)
values('s001','0001',0),
('s001','0002',120),
('s001','0003',200),
('s001','0004',3),
('s001','0005',0),
('s001','0006',99),
('s001','0007',999),
('s001','0008',200),
('s002','0001',10),
('s002','0002',25),
('s002','0003',34),
('s002','0004',34),
('s002','0005',99),
('s002','0006',0),
('s002','0007',0),
('s002','0008',10);
INSERT 0 16
commit;
COMMIT
select * from zaikoshohin;
souko_id | shohin_id | zaiko_suryo
----------+-----------+-------------
s001 | 0001 | 0
s001 | 0002 | 120
s001 | 0003 | 200
s001 | 0004 | 3
s001 | 0005 | 0
s001 | 0006 | 99
s001 | 0007 | 999
s001 | 0008 | 200
s002 | 0001 | 10
s002 | 0002 | 25
s002 | 0003 | 34
s002 | 0004 | 34
s002 | 0005 | 99
s002 | 0006 | 0
s002 | 0007 | 0
s002 | 0008 | 10
(16 rows)
商品と店舗、在庫を全て内部結合すると以下のようになる
select ts.tenpo_id, ts.tenpo_mei, ts.shohin_id, s.shohin_mei,s.hanbai_tanka, zs.zaiko_suryo
from tenposhohin as ts inner join shohin as s
on ts.shohin_id = s.shohin_id
inner join zaikoshohin as zs
on s.shohin_id = zs.shohin_id
;
tenpo_id | tenpo_mei | shohin_id | shohin_mei | hanbai_tanka | zaiko_suryo
----------+-----------+-----------+----------------+--------------+-------------
000D | 福岡 | 0001 | Tシャツ | 1000 | 0
000A | 東京 | 0001 | Tシャツ | 1000 | 0
000B | 名古屋 | 0002 | 穴あけパンチ | 500 | 120
000A | 東京 | 0002 | 穴あけパンチ | 500 | 120
000C | 大阪 | 0003 | カッターシャツ | 4000 | 200
000B | 名古屋 | 0003 | カッターシャツ | 4000 | 200
000A | 東京 | 0003 | カッターシャツ | 4000 | 200
000C | 大阪 | 0004 | 包丁 | 3000 | 3
000B | 名古屋 | 0004 | 包丁 | 3000 | 3
000C | 大阪 | 0006 | フォーク | 500 | 99
000B | 名古屋 | 0006 | フォーク | 500 | 99
000C | 大阪 | 0007 | おろしがね | 880 | 999
000B | 名古屋 | 0007 | おろしがね | 880 | 999
000D | 福岡 | 0001 | Tシャツ | 1000 | 10
000A | 東京 | 0001 | Tシャツ | 1000 | 10
000B | 名古屋 | 0002 | 穴あけパンチ | 500 | 25
000A | 東京 | 0002 | 穴あけパンチ | 500 | 25
000C | 大阪 | 0003 | カッターシャツ | 4000 | 34
000B | 名古屋 | 0003 | カッターシャツ | 4000 | 34
000A | 東京 | 0003 | カッターシャツ | 4000 | 34
000C | 大阪 | 0004 | 包丁 | 3000 | 34
000B | 名古屋 | 0004 | 包丁 | 3000 | 34
000C | 大阪 | 0006 | フォーク | 500 | 0
000B | 名古屋 | 0006 | フォーク | 500 | 0
000C | 大阪 | 0007 | おろしがね | 880 | 0
000B | 名古屋 | 0007 | おろしがね | 880 | 0
(26 rows)
###クロス結合(直積) CROSS JOIN
これは実務ではほとんど使わない
クロス結合は2つのテーブルのレコードについて、すべての組み合わせを作る結合方法。
行数は常に、2つのテーブル行数の掛け算になる。
商品テーブルは8行、店舗テーブルは13行なので、クロス結合すると104行になる。
select ts.tenpo_id, ts.tenpo_mei, ts.shohin_id, s.shohin_mei
from tenposhohin as ts cross join shohin as s;
tenpo_id | tenpo_mei | shohin_id | shohin_mei
----------+-----------+-----------+----------------
000A | 東京 | 0001 | Tシャツ
000A | 東京 | 0002 | Tシャツ
000A | 東京 | 0003 | Tシャツ
000B | 名古屋 | 0002 | Tシャツ
000B | 名古屋 | 0003 | Tシャツ
000B | 名古屋 | 0004 | Tシャツ
000B | 名古屋 | 0006 | Tシャツ
000B | 名古屋 | 0007 | Tシャツ
000C | 大阪 | 0003 | Tシャツ
000C | 大阪 | 0004 | Tシャツ
000C | 大阪 | 0006 | Tシャツ
000C | 大阪 | 0007 | Tシャツ
000D | 福岡 | 0001 | Tシャツ
000A | 東京 | 0001 | 穴あけパンチ
000A | 東京 | 0002 | 穴あけパンチ
000A | 東京 | 0003 | 穴あけパンチ
000B | 名古屋 | 0002 | 穴あけパンチ
000B | 名古屋 | 0003 | 穴あけパンチ
000B | 名古屋 | 0004 | 穴あけパンチ
000B | 名古屋 | 0006 | 穴あけパンチ
000B | 名古屋 | 0007 | 穴あけパンチ
000C | 大阪 | 0003 | 穴あけパンチ
000C | 大阪 | 0004 | 穴あけパンチ
000C | 大阪 | 0006 | 穴あけパンチ
000C | 大阪 | 0007 | 穴あけパンチ
000D | 福岡 | 0001 | 穴あけパンチ
000A | 東京 | 0001 | カッターシャツ
000A | 東京 | 0002 | カッターシャツ
000A | 東京 | 0003 | カッターシャツ
000B | 名古屋 | 0002 | カッターシャツ
000B | 名古屋 | 0003 | カッターシャツ
000B | 名古屋 | 0004 | カッターシャツ
000B | 名古屋 | 0006 | カッターシャツ
000B | 名古屋 | 0007 | カッターシャツ
000C | 大阪 | 0003 | カッターシャツ
000C | 大阪 | 0004 | カッターシャツ
000C | 大阪 | 0006 | カッターシャツ
000C | 大阪 | 0007 | カッターシャツ
000D | 福岡 | 0001 | カッターシャツ
000A | 東京 | 0001 | 包丁
000A | 東京 | 0002 | 包丁
000A | 東京 | 0003 | 包丁
000B | 名古屋 | 0002 | 包丁
000B | 名古屋 | 0003 | 包丁
000B | 名古屋 | 0004 | 包丁
000B | 名古屋 | 0006 | 包丁
000B | 名古屋 | 0007 | 包丁
000C | 大阪 | 0003 | 包丁
000C | 大阪 | 0004 | 包丁
000C | 大阪 | 0006 | 包丁
000C | 大阪 | 0007 | 包丁
000D | 福岡 | 0001 | 包丁
000A | 東京 | 0001 | 圧力鍋
000A | 東京 | 0002 | 圧力鍋
000A | 東京 | 0003 | 圧力鍋
000B | 名古屋 | 0002 | 圧力鍋
000B | 名古屋 | 0003 | 圧力鍋
000B | 名古屋 | 0004 | 圧力鍋
000B | 名古屋 | 0006 | 圧力鍋
000B | 名古屋 | 0007 | 圧力鍋
000C | 大阪 | 0003 | 圧力鍋
000C | 大阪 | 0004 | 圧力鍋
000C | 大阪 | 0006 | 圧力鍋
000C | 大阪 | 0007 | 圧力鍋
000D | 福岡 | 0001 | 圧力鍋
000A | 東京 | 0001 | フォーク
000A | 東京 | 0002 | フォーク
000A | 東京 | 0003 | フォーク
000B | 名古屋 | 0002 | フォーク
000B | 名古屋 | 0003 | フォーク
000B | 名古屋 | 0004 | フォーク
000B | 名古屋 | 0006 | フォーク
000B | 名古屋 | 0007 | フォーク
000C | 大阪 | 0003 | フォーク
000C | 大阪 | 0004 | フォーク
000C | 大阪 | 0006 | フォーク
000C | 大阪 | 0007 | フォーク
000D | 福岡 | 0001 | フォーク
000A | 東京 | 0001 | おろしがね
000A | 東京 | 0002 | おろしがね
000A | 東京 | 0003 | おろしがね
000B | 名古屋 | 0002 | おろしがね
000B | 名古屋 | 0003 | おろしがね
000B | 名古屋 | 0004 | おろしがね
000B | 名古屋 | 0006 | おろしがね
000B | 名古屋 | 0007 | おろしがね
000C | 大阪 | 0003 | おろしがね
000C | 大阪 | 0004 | おろしがね
000C | 大阪 | 0006 | おろしがね
000C | 大阪 | 0007 | おろしがね
000D | 福岡 | 0001 | おろしがね
000A | 東京 | 0001 | ボールペン
000A | 東京 | 0002 | ボールペン
000A | 東京 | 0003 | ボールペン
000B | 名古屋 | 0002 | ボールペン
000B | 名古屋 | 0003 | ボールペン
000B | 名古屋 | 0004 | ボールペン
000B | 名古屋 | 0006 | ボールペン
000B | 名古屋 | 0007 | ボールペン
000C | 大阪 | 0003 | ボールペン
000C | 大阪 | 0004 | ボールペン
000C | 大阪 | 0006 | ボールペン
000C | 大阪 | 0007 | ボールペン
000D | 福岡 | 0001 | ボールペン
(104 rows)