BİRDEN FAZLA TABLOYU İLİŞKİLENDİRMEK:
JOIN İLİŞKİLENDİR
ÖRNEK: Personel ve bölüm adlı 2 tablo bulunmaktadır.
Çalışan her personel ve personelin yöneticisi ile ilişkili bilgiler nelerdir?
SELECT * SEÇ *
FROM personel,bölüm GELİŞ personel,bölüm
WHERE personel .böl_no=bölüm.bölüm_no ; OLAN personel.böl_no = bölüm.bölüm_no;
TABLO ADI KOLON ADI
ÖRNEK: JOIN (İLİŞKİLENDİR) işleminde arzu edilen(sicil,ad,soyad,böl_no,yön_s_g_n) alanların listele.
SELECT sicil,ad,soyad,böl_no,yön_s_g_n SEÇ sicil,ad,soyad,böl_no,yön_s_g_n
FROM personel,bölüm GELİŞ personel,bölüm
WHERE personel .böl_no = bölüm .bölüm_no; OLAN personel .böl_no = bölüm .bölüm_no;
SELF-JOIN: KENDİSİYLE -İLİŞKİLENDİR
TANIM:Bir tablonun kendisi ile birleştirilmesine “KENDİSİYLE-İLİŞKiLENDİR” denir.(SELF-JOIN)
SELECT A. sicil , A.ad , A.soyad,
B .ad , B.soyad , B.dog_tar SEÇ A. sicil , A.ad , A.soyad,
FROM personel A , personel B B .ad , B.soyad , B.dog_tar
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:İç içe geçmiş SELECT(SEÇ)komutlarından oluşur.İçteki. seç komutunun bulduğu sonucu dış takı SEÇ komutumuz işlevini yerine getirmesi için kullanılır.
ÖRNEK:Parça numarası 24 olan parçayı ,projelerde kullanan çalışan 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 parça,proje,çalışma GELİŞ parça,proje,çalışma
WHERE pr_no = proj_no AND OLAN pr_no = proj_no VE
proj_no =proj_no AND proj_no = proj_no VE
par_no =24); par_no =24);
ÖRNEK: Fatih’te oturan personelin çalıştığı projelerin adlarını 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,çalışma 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 SÖZCÜĞÜ:
UNION BİRLEŞİM
TANIM:İki ayrı SEÇ komutunun sonucunda elde edilen tabloların birleşimi işlemini gerçekleştirir.
ÖRNEK:Adı Ahmet ve Soyadı Caner olan kişi yada kişileri işletmenin yürüttüğü projelerde çalışan bir kişi (sıradan bir personel yada bölüm yöneticisi)olarak bulunduran projelerin isimlerini ve projelerin yürütüldüğü yerleri listele.
(SELECT proj_ad,yer (SEÇ proj_ad,yer
FROM proj,bölüm,personel GELİŞ proj,bölüm,personel
WHERE bl_no=bölüm_no AND OLAN bl_no=bölüm_no VE
y_sos gno = sosy_g_no y_sos gno = sosy_g_no
AND ad =”Ahmet”AND soyad =”Caner”) VE ad =”Ahmet” VE soyad =”Caner”)
UNION (SELECT proj_ad,yer BİRLEŞİM (SEÇ proj_ad,yer
FROM proje,çalışma,personel GELİŞ proje,çalışma,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”)
KOŞULLAR:
UNION (BİRLEŞİM) sözcüğü ile ,iki yada daha çok kişi SELECT (SEÇ)’in sonucu olan tabloların küme birleşimi işlemine tabi tutulması için 2 koşul gereklidir.
1)SELECT (SEÇ) komutları sonucunda elde edilecek tablolar aynı sayıda kolon içermelidirler.
2)Sonuç tabloları karşılıklı olarak kolonların aynı veri tipi ve aynı genişlikte olmalıdır.
ANY :
ANY HER HANGİ BİRİ
ÖRNEK:Satış bölümünde çalışan personelin her hangi birinden daha düşük maaş alan ve mühendislik bölümündeki kişileri listele.
SELECT * SEÇ *
FROM personel GELİŞ personel
WHERE brüt < ANY OLAN brüt < HER HANGİ BİRİ
(SELECT brüt (SEÇ brüt
FROM personel GELİŞ personel
WHERE böl_no = 2) AND OLAN böl_no = 2) VE
böl_no =1; böl_no = 1;
EŞ DEĞERİ İFADE:
SELECT * SEÇ *
FROM personel GELİŞ personel
WHERE brüt < (SELECT MAX (brüt ) OLAN brüt < (SEÇ ÜST (brüt )
FROM personel GELİŞ personel
WHERE böl_no = 2) AND böl_no =1; OLAN böl_no = 2)VE böl_no =1;
ALL:
ALL HEPSİ
ÖRNEK:Satış bölümünde çalışan ve mühendislik bölümündeki personelin hepsinden daha fazla maaş alan personeli listele.Bu örnekte satış bölümü kodu = 2 ve mühendislik bölümü kodu = 1 alınmıştır.
YAPILIŞ YOLU:
1)SELECT * SEÇ *
FROM personel GELİŞ personel
WHERE brüt > OLAN brüt >
ALL (SELECT brüt HERSİ (SEÇ brüt
FROM personel GELİŞ personel
WHERE böl_no = 1) OLAN böl_no =1)
AND böl_no = 2; VE böl_no =2;
2)SELECT * SEÇ *
FROM personel GELİŞ personel
WHERE brüt > OLAN brüt >
(SELECT MAX (brüt) (SEÇ ÜST (brüt)
FROM personel GELİŞ personel
WHERE böl_no = 1) OLAN böl_no = 1)
AND böl_no =2; VE böl_no =2;
EXISTS:
EXISTS MEVCUT
VE ,VEYA ,DEĞİL operatörleri ile kullanılabilir.
ÖRNEK: 27 no’lu parçayı satan satıcılarla ilişkili tüm bilgileri listele.
SELECT * SEÇ *
FROM satıcı GELİŞ satıcı
WHERE EXISTS OLAN MEVCUT
(SELECT * (SEÇ *
FROM par_sat GELİŞ par_sat
WHERE sat_no = satıcı_n OLAN sat_no = satıcı_n
AND parça_n =27); VE parça_n = 27);
NOT EXISTS:
NOT EXISTS MEVCUT DEĞİL
VE ,VEYA ,DEĞİL operatörleri ile kullanılabilir.
ÖRNEK: 27 no’lu parçayı satmayan satıcılar kimlerdir?
SELECT * SEÇ *
FROM satıcı GELİŞ satıcı
WHERE NOT EXISTS OLAN MEVCUT DEĞİL
(SELECT * (SEÇ *
FROM par_sat GELİŞ par_sat
WHERE sat_no = satıcı_n OLAN sat_no = satıcı_n
AND parça_n =27); VE parça_n = 27);
EXCEPT:
EXCEPT FARKLI
Tablo-1 - Tablo-2 işlemi sonuç(iki kümenin farkı) elde edilecek tabloda,Tablo-1’de bulunup, Tablo-2’de bulunmayan veriler mevcut olacaktır.
ÖRNEK:Satış bölümündeki personel adlarından,mühendislik bölümünde bulunmayanları listele.
SELECT * FROM SEÇ * GELİŞ
(SELECT ad FROM personel (SEÇ ad GELİŞ personel
WHERE bol_no=1 OLAN böl_no = 1
EXCEPT FARKLI
SELECT ad FROM personel SEÇ ad GELİŞ personel
WHERE bol_no =2); OLAN böl_no =2);
INTERSECT:
INTERSECT KESİŞİM
ÖRNEK: Hem Ankara’da,hem de İstanbul’daki projelerde görev alan bölümleri listele.
SELECT * FROM SEÇ * GELİŞ
(SELECT bl_no FROM proje (SEÇ bl_no GELİŞ proje
WHERE yer LIKE “%Ankara%” OLAN yer BULUNAN “%Ankara%”
INTERSECT KESİŞİM
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 içinde 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; GEÇİCİ SAKLA bayan KALICI;
TABLOLARDA DEĞİŞİKLİK YAPMAK:
INSERT:
INSERT EKLE
INTO İÇİNE
VALUES DEĞERLER
ÖRNEK:Bir personel tablosuna sicil_no’su 275 olan personel ile ilişkili 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,brüt,böl_no,yön_s_g_no adres,cins,brüt,böl_no,yön_s_g_no
VALUES(‘275’,’27652418’,’Ali’,’Caner’, DEĞERLER (‘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 SİL
ÖRNEK:2 no’lu bölümdeki personelin tümü tablodan sil.
DELETE FROM personel SİL GELİŞ personel
WHERE böl_no = 2; OLAN böl_no = 2;
5 ROWS DELETED 5 SATIR SİLİNDİ
ÖRNEK:Brüt maaş alanı boş olmayan tüm personeli sil.
DELETE FROM personel SİL GELİŞ personel
WHERE brüt IS NOT NULL; OLAN brüt DEĞERSİZ;
25 ROWS DELETED 25 SATIR SİLİNDİ
UPDATE :
UPDATE GÜNCELLE
SET YAP
ÖRNEK:2’inci bölümün yürüttüğü projelerde kullanılan tüm parçaların fiyatlarını % 7
zam yap.
UPDATE parça GÜNCELLE parça
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ı INDEKS YARAT ındeks adı
ON tablo adı(kolon adı 1,kolon adı 2,.,.kolon adı n); İÇİN tablo adı(kolon adı 1,kolon adı 2,.,.kolon adı n);
TEK BİR ALAN AGÖRE ARTAN SIRADA İNDEKSLEME :
ÖRNEK:İşletmede çalışan personeli brüt maaşlarına göre artan sırada listele.(Brüt alana göre bir indeks oluşturmalıyız)
CREATE INDEX pers_maas INDEKS YARAT pers_maas
ON personel(brüt); İÇİN personel(brüt);
INDEX CREATED 127 ROWS İNDEKS YARATILDI 127 SATIR
127 satırlık personel tablosu ile ilişkili olarak brüt kolonu indeks anahtarı olarak kullanan pers_maas adlı indeks oluşturulmuştur.Bu durumda;
SELECT * SEÇ *
FROM personel; GELİŞ personel;
_Şeklinde listeleme komutu sonucunda personel tablosundaki tüm personel, brüt maaşlarına göre sıralı olarak listelenecektir.
TEK BİR ALANA GÖRE AZALAN SIRADA İNDEKSLEME :
DESC Küçükten büyüğe (K-
ÖRNEK:İşletmede çalışan personeli brüt maaşlarına göre azalan sırada (yüksek maaştan düşük maaşa doğru)listelemek istersek ,brüt alanına göre aşağıdaki şekilde oluşturmak gerekir.
CREATE INDEX INDEKS YARAT
ON personel (brüt DESC); İÇİN PERSONEL(BRÜT K-;
BİRDEN FAZLA ALANA GÖRE İNDEKSLEME :
ÖRNEK:İşletmedeki personelin öncelikle adlarına göre,aynı adda olanların soyadlarına göre ,hem adı hemde soyadı aynı olanların maaşlarına göre sıralanmış olarak listele.
CREATE INDEX p_ad_soy_m İNDEKS YARAT p_ad_soy_m
ON personel (ad,soyad,brüt); İÇİN personel (ad,soyad,brüt);
Bu durumda;
SELECT * SEÇ *
FROM personel; GELİŞ personel; ile tablo görüntülenir.
UNİQUE SÖZCÜĞÜ:
UNIQUE TEK
Bir tablo,seçilen bir sutüna (alana) göre indekslenirken , indeksleme alanı olarak seçilen sütundaki verilerin tekrarlanmasına müsaade edilmesi istenmiyorsa,indeksleme yapılırken ,CREATE ,INDEX komutu iinde UNİQUE sözcüğü kullanılmalıdır.
CREATE UNİQUE İNDEX pers_sicil TEK INDEKS YARAT pers_sicil
ON personel (sicil); İÇİN personel (sicil);
EKLEME İÇİN:
Personel tablosuna
INSERT INTO Personel EKLE İÇİNE Personel
VALUES(53768 ,’27241685’,’ayşe’, DEĞERLER (53768 ,’27241685’,’ayşe’ ,
‘şen’{01/04/63},’Merkez cad. 82 – ‘şen’{01/04/63},’Merkez cad. 82 –
Kadıköy’.F. ,27000000 ,2, ‘34261578’); Kadıköy’.Y. ,27000000 ,2, ‘34261578’);
MEVCUT BİR İNDEKSİN SİLİNMESİ:
DROP IPTAL
DROP INDEX pers_in; İPTAL İNDEKS pers_in;
Komutu ile
INDEX DROPPED (İNDEKS SİLİNDİ)
TABLONUN YAPISINDA DEĞİŞİKLİK YAPMAK:
ALTER TABLE TABLO DEĞİŞTİR
MEVCUT BİR TABLOYA KOLON EKLEMEK:
ADD EKLE
DATE TARİH
ALTER TABLE (TABLO DEĞİŞTİR) komutu içinde ADD (EKLE) ile satır ekle.
ÖRNEK:Personel tablosuna ,işe başlama tarihini belirten bir kolon ekle
ALTER TABLE personel TABLO DEĞİŞTİR personel
ADD iş_baş_tar DATE; EKLE iş_baş_tar TARİH;
ADD (EKLE)iş_baş_tar DATE NOT NULL (TARİH DEĞERSİZ) bu şekilde kullanılsaydı bu kolon satırı gene boş kalırdı ; fakat bu kolon ile ilişkili yeni boş değerler eklemek istendiğinde buna müsaade edilmeyecekti.
MEVCUT BİR TABLONUN KOLONLARINDA DEĞİŞİKLİK YAPMAK :
MODIFY KOMUTU:
MODIFY ONAR
MEVCUT BİR TABLODAN BİR KOLON SİLMEK:
DROP KOMUTU :
DROP İPTAL
ÖRNEK:Personel tablosundan iş_baş_tar kolonunu sil.
ALTER TABLE personel TABLO DEĞİŞTİR personel
DROP iş_baş_tar ; İPTAL iş_baş_tar;
Birden fazla kolonda silinebilir.Birden fazla kolon silmek için virgülle ayrılarak silinir.
BİR TABLONUN ADINI DEĞİŞTİRMEK:
RENAME KOMUTU:
RENAME TABLO YENİ AD
ALTER TABLE personel TABLO DEĞİŞTİR personel
RENAME TABLE elemanlar; TABLO YENİ AD elemanlar;
MEVCUT Bİ TABLONUN BİR KOLONUNUN ADININ DEĞİŞTİRİLMESİ:
RENAME:
RENAME YENİ AD
ALTER TABLE personel
RENAME brüt br-maaş;
MEVCUT BİR TABLONUN TÜMÜYLE SİLİNMESİ
DROP TABLE TABLO İPTAL
ÖRNEK:Proje tablosunu sil.
DROP TABLE proje; TABLO İPTAL proje;
VERİ GÜVENLİĞİ:
CREATE VİEW GÖRÜŞ ALANI YARAT
ÖRNEK:Personel adlı temel tablodan persview adlı bir view oluştur.
CREATE VİEW perswiew GÖRÜŞ ALANI YARAT persview
AS SELECT sicil,sos_g_no,ad,soyad,doğ_tar, GİBİ SEÇ sicil,sos_g_no,ad,soyad,doğ_tar,
adres,cins,böl_no,yon_s_g_no adres,cins,böl_no,yon_s_g_no
FROM personel; GELİŞ personel;
VERİ BÜTÜNLÜĞÜNÜN SAĞLANMASI:
WITH CHECK OPTION KONTROLLÜ
CREATE VIEW UST_PER_ VIEW Önce bir vıew oluşturulsun
AS SELECT FROM personel
WHERE brüt >25000000
WITH CHECK OPTİON;
GÖRÜŞ ALANI YARAT UST_PER_VIEW
GİBİ SEÇ GELİŞ personel
OLAN brüt >25000000
KOTROLLÜ;
Burada, maaşı 25000000’ün üzerinde olan personelden oluşan bir UST_PER_VIEW adlı view oluşturulmuştur.Bu vıew’a brüt maaşı 13000000 olan bir personel eklemek istediği zaman hata mesajı verecektir.
CHECK opsiyonu kullanılmasaydı hata mesajı alınmadan bu veri VİEW içine yükleyecekti.
EKLEME
INSERT INTO UST_PER_VIEW EKLE İÇİNE UST_PER_VIEW
VALUES (27521 ,’27865427’,’ayşe’, DEĞERLER (27521 ,’27865427’,’ayşe’,
‘okan’ ,{01/05/1962}’Cumh. Cad. 46 – Taksim’, ‘okan’ ,{01/05/1962}’Cumh. Cad. 46 – Taksim’,
.F.,13000000 ,1 ,’27651112’); .F.,13000000 ,1 ,’27651112’);
VIEW İÇİNDE SATIR SİLME:
ÖRNEK:UST_PER_VIEW içinden,maaşı 2500000’den az olan kişileri sil.
DELETE FROM UST_PER_VIEW SİL GELİŞ UST_PER_VIEW
WHERE brüt < 25000000; OLAN brüt < 25000000;
VIEW SATIRLARI ÜZERİNDE GÜNCELLEME :
ÖRNEK: UST_PER_VIEW adlı view’de sicili 27251 olan kişnin maaşını 37000000 olarak değiştir.
UPDATE UST_PER_VIEW GÜNCELLE UST_PER_VIEW
SET brüt = 37000000 YAP brüt = 37000000
WHERE sicil = 27251; OLAN sicil = 27251;
BİR VIEW’U SİLMEK:
DROP VIEW GÖRÜŞ ALANI İPTALİ
DROP VIEW UST_PER_VIEW; GÖRÜŞ ALANI İPTALİ UST_PER_VIEW;
SQL’in amacı bu komutları yan yana yazdığımızda bir cümlenin ortaya çıkmasıdır.
SELECT .... FROM .... WHERE ....,ORDER BY ....,GROUP BY .........HAVING....
......(DEN).....GELİŞ.....OLAN.. ,.......SIRALA....,GRUPLA......SAHİP....SEÇ