TEK TABLODAN SORGULAMALAR SELECT SEÇ FROM GELIS ÖRNEK: 1) Bütün bilgileri personel tablosundan kosulsuz olarak listele SELECT * FROM personel ÖRNEK:2) Personel tablosundan SEÇ komutuyla istenen sütun adlarini belirt. SELECT sicil,sosy_g_no,ad,soyad,dog_tar,adres,cins,brüt,böl_no,yön_s_g_n FROM personel; ÖRNEK:3)Personel tablosundan istenen sütün basliklarini listele. SELECT sicil,ad,soyad,brüt FROM personel; DISTINCT - TEKRARSIZ TANIM:SQL'de tablo içinde birbirinin ayni datalar bulunabilir.Ayni satirlarin listeleme esnasinda bir kez yazilmasi ÖRNEK: 1)Par _sat dosyasindan sat_no’lari tekrarsiz olarak listelenecektir. SELECT DISTINCT sat_no FROM par_sat; i)TABLO BILGILERININ SIRALANMIS OLARAK LISTELENMESI ORDER BY - SIRALA TANIM:Tablodaki sütunlardan ,belirli bir sütuna göre listelemek için SEÇ komutuna ,SIRALA eklenir. ÖRNEK: 1)Personel dosyasindan,sicil,ad,soyad,brüt sütunlarini seç ve brüt(maasa)göre büyükten küçüge sirala. SELECT sicil,ad,soyad,brüt FROM personel ORDER BY brüt ASC; DESC Küçükten büyüge sirala ASC Büyükten küçüge sirala II)BIRDEN ÇOK ALANA GÖRE SIRALAMA TANIM:Bir tablo içinde ,birden fazla sütundan ayni anda siralamak için kullanilir. ÖRNEK 1)Personel dosyasindan seçilen sütunlarini ayni anda hem ad,hem de otomatik olarak siralar. SELECT sicil,ad,soyad,brüt FROM personel ORDER BY ad,brüt; ÖRNEK 2)Personel tablosundan seçili sütunlari öncelik adda olmak üzere (B-K) adi bozmadan soyadi (K-B) sirali listeler. SELECT sicil,ad,soyad,brüt FROM personel ORDER BY ad ASC,soyad DESC,brüt ASC; veya; SELECT sicil,ad,soyad,brüt FROM personel ORDER BY ad,soyad DESC,brüt; DESC'li durumda yanina yazip belirtilir,yazilmazsa ASC direct kabul edilir. KOSULA BAGLI OLARAK LISTELEME: WHERE - OLAN TANIM:Verilen kosulu saglayanlar listelenir.Iki veri birbiriyle karsilastirilmaktadir. Karsilastirilan verilerin türü ayni olmalidir. SELECT * FROM personel WHERE brüt > 5000000; KARSILASTIRMA OPERATÖRLERI: OPERATÖR ANLAMI < ...den daha küçük > ...den daha büyük = Esit <= Küçük veya esit >= Büyük veya esit <> Esit degil != Esit degil !< ...den küçük degil !> ...den büyük degil ÇESITLI VERI TIPLERI IÇIN BASIT SORGULAMALAR: i)NÜMERIK VERI TIPLERI: ÖRNEK: Maasi 8000000TL’den fazla olmayan personeli listele. SELECT * FROM personel WHERE brüt <= 8000000; ii)KARAKTER VERI TIPLERI (CHAR): Karakter çift veya tek tirnak ile gösterilir. ÖRNEK: Adi Ali olmayan personele ait kayitlari listele. SELECT * FROM personel WHERE ad <> "Ali"; III)TARIH VERI TIPI: Tarih veri tipleri { } sembolleri içinde yazilir. ÖRNEK: Hangi personelin dogum tarihi 1960 yilindan daha öncedir? SELECT * FROM personel WHERE dog_tar <={12/31/59}; MANTIKSAL (LOJIK) VERI TIPI: Mantiksal veriler için mümkün olabilen sadece iki deger sözkonusudur.DOGRU D(TRUE T) , YANLIS Y (FALSE F) ile simgelenir. ÖRNEK: Personel tablosunda personelin cinsiyetini belirten cins adli alan mantiksal(logical) olarak tanimlanmistir.Cinsiyeti erkek olanlari D,kadin olanlari y ile tanimlarsak erkek olanlari listele. SELECT * FROM personel WHERE cins = .T.; BIRDEN ÇOK KOSULA DAYALI SORGULAMALAR: (NOT,AND,OR) TANIM:Mantiksal operatörlerin yardimi ile birden çok kosulun gerçeklestirmesine bagli olarak ifade edilebilecek (karmasik yada birlesik kosullu listelemeleri gerçeklestirilmektedir.) AND - VE ÖRNEK:Maasi 5000000’dan fazla olan ve cinsiyeti erkek olan personelin listelenmesi istenir yani iki kosul verilmektedir ve ikisininde olmasi istenir SELECT * FROM personel WHERE brüt >5000000 AND cins =.T.; NOT - DEGIL, OR - VEYA ÖRNEKLER: i)Dogum tarihi 1960’dan önce olan maasi 6000000 – 10000000 arasindaki bayan personelin listele. SELECT * FROM dog_tar < {01/01/60} AND brüt > = 6000000 AND brüt < =10000000 AND cins = .F.; ii)Satis bölümüyle muhasebe bölümündekiler kimlerdir? (Satis bölümünün böl_no’sunun 1 ve muhasebe bölümünün böl_no’sunun 2 oldugu varsayilmaktadir SELECT * FROM personel WHERE bol_no =1 OR bol_no = 2; III)Bölümü Satis yada Muhasebe olamayan 1960’dan sonra dogmus bayan personeli listele. 1. Yazilim SELECT * FROM personel WHERE NOT (böl_no =1 OR böl_no =2) AND dog_tar > ={01/01/60} AND cins =.F.;
2. Yazilim SELECT * FROM personel WHERE böl_no <> 1 AND böl_no <> 2 AND dog_tar > ={01/01/60} AND cins =.F.; BIR VERI KÜMESINDE ARAMA -IN OPERATÖRÜ IN - IÇINDE "IN" operatörü DEGIL(NOT) ile kullanililabilir. ÖRNEK:i) Bölümü 1,2,3 olmayan personel kimlerden olusmaktadir? SELECT * FROM personel WHERE bol_no NOT IN (1,2,3); ÖRNEK:ii) Böl_no’su 1,2 yada 3 olan personeli listele SELECT * FROM personel WHERE böl_no = 1 OR böl_no= 2 OR böl_no = 3; Bu örnegin IN ile yapilmis sekli daha kisadir. SELECT * FROM personel WHERE NOT böl_no IN (1,2,3); ARALIK SORGULAMA SÖZCÜGÜ: BETWEEN - ARASINDA ÖRNEK:Maasi 5- 10 milyon arasinda olan personel kimlerdir? SELECT * FROM personel WHERE brüt > =5000000 AND brüt < = 10000000; BETWEEN (ARASINDA) komutu ile daha kisa olacaktir. SELECT * FROM personel WHERE brüt BETWEEN 5000000 AND 10000000; KARAKTER TÜRÜ BILGI IÇINDE ARAMA YAPMA -LIKE SÖZCÜGÜ: TANIM ÖRNEGI: Adres sutunu içerisinde semt bölümüne ait ayrica bir sutun olmadigini varsayarak semt adi adres sutunu içerisinde yer alir ve buradan da LIKE (BULUNAN) komutuyla adres sutunu içerisinde Taksim semtinde oturan personeli listele. SELECT * FROM personel WHERE adres LIKE "% TAKSIM %" ; Adres LIKE "%TAKSIM%" ifadesi adres içinde her hangi bir yerde TAKSIM yazan yerde oturan personeli listeleyecektir. LIKE sözcügünü ,alt çizgi (-) sembolü ile birlikte kullanmakta mümkündür. SELECT * FROM personel WHERE ad LIKE "Mehmet -----"; Sekildeki komut ile ad alani "Mehmet " ile baslayan ve ad alani uzunlugu 10 karakter olan isimlere sahip personeli listeleyecektir."Mehmet Ali","Mehmet Can"- "Mehmetcik" gibi isimler listeleyecektir.Anlasilacagi gibi - sembolü , tek karakterlik bir bilgiyi temsil etmektedir.
SQL'DE ARITMETIKSEL IFADELER VE FNKSIYONLAR KÜME FONKSIYONLARI SUM FONKSIYONU: SUM - TOPLA Fonksiyonun argümani olarak belirtilen sütun ile iliskili olana toplama islemini gerçeklestirir. ÖRNEK:Isletmedeki personelin brüt maaslar toplami ne kadardir? SELECT SUM (brüt) FROM personel; AVG FONKSIYONU: AVG - ORT Aritmetiksel ortalama (average) hesaplamak için kullanilir. ÖRNEK:Isletmedeki personelin brüt maaslar toplami ne kadardir? SELECT AVG(brüt) FROM personel; MAX FONKSIYONU: MAX - ÜST Tablo içinde ,belirtilen sutun (alan)içindeki en büyük degeri bulur. ÖRNEK:Isletme içindeki en yüksek maas ne kadardir? SELECT MAX (brüt) FROM personel; MIN FONKSIYONU: MIN - ALT Tablo içinde,belirlenen sutun alan içindeki en küçük degeri bulur. ÖRNEK:Isletme içinde 4 Mayis 1970’den önce doganlar için,asgari ücret nedir? SELECT MIN(brüt) FROM personel WHERE dog_tar < {05/04/70}; COUNT FONKSIYONU: COUNT - SAY Tablo içinde ,her hangi bir sayma islemi gerçeklestirmek için kullanilir. ÖRNEK:Ücreti 6000000'dan olan personel sayisi nedir? SELECT COUNT (*) FROM personel WHERE brüt > 6000000; COUNT (SAY) fonksiyonu DISTINCT (TEKRARSIZ)sözcügü ile de kullanilir. ÖRNEK:Personel tablosunda mevcut personelin isletme içinde kaç tane farkli bölümde çalistigini bul. SELECT COUNT(DISTINCT böl_no) FROM personel; COUNT (böl_no)
GRUPLANDIRARAK ISLEM YAPMA GROUP BY -GRUPLA ÖRNEK: Her bölümdeki ortalama maas nedir? SELECT böl_no,AVG (brüt) FROM personel GOUP BY böl_no; HAVING -SAHIP Gruplandirarak kümeleme fonksiyonunu uygularken kosulda verilebilir.Bu durumda grup üzerindeki hesaplamalarla ilgili kosul belirtilirken HAVING (SAHIP) sözcügü kullanilir. ÖRNEK:En yüksek maasin 9000000’dan fazla oldugu bölümlerdeki personele ait ortalama maaslari listele. SELECT böl_no,AVG (brüt) FROM personel GROUP BY böl_no HAVING AVG(brüt)> 9000000; HAVING(SAHIP) sözcügü SELECT(SEÇ) konusunda GROUP BY(GRUPLA) bulunmadigi zaman geçersizdir.HAVING(SAHIP) sözcügünü izleyen ifade içinde ,SUM(TOPLA), COUNT(*)(SAY),AVG(ORT),MAX(ÜST) yada MIN(ALT) fonksiyonlarindan en az biri bulunmalidir. HAVING (SAHIP) sözcügü sadece gruplanmis veriler üzerindeki islemlerde geçerlidir. WHERE (OLAN) sözcügü bir tablonun tek tek satirlari üzerinde islem yapan kosullar içinde geçerlidir. Bazi durumlarda HAVING(SAHIP) ve WHERE(OLAN) sözcükleri ile birlikte SELECT(SEÇ) komutu içinde kullanilabilir. ÖRNEK:Personel tablosu içinde her bölümde erkek personele ait maaslar için ortalamanin 9000000’dan fazla oldugu bölümleri listele. SELECT böl_no, AVG (brüt) FROM personel WHERE cins= .T. GROUP BY böl_no HAVING AVG (brüt) > 9000000;
BIRDEN FAZLA TABLOYU ILISKILENDIRMEK JOIN -ILISKILENDIR ÖRNEK: Personel ve bölüm adli 2 tablo bulunmaktadir.Çalisan her personel ve personelin yöneticisi ile iliskili bilgiler nelerdir? SELECT * FROM personel,bölüm WHERE personel .böl_no=bölüm.bölüm_no ; ÖRNEK: JOIN (ILISKILENDIR) isleminde arzu edilen(sicil,ad,soyad,böl_no,yön_s_g_n) alanlarin listele. SELECT sicil,ad,soyad,böl_no,yön_s_g_n FROM personel,bölüm WHERE personel .böl_no = bölüm .bölüm_no; SELF-JOIN: KENDISIYLE -ILISKILENDIR TANIM:Bir tablonun kendisi ile birlestirilmesine "KENDISIYLE-ILISKiLENDIR" denir.(SELF-JOIN) SELECT A. sicil , A.ad , A.soyad, B .ad , B.soyad , B.dog_tar.soyad, FROM personel A , personel B WHERE A. yon_sos_g_n =B .sosy_g_no; NESTED SELECTS:IÇIÇE TANIM:Iç içe geçmis SELECT(SEÇ)komutlarindan olusur.Içteki. seç komutunun buldugu sonucu dis taki SEÇ komutumuz islevini yerine getirmesi için kullanilir. ÖRNEK:Parça numarasi 24 olan parçayi ,projelerde kullanan çalisan personeli listele. SELECT * FROM personel WHERE sosy_g_no IN(SELECT per_s_g_no FROM parça,proje,çalisma WHERE pr_no = proj_no AND proj_no =proj_no AND par_no =24); ÖRNEK: Fatih’te oturan personelin çalistigi projelerin adlarini ve yerlerini listele. SELECT proj_ad,yer FROM proje WHERE proj_no IN (SELECT proje_no FROM personel,çalisma per_s_g_no WHERE sosy_g_no = per_s_g_no AND adres LIKE "% fatih %"); UNION SÖZCÜGÜ: UNION -BIRLESIM TANIM:Iki ayri SEÇ komutunun sonucunda elde edilen tablolarin birlesimi islemini gerçeklestirir. ÖRNEK: Fatih’te oturan personelin çalistigi projelerin adlarini ve yerlerini listele. (SELECT proj_ad,yer FROM proj,bölüm,personel WHERE bl_no=bölüm_no AND y_sos gno = sosy_g_no AND ad ="Ahmet"AND soyad ="Caner") UNION (SELECT proj_ad,yer FROM proje,çalisma,personel WHERE proj_no = proje_no AND Per_s_g_no = sosy_g_no AND ad ="Ahmet" AND soyad ="Caner") KOSULLAR: UNION (BIRLESIM) sözcügü ile ,iki yada daha çok kisi SELECT (SEÇ)'in sonucu olan tablolarin küme birlesimi islemine tabi tutulmasi için 2 kosul gereklidir. SELECT (SEÇ) komutlari sonucunda elde edilecek tablolar ayni sayida kolon içermelidirler. Sonuç tablolari karsilikli olarak kolonlarin ayni veri tipi ve ayni genislikte olmalidir. ANY :HER HANGI BIRI ÖRNEK:Satis bölümünde çalisan personelin her hangi birinden daha düsük maas alan ve mühendislik bölümündeki kisileri listele. SELECT * FROM personel WHERE brüt < ANY (SELECT brüt FROM personel WHERE böl_no = 2) AND böl_no =1; ES DEGERI IFADE: SELECT * FROM personel WHERE brüt < (SELECT MAX (brüt ) FROM personel WHERE böl_no = 2) AND böl_no =1; ALL:HEPSI ÖRNEK:Satis bölümünde çalisan ve mühendislik bölümündeki personelin hepsinden daha fazla maas alan personeli listele.Bu örnekte satis bölümü kodu = 2 ve mühendislik bölümü kodu = 1 alinmistir. 1) SELECT * FROM personel WHERE brüt > ALL (SELECT brüt FROM personel WHERE böl_no = 1) AND böl_no = 2; 2) SELECT * FROM personel WHERE brüt > (SELECT MAX (brüt) FROM personel WHERE böl_no = 1) AND böl_no =2; VE ,VEYA ,DEGIL operatörleri ile kullanilabilir. ÖRNEK: 27 no’lu parçayi satan saticilarla iliskili tüm bilgileri listele. SELECT * FROM satici WHERE EXISTS (SELECT * FROM par_sat WHERE sat_no = satici_n AND parça_n =27); NOT EXISTS: MEVCUT DEGIL VE ,VEYA ,DEGIL operatörleri ile kullanilabilir. ÖRNEK: 27 no’lu parçayi satmayan saticilar kimlerdir? SELECT * FROM satici WHERE NOT EXISTS (SELECT * FROM par_sat WHERE sat_no = satici_n AND parça_n =27); EXCEPT:FARKLI Tablo-1 - Tablo-2 islemi sonuç(iki kümenin farki) elde edilecek tabloda,Tablo-1'de bulunup, Tablo-2'de bulunmayan veriler mevcut olacaktir. ÖRNEK:Satis bölümündeki personel adlarindan,mühendislik bölümünde bulunmayanlari listele. SELECT * FROM (SELECT ad FROM personel WHERE bol_no=1 EXCEPT SELECT ad FROM personel WHERE bol_no =2); INTERSECT: ÖRNEK: Hem Ankara’da,hem de Istanbul’daki projelerde görev alan bölümleri listele. SELECT * FROM (SELECT bl_no FROM proje WHERE yer LIKE "%Ankara%" INTERSECT SELECT bl_no FROM proje WHERE yer LIKE "%Istanbul%"); SAVE TO TEMP: ÖRNEK: Bayan personeli,bayan adli bir tablo içinde sakla. SELECT * FROM personel WHERE cins =.F. SAVE TO TEMP bayan; KEEP:KALICI SELECT * FROM personel WHERE cins = .F. SAVE TO TEMP bayan KEEP;
TABLOLARDA DEGISIKLIK YAPMAK INSERT-EKLE (INTO-IÇINE, VALUES-DEGERLER) ÖRNEK:Bir personel tablosuna sicil_no’su 275 olan personel ile iliskili bilgileri ekle. INSERT INTO personel(sicil, sosy_g_no,ad,soyad,dog_tar adres,cins,brüt,böl_no,yön_s_g_no VALUES("275","27652418","Ali","Caner", {10/05/1962},"Merkez caddesi 46 - Fatih-Istanbul", .T.,27000000,2,"876215342"); DELETE: -SIL ÖRNEK:2 no’lu bölümdeki personelin tümü tablodan sil. DELETE FROM personel WHERE böl_no = 2; ÖRNEK:Brüt maas alani bos olmayan tüm personeli sil. DELETE FROM personel WHERE brüt IS NOT NULL; UPDATE - GÜNCELLE, SET - YAP ÖRNEK:2’inci bölümün yürüttügü projelerde kullanilan tüm parçalarin fiyatlarini % 7 zam yap. UPDATE parça SET fiyat = fiyat *1,07 WHERE pr_no IN (SELECT proj_no FROM proje WHERE bl_no = 2; CREATE INDEX: INDEKS YARAT , ON - IÇIN CREATE INDEX indeks adi ON tablo adi(kolon adi 1,kolon adi 2,.,.kolon adi n); TEK BIR ALAN AGÖRE ARTAN SIRADA INDEKSLEME : ÖRNEK:Isletmede çalisan personeli brüt maaslarina göre artan sirada listele.(Brüt alana göre bir indeks olusturmaliyiz) CREATE INDEX pers_maas ON personel(brüt); 127 satirlik personel tablosu ile iliskili olarak brüt kolonu indeks anahtari olarak kullanan pers_maas adli indeks olusturulmustur.Bu durumda; SELECT * FROM personel; _Seklinde listeleme komutu sonucunda personel tablosundaki tüm personel, brüt maaslarina göre sirali olarak listelenecektir. TEK BIR ALANA GÖRE AZALAN SIRADA INDEKSLEME : DESC -Küçükten büyüge (K-B) ÖRNEK:Isletmede çalisan personeli brüt maaslarina göre azalan sirada (yüksek maastan düsük maasa dogru)listelemek istersek ,brüt alanina göre asagidaki sekilde olusturmak gerekir. CREATE INDEX ON personel (brüt DESC); BIRDEN FAZLA ALANA GÖRE INDEKSLEME : ÖRNEK:Isletmedeki personelin öncelikle adlarina göre,ayni adda olanlarin soyadlarina göre ,hem adi hemde soyadi ayni olanlarin maaslarina göre siralanmis olarak listele. CREATE INDEX p_ad_soy_m ON personel (ad,soyad,brüt); Bu durumda; SELECT * FROM personel; tablo görüntülenir. UNIQUE SÖZCÜGÜ: TEK Bir tablo,seçilen bir sutüna (alana) göre indekslenirken , indeksleme alani olarak seçilen sutündaki verilerintekrarlanmasina müsaade edilmesi istenmiyorsa,indeksleme yapilirken ,CREATE ,INDEX komutu iinde UNIQUE sözcügü kullanilmalidir. CREATE UNIQUE INDEX pers_sicil ON personel (sicil); EKLEME IÇIN: Personel tablosuna INSERT INTO Personel VALUES(53768 ,"27241685","ayse", "sen"{01/04/63},"Merkez cad. 82 - Kadiköy".F. ,27000000 ,2, "34261578"); MEVCUT BIR INDEKSIN SILINMESI: DROP- IPTAL DROP INDEX pers_in; Komutu ile index silinir. TABLONUN YAPISINDA DEGISIKLIK YAPMAK: MEVCUT BIR TABLOYA KOLON EKLEMEK: ADD - Ekle, DATE -Tarih ALTER TABLE (TABLO DEGISTIR) komutu içinde ADD (EKLE) ile satir ekle. ÖRNEK:Personel tablosuna ,ise baslama tarihini belirten bir kolon ekle ALTER TABLE personel ADD is_bas_tar DATE; ADD (EKLE)is_bas_tar DATE NOT NULL (TARIH DEGERSIZ) bu sekilde kullanilsaydi bu kolon satiri gene bos kalirdi ; fakat bu kolon ile iliskili yeni bos degerler eklemek istendiginde buna müsaade edilmeyecekti. MEVCUT BIR TABLONUN KOLONLARINDA DEGISIKLIK YAPMAK : MODIFY KOMUTU - ONAR MEVCUT BIR TABLODAN BIR KOLON SILMEK: DROP KOMUTU : IPTAL ÖRNEK:Personel tablosundan is_bas_tar kolonunu sil. ALTER TABLE personel DROP is_bas_tar ; Birden fazla kolonda silinebilir.Birden fazla kolon silmek için virgülle ayrilarak silinir. BIR TABLONUN ADINI DEGISTIRMEK: RENAME KOMUTU: TABLO YENI AD ALTER TABLE personel RENAME TABLE elemanlar; MEVCUT BI TABLONUN BIR KOLONUNUN ADININ DEGISTIRILMESI: RENAME : YENI AD ALTER TABLE personel RENAME brüt br-maas; MEVCUT BIR TABLONUN TÜMÜYLE SILINMESI DROP TABLE ÖRNEK:Proje tablosunu sil. DROP TABLE proje;
VERI GÜVENLIGI CREATE VIEW ÖRNEK:Personel adli temel tablodan persview adli bir view olustur. CREATE VIEW perswiew AS SELECT sicil,sos_g_no,ad,soyad,dog_tar, adres,cins,böl_no,yon_s_g_no FROM personel; VERI BÜTÜNLÜGÜNÜN SAGLANMASI: WITH CHECK OPTION CREATE VIEW UST_PER_ VIEW Önce bir view olusturulsun AS SELECT FROM personel WHERE brüt >25000000 WITH CHECK OPTION; Burada, maasi 25000000'ün üzerinde olan personelden olusan bir UST_PER_VIEW adli view olusturulmustur.Bu view'a brüt maasi 13000000 olan bir personel eklemek istedigi zaman hata mesaji verecektir. CHECK opsiyonu kullanilmasaydi hata mesaji alinmadan bu veri VIEW içine yükleyecekti. EKLEME INSERT INTO UST_PER_VIEW VALUES (27521 ,"27865427","ayse", "okan" ,{01/05/1962}"Cumh. Cad. 46 - Taksim", .F.,13000000 ,1 ,"27651112"); VIEW IÇINDE SATIR SILME: ÖRNEK:UST_PER_VIEW içinden,maasi 2500000’den az olan kisileri sil. DELETE FROM UST_PER_VIEW WHERE brüt < 25000000; VIEW SATIRLARI ÜZERINDE GÜNCELLEME : ÖRNEK: UST_PER_VIEW adli view’de sicili 27251 olan kisnin maasini 37000000 olarak degistir. UPDATE UST_PER_VIEW SET brüt = 37000000 WHERE sicil = 27251; BIR VIEW'U SILMEK: DROP VIEW - GÖRÜS ALANI IPTALI DROP VIEW UST_PER_VIEW;
|