You are on page 1of 42

1

SQL DERS NOTLARI I. SQL DEYMLER SQL deyimleri veri tabanlar zerinde eitli ilemleri yerine getirirler. Veri tabanndan sorgulama yapmak iin SELECT, ekleme yapmak iin INSERT gncelleme yapmak iin UPDATE, silme yapmak iin DELETE, yeni tablo oluturmak iin CREATE TABLE gibi komutlara sahiptir. Bu komutlar ilevlerine gre u ekilde kategorilendirilir: DDL (Data Definition Language): Veri tanmlama deyimleri. DML (Data Manuplation Language) : Veri dzenleme dili. DCL (Data Control Language): Veri kontrol dili.

A. DDL (DATA DEFNT CREATE DEYM ON LANGUAGE) DEYMLER DDL deyimleri veri taban zerinde nesne yaratmak iin kullanlrlar. En yaygn kullanlan DDL deyimleri unlardr: CREATE, ALTER, DROP CREATE deyimi tablo ve view gibi bir veri taban nesnesi yaratmay salar. Tablo Yaratmak: Veritaban zerinde bir tablo yaratmak iin CREATE deyimi kullanlr. Yaps: CREATE <tablo ad>

rnek: CREATE TABLE Musteri (

mus_id char(4) NOT NULL mus_ad varchar(40) NULL, ili varchar(20) NULL, ulke char(2) NULL, adres varchar(30) NULL

) NOT: Char, varchar, integer, numeric gibi szckler tablo alanlarndaki temsil edilecek verinin trn belirtir. SQL'de SMALLINT, VARCHAR, DECIMAL(x,y), FLOAT(x;y), DATE, LOGICAL, TIME, TIMESTAMP, GRAPHIC(n) gibi alan veri trleri vardr. rnek: CREATE TABLE personel ( Sskno Integer, Adi Varchar(20) not null, Soyadi Varchar(20) not null, Departman integer ) NOT: Bu dokmanlar Faruk ubuku tarafndan hazrlanmtr. Btn haklar sakldr. Ticari olarak kullanlamaz. Baknz: www.farukcubukcu.com Ad geen ve telif hakl olan rnler bilgi amal olarak kullanlmtr.

2
ALTER DEYM Daha nce yaratlm nesnenin deitirilmesini salar. rnei bir tablonun tasarmn deitirmek gibi. rnek: ALTER TABLE Musteri ADD tel varchar(20) NOT NULL Yukardaki deyimde mteri tablosunun alanlarna tel adl bir alan daha eklenmitir. DROP DEYM Bir nesnesin silinmesini salar. rnek: DROP TABLE MUSTERI Mteri tablosunun verilerini ve tabloyu siler. B. DML (DATA MANIPULATION LANGUAGE) DEYMLER Veri taban iindeki verileri elde etmek ve deitirmekle ilgili SQL deyimleridir. 1. 2. 3. 4. SELECT INSERT UPDATE DELETE

SELECT DEYM Veri tabanndaki verilere erimenin, dier bir deyile onlar grmenin ya da onlar elde etmenin en sk kullanlan yntemidir. Genellikle bir ya da daha ok tablonun btn alanlar ya da belli alanlar iin SELECT deyimi yazlr. Temel Yaps: SELECT [ALL] [DISTINCT] liste [INTO yeni tablo] FROM [tablo] [WHERE ifade] [GROUP BY ifade] [HAVING ifade] [ORDER BY ifade] [COMPUTE ifade] Seeneklerin Anlamlar:

3
ALL szc btn satrlarn sonu listesinde grnmesini salar. DISTINCT szc sadece tek olan (unique) kaytlarn sonu listesinde yer almasn salar. liste parametresi veriden seilecek kolonu (stunu) belirtir. INTO szc yeni bir tablo yaratmay salar. yeni tablo parametresi sorgu sonucu yaratlacak tabloyu belirtir. FROM szc belli bir tablonun seilmesini salar. Tablo parametresi ise sorgulanacak olan tablo ya da tablolar, grnmleri belirtir. WHERE bir koulu belirterek sadece o kuula uyan kaytlarn seilmesini salar. GROUP BY Kaytlarn gruplanmasn salar. HAVING deyimiyle de ara toplamlarn alnmasn salar. HAVING szc de kaytlarda kstlama yapar ancak hesaplamay etkilemez.

ORDER BY szc ise belirtilen kolona gre listelenen kaytlar sralamay salar. Sralama artan (ASC) ya da azalan (DESC) olabilir COMPUTE szc ise hesaplama yapar. Tipik olarak SUM, AVG, MIN, MAX, COUNT gibi fonksiyonlar kullanarak hesaplama yapar. rnek: SELECT * FROM musteri Yukardaki deyim ile musteri tablosundaki btn bilgiler elde edilir. SELECT deyiminin ardndan kullanlan * (asterisk) iareti btn kaytlar anlamna gelir. Bu deyimin ayns (ayn sonucu vereni) u ekilde de yaplabilir: rnek: SELECT kod, ad, soyad, grup, il, bakiye FROM musteri Mteri tablosu: kodu 1 2 3 4 5 6 Ad Ahmet Aye Mehmet Hseyin Nuri Fatma Soyad Uzun Ylmaz Ylmaz Uzun Gezer rnek grup ithal ithal ihra ihra ithal ihra il ZMR ANKARA ANKARA ZMR ZMR STANBUL bakiye 300000 400000 100000 600000 900000 300000

Sorgunun sonucu: 1 2 3 4 5 6 Ahmet Aye Mehmet Hseyin Nuri Fatma Uzun Ylmaz Ylmaz Uzun Gezer rnek ithal ithal ihra ihra ithal ihra ZMR ANKARA ANKARA ZMR ZMR STANBUL 300000 400000 100000 600000 900000 300000

