Copyriht © 2010 Pc.Dr - Sql Bilgileri
   
 
  Flash Öğreniyorum
  C++ Öğreniyorum
  Delphi Öğreniyorum
  DreamWeaver Öğreniyorum
  C #
  SQL
  => Sql Bilgileri
  İletişim
  Ziyaretşi defteri
  Şehir isimleri nereden geliyor?
Bu söylediklerimi herkes yaşamıştır. Belli bir süre programlama yapmayınca bazı şeyleri unutabiliyoruz. Daha sonra neydi yaa gibi düşünüp aramak zorunda kalabiliriz. Benim de başıma zamanın da bu gibi şeyler gelince bende kendime arşiv yapmıştım. Tabiki bu verdiklerim SQL kodları.
Kod Alanı:
 
DISTINCT: Birbirinin ayni olan satirlarin listelenmemesi için bu ifade kullanilir

"select distinct uyeadi from uyeler"



Kod Alanı:
 
IN: Kosul belirtirken kullaniriz. Mesela ismi netrobin, ali veya mehmet olan isçilerin
bilgilerini listelemek için.

"select * from uyeler where uyeadi in (’netrobin’,’ali’,’mehmet’ )"



Kod Alanı:
 
LIKE: Eger aradigimiz kayitin bulunmasi için tam bir karsilastirma yapamiyorsak

"select * from uyeler where uyeadi like ’%a’"


Kod Alanı:
 
BETWEEN: Kosul belirtirken iki deger arasini belirtmek için kullanilir. Örnek:
Yasi 30 ile 40 arasindaki isçilerin kayitlarini listelemek için

"select * from uyeler where yas between 30 and 40"



Kod Alanı:
 
SUM: Seçilen degerlerin toplamini bulur. Isçilerin aldigi toplam ücreti görmek için

"select sum(ucret ) from uyeler"



Kod Alanı:
 
MAX, MIN, AVG: Verilen degerin en büyügünü, en küçügünü ve ortalamasini bulur.
MAX en büyük degeri, MIN en küçük degeri, AVG ise seçilen degerlerin ortalmasini bulur.

"select MAX(UCRET ), MIN(UCRET ), AVG(UCRET ) from uyeler where tarih>’01.01.1999’"



Kod Alanı:
 
ORDER BY ASC: Tablodan seçtigimiz kayitlari alfabetik siralamak için kullanilir.

"select * from uyeler order by asc"



Kod Alanı:
 
ORDER BY DESC: Tablodan seçtigimiz kayitlari son kayıt sırasına göre siralamak için kullanilir.

"select * from uyeler order by desc"


Kod Alanı:
 
GROUP BY: Genelde istatistik amaçlar için kullanilir. Mesela hangi tarihte kaç isçinin ise
alindigini bulmak için.



Kod Alanı:
 
ALIAS: Genelde tablonun veya kolonun adını başka bir şeymiş gibi değişirebiliriz.
Uyeler tablosundaki uyeadi kolonunun adını isim yaptık yani isim olarak çağırabiliriz.

"SELECT uyeadi AS isim FROM uyeler"



Kod Alanı:
 
JOIN: Bazen iki yada daha fazla tablodan veri cekmemiz gerekebilir, bu gibi durumlarda bu
methodu kullanırız.
Birbiri ile ilişkilendirilmiş iki tablomuz var biri uyeler diğeride detaylar olsun.
İki tablodanda aynı anda sorgulama veya veri çekeceğiz. Uyeler tablosunda id=1 ise detaylar
tablosundaki karşılğı ise uyeno=1 olarak yapıyoruz.

"SELECT * FROM uyeler,detaylar WHERE uyeler.id=detaylar.uyeno"

INNER JOIN OLARAK

"SELECT * FROM uyeler INNER JOİN detaylar ON uyeler.id=detaylar.uyeno"

LEFT JOIN OLARAK

"SELECT * FROM uyeler LEFT JOİN detaylar ON uyeler.id=detaylar.uyeno"



Kod Alanı:
 
UNION ve UNION ALL : Join methoduna benzer ama sadece aynı kolonlara sahip tabloları
birbirine bağlar. Uyeler ve Detylar tablosundaki uyeadlarını sorgular.

"Select uyeadi from uyeler UNION Select uyeadi from detaylar"

Sadece UNION kullanırsak iki tabloa aynı isimler olsa bile tekrarlar.
UNION ALL kullanırsak iki tabloda aynı isimler olsa bile sadece tekini sorgular.

"Select uyeadi from uyeler UNION ALL Select uyeadi from detaylar"





SQL FONKSİYONLARI

sql kendi içinde bir cok fonksiyonu barındırır, bunlar sayım ve hesaplama için kullanılabilir.

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

Fonksiyon tipleri;
sql fonksiyonları 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 çalışır ama sonucu tek bir degerdir.

Bu fonksiyonların MS Access e uygun olanları:
AVG(kolon ): girilen kolondaki sayıların aritmetik ortalama degerini geri yollar
COUNT(kolon ): Boş degerler haric, girilen kolondaki satır sayısını yollar
COUNT(* ): Verilen tablodaki satır sayısını 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 sayıların toplamını yollar

