Şehirler Tablosu
CREATE TABLE TBLSEHIRLER ( ID NUMBER(10) GENERATED BY DEFAULT AS IDENTITY, SEHIR_AD VARCHAR2(100) NULL, CONSTRAINT PK_TBLSEHIRLER PRIMARY KEY(ID) )
Şehirler tablosu oluştu. Birkaç şehir ekleyelim.
Şehirler Tablosu Kayıt Ekle
INSERT INTO TBLSEHIRLER (SEHIR_AD) VALUES ('ISTANBUL') INSERT INTO TBLSEHIRLER (SEHIR_AD) VALUES ('ANKARA') INSERT INTO TBLSEHIRLER (SEHIR_AD) VALUES ('ADANA')
Oluşan şehirler tablosunu ve içerisindeki verilere ait ekran görüntüsünü paylaşalım.
Şehirler Tablosu Görünümü

Şehirler tablosuna veriler eklendi. Ardından ilçeler tablosunu oluşturalım.
İlçeler Tablosu
CREATE TABLE TBLILCELER ( ID NUMBER(10) GENERATED BY DEFAULT AS IDENTITY, SEHIR_ID NUMBER(10), ILCE_AD VARCHAR2(100) NULL, CONSTRAINT PK_TBLILCELER PRIMARY KEY(ID), CONSTRAINT FK_TBLILCELER_SEHIR_ID FOREIGN KEY (SEHIR_ID) REFERENCES TBLSEHIRLER(ID) )
İlçeler tablosu oluştu. Birkaç ilçe ekleyelim.
İlçeler Tablosu Kayıt Ekle
INSERT INTO TBLILCELER (ILCE_AD, SEHIR_ID) VALUES ('ŞİŞLİ', 1) INSERT INTO TBLILCELER (ILCE_AD, SEHIR_ID) VALUES ('BEYLİKDÜZÜ', 1) INSERT INTO TBLILCELER (ILCE_AD, SEHIR_ID) VALUES ('ARNAVUTKÖY', 1) INSERT INTO TBLILCELER (ILCE_AD, SEHIR_ID) VALUES ('AVCILAR', 1) INSERT INTO TBLILCELER (ILCE_AD, SEHIR_ID) VALUES ('ÇANKAYA', 2) INSERT INTO TBLILCELER (ILCE_AD, SEHIR_ID) VALUES ('KEÇİÖREN', 2) INSERT INTO TBLILCELER (ILCE_AD, SEHIR_ID) VALUES ('YENİMAHELLE', 2) INSERT INTO TBLILCELER (ILCE_AD, SEHIR_ID) VALUES ('ÇUKUROVA', 3) INSERT INTO TBLILCELER (ILCE_AD, SEHIR_ID) VALUES ('SEYHAN', 3)
Oluşan ilçeler tablosunu ve içerisindeki verilere ait ekran görüntüsünü paylaşalım.
İlçeler Tablosu Görünümü

