郵便番号テーブル zips, kens, shichosons を用いた演習

SQL 演習

「郵便番号」からの「町域」の検索

郵便番号データベースにおいて検索結果の精度向上が課題とされる郵便番号 0285102 と 8260043 について,実際の検索を実施する.

  1. 「郵便番号」が 8260043 であるような「町域」
    #!/bin/bash
    cat >/tmp/a.$$.sql <<-SQL
    SELECT * FROM zips WHERE zipcode = '"8260043"';
    SQL
    cat /tmp/a.$$.sql | sqlite3 /tmp/mydb02
    
  2. 「郵便番号」が 0285102 であるような「町域」
    #!/bin/bash
    cat >/tmp/a.$$.sql <<-SQL
    SELECT * FROM zips WHERE zipcode = '"0285102"';
    SQL
    cat /tmp/a.$$.sql | sqlite3 /tmp/mydb02
    

「町域名漢字」に関する単純な問い合わせ例

  1. 「町域名漢字」に「一円」を含むものの数

    「一円」とは,地域名に「●●一円」という形で含まれる表現を指す.

    #!/bin/bash
    cat >/tmp/a.$$.sql <<-SQL
    select count(*) FROM zips WHERE choiki_kanji LIKE '%一円%';
    SQL
    cat /tmp/a.$$.sql | sqlite3 /tmp/mydb02
    

    数は0個 → データの整合性が確認できた

「以下に掲載がない場合」

  1. 「町域名漢字」に「以下に掲載がない場合」を含むものの数
    #!/bin/bash
    cat >/tmp/a.$$.sql <<-SQL
    select count(*) FROM zips WHERE choiki_kanji LIKE '%以下に掲載がない場合%';
    SQL
    cat /tmp/a.$$.sql | sqlite3 /tmp/mydb02
    

    数は0個 → データの整合性が確認できた


以下,データベース構造の分析

テーブル zips において,同一の jiscode を持つレコードの出現頻度を集計する

#!/bin/bash
cat >/tmp/a.$$.sql <<-SQL
select jiscode, count(*) from zips group by jiscode having count(*) > 1;
SQL
cat /tmp/a.$$.sql | sqlite3 /tmp/mydb02

データベース設計上の注意点として,shichoson_kanji と shichoson_kana はいずれも候補キーとしての要件を満たしていない.これは,同一の市区町村名に対して複数の読み方が存在するためである.

select shichoson_kanji, count(*) from zips group by shichoson_kanji having count(*) > 1;
select shichoson_kana, count(*) from zips group by shichoson_kana having count(*) > 1;