この単元では、テーブル結合時の抽出条件の結合前条件と結合後条件の違いを学びます。また、最後には今まで学んできた構文の記述順番を記載しています。
単元概要
重要なポイント
結合する「前」と「後」に条件を記述する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];
<例題>
- 学生マスタ(students_mst)と学科マスタ(departments_mst)を結合しデータを取得すること。
- カラム
- 学生ID(student_id)
- 学生名(student_name)
- 学生マスタの学科ID(department_id)
- 学科名(department_name)
- 結合条件
- 学生マスタの学科ID(department_id)と学科マスタの学科ID(department_id)
- かつ学生マスタの削除区分(delete_ku)が〈0〉
- かつ学科マスタの削除区分(delete_ku)が〈0〉
- 抽出条件なし
select
sm.student_id
,sm.student_name
,sm.department_id
,gm.department_name
from students_mst sm
inner join departments_mst gm
on sm.department_id = gm.department_id
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];
<例題>
- 学生マスタ(students_mst)と学科マスタ(departments_mst)を結合しデータを取得すること。
- カラム
- 学生ID(student_id)
- 学生名(student_name)
- 学生マスタの学科ID(department_id)
- 学科名(department_name)
- 結合条件
- 学生マスタの学科ID(department_id)と学科マスタの学科ID(department_id)
- 抽出条件
- 学生マスタの削除区分(delete_ku)が〈0〉
- かつ学科マスタの削除区分(delete_ku)が〈0〉
select
sm.student_id
,sm.student_name
,sm.department_id
,gm.department_name
from students_mst sm
inner join departments_mst gm
on sm.department_name = gm.department_name
where sm.delete_ku = '0'
and gm.delete_ku = '0';
構文の記述順を覚えておこう
<例題>
- 学生マスタ(students_mst)と学科マスタ(departments_mst)を内部結合しデータを取得すること。
- カラム
- 学生マスタの学科ID(department_id)
- 学科名(department_name)
- 学科ごとの平均年齢
- 結合条件
- 学生マスタの学科ID(department_id)と学科マスタの学科ID(department_id)
- 学生マスタの削除区分(delete_ku)が〈0〉
- かつ学科マスタの削除区分(delete_ku)が〈0〉
- 抽出条件
- 学生マスタの学科ID(department_id)が〈1〉以上
- かつ学生マスタの学科ID(department_id)が〈11〉未満
- 集計単位
- 学生マスタの学科ID(department_id)
- 学科名(department_name)
- 集計後条件
- 学科ごとの平均年齢が50歳より大きい
- 学科ごとの平均年齢が80歳以下
- 並び順
- 学科ごとの平均年齢を昇順
- 学生マスタの学科ID(department_id)を降順
select
sm.department_id
,gm.department_name
,avg(sm.age_nb)
from students_mst sm
inner join departments_mst gm
on sm.department_id = gm.department_id
and sm.delete_ku = '0'
and gm.delete_ku = '0'
where sm.department_id >= 1
and gm.department_id < 11
group by sm.department_id
,gm.department_mane
having avg(sm.age_nb) > 50
and avg(sm.age_nb) <= 80
order by avg(sm.age_nb) asc
,sm.department_id desc;