LoginSignup
0
0

More than 1 year has passed since last update.

SQL SELECT文

Posted at

以前SQL コマンド 備忘録でSQLについて軽く投稿しました。
今回はSELECT文について少し掘り下げます。

用意したデータ1(Shohin Table)

商品ID(shohin_id) 商品名(shohin_mei) 商品分類(shohin_bunrui) 販売単価(hanbai_tanka) 仕入れ単価(shiire_tanka) 登録日(torokubi)
0001 トレーナー 衣類 2000 1000 2021-01-20
0002 シャーペン 文房具 200 100 2021-03-20
0003 Yシャツ 衣類 1500 800 2021-03-23
0004 眼鏡 装飾品 5000 2500 2021-05-04
0005 ボールペン 文房具 500 250 2021-05-06
0006 マグカップ 食器 1500 700 2021-04-05
0007 お皿 食器 400 250 2021-07-31
0008 マーカーペン 文房具 150 100 2021-05-28
0009 ネックレス 装飾品 8000 6000 2021-06-20

用意したデータ2(TenpoShohin Table)

店舗ID(tenpo_id) 店舗名(tenpo_mei) 商品ID(shohin_id) 数量(suryo)
000A 東京 0001 20
000A 東京 0002 15
000B 名古屋 0003 60
000B 名古屋 0006 50
000B 名古屋 0009 90
000C 大阪 0002 100
000C 大阪 0005 40
000C 大阪 0007 30
000D 福岡 0004 80
000D 福岡 0008 120
基本例
SELECT 列名[表示用列名] FROM テーブル名; --テーブルから列を抜き出す。表示用の列名は省略可能
SELECT * FROM テーブル名; --テーブルから全て選んで表示する

--Shohinテーブルから商品ID、商品名、仕入れ単価を出力
SELECT shohin_id, shohin_mei, shiire_tanka FROM Shohin;

--実行結果
shohin_id|shohin_mei|shiire_tanka
---------+----------+------------
0001     |トレーナー   |        1000
0002     |シャーペン   |         100
0003     |Yシャツ     |         800
0004     |眼鏡       |        2500
0005     |ボールペン  |         250
0006     |マグカップ   |         700
0007     |お皿       |         250
0008     |マーカーペン |         100
0009     |ネックレス   |        6000
条件指定
SELECT 列名 FROM テーブル名 WHERE 条件式;

--Shohinテーブルから条件「商品分類が文房具のものだけを出力」
SELECT shohin_mei, shohin_bunrui FROM Shohin WHERE shohin_bunrui = '文房具';

--実行結果
shohin_mei|shohin_bunrui
----------+------------
シャーペン   |文房具
ボールペン  |文房具
マーカーペン |文房具
重複を排除
SELECT DISTINCT 列名 FROM テーブル名;

--Shohinテーブルからshohin_bunrui列の重複を排除して出力

shohin_bunrui
-------------
衣類
文房具
装飾品
食器

ここまでは基本的なSELECT文の使い方ですが、2つの(複数の)テーブルからデータを取得したい場合もあります。

結合

結合とは別のテーブルから列を持ってきて「列を増やす」操作です。
この操作が役立つのは欲しいデータ(列)が1つのテーブルだけからでは選択できない場合。
データ1「Shohin」とデータ2「TenpoShohin」を結合してみたいと思います。

内部結合(INNER JOIN)

TenpoShohinからは東京店(000A)が商品ID「0001」「0002」を取り扱っていることがわかるが、これらの商品名や販売単価はTenpoShohinテーブルからはわからない。これらはShohinテーブルにしか存在していない列です。
ここでShohinテーブルから商品名(shohin_mei)、販売単価(hanbai_tanka)の列をTenpoShohinにくっつけてみます。

2つのテーブルを内部結合する
SELECT TS.tenpo.id, TS.tenpo_mei, TS.shohin_mei, S.shohin_mei, S.hanbai_tanka 
FROM TenpoShohin AS TS INNER JOIN Shohin AS S
ON TS.shohin_id = S.shohin_id;

--実行結果
tenpo_id|tenpo_mei|shohin_id|shohin_mei|hanbai_tanka
000A    |東京      |0001     |トレーナー   |        2000
000A    |東京      |0002     |シャーペン   |        200
000B    |名古屋    |0003     |Yシャツ     |        1500
000B    |名古屋    |0006     |マグカップ   |        1500
000B    |名古屋    |0009     |ネックレス   |        8000
000C    |大阪       |0002     |シャーペン   |         200
000C    |大阪       |0005     |ボールペン  |         500
000C    |大阪       |0007     |お皿       |         400
000D    |福岡       |0004     |眼鏡       |        2500
000D    |福岡       |0008     |マーカーペン |         150

FROM句

FROM TenpoShohin AS TS INNER JOIN Shohin AS S

結合を行うときはFROM句に複数のテーブルを記述する。
TS,Sはテーブルの別名です。オリジナルのテーブル名のままでも使えるが、テーブル名が長くなるとSQL文が読みにくくなるため、別名をつけることが一般的です。

ON句

ON TS.shohin_id = S.shohin_id

2つのテーブルを結びつける列(結合キー)を指定する。
今回の例でいうと商品ID(shohin_id)。
内部結合を行う場合は記述が必須(ないとエラーになる)。

SELECT句

SELECT TS.tenpo.id, TS.tenpo_mei, TS.shohin_mei, S.shohin_mei, S.hanbai_tanka 

結合をつかった場合のSELECT句は全て<テーブルの別名>.<列名>の書式で書く。

参考文献

SQL ゼロからはじめるデータベース操作 著/ミック

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0