4
SELECT deyimi ile sadece belli kolonlar (alanlar) da seilebilir: ARAMA : Tablo: Arama Kriterleri: Karlatrma operatrleri Aralk belirtme Liste String karlatrma Bilinmeyen deerler Koullarn birletirilmesi Olumsuzlatrma (=, >, <, >=, <>, !=, !<, !> BETWEEN ve NOT BETWEEN IN ve NOT IN LIKE ve NOT LIKE IS NULL ve IS NOT NULL AND, OR NOT

RNEK: SELECT * from musteri WHERE bakiye BETWEEN 100000 AND 3000000 Ayn anlamda: SELECT * from musteri WHERE bakiye <= 100000 AND>= 3000000 RNEKLER: SELECT * FROM MUSTERI WHERE borcu BETWEEN 100 AND 2000 AND grup='zel' Yukardaki sorgulamada grubu 'zel' olan ve ayrca da borcu deerinin 100 ile 200 arasnda olan listelenir. ARTMETK LEMLER Aritmetik ilemleri gerekletirmek iin belli operatrler kullanlr: OPERATRLER + / * AIKLAMALARI Toplama , karma Blme , arpma

SELECT borcu, borcu*2 FROM MUSTERI VERLER SIRALAMAK SELECT deyimi ile elde edilen veriler istenirse sralanabilir. Sralama belirtilen bir ya da daha fazla kolona gre yaplr. Bunun dnda sralama ASC (ascending-artan) ya da DESC (descending-azalan) olarak belirtilebilir. Kullanm Biimi: SELECT kolon_listesi ORDER BY kolon ad ASC ya da DESC ORDER BY szc ise verilerin istenilen alan gre sral olarak listelenmesini salar. SELECT * FROM musteri ORDER BY ad Yukardaki deyim ile mteri tablosundaki btn kaytlar ad alanna gre sral olarak listelenirler. GRUPLANDIRMA LEMLER

5
Gruplama seenekleri tablo satrlarnn belli alanlarna gre gruplandrlmasn salar. GROUP BY szc ise yaplan bir gruplandrma ilemine gre listeleme salar. rnek: SELECT grup, sum(bakiye) FROM musteri GROUP BY grup Yukardaki rnekte msteri tablosundaki bakiye alan grup kodu baznda toplanr. GROUP BY ile yaplan gruplandrma (alt toplamlar) ilemi iinde ayrca HAVING szc kullanlarak bir koul da verilebilir. SELECT grup, sum(bakiye) FROM musteri GROUP BY grup HAVING il = 'ZMR' Yukardaki deyim ile mteri tablosundaki btn kaytlarn bakiye bilgiler gruplarna gre ara toplam alnr, bir de il bilgisine gre filtrelenir. NOT: Gruplama yaplmayan he stun GROUP BY deyiminde kullanlmas gerekir: rnek: SELECT PRODUCTID, CATEGORYID, SUM (UNITPRICE) FROM PRODUCTS GROUP BY PRODUCTID, CATEGORYID COMPUTE SZC COMPUTE szc toplama fonksiyonunun kullanarak query sonucunda bir toplam satr retir. COMPUTE BY szc ise ek toplam satrlar yaratr. Kullanm Biimi: COMPUTE fonksiyon (kolon_ad) rnek: Sipari tablosu: tarih 1/1/1999 2/1/1999 2/1/1999 2/1/1999 3/1/1999 2/2/1999 Mkodu 1 1 2 3 3 1 rn X-TV X-TR X-TV X-KT X-KT X-TV adet 10 10 15 10 20 22 fiyat 100000 100000 100000 200000 150000 400000

SELECT rn, adet FROM siparis ORDER BY rn COMPUTE SUM(adet) Yukardaki rnekte adet kolonunun toplam alnr.

6
Sonucu: rn X-KT X-KT X-TR X-TV X-TV X-TV adet 10 20 10 10 15 22 Sum =================== 87 INSERT DEYM Tabloya veri girmek iin kullanlr. INSERT INTO <tablo ad> (stunlar listesi) VALUES (deerler listesi) RNEK: INSERT INTO CARIANA (kodu, adi, grubu, adresi) VALUES ('600', 'FARUK', 'A', '76 sokak no 5') rnek: INSER INTO deyimi ile bir tabloyu dier bir tablodan doldurmak: use ornek INSERT INTO cariyedekf (kodu, adi, grubu, adresi) (SELECT kodu, adi, case grubu

when 'A' THEN 'ITHAL' when 'B' THEN 'YERL'

7
ELSE 'DER' end, adresi from cariana) UPDATE DEYM: Tablodaki verileri gncellemek iin kullanlr. Genellikle gncelletirilecek satr belirtmek iin WHERE szcyle kullanlr. Mevcut bir tablodaki satrlar deitirmek iin UPDATE deyimi kullanlr. UPDATE deyimi sadece bir tablo zerinde kullanlmaldr. UPDATE deyimi ile SET ve WHERE szc kullanlr. SET szc deitirilecek kolonlar ve deerleri belirtir. WHERE szc ise deitirilecek satr belirtir. Kullanm biimi: UPDATE tablo SET kolon = ifade WHERE arama_koulu rnek: Aadaki rnekte fiyat deerini %10 artrr. UPDATE siparis SET fiyat= fiyat * 1.1 rnein bir kayd dzeltmek istersek ; UPDATE Musteri SET Ad = 'Nuri Ylmaz' WHERE kod='1'; rnein tm musterilerin bakiyesini %10 artrmak istediimizde; UPDATE Musteri SET bakiye=bakiye*1.1; DELETE DEYM Bir tablodaki verileri silmek iin DELETE komutu kullanlr. rnein renci tablosundaki tm verileri silmek iin; DELETE * from musteri; Tabloda, bakiyesi 1000'den kk olan mterilerin satrlarn silmek iin: DELETE * FROM musteri WHERE bakiye <=1000

8
Kullanm biimi: DELETE tablo WHERE arama_koulu rnek: Tablodan satr silmek Aadaki rnekte mteri tablosundan 'B' grubuna sahip olan mteriler silinir. DELETE musteri WHERE grubu = 'B' C. DCL (DATA CONTROL LANGUAGE) DEYMLER Veritabanndaki kullanc haklarn dzenlemek iin kullanlan deyimlerdir. rnein GRANT, DENY, REVOKE gibi. rnek: USE Northwind GRANT SELECT ON Stok TO PUBLIC NOT: Bu dokmanlar Faruk ubuku tarafndan hazrlanmtr. Btn haklar sakldr. Ticari olarak kullanlamaz. Baknz: www.farukcubukcu.com Ad geen ve telif hakl olan rnler bilgi amal olarak kullanlmtr. GRANT DEYM Aadaki rnek Aye adl kullanc veritaban ve tablo oluturma izni verilir: GRANT CREATE DATABASE, CREATE TABLE TO AYE GZDEN GERME

1. SQL deyimleri hangi gruplara ayrlr. 2. SELECT deyiminin kullanm ekillerini aklaynz? 3. INSERT deyiminin amac nedir? 4. UPDATE deyiminin amalar nelerdir? I. SQL FONKSYONLARI SQL Server'da Fonksiyonlar, hesaplamalarda ve zellikle sistem hakknda bilgi almada yaygn olarak kullanlan aralardr. Transact-SQL (T-SQL) programlama dilinde deiik kategorilerle adlandrlan fonksiyonlar vardr. Bunlardan en yaygn veriler zerinde ilem yapan toplama ya da gruplama olarak adlandrabileceimiz aggregate fonksiyonlardr. A. GRUPLAMA FONKSYONLARI

9
Gruplama (aggregate) fonksiyonlar bir dizi deer zerinde hesaplama yaparlar ve bir sonu deer dndrrler. Toplama ya da gruplama fonksiyonlar olarak adlandrabileceimiz bu fonksiyonlar genellikle GROUP BY deyimi ile kullanlrlar. Gruplama fonksiyonlar aadaki ifadeler iinde kullanlabilirler. SELECT deyiminin listesinden (bir subquery olarak) Bir COMPUTE ya da COMPUTE BY szc ile. Bir HAVING szc ile.

Transact-SQL programlama dilinde u aggregate fonksiyonlar kullanlr: AVG COUNT GROUPING MAX MIN SUM STDEV STDEVP VAR VARP

NOT: Bu dokmanlar Faruk ubuku tarafndan hazrlanmtr. Btn haklar sakldr. Ticari olarak kullanlamaz. Baknz: www.farukcubukcu.com Ad geen ve telif hakl olan rnler bilgi amal olarak kullanlmtr.

AVG (T-SQL) Fonksiyonu Bir grup iindeki deerlerin ortalamasn dndrr. Null deerler dikkate alnmaz. Kullanm Biimi: AVG([ALL | DISTINCT] ifade) Argmanlar: ALL Ortalama fonksiyonunu btn deerlere uygular. DISTINCT lemin her tek deer iin uygulanacan belirtir. Dier bir deyile tekrar eden deerlerin yerine birisi kullanlr. fade : Saysal bir deeri olan ifade ya da kolon ad. rnek: Aadaki rnekte sat miktarlar toplanmakta ve ortalamas alnarak iki ayr sonu deeri verilmektedir: USE Northwind

10
GO SELECT AVG(quantity), SUM(quantity) FROM [Order Details] GO COUNT (T-SQL) Fonksiyonu Bir grup iindeki eleman saysn verir. Kullanm Biimi: COUNT({[ALL | DISTINCT] ifade] | *}) Argmanlar: ALL Fonksiyonunu btn deerlere uygular. DISTINCT lemin her tek deer iin uygulanacan belirtir. Dier bir deyile tekrar eden deerlerin yerine birisi kullanlr. fade :Bir ifade ya da kolon ad. * Bir tablodaki btn satrlarn saysn dndrmek iin kullanlr. COUNT(*) herhangi bir paratmetre ile kullanlmaz ve DISTINCT ile kullanlmaz. COUNT(*) ile null ve tekrar eden deerler dahil btn elemanlar saylr. rnek: Aadaki rnekte rnler tablosundaki rnler saylr. DISTINCT ile tekrara izin verilmez. USE Northwind GO SELECT COUNT(DISTINCT productname) FROM products GO MAX (T-SQL) Fonksiyonu: fade iindeki maksimum deeri dndrr. Kullanm Biimi:

11
MAX([ALL | DISTINCT] ifade) Argmanlar: ALL

Fonskiyonunu btn deerlere uygular. MIN (T-SQL) FOnksiyonu fade iindeki minimum deeri dndrr. Kullanm Biimi: MIN([ALL | DISTINCT] ifade) Argmanlar: ALL Fonskiyonunu btn deerlere uygular. rnek: Aadaki rnekte en kk sat adedi elde edilmektedir: USE Northwind GO SELECT MIN(quantity) FROM [Order Details] GO SUM Fonksiyonu Deerlerin toplamlarn verir. SUM fonksiyonu sadece saysal alanlarda kullanlr. Kullanm Biimi: SUM ([ALL | DISTINCT] ifade) Argmanlar: ALL Toplama (aggregate) fonksiyonunu btn deerlere uygular. ALL seenei varsaym olarak kullanlr. DISTINCT

12
SUM fonksiyonunu tek deerlerin (unique) toplamn vermesini salar. fade Bir sabit, bir kolon, fonksiyon ya da bir aritmetik ilem. rnek: USE pubs GO -- Satr toplamlar SELECT type, price, advance FROM titles ORDER BY type COMPUTE SUM(price), SUM(advance) BY type B. TARH VE ZAMAN FONKSYONLARI (T-SQL) Bu fonksiyonlar tarih (date) ve zaman (time) zerinde ilemler yapmay salar. Tarih ve zaman fonksiyonlar unlardr: DATEADD DATEDIFF DATENAME DATEPART DAY GETDATE MONTH YEAR CONVERT

DATEADD Belli bir tarihin zerine deer eklenerek yeni bir tarih deeri retir. Kullanm biimi: DATEADD ( tarihksm, say, tarih) Argmanlar: Tarih ksm Tarih Paras Year Quarter Month Dayofyear Day Week Hour Minute Ksaltmas yy, yyyy qq, q mm, m dy, y dd, d wk, ww hh mi, n

13
Second Millisecond ss, s ms

