View
12
Download
0
Category
Preview:
Citation preview
Gülcay KORKMAZ Yazılım Uzmanı & BT Eğitmeni Web: http://www.egitimde-bilisim.com
1
Veri tabanı (database) Nedir? : İçinde bulunan nesneleri
vasıtasıyla çok büyük verileri saklayan ve bu verilerle işlem
yapan bir platformdur.
İlişkisel veri tabanı Yönetim Sistemi - RDMS (Relational
Database Management System ) Nedir: veri tabanları çok
sayıda tabloların bir araya getirilmesi sonucu
oluşturulmaktadır. Dolayısıyla ortaya bu tablolar ya da diğer
veri tabanı nesneleri arasında çeşitli ilişkiler kurma durumu
çıkmıştır. Ortaya çıkan bu teknolojik yapıya da RDBMS
(Relational Database Management System- İlişkisel veri tabanı
Yönetim Sistemi) denmiştir.(Bu türe uyan en yaygın veri
tabanları: Access, mysql, sql server, oracle v.b.gibi)
RDBMS YAPISI
1. Tablolar içerisinde veri oluşturma ve tutma. 2. Veriler ve tablolar arasında ilişki kurma. 3. Veriler arasındaki ilişkiler için gerekli olan kuralları
belirleme. (Örn: Primary Key, Foreign Key) 4. Sistem problemlerinde verileri kurtarma.(Örn:
recover,backup,restore) 5. Client uygulamalarından gelen istekleri
cevaplama.(Yazılımlar aracılığı ile veri yönetimi) 6. Transaction ve analiz için veri kaynaklarını yönetme.
Veritabanında bulunan temel kavramlar:
- Tablo (Table):Veri saklama için temel yapıdır. Bir veya
daha fazla sütundan ve sıfir veya daha fazla satırdan oluşur.
- Sütun (Column): Tablodaki bir veri türüne karşılık gelir.
- Satır (Row):Kaydın (record) diğer adıdır. Sütun değerleri
grubudur.
Gülcay KORKMAZ Yazılım Uzmanı & BT Eğitmeni Web: http://www.egitimde-bilisim.com
2
- Alan (Field):Bir satır-sütun koordinatındaki değerdir.
Alanda veri bulunmazsa, bu alan NULL değer içerir denir.
- Birincil Anahtar (Primary Key): Tekrarlanmayacak alandır.
Buradaki veri aynı tablo içinde birden fazla tekrarlanamaz .
(örnek: personel bilgilerinde T.C.No )
- Yabancı Anahtar (Foreign Key): Aynı veya farklı bir tablo
içindeki birincil anahtarlara başvuran (referencing) sütun veya
sütun gruplarıdır. Yabancı anahtar değeri bir birincil anahtar
değeri ile aynı olmalı ve NULL olmamalıdır.
Tablo çeşitleri:
1- Ana Tablo (main table): Veri tabanında mutlaka olması gereken tablo çeşididir. Ana tabloda mutlaka bir birincil anahtar (primary key) alanı olması gerekir. Çünkü bu tabloya bağlı bir ya da daha fazla alt tablo olabilir. Bu tablolarla ilişki söz konusu alanda kurulur. (örnek: T.C. kimlik no) Bu alan boş veri içeremez, veri tekrarı olamaz.
2- Alt tablolar (sub tables): Ana tablodaki her bir satırdaki bir kayıt için detay bilgilerin işlendiği bir ya da birden fazla
tablolardır. (örnek: Öğrenci kimlik tablosunda bir öğrenci tektir ve bu tablo bir ana tablodur. Oysa bu tablodaki her bir öğrenciye ait derslerin ve notların işlendiği tabloda öğrenci T.C. kimlik birden fazla satırda olacaktır. Dolayısıyla burada öğrenci not tablosu kimlik tablosuna bağlı bir alt tablodur. Bağlı oldukları alan da T.C. kimlik no’dur)
VERİ BÜTÜNLÜĞÜ
Veri bütünlüğünü sağlamak için şu kısıtlamalar olur:
- Nesne Bütünlüğü (Entity Integrity):
Birincil anahtar NULL
Gülcay KORKMAZ Yazılım Uzmanı & BT Eğitmeni Web: http://www.egitimde-bilisim.com
3
değer almamalı ve aldığı değer
tekrarsız ve tek olmalıdır.
Örneğin, yukarıda verdiğimiz KIMLIK_BILGILERI tablosuna
birincil anahtar olan TC_KIMLIK_NO sütunundaki değeri
11111111111 olan bir kayıt daha girememiz nesne
bütünlüğünü bozacağından, veri tabanı bu kaydı
girmemize izin vermez. Benzer şekilde, TC_KIMLIK_NO
'su olmayan (NULL olan) bir kayıt da giremeyiz.
- Başvuru Bütünlüğü (Referential
Integrity): Yabancı anahtar değerleri
birincil anahtar değerine eşit olmalıdır.
Örneğin, yukarıda verdiğimiz GOREV_KAYDI tablosuna
yabancı anahtar olan TC_NO sütunundaki değeri
11111111111 olan bir kaydı, KIMLIK_BILGILERI
tablosunda TC_KIMLIK_NO 'su 11111111111 olan bir kayıt
bulunmadığında, giremeyiz.
- Sütun Bütünlüğü (Column Integrity):
Sütundaki değerler tanımlı veri tipine
uymalıdır.
Örneğin, TC_KIMLIK_NO sütunu sayı değerler içerdiğinden
o sütuna metin değerler giremeyiz.
- Kullanıcı Tarafından Tanımlanan Bütünlük
(User-defined Integrity):
Değerler kullanıcının tanımladığı kurallara uymalıdır.
Örneğin, NOT NULL olarak tanımlanmış bir alana NULL
değer giremeyiz
Gülcay KORKMAZ Yazılım Uzmanı & BT Eğitmeni Web: http://www.egitimde-bilisim.com
4
VERİ TABANINDA TABLOLAR ARASI İLİŞKİ İŞLEMLERİ
Tüm ilişkisel veri tabanlarında ortak alan içeren ana ve alt
tablolar arasında ilişki kurmak mümkündür. Bunun avantajı;
1- ilişki kurulmuş ana tabloda ilgili alanda yapılacak bir değişikliğin tüm alt tablolara da yansıması (örnek: Öğrenci
KIMLIK tablosunda TCNO su değişen bir öğrencinin OGRENCI_NOTLARI tablosunda da TCNO su bağlı olarak değişir)
2- Yine ana tabloda silinen kayıt ilişkili tablolarda da silinir.
Böylece veri tabanını kontrol işlemi daha da kolaylaşmış olur
Bu ilişkinin hatasız olabilmesi için aşağıdaki kurallara uymak gerekir:
- İlişki kurulacak tablolardan biri mutlaka ana tablo olmalı
- Ana tabloda mutlaka birincil anahtar olmalıdır
- Alt tabloda mutlaka ana tablodaki birincil anahtarda aynı türden ve aynı verileri içeren bir alan olmalıdır
- Alt tabloda bu alana işlenmiş verilerin mutlaka ana tabloda da olması gerekir
Transact Sql Nedir : Kısaca veri tabanı üzerinde değişiklik yaptıran işlemlerdir diyebiliriz.T- SQL (Transact Structure Query Language-Yapısal Sorgulama Dili işlemleri) (Örn: İnsert, update, delete sorgusu) Transact işlemleri SQL komutları kullanılarak yapılır. O halde SQL komutlarını tanıyalım:
Gülcay KORKMAZ Yazılım Uzmanı & BT Eğitmeni Web: http://www.egitimde-bilisim.com
5
SQL KOMUT GRUPLARI
- Veri Getirme (Data Retrieval) Komutları-
DRL :
Select: Veri tabanında bulunan bir ya da birden fazla
tablolardan veri getirmek için (sorgulamak) kullanılan
komuttur
Örnek: select TC_NO,ADI_SOYADI FROM KIMLIK KIMLIK
tablosundaki TC_NO,ADI_SOYADI alanlarındaki tüm satırları
listele.
NOT: 1- Bir tabloda tüm alanlar listelenecekse, tüm alanların
yerine geçen (*) joker karakteri kullanılır. (örnek: select *
from KIMLIK)
2- Bir tabloda where koşulu belirtilmemişse tüm satırlar listelenir. Ancak where komutundan sonra koşul varsa, koşulu sağlayan satırlar listelenir.
- Veri Değiştirme (Data Manipulation)
Komutları - DML:
insert: Tablolara veri kaydetmek için kullanılan komuttur
örnek:
insert into standart komut dizesi
ILLER (IL_KODU,IL_ADI) Tablo adı ve alanları
Gülcay KORKMAZ Yazılım Uzmanı & BT Eğitmeni Web: http://www.egitimde-bilisim.com
6
Values standart komut dizesi
(81,’DÜZCE’) alanlara aktarılacak
değerleriller tablosuna bir satır eklendi.
Bir tablonun yedeğini almak:
SELECT * INTO ILLERYEDEK FROM ILLER2
Bir tabloda belirli alanların yedeğini alma
SELECT ILCE_KODU,ILCE_ADI2 INTO ILCE_YEDEK FROM ILCELER;
Bir tablodan belirli satırların yedeğini almak:
SELECT * INTO ILLER_SATIRAL FROM ILLER2 WHERE IL_KODU>11;
Birden fazla tablodan alanlar alarak yeni tablo oluşturmak (Yeni tabloyu sql ile
oluşturmak)
SELECT IL_ADI,ILCE_ADI2 INTO IL_ILCE_TABLOSU FROM ILLER2,ILCELER WHERE ILCE_IL_KODU=IL_KODU
Bir tabloyu başka bir tabloya eklemek
INSERT INTO ILLERYEDEK(IL_KODU,IL_ADI) veri eklenecek tablo SELECT IL_KODU,IL_ADI FROM IL verileri eklenen tablo
Update: Tablolar üzerindeki kayıtlarda
yapılacak güncellemeler için kullanılan komuttur
örnek:
update ILLER set IL_ADI=’Afyonkarahisar’ where
IL_KODU=3
Gülcay KORKMAZ Yazılım Uzmanı & BT Eğitmeni Web: http://www.egitimde-bilisim.com
7
ıl kodu 3 olan ilin adını Afyonkarahisar
olarak değiştir
Delete: Tablo üzerindeki satır ya da satırları silen
komuttur.
delete from ILLER where IL_KODU=1 1
kodlu ili sil
- Toplu-işlem Kontrolü (Transaction Control)
Komutları:
commit: geçici hafızasında tutulan işlemlerin, tablolara kalıcı
olarak işlenmesini sağlayan komuttur.
(Örnek: commit;)
Rollback: Hafızada tutulan database işlemlerini
geri alan komuttur. (örnek: rollback;)
- Veri Kontrolü (Data
Control) Komutları -
DCL:
grant: Veri tabanındaki tablo ya da
sorgular üzerinde yine veri tabanı
kullanıcılarına haklar vermek için
kullanılan komuttur (insert, delete,
update, select)
örnek:
Grant Select,delete (yetkiler)
on KIMLIK, GOREV(tablolar)
to GULCAY,EMEL (kullanıcılar)
Gülcay KORKMAZ Yazılım Uzmanı & BT Eğitmeni Web: http://www.egitimde-bilisim.com
8
GULCAY ve EMEL kullanıcılarına KIMLIK
ve GOREV tabloları üzerinde select ve
delete yetkileri verildi.)
- Veri Tanımlama (Data
Definition) Komutları - DDL:
create: Veri tabanında nesneler oluşturmak için
kullanılan komuttur (örnek: TABLE, VIEW,gibi)
ÖRNEK1: Create table ILLER_YEDEK (IL_KODU INT,IL_ADI NVARCHAR(25))tablo oluşturuldu INSERT INTO ILLER_YEDEK(IL_KODU_Y,IL_ADI_Y) SELECT IL_KODU,IL_ADI FROM ILLER ILLER tablosunun tüm verileri bu tabloya aktarıldı ÖRNEK2: CREATE VIEW KUCUK_ILLER AS SELECT IL_KODU,IL_ADI FROM ILLER WHERE IL_KODU<11
Drop: Veri tabanı nesnesi silme komutudur.
( örnek: drop table KIMLIK)
alter: Tablo adı değiştirmek, Tablolarda sütun
adı değiştirmek, sütun eklemek,alan veri tipini
değiştirmek ya da sütun silmek için kullanılan
komuttur.
Gülcay KORKMAZ Yazılım Uzmanı & BT Eğitmeni Web: http://www.egitimde-bilisim.com
9
Sütun adı silmek (oracle-Mssql)
ALTER TABLE ILCELER DROP column
ILCE_NUFUSU
Sütun eklemek (oracle-Mssql)
ALTER TABLE ILCELER ADD KURULUS_TAR
DATE;
Sütun adını değiştirmek (oracle)
ALTER TABLE ILCELER RENAME COLUMN
ILCE_ADI TO ILCEAD;
Mssql de
EXEC sp_rename 'ILCELER.[ILCE_ADI]',ILCE_ADI2 ,'COLUMN';
Veri tipini değiştirmek
ALTER TABLE ILCELER MODIFY ILCE_ADI
VARCHAR2(20);
Mssql de
Örnek1: ILCE_ADI alanının veri tipini
değiştirdik
ALTER TABLE ILCELER
ALTER COLUMN ILCE_ADI VARCHAR(20);
Gülcay KORKMAZ Yazılım Uzmanı & BT Eğitmeni Web: http://www.egitimde-bilisim.com
10
Örnek2: ILCELER tablosundaki ILCE_IL_KODU alanın boş
olabilirlik özelliğin kaldırdık ALTER TABLE ILCELER
ALTER COLUMN ILCE_IL_KODU smallint NOT NULL;
Tablo adı değiştirmek(Oracle)
ALTER TABLE ILCELER RENAME TO ILCE;
Mssql de
EXEC SP_RENAME �ILCELER, �ILCE2 ;
Tabloya Primary Key eklemek(oracle-Mssql)
ALTER TABLE ILLER ADD PRIMARY KEY (IL_KODU) Tabloya index eklemek
Veritabınında saklanan verilerin sayısı arttıkça performansta
düşüklüğe neden olur. Dağınık bir yapıda olan verilerde
istenilen veriyi aramak için tablo taraması işlemi yapılır. Bu
işlemi küçük boyutlu bir tabloda yapmak kolaydır. Artan veri
miktarına göre ise bu işlem vakit kaybettirir. Veriye erişim hızını
arttırmak için bu yöntem kullanılır.
ÖRNEK:
ILLER tablosunun IL_ADI alanına index eklemek
ORACLE:
Alter Table ILLER Add index Indexiladi (IL_ADI) ;
Gülcay KORKMAZ Yazılım Uzmanı & BT Eğitmeni Web: http://www.egitimde-bilisim.com
11
MSSQL :
CREATE INDEX [indexiladi] ON ILLER ( IL_ADI ASC ); İndexi silmek:
DROP INDEX [indexiladi] ON ILLER;
Birden fazla alanda index uygulama:
CREATE INDEX [indexiller] ON ILLER
(
[IL_KODU],[IL_ADI]
)
NOT: Bir tabloda PK olan alan da zaten doğal olarak
Clustered(Kümelenmiş) indextir.
SELECT CÜMLELERİ
SELECT KURALLARI
Select cümlesinde, select ve from komutları arasına listelenecek sütun adları yazılır (bu sütunlar tablolardaki alanlardır) Eğer tüm sütunlar listelenecekse * işareti konur. Alan adları arasına (,) işareti konur.
From komutundan sonra listelemede kullanılacak tablo ya da tablolar belirtilir. Tablo adları arasına (,) işareti konur.
Where komutundan sonra da sorgu için gerekli olan koşullar belirlenir. Bu koşulları sağlayan satırlar listelenir. Koşullar arasına
Gülcay KORKMAZ Yazılım Uzmanı & BT Eğitmeni Web: http://www.egitimde-bilisim.com
12
uygun şekilde AND ya da OR bağlaçları
konur.
SELECT CÜMLESİ FORMATI:
SELECT listelenecek kolonlar FROM alanları
alınacak tablolar WHERE koşullar
Örnekler:
1) SELECT * FROM VELI; VELI tablosundaki tüm alanları ve tüm satırları getir.
* tüm kolonlar
FROM Tablo göstermek için
kullanılan komut
WHERE kriter belirtmek için
kullanılan komuttur. Bu komuttaki
belirtilen kriteri taşıyan satırlar sorgu
sonucu döner.
2) SELECT * FROM VELI where VELI_TC_KIMLIK_NO<33333333333
Tc kimlik no’su 33333333333 den küçük
olan tüm kayıtları ve tüm alanları getir.
İŞLEÇLER (OPERATORS)
İşleçler WHERE cümlelerindeki koşulu sağlayan ifadeleri
karşılaştırmak için kullanılırlar
Karşılaştırma İşleçleri :
1- = Eşittir 2- > Büyüktür
3- < Küçüktür 4- >= Büyük ya da eşittir 5- <= Küçük ya da eşittir 6- <> Eşit değildir.
Gülcay KORKMAZ Yazılım Uzmanı & BT Eğitmeni Web: http://www.egitimde-bilisim.com
13
SQL İşleçleri
BETWEEN değer1 AND değer2 : iki değer arasında. (örnek: select * from KIMLIK where NUFUS_ILI between 50 and 80; nüfus ili 50 ile 80 arasında olan öğrencilerin tüm bilgilerini alır)
IN : Ardışık olmayan değerleri içerir. (örnek: select * from KIMLIK where NUFUS_ILI in(1,10,34,81)) nüfus ili 1,10,34,ve 81 olan öğrencilerin tüm bilgilerini alır)
NOT IN : Belirtilen değerleri içermeyen kayıtları alır. . (örnek: select * from KIMLIK where NUFUS_ILI not in(1,10,34,81)
nüfus ili 1,10,34,ve 81 olmayan öğrencilerin tüm bilgilerini alır)
LIKE: Metin veri içeren alanlarda içerir anlamında kullanılan işleçtir. (örnek :mssql ve oracle standardı: select * from KIMLIK where ADI like ‘%ALİ%’
access standardı select * from KIMLIK where ADI like '*ALİ*'; adının içinde ALİ geçen tüm öğrencileri listeler.)
NOT LIKE : Metin veri içeren alanlarda içermez anlamında kullanılan işleçtir.
(örnek :sql standardı: select * from KIMLIK where ADI not
like ‘%ALİ%’ – Microsoft standardı select * from KIMLIK
where ADI not like '*ALİ*'; adının içinde ALİ geçmeyen
tüm öğrencileri listeler.)
IS NULL : Belirtilen alanda boş değer içerenleri alır (örnek: select * from KIMLIK where ANA_ADI is null ANA_ADI alanında veri olmayan tüm öğrencileri listeler.)
IS NOT NULL : Belirtilen alanda boş değer içermeyenleri alır (örnek: select * from KIMLIK where ANA_ADI is not null ANA_ADI alanında boş veri olmayan tüm öğrencileri listeler.) LOWER (access'de:lcase): Karakterleri küçük harfe çevirir (örnek: select lower(SBD_DERSADI) as ders,sbd_derskodu
from sb_dersler dersler tablosundaki ders adı alanındaki değerleri küçük harfe çevirir. UPPER(access'de:ucase) : Karakterleri büyük harfe çevirir
Gülcay KORKMAZ Yazılım Uzmanı & BT Eğitmeni Web: http://www.egitimde-bilisim.com
14
(örnek: select upper(SBD_DERSADI) as ders,sbd_derskodu
from sb_dersler dersler tablosundaki ders adı alanındaki değerleri büyük harfe çevirir.
LENGHT (access'de ve Mssql’de LEN) Karakter alanların uzunluklarını verir. (örnek: select LEN(ADI) as adi ,SOYADI from KIMLIK kimlik tablosundaki adi alanındaki verilerin karakter uzunluklarını verir) Not: DATALENGTH komutu ise o alanın max karakter uzunluğunu verir.
NVL(access'de NZ,Mssql’de COALESCE,ISNULL YA DA IIF): Alanda değer olmadığında listeye gelmesi istenen değeri atamak için kullanılır.
Örnek(orc) :SELECT VELI_ADI,VELI_TC_NO,
NVL(VELI_TEL_NO,’Değer Yok’) AS TELEFON FROM VELI
Örnek:(mssql): select COALESCE (ANA_ADI,'Değer yok') as ANNEAD from KIMLIK
select ISNULL(ANA_ADI,'Değer yok') as ANNEAD from KIMLIK
select IIF(bd_aciklama<>'',bd_aciklama,'Değer yok') as aciklama from SAYISTAY_YEVMIYE2;
RPAD-LPAD: Özellikle sql sonucu bir txt dokümana
aktarılacaksa listenin kolonlarındaki veriler ç içe geçmiş olabilir.
Bunu önlemek için her alanın sağında ya da solunda bu
fonksiyonlarla belirli karakterlerle tamamlama yapılır.
Örnek (oracle):
Rpad (NVL(borc,'0'),10) brc from SAYISTAY_YEVMIYE2 Örnek(Mssql):
Gülcay KORKMAZ Yazılım Uzmanı & BT Eğitmeni Web: http://www.egitimde-bilisim.com
15
select right(replicate('0',10)+cast(borc as varchar(15)),10) aS brc from SAYISTAY_YEVMIYE2
DISTINCT: Bir tabloda aynı kayıttan tekrar eden satırları tek satır olarak alır.(örnek: SELECT DISTINCT (TC_KIMLIK) FROM OGRENCI_DERSLERI öğrenci dersleri tablosunda bir öğenciye ait tekrar eden satırları teke indirir ve her öğrenci için tek satır getirir. TO_CHAR(Access'te FORMAT): Sayı veya tarih değeri karakter dizesini (format varsa, o formatta) çevirir (örnek:
select TO_CHAR('10/10/2000','yyyy');ÖRNEK: SELECT ADI,SOYADI,2007- TO_CHAR(DOGUM_TARIHI,'YYYY') AS YASI FROM KIMLIK Tüm öğrencilerin yaşlarını hesaplar)
Sql server da : select TC_NO,ADI,SOYADI,CONVERT(VARCHAR,DOGUM_TARIHI, 103) as tar FROM KIMLIK Tarihsel alan verisini gün-ay-yıl olarak verir YA DA SELECT ADI,SOYADI,2017-DATEPART(YEAR,DOGUM_TARIHI) FROM KIMLIK DOGUM_TARIHI verisinden yıl kısmını alır, bu günkü yıldan çıkarır YA DA SELECT ADI,SOYADI,DATEPART(YEAR,GETDATE())-DATEPART(YEAR,DOGUM_TARIHI) FROM KIMLIK Cast, CONVERT, CONCAT,IIF, replace,LEFT,RIGHT,LEFT komutu: Örnek1:
SELECT CAST(TC_NO AS NVARCHAR(12)) + ' - ' + ADI + ' ' + SOYADI AS "Kimlik Bilgileri" FROM KIMLIK ---- SELECT CONVERT(NVARCHAR(12), TC_NO)
Gülcay KORKMAZ Yazılım Uzmanı & BT Eğitmeni Web: http://www.egitimde-bilisim.com
16
+ ' - ' + ADI + ' ' + SOYADI AS "Kimlik Bilgileri" FROM KIMLIK Örnek2:
select CAST(right(KURUM_KODU,2)AS INT)+'22' AS KK FROM KURUMLAR Birleştirilen alanların birinde veri yoksa o satır boş gelir bunu önlemek için CONCAT parametresi kullanılır. Örnek3:
SELECT TC_NO,CONCAT(ADI,' ',SOYADI,' ',ANA_ADI) AS ANNE FROM KIMLIK Verileri bir şarta göre değiştirmek Örnek4:
SELECT TC_NO,ADI,SOYADI, IIF(CINSIYETI=0,'KIZ','ERKEK') AS CINS FROM KIMLIK Veri alanı içinde boşluk atmak ya da herhangi bir karakteri başka bir karakterle değiştirmek Örnek5:
update SAYISTAY_YEVMIYE2 set yvm_n =replace(yvm_n,'_','') yvm_n alanı içindeki _ çizgi kaldırıldı örnek6: select kurum_ad,kurum_kod,replace(yvm_n,'_','') as yvm from SAYISTAY_YEVMIYE2
Gülcay KORKMAZ Yazılım Uzmanı & BT Eğitmeni Web: http://www.egitimde-bilisim.com
17
REPLICATE : verilen karekter ve adet kadar karekteri stringe ilave eder Örnek: SELECT LEFT(KURUM_ADI,2)+ REPLICATE('*' , 4) AS KK FROM KURUMLAR KURUM_ADI alanının soldan iki karakterini al, 4 tane * ekle
LTRIM,RTRIM,TRIM:Text tipi veri içeren alanlarda soldaki,sağdaki ve hem başında, hem sonundaki boşlukları atar ÖRNEK: select TC_NO,LTRIM(ADI) AS AD,SOYADI FROM KIMLIK
SPACE: Text tipi veri içeren alanların sonuna belirtilen sayı kadar boşluk verir. ÖRNEK: SELECT CAST(KURUM_KODU AS varchar(6))+space(3) as KK FROM KURUMLAR;
REVERSE: Belirtilen alandaki text ifadeyi tersten alır. ÖRNEK:
select TC_NO,reverse(ADI) AS AD,SOYADI FROM KIMLIK;
REPLECE:Belirtilen metin içinde bir karakteri bulur, verilen karakterle değiştirir. Örnek: SUBSTRING: Metin içerisinde belirtilen karakterden başlayıp, yine belirtilen karakter kadarını alır.
Gülcay KORKMAZ Yazılım Uzmanı & BT Eğitmeni Web: http://www.egitimde-bilisim.com
18
Örnek: select substring(mhs_brm_ad,7,3) as ad from SAYISTAY_YEVMIYE2;
TO_NUMBER(Access de CInt): karakter dizisini sayıya çevirir. (örnek: select 2007-TO_NUMBER(TO_CHAR(DT,'YYYY')
as yas from KIMLIK) DT alanındaki doğum tarihi verisinin
sadece yıl olan bölümü string olarak alındı, yıl sayıya çevrilip bu
yıldan çıkarılarak yaş bulundu.)
Mssql server da:
select ADI,SOYADI, CONVERT(INT,(DATEPART(YEAR,DOGUM_TARIHI))) AS YIL FROM KIMLIK
TO_DATE: Tarih içeren string bir alandaki değeri tarih tipine çevirmek için kullanılır. (örnek: select TO_CHAR(TO_DATE(DT),'DD-MM-YYYY')
Mssql de: select TC_NO,ADI,SOYADI,CONVERT(DATE,DOGUM_TARIHI) as tar FROM KIMLIK
ALIAS(Takma Ad): SQL cümlesinde yazılan alanlara (SELECT değiminden sonra) ya da tablo adlarına (FROM değiminden sonra) gerektiği durumlarda ALIAS-takma ad (değişken adı) verilebilir. Alias'ın zorunlu olduğu zamanlar:
a. Bir tablo bir sorguda birden fazla kullanılıyorsa b. Sorgu içinde kullanılan farklı tablolardan, aynı adı taşıyan
alanlar kullanılıyorsa
c. SELECT ifadesi içinde bir işlem yapılmışsa işlem yapılan alana
Gülcay KORKMAZ Yazılım Uzmanı & BT Eğitmeni Web: http://www.egitimde-bilisim.com
19
BİLEŞKE (JOIN) İŞLEMLERİ
Bileşkeler birden fazla tablodan veri almak için kullanılır.
Çeşitleri:
1-Farklı Tabloya Bileşke-Basit Bileşke (simple join): İki farklı
tablo arasında aynı tür verileri taşıyan alanlar arasındaki
bileşkelerdir. (örnek:
1) SELECT VELI_TC_KIMLIK_NO, VELI_ADI_SOYADI, ADI, SOYADI FROM VELI, KIMLIK WHERE TC_NO=OGR_TC_KIMLIK_NO KIMLIK ve VELI tabloları
arasında ortak olan Öğrenci T.C. no alanlarında ilişki (join) kurarak belirtilen veri alanlarındaki verileri listeletir.)
2) SELECT TC_NO,ADI,SOYADI,DERS_ADI,NOT1,NOT2,ODEV,SOZLU
FROM KIMLIK,DERSLER,OGRENCI_DERSLERI
WHERE TC_NO=TC_KIMLIK AND DERS_KODU=DERSI AND
CINSIYETI=1
Cinsiyeti kız olan öğrencilerin ders adlarıyla birlikte notlarını
listeletir.
3) SELECT TC_NO,ADI,SOYADI,VELI_ADI_SOYADI,
MESLEK_ADI
FROM KIMLIK,VELI,MESLEKLER
WHERE TC_NO=OGR_TC_KIMLIK_NO
AND VELI_ISI=MESLEK_KODU
AND CINSIYETI=0 Cinsiyeti erkek olan öğrencilerin T.C.
no, adı, soyadı, veli adı ve veli mesleklerini listeleten sorgu
Gülcay KORKMAZ Yazılım Uzmanı & BT Eğitmeni Web: http://www.egitimde-bilisim.com
20
2- Dış Bileşke (Outer join): Bileşke yapılırken bileşke
koşulundaki bazı sütunlarda değer bulunmayabilir (NULL değer
bulunur). Eşitlik bileşkeleri NULL değer bulunan sütunları
birleştirmediğinden, o kayıtlar eşitlik bileşkesi sorgularında
görünmez. Bu işlem için dış bileşkeler kullanılmalıdır. Dış
bileşke işleci (+) 'dır. (+) işareti bileşke yapılacak değeri
içermeyen sütunun tarafına konur. (örnek: select
TC_NO,ADI,SOYADI,IL_ADI from KIMLIK,ILLER where
IL_KODU= NUFUS_ILI(+) KIMLIK tablosunda NUFUS_ILI boş
olan satırların da listeye gelmesi için bileşkede (join) veri
olmayan alan adından sonra (+)=outer join kullanıldı)
NOT: ACCESS'de kullanımı: SELECT TC_NO, ADI, SOYADI,
IL_ADI
FROM KIMLIK LEFT JOIN ILLER ON
ILLER.IL_KODU=KIMLIK.NUFUS_ILI KIMLIK tablosunda Nufus
il boş olan kayıtları da listeye getirir) Bu dizilimde değer
olmayan tablo hangi taraftaysa "join" komutunun başında o yön
belirtilir. (örnek: KIMLIK tablosunda değer yok, ILLER
tablosundan önce dizilime alınacaksa LEFT, sonra alınacaksa
RIGHT değimi kullanılır.)
MSSQL SERVER DA DIŞ BİLEŞKE
SELECT * FROM TABLO2
EXCEPT
SELECT * FROM TABLO1
Tablo2 de olup, tablo1 de olmayanlar
SELECT * FROM TABLO1
INTERSECT
SELECT * FROM TABLO2
Hem tablo1 de hem de Tabl2 de olanlar
Gülcay KORKMAZ Yazılım Uzmanı & BT Eğitmeni Web: http://www.egitimde-bilisim.com
21
VERİNİN GRUPLANDIRILMASI
SELECT komutuyla getirilecek olan veri belirli özelliklere
göre gruplanabilir. Bunun için SELECT komutuna GROUP BY
ifadesi eklenir. GROUP BY cümlesindeki grup ifadesi kayıtları
daha küçük kümelere böler.
NOT:
1) Select ifadesinden sonra kullanılan tüm alanlar group by
ifadesinde kullanılmalıdır ( group by fonksiyonları hariç)
2) Group By kullanılan sorgularda her zaman group by
fonsiyonları select ifadesinde en sonda olmalıdır.
Grup By Fonksiyonları
AVG Değerlerin ortalamasını alır (örnek: SELECT KK,
INT(AVG(KIZ_OGR_SAY)) AS KIZ_ORT,
INT(AVG(ERKEK_OGR_SAY)) AS ERK_ORT FROM
OGRENCI_SAYILARI
GROUP BY KK Kız ve erkek öğrenci sayılarının kurum koduna
göre gruplandırarak ortalamalarını aldırır.)
COUNT Kayıtların sayısını alır.(örnek: SELECT
ELEMAN_ADI,COUNT(TC_NO) AS SAYI
FROM KIMLIK, SOZLUK_TABLOSU WHERE
ELEMAN_KODU=CINSIYETI AND TABLO_KODU=2
GROUP BY ELEMAN_ADI KIMLIK tablosundaki öğrenci
sayılarını cinsiyetler bazında aldık)
NOT: Tablo içinde saydırma işlemi, kesin sonuç alabilmek için o
tablonun PK (birincil anahtar) alanında yapılmalıdır.
MAX İfadenin aldığı maksimum değeri verir
Gülcay KORKMAZ Yazılım Uzmanı & BT Eğitmeni Web: http://www.egitimde-bilisim.com
22
MIN İfadenin aldığı minimum değeri verir
SUM İfadenin aldığı değerlerin toplamını verir
(örnek:SELECT KK,
SUM(KIZ_OGR_SAY)+SUM(ERKEK_OGR_SAY) AS OGR_SAY
FROM OGRENCI_SAYILARI
GROUP BY KK Kurum koduna göre toplam öğrenci sayılarını
verir)
VERİNİN SIRALANMASI
Listesi alınan verilerin istenen alanlarda sıralanması
mümkündür. Bunun için ORDER BY ifadesi kullanılır. (örnek:
select * from KIMLIK order by ADI KIMLIK tablosundaki tüm
kayıtları ADI alanına göre sıralayarak listeler)
Sıralama Fonksiyonları
ASC A'dan Z'ye ya da küçükten büyüğe (ÖRNEK: SELECT *
FROM KIMLIK ORDER BY ADI ASC KIMLIK tablosunu ADI
alanına göre A'dan Z'ye sıralar)
DESC Z'den A'ya ya da büyükten küçüğe sıralama.(örnek:
SELECT * FROM KIMLIK ORDER BY ADI desc KIMLIK
tablosunu ADI alanını Z'den A'ya göre sıraladı.)
Not: Order by ifadesi default olarak verileri ASC (Küçükten
büyüğe doğru) olarak sıralar.
Recommended