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