Say: Tarih ksmn artrmak iin kullanlan deer. Tarih: Tarih deerini dndren tarih bilgidi. rnekler: Yayn tarihinin 30 gn sonras: USE pubs GO SELECT DATEADD(day, 30, pubdate) FROM titles GO rnek: Son on gn iinde yaplan sipariler: SELECT ord_num, ord_date FROM sales WHERE (ord_date >= DATEADD(day, -10, GETDATE())) DATEDIFF ki tarih arasndaki gn saysn verir. Kullanm: DATEDIFF ( Tarih paras, balang tarihi, biti tarihi) Argmanlar: Tarih paras Tarih Paras Year Quarter Month Dayofyear Day Week Hour Minute Second millisecond Ksaltmas yy, yyyy qq, q mm, m dy, y dd, d wk, ww hh mi, n ss, s Ms

rnek: u anki tarih ile yayn tarihi arasndaki fark: USE pubs

14
GO SELECT DATEDIFF(day, pubdate, getdate()) FROM titles GO DATEPART (T-SQL) Belirtilen tarihin istenen parasna karlk olarak bir tamsay dndrr. Kullanm Biimi: DATEPART(tarihparas, tarih) Argmanlar: Tarih paras: Tarih bilgisinin bir ksmn ifade eden bilgi. Tarih blm year quarter month dayofyear day week weekday hour minute second millisecond Ksaltma yy, yyyy qq, q mm, m dy, y dd, d wk, ww Dw Hh mi, n ss, s Ms

rnek: Aadaki rnekte u anki tarihin karlk geldii ay ad ve ay numaras bulunmaktadr: SELECT GETDATE() Tarihi verir: SELECT DATEPART(month, GETDATE()) DAY (T-SQL) Bir tarih bilgisinin gn ksmn verir. Kullanm Biimi: DAY(tarih) Argmanlar: Tarih datetime ya da smalldatetime tarih bilgisi. Aadaki rnekte verilen tarihin gn ksm verilmektedir: SELECT DAY('26/03/1999') AS 'Gn' GO Sonu: Gn -----------26 Ay verir:

15
MONTH (T-SQL) Bir tarih bilgisinin ay ksmn verir. Kullanm Biimi: MONTH(tarih) Argmanlar: Tarih datetime ya da smalldatetime tarih bilgisi. Aadaki rnekte verilen tarihin ay ksm verilmektedir: SELECT MONTH('26/03/1999') AS 'Ay' GO Sonu: Ay -----------03

YEAR (T-SQL) Bir tarih bilgisinin yl ksmn verir. Kullanm Biimi: YEAR(tarih) Argmanlar: tarih D. KARAKER FONKSYONLARI String (karakter) alanlar ilemek iin yaygn kullandmz fonksiyonlar bu alana girer. Transact-SQL dilinde kullanlan baz karakter fonksiyonlar unlardr: 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. ASCII CHAR CHARINDEX DIFFERENCE LEFT LEN LOWER LTRIM NCHAR REPLICATE REVERSE SUBSTRING QUOTENAME STUFF REPLACE STR SOUNDEX PATINDEX SPACE

16
20. 21. 22. 23. RIGHT RTRIM UPPER UNICODE

ASCII : Bir karakter ifadenin en soldaki deerinin ASCII kodunu dndrr. Kullanm: ASCII ( karakter ifade) Karekter ifade char ya da varchar trndedir. Dndrd tr: Int rnek: Bizim Ev cmlesinin btn karakterlerinin ASCII deerini dndrr: SET TEXTSIZE 0 SET NOCOUNT ON -- deiken olutur. DECLARE @konum int, @karakter char(15) -- deikenlere ilk deer ver. SET @konum= 1 SET @karakter= 'Bizim Ev' WHILE @konum<= DATALENGTH(@karakter) BEGIN SELECT ASCII(SUBSTRING(@karakter, @konum, 1)), CHAR(ASCII(SUBSTRING(@karakter, @konum, 1))) SET @konum= @konum + 1 END SET NOCOUNT OFF GO CHARINDEX Bir karakter dize iinde belirtilen bir ifadenin (karakterin) balang konumunu dndrr. Kullanm: CHARINDEX ( ifade1, ifade2[ , balang konumu] ) fade1: aranacak karakterleri belirtir. fade2: fade1'deki karakterlerin aranaca karakterleri belirtir. Balang konumu ise aramann balanaca konumu belirtir. Dndrd tr: Int fadelerden birisi NULL ise CHARINDEX fonksiyonu NULL deerini dndrr. fade1, fade2 iinde bulunamazda 0 deeri dner. rnek: ADI alannda BOYASI szcnn balad konumu dndrr. SELECT CHARINDEX('BOYASI', adi) FROM urun

-- arama iin balangk konumu belirtmek istersek

17
SELECT CHARINDEX('BOYASI', adi, 5) FROM urun Yalnzca adlar listesi: select left (adi,charindex(' ', adi)) from cariana LEFT Bir karakter dizesinin sol taraftan belirtilen say kadar keser. Kullanm: LEFT ( karakter dize, tarmsay) rnek: Adlarn soldan be karakteri: USE ornek GO SELECT LEFT(adi, 5) FROM cariana ORDER BY kodu GO LEN Dize verinin uzunluunu dndrr. Kullanm: LEN ( karakter dize) rnek: Ad alannn uzunluu:

SELECT LEN(adi) AS 'Uzunluk' FROM cariana use ornek select substring (adi,charindex(' ',adi)+1,(len(adi)-charindex(' ',adi))) from cariana -- soyadn ayrmak LTRIM nndeki boluklar siler. Kullanm: LTRIM ( karakter dize) RIGHT Belirtilen dizenin sa tarafndan keser. Kullanm: RIGHT ( karakter dizesi, tamsay) Arguments rnek: Ad alann salan 10 karakteri: SELECT RIGHT(adi, 10) FROM cariana RTRIM Karakter dizesinin arkasndaki boluklar kaldrr.

18
Kullanm: RTRIM ( karakter dize) rnek: Bir alan gncelleme: update deneme set alan1 = rtrim(alan1) + rtrim('a') STUFF Belirtilen uzunluktaki karakterleri siler ve yerine belirtilen dier karakterleri ekler. Syntax : STUFF ( karaker dize, balang, uzunluk, karakter dize) rnek: use ornek SELECT STUFF(tel, 7, 1, '8') from cariana -- telefon numarasnda 7 karakteri 9 ile deitirmek SUBSTRING Bir karakter dizesinin iinden belli karakterleri seer. Kullanm: SUBSTRING ( karakter dize, balang, uzunluk) rnek: Ad alannn iinde nc karakter balaym 4 tane karakteri dndrmek: SELECT SUBSTRING(adi, 3, 4) FROM cariana Ad soyad alanndan soyadn ekmek: select substring (adi,charindex(' ',adi)+1,(len(adi)-charindex(' ',adi))) from cariana GZDEN GERME 1. SQL Dili fonksiyonlarnn snflarn aklaynz. 2. Bir alann soldan karakterini semek iin hangi fonksiyonlar kullanabiliriz.

I. SQL DEYM BLOKLARI SQL deyimlerini iletirden bir grup deyimi bir arada iletmek gerekebilir. Bu olanak deyim bloklaryla yaplr. Dier bir olanak da IF, CASE ve WHILE gibi hem blok olarak hem de blok olmadan iletilecek deyimleri belli koullara balamaktr. A. BEGIN...END BEGIN ve END deyimleri bir grup SQL deyimini bir blok iinde toplamay salar. rnein IF deyimi ile yalnzca bir deyimin iletilip iletilmemesi snanrken, BEGIN ve END blou ile bir grup deyimin altrlp altrlmamas salanr. rnek: WHILE (SELECT AVG(adet) FROM titles) < 30 -- dng balat BEGIN END BEGIN ve END deyimleri genellikle u durumlarda kullanlr. WHILE ile dng yapldnda. Bir CASE fonksiyonunun blok deyimi iermesi durumunda. UPDATE siparis SET adet= adet* 2

19
IF ve ELSE deyiminde. B. DENETM DEYMLER SQL dilinde programlama dilleri kadar olmasa da program akn kontrol etmek iin deyimler ve yaplar vardr. Bunlarn banda IF-ELSE, CASE ve WHILE yaps gelir. IF...ELSE Bir deyimin iletilmesini belli bir koula balar. Kullanm: IF ifade { deyim } [ ELSE { deyim} ] rnek: Adet ortalamasnn 20'den kk olmas durumunda altrlacak deyimler: IF (SELECT AVG(adet) FROM siparis) < 20 BEGIN --ilemler END ELSE BEGIN --ilemler END CASE: Bir deere gre daha fazla alternatifi yerine getirmeyi salar. Kullanm biimi: CASE deer WHEN deer THEN ilem WHEN deer THEN ilem ELSE ilem END

