MysqL dersLeri (arşiv döküman)

BLuєćяσwηz

Uzman üye
4 May 2008
1,697
38
TυякHα¢кTєαм
SQL nedir ?
++ SQL in açilimi; Structured Query Language [ Yapisal Sorgu Dili ]
++ SQL sizi veritabanina erişmenizi saglar.
++ SQL, ANSI standardinda bir bilgisayar dilidir.
++ SQL veritabanina karşi sorgulari çaliştirabilir.
++ SQL veritabanindaki verileri tekrar ele alabilir.
++ SQL veritabanina yeni bir kayit ekleyebilir.
++ SQL veritabanindan bir kayit silebilir.
++ SQL veritabanindaki bir kaydi guncelleyebilir.
++ SQL kolay ösrenilir

SQL standarttir, fakat ...
SQL, ANSI (American National Standards Institute - Amerikan Ulusal Standardlari Enstitusü) standardinda vertabanina ulasmak ve işlemek için kullanilan bir bilgisayar dilidir. SQL komutlari veritabanindaki verileri guncellemek, tekrar ele almak için kullanilir. SQL in kullanildigi veritabani programlari MS Access, MS SQL Server, DB2, Informix, Oracle, Sybase vs. Fakat SQL dilinin birçok farkli versiyonlari vardir, ama yinede önemli anahtarlar genelde aynidir yada cok benzerdir (örnegin SELECT, UPDATE, DELETE, INSERT, WHERE, ve digerleri).
SQL Veritabani tablolari
Veritabani bir yada birden fazla tablodan olusur. Her tablonun bir adi vardir. Bu tablolardaki kayitlar dizilerde (row) saklanir.
Örnesin "bilgi" tablosunda;
ad soyad il yas----- ------- ---- -----
ali özgür ankara 15
veli sözcü trabzon 20
necmi yakan sivas 19
yukardaki tablo üç kayida sahiptir, her bir kişi için bir tane, yani 3 satira (row) ve ayrica 4 adet kolona (column) sahiptir.
SQL sorgulari
SQL ile, veritabani sorgulanabilir ve sonculari alinabilir.
Örnek bir sorgu;
SELECT soyad FROM bilgi
Sonucu;
soyad-----
özgür
sözcü
yakan
SQL Veri işleme dili (DML - Data Manipulation Language)
SQL, sorgulari calistirmak için bir sözdizimidir. Fakat ayni zamanda kayitlari guncelleme, ekleme ve silmek içinde kullanilir.
Bu sorgu ve guncelleme komutlari, birlikte SQL in bir bolumu olan Veri işleme dilinin olusturuyor:
++ SELECT - veritabanindaki tablodan veri alir
++ UPDATE - veritabanindaki tablodaki veriyi gunceller
++ DELETE - veritabanindaki tablodan veri siler
++ INSERT INTO - veritabanindaki tabloya yeni bir veri ekler

SQL Veri tanimlama dili (DDL - Data Definition Language)
SQL in bir bolumu olan veri tanimlama dili, veritabani tablolarinda işlem yapmaya izin veren, tablolari olusturmak yada silmek için kullanilir. Ayrica index (arama anahtari) belirlemedede kullanilan bir dildir. Tablolar arasinda etkileşimi saglayabilir, aralarinda bir bas kurabilirsiniz.

En sik kulllanilan veri tanimlama sözdizimleri:

## CREATE TABLE - tablo yaratir
## ALTER TABLE - tabloyu degiştirir
## DROP TABLE - tabloyu siler
## CREATE INDEX - index (arama anahtari) olusturur
## DROP INDEX - indexi siler

şimdi bu sözdizimlerini biraz daha ayrintili anlatalim...
SELECT ifadesi
Bu ifade tablodan veri secmek için kullanilir.
ifadenin kurulusu;
SELECT kolonAd(lar)i FROM tabloAdi
örnek veri tabanimizda "bilgi" tablomuzda
ad soyad il yas
----- ------- ---- -----
ali özgür ankara 15
veli sözcü trabzon 20
necmi yakan sivas 19
verileri var diyelim
SELECT yas FROM bilgi
dedisimizde
yas
---
15
20
19

