© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Slides:



Advertisements
Benzer bir sunumlar
Stored Procedure Öğr.Gör.Metin Akbulut.
Advertisements

T sql-diğer komutlar Metin Akbulut.
Tablo oluşturma İlk olarak tabloları oluşturmamız gerekli..
SQL (Structured Query Language)
VERİ TABANI II- 4.HAFTA ALT SORGULAR Türetilmiş ve İLİntİlİ tablolar
SQL de Değişken Tanımlama
SQL Komutlar 5 Sibel SOMYÜREK.
EkoPC Bilişim Ltd. Eğitim Hizmetleri
VERİ TABANI ve YÖNETİMİ
Alt Sorgular Veritabanı 2.
Veri Tabanı Yönetim Sistemleri
Tek Tablo İçinde Sorgulamalar
Veritabanı Yönetim Sistemleri Hızlı ve Kısa Giriş
T-SQL-2.Konu Akış Kontrolleri.
Veri Tabanı Yönetim Sistemleri
VeriTabanı Uygulama. Tabloları yaratmak için MySQL komutları.
BÖLÜM 6 SQL SERVER KOMUTLARI.
Tetikleyici. Nedir? Bir tablo üzerinde Ekleme silme ve güncellemeye bağlı olarak tetiklenip çalışan SQL kodlarıdır. Genel amacı veri bütünlüğünü korumaktır.
SQL (STRUCTURED QUERY LANGUAGE)
11 ekim 2011 VTYS –II Dersi. Kalıp İfadelerle Sorgu (Pattern) Eğer bir sözel verinin sadece belli kriterlere uyanlarını seçeceksek sütun_adı LIKE kalıp.
VIEW (BAKIŞ) OLUŞTURMA
ÖRNEKLER. musteri Id adi soyadi mus_satis Id barkod adet Urunlar barkod urun_adi kodu fiyati Stok_hareket tarih barkod gelen giden.
VERİTABANI ve YÖNETİMİ
SQL Dili ve MySQL Komutları
SQL’e Giriş ve SELECT Komutu
SQL de Değişken Tanımlama
MySQL Operatörleri ve Fonksiyonları
SQL SERVER 2008 Yücel YILDIRIM.
VeriTabanı Uygulama.
SQL Sibel SOMYÜREK.
SQL SERVER STORED PROCEDURE
SQL Komutları (2) Uzm. Murat YAZICI.
Bilgisayar Mühendisliği Bölümü
SQL’ e Giriş Uzm. Murat YAZICI.
Bilgisayar Mühendisliği Bölümü
ADRESİNDEN ÖRNEK VERİ TABANLARINI İNDİRİNİZ
Veri Tabanı Yönetimi Dersi 8. Laboratuvarı Arş. Gör. Pınar CİHAN.
S ORGU / DML / DDL KOMUTLARı İbrahim Onur Sığırcı.
Yapısal Sorgulama Dili SQL VTYS Giriş Hafta 5 Ders Notu.
Yapısal Sorgulama Dili SQL Hafta 7. TEKRARLI SATIRLARI ÖNLEMEK  DISTINCT komutu ile sorgu sonucunda birden fazla kayıt aynı verileri içeriyorsa tekrarlı.
View View’ler select ifadesi ile tanımlanmış sanal tablolardır. Temel amacı base tabloların içerisinden veri kümesi getirip ortaya çıkan sonucu sanal.
Veri Tabanı Yönetimi Dersi 1. Laboratuvarı Arş. Gör. Pınar CİHAN.
 Stored Procedure kısaca SQL sorgularını isteğimize göre hazırlayıp kullanıma hazır veri tabanı nesnesine çeviren bir araçtır.  Stored Procedure, Türkçeye.
© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
Veri Tabanı Yönetimi Dersi 1. Laboratuvarı
© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
VIEW lerle çalışmak 11.BÖLÜM.
© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
TETİKLEYİCİLER ve HATA KONTROLÜ
14.DERS Örnekler, Sorular BUKET DOĞAN.
SQL SERVER STORED PROCEDURE
VERİ TABANI SQL (STRUCTURED QUERY LANGUAGE) SAVAŞ TUNÇER.
© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
Öğretim Görevlisi Alper Talha Karadeniz Veri Tabanı 1
© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
DML ile veri ekleme, silme ve değiştirme
Sorgu / dml / ddl komutları
SQL (STRUCTURED QUERY LANGUAGE)
Stored Procedure Öğr.Gör.Metin Akbulut.
SQL Server - Triggers.
VERİ TABANI II- 4.HAFTA ALT SORGULAR Türetilmiş ve İLİntİlİ tablolar
SQL Server - Stored Procedures
SQL Server - Views.
VERİTABANI YÖNETİM SİSTEMLERİ 6-SQL Server-4-DML
VERİTABANI YÖNETİM SİSTEMLERİ 6-SQL Server-3-DDL
Sunum transkripti:

© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi HAFTA 7 © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

GEÇEN DERSLERDE NELER ÖĞRENDİK? Veritabanı tasarımı Normalizasyon Join içinde group by kullanmak LIKE içinde operatörler TOP, TOP PERCENT, IN, BETWEEN…AND SOME-ALL-EXISTS, Tarih saat fonkdiyonları, metin fonksiyonları View kullanımı Kümeleme Fonksiyonları, veri ekleme,silme, güncelleme saklı yordamlar, görünümler,karar yapıları © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi CREATE TABLE [Ogrenciler3]( [OgrenciNo] [int] IDENTITY(100,1) NOT NULL CONSTRAINT ID PRIMARY KEY, [Bolumu] [varchar](50) NULL) © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi ALTER TABLE Ogrenciler3 ADD AdiSoyadi varchar(50),telefon varchar(50) © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi SELECT * FROM Urunler WHERE EXISTS (SELECT * FROM [Satis Detaylari] WHERE Urunler.UrunID = [Satis Detaylari].UrunID and Urunler.BirimFiyati>=50) © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi SELECT [UrunID],[UrunAdi],U.[TedarikciID],SirketAdi FROM [Urunler] AS U INNER JOIN Tedarikciler AS T on U.TedarikciID=T.TedarikciID © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi SELECT T.[TedarikciID],SirketAdi,COUNT(*) FROM [Urunler] AS U INNER JOIN Tedarikciler AS T on U.TedarikciID=T.TedarikciID GROUP BY T.[TedarikciID],SirketAdi ORDER BY COUNT(*) © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi SOME - ANY fonksiyonları parametre olarak içerisine aldığı alt sorgudan geriye dönen sonuçların herhangi bir tanesi karşılatırma kriterine uyuyorsa TRUE hiç biri uymuyorsa FALSE döndürür. ALL fonksiyonu parametre olarak içerisine aldığı alt sorgudan geriye dönen sonuçların tamamı karşılatırma kriterine uyuyorsa TRUE herhangi biri uymuyorsa FALSE döndürür. © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi SELECT * FROM Urunler WHERE EXISTS (SELECT * FROM SatisDetaylari WHERE Urunler.UrunID = SatisDetaylari.UrunID) © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi SELECT u.[KategoriID], [KategoriAdi], AVG([BirimFiyati]) FROM Urunler u INNER JOIN [Kategoriler] k ON k.[KategoriID]= u.[KategoriID] GROUP BY u.[KategoriID], [KategoriAdi] © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi SELECT SatisTarihi,DATEADD(day,30,SatisTarihi) AS OdemeGunu FROM Satislar DATEDIFF (tarihin hangi kısmı,başlangıç,bitiş) SELECT SatisTarihi,DATEDIFF (YEAR,SatisTarihi,GETDATE()) AS YIL_GEÇMİŞ declare @sayı int set @sayı=233 print 'deger = '+ convert(varchar(5), @sayı) © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi DECLARE @tablo varchar(10) SET @tablo='Musteriler' IF EXISTS( SELECT * FROM sys.sysobjects WHERE name = @tablo and xtype='u' ) PRINT @Tablo + ' var' ELSE PRINT @tablo + ' yok' GO © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi JOIN TÜRLERİ Inner Join Inner Join işlemi ile birleştirilecek olan tabloların sütunlarının içerdiği veriler kontrol edilerek kesişim kümesi alınıyor. Aynı işlem “where” komutu kullanılarak da gerçekleştirilebilir. Inner join yerine join yazmak da yeterlidir. Kullanımı: SELECT kolon_ad(lar)ı FROM tablo_1 INNER JOIN tablo_2 ON tablo_1.ortak_kolon=tablo_2.ortak_kolon ; © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Tablo isim kontrolünü değişkenli prosedür haline getirme create proc buket2(@tablom varchar(30)) as begin IF EXISTS( SELECT * FROM sys.sysobjects WHERE name = @tablom and xtype='u' ) PRINT @Tablom + ' var' ELSE BEGIN PRINT @tablom + ' yok' end exec buket2'deneme' © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi Tablo Yoksa oluştur create proc buket3(@tablom varchar(30)) as begin IF EXISTS( SELECT * FROM sys.sysobjects WHERE name = @tablom and xtype='u' ) PRINT @Tablom + ' var' ELSE BEGIN PRINT @tablom + ' yok' create table @tablom (id integer,adi varchar(40)) end ----HATA VERDİ © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi create proc buket3(@tablom varchar(30)) as begin declare @sql varchar(100) IF EXISTS( SELECT * FROM sys.sysobjects WHERE name = @tablom and xtype='u' ) PRINT @Tablom + ' var' ELSE BEGIN PRINT @tablom + ' yoktu' select @sql = 'create table ' + @tablom + '(id int, adi varchar(30))' exec (@sql) PRINT @tablom + ' şimdi oluşturuldu' end © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi CREATE proc ekle_olustur(@tablom varchar(30)) as begin SET QUOTED_IDENTIFIER ON; declare @sql varchar(100) IF EXISTS( SELECT * FROM sys.sysobjects WHERE name = @tablom and xtype='u' ) BEGIN select @sql = 'DROP table ' + @tablom exec (@sql) PRINT @Tablom + ' vardı SİLİNDİ' END select @sql = 'create table ' + @tablom + '(id int, adi varchar(30))' PRINT @tablom + ' şimdi oluşturuldu' SET @SQL= 'INSERT INTO ' + @tablom + ' VALUES ( 1, ''DENEME'' )' PRINT @tablom + ' değer eklendi' end © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi IF NOT EXISTS (SELECT * FROM Urunler WHERE UrunAdi LIKE 'Kahve'    ) BEGIN SET IDENTITY_INSERT Urunler OFF --Bir tablonun kimlik sütununa açık değerler eklenmesine izin verir. INSERT INTO Urunler (UrunAdi, BirimFiyati) VALUES ( 'Kahve', 13) END ELSE PRINT('ÜRÜN ZATEN VAR') © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi CREATE PROCEDURE kontrol_ekle(@Urunad VARCHAR(20), @fiyat Money) ) AS BEGIN IF NOT EXISTS (SELECT * FROM Urunler WHERE UrunAdi LIKE @Urunad     ) SET IDENTITY_INSERT Urunler OFF --Bir tablonun kimlik sütununa açık değerler eklenmesine izin verir. INSERT INTO Urunler (UrunAdi, BirimFiyati) VALUES (@Urunad , @fiyat ) END ELSE PRINT('ÜRÜN ZATEN VAR') End exec kontrol_ekle 'makarna',3 © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi SQL Server anahtar kelimeleri ile aynı olan ya da boşluk içeren isimler, tırnak arasında (“”) ya da köşeli parantez ([]) arasında gösterilmelidir. Hangisinin anahtar kelime , hangisinin isim olarak kabul edileceği, veritabanında yaptığınız uyumluluk seviyesi ayarlamasına bağlıdır.  Çift tırnak, ancak SET QUOTED_IDENTIFIER  ON özelliği varsa, sütun ismi sınırlayıcısı olarak kabul edilir.  © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi Sql Server‘da her sorgu çalıştırdığımızda, sorgu sonucu, etkilenen satır sayısı ile birlikte, sorguyu çalıştıran uygulamaya geri gönderilir. Sql Server‘ın bu bilgiyi hesaplamasını ve uygulamaya geri göndermesini engelleyerek, çok ufakta olsa kazanç sağlayabiliriz. Yapmamız gereken, sorgudan önce aşağıdaki komutu çalıştırmak olacaktır; SET NOCOUNT ON Sql Server sadece ilgili sorgu için, etkilenen satır sayısını hesaplama işlemini yapmayacaktır. © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi Sql injection Sql injection, Sql sorgularının arasına dışarıdan müdahale de bulunarak, veri ekleme işlemine verilen genel isimdir. Web uygulamalarında kullanıcılar tarafından girilen veriler ile dinamik Sql cümleleri oluşturulur. Bu cümleler oluşturulurken araya giren herhangi bir meta-karakter Sql injection’a neden olabilmektedir. Meta-karakter; bir program için özel anlam ifade eden karakterlere verilen isimdir. Sql için ise meta-karakter " ‘ " (tek tırnak) ve " ; " (noktalı virgül) dür. © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi Örneğin, en çok kullanılan yöntem bir sisteme Kullanıcı Adı ve Parola ile giriş yaparken kullandığımız yöntemdir. select * from Uzmanim where KullaniciAdi = 'uzman' AND Parola = 'uzmanim' Bu örnek Sql kodu klasik bir oturum açma yöntemidir. Bu örnek üzerinde basit bir sql injection deneyelim. Öncelikle KullaniciAdi yerine " ‘ or 1 = 1 " , Parola yerine ise " ‘ or 1 = 1 " girelim. bakıyoruz ki sisteme giriş yapımışız. Şimdi koda yakından bakarak nasıl olduğunu inceleyelim. Girdiğimiz değerleri  Sql kodunda yerlerine koyarsak karşımıza şu şekilde bir kod çıkar. select * from Uzmanim where KullaniciAdi = ' ' or 1 = 1 ' and Parola = ' ' or 1 = 1 ' © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi Bu Sql cümlesi her zaman doğru dönecek ve Uzmanim tablosundan tüm üyeleri listeleyecektir. Çünkü ilk kontrole bakmaksızın son kontrol (1 eşittir 1 kontrolü) her zaman doğru sonuç verecek ve Sql cümlesi çalışıp, Uzmanim tablosundan tüm üyeler listelenecektir. Bunun gibi veya daha farklı yollardan müdahaleler de bulunulursa ulaşılmasını istemediğimiz veriler yabancı kişiler tarafından ele geçirilebilir. Buna izin vermemek için yapmamız gereken en önemli kurallar; Tüm meta-karakterlerden kaçınılmalıdır. Kullanıcıdan alınan verilerde bu karakterlerin olup olmadığını anlamak için filtreleme işlemi yapmalıyız. Sayısal olarak beklenen girdilerin sayısal olup olmadığı kontrol edilmelidir. Sayısal olan girdiler Sql sorgusuna eklemeden önce integer’a çevirmek veya ISNUMERIC fonksiyonunu kullanarak gerçekten integer olup olmadığını kontrol edilmelidir. © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi SELECT UrunAdi,BirimFiyati, case when BirimFiyati <= 10.00 then 'UCUZ' when BirimFiyati <= 30.00 then 'NORMAL' when BirimFiyati <= 50.00 then 'PAHALI' else 'ÇOK PAHALI' end AS durum from Urunler © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi UPDATE Urunler SET BirimFiyati = CASE WHEN BirimFiyati<10THEN BirimFiyati * 1.25 WHEN BirimFiyati<20THEN BirimFiyati * 1.20 WHEN BirimFiyati < 30 THEN BirimFiyati * 1.15 ELSE BirimFiyati*1.1 END © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

