İçindekilerGirişİndex
YukarıİlkÖncekiSonrakiSon
Geriİleri
Yazdır

SQL Notları

CREATE TABLE bir tablo olusturmak icin verilmesi gereken ilk komuttur.Devaminda tablonun adi vardir. Gerekli parametreler parantez icinde int ve text ifadelerinden biriyle birlikte verilir. Girecegimiz veri bir sayi ise int ,metin ise text ifadesiyle birlikte kullanilir. Unutulmamasi gereken tum komutlarin ardindan noktali virgul koymaktir. Ayrica tablo yada sutun isimleri tek bir kelime olmalidir.

#Bir sirkette personel bilgilerini olusturan tablo asagidaki gibi olusturulabilir.

CREATE TABLE personel1( no int, isim text, dep int, gorev text, yil int, maas int); 

Veriler INSERT INTO komutu ardindan tablo adi ve VALUES komutuyla ve devaminda parantez icinde degerlerle girilir. Metin ifadeleri mutlaka tirnak icerisinde olmalidir. En sonunda da noktali virgulu koymaliyiz. Verilerin girisinde dikkat edilmesi gereken bir husus aralarina virgul koymaktir. Bir baska husus da metinlerin girisi tirnak icinde olmalidir.

#personel1 tablosunun verileri asagidaki gibi verilir.

INSERT INTO personel1 VALUES (10, 'Ali', 20, 'yonetici', 7, 900);
INSERT INTO personel1 VALUES (11, 'Melike', 20, 'satis', 8, 780); 
INSERT INTO personel1 VALUES (12, 'Elif', 38, 'yonetici', 5, 880); 
INSERT INTO personel1 VALUES (13, 'Banu', 38, 'satis', 6, 920); 
INSERT INTO personel1 VALUES (14, 'Mehmet', 15, 'yonetici', 10, 1000); 
INSERT INTO personel1 VALUES (15, 'Esra', 38, 'satis', 1, 650); 
INSERT INTO personel1 VALUES (16, 'Ece', 15, 'satis', 7, 650); 
INSERT INTO personel1 VALUES (17, 'Mert', 20, 'memur', 1, 400); 
INSERT INTO personel1 VALUES (18, 'Erkan', 42, 'memur', 2, 520); 
INSERT INTO personel1 VALUES (19, 'Seda', 42, 'yonetici', 7, 730); 

SELECT * FROM komutu ve ardindan tablo adiyla olusturdugumuz tabloyu gorebiliriz.Burada * isareti yardimiyla sutun isimlerini yazmaya gerek kalmadan tum sutunlari goruruz.

SELECT * FROM personel1; 

#personel1 tablosu asagidaki gibi olusur.

NOİSİMDEPGOREVYILMAAS
17Mert20memur1400
18Erkan42memur2520
15Esra38satis1650
16Ece15satis7650
19Seda42yonetici7730
11Melike20satis8780
12Elif38yonetici5880
10Ali20yonetici7900
13Banu38satis6920
14Mehmet15yonetici101000

Tablodan istedigimiz degerleri artik kullanabiliriz. Sadece bazi sutunlari gormek isteyebiliriz. SELECT komutu ardindan istedigimiz sutunlarin isimlerini yazar devaminda FROM komutu ve tablo adiyla noktalivirgul kullanarak komutu olustururuz.

#personel1 tablosundan sadece numarasi, adi, departmani ve gorevi hakkindaki verilere su sekilde ulasilir

SELECT no, isim, dep, gorev FROM personel1 ; 

#olusan tablo su sekildedir.

NOİSİMDEPGOREV
10Ali20yonetici
11Melike20satis
12Elif38yonetici
13Banu38satis
14Mehmet15yonetici
15Esra38satis
16Ece15satis
17Mert20memur
18Erkan42memur
19Seda42yonetici

Bazi iliskisel operatorler var. = esitliklerde != esit degil kucuk > buyuk <= kucuk veya esit >= buyuk veya esit) SELECT * FROM komutu ardindan tablo adini verir ve devaminda WHERE komutuyla aradigimiz veriyi belirtiriz. En sonunda noktali virgul kullanmayi unutmamaliyiz.

#personel1 tablosundan 20 nolu departmanda calisanlari gormek istersek verecegimiz komut soyle olur.

SELECT * FROM personel1 WHERE dep=20

#olusan tablo soyledir.

NOİSİMDEPGOREVYILMAAS
10Ali20yonetici7900
11Melike20satis8780
17Mert20memur1400

#yada bazi ozelliklere sahip personelin istedigimiz verileri icin

SELECT no, isim, dep, gorev FROM personel1 WHERE gorev = 'yonetici' AND dep = 15; 