Tablodan Aktarma: INSERT INTO yenitablo (alanlar..) SELECT (alan1, alan2, alan3, CASE alan4 WHEN 'A' THEN '1' WHEN 'B' THEN '2' ELSE '3' END,

20
alan5 FROM eskitablo WHERE isdate (tarih) <> 0 rnek: Tablolar arasnda aktama: NSERT NTO KAML1 (KODU, AD, GRUBU, ADRES) SELECT KODU, AD, (CASE GRUBU WHEN 'A' THEN 'EMEKLI' WHEN 'B' THEN 'TERHIS' END) ,ADRES FROM KAML2 WHILE SQL deyimlerinin dng iinde yinelenmesini salar. WHILE ile belirtilen dng koulu yerine getirildii srece deyimler yerine getirilir. Kullanm: WHILE ifade { deyim ya da blok} [ BREAK ] { deyim ya da blok} [ CONTINUE ] rnek: Sat adetleri 50 oluncaya kadar adet alannn artr. WHILE (SELECT AVG(adet) FROM siparis) < 50 BEGIN UPDATE siparis SET adet= adet* 2 SELECT MAX(adet) FROM siparis IF (SELECT MAX(adet) FROM siparis) > 50 BREAK ELSE CONTINUE END PRINT 'adet deeri byk'''

BREAK ve CONTINUE kullanmadan:

21
WHILE (SELECT AVG(adet) FROM siparis) < 50 BEGIN UPDATE siparis SET adet= adet* 2 END PRINT 'adet deeri byk''' BREAK ve CONTINUE kullanmadan: GZDEN GERME 1. SQL deyimlerini neden bir blok haline getiririz? DERS 4: VIEW KULLANIMI Amalar: VIEW oluturmay ve kullanmn aklamak. I. VIEW NEDR? Tablolardaki verilere erimenin bir dier yolu da view'ler gelitirmektir. View'ler tablolarn belli kolonlarn listelendii ayrca hesaplama ilemlerinin yapld bir veri eriim yntemidir. View kullanmann ok sayda stnl (kolayl) vardr. Bunlarn banda database zerindeki ok saydaki tablo zerinde zel grnmler yaratmas ve kullanclara tablolar (grnmn altnda yatan) zerinde izin vermeden tablolar zerinde ilem yapmalarn salar. rnein kullanc, tablonun sadece belli kolonlarn ieren bir View zerinde alabilir. NOT: Bu dokmanlar Faruk ubuku tarafndan hazrlanmtr. Btn haklar sakldr. Ticari olarak kullanlamaz. Baknz: www.farukcubukcu.com Ad geen ve telif hakl olan rnler bilgi amal olarak kullanlmtr. A. VEW OLUTURMAK CREATE deyimi ile yaratlr. inde genellikle SELECT gibi bir cmle bulunur. Kullanm Biimi: CREATE VIEW view_ad AS select_deyimi Aadaki rnekte bir tablonun belli alanlar zerine bir View yaratlmaktadr. CREATE VIEW musteri_view AS SELECT Kodu, Ad, Soyad, Grubu FROM musteri View'larn yaratlmasnda SELECT deyimi kullanlr. Ancak baz kstlamalar vardr: ORDER BY, COMPUTE, ya da COMPUTE BY szckleri kullanlmaz. INTO kullanlmaz.

B. VEW'LARI ALITIRMAK Bir view'dan veri almak iin genellikle SELECT kullanlr.

22

Aadaki deyim yukarda hazrladmz view iindeki verileri grntler: SELECT * from musteri_view GZDEN GERME 1. View'larn amac nedir?

I. STORED PROCEDURE SQL Server'daki Stored procedure'lar ayn dier programlama dillerindeki procedure'lara benzer. SQL deyimlerini ieren komut doayalar hazrlanr ve sunucu zerinde saklanr. Stored procedure araclyla u ilemler yaplablir: Input parametrelerini kabul ederek ve birok deerin geri dnmesini salar. Database iindeki ilemleri yapmak iin programlama deyimleri ierir. Stored procedure'lar genellikle rutin hale gelmi ileri kolayca yapmak iin gelitirilirler. SQL deyimleriyle yazlan stored procedure'lar sadece ilk kez altrldklarnda derlenirler. Daha sonraki altrma ilemlerinde derlenmezler ve bylece hzl bir biimde alma salanm olur. rnek bir stored procedure tasarm: USE Northwind GO CREATE PROC pahali_kitaplar AS SELECT * FROM products WHERE unitprice > 30 GO Stored procedure' altrma: EXEC pahal_kitaplar A. CREATE PROCEDURE Deyimi Bir SQL Server stored procedure' CREATE PROCEDURE deyimi ile oluturulur. stenirse daha sonra ALTER PROCEDURE deyim ile deitirilir. Bir stored procedure yaratma deyimi tek bir batch olarak dzenlenir. Dier bir deyile dier SQL deyimleriyle ayn batch iinde yer alamaz. Kullanm Biimi: :

23

CREATE PROC[EDURE] procedure_ad[;say] [ {@parameter data_tipi} [VARYING] [= varsaym] [OUTPUT] ] [,...n] [WITH { RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION } ] [FOR REPLICATION] AS sql_deyimleri [...n] rnekler: Aadaki stored procedure ile sadece belirtilen yazarn bilgileri ve kitaplar listelenir. USE pubs GO CREATE PROCEDURE yazar @lastname varchar(40), @firstname varchar(20) AS SELECT au_lname, au_fname, title, pub_name FROM authors a INNER JOIN titleauthor ta ON a.au_id = ta.au_id INNER JOIN titles t ON t.title_id = ta.title_id INNER JOIN publishers p ON t.pub_id = p.pub_id WHERE au_fname = @firstname AND au_lname = @lastname GO

altrlmas:

24
EXECUTE yazar 'White, 'Jhonson' Ayrca aadaki biimde de altrlabilir: EXECUTE yazar @lastname = 'White', @firstname = 'Johnson' NOT: Bu dokmanlar Faruk ubuku tarafndan hazrlanmtr. Btn haklar sakldr. Ticari olarak kullanlamaz. Baknz: www.farukcubukcu.com Ad geen ve telif hakl olan rnler bilgi amal olarak kullanlmtr. B. BR STORED PROCEDURE'I LETMEK Bir stored procedure' iletmek iin Transact-SQL EXECUTE deyimi kullanlr. Bunun dnda eer stored procedure'n parametresi varsa o da EXECUTE deyimi ile belirtilir. EXECUTE (T-SQL) Deyimi Bir stored procedure' iletmek iin EXECUTE deyimi kullanlr: Kullanm Biimi: [[EXEC[UTE]] { {procedure_ad[;say] | @procedure_ad_deikeni } [[@parameter =] {deer| @deiken [OUTPUT] | [DEFAULT]] [,...n] [WITH RECOMPILE] rnekler: Aadaki rnekte bir komut iletilir: USE master EXECUTE xp_cmdshell 'dir *.exe' Aadaki rnekte ise bir stored procedure parametre ile arlarak altrlr: EXECUTE yazar 'White, 'Jhonson' Ad geen ve telif hakl olan rnler bilgi amal olarak kullanlmtr.

SQL SQL (Structured Query Language) veri tabanlarndaki verileri ilemek iin kullanlan yapsal sorgulama dilidir. Bu dil yardmyla veritabanlarndaki tm ilemler yaplabilir. Backup almadan tutunda bir tabloya veri girmeye varncaya kadar herey.

25
SQL'i u anda piyasada bulunan hemen hemen her veritabannda kullanabilirsiniz. SQL'de her veritabannda kullanlan ortak ifadeler olmasna karn, veritabanlarnn kendine zg ifadeleri de vardr. Mesela Oracleda SQL ile yapabildiiniz baz eyleri baka veritabanlarnda yapamayabilirsiniz. SQL temel olarak u ifadelerle kullanlr. SELECT, FROM, WHERE, ORDER BY, GROUP BY, HAVING, UPDATE, DELETE, INSERT. Burada kullandmz SQL cmleleri ISCI adl bir tablo zerine yazlmtr. Alanlar. ISCI_NO ISCI_ADI YAS GIRIS_TARIHI MAAS

SELECT: Tablodan semek istediimiz alanlar belirtmek iin kullanlr. Eer tablodan tm alanlar semek istiyorsak o zaman alan isimleri yerine * iareti konur. FROM: zerinde ilem yaplacak tablo/tablolar belirtmek iin kullanlr. WHERE: Tablodan eer tm kaytlar deilde istediimiz baz kaytlar elde etmek istiyorsak, rnekte maa 250 milyondan fazla olan iilerin numaras ve adi gibi, o zaman buraya istediimiz kriteri yazarz. SELECT ISCI_NO, ISCI_ADI FROM ISCI WHERE MAAS>250000000 DISTINCT: Birbirinin ayn olan satrlarn listelenmemesi iin bu ifade kullanlr. Mesela ISCI tablosunda bulunan birbirinin ayn olmayan isimleri listelemek istersek SELECT DISTINCT ISCI_ADI FROM ISCI eklinde bir SQL ifadesi yazarz. IN: Koul belirtirken kullanrz. Mesela ismi AHMET, AL veya MUSTAFA olan iilerin bilgilerini listelemek iin SELECT * FROM ISCI WHERE ISCI_ADI=AHMET OR ISCI_ADI=AL OR ISCI_ADI=MUSTAFA eklinde bir ifade kullanrz. Bunun yerine SELECT * FROM ISCI WHERE ISCI_ADI IN (AHMET ,AL ,MUSTAFA) ifadesini de kullanabiliriz. Yani listenin iindeki herhangi bir deerin bulunmas kaytn seilmesi iin yeterlidir. LIKE:

26
Eer aradmz kaytn bulunmas iin tam bir karlatrma yapamyorsak o zaman kullanrz. Mesela isminin ba harfi A ile balayan isimleri bulmak iin SELECT * FROM ISCI WHERE ISCI_ADI LIKE A% ifadesi kullanlr. % iareti uzunluu nemsiz olmak zere yazld yere her trl ifade gelebilir anlamndadr. ? iareti ise bir karakter olmak zere her trl deeri alabilir anlamndadr. Mesela isminin sondan nc harfi A, ve son harfi Z olan kaytlar listelemek istersek sondan ikinci harfin ne olduu nemli deildir. O zaman o harf yerine aada grld zere ? iaretini kullanrz. SELECT * FROM ISCI WHERE ISCI_ADI LIKE %A?Z ifadesi kullanlr. BETWEEN: Koul belirtirken iki deer arasn belirtmek iin kullanlr. rnek: Ya 30 ile 40 arasndaki iilerin kaytlarn listelemek iin SELECT * FROM ISCI WHERE YAS BETWEEN 30 AND 40 ifadesi kullanlr. Bunu ayn zamanda aadaki ifade ile de yapabilirsiniz. BETWEEN yazm kolayl salar. SELECT * FROM ISCI WHERE YAS>=30 AND YAS<=40 SUM: Seilen deerlerin toplamn bulur. ilerin ald toplam creti grmek iin SELECT SUM(UCRET) FROM ISCI ifadesi kullanlr. MAX, MIN, AVG: Verilen deerin en byn, en kn ve ortalamasn bulur. 1999 ylnda giren iilerin en yksek cretinin, en dk cretinin ve ortalamasnn ne kadar olduunu renmek istersek aadaki ifadeyi kullanrz. SELECT MAX(UCRET), MIN(UCRET), AVG(UCRET) FROM ISCI WHERE GIRIS_TARIHI>01.01.1999 MAX en byk deeri, MIN en kk deeri, AVG ise seilen deerlerin ortalmasn bulur. ORDER BY: Tablodan setiimiz kaytlar sralamak iin kullanlr. Yukardaki rnekte isimleri alfabetik sra ile grmek istersek SELECT DISTINCT ISCI_ADI FROM ISCI ORDER BY ISCI_ADI yazarz. Eer sralamay tersine evirmek istersek

27
SELECT DISTINCT ISCI_ADI FROM ISCI ORDER BY ISCI_ADI DESC yazarz. GROUP BY: Genelde istatistik amalar iin kullanlr. Mesela hangi tarihte ka iinin ie alndn bulmak iin SELECT GIRIS_TARIHI,COUNT(*) FROM ISCI GROUP BY GIRIS_TARIHI yazmanz yeterli olacaktr. Bu ifade size gn baznda ka iinin ie alndn gsterecektir. Eer belli bir tarihten nce ya da sonrasn isterseniz veya sadece saynn 10dan byk olduu gnleri grmek isterseniz o zaman ifadeyi u ekilde yazmak gerekir. SELECT GIRIS_TARIHI,COUNT(*) FROM ISCI WHERE GIRIS_TARIHI>01.01.1999 GROUP BY GIRIS_TARIHI HAVING COUNT(*)>10 HAVING, grup fonksiyonlarnn kriterleri iin kullanlr. SUM, COUNT vb. gibi. UPDATE: Tabloda bulunan bir istediiniz bir veya daha fazla alann gncellenmesi amacyla kullanlr. Mesela iilerin maalarna % 20 zam yapldn dnrsek aadaki ifade ile bunu tabloda gerekletirebiliriz. UPDATE ISCI SET MAAS=MAAS*1.2 Eer maalarla birlikte aldklar primleri de %20 orannda artrmak isterseniz UPDATE ISCI SET MAAS=MAAS*1.2 , PRIM=PRIM*1.2 eklinde bir ifade kullanlr. Ayn zamanda WHERE ifadesini kullanarak sadece belli kaytlar zerinde gncelleme yapabilirsiniz. DELETE: Tabloda bulunan kaytlar silmek iin kullanlr. Eer DELETE FROM ISCI derseniz tm kaytlar gnderirsiniz. DELETE ifadesini kullanrken dikkatli olun. Buradada yine WHERE ifadesini kullanarak sadece belli kritere uyan kaytlarn silinmesini salayabilirsiniz. Kt bir rnek ama olsun, patron 45 yandan byk iileri iten att (buras Trkiye, olmaz demeyin) ve kaytlarnn silinmesi isteniyor. O zaman DELETE FROM ISCI WHERE YAS>45 ifadesi kullanlr. INSERT: Tablolara veri girii yapmak amacyla kullanlr. INSERT INTO ISCI (ISCI_NO,ADI,SOYADI) VALUES (1000,AHMET,SAVA);

28
Eer giri yaparken tablonun btn alanlar kullanlacaksa alan isimlerini vermeye gerek yoktur. Not: UPDATE, DELETE ve INSERT ifadelerini kullanrken dikkatli olmalsnz. Eer SQL tabanl bir veri taban kullanyorsanz bu ifadeleri veritabanlarnn kendi toollar zerinde kullann. nk Delphi ile gelen SQL Explorerda iaretine basmay unutursanz yaptnz ilemin geri dn olmayabilir. Yani en son yaptnz ilemi Rollback yapamazsnz ve eer gerek veritaban zerinde yaptysanz ilemi banz baya aryabilir veya o i yerinde yazdnz son SQL ifadesi olabilir. :-)) K TABLODAN BRDEN KAYIT SEMEK: ilerin kimlik bilgilerinin ISCI_KIMLIK tablosunda tutulduunu kabul ederek bizden ORUM doumlu olanlarn listesinin istendiini varsayalm. Tablolar birbirine ISCI_NO alan zerinden ilikili olsun. SELECT A.ISCI_NO, A.ISCI_ADI, B.DOGUM_YERI FROM ISCI A, ISCI_KIMLIK B WHERE B.DOGUM_YERI=ORUM AND A.ISCI_NO=B.ISCI_NO eklinde bir ifade yazarak listemizi elde edebiliriz. Burada WHERE kouluna yazdnz srann pek bir nemi yoktur. Her artta ayn sonular elde ederseniz. Fakat performans asndan biraz farkeder. Yukardaki ifade SELECT A.ISCI_NO, A.ISCI_ADI, B.DOGUM_YERI FROM ISCI A, ISCI_KIMLIK B WHERE A.ISCI_NO=B.ISCI_NO B.DOGUM_YERI=ORUM ifadesinden daha hzl alr. nk ilk ifadede nce doum yeri ORUM olan kaytlar seilir daha bu kaytlara ii tablosu birletirilir. Sonraki ifadede ise nce tm kaytlar birletirilir, bunlarn arasndan doum yeri ORUM olanlar seilir. DISTINCT TEKRARSIZ