sonucu aliriz.
birden cok kolon secmek için ise;
SELECT ad,soyad FROM bilgi
dedisimzde
ad soyad
----- -------
ali özgür
veli sözcü
necmi yakan
sonucunu verir.
tum kolonlari secmek içinde;
SELECT * FROM bilgi
dememiz yeterlidir.
SELECT DISTINCT ifadesi
Bu ifade sadece farkli ifadeleri secmek için kullanilir.
ifadenin kurulusu;
SELECT DISTINCT kolonAd(lar)i FROM tabloAdi
örnek veritabanimizda "veriler" tablomuzda
firma urunNo
----- --------
CS 4586278
CW 7894331
CL 456
CH 45689
CW 789666879
verileri var diyelim
SELECT firma FROM veriler
dedisimizde sonuc;
firma-----
CS
CW
CL
CH
CW

olucaktir.
Ama ifadeye distinct eklersek, yani
SELECT DISTINCT firma FROM veriler
dersek sonuc;
firma
-----
CS
CW
CL
CH

seklinde olucaktir, yani tekrarlanan satir bilgileri alinmiyacaktir.
WHERE şarti
Bu şart, select ifadesi ile kullanilir.
şartin kurulusu;
SELECT kolonAdi FROM tabloAdi WHERE kolonAdi operator deger

Bu şartta kullanilabilir operatorler;

= eşit
<e> büyüktür
<k>= büyük yada esittir
<= kücük yada esittir
BETWEEN belli bir aralik arasinda
LIKE belli bir kalipla arama
NOT: bazi SQL versiyonlarinda <yerine> Dogru
SELECT * FROM ipList WHERE ipNumarasi=127.0.0.1 ---> Yanlis
SELECT * FROM ipList WHERE kullaniciAdi=’MMx’ ---> Dogru
SELECT * FROM ipList WHERE kullaniciAdi=MMx ---> Yanlis
LIKE operatorunun kullanilisi
Bu operatorle belli bir kalipta arama yapabilirsiniz.
ifadenin kurulusu;
SELECT kolonAdi FROM tabloAdi WHERE kolonAdi LIKE kalip
(%) işareti bilinmeyen yada eksik olan karakter için kullanilir.
Örnek SQL ifadeleri;
SELECT * FROM ipList WHERE kullaniciAdi LIKE ’A%’
SELECT * FROM ipList WHERE kullaniciAdi LIKE ’%x’
SELECT * FROM ipList WHERE kullaniciAdi LIKE ’%er%’

INSERT INTO ifadesi
Bu ifadeyi kullarak veritabanindaki bir tabloya bir satir ekleyebilirsiniz.
ifadenin kurulusu;
INSERT INTO tabloAdi (kolonBir,kolonIki,...) VALUES (kolonBir,kolonIki,...)

veritabanimizda "bilgi" tablomuz olsun;

ad soyad il yas
----- ------- ---- -----
ali özgür ankara 15

INSERT INTO bilgi VALUES (’veli’, ’sözcü’, ’trabzon’, ’20’)

dedisimizde sonucu;

ad soyad il yas
----- ------- ---- -----
ali özgür ankara 15
veli sözcü trabzon 20

olucaktir.

Tüm satirdaki bilgileri doldurmak yerine, sadece belli yerlere veri girmek için ne yapmak gerek derseniz, bir ornekle aciklayalim..

veritabanimizda "bilgi" tablomuz olsun;

ad soyad il yas
----- ------- ---- -----
ali özgür ankara 15
veli sözcü trabzon 20

INSERT INTO Persons (ad, il) VALUES (’necmi’, ’sivas’)

dedisimizde sonucu;

ad soyad il yas
----- ------- ---- -----
ali özgür ankara 15
veli sözcü trabzon 20
necmi sivas

olucaktir.

UPDATE ifadesi

Bu ifadeyi kullanarak veritabanindaki bir veriyi guncelleyebilirsiniz.

ifadenin kurulusu;
UPDATE tabloAdi SET kolonAdi = Yenideger WHERE kolonAdi = tanimlayiciDeger

veritabanimizda "bilgi" tablomuz olsun;

ad soyad il yas
----- ------- ---- -----
ali özgür ankara 15
veli sözcü trabzon 20
necmi yakan sivas 19

UPDATE bilgi SET ad = ’osman’ WHERE soyad = ’yakan’

dedisimizde sonucu;

ad soyad il yas
----- ------- ---- -----
ali özgür ankara 15
veli sözcü trabzon 20
osman yakan sivas 19

olucaktir.

Birden fazla veriyi guncellemek isteyebiliriz, ohalde alttaki ornegi inceleyelim:

veritabanimizda "bilgi" tablomuz olsun;

ad soyad il yas
----- ------- ---- -----
ali özgür ankara 15
veli sözcü trabzon 20
necmi yakan sivas 19

UPDATE bilgi SET il = ’hatay’, yas = ’13’ WHERE soyad = ’yakan’

dedisimizde sonucu;