komutunu kullaniriz.Burada WHERE komutuyla birlikte AND komutu iki ayri ozellik istedigimizi ifade ederiz. Yani gorevi yonetici olan ve 15 departmaninda calisan insanlarin numara ve isimlerini ifade eder.

#olusan tablo soyledir.

NOİSİMDEPGOREV
14Mehmet15yonetici

Ayni sekilde AND kullanisi gibi OR da kullanilabilir.

#Personel1 tablosundan 7veya 2 yil calisanlarin listesi isim ve departmaniyla birlikte su sekilde ulasilir.

SELECT isim, dep, yil FROM personel1 WHERE yil =7 OR yil =2; 

#tablo da soyledir

İSİMDEPYIL
Erkan422
Ece157
Seda427
Ali207

#personel1 tablosundan maasi 900 den kucuk 600 den buyuk olanlarin isim ve yillariyla birlikte su sekilde ulasilir.

SELECT isim, yil, maas FROM personel1 WHERE maas < 900 AND maas > 650; 

İSİMYILMAAS
Elif5880
Melike8780
Seda7730

istedigimiz belli degerlerede ulasabiliriz.

#personel1 tablosundan maaslari 900 den kucuk fakat 650ye esit olmayanlarin isim yil ve maaslari soyle elde edilir.

SELECT isim, yil, maas FROM personel1 WHERE maas < 900 AND maas <> 650;

İSİMYILMAAS
Elif5880
Erkan2520
Melike8780
Mert20400
Seda7730

Bunlarin yaninda BETWEEN ve IN kullanimlarida mevcuttur.

#personel1 tablosundan maaslari 400 'le 700 arasinda olanlarin listesi icin

SELECT no,maas FROM personel1 WHERE maas BETWEEN 400 AND 700; 

NOMAAS
17400
18520

#personel1 listesindeki satis ve yonetici gorevindekilerin listelerinin IN kullanilmasiyla soyle gorulur

SELECT DISTINCT isim,maas,gorev FROM personel1 WHERE gorev IN ('yonetici' , 'satis'); 

İSİMGOREVMAAS
Esrasatis650
Ecesatis650
Sedayonetici730
Melikesatis780
Elifyonetici880
Aliyonetici900
Banusatis920
Mehmetyonetici1000

#personel1 tablosundan gorevinin icinde 'one'gecenlerin listesi isim,yil,ve maaslariylabirlikte

SELECT isim, gorev, yil, maas FROM personel1 WHERE gorev LIKE '%one%'; 

İSİMGOREVYILMAAS
Sedayonetici7730
Elifyonetici5880
Aliyonetici7900
Mehmetyonetici101000

Hazirladigimiz tabloyu istedigimiz ozellige gore dizebiliriz

#personel1 tablosunu maasa gore duzenlemek icin

SELECT * FROM personel1 ORDER BY maas; 

NOİSİMDEPGOREVYILMAAS
17Mert20memur1400
18Erkan42memur2520
15Esra38satis1650
16Ece15satis7650
19Seda42yonetici7730
11Melike20satis8780
12Elif38yonetici5880
10Ali20yonetici7900
13Banu38satis6920
14Mehmet15yonetici101000

Tablodan istedigimiz degerleri silmmemizde mumkun

#personel1 tablosundan 15 nolu personeli silecegiz.

DELETE FROM personel1 WHERE no=15;

NOİSİMDEPGOREVYILMAAS
17Mert20memur1400
18Erkan42memur2520
16Ece15satis7650
19Seda42yonetici7730
11Melike20satis8780
12Elif38yonetici5880
10Ali20yonetici7900
13Banu38satis6920
14Mehmet15yonetici101000

Kullanilan bazi fonksiyonlar vardir.Bunlar MIN en kucuk degeri, MAX en buyuk degeri, SUM toplami, AVG ortalama degeri, COUNT sutuna girilen degerlerin toplamini gosterir, COUNT(*) satira girilen verilerin sayisini gosterir.Hepsinin kullanimi birbirine benzer.

#personel1 tablosundaki maaslain toplamini goruntuleyelim.

SELECT AVG (maas) FROM personel1; 

AVG
14

Tablodaki herhengi bir verinin maximimunu veya minimumunu gorebiliriz.

#personel1 tablosundaki en yuksek maasi gormek icin

SELECT max(maas) FROM personel1; 

MAX
1000

#personel1deki maximum maasi goreve gore gruplandiralim.

SELECT MAX(maas),gorev FROM personel1 GROUP BY gorev;

MAXGOREV
520memur
7360satis
8000yonetici

Yukaridaki tabloda her gorevin maximimum maasini gorduk. FAKat eger istedigimiz belli degerler ise HAVING komutunu kullanabiliriz.

#personel1 tablosundaki maaslarin gorevlere gore gruplandirdigimizda maximimu 7000 den yuksek gorevleri gorelim.

