0
1

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 3 years have passed since last update.

【SQL】サブクエリの使い方(where、不等号)自分用

Last updated at Posted at 2020-05-01

題材はプロゲートを参考にしました。

例題
平均得点数より得点数が多い選手名を調べたい。

テーブルは以下の通り。

id name goals height
〜レコードは各種省略〜 〜レコードは各種省略〜 〜レコードは各種省略〜 〜レコードは各種省略〜

上記のようなテーブルがあった際、例題通りのデータを取り出したい場合、

SELECT 選手、得点数
FROM playerテーブル
where 得点数が > (
select 平均得点 from playerテーブル
);

日本語を散りばめると以下のようになります。そして、

SELECT カラム名
FROM テーブル名
where カラム名 > (
select カラム名 from テーブル名
);

こうなります。最終的には、

SELECT name,goals
FROM players
where goals > (
select avg(goals) from players 
);

こうなります。

###例題
グレーパーカーより値段が高い商品の名前と値段を取得する。

テーブルは以下の通り。

Left align Right align Center align
This This This
column column column
will will will
be be be
left right center
aligned aligned aligned
select name, price
from items
where price > (
select price from items
where name = "グレーパーカー"
);

###例題

7000円以下の商品で、グレーパーカーより利益が高い商品

####考え方
・7000円以下の商品かつ、利益が高い商品をまずselect文で取得。
・サブクエリ内で名前がグレーパーカーである利益を取得する。

SELECT name, price - cost            
FROM items            
WHERE price <= 7000 AND price - cost > (            
SELECT price - cost            
FROM items            
WHERE name = "グレーパーカー"            
);

###例題

平均以上の所持金を持っている人を取得する。

テーブルは以下の通り。

userID name gold
-- 平均以上の所持金を持つユーザー数を表示する
SELECT userID, name, gold
FROM users
where gold >= (
select avg(gold) from users
);

##ポイント
where の後のカラム名とサブクエリ内のselectの後のカラムは同じ。平均とか合計とかは使える。

##注意

・サブクエリ内のテーブル名を忘れがちなので忘れないように指定する。

・日本語に置き換えて、SQL文にしてあげるのが理解しやすいと思います。
SQL文は英語と文法が似ているので英語を読むイメージで学習するようにしましょう。

0
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?