TANIM: SQLde tablo iinde birbirinin ayn datalar bulunabilir.Ayn satrlarn listeleme esnasnda bir kez yazlmas RNEK: 1)Par _sat dosyasndan sat_nolar tekrarsz olarak listelenecektir. ORDER BY SIRALA TANIM: Tablodaki stunlardan ,belirli bir stuna gre listelemek iin SE komutuna, SIRALA eklenir. RNEK: 1)Personel dosyasndan,sicil,ad,soyad,brt stunlarn se ve brt(maaa)gre bykten ke srala. SELECT sicil,ad,soyad,brt SE sicil,ad,soyad,brt FROM personel GEL personel ORDER BY brt ASC; SIRALA brt B-K; DESC Kkten bye srala ASC Bykten ke srala

)BRDEN OK ALANA GRE SIRALAMA: TANIM:Bir tablo iinde ,birden fazla stundan ayn anda sralamak iin kullanlr. RNEK 1)Personel dosyasndan seilen stunlarn ayn anda hem ad,hem de otomatik olarak sralar. SELECT sicil,ad,soyad,brt FROM personel SE sicil,ad,soyad,brt GEL personel

29
ORDER BY ad,brt; SIRALA ad,brt;

RNEK 2)Personel tablosundan seili stunlar ncelik adda olmak zere (B-K) ad bozmadan soyad (KB) sral listeler. SELECT sicil,ad,soyad,brt FROM personel ORDER BY ad ASC,soyad DESC, brt ASC; veya; SELECT sicil,ad,soyad,brt FROM personel ORDER BY ad,soyad DESC,brt; SE sicil,ad,soyad,brt GEL personel SIRALA ad B-K,soyad K-B, brt B-K; SE sicil,ad,soyad,brt GEL personel SIRALA ad,soyad K-B,brt;

DESCli durumda yanna yazp belirtilir,yazlmazsa ASC direct kabul edilir. KOULA BALI OLARAK LSTELEME: WHERE OLAN

TANIM:Verilen koulu salayanlar listelenir.ki veri birbiriyle karlatrlmaktadr. Karlatrlan verilerin tr ayn olmaldr. SELECT * FROM personel WHERE brt > 5000000; SE * GEL personel OLAN brt > 5000000; KARILATIRMA OPERATRLER: OPERATR < > = <= >= <> != !< !> ANLAMI ...den daha kk ...den daha byk Eit Kk veya eit Byk veya eit Eit deil Eit deil ...den kk deil ...den byk deil