SELECT gorev, max(maas) FROM personel1 GROUP BY gorev HAVING MAX(maas)>7000; 

GOREVMAX
satis7360
yonetici8000

Hazirladigimiz tabloyu guncellestirme olanagimizda var. UPDATE komutu ardindan tablo adi verir, SET komutundan sonra degistirmek istedigimiz parcayi nasil degismesini anlatmaliyiz.

#Personel1 tablosunda alti ve 6 yildan daha fazla calisanlarin maaslarini iki katina cikarmak icin:

UPDATE personel1 SET maas = maas * 2 WHERE yil >=6; 

NOİSİMDEPGOREVYILMAAS
10Ayhan20yonetici77200
11Melike20satis86240
12Elif38yonetici53520
13Banu38satis67360
14Mehmet15yonetici108000
15Esra38satis1650
16Ece15satis75200
17Mert20memur1400
18Erkan42memur2520
19Seda42yonetici75840

# 17 numarali personelin departmanini 38 olarak degistiriyorum.

UPDATE personel1 SET dep=38 WHERE no=17; 

tabloya gecici olarak bir sutun eklenebilir

#personel1 tablomuzda maasin %20 sini KDV olarak bir sutunda gormek istersek

SELECT isim,dep, maas, maas*0.20 as KDV FROM personel1; 

İSİMDEPMAASKDV
Ayhan2072001440
Banu3873601472
Ece1552001040
Elif383520704
Erkan42520104
Esra38650130
Mehmet158000
Melike2062401248
Mert2040080
Seda4258401168

#personel2 adinda yeni bir tablo olusturulacak ilk tblonun satir bilgileri nin yaninda bir de yer bilgisi istiyoruz.

bu yuzden sadece yeri tanimlayip diger bilgileri personel1 den alacagiz

CREATE TABLE personel2( yer text) INHERITS (personel1);

#personel1 tablosunda bir karsilastirma yapalim .yeni olusacak tabloda sadece no, dep, ve maas olsun.

Bu yeni tabloda maas karsilastirmasi yapalim.

uzun bir tablo olusacak.Her bir personeli kendinden daha cok maas alanla karsilastirma yapalim.

SELECT DISTINCT W1.no,W1.dep, W1.maas, W2.no,W2.dep,W2.maas FROM personel1 W1,personel1 W2 WHERE W1.maas W2.maas;

simdide iki ayri tablonun beraberce kullaniminin nasil oldugunu gorelim.bunun icin once bir tablo olusturalim.

#personel3 adli bir tablo

CREATE TABLE personel3 (no int, yas int, tel int, adres text); 
INSERT INTO personel3 VALUES (10,23,555,'uskudar');
INSERT INTO personel3 VALUES (11,24,567, 'levent'); 
INSERT INTO personel3 VALUES (12,23,444, 'levent'); 
INSERT INTO personel3 VALUES (13,26,777, 'maslak'); 
INSERT INTO personel3 VALUES (14,29,454, 'basiktas'); 
INSERT INTO personel3 VALUES (15,30,986, 'besiktas');
INSERT INTO personel3 VALUES (16,28,654, 'kadikoy'); 
INSERT INTO personel3 VALUES (17,26,876, 'uskudar'); 
INSERT INTO personel3 VALUES (18,26,776, 'sariyer'); 
INSERT INTO personel3 VALUES (19,28,876, 'uskudar'); 
SELECT * FROM personel3;

NOYASTELADRES
1023555uskudar
1124567levent
1223444levent
1326777maslak
1429454basiktas
1523555besiktas
1628654kadikoy
1726876uskudar
1826776sariyer
1928876uskudar

Elimizde bulunan iki ayri tabloyu karsilastirmak istedigimizde bu tablolarin en az bir ortak ozelligi olmali. Karsilastirmayi bir ortak ozellige gore yapilabilir.Bunun icin once SELECT komutuyla hangi tablodan hangi veriyi istedigimizi belirtmeliyiz.daha sonra da ortak olan ozellige gore karsilastirma yapmasini isteriz.

#elimizde personel1 ve personel3 adinda iki tablovar. Bunlarin ortak ozelligi ise numaralari. Biz personel1 den gorev ve departmani, personel3 den ise yasi istiyoruz.

SELECT DISTINCT personel1.gorev, personel1.dep,personel3.yas FROM personel1,personel3 WHERE personel1.no=personel3.no; 

GOREVDEPYAS
memur3826
memur3826
memur4226
satis1528
satis2024
satis38654
yonetici1529
yonetici2023
yonetici3823
yonetici4228

Bu yazı İTU Bilişim Enstitü'nden alınmıştır. http://www.be.itu.edu.tr

İçindekilerGirişİndex
YukarıİlkÖncekiSonrakiSon
Geriİleri
Yazdır