Reklamlar
Temel SQL Komutları

Temel SQL Komutları » SELECT, FROM, WHERE, ORDER BY, GROUP BY, HAVING, UPDATE, DELETE, INSERT.  Burada kullandığımız SQL cümleleri ISCI adlı bir tablo üzerine

Gönderen Konu: Temel SQL Komutları  (Okunma sayısı 13218 defa)

0 Üye ve 2 Ziyaretçi konuyu incelemekte.

Çevrimdışı administrator

  • Administrator
  • General
  • *****
  • İleti: 24517
  • Karma: +3/-1
    • Profili Görüntüle
    • Toplist Ekle Site Ekle

Temel SQL Komutları
« : Mayıs 04, 2010, 02:57:17 ÖS »
SELECT, FROM, WHERE, ORDER BY, GROUP BY, HAVING, UPDATE, DELETE, INSERT.
 Burada kullandığımız SQL cümleleri ISCI adlı bir tablo üzerine yazılmıştır. Alanlar.
ISCI_NO   ISCI_ADI   YAS   GIRIS_TARIHI   MAAS
                
                
 SELECT:
Tablodan seçmek istediğimiz alanları belirtmek için kullanılır. Eğer tablodan tüm alanları seçmek istiyorsak o zaman alan isimleri yerine * işareti konur.
 FROM:
Üzerinde işlem yapılacak tablo/tabloları belirtmek için kullanılır.
 WHERE:
Tablodan eğer tüm kayıtları değilde istediğimiz bazı kayıtları elde etmek istiyorsak, örnekte maaşı 250 milyondan fazla olan işçilerin numarası ve adi gibi, o zaman buraya istediğimiz kriteri yazarız.
SELECT ISCI_NO, ISCI_ADI FROM ISCI WHERE MAAS>250000000
 DISTINCT:
Birbirinin aynı olan satırların listelenmemesi için bu ifade kullanılır. Mesela ISCI tablosunda bulunan birbirinin aynı olmayan isimleri listelemek istersek
SELECT DISTINCT ISCI_ADI FROM ISCI
şeklinde bir SQL ifadesi yazarız.
 IN:
 Koşul belirtirken kullanırız. Mesela ismi AHMET, ALİ veya MUSTAFA olan işçilerin bilgilerini listelemek için
SELECT * FROM ISCI WHERE ISCI_ADI=’AHMET’ OR ISCI_ADI=’ALİ’ OR ISCI_ADI=’MUSTAFA’
şeklinde bir ifade kullanırız. Bunun yerine
SELECT * FROM ISCI WHERE ISCI_ADI IN (’AHMET’ ,’ALİ’ ,’MUSTAFA’)
ifadesini de kullanabiliriz. Yani listenin içindeki herhangi bir değerin bulunması kayıtın seçilmesi için yeterlidir.
 LIKE:
 Eğer aradığımız kayıtın bulunması için tam bir karşılaştırma yapamıyorsak o zaman kullanırız. Mesela isminin baş harfi A ile başlayan isimleri bulmak için
SELECT * FROM ISCI WHERE ISCI_ADI LIKE ‘A%’
ifadesi kullanılır.
% işareti uzunluğu önemsiz olmak üzere yazıldığı yere her türlü ifade gelebilir anlamındadır.
? işareti ise bir karakter olmak üzere her türlü değeri alabilir anlamındadır. Mesela isminin sondan üçüncü harfi A, ve son harfi Z olan kayıtları listelemek istersek sondan ikinci harfin ne olduğu önemli değildir. O zaman o harf yerine aşağıda görüldüğü üzere ? işaretini kullanırız.
SELECT * FROM ISCI WHERE ISCI_ADI LIKE ‘%A?Z’
ifadesi kullanılır.
 BETWEEN:
 Koşul belirtirken iki değer arasını belirtmek için kullanılır. Örnek: Yaşı 30 ile 40 arasındaki işçilerin kayıtlarını listelemek için