ETL VER TPLER N BAST SORGULAMALAR: i)NMERK VER TPLER: RNEK: Maa 8000000TLden fazla olmayan personeli listele. SELECT * FROM personel WHERE brt <= 8000000 ii)KARAKTER VER TPLER (CHAR): SE * GEL personel OLAN brt <= 8000000;

30
Karakter ift veya tek trnak ile gsterilir. RNEK: Ad Ali olmayan personele ait kaytlar listele. SELECT * FROM personel WHERE ad <> Ali; SE * GEL personel OLAN ad <> Ali;

)TARH VER TP: Tarih veri tipleri { } sembolleri iinde yazlr. RNEK: Hangi personelin doum tarihi 1960 ylndan daha ncedir? SELECT * FROM personel WHERE dog_tar <={12/31/59} SE * GEL personel OLAN dog_tar <={12/31/59}; MANTIKSAL (LOJK) VER TP: Mantksal veriler iin mmkn olabilen sadece iki deer szkonusudur.DORU D(TRUE T) , YANLI Y (FALSE F) ile simgelenir. RNEK: Personel tablosunda personelin cinsiyetini belirten cins adl alan mantksal(logical) olarak tanmlanmtr.Cinsiyeti erkek olanlar D,kadn olanlar y ile tanmlarsak erkek olanlar listele. SELECT * FROM personel WHERE cins = .T.; SE * GEL personel OLAN cins =.D.; BRDEN OK KOULA DAYALI SORGULAMALAR: (NOT,AND,OR) TANIM:Mantksal operatrlerin yardm ile birden ok koulun gerekletirmesine bal olarak ifade edilebilecek (karmak yada birleik koullu listelemeleri gerekletirilmektedir.) AND VE

RNEK:Maa 5000000dan fazla olan ve cinsiyeti erkek olan personelin listelenmesi istenir yani iki koul verilmektedir ve ikisininde olmas istenir. SELECT * FROM personel WHERE brt >5000000 AND cins =.T.; NOT OR DEL VEYA SE * GEL personel OLAN brt > 5000000 AND cins =.D.

31
RNEKLER: i)Doum tarihi 1960dan nce olan maa 6000000 10000000 arasndaki bayan personelin listele. SELECT * FROM dog_tar < {01/01/60} AND brt > = 6000000 AND brt < =10000000 AND cins = .F.; SE * GEL dog_tar < {01/01/60} VE brt > = 6000000 VE brt < =10000000 VE cins =.Y.;

)Sat blmyle muhasebe blmndekiler kimlerdir? (Sat blmnn bl_nosunun 1 ve muhasebe blmnn bl_nosunun 2 olduu varsaylmaktadr.) SELECT * FROM personel WHERE bol_no =1 OR bol_no = 2; SE * GEL personel OLAN bol_no = 1 VEYA bol_no =2;

)Blm Sat yada Muhasebe olamayan 1960dan sonra domu bayan personeli listele. 1.YAZILIM: SELECT * FROM personel WHERE NOT (bl_no =1 OR bl_no =2) AND dog_tar > ={01/01/60} AND cins=.F.; 2.YAZILIM: SELECT * FROM personel WHERE bl_no <> 1 AND bl_no <> 2 AND dog_tar > ={01/01/60} AND cins =.F.; SE * FROM personel OLAN bl_no <> 1 VE bl_no <> 2 AND dog_tar > = {01/01/60} VE cins =.Y.; BR VER KMESNDE ARAMA IN OPERATR IN NDE SE * GEL personel OLAN DEL (bl_no =1 VEYA bl_no =2)VE dog_tar >={01/01/60} VE cins=.Y.;

IN operatr DEL(NOT) ile kullanllabilir.

32
RNEK:i) Blm 1,2,3 olmayan personel kimlerden olumaktadr?

SELECT * FROM personel WHERE bol_no NOT IN (1,2,3);

SE * GEL personel OLAN bl_no DEL NDE (1,2,3);

RNEK:ii) Bl_nosu 1,2 yada 3 olan personeli listele. SELECT * FROM personel WHERE bl_no = 1 OR bl_no= 2 OR bl_no=3; SE * GEL personel OLAN bl_no =1 VEYA bl_no =2 VEYA bl_no = 3;

Bu rnein IN ile yaplm ekli daha ksadr. SELECT * FROM personel WHERE NOT bl_no IN (1,2,3); SE * GEL personel OLAN DEL bl_no NDE (1,2,3); ARALIK SORGULAMA SZC: BETWEEN ARASINDA

RNEK:Maa 5- 10 milyon arasnda olan personel kimlerdir? SELECT * FROM personel WHERE brt > =5000000 AND brt < = 10000000; SE * GEL personel OLAN brt > =5000000 VE brt < = 10000000;

BETWEEN (ARASINDA) komutu ile daha ksa olacaktr. SELECT * FROM personel WHERE brt BETWEEN 5000000 AND 10000000; SE * GEL personel OLAN brt ARASINDA 5000000 VE 10000000; KARAKTER TR BLG NDE ARAMA YAPMA LIKE SZC:

33
TANIM RNE: Adres sutunu ierisinde semt blmne ait ayrca bir sutun olmadn varsayarak semt ad adres sutunu ierisinde yer alr ve buradan da LIKE (BULUNAN) komutuyla adres sutunu ierisinde Taksim semtinde oturan personeli listele. SELECT * FROM personel WHERE adres LIKE % TAKSM % ; SE * GEL personel OLAN adres LIKE % TAKSM% ;

Adres LIKE %TAKSM% ifadesi adres iinde her hangi bir yerde TAKSM yazan yerde oturan personeli listeleyecektir. LIKE szcn ,alt izgi (-) sembol ile birlikte kullanmakta mmkndr. SELECT * FROM personel WHERE ad LIKE Mehmet -----; SE * GEL personel OLAN ad BULUNAN Mehmet ----;

ekildeki komut ile ad alan Mehmet ile balayan ve ad alan uzunluu 10 karakter olan isimlere sahip personeli listeleyecektir.Mehmet Ali,Mehmet Can- Mehmetcik gibi isimler listeleyecektir.Anlalaca gibi - sembol , tek karakterlik bir bilgiyi temsil etmektedir.

SQLDE ARTMETKSEL FADELER VE FNKSYONLAR : KME FONKSYONLARI: SUM FONKSYONU: SUM TOPLA

Fonksiyonun argman olarak belirtilen stun ile ilikili olana toplama ilemini gerekletirir. RNEK:letmedeki personelin brt maalar toplam ne kadardr? SELECT SUMbrt) FROM personel; AVG FONKSYONU: AVG ORT SE TOPLA(brt) GEL personel;

Aritmetiksel ortalama (average) hesaplamak iin kullanlr. SELECT AVG(brt) FROM personel; MAX FONKSYONU: SE ORT (brt) GEL personel;

34
MAX ST

Tablo iinde ,belirtilen sutun (alan)iindeki en byk deeri bulur. RNEK:letme iindeki en yksek maa ne kadardr? SELECT MAX (brt) FROM personel; MIN FONKSYONU: MIN ALT SE ST (brt) GEL personel;

Tablo iinde,belirlenen sutun alan iindeki en kk deeri bulur. RNEK:letme iinde 4 Mays 1970den nce doanlar iin,asgari cret nedir? SELECT MIN(brt) FROM personel WHERE dog_tar<05/04/70}; COUNT FONKSYONU: COUNT SAY SE ALT(brt) GEL personel OLAN dog_tar < {05/04/70};

Tablo iinde ,her hangi bir sayma ilemi gerekletirmek iin kullanlr. RNEK:creti 6000000dan olan personel says nedir? SELECT COUNT (*) FROM personel WHERE brt>6000000; SE SAY(*) GEL personel OLAN brt > 6000000;

COUNT (SAY) fonksiyonu DISTINCT (TEKRARSIZ)szc ile de kullanlr. RNEK:Personel tablosunda mevcut personelin iletme iinde ka tane farkl blmde altn bul. SELECT COUNT(DISTINCT bl_no) FROM personel; COUNT (bl_no) SE SAY (TEKRARSIZ bl_no) GEL personel; SAY (bl_no) GRUPLANDIRARAK LEM YAPMA: GROUP BY GRUPLA

RNEK: Her blmdeki ortalama maa nedir?

35
SELECT bl_no,AVG (brt) FROM personel GOUP BY bl_no; HAVING: HAVING SAHP SE bl_no GEL personel GRUPLA bl_no;

Gruplandrarak kmeleme fonksiyonunu uygularken koulda verilebilir.Bu durumda grup zerindeki hesaplamalarla ilgili koul belirtilirken HAVING (SAHP) szc kullanlr. RNEK:En yksek maan 9000000dan fazla olduu blmlerdeki personele ait ortalama maalar listele. SELECT bl_no,AVG (brt) FROM personel GROUP BY bl_no HAVING AVG(brt)> 9000000; SE bl_no, ORT(brt) GEL personel GRUPLA bl_no SAHP ORT(brt)> 9000000;