ad soyad il yas
----- ------- ---- -----
ali özgür ankara 15
veli sözcü trabzon 20
necmi yakan hatay 13

DELETE ifadesi

Bu ifadeyi kullanarak veritabanindaki bir satiri silebilirsiniz.

ifadenin kurulusu;
DELETE FROM tabloAdi WHERE kolonAdi = tanimlayiciDeger

veritabanimizda "bilgi" tablomuz olsun;

ad soyad il yas
----- ------- ---- -----
ali özgür ankara 15
veli sözcü trabzon 20
necmi yakan sivas 19

DELETE FROM bilgi WHERE yas = ’20’

dedisimizde sonuc

ad soyad il yas
----- ------- ---- -----
ali özgür ankara 15
necmi yakan sivas 19

Tablodaki tüm bilgileri silmek için şu ifadeleri kullanabilirsiniz:

DELETE FROM tabloAdi
DELETE * FROM tabloAdi

ORDER BY ifadesi

bu ifade ile sonuclari siralamak mumkundur.

Satirlari siralamak için ifade şu şekilde kurulur;
SELECT kolonAd(lar)i FROM tabloAdi ORDER BY referansKolonu

örnek veri tabanimizda "bilgi" tablomuz olsun

ad soyad il yas
----- ------- ---- -----
ali özgür ankara 15
veli sözcü trabzon 20
necmi yakan sivas 19

SELECT ad,soyad FROM bilgi ORDER BY ad

dedisimizde sonuc

ad soyad
----- -------
ali özgür
necmi yakan
veli sözcü

eger siralamayi tersine cevirmek istersek ifadenin sonuna DESC sözdizimini, sayilari kucukten buyuye siralamak içinde ASC sözdizimini ekliyoruz.

SELECT ad,soyad FROM bilgi ORDER BY ad DESC

dedisimizde sonuc

ad soyad
----- -------
veli sözcü
necmi yakan
ali özgür

AND ve OR operatorlerinin kullanilisi

AND ve OR operatorleri WHERE ifadesiyle birlikte, birden cok durumu birleştirmek için kullanilir. AND operatoru eger TÜM durumlar dogru ise ilgili satiri gosterir. OR operatoru ise durumlardan bir tanesi bile dogru olsa bile ilgili satiri gosterir.

örnekleri "bilgi" adli tablomuza gore vericek olursak

ad soyad il yas
----- ------- ---- -----
ali özgür ankara 15
veli sözcü trabzon 20
necmi yakan sivas 19
osman yakan van 33
alp özgür ankara 12

SELECT * FROM bilgi WHERE ad=’ali’ AND soyad=’özgür’

dedisimizde sonuc

ad soyad il yas
----- ------- ---- -----
ali özgür ankara 15

SELECT * FROM bilgi WHERE ad=’alp’ OR soyad=’özgür’

dedisimizde sonuc

ad soyad il yas
----- ------- ---- -----
ali özgür ankara 15
alp özgür ankara 12
heriki operatorude birleştirecek olursak
SELECT * FROM bilgi WHERE (ad=’alp’ OR ad=’ali’) AND LastName=’özgür’

dedisimizde sonuc
ad soyad il yas
----- ------- ---- -----
ali özgür ankara 15
alp özgür ankara 12

IN operatorunun kullanilisi

Bu operator, bir degeri tam biliyorsak ve bunu goruntulemek istiyorsak kullanabiliriz.
ifadenin kurulusu;
SELECT kolonAdi FROM tabloAdi WHERE colonAdi IN (degerBir,degerIki,...)

örnek veritabanimizda "bilgi" tablomuz olsun
ad soyad il yas
----- ------- ---- -----
ali özgür ankara 15
veli sözcü trabzon 20
necmi yakan sivas 19
osman yakan van 33
alp özgür ankara 12

SELECT * FROM bilgi WHERE il IN (’van’,’trabzon’)
dedigimzde sonuc
ad soyad il yas
----- ------- ---- -----
veli sözcü trabzon 20
osman yakan van 33

BETWEEN operatorunun kullanilisi
Bu operator yardimi ile iki deger arasindaki veriyi secebiliriz, bu degerler numara,yazi yada tarih olabilir.
ifadenin kurulusu;
SELECT kolonAdi FROM tabloAdi WHERE colonAdi BETWEEN degerBir AND degerIki
örnek veritabanimizda "bilgi" tablomuz olsun
ad soyad il yas
----- ------- ---- -----
ali özgür ankara 15
veli sözcü trabzon 20
necmi yakan sivas 19
osman yakan van 33
alp özgür ankara 12