SELECT * FROM ISCI WHERE YAS BETWEEN 30 AND 40
ifadesi kullanılır. Bunu aynı zamanda aşağıdaki ifade ile de yapabilirsiniz. BETWEEN yazım kolaylığı sağlar.
SELECT * FROM ISCI WHERE YAS>=30 AND YAS<=40
SUM:
Seçilen değerlerin toplamını bulur. İşçilerin aldığı toplam ücreti görmek için
SELECT SUM(UCRET) FROM ISCI
ifadesi kullanılır.
MAX, MIN, AVG:
Verilen değerin en büyüğünü, en küçüğünü ve ortalamasını bulur. 1999 yılında giren işçilerin en yüksek ücretinin, en düşük ücretinin ve ortalamasının ne kadar olduğunu öğrenmek istersek aşağıdaki ifadeyi kullanırız.
SELECT MAX(UCRET), MIN(UCRET), AVG(UCRET) FROM ISCI WHERE GIRIS_TARIHI>’01.01.1999’
MAX en büyük değeri, MIN en küçük değeri, AVG ise seçilen değerlerin ortalmasını bulur.
ORDER BY:
Tablodan seçtiğimiz kayıtları sıralamak için kullanılır. Yukardaki örnekte isimleri alfabetik sıra ile görmek istersek
SELECT DISTINCT ISCI_ADI FROM ISCI ORDER BY ISCI_ADI
yazarız. Eğer sıralamayı tersine çevirmek istersek
SELECT DISTINCT ISCI_ADI FROM ISCI ORDER BY ISCI_ADI DESC
yazarız.
GROUP BY:
 Genelde istatistik amaçlar için kullanılır. Mesela hangi tarihte kaç işçinin işe alındığını bulmak için
SELECT GIRIS_TARIHI,COUNT(*) FROM ISCI GROUP BY GIRIS_TARIHI
yazmanız yeterli olacaktır. Bu ifade size gün bazında kaç işçinin işe alındığını gösterecektir. Eğer belli bir tarihten önce ya da sonrasını isterseniz veya sadece sayının 10’dan büyük olduğu günleri görmek isterseniz o zaman ifadeyi şu şekilde yazmak gerekir.
SELECT GIRIS_TARIHI,COUNT(*) FROM ISCI WHERE GIRIS_TARIHI>’01.01.1999’ GROUP BY GIRIS_TARIHI HAVING COUNT(*)>10
HAVING, grup fonksiyonlarının kriterleri için kullanılır. SUM, COUNT vb. gibi.
UPDATE:
Tabloda bulunan bir istediğiniz bir veya daha fazla alanın güncellenmesi amacıyla kullanılır. Mesela işçilerin maaşlarına % 20 zam yapıldığını düşünürsek aşağıdaki ifade ile bunu tabloda gerçekleştirebiliriz.
UPDATE ISCI SET MAAS=MAAS*1.2
Eğer maaşlarla birlikte aldıkları primleri de %20 oranında artırmak isterseniz
UPDATE ISCI SET MAAS=MAAS*1.2 , PRIM=PRIM*1.2
şeklinde bir ifade kullanılır. Aynı zamanda WHERE ifadesini kullanarak sadece belli kayıtlar üzerinde güncelleme yapabilirsiniz.
DELETE:
 Tabloda bulunan kayıtları silmek için kullanılır. Eğer
DELETE FROM ISCI
derseniz tüm kayıtları gönderirsiniz.
 DELETE ifadesini kullanırken dikkatli olun. Buradada yine WHERE ifadesini kullanarak sadece belli kritere uyan kayıtların silinmesini sağlayabilirsiniz. Kötü bir örnek ama olsun, patron 45 yaşından büyük işçileri işten attı (burası Türkiye, olmaz demeyin) ve kayıtlarının silinmesi isteniyor. O zaman
