veri tabanı (database) nedir? : İçinde bulunan...

22
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.

Upload: others

Post on 21-Feb-2020

22 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Veri tabanı (database) Nedir? : İçinde bulunan nesneleriegitimde-bilisim.com/ders_notlari/X9DD20ASQL ders notlari... · 2017-02-19 · OGRENCI_NOTLARI tablosunda da TCNO su bağlı

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.

Page 2: Veri tabanı (database) Nedir? : İçinde bulunan nesneleriegitimde-bilisim.com/ders_notlari/X9DD20ASQL ders notlari... · 2017-02-19 · OGRENCI_NOTLARI tablosunda da TCNO su bağlı

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

Page 3: Veri tabanı (database) Nedir? : İçinde bulunan nesneleriegitimde-bilisim.com/ders_notlari/X9DD20ASQL ders notlari... · 2017-02-19 · OGRENCI_NOTLARI tablosunda da TCNO su bağlı

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

Page 4: Veri tabanı (database) Nedir? : İçinde bulunan nesneleriegitimde-bilisim.com/ders_notlari/X9DD20ASQL ders notlari... · 2017-02-19 · OGRENCI_NOTLARI tablosunda da TCNO su bağlı

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:

Page 5: Veri tabanı (database) Nedir? : İçinde bulunan nesneleriegitimde-bilisim.com/ders_notlari/X9DD20ASQL ders notlari... · 2017-02-19 · OGRENCI_NOTLARI tablosunda da TCNO su bağlı

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ı

Page 6: Veri tabanı (database) Nedir? : İçinde bulunan nesneleriegitimde-bilisim.com/ders_notlari/X9DD20ASQL ders notlari... · 2017-02-19 · OGRENCI_NOTLARI tablosunda da TCNO su bağlı

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

Page 7: Veri tabanı (database) Nedir? : İçinde bulunan nesneleriegitimde-bilisim.com/ders_notlari/X9DD20ASQL ders notlari... · 2017-02-19 · OGRENCI_NOTLARI tablosunda da TCNO su bağlı

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)

Page 8: Veri tabanı (database) Nedir? : İçinde bulunan nesneleriegitimde-bilisim.com/ders_notlari/X9DD20ASQL ders notlari... · 2017-02-19 · OGRENCI_NOTLARI tablosunda da TCNO su bağlı

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.

Page 9: Veri tabanı (database) Nedir? : İçinde bulunan nesneleriegitimde-bilisim.com/ders_notlari/X9DD20ASQL ders notlari... · 2017-02-19 · OGRENCI_NOTLARI tablosunda da TCNO su bağlı

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

Page 10: Veri tabanı (database) Nedir? : İçinde bulunan nesneleriegitimde-bilisim.com/ders_notlari/X9DD20ASQL ders notlari... · 2017-02-19 · OGRENCI_NOTLARI tablosunda da TCNO su bağlı

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

Page 11: Veri tabanı (database) Nedir? : İçinde bulunan nesneleriegitimde-bilisim.com/ders_notlari/X9DD20ASQL ders notlari... · 2017-02-19 · OGRENCI_NOTLARI tablosunda da TCNO su bağlı

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

Page 12: Veri tabanı (database) Nedir? : İçinde bulunan nesneleriegitimde-bilisim.com/ders_notlari/X9DD20ASQL ders notlari... · 2017-02-19 · OGRENCI_NOTLARI tablosunda da TCNO su bağlı

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.

Page 13: Veri tabanı (database) Nedir? : İçinde bulunan nesneleriegitimde-bilisim.com/ders_notlari/X9DD20ASQL ders notlari... · 2017-02-19 · OGRENCI_NOTLARI tablosunda da TCNO su bağlı

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

Page 14: Veri tabanı (database) Nedir? : İçinde bulunan nesneleriegitimde-bilisim.com/ders_notlari/X9DD20ASQL ders notlari... · 2017-02-19 · OGRENCI_NOTLARI tablosunda da TCNO su bağlı

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

Page 15: Veri tabanı (database) Nedir? : İçinde bulunan nesneleriegitimde-bilisim.com/ders_notlari/X9DD20ASQL ders notlari... · 2017-02-19 · OGRENCI_NOTLARI tablosunda da TCNO su bağlı

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)

Page 16: Veri tabanı (database) Nedir? : İçinde bulunan nesneleriegitimde-bilisim.com/ders_notlari/X9DD20ASQL ders notlari... · 2017-02-19 · OGRENCI_NOTLARI tablosunda da TCNO su bağlı

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

Page 17: Veri tabanı (database) Nedir? : İçinde bulunan nesneleriegitimde-bilisim.com/ders_notlari/X9DD20ASQL ders notlari... · 2017-02-19 · OGRENCI_NOTLARI tablosunda da TCNO su bağlı

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.

Page 18: Veri tabanı (database) Nedir? : İçinde bulunan nesneleriegitimde-bilisim.com/ders_notlari/X9DD20ASQL ders notlari... · 2017-02-19 · OGRENCI_NOTLARI tablosunda da TCNO su bağlı

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

Page 19: Veri tabanı (database) Nedir? : İçinde bulunan nesneleriegitimde-bilisim.com/ders_notlari/X9DD20ASQL ders notlari... · 2017-02-19 · OGRENCI_NOTLARI tablosunda da TCNO su bağlı

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

Page 20: Veri tabanı (database) Nedir? : İçinde bulunan nesneleriegitimde-bilisim.com/ders_notlari/X9DD20ASQL ders notlari... · 2017-02-19 · OGRENCI_NOTLARI tablosunda da TCNO su bağlı

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

Page 21: Veri tabanı (database) Nedir? : İçinde bulunan nesneleriegitimde-bilisim.com/ders_notlari/X9DD20ASQL ders notlari... · 2017-02-19 · OGRENCI_NOTLARI tablosunda da TCNO su bağlı

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

Page 22: Veri tabanı (database) Nedir? : İçinde bulunan nesneleriegitimde-bilisim.com/ders_notlari/X9DD20ASQL ders notlari... · 2017-02-19 · OGRENCI_NOTLARI tablosunda da TCNO su bağlı

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.