Slayt 1 - Verivizyon

Transkript

Slayt 1 - Verivizyon
HAFTA
4
“Veritabanını Sorgulamak ve
SQL"
Yaşar GÖZÜDELİ
[email protected]
http://blog.verivizyon.com/ygozudeli
«BM364» Veritabanı
Uygulamaları
Konu Akışı
 Basit
Sorgular
 Tabloları Birlikte Sorgulamak ve Özetlemek
 İleri Veri Yönetim Teknikleri
www.verivizyon.com
2
Basit Sorgular










SELECT
Türetilmiş Sütun
Matematiksel Fonksiyonlar
WHERE ile Satır Filtrelemek
NULL ile değer kıyaslamak
Aralık Sorgulamak: BETWEEN
Sıralamak: ORDER BY
Joker Sorgular: LIKE
Karakter ve Tarih Fonksiyonları
Alt Sorgular


IN/NOT IN – EXISTS/NOT EXISTS
SOME/ANY/ALL
www.verivizyon.com
3
Kayıtları Seçmek

En Basit Seçme İşlemi:
SELECT alan1[,alan2,alan3,..... | *]
FROM tablo_ismi;
www.verivizyon.com
4
Sadece Bazı Sütunları Seçmek

Gerektiğinde bir tabloda yer alan sütunlardan sadece bir kısmı
seçilebilir
SELECT urunKod, urunad, ListeFiyat
 Gerektiğinde, tekrarlayan kayıtlar DISTINCT ile tek satıra
FROM
tblUrun
indirgenebilir:
SELECT DISTINCT LEFT(urunAd,4)
FROM tblUrun
www.verivizyon.com
5
Türetilmiş Sütunlar

Bazen, aritmetik işlemlerle sütunlardan ve sabitlerden
yeni sütunlar türetilebilir
SELECT urunKod,
urunAd, listeFiyat*KDVoran
FROM tblUrun
www.verivizyon.com
6
Aritmetik İşaretler
İşaret
Karşılık Aritmetik İşlem
+
Toplama
-
Çıkartma
*
Çarpma
/
Bölme
%
Mod (Bazı Sistemlerde MOD da kullanılır)
www.verivizyon.com
7
Sütuna Takma Ad Vermek
Sütun adı veya türetme tanımından sonra bir boşluk bırakıp takma ad
yazılabilir.
SELECT urunKod,urunAd, listeFiyat*KDVoran KDV
FROM tblUrun
 Sütun adı veya türetmeden sonra AS deyimi daha sonra takma ad
yazılabilir
SELECT urunKod,urunAd, listeFiyat*KDVoran AS KDV
FROM tblUrun
 Sütun adı veya türetme tanımından önce takma ad yazılıp = ile (normal
programlama dillerindeki atama işlemi) takma ad verilebilir.

SELECT urunKod,urunAd, KDV = listeFiyat*KDVoran
FROM tblUrun
www.verivizyon.com
8
Matematiksel Fonksiyonlar
Fonksiyon
Kullanım Amacı
Örnek
ABS (sayı)
Sayının mutlak değerini bulur.
SELECT ABS (-0.19)
ASIN (sayi)
Sinüs değeri verilen sayının Açı karşılığını bulur.
SELECT ASIN (1)
CEILING (sayı)
Ondalıklı sayıyı tavana yuvarlar.
SELECT
(9.501)
CEILING
DEGREES (radian)
Sayının derece karşılığını verir.
SELECT
(PI()/2)
DEGREES
EXP (sayi)
Sayının üssünü hesaplar.
FLOOR (sayi)
Ondalıklı sayıyı tabana yuvarlar.
SELECT FLOOR (9.501)
PI()
Virgülden sonra 16 hanelik pi sayısı
SELECT PI()
RADIANS (aci)
Verilen açının radyanını hesaplar
SELECT RADIANS (180)
RAND (baslama)
0-1 arasında yalancı rastsal sayı üretir. Baslama
değeri isteğe bağlıdır.
SELECT RAND (3)
ROUND (sayı, adet)
Basamak yuvarlamak için kullanılır. Verilen adet
kadar sondan basamak
yuvarlar.
SELECT
(9.501,-1)
SIN (Radyan)
Radyan cinsinden verilen açının Sinüsünü
hesaplar
SELECT SIN (PI()/2)
SQRT (sayi)
Verilen sayının karekökünü hesaplar
SELECT SQRT(4)
www.verivizyon.com
ROUND
9
WHERE ile Satır Filtreleme