SELECT * FROM bilgi WHERE il BETWEEN ’trabzon’ AND ’van’
dedisimizde sonuc
ad soyad il yas
----- ------- ---- -----
veli sözcü trabzon 20
necmi yakan sivas 19

Yanliz BETWEEN operatoru veritabani cinsine gore degişik sonuclar verebilir. Yukarda oldugu gibi sonraki degeri sonuca dahil etmeyebilir, ilk degeri dahil etmeyebilir, iki degerden hiçbirini dahil etmeden sonuc verebilir yada iki degeride dahil edip sonucu verebilir. Bu yuzden etkili biçimde kullanmadan once bu operatorun tam olarak nasil davrandigini veritabaninizda denemeniz önerilir.

Birde bu aralikta olmayanlarida listeleyebiliriz;
ad soyad il yas
----- ------- ---- -----
ali özgür ankara 15
veli sözcü trabzon 20
necmi yakan sivas 19
osman yakan van 33
alp özgür ankara 12

SELECT * FROM bilgi WHERE il NOT BETWEEN ’trabzon’ AND ’van’
dedisimizde sonuc
ad soyad il yas
----- ------- ---- -----
ali özgür ankara 15
osman yakan van 33
alp özgür ankara 12
 

BLuєćяσwηz

Uzman üye
4 May 2008
1,697
38
TυякHα¢кTєαм
ALIAS operatorunun kullanilisi

Bu operator ile bir kolonun yada tablonun adi bir baska şeymiş gibi kullanilabilir.

ifadelerin kurulusu;
SELECT kolon AS kolonAliasi FROM tablo
SELECT kolon FROM tablo AS tabloAliasi
örnek veritabanimizda "bilgi" tablomuz olsun
ad soyad il yas
----- ------- ---- -----
ali özgür ankara 15
veli sözcü trabzon 20
necmi yakan sivas 19
osman yakan van 33
alp özgür ankara 12

SELECT soyad AS aile, il AS yerleske FROM bilgi
dedisimizde sonuc
aile yerleske
----- --------
özgür ankara
sözcü trabzon
yakan sivas
yakan van
özgür ankara

yada alias i tablo için kullanabiliriz..

SELECT ad, soyad FROM bilgi AS nufusBilgileri
ad soyad
----- -------
ali özgür
veli sözcü
necmi yakan
osman yakan
alp özgür

SQL Join methodunun kullanilisi
Bazen iki yada daha fazla tablodan veri cekmemiz gerekebilir, bu gibi durumlarda bu methodu kullaniriz.
Veritabanindaki tablolar, birbirleriyle bazi key lerle ilişkilendirilmiştir. Ilk ve oncelikli (primary) key, satirlarda bulunan kolonla birlikte tek ve benzeri olmayan degerdir. Iki verinin birbiriyle ilişkilendirilmesinin amaci tablolari aşip, tablo isimlerini tekrarlamadan veriyi almaktir.
veritabanimizda iki adet tablomuz olsun
ilk tablo adimiz "kisi"
kisiID tamAdi
------ --------
01 ali,özgür
02 veli,sözcü
03 necmi,yakan
04 osman,yakan
05 alp,özgür

ikinci tablo adimiz "detay"
kimlikNo il kisiID
-------- ---- ------
4893 ankara 01
6889 trabzon 02
3684 sivas 03
5285 van 04
4234 ankara 05

"kisi" tablosundaki "kisiID" kolonu bir ilk ve oncelikli (primary) keydir. Bunun anlami baska herhangi bir satir ayni degere sahip olamaz. Bu sayede diger kolonlarda ayni degeri bulunan veriler olsa bile bu key onlari birbirinden ayirmakta kullanilabilir.
"detay" tablosunun il ve oncelikli (primary) keyi "kimlikNo" dur. Ve "kisiID" kolonu "bilgi" tablosunu "detay" tablosuyla baska herhangi bir veri girmeden ilişkilendirmiştir.
veritabanimiza birkac SQL tarzi soru soralim bakalim nasil soruyoruz ve nasil cevaplar aliyoruz
Insansi soru: kim nerde oturuyor?
SQL tarzi soru(sorgu): SELECT kisi.tamAd, detay.il FROM kisi, detay WHERE kisi.kisiID=detay.kisiID
Cevap:
tamAdi il-------- ----
ali,özgür ankara
veli,sözcü trabzon
necmi,yakan sivas
osman,yakan van
alp,özgür ankara