HAVING(SAHP) szc SELECT(SE) konusunda GROUP BY(GRUPLA) bulunmad zaman geersizdir.HAVING(SAHP) szcn izleyen ifade iinde ,SUM(TOPLA), COUNT(*)(SAY),AVG(ORT),MAX(ST) yada MIN(ALT) fonksiyonlarndan en az biri bulunmaldr. HAVING (SAHP) szc sadece gruplanm veriler zerindeki ilemlerde geerlidir. WHERE (OLAN) szc bir tablonun tek tek satrlar zerinde ilem yapan koullar iinde geerlidir. Baz durumlarda HAVING(SAHP) ve WHERE(OLAN) szckleri ile birlikte SELECT(SE) komutu iinde kullanlabilir. RNEK:Personel tablosu iinde her blmde erkek personele ait maalar iin ortalamann 9000000dan fazla olduu blmleri listele. SELECT bl_no, AVG(brt) FROM personel WHERE cins= .T. GROUP BY bl_no HAVING AVG (brt) > 9000000; SE bl_no, ORT (brt) GEL personel OLAN cins= .D. GRUPLA bl_no SAHP ORT(brt) > 9000000;

BRDEN FAZLA TABLOYU LKLENDRMEK: JOIN LKLENDR

RNEK: Personel ve blm adl 2 tablo bulunmaktadr. alan her personel ve personelin yneticisi ile ilikili bilgiler nelerdir?

36
SELECT * FROM personel,blm WHERE personel .bl_no=blm.blm_no ; SELECT sicil,ad,soyad,bl_no,yn_s_g_n FROM personel,blm WHERE personel .bl_no = blm .blm_no; SELF-JOIN: SE * GEL personel,blm OLAN personel.bl_no = blm.blm_no; SE sicil,ad,soyad,bl_no,yn_s_g_n GEL personel,blm OLAN personel .bl_no = blm.blm_no; KENDSYLE -LKLENDR

TANIM:Bir tablonun kendisi ile birletirilmesine KENDSYLE-LKiLENDR denir.(SELF-JOIN) SELECT A. sicil , A.ad , A.soyad,B .ad , B.soyad , B.dog_tar SE A. sicil , A.ad , A.soyad, B .ad , B.soyad , B.dog_tar FROM personel A , personel B WHERE A. yon_sos_g_n =B .sosy_g_no; GEL personel A , personel B OLAN A. yon_sos_g_n =B .sosy_g_no; NESTED SELECTS: E TANIM: ie gemi SELECT(SE)komutlarndan oluur.teki. se komutunun bulduu sonucu d tak SE komutumuz ilevini yerine getirmesi iin kullanlr. RNEK:Para numaras 24 olan paray ,projelerde kullanan alan personeli listele. SELECT * SE * FROM personel GEL personel WHERE sosy_g_no OLAN sosy_g_no IN(SELECT per_s_g_no NDE(SE per_s_g_no FROM para,proje,alma WHERE pr_no = proj_no AND GEL para,proje,alma OLAN pr_no = proj_no VE

proj_no =proj_no AND proj_no = proj_no VE par_no =24); par_no =24); RNEK: Fatihte oturan personelin alt projelerin adlarn ve yerlerini listele. SELECT proj_ad,yer SE proj_ad,yer FROM proje GEL proje WHERE proj_no IN OLAN proj_no NDE (SELECT proje_no (SE proje_no FROM personel,alma GEL sosy_g_no = per_s_g_no WHERE sosy_g_no = per_s_g_no OLAN sosy_g_no = per_s_g_no AND adres LIKE % fatih %); VE adres BULUNAN % fatih %); UNION SZC: UNION BRLEM TANIM:ki ayr SE komutunun sonucunda elde edilen tablolarn birleimi ilemini gerekletirir. RNEK:Ad Ahmet ve Soyad Caner olan kii yada kiileri iletmenin yrtt projelerde alan bir kii (sradan bir personel yada blm yneticisi)olarak bulunduran projelerin isimlerini ve projelerin yrtld yerleri listele. (SELECT proj_ad,yer (SE proj_ad,yer FROM proj,blm,personel GEL proj,blm,personel WHERE bl_no=blm_no AND OLAN bl_no=blm_no VE y_sos gno = sosy_g_no y_sos gno = sosy_g_no

37
AND ad =AhmetAND soyad =Caner) VE ad =Ahmet VE soyad =Caner) UNION (SELECT proj_ad,yer BRLEM (SE proj_ad,yer FROM proje,alma,personel GEL proje,alma,personel WHERE proj_no = proje_no AND OLAN proj_no = proje_no VE Per_s_g_no = sosy_g_no AND ad =Ahmet Per_s_g_no = sosy_g_no VE ad Ahmet AND soyad=Caner) VE soyad =Caner) KOULLAR: UNION (BRLEM) szc ile ,iki yada daha ok kii SELECT (SE)in sonucu olan tablolarn kme birleimi ilemine tabi tutulmas iin 2 koul gereklidir. 1)SELECT (SE) komutlar sonucunda elde edilecek tablolar ayn sayda kolon iermelidirler. 2)Sonu tablolar karlkl olarak kolonlarn ayn veri tipi ve ayn genilikte olmaldr. ANY : ANY HER HANG BR RNEK:Sat blmnde alan personelin her hangi birinden daha dk maa alan ve mhendislik blmndeki kiileri listele. SELECT * FROM personel WHERE brt < ANY (SELECT brt FROM personel WHERE bl_no = 2) AND bl_no = 1; =1; E DEER FADE: SELECT * FROM personel WHERE brt < (SELECT MAX (brt ) FROM personel WHERE bl_no = 2) AND bl_no =1; ALL: ALL HEPS SE * GEL personel OLAN brt < HER HANG BR (SE brt GEL personel OLAN bl_no = 2) VE bl_no SE * GEL personel OLAN brt < (SE ST (brt ) GEL personel OLAN bl_no = 2) VE bl_no =1;

RNEK:Sat blmnde alan ve mhendislik blmndeki personelin hepsinden daha fazla maa alan personeli listele.Bu rnekte sat blm kodu = 2 ve mhendislik blm kodu = 1 alnmtr. YAPILI YOLU: 1)SELECT * SE * FROM personel WHERE brt > ALL (SELECT brt FROM personel WHERE bl_no = 1) AND bl_no = 2; 2)SELECT * FROM personel WHERE brt > (SELECT MAX (brt) GEL personel OLAN brt > HEPS (SE brt GEL personel OLAN bl_no =1) VE bl_no =2; SE * GEL personel OLAN brt > (SE ST (brt)

FROM personel GEL personel WHERE bl_no = 1) AND bl_no =2; OLAN bl_no = 1) VE bl_no =2; EXISTS: EXISTS MEVCUT VE ,VEYA ,DEL operatrleri ile kullanlabilir. RNEK: 27 nolu paray satan satclarla ilikili tm bilgileri listele. SELECT * SE *

38
FROM satc WHERE EXISTS (SELECT * FROM par_sat WHERE sat_no = satc_n GEL satc OLAN MEVCUT (SE * GEL par_sat OLAN sat_no = satc_n

AND para_n =27); VE para_n = 27); NOT EXISTS: NOT EXISTS MEVCUT DEL VE ,VEYA ,DEL operatrleri ile kullanlabilir. RNEK: 27 nolu paray satmayan satclar kimlerdir? SELECT * SE * FROM satc GEL satc WHERE NOT EXISTS OLAN MEVCUT DEL (SELECT * (SE * FROM par_sat WHERE sat_no = satc_n GEL par_sat OLAN sat_no = satc_n

AND para_n =27); VE para_n = 27); EXCEPT: EXCEPT FARKLI Tablo-1 - Tablo-2 ilemi sonu(iki kmenin fark) elde edilecek tabloda,Tablo-1de bulunup, Tablo-2de bulunmayan veriler mevcut olacaktr. RNEK:Sat blmndeki personel adlarndan,mhendislik blmnde bulunmayanlar listele. SELECT * FROM SE * GEL (SELECT ad FROM personel (SE ad GEL personel WHERE bol_no=1 OLAN bl_no = 1 EXCEPT FARKLI SELECT ad FROM personel SE ad GEL personel WHERE bol_no =2); OLAN bl_no =2); INTERSECT: INTERSECT KESM RNEK: Hem Ankarada,hem de stanbuldaki projelerde grev alan blmleri listele. SELECT * FROM SE * GEL (SELECT bl_no FROM proje (SE bl_no GEL proje WHERE yer LIKE %Ankara% OLAN yer BULUNAN %Ankara% INTERSECT KESM SELECT bl_no FROM proje SE bl_no GEL proje WHERE yer LIKE %stanbul%); OLAN yer BULUNAN %stanbul%); SAVE TO TEMP: SAVE TO TEMP SAKLA RNEK: Bayan personeli,bayan adl bir tablo iinde sakla. SELECT * SE * FROM personel GEL personel WHERE cins =.F. SAVE TO TEMP bayan; OLAN cins =.Y. SAKLA bayan; KEEP: KEEP KALICI RNEK: SELECT * SE * FROM personel GEL personel WHERE cins = .F. OLAN cins =.Y. SAVE TO TEMP bayan KEEP; GEC SAKLA bayan KALICI; TABLOLARDA DEKLK YAPMAK: INSERT:

39
INSERT EKLE