Bu fonksiyonların sql Server a uygun olanları:
AVG(kolon ): girilen kolondaki sayıların aritmetik ortalama degerini geri yollar
BINARY_CHECKSUM: tablonun verilen satırındaki ikilik tabandaki checksum degerini yollar       
CHECKSUM: tablonun verilen satırındaki checksum degerini yollar
CHECKSUM_AGG: boş degerler haricindeki verilerin checksum degerini yollar
COUNT(kolon ): Boş degerler haric, girilen kolondaki satır sayısını yollar
COUNT(* ): Verilen tablodaki satır sayısını yollar
COUNT(DISTINCT kolon ): Verilen tablodaki satır sayısını yollar, fakat cift veri bulunan satırları 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 sayıların toplamını yollar

Scalar (tekil degerli ) fonksiyonlar
Girilen degere gore bir deger ile calısır ve sonuc olarak bir deger yollar.

Bu fonksiyonların MS Access e uygun olanları:
UCASE(c ): bolgedeki karakterlerin hepsini buyuk yapar
LCASE(c ): bolgedeki karakterlerin hepsini kucuk yapar
MID(c,start[,end] ): yazı alanından karakterleri calıstırır
INSTR(c ): yazı alanından karakterleri gosterir
LEFT(c,karakterNumarasi ): text alanının girilen sayıya kadar olan kısmını yollar (soldan sayar )
RIGHT(c,number_of_char ): text alanının girilen sayıya kadar olan kısmını yollar (sagdan sayar )
ROUND(c,hassasiyet ): sayı alanını verilen hassasiyete gore yuvarlar
MOD(x,y ): bolme işleminde kalanı gosterir (mod işlemi yapar )
NOW( ): o anki sistem zamanını gosterir
FORMAT(c,format ): alanın gosterim biçimini degiştirir
DATEDIFF(d,birinciTarih,ikinciTarih ): tarih hesaplarını yapmak için kullanılır
 
 
 
 
 
ÖRNEKLİ SQL KOMUTLARI


//SEÇME
Select Alanlar From Tablo Adı

SELECT last_name, first_name
FROM "customer.db"
WHERE (last_name > :lname) AND (first_name < :fname)

//SIRALAMA (Order By)
Select Last_Name, First_Name From custoly.db
Order By first_name ASC; //a-z

Select Last_Name, First_Name From custoly.db
Order By first_name DESC; //z-a

//BİRDEB FAZLA ALAN SIRALAMA
Select Last_Name, First_Name From custoly.db
Order By Alanadı1, Alanadı2, Alanadı3 ASC; //a-z


//KOŞULLU LİSTELEME ve SIRALAMA
Select * From country.db
Where Area > 100000 AND Area < 1000000

Select * From country.db
Where Area > 100000 AND Population < 1000000

//Between ile Aralık Listeleme
Select * From country.db
Where Area between 100000 AND 1000000

//SORGULAMA (IN Operatörü)
Select * From custoly.db
where CustNo=1 or CustNo=2

Select * From custoly.db
where CustNo IN(1,5,10,12,20)


//SQL BELLİ ALANLARI BOŞ OLAN KAYITLARI LİSTELEME
SELECT *
FROM orders
WHERE (saledate IS NULL) //boş olanlar
WHERE (saledate IS NOT NULL) //boş olmayanlar

//SQL TİP DEĞİŞTİRME
CAST(column_reference AS data_type)
//varolan bir tipi sql ile başka bir tipe sanal olarak geçirme
SELECT CAST(TERMS AS CHAR(1))
FROM ORDERS
//üsteki örnekte alandaki sadece birinci karakterin bilgisi okutuluyor.

SELECT SaleDate,
SUBSTRING(CAST(CAST(SaleDate AS DATE) AS CHAR(10)) FROM 1 FOR 1)
FROM Orders

//SQL TARİH İŞLEMLERİ
EXTRACT(extract_field FROM column_reference)
YEAR, MONTH, DAY, HOUR, MINUTE, or SECOND
/*5 Ayları listele */
SELECT saledate, orderno
FROM orders
WHERE (EXTRACT(MONTH FROM saledate) = 5)

/*Verilen tarih alanını ay,yıl,gün olarak yeni alanlarla bölerek göster*/
SELECT SaleDate,
EXTRACT(YEAR FROM saledate) AS YY,
EXTRACT(MONTH FROM saledate) AS MM,
EXTRACT(DAY FROM saledate) AS DD
FROM Orders

//SORGULAMA (LIKE)
Select * From custoly.db
where last_name LIKE '%M%' //İçimde M harfi bulunanlar

Select * From custoly.db
where last_name LIKE 'H%'//H harfi ile başlayanlar

Select * From custoly.db
where last_name LIKE '%a'//a ile bitenler

//SUM FONKSİYONU
Toplam Alma
Select SUM (Cost) as SONUC
From parts.db
Sonuç adında sanal alan yapılır ve Cost alanı baştan sona toplanı buraya aktarılır

//Aynı Anda Birden Fazla Alan Toplatılabilir
Select SUM (Cost) as SONUC1, SUM (ListPrice) as SONUC2
From parts.db

Select SUM (Cost * 10/100) as SONUC1, SUM (ListPrice * 10/100) as SONUC2
From parts.db

Select SUM (Cost + ListPrice) as SONUC
From parts.db

//Şartlı Hesaplama
Select SUM (Cost) as SONUC
From parts.db
Where PartNo < 3000

//AVG Foksiyonu
Ortalama Alma

Select AVG (Cost) as SONUC
From parts.db

//MAX Fonksiyonu
Select MAX (Cost) as SONUC
From parts.db

//MİN Fonksiyonu
Select MIN (Cost) as SONUC
From parts.db

//COUNT Fonksiyonu
Tablo içinde sayma işlemi gerçekleştirir

Select COUNT(Cost) as SONUC
From parts.db

Select COUNT(*) as SONUC
From parts.db

Şartlı Kayıt sayısı öğrenme
Select COUNT(*) as SONUC
From parts.db
Where Cost > 100

Varsayalım ki veri tabanında 10 tane murat var. Yukarıdaki işlemler bunları tek tek sayar bu işlemi önlemek ve muratları tek saymak içim ;

Select COUNT(DISTINCT Adi) as SONUC
From parts.db
 
 
1. TEK TABLODAN SORGULAMALAR:

SELECT * FROM tablo

ÖRNEK: Bütün bilgileri personel tablosundan koşulsuz olarak listele.

SELECT * FROM personel

ÖRNEK: Personel tablosundan SELECT komutuyla sadece istediğin sütun adlarını belirt. Böylece personel tablosunun tamamı değil, istenen kısmı listelensin:

SELECT sicil,sosy_g_no,ad,soyad,dog_tar,
adres,cins FROM personel;

DISTINCT (Tekrarsız)

TANIM: Bir tablo içinde birbirinin aynı datalar bulunabilir.Aynı satırların listeleme esnasında bir kez yazılması için Distinct sözcüğünü kullan.

ÖRNEK: personel tablosundan soyad'lar tekrarsız olarak listelenecektir. Yani aynı soyada sahip iki kişi varsa sadece ilk kişi listelenir:

SELECT DISTINCT soyad
FROM personel;


2. TABLO BİLGİLERİNİN SIRALANMIŞ OLARAK LİSTELENMESİ:

ORDER BY (Sırasıyla)

TANIM: Tablodaki sütunları, belirli bir sütuna göre listelemek için SELECT komutuna , ORDER BY eklenir.

ÖRNEK: Personel dosyasından, sicil, ad, soyad ve brüt sütunlarını seç ve brüt(maaşa) göre büyükten küçüğe sırala.

SELECT sicil,ad,soyad,brüt
FROM personel
ORDER BY brüt ASC;

DESC : Küçükten büyüğe sırala (A-Z) ASC : Büyükten küçüğe sırala (Z-A)

DESC yazılmazsa ASC direct kabul edilir (DEFAULT)

3.BİRDEN ÇOK ALANA GÖRE SIRALAMA:

TANIM: Bir tablo içinde ,birden fazla sütundan aynı anda sıralamak için kullanılır.

ÖRNEK: Personel dosyasından seçilen sütunlarını aynı anda hem ad hem de otomatik olarak sıralar.

SELECT sicil, ad, soyad, brüt
FROM personel
ORDER BY ad, brüt;


ÖRNEK Personel tablosundan seçili sütunları öncelik adda olmak üzere (Z-A) adı bozmadan soyadı (A-Z) sıralı listeler.

SELECT sicil, ad, soyad, brüt
FROM personel
ORDER BY ad ASC, soyad DESC,
brüt ASC;

veya;

SELECT sicil, ad, soyad, brüt
FROM personel
ORDER BY ad, soyad DESC, brüt;

KOŞULA BAGLI OLARAK LISTELEME:

WHERE

TANIM:Verilen koşulu saglayanlar listelenir.Iki veri birbiriyle karşilaştirilmaktadir. Karşilaştirilan verilerin türü ayni olmalidir.

SELECT *
FROM personel
WHERE brüt > 5000000;

KARŞILAŞTIRMA OPERATÖRLERI:

OPERATÖR ANLAMI:

< ...den daha küçük
> ...den daha büyük
= Eşit
<= Küçük veya eşit
>= Büyük veya eşit
<> Eşit degil
!= Eşit degil
!< ...den küçük değil
!> ...den büyük değil

ÇEŞITLI VERI TIPLERI IÇIN BASIT SORGULAMALAR:

1.NÜMERİK VERİ TİPLERİ:

ÖRNEK: Maaşi 8000000TL’den fazla olmayan personeli listele.

SELECT *
FROM personel
WHERE brüt <= 8000000;

2.KARAKTER VERİ TİPLERİ (CHAR):
Karakter çift veya tek tırnak ile gösterilir.

ÖRNEK: Adı Ali olmayan personele ait kayıtları listele.

SELECT *
FROM personel
WHERE ad <> “Ali”;

3.TARİH VERİ TİPİ:
Tarih veri tipleri { } sembolleri içinde yazılır.

ÖRNEK: Hangi personelin doğum tarihi 1960 yılından daha öncedir?

SELECT *
FROM personel
WHERE dog_tar <={12/31/59};


4.MANTIKSAL (LOJİK) VERİ TİPİ:

Mantıksal veriler için mümkün olabilen sadece iki değer sözkonusudur.Doğru (TRUE T), Yanlış (FALSE F) ile simgelenir.

ÖRNEK: Personel tablosunda personelin cinsiyetini belirten cins adlı alan mantıksal(logical) olarak tanımlanmıştır. Cinsiyeti erkek olanları T, kadın olanları F ile tanımlarsak erkek olanları listele:

SELECT *
FROM personel
WHERE cins = .T.;
4.BİRDEN ÇOK KOŞULA DAYALI SORGULAMALAR: (NOT, AND, OR)