Insansi soru: kim trabzonda oturuyor?
SQL tarzi soru(sorgu): SELECT kisi.tamAdi FROM kisi, detay WHERE kisi.kisiID=detay.kisiID AND detay.il=’trabzon’

Cevap:
tamAdi
--------
veli,sözcü
Bu işi birde JOIN sozdizimi kullanarak yapabiliriz.
INNER JOIN operatorunun kullanilisi
ifadelerin kurulusu;
SELECT bolgiBir, bolgiIki, bolgiUc FROM ilkTablo INNER JOIN ikinciTablo ON ilkTablo.keyBolgesi = ikinciTablo.yabanciKeyBolgesi
veritabanimizda iki adet tablomuz olsun
ilk tablo adimiz "kisi"
kisiID tamAdi
------ --------
01 ali,özgür
02 veli,sözcü
03 necmi,yakan
04 osman,yakan
05 alp,özgür
06 zeki,civi
07 alp,öztürk
ikinci tablo adimiz "detay"
kimlikNo il kisiID
-------- ---- ------
4893 ankara 01
6889 trabzon 02
3684 sivas 03
5285 van 04
4234 ankara 05

ve sorularimiza INNER JOIN kullarak devam edelim..
Insansi soru: kim nerde oturuyor?
SQL tarzi soru(sorgu): SELECT kisi.tamAdi, detay.il FROM kisi INNER JOIN detay ON kisi.kisiID = detay.kisiID
cevap:
tamAdi il-------- ----
ali,özgür ankara
veli,sözcü trabzon
necmi,yakan sivas
osman,yakan van
alp,özgür ankara

Bu method tablolardaki eşleşmiş her veriyi cikarticaktir, eger eşlenmemiş bir veri varsa onu cikarmiyacaktir.
LEFT JOIN operatorunun kullanilisi
ifadelerin kurulusu;
SELECT bolgiBir, bolgiIki, bolgiUc FROM ilkTablo LEFT JOIN ikinciTablo ON ilkTablo.keyBolgesi = ikinciTablo.yabanciKeyBolgesi
veritabanimizda iki adet tablomuz olsun
ilk tablo adimiz "kisi"
kisiID tamAdi------ --------
01 ali,özgür
02 veli,sözcü
03 necmi,yakan
04 osman,yakan
05 alp,özgür
06 zeki,civi
07 alp,öztürk
ikinci tablo adimiz "detay"
kimlikNo il kisiID-------- ---- ------
4893 ankara 01
6889 trabzon 02
3684 sivas 03
5285 van 04
4234 ankara 05

ve sorularimiza INNER JOIN kullarak devam edelim..
Insansi soru: kim nerde oturuyor?
SQL tarzi soru(sorgu): SELECT kisi.tamAdi, detay.il FROM kisi LEFT JOIN detay ON kisi.kisiID = detay.kisiID
cevap:
tamAdi il
-------- ----
ali,özgür ankara
veli,sözcü trabzon
necmi,yakan sivas
osman,yakan van
alp,özgür ankara
zeki,civi
alp,öztürk
Gördünüz gibi bu sefer LEFT JOIN operatorunu kullandik ve veritabanimizda il bilgsi bulunmayan kayitlarimizi cevap listesine ekledi..
Bu demek oluyorki LEFT JOIN ilk tabloda(SQL sorgusunda ismi gecen ilk tablo) girdisi olmasina karsin ikinci tabloda eşlendisi bir degeri yoksabile o girdisi sonuca ekleniyor.
Bunun tam tersini yapmak için yani ikinci tabloda girdisi oldugu halde ilk tabloda karşiligi olmayan verileride sonuca eklemek istersek,
kurmamiz gereken SQL ifadesi:
SELECT bolgiBir, bolgiIki, bolgiUc FROM ilkTablo RIGHT JOIN ikinciTablo ON ilkTablo.keyBolgesi = ikinciTablo.yabanciKeyBolgesi
SQL UNION ve UNION ALL methodlarinin kullanilisi
Bu method verdisi sonuc itibari ile JOIN methoduna benzesede, bu methodun JOIN den farki secilecek kolonlarin veri tiplerinin ayni olma sartidir.
UNION methodu, eger secilmiş olan verilerde çiftler varsa onlari sonuca yansitmaz ..
UNION ALL dersek düz mantikla, secilmiş tum verileri (aynisindan olsa bile) sonuc olarak veririr...
ifadelerin kuruluslari;
ilk SQL sorgusu UNION ikici SQL sorgusu
ilk SQL sorgusu UNION ALL ikici SQL sorgusu

