0% found this document useful (0 votes)
15 views10 pages

SQL Komutlari: DISTINCT (Tekrarsız)

kodalama dili sql hakkında bilgiler

Uploaded by

Yasin Dilmen
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
15 views10 pages

SQL Komutlari: DISTINCT (Tekrarsız)

kodalama dili sql hakkında bilgiler

Uploaded by

Yasin Dilmen
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOC, PDF, TXT or read online on Scribd

SQL KOMUTLARI

Ö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 [Link]ı 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;

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.

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)

Ö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 [Link] 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;

[Link] 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”;

[Link]İ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};

[Link] (LOJİK) VERİ TİPİ:

Mantıksal veriler için mümkün olabilen sadece iki değer sö[Link]ğ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.;

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:
[Link]ğ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.;

[Link]ış 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.

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

[Link]:
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
[Link]şilacagi gibi - sembolü , tek karakterlik bir bilgiyi temsil etmektedir.

KÜME FONKSİYONLARI:

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 (ORTALA)

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

SELECT AVG(brüt) FROM personel;

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 (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 (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)

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 (SAHİP)

Gruplandırarak kümeleme fonksiyonunu uygularken koşulda [Link] 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 , [Link] , [Link], B .ad , [Link] , 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 (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 [Link] ö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 (KALICI)

ÖRNEK:
SELECT * FROM personel WHERE cins = .F. SAVE TO TEMP bayan KEEP;

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ş[Link] 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 [Link] 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;

You might also like