0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【SQL】SELECT文 あれこれ part2

0
Posted at

SQLの条件検索メモ

※今回もメモ用 
※修正あれば都度UPD

さて、今回は前回の記事:SQL SELECT分あれこれで書いた 別Verをメモとして記載。

テーブルは以下2つ存在している中で、どんな風にデータ抽出できるかを記述してきます。

部活テーブル

id 部活名 部費
1 茶道部 100
2 剣道部 200
3 柔道部 300

部員テーブル

id 部員名 部活id
1 あいうえお 1
2 かきくけこ 2
3 さしすせそ 3
4 たちつてと 1
5 なにぬねの NULL

①部費(feeカラム)が高い順に部活テーブルを並べ替え、上位3位までのレコードを取得する(取得カラム:全て)

SELECT * FROM `部活テーブル` ORDER BY fee DESC LIMIT 3

表示はこの通り

id 部活名 部費
3 柔道部 300
2 剣道部 200
1 茶道部 100

②部員テーブルの「部活id」カラムは、所属している部活のid(部活テーブルのid)を表しています。
このカラムをキーにして部員テーブルと部活テーブルを「内部結合」し、誰がどの部活に入っているかを取得する(取得カラム:部員テーブルのname、部活テーブルのname)

SELECT 部員テーブル.部員名, 部活テーブル.部活名 FROM `部員テーブル` INNER JOIN 部活テーブル ON 部員テーブル.部活id = 部活テーブル.id

表示はこの通り

部員名 部活名
あいうえお 茶道部
かきくけこ 剣道部
さしすせそ 柔道部
たちつてと 茶道部

③②のSQLを結合方法を変えて、部員テーブルの「部活テーブルid」カラムが「NULL」の人も含めて取得する(取得カラム:部員テーブルの名前、部活テーブルの名前)

SELECT 部員テーブル.部員名, 部活テーブル.部活名 FROM `部員テーブル` LEFT OUTER JOIN 部活テーブル ON 部員テーブル.部活id = 部活テーブル.id

表示はこの通り

部員名 部活名
あいうえお 茶道部
かきくけこ 剣道部
さしすせそ 柔道部
たちつてと 茶道部
なにぬねの NULL

④部員テーブルの部活idを重複なく取得する。※NULLは除いてください(取得カラム:部員テーブルの部活id)

SELECT DISTINCT 部員テーブルの部活id FROM `部員テーブル` WHERE 部員テーブルの部活id is not null
id
3
2
1
※例が少ないからわかりにくいか。 

⑤④の派生。「not in」を使って、誰も所属していない部活の部活名を取得する(取得カラム:部活テーブルのname)

SELECT DISTINCT 部活テーブル.部活名 FROM 部活テーブル WHERE 部活テーブル.id not in (SELECT DISTINCT 部員テーブル.部活id FROM 部員テーブル WHERE 部員テーブル.部活id IS NOT NULL)

部活名

※今回は該当するものがなかったため、表示はされない。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?