DELETE FROM ISCI WHERE YAS>45
ifadesi kullanılır.
INSERT:
Tablolara veri girişi yapmak amacıyla kullanılır.
INSERT INTO ISCI (ISCI_NO,ADI,SOYADI) VALUES (1000,’AHMET’,’SAVAŞ’);
Eğer giriş yaparken tablonun bütün alanları kullanılacaksa alan isimlerini vermeye gerek yoktur.
Not:
UPDATE, DELETE ve INSERT ifadelerini kullanırken dikkatli olmalısınız. Eğer SQL tabanlı bir veri tabanı kullanıyorsanız bu ifadeleri veritabanlarının kendi tool’ları üzerinde kullanın. Çünkü Delphi ile gelen SQL Explorer’da işaretine basmayı unutursanız yaptığınız işlemin geri dönüşü olmayabilir. Yani en son yaptığınız işlemi Rollback yapamazsınız ve eğer gerçek veritabanı üzerinde yaptıysanız işlemi başınız bayağı ağrıyabilir veya o iş yerinde yazdığınız son SQL ifadesi olabilir. :-))
İKİ TABLODAN BİRDEN KAYIT SEÇMEK:
İşçilerin kimlik bilgilerinin ISCI_KIMLIK tablosunda tutulduğunu kabul ederek bizden ÇORUM doğumlu olanların listesinin istendiğini varsayalım. Tablolar birbirine ISCI_NO alanı üzerinden ilişkili olsun.
SELECT A.ISCI_NO, A.ISCI_ADI, B.DOGUM_YERI FROM ISCI A, ISCI_KIMLIK B WHERE B.DOGUM_YERI=’ÇORUM’ AND A.ISCI_NO=B.ISCI_NO
şeklinde bir ifade yazarak listemizi elde edebiliriz. Burada WHERE koşuluna yazdığınız sıranın pek bir önemi yoktur. Her şartta aynı sonuçları elde ederseniz. Fakat performans açısından biraz farkeder. Yukardaki ifade
SELECT A.ISCI_NO, A.ISCI_ADI, B.DOGUM_YERI FROM ISCI A, ISCI_KIMLIK B WHERE A.ISCI_NO=B.ISCI_NO B.DOGUM_YERI=’ÇORUM’
ifadesinden daha hızlı çalışır. Çünkü ilk ifadede önce doğum yeri ÇORUM olan kayıtlar seçilir daha bu kayıtlara işçi tablosu birleştirilir. Sonraki ifadede ise önce tüm kayıtlar birleştirilir, bunların arasından doğum yeri ÇORUM olanlar seçilir.
DISTINCT           TEKRARSIZ
TANIM: SQL’de tablo  içinde  birbirinin  aynı  datalar  bulunabilir.Aynı satırların listeleme esnasında bir kez yazılması
ÖRNEK: 1)Par _sat dosyasından sat_no’ları tekrarsız olarak listelenecektir.
ORDER BY                     SIRALA
TANIM: Tablodaki sütunlardan ,belirli bir sütuna göre listelemek için SEÇ komutuna, SIRALA eklenir.
ÖRNEK: 1)Personel dosyasından,sicil,ad,soyad,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                                   SEÇ  sicil,ad,soyad,brüt
FROM personel                                                    GELİŞ  personel   
ORDER BY brüt ASC;                                           SIRALA brüt  B-K;
DESC      Küçükten büyüğe sırala                          ASC      Büyükten küçüğe sırala
İİ)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 1)Personel dosyasından seçilen sütunlarını aynı anda hem ad,hem de otomatik olarak sıralar.
SELECT sicil,ad,soyad,brüt                                  SEÇ sicil,ad,soyad,brüt
FROM personel                                  GELİŞ  personel
ORDER BY ad,brüt;                                            SIRALA ad,brüt;

 
ÖRNEK 2)Personel tablosundan seçili sütunları öncelik adda olmak üzere (B-K) adı bozmadan soyadı (K-B) sıralı listeler.
SELECT sicil,ad,soyad,brüt                      SEÇ sicil,ad,soyad,brüt
FROM  personel                                                  GELİŞ  personel
ORDER BY ad ASC,soyad DESC,                     SIRALA ad B-K,soyad K-B,
brüt ASC;                                                          brüt B-K;
veya;
SELECT sicil,ad,soyad,brüt                             SEÇ  sicil,ad,soyad,brüt
FROM personel                                                GELİŞ  personel
ORDER BY ad,soyad DESC,brüt;                  SIRALA ad,soyad K-B,brüt;
DESC’li durumda yanına yazıp belirtilir,yazılmazsa ASC direct kabul edilir.
KOŞULA BAĞLI OLARAK LİSTELEME:
WHERE            OLAN
TANIM:Verilen koşulu sağlayanlar listelenir.İki veri birbiriyle karşılaştırılmaktadır. Karşılaştırılan verilerin türü aynı olmalıdır.
SELECT *                                                                           SEÇ *
FROM  personel                                                                 GELİŞ personel
WHERE brüt  > 5000000;                                                  OLAN brüt  > 5000000;
KARŞILAŞTIRMA OPERATÖRLERİ:
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 değil
!=   Eşit değil
!<   ...den küçük değil
!>   ...den büyük değil
 
