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ğ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 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