Veri tabanı (database) Nedir? : İçinde bulunan nesneleri vasıtasıyla

advertisement
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
1
- 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
2
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
3
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
4
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
5
Values  standart komut dizesi
(81,’DÜZCE’) alanlara aktarılacak
değerleriller 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
6
 ı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
7
 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
8
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
9
Ö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
Gülcay KORKMAZ
Yazılım Uzmanı & BT Eğitmeni
Web: http://www.egitimde-bilisim.com
10
Indexiladi (IL_ADI)
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
11
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
12
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
13
(ö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')
KIMLIK
select ISNULL(ANA_ADI,'Değer yok')
KIMLIK
as ANNEAD from
as ANNEAD from
select IIF(bd_aciklama<>'',bd_aciklama,'Değer yok')
aciklama from SAYISTAY_YEVMIYE2;
as
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
14
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
15
+ ' - ' + 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
16
REPLICATE : verilen karekter ve adet kadar
karekteri stringe ilave eder
Örnek:
SELECT LEFT(KURUM_ADI,2)+ REPLICATE('*' , 4)
FROM KURUMLAR  KURUM_ADI alanının soldan iki
AS KK
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
17
Ö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
18
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,SOZL
U
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
19
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
20
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
21
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.
Gülcay KORKMAZ
Yazılım Uzmanı & BT Eğitmeni
Web: http://www.egitimde-bilisim.com
22
Download