ÇEŞİTLİ VERİ TİPLERİ İÇİN BASİT SORGULAMALAR:
i)NÜMERİK VERİ TİPLERİ:
ÖRNEK: Maaşı 8000000TL’den fazla olmayan personeli listele.
SELECT *                                                      SEÇ  *
FROM   personel                                                                                          GELİŞ   personel
WHERE   brüt  <= 8000000                                OLAN  brüt  <= 8000000;
 ii)KARAKTER VERİ TİPLERİ (CHAR):
Karakter çift veya tek tırnak ile gösterilir.
ÖRNEK: Adı Ali olmayan personele ait kayıtları listele.
SELECT  *                                                                SEÇ  *
FROM  personel                                                        GELİŞ  personel
WHERE  ad <> “Ali”;                                      OLAN ad <> “Ali”;
İİİ)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  *                                                      SEÇ  *
FROM   personel                                                                                           GELİŞ   personel
WHERE  dog_tar <={12/31/59}                           OLAN dog_tar <={12/31/59};
MANTIKSAL (LOJİK) VERİ  TİPİ:
Mantıksal veriler için mümkün olabilen sadece iki değer sözkonusudur.DOĞRU  D(TRUE  T) , YANLIŞ  Y (FALSE F) ile simgelenir.
ÖRNEK: Personel  tablosunda  personelin cinsiyetini belirten cins adlı alan mantıksal(logical)  olarak  tanımlanmıştır.Cinsiyeti erkek olanları D,kadın olanları y ile tanımlarsak erkek olanları listele.
SELECT *                                                    SEÇ  *
FROM personel                                                GELİŞ  personel
WHERE cins  = .T.;                                         OLAN  cins =.D.;
BİRDEN  ÇOK KOŞULA DAYALI SORGULAMALAR: (NOT,AND,OR)
TANIM:Mantıksal operatörlerin yardımı ile birden  çok koşulun gerçekleştirmesine bağlı  olarak  ifade edilebilecek (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 *                                                         SEÇ  *
FROM personel                                                GELİŞ  personel
WHERE  brüt >5000000 AND cins =.T.;        OLAN brüt > 5000000 AND cins =.D.
NOT             DEĞİL 
OR                 VEYA
ÖRNEKLER:
i)Doğum tarihi 1960’dan önce olan maaşı 6000000 – 10000000 arasındaki bayan personelin listele.
SELECT  *                                                              SEÇ  *
FROM dog_tar <  {01/01/60} AND                       GELİŞ dog_tar < {01/01/60} VE
brüt > = 6000000 AND brüt < =10000000             brüt > = 6000000 VE brüt < =10000000
AND cins = .F.;                                                       VE cins =.Y.;
 İİ)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 *                                                                  SEÇ  *
FROM  personel                                                        GELİŞ  personel
WHERE  bol_no =1 OR  bol_no = 2;                        OLAN bol_no = 1  VEYA bol_no =2;
 İİİ)Bölümü Satış  yada Muhasebe olamayan  1960’dan sonra doğmuş bayan personeli listele.
 1.YAZILIM:
SELECT *                                                                  SEÇ  *
FROM  personel                                                        GELİŞ  personel
WHERE  NOT (böl_no =1 OR                                 OLAN DEĞİL (böl_no =1 VEYA
böl_no =2) AND dog_tar > ={01/01/60}                    böl_no =2)VE dog_tar >={01/01/60}
AND cins=.F.;                                                            VE cins=.Y.;
2.YAZILIM:
SELECT  *                                                                 SEÇ  *
FROM  personel                                                        FROM  personel
WHERE  böl_no  <> 1 AND                                     OLAN böl_no <> 1 VE
böl_no <> 2 AND dog_tar > ={01/01/60}                  böl_no <> 2 AND dog_tar > = {01/01/60}
AND  cins =.F.;                                                          VE cins =.Y.;
BİR VERİ KÜMESİNDE ARAMA –IN OPERATÖRÜ
IN        İÇİNDE
“IN”  operatörü  DEĞİL(NOT) ile  kullanılılabilir.
ÖRNEK:i) Bölümü 1,2,3 olmayan personel kimlerden oluşmaktadır?
 
SELECT *                                                           SEÇ   *
FROM  personel                                                 GELİŞ  personel
WHERE  bol_no  NOT IN (1,2,3);                     OLAN böl_no  DEĞİL İÇİNDE (1,2,3);
 ÖRNEK:ii) Böl_no’su 1,2 yada 3 olan personeli listele.
 SELECT  *                                                       SEÇ   *