TANIM: Mantıksal operatörlerin yardımı ile birden çok koşulun aynı anda gerçekleştirmesini sağlayacak (karmaşık yada birleşik koşullu) listelemeleri gerçekleştirilmektedir.

AND (VE)

ÖRNEK: Maaşı 5000000’dan fazla olan ve cinsiyeti erkek olan personelin listelenmesi istenir yani iki koşul verilmektedir ve ikisininde olması istenir.

SELECT *
FROM personel
WHERE brüt >5000000 AND cins =.T.;
NOT (DEĞİL)

OR (VEYA)

ÖRNEKLER:
1.Doğum tarihi 1960’dan önce olan maaşı 6000000 - 10000000 arasındaki bayan personelin listele.

SELECT *
FROM dog_tar < {01/01/60} AND
brüt > = 6000000 AND brüt < =10000000
AND cins = .F.;

2.Satış bölümüyle muhasebe bölümündekiler kimlerdir?
(Satış bölümünün böl_no’sunun 1 ve muhasebe bölümünün böl_no’sunun 2 olduğu varsayılmaktadır.)

SELECT *
FROM personel
WHERE bol_no =1 OR bol_no = 2;

3.Bölümü Satış yada Muhasebe olamayan 1960’dan sonra doğmuş bayan personeli listele.

1.YAZILIM:
SELECT *
FROM personel
WHERE NOT (böl_no =1 OR
böl_no =2) AND dog_tar > ={01/01/60}
AND cins =.F.;

2.YAZILIM:
SELECT *
FROM personel
WHERE böl_no <> 1 AND
böl_no <> 2 AND dog_tar > ={01/01/60}
AND cins =.F.;

BİR VERİ KÜMESİNDE ARAMA -IN OPERATÖRÜ

IN (İÇİNDE)

“IN” operatörü NOT ile kullanılılabilir.

ÖRNEK: Bölümü 1, 2, 3 olmayan personel kimlerden oluşmaktadir?

SELECT *
FROM personel
WHERE bol_no NOT IN (1, 2, 3);


ÖRNEK: Böl_no’su 1, 2 yada 3 olan personeli listele.

SELECT *
FROM personel
WHERE böl_no = 1 OR böl_no= 2 OR
böl_no = 3;

Bu örneğin IN ile yapılmış şekli daha kısadır.

SELECT *
FROM personel
WHERE NOT böl_no IN (1, 2, 3);

BETWEEN SORGULAMA SÖZCÜĞÜ:

BETWEEN (ARASINDA)

ÖRNEK: Maaşi 5- 10 milyon arasinda olan personel kimlerdir?

SELECT *
FROM personel
WHERE brüt > =5000000 AND
brüt < = 10000000;

BETWEEN (ARASINDA) komutu ile daha kısa olacaktır.

SELECT *
FROM personel
WHERE brüt BETWEEN 5000000
AND 10000000;

KARAKTER TÜRÜ BİLGİ İÇİNDE ARAMA LIKE SÖZCÜĞÜ:

TANIM ÖRNEĞİ: Adres sutunu içerisinde semt bölümüne ait ayrıca bir sutun olmadığını varsayarak semt adı adres sutunu içerisinde yer alır ve buradan da LIKE (BULUNAN) komutuyla adres sutunu içerisinde Taksim semtinde oturan personeli listele.

SELECT *
FROM personel
WHERE adres LIKE ‘% TAKSİM %’ ;

Adres LIKE ‘%TAKSİM%’ ifadesi adres içinde her hangi bir yerde TAKSİM yazan yerde oturan personeli listeleyecektir.
LIKE sözcüğünü ,alt çizgi (-) sembolü ile birlikte kullanmakta mümkündür.

SELECT *
FROM personel
WHERE ad LIKE ‘Mehmet -----‘;

Şekildeki komut ile ad alani “Mehmet “ ile başlayan ve ad alani uzunlugu 10 karakter olan isimlere sahip personeli listeleyecektir.”Mehmet Ali”,”Mehmet Can”- “Mehmetcik” gibi isimler
listeleyecektir.Anlaşilacagi gibi - sembolü , tek karakterlik bir bilgiyi temsil etmektedir.
5.SQL’DE ARİTMETİKSEL İFADELER VE FONKSİYONLAR :

KÜME FONKSİYONLARI:

SUM FONKSİYONU:

SUM (TOPLA)

Fonksiyonun argümanı olarak belirtilen sütun ile ilişkili olana toplama işlemini gerçekleştirir.

ÖRNEK: İşletmedeki personelin brüt maaşlar toplamı ne kadardır?

SELECT SUM (brüt)
FROM personel;

AVG FONKSİYONU:

AVG (ORTALA)

Aritmetiksel ortalama (average) hesaplamak için kullanılır.

SELECT AVG(brüt)
FROM personel;

MAX FONKSİYONU:

MAX (EN ÜST)

Tablo içinde ,belirtilen sutun (alan)içindeki en büyük değeri bulur.

ÖRNEK: İşletme içindeki en yüksek maaş ne kadardır?

SELECT MAX (brüt)
FROM personel;


MIN FONKSİYONU:

MIN (EN ALT)

Tablo içinde,belirlenen sutun alan içindeki en küçük değeri bulur.
ÖRNEK: İşletme içinde 4 Mayıs 1970’den önce doğanlar için,asgari ücret nedir?

SELECT MIN(brüt)
FROM personel
WHERE dog_tar < {05/04/70};

COUNT FONKSİYONU:

COUNT (SAY)

Tablo içinde, her hangi bir sayma işlemi gerçekleştirmek için kullanilir.

ÖRNEK: Ücreti 6000000’dan olan personel sayısı nedir?

SELECT COUNT (*)
FROM personel
WHERE brüt > 6000000;

COUNT (SAY) fonksiyonu DISTINCT (TEKRARSIZ) sözcüğü ile de kullanılır.

ÖRNEK: Personel tablosunda mevcut personelin işletme içinde kaç tane farkli bölümde çaliştigini bul.

SELECT COUNT(DISTINCT böl_no)
FROM personel;
COUNT (böl_no)
6.GRUPLANDIRARAK İŞLEM YAPMA:

GROUP BY (GRUPLA)

ÖRNEK: Her bölümdeki ortalama maaş nedir?

SELECT böl_no,AVG (brüt)
FROM personel
GOUP BY böl_no;

HAVING:

HAVING (SAHİP)

Gruplandırarak kümeleme fonksiyonunu uygularken koşulda verilebilir.Bu durumda grup üzerindeki hesaplamalarla ilgili koşul belirtilirken HAVING (SAHİP) sözcüğü kullanılır.

ÖRNEK: En yüksek maaşin 9000000’dan fazla oldugu bölümlerdeki personele ait ortalama maaşlari listele.

SELECT böl_no,AVG (brüt)
FROM personel
GROUP BY böl_no
HAVING AVG(brüt)> 9000000;

HAVING sözcüğü SELECT komutunda GROUP BY bulunmadığı zaman geçersizdir. HAVING sözcüğünü izleyen ifade içinde SUM , COUNT(*), AVG, MAX yada MIN fonksiyonlarından en az biri bulunmalıdır.
HAVING sözcüğü sadece gruplanmış veriler üzerindeki işlemlerde geçerlidir.
WHERE sözcüğü bir tablonun tek tek satırları üzerinde işlem yapan koşullar içinde geçerlidir.
Bazı durumlarda HAVING ve WHERE sözcükleri ile birlikte SELECT komutu içinde kullanılabilir.

ÖRNEK: Personel tablosu içinde her bölümde erkek personele ait maaşlar için ortalamanin 9000000’dan fazla oldugu bölümleri listele.

SELECT böl_no, AVG (brüt)
FROM personel
WHERE cins= .T.
GROUP BY böl_no
HAVING AVG (brüt) > 9000000;

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 *
FROM personel,bölüm
WHERE personel .böl_no=bölüm.bölüm_no ;
Ö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
FROM personel,bölüm
WHERE 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 “KENDISIYLE-ILIŞKiLENDIR” denir.(SELF-JOIN)

SELECT A. sicil , A.ad , A.soyad,
B .ad , B.soyad , B.dog_tar
FROM personel A , personel B
WHERE A. yon_sos_g_n =B .sosy_g_no;

NESTED SELECTS:

İÇİÇE SEÇİMLER

TANIM: İç içe geçmiş SELECT komutlarından oluşur. İçteki Select komutunun bulduğu sonucu dış takı 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 *
FROM personel
WHERE sosy_g_no
IN(SELECT per_s_g_no
FROM parça,proje,çalışma
WHERE pr_no = proj_no AND
proj_no =proj_no AND
par_no =24);

ÖRNEK: Fatih’te oturan personelin çalıştığı projelerin adlarını ve yerlerini listele.

SELECT proj_ad,yer
FROM proje
WHERE proj_no IN
(SELECT proje_no
FROM personel,çalışma
WHERE sosy_g_no = per_s_g_no
AND adres LIKE “% 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
FROM proj,bölüm,personel
WHERE bl_no=bölüm_no AND
y_sos gno = sosy_g_no
AND ad =”Ahmet”AND soyad =”Caner”)
UNION (SELECT proj_ad,yer
FROM proje,çalışma,personel
WHERE proj_no = proje_no AND
Per_s_g_no = sosy_g_no AND ad =”Ahmet”
AND soyad =”Caner”)
KOŞULLAR:

UNION (BİRLEŞİM) sözcüğü ile ,iki yada daha çok kişi SELECT ’in sonucu olan tabloların küme birleşimi işlemine tabi tutulması için 2 koşul gereklidir.
1) SELECT 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 *
FROM personel
WHERE brüt < ANY
(SELECT brüt
FROM personel
WHERE böl_no = 2) AND
böl_no =1;

Aynı ifade aşağıdaki gibi yazılabilir:

SELECT *
FROM personel
WHERE brüt < (SELECT MAX (brüt )
FROM personel
WHERE böl_no = 2) AND böl_no =1;


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 *
FROM personel
WHERE brüt >
ALL (SELECT brüt
FROM personel
WHERE böl_no = 1)
AND böl_no = 2;



2) SELECT *
FROM personel
WHERE brüt >
(SELECT MAX (brüt)
FROM personel
WHERE böl_no = 1)
AND böl_no =2;


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 *
FROM satıcı
WHERE EXISTS
(SELECT *
FROM par_sat
WHERE sat_no = satıcı_n
AND parça_n =27);


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 *
FROM satıcı
WHERE NOT EXISTS
(SELECT *
FROM par_sat
WHERE sat_no = satıcı_n
AND parça_n =27);