veritabanimizin ilk tablosu, "donerSevenler"
kisiID ad
------ ----
01 mert
02 can
03 asli
ikinci tablosu, "pideSevenler"
kisiID ad
------ ----
01 veli
02 ali
03 asli
04 ersin

SELECT ad FROM onerSevenler UNION SELECT ad FROM pideSevenle

dedisimizde sonuc
ad---
mert
can
asli
veli
ali
ersin
eger SELECT ad FROM onerSevenler UNION ALL SELECT ad FROM pideSevenle dersek sonuc
ad---
mert
can
asli
veli
ali
asli
ersin

olur...

SELECT ifadesi
Veritabani yaratmak için kullanilan ifade;
CREATE DATABASE veriTabaniAdi
Veritabanina tablo eklemek için kullanilan ifade;
CREATE TABLE tabloAdi
(
kolonAdi veriTipi,
kolonAdi veriTipi,
.................,
)

örnesin:
CREATE TABLE kisi(
ad varchar,
soyad varchar,
il varchar,
yas int
)

Buna ek olarak bir kolona girilecek max. girdi uzunlugunu belirleyebilirsizin.
örnesin:

CREATE TABLE kisi
(
ad varchar(10),
soyad varchar(30),
il varchar,
yas int(2)
)

Simdi sorucaksiniz baska hangi veri tipleri vardir, yada yukardaki ornektekiler nedemekdir diye ...
Veri tipleri
integer(uzunluk), int(uzunluk) ,smallint(uzunluk) ,tinyint(uzunluk);
Sadece tamsayilari tutar, eger parantez içinde bir sayi yazarsaniz o uzunluk degerini gecmeden veri tutar..

decimal(uzunluk,hassasiyet), numeric(uzunluk,hassasiyet);
Ondalikli sayilari tutar, parantez içinde uzunluk olarak en fazla kac karakterli sayi tutmasini ve hassasiyet olarakta virgulden sonra kac rakam tutmasini istedisinizi yazabilirsiniz.

char(uzunluk);
Belli bir degerdeki diziyi tutar. Bu dizi harf, sayi yada ozel karakterlere sahip olabilir. Bellirliyecegimiz dizi uzunlugu parantez içine yazilmalidir.

varchar(uzunluk);
Max. uzunlugu verilen bir diziyi tutar. Bu dizi harf, sayi yada ozel karakterlere sahip olabilir.

date(YYYYAAGG); Tarih degerini tutar, Yil Ay ve Gun olarak..

INDEX ifadesi

index (arama anahtari) olusturur, bu sayede sorgulamaya hiz getir. Yanliz guncelleme esnasinda indexli kolonlar daha fazla zaman alir bu yuzden indexlerin sadece arama tarzinda kullanilmasi onerilir..

Unique index
Tabloya unique index olusturur, fakat bu index tarzinda iki satir ayni index degerine sahip olamaz.

ifadenin kurulusu;
CREATE UNIQUE INDEX indexAdi ON tabloAdi (kolonAdi)

Basit index
Bu indexde ise, unique dan farkli olarak iki tane index degeri ayni olabilir.

ifadenin kurulusu;
CREATE INDEX indexAdi ON tabloAdi (kolonAdi)

eger index degerlerini azalan bir biçimde siralamak isterseniz o zamanda ifadeyi soyle kurariz;
CREATE INDEX indexAdi ON tabloAdi (kolonAdi DESC)

eger index degerini birden fazla kolona vermek istiyorsaniz ise ifadeyi soyle kurariz;
CREATE INDEX indexAdi ON tabloAdi (kolonAdi,digerKolonAdi)

DROP ifadesi

DROP genel olarak silme işlemi gercekleştirir...

indexleri silmek için kurulacak ifade;
DROP INDEX tabloAdi.indexAdi

tablo silmek için kurulacak ifade;
DROP TABLE tabloAdi

veritabanini silmek için kurulacak ifade;
DROP DATABASE veritabaniAdi

Eger sadece bir tablo içindeki verilerin hepsinden kurtulmak istersek, kullanicagimiz ifade;
TRUNCATE TABLE tabloAdi

ALTER TABLE ifadesi

Bu ifade varolan bir tabloya kolon eklemek yada silmek için kullanilir.

ifadelerin kullanilişi;
ALTER TABLE tabloAdi ADD kolonAdi veriTipi

ALTER TABLE tabloAdi DROP COLUMN kolonAdi

Yanliz bazi veritabanlari kolonu silme işlemini bu şekilde izin vermiyor, o zaman sizde DROP COLUMN kolonAdi sorgusunu kullaniniz.

örnek veritabanimizda "bilgi" tablomuz olsun