Bazen sonuçta bütün satırların yer alması
istenmez=Selection
SELECT sutun-ismi1[,sutun-ismi2,..... | *]
FROM tablo_ismi
WHERE şart ifadeleri
www.verivizyon.com
10
Karşılaştırma İşaretleri
İşaret
Karşılığı
=
Eşittir
>
Büyüktür
<
Küçüktür
>=
Büyüktür veya Eşittir
(Büyük-Eşit)
<=
Küçüktür Veya Eşittir
(Küçük-Eşit)
<>
Eşit Değildir
!=
Eşit Değildir
LIKE
Metin karşılaştırma
operatörü
IS NULL
Bir değerin NULL olduğuna
bakmak için
IS NOT
NULL
Bir değerin NULL
olmadığına bakmak için
www.verivizyon.com
11
Birden Fazla Şartla Satır Süzmek

Birden fazla şart Mantıksal Operatörlerle yan yana getirilebilir
OPERATÖR
Ne zaman doğrudur?
NOT
Yanlış ise
AND
Her ikisi de doğru ise
OR
Herhangi biri doğru ise

Parantezler kaldırılırsa ne olur?
SELECT urunKod, urunAd FROM tblUrun
WHERE
(listeFiyat<100 OR listeFiyat>1000) AND urunKod>2700
www.verivizyon.com
12
Bay Doğru: XXX OR 1=1
www.verivizyon.com
13
NULL Karşılaştırma


SQL'de herhangi bir değerin NULL olup olmadığı IS operatörü ile
karşılaştırılır.
NOT ile kullanılabilir (IS NOT NULL)
SELECT sutunlar
FROM tablo-ismi
WHERE test-sutunu IS [NOT] NULL
www.verivizyon.com
14
Aralık Sorgulama
SELECT ifadesi
WHERE
sutun-ismi BETWEEN alt-sinir AND ust-sinir
SELECT urunKod, urunAd, ListeFiyat
FROM tblUrun
WHERE listeFiyat BETWEEN 500 AND 100;
www.verivizyon.com
?
15
Kayıtları Sıralamak

