SUNGURLU MESLEK YÜKSEKOKULU BİLGİSAYAR TEKNOLOJİLERİ/BİLGİSAYAR PROGRAMCILIĞI 2017-2018 GÜZ DÖNEMİ VERİ TABANI YÖNETİM SİSTEMLERİ-II 5. T-SQL Öğr. Gör. Saliha Kevser KAVUNCU 1. TRANSACT SQL KAVRAMI Microsoft'un veri tabanı sorgulama dilidir. Transact-SQL, SQL Server ve istemci(client) arasında iletişimi sağlayan SQL sorgulama dilinin gelişmiş bir versiyonudur. Transact Structured Query Language kelimelerinin kısaltmasıdır. Sungurlu Meslek Yüksekokulu Sql Üç Alt Grupta İncelenir: 1. DDL (Data Definition Language): Veri tabanı üzerinde nesne tanımlama amaçlı kullanılır. CREATE nesne_adi ALTER nesne_adi DROP nesne_adi Sql Üç Alt Grupta İncelenir: 2. DML (Data Manipulation Language) Veri tabanı içindeki verileri sorgulamak ve üzerlerinde işlem yapabilmek amacıyla kullanılır. SELECT INSERT UPDATE DELETE Sql Üç Alt Grupta İncelenir: 2. DML (Data Manipulation Language) Veri tabanı içindeki verileri sorgulamak ve üzerlerinde işlem yapabilmek amacıyla kullanılır. SELECT INSERT UPDATE DELETE Sql Üç Alt Grupta İncelenir: 2. DCL (Data Control Language) İşlem izinleri ve yasakları gibi işlemleri yapmak için kullanılır. GRANT DENY REVOKE Sql Üç Alt Grupta İncelenir: 2. DCL (Data Control Language) İşlem izinleri ve yasakları gibi işlemleri yapmak için kullanılır. GRANT DENY REVOKE Nesne ve Tanımlayıcı İsimlendirme Tipleri i. En çok kullanılan özetlenmektedir. ii. Pascal Case: Kelimelerin ilk harfleri büyük diğerleri küçük yazılır. Örneğin AdSoyad, EvTel, CepTel, OgrenciNo vb. standartlar aşağıda iii. Camel Case: Birinci kelimelerin ilk harfi hariç diğer kelimelerin ilk harfleri büyük, diğerleri küçük yazılır. Örneğin adSoyad, evTel, cepTelNo vb. iv. Upper Case: Kelimelerin tüm harfleri büyük yazılır. Örneğin ADSOYAD, EVTEL, UCGENALAN vb. v. Underscore Case: Kelimelerin arasına alt çizgi yazılır. Örneğin, Ad_Soyad, Ev_Tel, Cep_tel_No vb. Nesne ve Tanımlayıcı İsimlendirme Kuralları i. İngiliz alfabesindeki A-Z veya a-z arası 26 harf kullanılabilir. ii. 0-9 arası rakamlar kullanılabilir. Simgelerden sadece alt çizgi (_) kullanılabilir. iii. Tanımlayıcılar, harf veya alt çizgi ile başlayabilir. Ancak rakamla başlayamaz veya sadece rakamlardan oluşamaz. iv. Tanımlayıcı, ilgili programlama dilinin komutu veya anahtar kelimesi olamaz. v. Bir tanımlayıcı özel anlamları olan @, @@, #, ##, $ ile başlamamalıdır. Bu karakterlerden @ değişkenlerin başına gelir. @@ sistem ortam değerleri fonksiyonların başına gelir. # ise geçici nesne belirteci olarak kullanılır. vi. Kelimeler arası boşluk yer almamalıdır. vii. Select, Not, Desc… gibi kelimeler kullanılamaz. 1. CREATE Veri tabanındaki nesnelerin oluşturulabilmesi için CREATE komutu kullanılır. Oluşturulacak nesnenin özellikleri dikkate alınarak farklı parametreler kullanılmalıdır. 1.a. Create- Veritabanı Oluşturma 1.a. Create- Veritabanı Oluşturma CREATE DATABASE SQLEgitim ON PRIMARY ( NAME = SQLEgitim_DATA, FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\SQLEgitim.mdf', SIZE = 8MB, MAXSIZE = UNLIMITED, FILEGROWTH = 10% ) LOG ON ( NAME = SQLEgitim_LOG, FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\SQLEgitim_log.ldf', SIZE = 8MB, MAXSIZE = UNLIMITED, FILEGROWTH = 10% ) 1.a. Create- Veritabanı Oluşturma “CREATE DATABASE SQLEgitim” ifadesi ile Sungurlu isminde bir veritabanı oluşturacağımızı belirttik. PRIMARY ise birincil dosyada oluşturduğumuzu belirtmiş oluyoruz. PRIMARY belirtilmemişse, CREATE DATABASE deyiminde listelenen ilk dosya birincil dosya olur. 1.a. Create- Veritabanı Oluşturma NAME: SQL Server veritabanımıza başvurduğunda bu ismi kullanır. İsim uniqe(benzersiz) olmak zorundadır. FILENAME: Veritabanımızın kaydedileceği yolu belirttiğimiz yerdir. Eğer belirttiğin klasör yok ise önceden oluşturmanız gerekiyor. SIZE: Veritabanınızın ilk boyutu MAXSIZE: Veritabanınızın en fazla ulaşabileceği boyut FILEGROWTH: Yeterli boşluk kalmadığında veritabanınızın genişleme miktarı 1.a. Create- Veritabanı Oluşturma LOG NAME: Log dosyanızın SQL Server başvurduğunda kullanacağı isim. Uniqe olmak zorundadır. FILENAME: Log dosyanızın kaydedileceği yolu belirtiğimiz yerdir. SIZE: Log dosyanızın ilk boyutu MAXSIZE: Log dosyanızın en fazla ulaşabileceği boyut FILEGROWTH: Yeterli boşluk kalmadığında log dosyanızın genişleme miktarı 1.a. Create- Veritabanı Oluşturma LOG NAME: Log dosyanızın SQL Server başvurduğunda kullanacağı isim. Uniqe olmak zorundadır. FILENAME: Log dosyanızın kaydedileceği yolu belirtiğimiz yerdir. SIZE: Log dosyanızın ilk boyutu MAXSIZE: Log dosyanızın en fazla ulaşabileceği boyut FILEGROWTH: Yeterli boşluk kalmadığında log dosyanızın genişleme miktarı 1.b. Creat- Tablo Oluşturma CREATE TABLE ifadesi ile var olan veritabanımıza yeni bir tablo oluşturulur. Bu işlemi yapabilmek için mevcut kullanıcımızın tablo oluşturma yetkisine sahip olması gerekmektedir. Create Table Kullanım Biçimi: CREATE TABLE ( alan_adi1 veri_tipi(boyut), alan_adi2 veri_tipi(boyut), alan_adi3 veri_tipi(boyut), .... ) 1.b. Creat- Tablo Oluşturma Bu kod ile id isminde bir sayısal alan, boşluklar dahil olmak üzere numara ve harften oluşan 25 karakterli adi_soyadi, 15 karakterli sehir ve bolum ile medeni_durum adında bolean yani "evet-hayır", "var-yok", "1-0" gibi sadece iki seçenekli bir alan tanımlanıyor. Oluşan tabloda herhangi bir kayıt olamayacaktır. SQL PRIMARY KEY Kullanımı: PRIMARY KEY ile tablomuzdaki ilgili alanda benzersiz kayıtların tutulmasını istediğimiz durumlarda kullanılır. Yapısal olarak UNIQUE ile karıştırılabilir. Aradaki farkları sıralayacak olursak: - Birden fazla alan tek bir PRIMARY KEY ile tanımlanabilir. Ancak PRIMARY KEY yapısı her tabloda sadece bir tane olabilir. UNIQUE yapısı bir tabloda birden fazla olabilir. - PRIMARY KEY yapısı ile boş kayıtlara izin verilmez. UNIQUE yapısında boş kayıtlara izi n verilir. - PRIMARY KEY yapısı ile tablo üzerinde bir index tanımı oluşturulur her kaydın benzersiz bir tanımı yapılır. Böylece kullandığınız uygulama geliştirme ortamında (Ör: .NET) tablo üzerinde daha etkin sonuçlar elde edilebilir. UNIQUE yapısında ise alandaki değerlerin benzersiz olup olmadığına bakılır. Birden fazla alanda UNIQUE yapıldığında bunları bir index adıyla tanımlanmaı sağlaabilir ancak bu sadece bir tanımladır.) SQL PRIMARY KEY Kullanımı: PRIMARY KEY Kullanım Biçimi CREATE TABLE Personel ( id int NOT NULL PRIMARY KEY, adi_soyadi varchar(20) , Sehir varchar(20) ) PRIMARY KEY Kullanım Biçimi Birden fazla alanda kullanım biçimine örnek: CREATE TABLE Personel ( id int NOT NULL, adi_soyadi varchar(20) NOT NULL , Sehir varchar(20), CONSTRAINT id_no PRIMARY KEY (id,adi_soyadi) ) *Burada görüleceği üzere birden fazla alan PRIMARY KEY yapısı içine alınıyor. CONSTRAINT ifadesi ile bu işleme bir tanım giriliyor. Aslında bu tanım bizim tablomuzun index alanını oluşturmaktadır. İndexleme sayesinde tablomuzdaki verilerin bütülüğü daha sağlam olurken aramalarda da daha hızlı sonuçlar elde ederiz. Ayrıca kullandığınz uygulama geliştirme ortamlarında (ör .Net) tablo üzerinde daha etkin kullanım imkanınız olacaktır. PRIMARY KEY ifadesinden sonra ise ilgili alanları virgül ile ayırarak yazarız. SQL UNIQUE Kullanımı: Tablomuzda bir alandaki verilerin tekrarlı olmasını istemiyorsak UNIQUE kriterini kullanmamız gerekir. Tablo tasarımını yaparken bir alanın UNIQUE olup olmayacağına iyi karar vermemiz gerekir. Çünkü daha sonradan ALTER komutu ile alanın özelliklerini değiştirirken, ilgili alanda tekrarlayan kayıtlar varsa UNIQUE değerini veremeyiz. PRIMARY KEY ile çokça karıştırılmaktadır. Aradaki farkları sıralayacak olursak: Birden fazla alan tek bir PRIMARY KEY ile tanımlanabilir. Ancak *PRIMARY KEY yapısı her tabloda sadece bir tane olabilir. UNIQUE yapısı bir tabloda birden fazla olabilir. *PRIMARY KEY yapısı ile boş kayıtlara izin verilmez. UNIQUE yapısında boş kayıtlara izi n verilir. *PRIMARY KEY yapısı ile tablo üzerinde bir index tanımı oluşturulur Her kaydın benzersiz bir tanımı yapılır. Böylece kullandığınız uygulama geliştirme ortamında (Ör: .NET) tablo üzerinde daha etkin sonuçlar elde edilebilir. UNIQUE yapısında ise alandaki değerlerin benzersiz olup olmadığına bakılır. Birden fazla alanda UNIQUE yapıldığında bunları bir index adıyla tanımlanmaı sağlanabilir ancak bu sadece bir tanımladır. UNIQUE Kullanım Biçimi: Örnek 1: CREATE TABLE Personel ( id int NOT NULL UNIQUE, adi_soyadi varchar(20) , Sehir varchar(20) ) Örnek 2: CREATE TABLE Personel ( id int NOT NULL, adi_soyadi varchar(20) NOT NULL , Sehir varchar(20), CONSTRAINT id_no UNIQUE (id,adi_soyadi) ) SQL NOT NULL Kullanımı: Tablomuza kayıt girerken NOT NULL kriteri ile belirleyeceğimiz alan veya alanların boş geçilmesini engelleyebiliriz. NOT NULL kriteri tabloyu ilk defa oluştururken belirlenebileceği gibi daha sonra ALTER yapısı ile de belirleyeceğmiz alanlara NOT NULL kriterini verebiliriz. Örnek: Create Table (id int NOT NULL, adi_soyadi varchar(20), Meslek varchar(10) ) Yuklarıdaki örnekte, id numarası alanının boş geçilmemesi gerektiği için sadece id alanını NOT NULL kriteri ile yapıladırılmıştır. SQL IDENTITY Kullanımı Tablomuza her kayıt eklendiğinde bir alanda bulunan değerin benzersiz olmasını ve otomatik olarak artmasını isteyebiliriz. Daha çok kayıtlarımız için bir id numarası alanı kullanıyorsak, IDENTITY (n,m) kullanılır. Sadece sayısal alalarda kullanılır. SQL Server tarafında IDENTITY kelimesi kullanılır. Parantezin içindeki birinci rakam başlama değerini, ikinci rakam ise artış miktarını belirler. CREATE TABLE Personel ( id int IDENTITY(1,1) PRIMARY KEY, adi varchar(10), soyadi varchar(10= ) Bu örnekte ilk numara 1 'den başlayacaktır ve her kayıt eklendiğinde id alanı bir numara artacaktır. Eğer ilk kayıt numarasını 50'den başlamasını ve 5 farkla eklenmesini istersek IDENTITY(50,5) yazmamız yeterli olacaktır. SQL FOREIGN KEY Kullanımı Temel olrak FOREIGN KEY yardımcı index oluşturmak için kullanılır. Bir tabloda "id" alanına PRIMARY KEY uygulayabiliriz. Ancak aynı tablodaki başka bir alan farklı bir tablodaki kayda bağlı çalışabilir. MS Access veritabanlarında bu duruma "İlişkili Veritabanı" deniliyor. İşte bu iki tablo arasında bir bağ kurmak gerektiği durumlarda FOREIGN KEY devreye giriyor. Böylece tablolar arası veri akışı daha hızlı olduğu gibi ileride artan kayıt sayısı sonucu veri bozulmalarının önüne geçilmiş olunur. SQL FOREIGN KEY Kullanımı Burada Personel tablomuzdaki "p_id" alanı ve Satışlar tablomuzdaki "s_id" alanları Primary Key ile indexlenmiştir. Ancak Satışlar tablosunda, ilgili satış işleminin hangi personel tarafından yapıldığı bilgisini tutan "satan_id" isimli alan vardır. Yazacağınız programda veritabanından bilgileri çekip ekrana aktaracağınız için iki tablo arasında bir ilişki vardır. Bu ilişkiyi ise Personel tablosundaki "p_id" ile Satışlar tablosundaki "satan_id" alanları belirler. Dolayısı ile "satan_id" alanına FOREIGN KEY yani ikincil index tanınlayarak aradaki veri bütünlüğünün sağlanmasını sağlarken aynı zamanda da veri akışının da hızlanmasını sağlamış oluruz. CREATE TABLE Satislar (id int NOT NULL PRIMARY KEY, Urun varchar(20) , Satis_fiyati varchar(20), satan_id int FOREIGN KEY References Personel(id) ) FOREIGN KEY tanımlaması yapılırken hangi tablodaki hangi alanla ilişkili oldğunu REFERENCES ifadesinden sonra yazmak gerekir. 2. ALTER Tablomuzda bulunan bir alanı silebilir, adını veya tipini değiştirebilir veya yeni bir alan ekleyebiliriz. Bu işlemler için ALTER TABLE kullanılmaktadır. 2.a. Alter-Alan Ekleme ALTER TABLE tablo_adi ADD alan_adi veri_tipi Uygulama: *ALTER TABLE Personel ADD Dogum_tarihi year *ALTER TABLE Personel ADD PRIMARY KEY (id) 2.a. Alter-Alan Ekleme *ALTER TABLE Personel ADD CONSTRAINT id_no PRIMARY KEY (id,adi_soyadi) *ALTER TABLE Personel ADD UNIQUE (id) *ALTER TABLE Personel ADD CONSTRAINT id_no UNIQUE (id,adi_soyadi) 2.b. Alter-Alan Silme ALTER TABLE tablo_adi DROP CLOUMN alan_adi Uygulama: ALTER TABLE Personel DROP Dogum_tarihi year TRUNCATE TABLE Kullanım Biçimi TRUNCATE TABLE tablo_adi Örnek: TRUNCATE TABLE KisiselBilgiler 3. DROP DROP yapısı ile indexler, alanlar, tablolar ve veritabanları kolaylıkla silinebilir. DELETE yapısı ile karıştırılabilir. Delete yapsında sadece bir tablomuzdaki kayıt veya vereceğimiz kritere göre kayıtları silebilir. Eğer tablomuzu veya veritabanımızı silmek istiyorsak DROP yapısını kullanmamız gerekmektedir. 3. Drop – Veri tabanı silme DROP DATABASE tablo_adi Örnek: DROP DATABASE OGRENCI 3. Drop – Tablo Silme DROP TABLE tablo_adi Örnek: DROP TABLE Bilgiler UYGULAMA OnlineKitap adında bir veri tabanı oluşturunuz. Veritabanı, DATA klasörünün içinde oluşturulmuş 03.10.2017 Klasörünün içine olacak şekilde kodlayınız. Veritabanı başlangıç, artım ve bitiş aşağıdaki gibi olmalıdır. DATA 10MB UNLIMIT 5MB LO 7MB 1000MB 3MB UYGULAMA Aşağıdaki tabloyu oluşturunuz. Uygun veri tiplerini yazınız. Primary ve Foreign Key aşağıdaki gibi olmalıdır. UYGULAMA Telefonu tek benzersiz tanımlanmalıdır (unique) Sonradan yapılacak işlemler: (Alter) *Yazar tablosuna Soyadı alanı ekleyiniz. *Kitap tablosundaki YazarNo alanı Foreign key yapınız. * Yayımcı tablosundaki adres alanını siliniz. UYGULAMA * Kitap tablosundaki Kitap No ile Adını birleştirip Kitap yapıp birincil anahtar atayınız. Tabloları tek tek siliniz. Veri tabanını siliniz.