ad soyad il
-- ------ --
ali saygin tekirdag

ALTER TABLE bilgi ADD yas varchar(2)

dedisimizde sonuc

ad soyad il yas
-- ------ -- ---
ali saygin tekirdag

ALTER TABLE bilgi DROP COLUMN il

dedimizde sonuc

ad soyad yas
-- ------ ---
ali saygin

SQL Fonkisyonlari

SQL kendi içinde bir cok fonksiyonu barindirir, bunlar sayim ve hesaplama için kullanilabilir.

Fonksiyon sözdizimi kuruluşu;
SELECT fonksiyon(kolon) FROM tablo

Fonksiyon tipleri;
SQL fonksiyonlari birkaç temel tip ve kategoriye sahiptir. Temel fonksiyon tipleri:

++ Aggregate (birleşik degerli) fonksiyonlar
++ Scalar (tekil degerli) fonksiyonlar

Aggregate (birleşik degerli) fonksiyonlar
Bu tip fonksiyonlar birçok deger ile çalişir ama sonucu tek bir degerdir.

Bu fonksiyonlarin MS Access e uygun olanlari:
AVG(kolon): girilen kolondaki sayilarin aritmetik ortalama degerini geri yollar
COUNT(kolon): Boş degerler haric, girilen kolondaki satir sayisini yollar
COUNT(*): Verilen tablodaki satir sayisini yollar
FIRST(kolon): girilen kolondaki ilk degeri yollar
LAST(kolon): girilen kolondaki son degeri yollar
MAX(kolon): girilen kolondaki en yuksek degeri yollar
MIN(kolon): girilen kolondaki en dusuk degeri yollar
STDEV(kolon): girilen kolondaki basit istatiksel standard sapma degerini yollar
STDEVP(kolon): girilen kolondaki nüfus istatiksel standard sapma degerini yollar
SUM(kolon): girilen kolondaki sayilarin toplamini yollar

Bu fonksiyonlarin SQL Server a uygun olanlari:
AVG(kolon): girilen kolondaki sayilarin aritmetik ortalama degerini geri yollar
BINARY_CHECKSUM: tablonun verilen satirindaki ikilik tabandaki checksum degerini yollar
CHECKSUM: tablonun verilen satirindaki checksum degerini yollar
CHECKSUM_AGG: boş degerler haricindeki verilerin checksum degerini yollar
COUNT(kolon): Boş degerler haric, girilen kolondaki satir sayisini yollar
COUNT(*): Verilen tablodaki satir sayisini yollar
COUNT(DISTINCT kolon): Verilen tablodaki satir sayisini yollar, fakat cift veri bulunan satirlari bir defa sayar
FIRST(kolon): girilen kolondaki ilk degeri yollar
LAST(kolon): girilen kolondaki son degeri yollar
MAX(kolon): girilen kolondaki en yuksek degeri yollar
MIN(kolon): girilen kolondaki en dusuk degeri yollar
STDEV(kolon): girilen kolondaki basit istatiksel standard sapma degerini yollar
STDEVP(kolon): girilen kolondaki nüfus istatiksel standard sapma degerini yollar
SUM(kolon): girilen kolondaki sayilarin toplamini yollar

Scalar (tekil degerli) fonksiyonlar
Girilen degere gore bir deger ile calisir ve sonuc olarak bir deger yollar.

Bu fonksiyonlarin MS Access e uygun olanlari:
UCASE(c): bolgedeki karakterlerin hepsini buyuk yapar
LCASE(c): bolgedeki karakterlerin hepsini kucuk yapar
MID(c,start[,end]): yazi alanindan karakterleri calistirir
INSTR(c): yazi alanindan karakterleri gosterir
LEFT(c,karakterNumarasi): text alaninin girilen sayiya kadar olan kismini yollar (soldan sayar)
RIGHT(c,number_of_char): text alaninin girilen sayiya kadar olan kismini yollar (sagdan sayar)
ROUND(c,hassasiyet): sayi alanini verilen hassasiyete gore yuvarlar
MOD(x,y): bolme işleminde kalani gosterir (mod işlemi yapar)
NOW(): o anki sistem zamanini gosterir
FORMAT(c,format): alanin gosterim biçimini degiştirir
DATEDIFF(d,birinciTarih,ikinciTarih): tarih hesaplarini yapmak için kullanilir

SQL GROUP BY VE HAVING methodlarinin kullanilisi

Aggregate (birleşik degerli) fonksiyonlari ( SUM gibi ) genellikle GROUP BY fonsiyonuna gerek duyar.

