この単元では、テーブル結合時の抽出条件の結合前条件と結合後条件の違いを学びます。また、最後には今まで学んできた構文の記述順番を記載しています。
単元概要
重要なポイント
結合する「前」と「後」に条件を記述する2パターンがある!
構文
結合条件「on」の後
テーブル結合する際に実行される条件となります。「on」後に条件を設定します。
select
[別名A].[カラム名1]
,[別名B].[カラム名2]
from [テーブル名A] [別名A]
inner join [テーブル名B] [別名B]
on [別名A].[結合カラム名A] = [別名B].[結合カラム名B]
and [別名A].[結合カラム名A] = [条件1]
and [別名B].[結合カラム名B] = [条件2];
<例題>
- 学生マスタ(student_mst)と学科マスタ(gakka_mst)を結合しデータを取得すること。
- カラム
- 学生NO(student_no)
- 学生名(student_kj)
- 学生マスタの学科NO(gakka_no)
- 学科名(gakka_kj)
- 結合条件
- 学生マスタの学科NO(gakka_no)と学科マスタの学科NO(gakka_no)
- かつ学生マスタの削除区分(delete_ku)が〈0〉
- かつ学科マスタの削除区分(delete_ku)が〈0〉
- 抽出条件なし
select
sm.student_no
,sm.student_kj
,sm.gakka_no
,gm.gakka_kj
from student_mst sm
inner join gakka_mst gm
on sm.gakka_no = gm.gakka_no
and sm.delete_ku = '0'
and gm.delete_ku = '0';
抽出条件「where」を使用
テーブル結合した後に実行される条件となります。
select
[別名A].[カラム名1]
,[別名B].[カラム名2]
from [テーブル名A] [別名A]
inner join [テーブル名B] [別名B]
on [別名A].[結合カラム名A] = [別名B].[結合カラム名B]
where [別名A].[結合カラム名A] = [条件1]
and [別名B].[結合カラム名B] = [条件2];
<例題>
- 学生マスタ(student_mst)と学科マスタ(gakka_mst)を結合しデータを取得すること。
- カラム
- 学生NO(student_no)
- 学生名(student_kj)
- 学生マスタの学科NO(gakka_no)
- 学科名(gakka_kj)
- 結合条件
- 学生マスタの学科NO(gakka_no)と学科マスタの学科NO(gakka_no)
- 抽出条件
- 学生マスタの削除区分(delete_ku)が〈0〉
- かつ学科マスタの削除区分(delete_ku)が〈0〉
select
sm.student_no
,sm.student_kj
,sm.gakka_no
,gm.gakka_kj
from student_mst sm
inner join gakka_mst gm
on sm.gakka_no = gm.gakka_no
where sm.delete_ku = '0'
and gm.delete_ku = '0';
構文の記述順を覚えておこう
<例題>
- 学生マスタ(student_mst)と学科マスタ(gakka_mst)を内部結合しデータを取得すること。
- カラム
- 学生マスタの学科NO(gakka_no)
- 学科名(gakka_kj)
- 学科ごとの平均年齢
- 結合条件
- 学生マスタの学科NO(gakka_no)と学科マスタの学科NO(gakka_no)
- 学生マスタの削除区分(delete_ku)が〈0〉
- かつ学科マスタの削除区分(delete_ku)が〈0〉
- 抽出条件
- 学生マスタの学科NO(gakka_no)が〈1〉以上
- かつ学生マスタの学科NO(gakka_no)が〈11〉未満
- 集計単位
- 学生マスタの学科NO(gakka_no)
- 学科名(gakka_kj)
- 集計後条件
- 学科ごとの平均年齢が50歳より大きい
- 学科ごとの平均年齢が80歳以下
- 並び順
- 学科ごとの平均年齢を昇順
- 学生マスタの学科NO(gakka_no)を降順
select
sm.gakka_no
,gm.gakka_kj
,avg(sm.age_nb)
from student_mst sm
inner join gakka_mst gm
on sm.gakka_no = gm.gakka_no
and sm.delete_ku = '0'
and gm.delete_ku = '0'
where sm.gakka_no >= 1
and gm.gakka_no < 11
group by sm.gakka_no
,gm.gakka_kj
having avg(sm.age_nb) > 50
and avg(sm.age_nb) <= 80
order by avg(sm.age_nb) asc
,sm.gakka_no desc;