スポンサーリンク

060-SQL

SQLの基本はここから「選択と射影と結合」select文!

SQL 結合

それでは、SQL基本の最後の結合です。

結合とは、複数のテーブル(表)から組み合わせてデータを抽出することです。

仮に、「kojin_table」と「zei_table」があったとしましょう。

「zei_table」は、次の様な表です。

kojin_no zeimoku  zeigaku tourokubi
1000000001 jyuuminzei 10000 1900/1/1
1000000001 kokuhozei 15000 1900/1/1
1000000001 jidousyazei 34500 1900/1/1
1000000001 koteisisanzei 35000 1900/1/1
1000000002 jyuuminzei 20000 1900/1/1
1000000002 kokuhozei 25000 1900/1/1
1000000002 jidousyazei 45000 1900/1/1
1000000002 koteisisanzei 23000 1900/1/1
1000000003 jyuuminzei 80000 1900/1/1
1000000003 kokuhozei 30000 1900/1/1
1000000003 jidousyazei 29500 1900/1/1
1000000003 koteisisanzei 50000 1900/1/1
1000000006 jyuuminzei 18000 1900/1/1
1000000006 kokuhozei 29500 1900/1/1
1000000006 jidousyazei 25000 1900/1/1
1000000006 koteisisanzei 29000 1900/1/1

例えば、「kojin_table」の「日本太郎」さんの課税されている税目を全て抽出したいとしましょう。

SQL文は、

select
 *
from
 kojin_table koj,
 zei_table zei
where
 koj.kojin_no = zei.kojin_no
 and koj.kojin_no = ‘1000000006’
;

※表記上「全角」を使っている場合がありますが、実際の記載は、全て「半角英数」になりますので、注意してください。

となります。

「*」は、2つのテーブル(表)の全てのカラム(列)を抽出することとなります。

複数のテーブル(表)を選択する場合は、最後のテーブル(表)を除き、テーブル(表)の後ろに、「,」コロンを付ける必要があります。

また、テーブル(表)名の後に、短縮名を付けることにより、カラム(列)名を指定する際に、記述を短縮できます。
例:「kojn_table.kojin_no」=「koj.kojin_no」

「koj.kojin_no = zei.kojin_no」は、「kojin_table」と「zei_table」のうち「kojin_no」が合致しているもののみ抽出する意味です。

「koj.kojin_no = ‘1000000006’」は、「kojin_no」から「1000000006」の行を抽出することとなります。

スポンサーリンク

2つのテーブルには、共通するカラム(データ)が必要

一つ大切なことは、「kojin_table koj」と「zei_table zei」のどちらにも、個人を特定できる「kojin_no」というカラム(列)があることです。
それぞれ、「主キー」と「外部キー」と言いますが、各テーブルに紐づける事ができるカラム(列)があることが重要となります。

これが無いと、複数のテーブルを結合することはできませんので、必ず紐づけできる列(カラム)があるかどうか確認しましょう。

kojin_no kanji_name kana_name jyuusyo seibetsu seinengappi tourokubi kojin_no zeimoku zeigaku tourokubi
1000000006 日 太郎 ニホン タロウ トウキョウ 1905/1/1 1900/1/1 1000000006 jyuumnzei 28000 1900/1/1
1000000006 日 太郎 ニホン タロウ トウキョウ 1905/1/1 1900/1/1 1000000006 kokuhozei 30000 1900/1/1
1000000006 日 太郎 ニホン タロウ トウキョウ 1905/1/1 1900/1/1 1000000006 jidousyazei 39500 1900/1/1
1000000006 日 太郎 ニホン タロウ トウキョウ 1905/1/1 1900/1/1 1000000006 koteisisanzei 42000 1900/1/1

カラム(列)名を指定して抽出する場合のSQL分は、次のとおりです。

select
 koj.kojin_no,
 koj.kanji_name,
 zei.zeimoku,
 zei.zeigaku
from
 kojin_table koj,
 zei_table zei
where
 koj.kojin_no = zei.kojin_no
 and koj.kojin_no = ‘1000000006’
;

※表記上「全角」を使っている場合がありますが、実際の記載は、全て「半角英数」になりますので、注意してください。

2つのテーブル(表)から指定された条件で、行とカラム(列)が抽出されます。

kojin_no kanji_name zeimoku zeigaku
1000000006 日 太郎 jyuumnzei 28000
1000000006 日 太郎 kokuhozei 30000
1000000006 日 太郎 jidousyazei 39500
1000000006 日 太郎 koteisisanzei 42000
ブログランキング・にほんブログ村へ

