MySQL(その12 inner join,記述順序と実行順序)

その11から続きます。

1:内部結合(inner join)

例:ユーザー一覧を取得したい!都道府県IDで出力されてもよくわからないので都道府県名も表示したい!

select
 users.id,
 users.last_name,
 users.first_name,
 prefectures.name
from users
inner join
prefectures
on users.prefecture_id = prefectures.id;

※ポイント

まず名字と名前と県IDを取得
select id, last_name, first_name, prefecture_id from users;
次にprefecture_id都道府県名(prefectures.nane)を結びつける(inner join on)

短く書くこともできる

select
 u.id,
 u.last_name,u.first_name, p.name
from
 users as u
inner join
 prefectures as p
 on u.prefecture_id = p.id;

さらに短く書くこともできる(asを省略)

select
 u.id,
 u.last_name,u.first_name, p.name
from
 users u
inner join
 prefectures p 
on u.prefecture_id = p.id;

さらにさらに短くもできる。(innerを省略)

select
 u.id,
 u.last_name,u.first_name, p.name
from
users u
 join
prefectures p
on u.prefecture_id = p.id;

このように変わらず出力される

内部結合+絞り込み

応用

1:顧客一覧を取得したい
2:都道府県 id で出力されてもよくわからないので 都道府県名も表示したい
3:必要な列はユーザー ID、苗字、名前、都道府県名,更に女性だけのデータもほしい

1:select * from users;

2:select * from
 users as u
 inner join
 prefectures as p
on u.prefecture_id = p.id;

3:select
 u.id, u.last_name, u.first_name, p.name
from users as u
inner join
 prefectures as p
 on u.prefecture_id = p.id
where u.gender = 2;

応用:2017年1月の東京都に住むユーザーの注文情報一覧を出したい!
取得する列は注文id,注文日時,注文金額合計,ユーザー id,苗字,名前
(東京都prefecture_id=13)

select
u.id,
u.last_name,
u.first_name,
o.id,
o.order_time,
o.amount
from orders as o
inner join
users as u
on o.user_id = u.id
where
u.prefecture_id = 13
and
o.order_time>='2017-01-01 00:00:00'
and o.order_time < '2017-02-01 00:00:00'
order by o.id;

記述順序と実行順序

記述順序(順序が違うとエラー)

実行順序

その12に続きます

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です