GROUP BY ek fonksiyonu

Bu ek fonksiyonun kullanimi, SUM fonksiyonu ile kolon içinde istenilen bir belli bir bolumun toplamini sonuca verememesinden kaynaklanmaktadir. Bu ek fonksiyon yardimiyla toplami istenen veriler gruplanip daha detayli sorgulanir.

ifadenin kuruluşu;
SELECT kolon,SUM(kolon) FROM tabloAdi GROUP BY kolon

veritabanimizda "satis" tablosu olsun

firma miktar
------ --------
CyberHost 15
internetSahibi 19
CyberHost 23
digerHost 12
internetSahibi 18

SELECT firma, SUM(miktar) FROM satis

dedigimizde sonuc

firma miktar
------ --------
CyberHost 87
internetSahibi 87
CyberHost 87
digerHost 87
internetSahibi 87

SELECT firma,SUM(miktar) FROM satis GROUP BY firma

dedigimizde sonuc

firma miktar
------ --------
CyberHost 38
internetSahibi 37
digerHost 12

HAVING ek fonksiyonu

Bu fonksiyonun eklenmesinin nedeni WHERE ifadesi ile Aggregate (birleşik degerli) fonksiyonlarinin kullanilamamasi ve sonuclarin bazi ayiklama ve testten gecirilme ihtiyacidir.

ifadenin kurulusu;
SELECT kolon,SUM(kolon) FROM tabloAdi GROUP BY kolon HAVING SUM(kolon) durumYadaFonsiyon deger

veritabanimizda "satis" tablosu olsun

firma miktar
------ --------
CyberHost 15
internetSahibi 19
CyberHost 23
digerHost 12
internetSahibi 18

SELECT firma,SUM(miktar) FROM satis GROUP BY firma HAVING SUM(miktar)>35

dedisimizde sonuc

firma miktar
------ --------
CyberHost 38
internetSahibi 37

SELECT INTO ifadesi

Bu ifade genel olarak tablo yedekleri almakta ve kayitlari arşivlemeyi saslamakta kullanilir.

ifadenin kurulusu;
SELECT kolonAd(lar)i INTO yeniTabloAdi [IN farkliBirVeriTabaniAdi] FROM anaKaynak

örnek ifadeler;

SELECT * INTO bilgiYedek FROM bilgi

bilgi tablosunu ayni veritabaninda bilgiYedek adli yeni bir tabloya kopyalar.

IN sözdizimini kullanarak tamamen yeni bir vertabani olusturup onun içine yedekleme yapabiliriz.

SELECT bilgi.* INTO bilgi IN ’yedekVeritabaniAdi.mdb’ FROM bilgi

Yedeklemek istedisiniz tum tablo degilde belli satirlari yada belli kolonlari yedekleyebilirsiniz.

SELECT ad,soyad INTO bilgiYedegi FROM bilgi

yada

SELECT ad,soyad INTO bilgiYedegi FROM bilgi WHERE il=’Ankara’

dedisimizde sadece il kolonu Ankara olan kişilerin adlarini yedekliyecektir..

eger birden cok tabloyu yedeklemek istersek, asagidaki gibi bir SQL sorgusu yazabiliriz..

SELECT kisi.tamAdi,detay.il INTO ikiTablonunYedegi FROM kisi INNER JOIN detay ON kisi.kisiID=detay.kisiID

CREATE VIEW ifadesi

View (görüntü) nedir?

VIEW ifadesi sanal bir tablodur ve SELECT ifadesinin sonuc kumesini barindirir.

Bir view ile satir ve kolonlari ayni gercek tabloda oldugu gibi gorebiliriz. SQL fonksiyonlarini, WHERE ve JOIN ifadelerini kullanarak tek bir tablo olarak goruntuleyebiliriz.

NOT: Veritabani tasarimi ve yapilari view ifadesi ile bozulmamaktadir.

ifadenin kurulusu;
CREATE VIEW goruntuAdi AS SELECT kolonAd(lar)i FROM tabloAdi WHERE durum

NOT: View ifades(ler)i veritabaninda barindirilmaz. Her sorguda yeniden oluşturur.

View (görüntü) kullanimi

Sorgulamada, işlem kayitlarinda, fonksiyon, baglanti gibi methodlari kullanarak verileri kullanicilara etkili biçimde gosterebilirisizin.

bazi View yaratma örnegi;

CREATE VIEW [kisi bilgi listesi] AS SELECT kisiID,tamAdi FROM bilgi

bunu goruntulemek için;

SELECT * FROM [kisi bilgi listesi]
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.