FROM  personel                                               GELİŞ  personel
WHERE böl_no = 1  OR  böl_no= 2  OR         OLAN böl_no =1 VEYA böl_no =2 VEYA
böl_no=3;                                                           böl_no = 3;
 Bu örneğin IN ile yapılmış şekli daha kısadır.
SELECT *                                                         SEÇ  *
FROM   personel                                              GELİŞ  personel
WHERE  NOT  böl_no  IN (1,2,3);                  OLAN DEĞİL böl_no İÇİNDE (1,2,3);
ARALIK SORGULAMA SÖZCÜĞÜ:
BETWEEN                       ARASINDA
ÖRNEK:Maaşı 5- 10 milyon arasında olan personel kimlerdir?
SELECT  *                                                        SEÇ  *                 
FROM  personel                                               GELİŞ  personel
WHERE  brüt  > =5000000  AND                   OLAN brüt > =5000000  VE
brüt < = 10000000;                                            brüt < = 10000000;
 BETWEEN (ARASINDA)   komutu  ile  daha  kısa olacaktır.
SELECT *                                                         SEÇ  *
FROM  personel                                                GELİŞ  personel
WHERE  brüt  BETWEEN 5000000               OLAN brüt ARASINDA 5000000
AND  10000000;                                               VE 10000000;
KARAKTER TÜRÜ BİLGİ İÇİNDE ARAMA YAPMA –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 *                                                               SEÇ  *
FROM  personel                                                     GELİŞ personel
WHERE  adres LIKE  ‘% TAKSİM %’ ;            OLAN 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 *                                                                SEÇ  *
FROM  personel                                                      GELİŞ  personel
WHERE  ad LIKE  ‘Mehmet -----‘;                        OLAN  ad BULUNAN ‘Mehmet ----‘;
Şekildeki komut  ile ad alanı “Mehmet “ ile başlayan  ve ad alanı uzunluğu 10 karakter olan isimlere sahip personeli  listeleyecektir.”Mehmet Ali”,”Mehmet Can”- “Mehmetcik” gibi isimler listeleyecektir.Anlaşılacağı gibi  - sembolü , tek karakterlik bir bilgiyi  temsil etmektedir.
 