İlçeler tablosuna veriler eklendi. Ardından mahalleler tablosunu oluşturalım.
Mahalleler Tablosu
CREATE TABLE TBLMAHALLELER ( ID NUMBER(10) GENERATED BY DEFAULT AS IDENTITY, SEHIR_ID NUMBER(10), ILCE_ID NUMBER(10), MAHALLE_AD VARCHAR2(100) NULL, CONSTRAINT PK_TBLMAHALLELER PRIMARY KEY(ID), CONSTRAINT FK_TBLMAHALLELER_SEHIR_ID FOREIGN KEY (SEHIR_ID) REFERENCES TBLSEHIRLER(ID), CONSTRAINT FK_TBLMAHALLELER_ILCE_ID FOREIGN KEY (ILCE_ID) REFERENCES TBLILCELER(ID) )
Mahalleler tablosu oluştu. Birkaç mahalle ekleyelim.
Mahalleler Tablosu Kayıt Ekle
INSERT INTO TBLMAHALLELER (ILCE_ID, MAHALLE_AD) VALUES (1, 'ŞİŞLİ MAHALLE 1') INSERT INTO TBLMAHALLELER (ILCE_ID, MAHALLE_AD) VALUES (1, 'ŞİŞLİ MAHALLE 2') INSERT INTO TBLMAHALLELER (ILCE_ID, MAHALLE_AD) VALUES (2, 'BEYLİKDÜZÜ MAHALLE 1') INSERT INTO TBLMAHALLELER (ILCE_ID, MAHALLE_AD) VALUES (6, 'KEÇİÖREN MAHALLE 1') INSERT INTO TBLMAHALLELER (ILCE_ID, MAHALLE_AD) VALUES (6, 'KEÇİÖREN MAHALLE 2') INSERT INTO TBLMAHALLELER (ILCE_ID, MAHALLE_AD) VALUES (8, 'ÇUKUROVA MAHALLE 1') INSERT INTO TBLMAHALLELER (ILCE_ID, MAHALLE_AD) VALUES (9, 'SEYHAN MAHALLE 1')
Oluşan mahalleler tablosunu ve içerisindeki verilere ait ekran görüntüsünü paylaşalım.
Mahalleler Tablosu Görünümü

Görüldüğü üzere, mahalleler tablosundaki SEHIR_ID sütununun değerleri bulunmamakta. Bu değerleri bulmak için ILCELER tablosunu MAHALLELER tablosu ile birleştirip SEHIR_ID sütununa ilgili şehrin ID değeriyle güncelleme yapmak olacaktır.
Örneğin; "BEYLİKDÜZÜ MAHALLE 1" adlı mahallenin ILCE_ID değeri "2", o ilçenin SEHIR_ID değeri ise "1". Bu iki tablo verilerini birleştirip MAHALLELER tablosunda SEHIR_ID değerlerini güncellemiş olacağız.
Update Join Örneği
MERGE INTO TBLMAHALLELER X USING ( SELECT A.ID SEHIR_ID, B.ID ILCE_ID, B.ILCE_AD FROM TBLSEHIRLER A INNER JOIN TBLILCELER B ON A.ID = B.SEHIR_ID ) Y ON (X.ILCE_ID = Y.ILCE_ID) WHEN MATCHED THEN UPDATE SET X.SEHIR_ID = Y.SEHIR_ID
Kodda daha sonradan farkettiğim bir şey, SEHIRLER tablosunu bağlamadan da mahallenin SEHIR_ID değerini sadece ILCELER tablosu üzerinden de yapabildiğimizdir. Kodu biraz daha kısaltırsak.
Update Join Örneği (Kısaltılmış)
MERGE INTO TBLMAHALLELER X USING ( SELECT ID, SEHIR_ID FROM TBLILCELER ) Y ON (X.ILCE_ID = Y.ID) WHEN MATCHED THEN UPDATE SET X.SEHIR_ID = Y.SEHIR_ID
Update işlemini tabloları birleştirerek (join) sağlamış olduk. Sonucun ekran görüntüsünü paylaşalım.
Mahalleler Tablosu Görünümü

Şimdiki örneğimiz ise delete işlemi için yapalım. İlçesi "KEÇİÖREN" olan mahalleleri join işlemiyle silme işlemini gerçekleştirelim.
Delete Join Örneği
MERGE INTO TBLMAHALLELER X USING ( SELECT ID, ILCE_AD FROM TBLILCELER ) Y ON (X.ILCE_ID = Y.ID) WHEN MATCHED THEN UPDATE SET X.SEHIR_ID = X.SEHIR_ID DELETE WHERE Y.ILCE_AD = 'KEÇİÖREN';
Sorgumuzu hazırladık ve çalıştırdık. Sonucun ekran görüntüsünü paylaştığımızda "KEÇİÖREN MAHALLE 1" ve "KEÇİÖREN MAHALLE 2" adlı kayıtların silindiğini görmüş oluyoruz.