EXCEPT (FARKLI)

Tablo-1 - Tablo-2 işlemi sonuç(iki kümenin farki) elde edilecek tabloda,Tablo-1’de bulunup, Tablo-2’de bulunmayan veriler mevcut olacaktir.

ÖRNEK: Satış bölümündeki personel adlarından,mühendislik bölümünde bulunmayanları listele.

SELECT * FROM
(SELECT ad FROM personel
WHERE bol_no=1
EXCEPT
SELECT ad FROM personel
WHERE bol_no =2);

INTERSECT (KESİŞİM)

ÖRNEK: Hem Ankara’da,hem de İstanbul’daki projelerde görev alan bölümleri listele.

SELECT * FROM
(SELECT bl_no FROM proje
WHERE yer LIKE “%Ankara%”
INTERSECT
SELECT bl_no FROM proje
WHERE yer LIKE “%İstanbul%”);


SAVE TO TEMP (SAKLA)

ÖRNEK: Bayan personeli, bayan adlı bir tablo içinde sakla.

SELECT *
FROM personel
WHERE cins =.F. SAVE TO TEMP bayan;

KEEP:

KEEP (KALICI)

ÖRNEK:

SELECT *
FROM personel
WHERE cins = .F.
SAVE TO TEMP bayan KEEP;
7.TABLOLARDA DEĞİŞİKLİK YAPMAK:


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,
sosy_g_no,ad,soyad,doğ_tar
adres,cins,brüt,böl_no,yön_s_g_no
VALUES(‘275’,’27652418’,’Ali’,’Caner’,
{10/05/1962},’Merkez caddesi 46 -Fatih-İstanbul’,
.T.,27000000,2,’876215342’);


DELETE (SİL)

ÖRNEK: 2 no’lu bölümdeki personelin tümü tablodan sil.

DELETE FROM personel
WHERE böl_no = 2;

ÖRNEK: Brüt maaş alani boş olmayan tüm personeli sil.

DELETE FROM personel
WHERE brüt IS NOT NULL;


UPDATE (GÜNCELLE)

SET (YAP)

ÖRNEK: 2’inci bölümün yürüttüğü projelerde kullanılan tüm parçaların fiyatlarına % 7
zam yap.

UPDATE parça
SET fiyat = fiyat *1,07
WHERE pr_no IN
(SELECT proj_no
FROM proje
WHERE bl_no = 2;


CREATE INDEX (INDEKS YARAT )

ON (Hangi Tablo İçin)

CREATE INDEX ındeks adı
ON tablo adı(kolon adı 1,kolon adı 2,.,.kolon adı n);
TEK BİR ALANA GÖ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
ON personel(brüt);


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 *
FROM personel;

Şeklinde listeleme komutu sonucunda personel tablosundaki tüm personel, brüt maaşlarina göre sirali olarak listelenecektir.

TEK BİR ALANA GÖRE AZALAN SIRADA İNDEKSLEME:

DESC Küçükten büyüğe (A-Z)

Ö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
ON personel (brüt DESC);

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
ON personel (ad,soyad,brüt);

Bu durumda;

SELECT *
FROM personel;

UNIQUE (TEK)

Bir tablo,seçilen bir sutüna (alana) göre indekslenirken , indeksleme alanı olarak seçilen sutündaki verilerintekrarlanmasına müsaade edilmesi istenmiyorsa,indeksleme yapılırken ,CREATE ,INDEX komutu iinde UNİQUE sözcüğü kullanılmalıdır.


CREATE UNIQUE INDEX pers_sicil
ON personel (sicil);


EKLEME İÇİN:

Personel tablosuna
INSERT INTO Personel
VALUES(53768 ,’27241685’,’ayşe’,
‘şen’{01/04/63},’Merkez cad. 82 -
Kadıköy’.F. ,27000000 ,2, ‘34261578’);

MEVCUT BİR İNDEKSİN SİLİNMESİ:

DROP IPTAL

DROP INDEX pers_in;

Komutu ile

TABLONUN YAPISINDA DEĞİŞİKLİK YAPMAK:

ALTER TABLE (TABLO DEĞİŞTİR)

MEVCUT BİR TABLOYA KOLON EKLEMEK:

ADD (EKLE)

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
ADD iş_baş_tar DATE;

ADD (EKLE)iş_baş_tar DATE NOT NULL (TARIH DEGERSIZ) bu şekilde kullanilsaydi bu kolon satiri gene boş kalirdi ; fakat bu kolon ile ilişkili yeni boş degerler eklemek istendiginde buna müsaade edilmeyecekti.
MEVCUT BİR TABLONUN ALANLARINDA DEĞİŞİKLİK YAPMAK :

MODIFY KOMUTU:

MODIFY (DEĞİŞTİR)

MEVCUT BİR TABLODAN BİR KOLON SİLMEK:

DROP KOMUTU:

DROP (İPTAL)

ÖRNEK: Personel tablosundan iş_baş_tar kolonunu sil.

ALTER TABLE personel
DROP 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 personel Tablosunda değişiklik yap
RENAME TABLE elemanlar; elemanlar tablosunun adını değiştir

MEVCUT BİR 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 SİL)

ÖRNEK: Proje tablosunu sil.