SQL’DE ARİTMETİKSEL İFADELER VE FNKSİ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  SUMbrüt)                                         SEÇ  TOPLA(brüt)
FROM  personel;                                                      GELİŞ  personel;
AVG FONKSİYONU:
AVG            ORT
Aritmetiksel  ortalama (average) hesaplamak için kullanılır.
SELECT  AVG(brüt)                                         SEÇ ORT (brüt)
FROM   personel;                                                      GELİŞ  personel;
MAX FONKSİYONU:
MAX           Ü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)                                      SEÇ ÜST (brüt)
FROM  personel;                                             GELİŞ personel;
MIN FONKSİYONU:
MIN         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)                                        SEÇ   ALT(brüt)
FROM  personel                                               GELİŞ  personel
WHERE dog_tar<05/04/70};                            OLAN  dog_tar < {05/04/70};
COUNT FONKSİYONU:
COUNT        SAY
Tablo içinde ,her hangi bir sayma işlemi gerçekleştirmek için kullanılır.
ÖRNEK:Ücreti 6000000’dan  olan personel sayısı nedir?
SELECT COUNT  (*)                                       SEÇ SAY(*)
FROM   personel                                              GELİŞ  personel
WHERE brüt>6000000;                                                   OLAN 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 farklı  bölümde çalıştığını  bul.
SELECT  COUNT(DISTINCT böl_no)                          SEÇ SAY (TEKRARSIZ böl_no)
FROM  personel;                                             GELİŞ  personel;
COUNT (böl_no)                                                              SAY (böl_no)
GRUPLANDIRARAK  İŞLEM  YAPMA:
GROUP BY          GRUPLA
ÖRNEK: Her  bölümdeki ortalama maaş nedir?
SELECT  böl_no,AVG (brüt)                             SEÇ böl_no
FROM  personel                                                 GELİŞ  personel
GOUP BY böl_no;                                               GRUPLA 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şın 9000000’dan fazla olduğu bölümlerdeki personele ait ortalama maaşları listele.
SELECT  böl_no,AVG (brüt)                           SEÇ böl_no, ORT(brüt)
FROM personel                                                GELİŞ  personel
GROUP BY böl_no                                           GRUPLA  böl_no
HAVING AVG(brüt)> 9000000;                      SAHİP  ORT(brüt)> 9000000;
HAVING(SAHİP) sözcüğü SELECT(SEÇ) konusunda GROUP BY(GRUPLA) bulunmadığı zaman geçersizdir.HAVING(SAHİP) sözcüğünü izleyen ifade içinde ,SUM(TOPLA), COUNT(*)(SAY),AVG(ORT),MAX(ÜST) yada  MIN(ALT) fonksiyonlarından en az biri bulunmalıdır.
HAVING (SAHİP)  sözcüğü sadece gruplanmış veriler üzerindeki işlemlerde geçerlidir.
WHERE (OLAN) sözcüğü bir tablonun tek tek satırları üzerinde işlem yapan koşullar içinde geçerlidir.
Bazı durumlarda HAVING(SAHİP) ve WHERE(OLAN) sözcükleri ile birlikte SELECT(SEÇ) komutu içinde kullanılabilir.
ÖRNEK:Personel tablosu içinde her bölümde erkek personele ait maaşlar için ortalamanın  9000000’dan fazla olduğu  bölümleri listele.
SELECT böl_no, AVG(brüt)                            SEÇ böl_no, ORT (brüt)
FROM  personel                                               GELİŞ  personel
WHERE cins= .T.                                             OLAN cins= .D.
GROUP BY böl_no                                           GRUPLA  böl_no
HAVING AVG (brüt) > 9000000;                    SAHİP ORT(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   *                                                                 SEÇ  *
FROM  personel,bölüm                                              GELİŞ  personel,bölüm
WHERE personel .böl_no=bölüm.bölüm_no ;           OLAN personel.böl_no = bölüm.bölüm_no;
SELECT sicil,ad,soyad,böl_no,yön_s_g_n            SEÇ sicil,ad,soyad,böl_no,yön_s_g_n
FROM  personel,bölüm                                                          GELİŞ personel,bölüm
WHERE personel .böl_no = bölüm .bölüm_no;                     OLAN 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 “KENDİSİYLE-İLİŞKiLENDİR” denir.(SELF-JOIN)
SELECT A. sicil , A.ad , A.soyad,B .ad , B.soyad , B.dog_tar       
                                                                      SEÇ    A. sicil , A.ad , A.soyad, B .ad , B.soyad , B.dog_tar
FROM  personel A , personel B                               GELİŞ   personel A , personel B
WHERE A. yon_sos_g_n =B .sosy_g_no;               OLAN  A. yon_sos_g_n =B .sosy_g_no;
NESTED SELECTS:
İÇİÇE
TANIM:İç içe geçmiş SELECT(SEÇ)komutlarından oluşur.İçteki. seç komutunun bulduğu sonucu dış takı SEÇ 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  *                                                                     SEÇ  *
FROM  personel                                                            GELİŞ personel
WHERE sosy_g_no                                                       OLAN sosy_g_no
IN(SELECT per_s_g_no                                               İÇİNDE(SEÇ per_s_g_no
FROM  parça,proje,çalışma                                          GELİŞ parça,proje,çalışma
WHERE pr_no = proj_no AND                                                                                   OLAN pr_no = proj_no VE
              proj_no =proj_no AND                                                       proj_no = proj_no VE
              par_no =24);                                                                              par_no =24);
ÖRNEK: Fatih’te oturan personelin çalıştığı projelerin adlarını ve yerlerini listele.
SELECT   proj_ad,yer                                                     SEÇ  proj_ad,yer
FROM  proje                                                                   GELİŞ  proje
WHERE  proj_no  IN                                                      OLAN proj_no İÇİNDE
(SELECT proje_no                                                          (SEÇ proje_no
FROM personel,çalışma                                                GELİŞ sosy_g_no = per_s_g_no
WHERE  sosy_g_no = per_s_g_no                               OLAN  sosy_g_no = per_s_g_no
AND adres LIKE “% fatih %”);                                   VE adres BULUNAN “% 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                                                    (SEÇ proj_ad,yer
FROM proj,bölüm,personel                                          GELİŞ  proj,bölüm,personel
WHERE  bl_no=bölüm_no AND                                  OLAN bl_no=bölüm_no VE
               y_sos gno = sosy_g_no                                          y_sos gno = sosy_g_no
              AND ad =”Ahmet”AND soyad =”Caner”)                      VE ad =”Ahmet” VE  soyad =”Caner”)
UNION (SELECT proj_ad,yer                                      BİRLEŞİM (SEÇ proj_ad,yer
FROM proje,çalışma,personel                                      GELİŞ proje,çalışma,personel
WHERE proj_no = proje_no AND                               OLAN proj_no = proje_no VE
Per_s_g_no = sosy_g_no AND ad =”Ahmet”              Per_s_g_no = sosy_g_no VE  ad ”Ahmet”
                       AND soyad=”Caner”)                                                   VE  soyad =”Caner”)
KOŞULLAR:
UNION  (BİRLEŞİM) sözcüğü ile ,iki yada daha çok kişi  SELECT (SEÇ)’in sonucu olan tabloların küme birleşimi işlemine  tabi tutulması için 2 koşul gereklidir.
1)SELECT (SEÇ) 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  *                                                                                 SEÇ  *
FROM personel                                                             GELİŞ personel
WHERE  brüt < ANY                                                    OLAN brüt < HER HANGİ BİRİ
(SELECT brüt                                                                (SEÇ brüt
FROM personel                                                             GELİŞ personel
WHERE böl_no = 2)  AND böl_no = 1;                        OLAN böl_no = 2) VE böl_no =1;                                                                           
EŞ DEĞERİ İFADE:
SELECT  *                                                                    SEÇ  *
FROM  personel                                                           GELİŞ  personel
WHERE brüt  <  (SELECT MAX (brüt )                    OLAN brüt < (SEÇ ÜST (brüt )
FROM personel                                                            GELİŞ personel
WHERE böl_no = 2) AND  böl_no =1;                        OLAN böl_no = 2) VE  böl_no =1;
ALL:
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  *                                                                 SEÇ  *
   FROM   personel                                                       GELİŞ   personel
  WHERE brüt >                                                           OLAN  brüt >
  ALL (SELECT  brüt                                                   HEPSİ (SEÇ brüt
  FROM  personel                                                         GELİŞ  personel
  WHERE böl_no = 1)  AND böl_no = 2;                     OLAN  böl_no =1) VE böl_no =2;
