avatar

Türkiye Posta Kodları
Türkiye'nin tüm il, ilçe, semt / mahalle / köy ve posta kodlarını içeren bir MySQL veri tabanı...

02/08/2014
Hakan Özakar

2012 yılında üzerinde çalıştığım bir proje için Türkiye'nin tüm il, ilçe, semt ve posta kodlarını içeren bir veri tabanı oluşturmam gerekmişti. O dönemde bu veriyi toparlayabilmek için ciddi bir emek harcamak zorunda kaldığımı hatırlıyorum.

Geçen gün yedeklerimi araştırırken o veri tabanını görünce, hem ihtiyaç duyabilecekler için bir kaynak olabileceğini hem de geçenlerde yazdığım Veri Tabanlarında Normalizasyon yazısına bir örnek oluşturabileceğini düşündüm ve paylaşmak istedim.

 

MySQL için hazırlanmış olan bu veri tabanı;

  • 81 İl,
  • 957 İlçe,
  • 52.835 Semt / Mahalle / Köy,
  • 3.226 Posta kodundan oluşmaktadır.

Veri tabanının 2012 yılından sonra güncellenmediğini hatırlatmak isterim...

 

Veri tabanını indirmek için: https://github.com/hozakar/postakod

 

Veri tabanı yapısı

Normalize edilmiş veri tabanlarında çalışmaya alışkın olmayan arkadaşlar için, verileri çekerken kullanılabilecek bazı SQL örneklerini aşağıda bulabilirsiniz. Ama önce tablo yapısını inceleyelim...

 

Tablolar

il:

  • id (otomatik sayı, integer 11, primary key)
  • isim (varchar 20, index tipi: normal)

ilce:

  • id (otomatik sayı, integer 11, primary key)
  • il_id (integer 11, index tipi: normal, foreign key: il.id)
  • isim (varchar 25, index tipi: normal)

pkod:

  • id (otomatik sayı, integer 11, primary key)
  • kod (varchar 5, index tipi: normal)

semt:

  • id (otomatik sayı, integer 11, primary key)
  • ilce_id (integer 11, index tipi: normal, foreign key: ilce.id)
  • pkod_id (integer 11, index tipi: normal, foreign key: pkod.id)
  • isim (varchar 50, index tipi: normal)

 

Örnek SQL Cümleleri

İstanbul iline bağlı tüm ilçelerin listesini alalım.

SELECT
  ilce.isim
FROM
  ilce
  INNER JOIN il ON il.id = ilce.il_id
WHERE
  il.isim = 'İstanbul'
ORDER BY
  ilce.isim

 

İstanbul ilinin Beykoz ilçesine bağlı tüm semtlerin listesini alalım.

SELECT
  semt.isim
FROM
  semt
  INNER JOIN ilce ON semt.ilce_id = ilce.id
  INNER JOIN il ON ilce.il_id = il.id
WHERE
  il.isim = 'İstanbul'
  AND ilce.isim = 'Beykoz'
ORDER BY
  semt.isim

 

Hangi illerin Yenişehir adında ilçesi var?

SELECT
  il.isim
FROM
  il
  INNER JOIN ilce ON il.id = ilce.il_id
WHERE
  ilce.isim = 'Yenişehir'
ORDER BY
  il.isim

 

Hangi illerin 100.Yıl adında semti var?

SELECT
  il.isim
FROM
  il
  INNER JOIN ilce ON il.id = ilce.il_id
  INNER JOIN semt ON ilce.id = semt.ilce_id
WHERE
  semt.isim = '100.Yıl'
GROUP BY  -- Aynı ilde aynı isimde birden fazla
  il.isim -- semt bulunması ihtimaline karşı
ORDER BY
  il.isim

 

Posta kodu '34744' olan semt, bağlı olduğu ilçe ve il bilgisini alalım.

SELECT
  il.isim as il, ilce.isim as ilce, semt.isim as semt, pkod.kod
FROM
  semt
  INNER JOIN ilce ON semt.ilce_id = ilce.id
  INNER JOIN il ON ilce.il_id = il.id
  INNER JOIN pkod ON semt.pkod_id = pkod.id
WHERE
  pkod.kod = '34744'

 

Yorumlar Yorum Yap

  • Kemal

    Çok Güzel

    Kemal 05/05/2018 16:01
  • şerif

    hocam, merhaba. ben kodlamaya yeni başladım bazı noktalarda sorun yaşıyorum. Mesela PDO ile istanbul iline bağlı ilçe, semt, mahalle vs. nasıl ilişkilendirebiliriz. Buna bir örnek verebilir misiniz? Rica etsem. Teşekkürler. (Pek çok yere baktım bulamadım)

    şerif 12/12/2017 02:18