INTO NE VALUES DEERLER RNEK:Bir personel tablosuna sicil_nosu 275 olan personel ile ilikili bilgileri ekle. INSERT INTO personel(sicil, EKLE NE personel(sicil, sosy_g_no,ad,soyad,do_tar sosy_g_no,ad,soyad,do_tar adres,cins,brt,bl_no,yn_s_g_no adres,cins,brt,bl_no,yn_s_g_no VALUES(275,27652418,Ali,Caner, DEERLER (275,27652418,Ali,Caner, {10/05/1962},Merkez caddesi 46 Fatih-stanbul, {10/05/1962},Merkez caddesi 46 Fatih-stanbul, .T.,27000000,2,876215342); .D.,27000000,2,876215342); DELETE: DELETE SL RNEK:2 nolu blmdeki personelin tm tablodan sil. DELETE FROM personel SL GEL personel WHERE bl_no = 2; OLAN bl_no = 2; 5 ROWS DELETED 5 SATIR SLND RNEK:Brt maa alan bo olmayan tm personeli sil. DELETE FROM personel SL GEL personel WHERE brt IS NOT NULL; OLAN brt DEERSZ; 25 ROWS DELETED 25 SATIR SLND UPDATE : UPDATE GNCELLE

SET YAP RNEK:2inci blmn yrtt projelerde kullanlan tm paralarn fiyatlarn % 7 zam yap. UPDATE para GNCELLE para SET fiyat = fiyat *1,07 YAP fiyat = fiyat *1,07 WHERE pr_no IN OLAN pr_no NDE (SELECT proj_no (SE proj_no FROM proje GEL proje WHERE bl_no = 2; OLAN bl_no =2 ; CREATE INDEX: CREATE INDEX INDEKS YARAT

ON N CREATE INDEX ndeks ad ON tablo ad(kolon ad 1,kolon ad 2,.,.kolon ad n);

INDEKS YARAT ndeks ad

N tablo ad(kolon ad 1,kolon ad 2,.,.kolon ad n); TEK BR ALAN A GRE ARTAN SIRADA NDEKSLEME : RNEK:letmede alan personeli brt maalarna gre artan srada listele.(Brt alana gre bir indeks oluturmalyz) CREATE INDEX pers_maas ON personel(brt); INDEX CREATED 127 ROWS INDEKS YARAT pers_maas N personel(brt); NDEKS YARATILDI 127 SATIR

127 satrlk personel tablosu ile ilikili olarak brt kolonu indeks anahtar olarak kullanan pers_maas adl indeks oluturulmutur.Bu durumda;

40
SELECT * SE *

FROM personel; GEL personel; eklinde listeleme komutu sonucunda personel tablosundaki tm personel, brt maalarna gre sral olarak listelenecektir. TEK BR ALANA GRE AZALAN SIRADA NDEKSLEME : DESC Kkten bye (K-B) RNEK:letmede alan personeli brt maalarna gre azalan srada (yksek maatan dk maaa doru)listelemek istersek ,brt alanna gre aadaki ekilde oluturmak gerekir. CREATE INDEX INDEKS YARAT ON personel (brt DESC); N PERSONEL(BRT K-B); BRDEN FAZLA ALANA GRE NDEKSLEME : RNEK:letmedeki personelin ncelikle adlarna gre,ayn adda olanlarn soyadlarna gre ,hem ad hemde soyad ayn olanlarn maalarna gre sralanm olarak listele. CREATE INDEX p_ad_soy_m ON personel(ad,soyad,brt); Bu durumda; SELECT * FROM personel; UNQUE SZC: UNIQUE TEK NDEKS YARAT p_ad_soy_m N personel (ad,soyad,brt);

SE * GEL personel; ile tablo grntlenir.

Bir tablo,seilen bir sutna (alana) gre indekslenirken , indeksleme alan olarak seilen sutndaki verilerintekrarlanmasna msaade edilmesi istenmiyorsa,indeksleme yaplrken ,CREATE ,INDEX komutu iinde UNQUE szc kullanlmaldr. CREATE UNQUE NDEX pers_sicil ON personel (sicil); EKLEME N: Personel tablosuna INSERT INTO Personel TEK INDEKS YARAT pers_sicil N personel (sicil);

EKLE NE Personel

VALUES(53768 ,27241685,aye, DEERLER (53768 ,27241685,aye , en{01/04/63},Merkez cad. 82 en{01/04/63},Merkez cad. 82 Kadky.F. ,27000000 ,2, 34261578); Kadky.Y. ,27000000 ,2, 34261578); MEVCUT BR NDEKSN SLNMES: DROP IPTAL DROP INDEX pers_in; PTAL NDEKS pers_in; Komutu ile INDEX DROPPED (NDEKS SLND) TABLONUN YAPISINDA DEKLK YAPMAK: ALTER TABLE TABLO DETR MEVCUT BR TABLOYA KOLON EKLEMEK: ADD EKLE DATE TARH ALTER TABLE (TABLO DETR) komutu iinde ADD (EKLE) ile satr ekle. RNEK:Personel tablosuna ,ie balama tarihini belirten bir kolon ekle ALTER TABLE personel TABLO DETR personel ADD i_ba_tar DATE; EKLE i_ba_tar TARH; ADD (EKLE)i_ba_tar DATE NOT NULL (TARH DEERSZ) bu ekilde kullanlsayd bu kolon satr gene bo kalrd ; fakat bu kolon ile ilikili yeni bo deerler eklemek istendiinde buna msaade edilmeyecekti.

41
MEVCUT BR TABLONUN KOLONLARINDA DEKLK YAPMAK : MODIFY KOMUTU: MODIFY ONAR MEVCUT BR TABLODAN BR KOLON SLMEK: DROP KOMUTU : DROP PTAL

RNEK:Personel tablosundan i_ba_tar kolonunu sil. ALTER TABLE personel DROP i_ba_tar ; TABLO DETR personel PTAL i_ba_tar;

Birden fazla kolonda silinebilir.Birden fazla kolon silmek iin virglle ayrlarak silinir. BR TABLONUN ADINI DETRMEK: RENAME KOMUTU: RENAME TABLO YEN AD ALTER TABLE personel RENAME TABLE elemanlar; TABLO DETR personel TABLO YEN AD elemanlar;

MEVCUT B TABLONUN BR KOLONUNUN ADININ DETRLMES: RENAME: RENAME YEN AD ALTER TABLE personel RENAME brt br-maa; MEVCUT BR TABLONUN TMYLE SLNMES DROP TABLE TABLO PTAL RNEK:Proje tablosunu sil. DROP TABLE proje; TABLO PTAL proje; VER GVENL: CREATE VEW GR ALANI YARAT RNEK:Personel adl temel tablodan persview adl bir view olutur. CREATE VEW perswiew GR ALANI YARAT persview AS SELECT sicil,sos_g_no,ad,soyad,do_tar, GB SE sicil,sos_g_no,ad,soyad,do_tar, adres,cins,bl_no,yon_s_g_no adres,cins,bl_no,yon_s_g_no FROM personel; GEL personel; VER BTNLNN SALANMASI: WITH CHECK OPTON KONTROLL

CREATE VIEW UST_PER_ VIEW nce bir vew oluturulsun AS SELECT FROM personel WHERE brt >25000000 WITH CHECK OPTON; GR ALANI YARAT UST_PER_VIEW GB SE GEL personel OLAN brt >25000000 KONTROLL;

42
Burada, maa 25000000n zerinde olan personelden oluan bir UST_PER_VIEW adl view oluturulmutur.Bu vewa brt maa 13000000 olan bir personel eklemek istedii zaman hata mesaj verecektir. CHECK opsiyonu kullanlmasayd hata mesaj alnmadan bu veri VEW iine ykleyecekti. EKLEME INSERT INTO UST_PER_VIEW VALUES (27521 ,27865427,aye, okan ,{01/05/1962}Cumh. Cad. 46 Taksim, .F.,13000000 ,1 ,27651112); VIEW NDE SATIR SLME: RNEK:UST_PER_VIEW iinden,maa 2500000den az olan kiileri sil. DELETE FROM UST_PER_VIEW WHERE brt < 25000000; SL GEL UST_PER_VIEW OLAN brt < 25000000; VIEW SATIRLARI ZERNDE GNCELLEME : RNEK: UST_PER_VIEW adl viewde sicili 27251 olan kinin maan 37000000 olarak deitir. UPDATE UST_PER_VIEW SET brt = 37000000 WHERE sicil = 27251; BR VIEWU SLMEK: DROP VIEW GR ALANI PTAL GR ALANI PTAL UST_PER_VIEW; GNCELLE UST_PER_VIEW YAP brt = 37000000 OLAN sicil = 27251; EKLE NE UST_PER_VIEW DEERLER (27521 ,27865427,aye, okan ,{01/05/1962}Cumh. Cad. 46 Taksim, .F.,13000000 ,1 ,27651112);

DROP VIEW UST_PER_VIEW;

SQLin amac bu komutlar yan yana yazdmzda bir cmlenin ortaya kmasdr. SELECT .... FROM .... WHERE ....,ORDER BY ....,GROUP BY .........HAVING.... ......(DEN).....GEL.....OLAN.. ,.......SIRALA....,GRUPLA......SAHP....SE

You might also like