SQL 左外部結合

結合の最後に、「zei_table」にデータがない場合も含めて全て表示させる方法を実施してみます。

SQL分は、次のとおりです。

select
 koj.kojin_no,
 koj.kanji_name,
 zei.zeimoku,
 zei.zeigaku
from
 kojin_table koj,
 zei_table zei
where
 koj.kojin_no = zei.kojin_no (+)
;

※表記上「全角」を使っている場合がありますが、実際の記載は、全て「半角英数」になりますので、注意してください。

「(+)」を付けると、「kojin_table」の全ての行を「zei_table」のデータの有無に関わらず全て週出します。

「zeimoku_table」の「zeimoku」に「jyuuminzei」が無い行は、空白として抽出されます。

kojin_no kanji_name zeimoku zeigaku
1000000001 伊 太郎 jidousyazei 34500
1000000001 伊 太郎 jyuuminzei 10000
1000000001 伊 太郎 kokuhozei 15000
1000000001 伊 太郎 koteisisanzei 35000
1000000002 英 太郎 jidousyazei 45000
1000000002 英 太郎 jyuuminzei 20000
1000000002 英 太郎 kokuhozei 25000
1000000002 英 太郎 koteisisanzei 23000
1000000003 仏 太郎 jidousyazei 29500
1000000003 仏 太郎 jyuuminzei 80000
1000000003 仏 太郎 kokuhozei 30000
1000000003 仏 太郎 koteisisanzei 50000
1000000004 露 太郎    
1000000005 加 太郎    
1000000006 日 太郎 jidousyazei 25000
1000000006 日 太郎 jyuuminzei 18000
1000000006 日 太郎 kokuhozei 29500
1000000006 日 太郎 koteisisanzei 29000
1000000007 米 太郎    

MySQL等の場合は、Oracleと記述が異なり(+)が使えないので、次の記述となります。

SELECT
 koj.kojin_no,
 koj.kanji_name,
 zei.zeimoku,
 zei.zeigaku
FROM
 kojin_table koj LEFT JOIN zei_table zei ON koj.kojin_no = zei.kojin_no
;

※表記上「全角」を使っている場合がありますが、実際の記載は、全て「半角英数」になりますので、注意してください。

LEFT JOIN(左外部結合)

ここまでが、SQLの基本となります。

テーブル(表)名とカラム(列)名さえ分かれば、これだけでもかなり、自由にデータを抽出することができます。

とにかくやってみることが大切です。

抽出したデータをエクセルで操作し集計等もできます。

次回からは、条件分岐やSQL内での集計など、さらに実践的なことをやっていきたいと思います。

ブログ開設に必要なドメイン取得、サーバーレンタル、ASPの登録等は、こちらのサイトから!

スポンサーリンク
スポンサーリンク

-060-SQL

執筆者:


comment

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

関連記事

code1-eyecatch

SQL・サンプルデータベース・MS-ACCESS!これで実際に体験してみよう!

これまでの、基本をMS-ACCESS(マイクロソフトアクセス)に纏めてみました。 スポンサーリンク SQLサンプデータベース(MS-ACCESS)ダウンロード ここからダウンロード クエリーのデザイン …

code1-eyecatch

SQLを無料で使える環境を作る方法!A5:SQL Mk-2は無料で高機能!

まずは、SQLを使える環境整備です。 まず、SQLが使えるソフトウエアを用意します。 A5:SQL Mk-2は、フリーウエアでも高機能 フリーウエアであれば、A5:SQL Mk-2 が高機能で良いかと …

code1-eyecatch

SQLの基本はここから「選択」select文!

SQL 選択 続いて、選択を行ってみます。 選択は、行を抽出することです。 先ほどの、テーブル(表)を使って、実践していきます。 選択の例は、次のとおりです。 select  * from  koji …

code1-eyecatch

SQL文の基本はここから「選択と射影」select~from~where~and!

SQL 選択と射影 続いて、選択と射影を同時に行ってみます。 選択は、行を抽出すること、射影は、列を選択することです。 先ほどの、テーブル(表)を使って、実践していきます。 select  kojin …

code1-eyecatch

SQLでまず始めはこれをやってみる!システム日時「sysdate」を表示させる方法!

さて、実際にSQLを使ってみましょう。 A5:SQL Mk-2の使い方 A5:SQL Mk-2を起動し、 ファイル → 新規 → SQL を選択します。 SQLを入力する画面の上でのタブで、前回設定し …