2)SELECT   *                                                                SEÇ    *                 
   FROM   personel                                                       GELİŞ  personel
  WHERE brüt  >                                                          OLAN  brüt  >
 (SELECT  MAX  (brüt)                                               (SEÇ  ÜST (brüt)
FROM  personel                                                           GELİŞ  personel
WHERE böl_no = 1) AND böl_no =2;                           OLAN böl_no = 1) VE  böl_no =2;
EXISTS:
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  *                                                                      SEÇ  *
FROM  satıcı                                                                  GELİŞ satıcı
WHERE   EXISTS                                                          OLAN  MEVCUT
     (SELECT  *                                                                    (SEÇ  *
     FROM  par_sat                                                             GELİŞ  par_sat
     WHERE  sat_no = satıcı_n                                           OLAN  sat_no = satıcı_n
     AND  parça_n =27);                                                      VE  parça_n = 27);
NOT EXISTS:
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  *                                                                            SEÇ  *
FROM  satıcı                                                                        GELİŞ satıcı
WHERE  NOT  EXISTS                                                      OLAN  MEVCUT DEĞİL
     (SELECT  *                                                                              (SEÇ  *
     FROM  par_sat                                                                       GELİŞ  par_sat
     WHERE  sat_no = satıcı_n                                                     OLAN  sat_no = satıcı_n
     AND  parça_n =27);                                                                VE  parça_n = 27);
