単元概要

この単元では、テーブル結合時の抽出条件の結合条件と結合条件の違いを学びます。また、最後には今まで学んできた構文の記述順番を記載しています。

重要なポイント

結合する「前」「後」に条件を記述する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;