DROP TABLE proje;
SQL Sorgu Açıklama
"Select * From Employees" Employees tablosundan tüm alanlari seç. En basit SQL sorgusu budur.
"Select * From Title Where [Year Published] < 1889" Title tablosundan [Year Published] alani degeri 1889'dan küçük olan tüm kayitlari seç. Not: * isareti tüm alanlarin seçilecegini gösterir. [ ] "Köseli ayraç ise alan adi bir kelimeden fazla ise kullanilmalidir. Yani yukaridaki alan adi sadece "Year" olsaydi köseli ayraç kullanmaya gerek kalmayacakti.
"Delete From Titles Where [Year Published] < #1/1/1889#" Titles tablosundan [Year Published] alani degeri 1/1/1889'dan küçük olanlarin tümünü sil
"Select Name, Picture From Authors Where Date_of_Birth = #2/1/1947#" Authors tablosundan Date_of_Birth = 2/1/1947 denkligi olan kayitlardan Name ve Picturealanlarini seçDikkat ederseniz tüm sorgularda sabit bir SELECT ... WHERE .... yapisi var. Select seçimin nereden yapilacagini Where ise eslesme kriterlerini göstermektedir.Bu örnekte * isareti kullanilmamis ve sadece iki alan seçilmistir: "name" ve "picture"Tarih ifadeleri ise # isaretleri arasinda yazilmalidir.
"Select [First Name], [Last Name] From Employees" Employees tablosundan sadece First Name ve Last Name alanlarini seç
"Select Employees, Department, SupvName From Supervisors, Employees Where Employees.Department = Supervisors.Department" Bu biraz daha karisik. Burada iki tablo var: Supervisors ve Employees. Bu iki tablodan üç adet alan seçilecek: 1.Employees, 2.Department, 3.SupvName. Bu iki tabloda da Department adli birer alan var. Iste bu alanlarin denkligi ile seçim yapiliyor. Yani Employees tablosunun Department alani ile Supervisor tablosunun Department alani esit ise seçim yapiliyor.
"Select Distinct [Last Name] From Employees" Employees tablosundan Last Name degeri ayni olan kayitlardan sadece birini al. Distinct anahtari birden fazla ayni deger var ise sadece ilkini alir.
"Select [Last Name], Salary From Employees Where Salary > 2100" Salary degeri 2100'den küçük olan Employees tablosu kayitlarindan yalnizca Last Name alanlarini seç.
"Select * From Orders Where [Shipped Date] = #5/12/93#" Orders tablosundan Shipped Date degeri 5/12/93'e esit olan kayitlarin tüm alanlarini seç.
"Select [Product Name], Sum ([Units in Stock]) From Products Group By [Product Name]" Products tablosundan Product Name ve Unit in Stocks alanlarini al. Ancak burada dikkat edilmesi gereken Sum( ) fonksiyonudur. Bu fonksiyon her alan degerini birbiri üzerine toplar. Seçilen alanlarin tabloya yerlestirilmesi ise Product Name alan degerinin alfabetik sirasina göre A-Z olarak yapilir.
"Select * From Employees Order By [Last Name], Asc" Employees tablosundaki tüm alanlari Last Name alan degerine göre Z-A siralamasina göre seç Yani tablodan tüm kayitlar alinacaktir, çünkü kriter olarak kullanilan WHERE sözcügü yoktur. Ancak alinan tüm kayitlar Last Name alan degerinin Z-A alfabetik sirasina göre (ters sira) siralanir. Soyadi Zahit olan kisi soyadi Orhun olan kisiden önce gösterilir. Sorgunun sonunda kullanilan ASC anahtari seçimliktir (optional). Herhangi bir sey yazilmazsa, bu anahtar degerinin DESC (A-Z) oldugu kabul edilir.



















SQL Sorgu Açıklama
"Select [Last Name], Salary From Employees Order By Salary, Desc, [Last Name] Veritabanindan alinan kayitlarin listelemesi islemi burada iki kritere göre yapilmakta. Önce kisilerin maaslari (Salary), sonra da soyadlari (Last Name) dikkate alinmakta. Söyle düsünün; Bir sirkette ayni maasi alan 3 kisi var. Bu kisilerin soyadlari Akin, Bahçe ve Celep olsun...Bu sorgu sonucu sirkette çalisan herkes listelenecektir. Ancak bizim bu üç kisi pespese listelenecek ve siralama Akin-Bahçe-Celep seklinde alfabetik sıraya göre olacaktir. Asagidaki örnege bakiniz: Last Name Salary
Filiz 300.000.000
Kara 275.000.000
Akin 250.000.000
Bahçe 250.000.000
Celep 250.000.000