EXCEPT:
EXCEPT             FARKLI
Tablo-1  -  Tablo-2 işlemi sonuç(iki kümenin farkı) elde edilecek tabloda,Tablo-1’de bulunup, Tablo-2’de bulunmayan veriler mevcut olacaktır.
ÖRNEK:Satış bölümündeki personel  adlarından,mühendislik bölümünde bulunmayanları listele.
SELECT  *     FROM                                                             SEÇ  *    GELİŞ
(SELECT   ad FROM  personel                                             (SEÇ  ad  GELİŞ  personel
WHERE bol_no=1                                                                   OLAN böl_no = 1
EXCEPT                                                                                   FARKLI
SELECT ad FROM  personel                                                 SEÇ  ad  GELİŞ  personel
WHERE bol_no =2);                                                                OLAN böl_no =2);
INTERSECT:
INTERSECT              KESİŞİM
ÖRNEK: Hem Ankara’da,hem de İstanbul’daki  projelerde görev alan bölümleri listele.
SELECT  *  FROM                                                               SEÇ  *   GELİŞ
(SELECT  bl_no FROM  proje                                             (SEÇ bl_no GELİŞ  proje
WHERE yer LIKE “%Ankara%”                                       OLAN yer BULUNAN  “%Ankara%”
INTERSECT                                                                          KESİŞİM
SELECT bl_no FROM  proje                                               SEÇ bl_no  GELİŞ  proje
WHERE yer LIKE “%İstanbul%”);                                   OLAN yer BULUNAN “%İstanbul%”);
SAVE TO TEMP:
SAVE TO TEMP                  SAKLA
ÖRNEK: Bayan personeli,bayan adlı bir tablo içinde sakla.
SELECT  *                                                                              SEÇ    *
FROM  personel                                                                     GELİŞ  personel
WHERE cins =.F. SAVE TO TEMP bayan;                         OLAN cins =.Y. SAKLA  bayan;
KEEP:
KEEP          KALICI
ÖRNEK:
SELECT  *                                                                              SEÇ  *
FROM  personel                                                                     GELİŞ  personel
WHERE cins = .F.                                                                  OLAN cins =.Y.
SAVE TO TEMP bayan KEEP;                                              GEÇİCİ SAKLA bayan KALICI;
TABLOLARDA DEĞİŞİKLİK YAPMAK:
INSERT:
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,                                    EKLE İÇİNE personel(sicil,
     sosy_g_no,ad,soyad,doğ_tar                                         sosy_g_no,ad,soyad,doğ_tar
     adres,cins,brüt,böl_no,yön_s_g_no                               adres,cins,brüt,böl_no,yön_s_g_no
VALUES(‘275’,’27652418’,’Ali’,’Caner’,                  DEĞERLER (‘275’,’27652418’,’Ali’,’Caner’,
{10/05/1962},’Merkez caddesi 46 –Fatih-İstanbul’, {10/05/1962},’Merkez caddesi 46 –Fatih-İstanbul’,
.T.,27000000,2,’876215342’);                                                       .D.,27000000,2,’876215342’);
DELETE:
DELETE           SİL
ÖRNEK:2 no’lu bölümdeki personelin tümü tablodan sil.
DELETE FROM personel                                            SİL GELİŞ personel
WHERE böl_no = 2;                                                      OLAN böl_no = 2;
5 ROWS DELETED                                                      5 SATIR SİLİNDİ
ÖRNEK:Brüt maaş alanı boş olmayan tüm personeli sil.
DELETE FROM  personel                                          SİL GELİŞ personel
WHERE brüt IS NOT NULL;                                      OLAN brüt DEĞERSİZ;
25 ROWS DELETED                                                    25 SATIR SİLİNDİ
UPDATE :
UPDATE            GÜNCELLE
SET                 YAP
ÖRNEK:2’inci bölümün yürüttüğü projelerde kullanılan tüm parçaların fiyatlarını % 7 zam yap.
UPDATE  parça                                                                     GÜNCELLE parça
SET fiyat = fiyat *1,07                                                           YAP fiyat = fiyat *1,07
WHERE  pr_no  IN                                                               OLAN pr_no İÇİNDE
(SELECT proj_no                                                                   (SEÇ proj_no
FROM  proje                                                                          GELİŞ proje
WHERE bl_no = 2;                                                                 OLAN bl_no =2 ;
CREATE INDEX:
CREATE INDEX             INDEKS  YARAT
ON                                    İÇİN
CREATE INDEX  ındeks  adı                                             INDEKS YARAT  ındeks adı
ON tablo adı(kolon adı 1,kolon adı 2,.,.kolon adı n);                   
               



Not: Konular İnternet Sitelerinden derlenerek alıntı yapılmıştır.








BilX.Net

Çevrimdışı elgar2013

  • Çavuş
  • *
  • İleti: 1
  • Karma: +0/-0
    • Profili Görüntüle

Ynt: Temel SQL Komutları
« Yanıtla #1 : Ağustos 10, 2013, 05:24:05 ÖS »
Merhaba
Temel komutları inceledim. Ellerinize sağlık güzel hazırlamışsınız.
Benim SQL`le ilgili sorunum şu:
SQL`de count komutu anladığım kadarıyla  SatisAdi kaç taneyse hepsini hesapliyor, bana `SatisAdi` alanı içinden `Ülker Çokokrem`in kaç tane satıldığı bilgisi lazım. Ayrıca bu bilgiyi Delphiye aktarmam lazım. Bunu nasıl yapa bilirim?