ORDER BY her zaman en sonda
SELECT sutun-ismi
FROM tablo-ismi
WHERE sartlar
.....
ORDER BY sutun1 [DESC|ASC][,sutun2 [DESC|ASC]…
SELECT urunKod,urunAd, listeFiyat*(1+KDVoran)
AS KDV
FROM tblUrun
WHERE listeFiyat<500
ORDER BY markaKod,
3
DESC
•Seçilmemiş bir sütuna göre sıralama yapılabilir!
www.verivizyon.com
16
Dönen Kayıt Sayısını Sınırlamak

İki yöntem:

TOP n ile en baştan n kayıt seçilir



SQL Server 2000'de sadece SELECT'lerde
Daha etkin
SET ROWCOUNT 100




Oturum Parametresi
SELECT dışında INSERT,UPDATE,DELETE ile de kullanılabilir
SET ROWCOUNT 0 (eski haline geri döndürmek için)
2005 destekler ama takip eden sürümlerde kaldırılabilir!!!
www.verivizyon.com
17
Baştan N kayıt
www.verivizyon.com
18
Karakter Karşılaştırmaları

Sabit olan string ifade ve
tarih 'string' şeklinde '
arasında verilir
www.verivizyon.com
19
LIKE Deyimi ve JOKER Karakterler

Joker karakterler sadece LIKE ile karşılaştırılırken kullanılabilir!
İşlevi
Joker
Karakter
%
Standart SQL'de birden fazla harf veya rakamın yerini
tutar.
_
Standart SQL'de bir tek harf veya rakam yerini tutar
[HARF]
Herhangi bir harf yerine gelebilecek harfleri belirtir.
[^HARF]
Herhangi bir harf yerine gelemeyecek harfleri belirtir.
[A-Z]
A ile Z arasıdaki harfleri ifade eder
www.verivizyon.com
20
İçinde geçen Karakteri Bulmak

İlk iki harfi A veya K olan
markaların listesi
www.verivizyon.com
21
Metinleri Ulamak

Metinler için + işareti ulama işlevini yerine getirir:
SELECT kullaniciKod,
isim + ' ' + soyad as kullanici
FROM tblKullanici
SELECT kullaniciKod,
isim + '''' + soyad as kullanici
FROM tblKullanici
WHERE isim='%yaşar%'
www.verivizyon.com
?
22
Karakter Fonksiyonları
Fonksiyon
Kullanım amacı
Örnek
CHAR (ASCIIKod)
ASCII kod'u verilen karakteri döndürür.
SELECT CHAR (39)
CHARINDEX
(bul, metin, baslangic)
Metin içerisinde bulunacak metni, baslangic'tan
itibaren arar. Bulursa yerini, bulamazsa 0
değerini döndürür.
SELECT CHARINDEX ('@', 'email@mail',
1)
LEFT (metin, n)
Metnin baştan n harfini alır
SELECT LEFT ('ilk üç harfi', 3)
LEN (metin)
Metinin uzunluğunu verir.
SELECT LEN ('çok uzun')
LOWER (metin)
Metni küçük harflere çevirir
SELECT LOWER ('BüYükKüçük')
LTRIM (metin)
Metnin başındaki beyaz ASCII karakterleri siler
SELECT TRIM ('başta boşluk var')
REPLACE(metin, bul, degistir)
Metnin içinde bulduğunun yerine, değiştirilecek
ifadeyi yerleştirir.
SELECT REPLACE ('takatukaları
takatukacıya takatukalat', 'taka',
'ayakkabı')
REVERSE (metin)
Metni, tersten döndürür
SELECT REVERSE ('tersten oku')
RIGHT (metin, n)
Metinin sonundan n harfini alır.
SELECT RIGHT ('son üç harf', 3)
RTRIM (metin)
Metnin sonundaki beyaz ASCII karakterleri siler
SELECT TRIM (sonda boşluk var ')
SUBSTRING (metin, basla, adet)
Metinin, başla ile verilen harfinden itibaren adet
kadar harfini verir.
SELECT SUBSTRING ('bir parça harf
almak', 5, 7 )
UPPER (metin)
Metni BÜYÜK harflere çevirir
SELECT UPPER ('BüYükKüçük')
www.verivizyon.com
23
IN ve NOT IN

Bir ifadenin eldeki bir grup veri içerisinde olup
olmadığına bakmak için kullanılır:
SELECT urunKod, urunAd,MarkaKod
FROM tblUrun
WHERE markaKod = 1 OR markaKod = 2 OR markaKod = 3
--- yerine
SELECT urunKod, urunAd,MarkaKod
FROM tblUrun
WHERE markaKod IN(1,2,3)
SELECT markaKod FROM tblMarka WHERE marka='vestel'
SELECT * FROM tblUrun
WHERE markaKod IN(
SELECT markaKod FROM tblMarka WHERE marka='vestel'
)
www.verivizyon.com
24
Çok Sonuç Döndüren Alt Sorgular


Doğrudan Matematiksel Karşılaştırma işaretleri ile bağlanamaz!
IN-NOT IN-EXISTS-NOT EXISTS ile bağlanabilir
SELECT urunKod, urunAd, listeFiyat
FROM tblUrun
WHERE markaKod
IN(SELECT markaKod FROM tblMarka WHERE MarkaKod<10)
 Karşılaştırma işaretleri ile bağlanmak için

{ANY-SOME | ALL } Kullanılabilir
SELECT urunKod, urunAd, listeFiyat
FROM tblUrun
WHERE markaKod
< ALL (SELECT markaKod FROM tblMarka WHERE
MarkaKod<10)
www.verivizyon.com
25
EXISTS ve NOT EXISTS

Bir alt sorgunun satır döndürüp döndürmediğini test
etmek için kullanılır
SELECT urunKod, urunAd, listeFiyat
FROM tblUrun
WHERE
IN (SELECT markaKod FROM tblMarka WHERE
markaKod EXISTS
= ANY
MarkaKod<10)
www.verivizyon.com
26
İlintili Alt Sorgular
SELECT urunKod, urunAd, listeFiyat
FROM tblUrun
WHERE EXISTS(
SELECT *
FROM tblSiparisDetay
WHERE tblSiparisDetay.urunKod=tblurun.UrunKod )
www.verivizyon.com
27
Türetilmiş Tablo
Alt sorgular hep WHERE veya SELECT'den sonra mı
kullanılır??
 bir sorgunun içerisinde başka bir alt sorgu, yeni
tablo değişkene aktarılıp buradan yeniden
sorgulanabilir
 En fazla olan markadan kaç adet ürün var?

SELECT MAX(grup.adet)
FROM (
SELECT markaKod, COUNT(*) as adet
FROM tblUrun
GROUP BY markaKod
) AS grup
www.verivizyon.com
28
Konu Akışı
 Basit
Sorgular
 Tabloları Birlikte Sorgulamak ve Özetlemek
 İleri Veri Yönetim Teknikleri
www.verivizyon.com
29
Ders :Tabloları Birlikte Sorgulamak ve Özetlemek
Klasik JOIN
 INNER JOIN
 OUTER JOIN

LEFT
 RIGHT
 FULL

CROSS JOIN
 GRUPSAL FONKSIYONLAR ve GRUPLAMAK

www.verivizyon.com
Tabloları Birlikte Sorgulamak



Normalizasyon kuralları ile parçalanan tablolardan bir tek rapor elde etmek
gerektiğinde JOIN kullanılır
En fazla 255 tablo bir defada JOIN edilebilir(SQL Server 2000)
Klasik JOIN=INNER JOIN
JOIN Türü
Açıklama
Klasik JOIN
WHERE cümleciği ile yapılan birleştirme. SQL Server, bu ifadeyi bir
INNER JOIN gibi ele alır.
INNER JOIN
İki tablo birlikte sorgulanırken, her iki tabloda da sadece uyuşan
kayıtlar sonuçta yeralabilir.
OUTER JOIN
İki tablo birlikte sorgulanırken, tablolardan herhangi birinde veya
sadece birinde yer alan kayıtları sorgulamak için kullanılır. LEFT,
RIGHT ve FULL olmak üzere 3 alt türden oluşur
CROSS JOIN
İki tablonun kartezyen çarpımını bulmak için kullanılır. Aslında WHERE
kısmında ilişki şartı yeralmayan Klasik JOIN de bir çeşit CROSS JOIN'dir.
www.verivizyon.com
Klasik JOIN


FROM'dan sonra iki veya daha fazla tablo adı
WHERE'de geçiş yapılacak sütunlar eşitlenir
SELECT tblUrun.urunKod, tblUrun.uruAd,
tblUrun.listeFiyat, tblMarka.Marka
FROM tblUrun, tblMarka
WHERE tblUrun.markaKod=tblMarka.markaKod
www.verivizyon.com
Tabloları Birlikte Sorgulamak-2
Ürün
Tablosu
Marka
Tablosu
Her bir
ürün ve
markası
SELECT U.urunKod, U.urunAd,U.ListeFiyat,M.Marka
FROM urun U INNER JOIN marka M ON M.MarkaKod=U.MarkaKod
www.verivizyon.com
Tabloları Birlikte Sorgulamak-3
OUTER
JOIN TIPI
Açıklama
TabloABC
LEFT
Soldaki tabloda yer alan kayıtlar, sağdaki
tabloda karşılıkları olmasa bile getirilirler
RIGHT
Sağdaki tabloda yer alan kayıtlar, soldaki
tabloda karşılıkları olmasa bile getirilirler.
Aslında LEFT JOIN ile aynıdır. Tek değişen,
tabloların ifadede geçiş sıralarının farklı
TabloDEF
1
3
2
4
3
1
4
3
1
3
2
olmasıdır.
FULL
Her iki tablodaki karşılıklı olarak eşit
satırı olmayan kayıtlar getirilirler. Yani
LEFT JOIN ile RIGHT JOIN'in bileşiminden
ibaret bir sonuç döndürür.
6
SELECT
tabloABC.sütun1,
FROM
tabloABC
soldaki tablo
www.verivizyon.com
tabloDEF. sütun2
LEFT JOIN
tabloDEF
sağdaki tablo
sonuçta
yeralmaz
CROSS JOIN
www.verivizyon.com
Tablo ve Sorguları Düşeyde Birleşirmek


İki tablo veya iki sorgu tek sorgu gibi yapılabilir
ALL kullanılırsa ortak veriler tekrarlar
SELECT ifadesi1
UNION [ALL]
SELECT ifadesi2

SQL Server 2005'den itibaren


INTERSECT
EXCEPT
www.verivizyon.com
Verileri Gruplamak
Gruplamalı Fonksiyonlar
 GROUP BY deyimi
 Gruplanmış Verileri Özetlemek

www.verivizyon.com
Gruplamalı Fonksiyonlar
Kullanım amacı
Fonksiyon
AVG (sutun-ismi)
Verilen sütun ismindeki değerlerin grup başı ortalamasını bulur.
COUNT (sutun-ismi|*)
Verilen bir sütuna veya bütün satırlara bakarak grup başı satır
sayısını hesaplar.
COUNT_BIG
ismi|*)
(sutun- COUNT fonksiyonundan farkı bigint sonuç döndürmesidir. Daha
fazla sayıda satırdan oluşan tablolarda kullanılabilir.
MAX (sutun-ismi)
Verilen sütundaki değerlerden, her bir grup için en yüksek olanları
bulur.
MIN (sutun-ismi)
Verilen sütundaki değerlerden, her bir grup için en düşük olanları
bulur.
SUM (sutun-ismi)
Verilen sütun ismindeki değerlerin grup başı toplamını bulur.
VARIANCE
ismi) æ
(sutun- Verilen sütundaki değerlerden, her bir grup için varyans hesabı
yapar
STDEV (sutun-ismi) æ
æ:
Verilen sütundaki değerlerden, her bir grup için standart sapmayı
hesaplar.
SQL Server Tarafından standardın dışında sağlanan fonksiyonları göstermektedir.
www.verivizyon.com
Gruplamalı Fonksiyonlar
Bütün ürünlerin en ucuz ürünü?
 Bütün ürünlerin en pahalı ürünü?
 Bütün ürünlerin ürün sayısı?
 Bütün ürünlerin ortalama fiyatı?
 Bütün ürünlerin TL fiyat toplamı?

www.verivizyon.com
Gruplamalı Fonksiyonlar
Her markanın en ucuz ürünü?
 Her markanın en pahalı ürünü?
 Her markadaki ürün sayısı?
 Her markanın ortalama fiyatı?
 Bütün ürünlerin en pahalısı?

www.verivizyon.com
GROUP BY ve JOIN Kullanımı
www.verivizyon.com
Soru
Liste fiyatı 50 birim'dan daha pahalı ürünler için her
bir marka grubunda ortalama birim fiyatı raporlayın.
Sonuçta, 16'dan daha az ürün içeren markalar
yeralmasın.
 Daha Fazla ürünü olan marka daha üstte yer alsın

www.verivizyon.com
Gruplanmış Verileri Özetlemek
CUBE deyimi, GROUP BY deyiminden sonra birden fazla sütun adı varsa, bu sütun
adlarının her birine ait toplamlarla birlikte, kombinasyonlarının da toplamlarını
bulur
www.verivizyon.com
Gruplanmış Verileri Özetlemek-2
• İçten dışa doğru toplam
hesaplayarak gider
• Neticede bir önceki örnekten
farklı olarak, her bir para
birimine ait toplam kaç adet
ürün bulunduğunu gösteren
satırlar yer almayacaktır.
www.verivizyon.com
GROUPING ile Özetleri Düzenlemek



GROUPING, CUBE veya
ROLLUP deyimi ile birlikte
kullanılan bir Gruplamalı
Fonksiyon'dur.
Bir satır, ROLLUP veya CUBE
deyimi tarafından türetilmiş
ise 1, türetilmemiş ise 0
değeri döndürür.
ROLLUP ile elde edilen
sonuçların daha anlaşılır
gösterilmesi
www.verivizyon.com
Seçilmiş Verileri Özetlemek
www.verivizyon.com
Sıralanmış Verileri Özetlemek

www.verivizyon.com
GROUP BY'dan
sonra gelen sütun
adı için COMPUTE
BY çalıştırılabilir!
Tabloları Birlikte Sorgulamak
Tabloya Takma Ad
 SELF JOIN
 INNER JOIN
 OUTER JOIN


LEFT, RIGHT,FULL
CROSS JOIN
 FARK/KESİŞİM/BİRLEŞİM BULMAK

www.verivizyon.com
48
Konu Akışı
 Basit
Sorgular
 Tabloları Birlikte Sorgulamak ve Özetlemek
 İleri Veri Yönetim Teknikleri
www.verivizyon.com
49
İleri Veri Yönetim Teknikleri
CTE ve Rekürsif Sorgular
 Rütbeleme Fonksiyonları
 Analitik Fonksiyonlar
 Veri Değişimini Yönetmek ve Cursor’ler

www.verivizyon.com
50
<NULL>
Hiyerarşik Veri Modeli(İlişkisel Domain)
Bilgisayar
Programlama
Veritabanı
Cocuk Kitaplari
İşletim Sistemleri
SQL Server 2000
SQL Server 2005
Access…
51
Hukuk….
Grafik…..
Common Table Expressions


SQL-99 standardının bir parçası
Genel olarak CTE kalıbı:
WITH <CTEismi> ( <sütun-listesi> )
AS
( <CTE>)
<SELECT|INERT|UPDATE|DELETE… FROM…




CTEismi>
Derived tabloya benzer, geçici bir resultset
Rekürsif veya rekürsif olmayan modda çalıştırılabilir.
Birkaç CTE aynı WITH cümleciği içerisinde bir T-SQL cümlesi
olarak tanımlanabilir.
Rekürsif değil iken:

Sorguyu Derived tablolar kullanarak daha rahat ve okunabilir yazmak mümkün
52
Rekürsif CTE


<CTE>, kendine referans içerdiğinde rekürsif olur.
Rekürsif modda CTE
(<rekürsif-olmayan SELECT>
UNION ALL
<SELECT CTEye referans>)


Tanımlama
Kendini çağırma işlemi, ikinci SELECT boş sonuç
Biriktirme
seçtiğinde sona erer
veya ifadenin sonuna

OPTION (MAXRECURSION 2);

Default 100 iterasyon
0 verilirse, iterasyon sınırı yok!

53
CTE'li Rekürsif Sorgulama
WITH ReyonCTE(reyonKod,reyonAd,AnaReyonKod)
AS(
SELECT reyonKod,reyonAd,AnaReyonKod
FROM tblReyon
WHERE anaReyonKod IS NULL
UNION ALL
SELECT cocuk.reyonKod,cocuk.ReyonAd, cocuk.AnaReyonKod
FROM tblReyon as cocuk JOIN ReyonCTE as ana
ON cocuk.anaReyonKod=ana.ReyonKod
)
SELECT * FROM ReyonCTE
--OPTION(MAXRECURSION 4)
54
Rütbeleme(Satır Sıralatma) Fonksiyonları

Sayı türetirler. Genelde bu sayı sıralamada
kullanılır.





ROW_NUMBER() :Kayıtlara artan satır numarası türetir
RANK(): Rütbeleme. Eşit değerli ise eşit bir sayı, atlanan
değerleri korur
DENSE_RANK():Ters Sırada, atlanan değerleri korumaz
NTILE(<expression>): n=SatirSayisi/GrupSayisi
verildiğinde sıradan n farklı grup türetir
Genel Sentaks
<rutbeleme fonksiyonu>
OVER([<parcalama cumlesi>]<order_by_cumlesi>)

SELECT ve ORDER BY cümlelerinde kullanılabilir
55
Rütbeleme Fonksiyonları
SELECT
RANK() OVER(ORDER BY sehir) as RANK,
DENSE_RANK() OVER(ORDER BY sehir) as DENSE_RANK,
ROW_NUMBER() OVER(ORDER BY soyad) as ROW_NUM,
NTILE(4) OVER(ORDER BY sehir) as NTILE_4,
soyad, sehir
FROM
Personel
ORDER BY sehir
56
Rütbeleme Fonksiyonları
Sonuç
RANK
DENSE_RANK
1
2
2
2
2
6
7
7
9
1
2
2
2
2
3
4
4
5
7
1
9
6
4
8
3
2
5
ROW_NUMBER
1 NTILE_4
1
1
2
2
3
3
4
4
Soyad
sehir
Leylagil
Burma
Surma
Kirko
Doğru
Peker
Davacı
Camcı
Furkan
Kırşehir
Mardin
Mardin
Mardin
Mardin
Rize
Sakarya
Sakarya
Tokat
57
Kayıtları Sayfalandırmak
SELECT urunKod,urunAd,listeFiyat
FROM tblUrun
ORDER BY urunKod
OFFSET 100 ROWS
FETCH NEXT 10 ROW ONLY
58
Analitik Fonksiyonlar
•
•
•
•
•
SQL-2003 ve SQL-2008
kayitlari okurken:
siralama,
gruplama
kiyaslama gibi ek işlevler
FOKSİYON
Açıklama(Belli bir
sütuna göre
sıralanmış kayıtlar
için)
LAG
bir önceki satıra
erişim sağlar.
LEAD
bir sonraki satıra
erişim sağlar.
FIRST_VALUE
İlk kaydın değerine
erişim sağlar
LAST_VALUE
İlk kaydın değerine
erişim sağlar
www.verivizyon.com
59
Yeni İlişkisel Operatörler:PIVOT
İsim-Değer Çiftlerini Sabitlemek-Açık Şema
urunKod
Ozellik
Deger
1
Numara
42
1
Renk
Kahve
2
Boy
32
2
Bel
27
2
Renk
Buz Mavi
1
Numara
40
SORU:
En alttaki satır da olsa idi,
PIVOT işleminin sonucu değişir miydi?
SELECT D.*
FROM tablo
PIVOT(MIN(Deger) FOR Ozellik
IN ([Numara],[Renk])) D
urunKod
Numara
Renk
1
42
Kahve
2
<null>
Buz Mavi
60
Yeni İlişkisel Operatörler: APPLY
ilKod
il
ilceKod
ilceAd
06
Ankara
56
Altındağ
06
Ankara
57
Çankaya
06
Ankara
58
Etimesgut
07
Antalya
80
Merkez-Antalya
07
Antalya
81
Akseki
08
Artvin
<null>
<null>
Sonuc
SELECT * FROM iller
CROSS APPLY
dbo.ilinIlceleri(ilKod)
OUTER
ilKod
ilKod
il
ilceKod
ilceAd
6
Ankara
56
Altındağ
57
Çankaya
58
Etimesgut
7
Antalya
8
Artvin
80
Merkez-Doğu Antalya
9
Aydın
81
Akseki ilinIlceleri(ilKod)
61
Veri Yönetimi ve Cursorler
Veri Eklemek
 Verileri Güncellemek
 Verileri Silmek
 Cursor'lerle Çalışmak

www.verivizyon.com
Veri Eklemek

Bir sorgunun sonucu yeni bir tabloda saklanabilir

Olmayan bir tabloyu oluşturup saklamak için
SELECT title_id,title,type
INTO #geciciKitap
FROM titles

Var olan bir tabloya eklemek için
INSERT INTO #geciciKitap
SELECT title_id,title,type
FROM titles
WHERE type='business' OR type='psychology' OR title_id
IN('BU2075','BU7832','MC2222','MC3021')
www.verivizyon.com
Veri Güncellemek



Aynı UPDATE cümlesinde sadece bir tek tablodaki veriler değiştirilebilir
Birden fazla tablodaki veriler birleştirilerek bir cümle kurulabilir!
En az bir defa satınalınmış ürünlerimize %2 zam yapalım
UPDATE tablo-ismi
SET sutun-ismi=deger|ifade
FROM tablo-ismi JOIN tablo2
ON birlestirme-ifadesi
WHERE ....
UPDATE tblUrun
SET listeFiyat=listeFiyat * 1.02
FROM tblUrun U JOIN tblSiparisDetay SD
ON SD.urunKod=U.UrunKod
UPDATE tblUrun U, tblSiparisDetay SD
SET U.listeFiyat=U.listeFiyat * 1.02
WHERE SD.urunKod=U.UrunKod
www.verivizyon.com
Verileri Güncellemek


Alt Sorgularla da başka tablolar üstünden şartlar koşarak veriler
güncellenebilir
Hiç satılmamış ürünlerin fiyatlarını %2 indirelim
UPDATE tblUrun
SET listeFiyat=listeFiyat * 0.98
WHERE NOT EXISTS(
SELECT *
FROM tblSiparisDetay
WHERE tblSiparisDetay.UrunKod=tblurun.urunKod
)
www.verivizyon.com
Verileri Silmek



Aynı DELETE ifadesinde sadece bir tablodaki veriler silinebilir
Aynı anda birden fazla tablo birleştirilerek şartlar kontrol edilebilir
Bugüne kadar hiç sipariş edilmemiş ürünlerden, fiyatları 10birim'in altında
olanları, silelim
DELETE
FROM tablo-ismi
FROM tablo-ismi JOIN tablo2
ON birlestirme-ifadesi
WHERE sartlar...
DELETE FROM tblUrun
FROM tblUrun U RIGHT JOIN tblSiparisDetay SD
ON SD.urunKod=U.urunKod
WHERE U.listeFiyat<10 AND SD.urunKod IS NULL
www.verivizyon.com
Verileri Silmek

Alt Sorgu ile Veriler Silinebilir

Access'de bu yolla silinebilir
DELETE FROM tblUrun U
WHERE NOT EXISTS(
SELECT *
FROM tblSiparisDetay SD
WHERE SD.urunKod=U.urunKod
)
AND U.listeFiyat<10
www.verivizyon.com
Cursorler'le Çalışmak

Neden Cursor Gerekir?




Bir resultset'te sadece o an için bulunulan pozisyondaki
satırda veya takip eden satırlarda yer alan verilere erişmek
Bir sogu sonucunda dönen değerlerden her bir satırı ayrı
ayrı değerlendirip duruma göre veri değiştirmek
Trigger veya Stored Procedure'lerin bir resultset'e satır
satır erişimini sağlamak
Ortakzamanlı çalışmada, diğer kullanıcılar tarafından
yapılan değişikliklerin görünebilirlik seviyesini ayarlamak
için
www.verivizyon.com
Cursorler'le Çalışmak
1.
2.
3.
4.
5.
Cursor Değişken Tanımlama: Bir SELECT ifadesi için, bir
değişken tanımlanır ve bu seçme işleminin sonucunu tutacak
bir Cursor tanımlanmış olur.
Cursor'ü Açma: Cursor tanımlama aşamasında belirtilen
SELECT işlemi gerçekleştirilir ve Cursor ilk satırı gösterecek
şekilde ayarlanmış olur.
Satır satır erişme ile ilgili işlemler: FETCH deyimi kullanılarak,
bir döngü yardımıyla satırlara erişilebilir. Bu aşamada
değişiklik veya okuma yapılması mümkündür.
Cursor'ü Kapatma: İşi biten Cursor CLOSE deyimi ile kapatılır.
Ancak Cursor halen tanımlıdır. Gerektiğinde yeniden açılabilir.
Cursor'ü Hafızadan silme: DEALLOCATE deyimi ile Cursor
tanımı da hafızadan silinebilir.
www.verivizyon.com
Yeni Satır Var Mı?
FETCH cursorIsmi INTO degiskenListesi
İfadesi ile bir satırın içeriği değişkenlere aktarılır
 Hemen arkasından @@FETCH_STATUS değişkeni okunursa,
yapılan işlemlere bakılır

0
Bir önceki FETCH komutu başarı ile gerçekleştirlidi.
-1
Bir önceki FETCH komutunda bir hata ile karşılaşıldı.
-2
Resultset’teki tüm kayıtlar bittiği için en sona gelindi,
daha fazla kayıt yer almıyor. (end of resultset)
www.verivizyon.com
Örnek Cursor
DECLARE @urunKod INT, @urunAd
VARCHAR(500);
DECLARE cSonuc CURSOR
FOR
SELECT urunKod,urunAd
FROM tblUrun;
OPEN cSonuc;
FETCH NEXT FROM cSonuc INTO
@urunKod,@urunAd
PRINT @urunAd;
WHILE @@FETCH_STATUS=0
BEGIN
FETCH NEXT FROM cSonuc INTO
@urunKod,@urunAd
PRINT @urunAd;
END
CLOSE cSonuc;
DEALLOCATE cSonuc;
www.verivizyon.com
71
Ödev

8-9.10.Unitelere ait bütün «Veritabanı Atölye»
alıştırmaları
www.verivizyon.com
72
Sonuç
Verileri sorgulamak, veritabanları ile iletişimimizi
artırır.
 Verileri değiştirmek ve yönetmek için bir çok ifade
mevcuttur.

www.verivizyon.com
73

Benzer belgeler