郵便番号は重複している

なぜT04Customer(顧客マスター)は「ZIP_CODE」ではなく「TOWN_CD」を持っているのでしょうか?地域名を表示するならZIP_CODEでできそうですよね。

実はZIP_CODE(郵便番号)は重複しているため、地域名を特定できないのです。今回はグループ化を使って郵便番号が重複していることを確認してみましょう。

【1】Accessのファイル「SampleDB3.mdb」を起動し、「SQL練習」のSQLビュー画面を開いてください。

access-sql85.gif


【2】以下のSQL文を入力し、実行ボタン「!」をクリックします。

SELECT TOWN_CD
FROM T03Town;

access-sql128.gif


【3】TOWN_CD一覧が表示されました。

access-sql129.gif

レコード数を見ると、121882件となっています。

次はTOWN_CDをグループ化してみましょう。グループ化とは同じ種類のデータをまとめることです。つまり重複したデータがあれば、まとめて一つのレコードとして表示します。


【4】以下のSQL文を入力し、実行ボタン「!」をクリックします。

SELECT TOWN_CD
FROM T03Town
GROUP BY TOWN_CD;

access-sql130.gif

GROUP BYの後に指定したフィールドでグループ化します。


【5】グループ化したTOWN_CD一覧が表示されました。

access-sql131.gif

しかし前と変わっていません。レコード数を見ると121882件のままです。テーブルT03TownではTOWN_CDは重複することはありませんので、TOWN_CDを使うと各レコードが確実に区別できるのです。

それでは次はZIP_CODE(郵便番号)で確認してみましょう。


【6】以下のSQL文を入力し、実行ボタン「!」をクリックします。

SELECT ZIP_CODE
FROM T03Town;

access-sql132.gif


【7】ZIP_CODE一覧が表示されました。

access-sql133.gif

この段階では重複しているかわかりません。ZIP_CODEもすべてのレコードに書かれているので当然121882件です。それでは次はグループ化してみます。


【8】以下のSQL文を入力し、実行ボタン「!」をクリックします。

SELECT ZIP_CODE
FROM T03Town
GROUP BY ZIP_CODE;

access-sql134.gif


【9】グループ化したZIP_CODE一覧が表示されました。

access-sql135.gif

するとレコード数が118181件に減りました。

121882 - 118181 = 3701

つまり3701件のZIP_CODEは重複していたのです。意外と多いですね。次はもう少し見やすくしてみましょう。


【10】以下のSQL文を入力し、実行ボタン「!」をクリックします。

SELECT ZIP_CODE, Count(ZIP_CODE) AS CNT
FROM T03Town
GROUP BY ZIP_CODE;

access-sql136.gif

Count(ZIP_CODE) AS CNTは演算フィールドです。
Countはデータをカウントする関数です。AS(エイリアス)でCNTというフィールド名を付けています。


【11】カウントしたZIP_CODE一覧が表示されました。

access-sql137.gif

スクロールしてみると、ほとんど「1」なのですが、中には「2」や「3」があります。これが重複している郵便番号です。もっと見やすくするために重複しているデータだけを表示してみましょう。(2件以上を表示ということです。)


【12】以下のSQL文を入力し、実行ボタン「!」をクリックします。

SELECT ZIP_CODE, Count(ZIP_CODE) AS CNT
FROM T03Town
GROUP BY ZIP_CODE
HAVING (Count(ZIP_CODE)>=2);

access-sql138.gif

HAVING (Count(ZIP_CODE)>=2)
グループ化した結果に対する検索条件はWHEREではなくHAVINGを使います。Count(ZIP_CODE)で件数が出ますので、>=2 は2件以上のレコードということになります。


【13】カウントが2件以上のZIP_CODE一覧が表示されました。

access-sql139.gif

レコード数が1497件になっています。

まとめると郵便番号は121882件中、3701件が重複していて、重複している郵便番号は1497種類だということです。一覧を見ると郵便番号「0288401」は20件となっていますので確認してみましょう。


【14】以下のSQL文を入力し、実行ボタン「!」をクリックします。

SELECT TOWN_CD,ZIP_CODE,TOWN_NAME
FROM T03Town
WHERE ZIP_CODE = '0288401';

access-sql140.gif

ZIP_CODEはテキスト型なので「'」(シングルクォーテーション)で囲んでいます。


【15】郵便番号「0288401」一覧が表示されました。

access-sql141.gif

確かに20件の地域名が表示されました。同じ郵便番号の地域が複数あることがわかりますよね。ZIP_CODEでは地域名が特定できないのです。

以上の理由からT04Customer(顧客マスター)は「ZIP_CODE」ではなく「TOWN_CD」を持つ必要があったのです。

スポンサードリンク

スポンサードリンク






Access SQL初心者入門講座TOPへ