Dim dbNoro as Database Dim recLab2 as Recordset Set dbNoro = OpenDatabase("Noroloji.mdb", dbOpenSnapshot) Set recLab2 = dbNoro.OpenRecordset("SELECT * FROM LAB2 " & "WHERE ID = " & longID & " ;") Yukaridaki örneklerde sorgulara degismezler girdik. ancak programcilikta her zaman is bu kadar kolay degildir. Sizin kullanicidan girdi almaniz ve bunu run-time program içinde sorguya katmaniz gerekir. Bu örnekte ise, dbNoro adli Database nesnesini ve recLab2 adli bir recordset nesnesini ilk önce Dim ile programa tanitiyoruz. Sonra SET komutu ile önce dbNoro database nesnesine OpenDatabase metodu ile açmak istedigimiz veritabanini açiyoruz, sonra OpenRecorset Metodu ile bu veritabani (yani dbNoro) içinde kayit arayacak SQL sorgusunu çalistiriyoruz.SQL sorgularinin " " çift tirnak içine yazildigini gördünüz. Bu degismez bir kural. Bir de her sorgunun sonuna bir " ;" eklemeyi de unutmayin. Bu sorguda görülen longID ise kullanicinin klavyeden girdigi bir degerdir. Bu deger ile veritabaninin LAB2 adli tablosunda bulunan ID adli alaninin degeri esit olursa o zaman arama olumlu sonuç verir ve recLab2 nesnesi içine bulunan degerler girilir, yada söyle diyelim bulunan kayitlarin temsilcisi recLab2 adli recordset nesnesi olur. Bu recordset nesnesini bir DBGrid nesnesine baglarsaniz, otomatik olarak bulunan tüm kayitlarin gridlerde gösterildigini görürsünüz.
Dim dbs As Database, rst As RecordsetSet dbs = OpenDatabase("Northwind.mdb")Set rst = dbs.OpenRecordset("SELECT" & " Sum(UnitPrice*Quantity)" & " AS [Total UK Sales] FROM Orders"& " INNER JOIN [Order Details] ON" & " Orders.OrderID = [Order Details].OrderID" & " WHERE (ShipCountry = 'UK');") Dim ile Database ve Recordset nesnelerini tanimla. dbs nesnesini OpenDatabase metodu ile Northwind.mdb'ye bagla (aç). Bu açilan database'in OpenRecordset metodu ile SQL sorgu yap. Bu digerlerine göre oldukça karisik bir sorgu. Bunun içinde INNER JOIN baglantisi var. Bu baglanti iki ayri tabloyu ortak bir alan ile birbirine baglar. Burada Orders ile Order Details tablolari inner join ile baglaniyor, ve baglanti kriteri ise; her iki tabloda da bulunan OrderID adli alan. Her iki tabloda da OrderID alan degeri esit olan ve ShipCountry degeri UK olan kayitlardan Orders tablosunda bulunanlarin Unit Price ve Quantity alan degerleri çarpilarak üst üste toplaniyor ve bu toplama Total UK Sales adi veriliyor. Yani bu yeni bir sütun basligi oluyor.
Sub Ad_Ara(mode As String)Dim hasta As Stringhasta = InputBox("Aradiginiz hastanin " + mode + "i:")If hasta = "" Then Exit SubHastalar_Ac Set recHastalar = _dbNoro.OpenRecordset("SELECT * FROM " _& "HASTALAR WHERE " & mode & " = '" _& hasta & "' ")If recHastalar.RecordCount < 1 ThenMsgBox hasta + " " + mode + "inda kayitli hasta yok!", 48Exit SubEnd IfEnd Sub Ad_Ara adli bu sub benim NoroPlus programinda veritabanindan hasta aramakta kullaniliyor. Bu sub "mode" adli bir string degisken ister. Kullanici bu sub'dan önce bir seçim yapmistir. Ayni hastayi neye göre arayacaktir. Menüden adina göre aramayi seçerse bu "mode" degiskeni "ad" olacaktir, soyadina göre aramayi tercih ederse mode degiskeni "soyad" olacaktir. Bu mode degiskeni degerleri ayni zamanda Hastalar tablosundaki alan adlariyla aynidir. Yani Hastalar tablosunda da ad, soyad vs alanlari vardir. Kullanici menüden adina göre aramayi seçince, karsisina inputbox çikacak seçimine göre bilgi girmesini isteyecektir. Herhangi bit bilgi girilmezse sub'dan çikilir. Girilen deger hasta adli local bir string degiskeni içine kaydedilir. Sonra veritabani içinden OpenRecordset metodu ile parantez içindeki sorgu çalistirilir ve sonuc rechastalar adli recordset nesnesi içinde tutulur. Eger Recordset nesnesinin RecordCount özelliği < 1 ise bu yapilan sorguda kriterlere uyan kayit bulunmadi demektir. O zaman msgbox bir hata mesaji ile bunu kullaniciya duyurur ve sub'dan çikar.Gelelim sorguya: Hastalar tablosundan tüm bilgileri almak istiyoruz, bu yüzden "*" yildiz kullandik: "SELECT * FROM HASTALAR" devaminda ise kosul cümlesi var:"WHERE " & mode & " = ' " & hasta & " ' "Bu kosul tablodaki "mode" adli alan degeri inputbox ile girilen deger ile ayni ise dogru sonuç verecektir ve Select ifadesi çalisacaktir. Diyelim ki soyadi Kara olan hastalari arattiniz. Bu soyada sahip 10 hasta çikmis olsun. Bu rakami da Recordset nesnesinin RecordCount özelligi ile bulursunuz. Daha sonra buldugunuz hastalar arasinda Move metodlari yardimiyla dolasabilirsiniz: MoveFirst, MoveNext, Move Previous, MoveLast. Bu is çok kolaydir. Birden fazla sayida kayida ulastiginizda görünür hale getireceginiz, aksi taktirde görünmeyen command butonlari ile ileri geri hareketleri saglayabilirsiniz.
Bu web sitesi ücretsiz olarak Bedava-Sitem.com ile oluşturulmuştur. Siz de kendi web sitenizi kurmak ister misiniz?
Ücretsiz kaydol