【PostgreSQL】CROSS JOINを試してみた

PostgreSQL

環境

CentOS7
PostgreSQL 11.18

試してみた

まずはそれぞれのテーブルにあるデータを確認しておこうっと。

-- products
postgres=# select * from products;
  name  | price |     etc      
--------+-------+--------------
 りんご |   150 | 青森産
 メロン |  3000 | 北海道産
 ぶどう |   300 | 
 みかん |    80 | 
 梨     |   300 | 
 バナナ |   250 | フィリピン産
(6 行)

-- orders
postgres=# select * from orders;
  name  |  farm_name   | arrival_date | order_num 
--------+--------------+--------------+-----------
 りんご | 津軽ファーム | 2012-07-31   |        26
 みかん | みかん園     | 2012-07-31   |        16
 みかん | 紀州果樹園   | 2012-07-31   |        12
 ぶどう | 津軽ファーム | 2012-07-31   |         8
 梨     | 梨園         | 2012-07-31   |        14
 メロン | メロン農園   | 2012-07-31   |        13
(6 行)

それぞれ6行ずつデータが入っていた。
まずはfrom句での交差結合だ。

postgres=# select * from products, orders;
  name  | price |     etc      |  name  |  farm_name   | arrival_date | order_num 
--------+-------+--------------+--------+--------------+--------------+-----------
 りんご |   150 | 青森産       | りんご | 津軽ファーム | 2012-07-31   |        26
 りんご |   150 | 青森産       | みかん | みかん園     | 2012-07-31   |        16
 りんご |   150 | 青森産       | みかん | 紀州果樹園   | 2012-07-31   |        12
(中略)
 バナナ |   250 | フィリピン産 | ぶどう | 津軽ファーム | 2012-07-31   |         8
 バナナ |   250 | フィリピン産 | 梨     | 梨園         | 2012-07-31   |        14
 バナナ |   250 | フィリピン産 | メロン | メロン農園   | 2012-07-31   |        13
(36 行)

productsのりんごに対して、ordersのりんご、みかん、みかん、ぶどう〜と結合していくのか。
CROSS JOINを使っても同じように取得できるぞ。

postgres=# select * from products cross join orders;
  name  | price |     etc      |  name  |  farm_name   | arrival_date | order_num 
--------+-------+--------------+--------+--------------+--------------+-----------
 りんご |   150 | 青森産       | りんご | 津軽ファーム | 2012-07-31   |        26
 りんご |   150 | 青森産       | みかん | みかん園     | 2012-07-31   |        16
(中略)
 バナナ |   250 | フィリピン産 | ぶどう | 津軽ファーム | 2012-07-31   |         8
 バナナ |   250 | フィリピン産 | 梨     | 梨園         | 2012-07-31   |        14
 バナナ |   250 | フィリピン産 | メロン | メロン農園   | 2012-07-31   |        13
(36 行)

外部結合よりも正直シンプルだからわかりやすいね。
ただ、使い所はいまいち思いつかない。

参考

第6回 SQL基礎II|OSS-DB入門|OSS-DB道場|受験対策|DBスペシャリストを認定する資格 OSS-DB技術者認定試験
「OSS-DB技術者認定資格」は、Postgresqlをはじめとするオープンソースデータベースのスペシャリストを認定する資格です。DBスペシャリストの認定を受けたい方や、SQLやデータベースのしくみを学びたいにもおすすめです。

コメント

タイトルとURLをコピーしました