CREATE PROCEDURE grupla (@city nvarchar(30)) AS SELECT Sehir, COUNT(*) AS Musteri_sayisi FROM Musteriler WHERE Sehir LIKE @city GROUP BY Sehir GO exec grupla 'berlin'

© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi CTE nedir SQL Server 2005 ile birlikte sunulan CTE (Common Table Expression – Ortak Tablo İfadeleri), bir sorgunun yürütülmesi anında elde edilmiş geçici sonuçlar bir veya daha fazla kere kullanılmasını sağlayan ifadelerdir. CTE bir table veya view olmayıp sadece bir sorgu ifadesidir. Yani geçici ve kalıcı tablolar gibi herhangi bir veri içermezler. Bir CTE’nin basit yazım biçimi aşağıdaki gibidir; © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi CTE CTE’ler WITH sözcüğüyle tanımlanır. CTE’lerin en önemli özelliği kendi kendini çağırabiliyor olması ve aynı sorgu içerisinden birden fazla çalıştırılabiliyor olmasıdır. Bu özelliğiyle CTE’ler daha çok recursive(Öz-yinelemeli) işlemler için geliştirilmiştir diyebiliriz. Örnek olarak hiyerarşik listeler için tercih edilir. Bu tür işlemler için geçici tablolar kullanılabiliyor olsa da CTE’ler daha iyi bir performans sağlar. Sadece çağrıldıkları anda oluşan bir yapıdır. CTE’ler yalnızca SELECT değil INSERT, UPDATE ve DELETE yapılarında da kullanılabilir. © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi WITH CTEİSMİ (Sütun ifadesi) ( Başlangıç Sorgusu UNION ALL ) SLECT CYEye Referans © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi WITH YüksekUrun(UrunID, UrunAdi,BirimFiyati) AS (   SELECT TOP 10 UrunID, UrunAdi,BirimFiyati   FROM Urunler   ORDER BY BirimFiyati ), DusukUrun(UrunID, UrunAdi,BirimFiyati) AS (   SELECT TOP 10 UrunID, UrunAdi,BirimFiyati   FROM Urunler   ORDER BY BirimFiyati DESC ) SELECT * FROM YüksekUrun UNION SELECT * FROM DusukUrun © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi CREATE TABLE [dbo].[Bolgelerim]( [BolgeID] [int] NOT NULL PRIMARY KEY, [BolgeAdi] [varchar](100) NOT NULL, [AltBolgeID] [int] NULL, [BolgeTuru] [varchar](20) NOT NULL, ) GO INSERT INTO dbo.Bolgelerim (BolgeID,BolgeAdi,AltBolgeID,BolgeTuru) VALUES(1, 'Türkiye', null, 'Ulke') VALUES(2, 'United States', null, 'Ulke') VALUES(3, 'Marmara ', 1, 'Bölge') VALUES(4, 'İstanbul', 3, 'Şehir') VALUES(5, 'Florida', 2, 'Eyalet') VALUES(10, 'Hollywood', 5, 'Şehir') VALUES(7, 'Bursa ', 1, 'Şehir') © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi WITH BolgeCTE AS ( --Aramanın kök kısmını burada oluşturduk SELECT BolgeID, BolgeAdi, AltBolgeID, BolgeTuru FROM Bolgelerim WHERE BolgeAdi = 'Türkiye' UNION ALL --Alt elemanlara da burada ulaşıyoruz SELECT b2.BolgeID, b2.BolgeAdi, b2.AltBolgeID, b2.BolgeTuru FROM Bolgelerim as b2 INNER JOIN BolgeCTE s ON b2.AltBolgeID = s.BolgeID ) --Türkiyedeki bölgelere ularak oradan şehir alanını sorguluyoruz SELECT * FROM BolgeCTE where BolgeTuru = 'Şehir' © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi DECLARE @ara varchar(40) set @ara='Türkiye'; WITH BolgeCTE AS ( --Aramanın kök kısmını burada oluşturduk SELECT BolgeID, BolgeAdi, AltBolgeID, BolgeTuru FROM Bolgelerim WHERE BolgeAdi = @ara UNION ALL --Alt elemanlara da burada ulaşıyoruz SELECT b2.BolgeID, b2.BolgeAdi, b2.AltBolgeID, b2.BolgeTuru FROM Bolgelerim as b2 INNER JOIN BolgeCTE s ON b2.AltBolgeID = s.BolgeID ) --Türkiyedeki bölgelere ularak oradan şehir alanını sorguluyoruz SELECT * FROM BolgeCTE where BolgeTuru = 'Şehir' © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi