|
|
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İM | DEP | GOREV | YIL | MAAS |
17 | Mert | 20 | memur | 1 | 400 |
18 | Erkan | 42 | memur | 2 | 520 |
15 | Esra | 38 | satis | 1 | 650 |
16 | Ece | 15 | satis | 7 | 650 |
19 | Seda | 42 | yonetici | 7 | 730 |
11 | Melike | 20 | satis | 8 | 780 |
12 | Elif | 38 | yonetici | 5 | 880 |
10 | Ali | 20 | yonetici | 7 | 900 |
13 | Banu | 38 | satis | 6 | 920 |
14 | Mehmet | 15 | yonetici | 10 | 1000 |
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İM | DEP | GOREV |
10 | Ali | 20 | yonetici |
11 | Melike | 20 | satis |
12 | Elif | 38 | yonetici |
13 | Banu | 38 | satis |
14 | Mehmet | 15 | yonetici |
15 | Esra | 38 | satis |
16 | Ece | 15 | satis |
17 | Mert | 20 | memur |
18 | Erkan | 42 | memur |
19 | Seda | 42 | yonetici |
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İM | DEP | GOREV | YIL | MAAS |
10 | Ali | 20 | yonetici | 7 | 900 |
11 | Melike | 20 | satis | 8 | 780 |
17 | Mert | 20 | memur | 1 | 400 |
#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İM | DEP | GOREV |
14 | Mehmet | 15 | yonetici |
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İM | DEP | YIL |
Erkan | 42 | 2 |
Ece | 15 | 7 |
Seda | 42 | 7 |
Ali | 20 | 7 |
#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İM | YIL | MAAS |
Elif | 5 | 880 |
Melike | 8 | 780 |
Seda | 7 | 730 |
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İM | YIL | MAAS |
Elif | 5 | 880 |
Erkan | 2 | 520 |
Melike | 8 | 780 |
Mert | 20 | 400 |
Seda | 7 | 730 |
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;
NO | MAAS |
17 | 400 |
18 | 520 |
#personel1 listesindeki satis ve yonetici gorevindekilerin listelerinin IN kullanilmasiyla soyle gorulur
SELECT DISTINCT isim,maas,gorev FROM personel1 WHERE gorev IN ('yonetici' , 'satis');
İSİM | GOREV | MAAS |
Esra | satis | 650 |
Ece | satis | 650 |
Seda | yonetici | 730 |
Melike | satis | 780 |
Elif | yonetici | 880 |
Ali | yonetici | 900 |
Banu | satis | 920 |
Mehmet | yonetici | 1000 |
#personel1 tablosundan gorevinin icinde 'one'gecenlerin listesi isim,yil,ve maaslariylabirlikte
SELECT isim, gorev, yil, maas FROM personel1 WHERE gorev LIKE '%one%';
İSİM | GOREV | YIL | MAAS |
Seda | yonetici | 7 | 730 |
Elif | yonetici | 5 | 880 |
Ali | yonetici | 7 | 900 |
Mehmet | yonetici | 10 | 1000 |
Hazirladigimiz tabloyu istedigimiz ozellige gore dizebiliriz
#personel1 tablosunu maasa gore duzenlemek icin
SELECT * FROM personel1 ORDER BY maas;
NO | İSİM | DEP | GOREV | YIL | MAAS |
17 | Mert | 20 | memur | 1 | 400 |
18 | Erkan | 42 | memur | 2 | 520 |
15 | Esra | 38 | satis | 1 | 650 |
16 | Ece | 15 | satis | 7 | 650 |
19 | Seda | 42 | yonetici | 7 | 730 |
11 | Melike | 20 | satis | 8 | 780 |
12 | Elif | 38 | yonetici | 5 | 880 |
10 | Ali | 20 | yonetici | 7 | 900 |
13 | Banu | 38 | satis | 6 | 920 |
14 | Mehmet | 15 | yonetici | 10 | 1000 |
Tablodan istedigimiz degerleri silmmemizde mumkun
#personel1 tablosundan 15 nolu personeli silecegiz.
DELETE FROM personel1 WHERE no=15;
NO | İSİM | DEP | GOREV | YIL | MAAS |
17 | Mert | 20 | memur | 1 | 400 |
18 | Erkan | 42 | memur | 2 | 520 |
16 | Ece | 15 | satis | 7 | 650 |
19 | Seda | 42 | yonetici | 7 | 730 |
11 | Melike | 20 | satis | 8 | 780 |
12 | Elif | 38 | yonetici | 5 | 880 |
10 | Ali | 20 | yonetici | 7 | 900 |
13 | Banu | 38 | satis | 6 | 920 |
14 | Mehmet | 15 | yonetici | 10 | 1000 |
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;
MAX | GOREV |
520 | memur |
7360 | satis |
8000 | yonetici |
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;
GOREV | MAX |
satis | 7360 |
yonetici | 8000 |
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İM | DEP | GOREV | YIL | MAAS |
10 | Ayhan | 20 | yonetici | 7 | 7200 |
11 | Melike | 20 | satis | 8 | 6240 |
12 | Elif | 38 | yonetici | 5 | 3520 |
13 | Banu | 38 | satis | 6 | 7360 |
14 | Mehmet | 15 | yonetici | 10 | 8000 |
15 | Esra | 38 | satis | 1 | 650 |
16 | Ece | 15 | satis | 7 | 5200 |
17 | Mert | 20 | memur | 1 | 400 |
18 | Erkan | 42 | memur | 2 | 520 |
19 | Seda | 42 | yonetici | 7 | 5840 |
# 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İM | DEP | MAAS | KDV |
Ayhan | 20 | 7200 | 1440 |
Banu | 38 | 7360 | 1472 |
Ece | 15 | 5200 | 1040 |
Elif | 38 | 3520 | 704 |
Erkan | 42 | 520 | 104 |
Esra | 38 | 650 | 130 |
Mehmet | 15 | 8000 | |
Melike | 20 | 6240 | 1248 |
Mert | 20 | 400 | 80 |
Seda | 42 | 5840 | 1168 |
#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;
NO | YAS | TEL | ADRES |
10 | 23 | 555 | uskudar |
11 | 24 | 567 | levent |
12 | 23 | 444 | levent |
13 | 26 | 777 | maslak |
14 | 29 | 454 | basiktas |
15 | 23 | 555 | besiktas |
16 | 28 | 654 | kadikoy |
17 | 26 | 876 | uskudar |
18 | 26 | 776 | sariyer |
19 | 28 | 876 | uskudar |
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;
GOREV | DEP | YAS |
memur | 38 | 26 |
memur | 38 | 26 |
memur | 42 | 26 |
satis | 15 | 28 |
satis | 20 | 24 |
satis | 38 | 654 |
yonetici | 15 | 29 |
yonetici | 20 | 23 |
yonetici | 38 | 23 |
yonetici | 42 | 28 |
Bu yazı İTU Bilişim Enstitü'nden alınmıştır. http://www.be.itu.edu.tr
|
|