-- SQL: Structured Query Language: Veritabanında sorgular üzerinden veritabanı işlemleri yapabildiğimiz dildir.
-- T-SQL: Transact Structured Query Language: Microsoft SQL Server'ın kullandığı özelleştirilmiş SQL'dir.
-- T-SQL'de yorum satırları -- ... ile ... olan yer için tek satır olarak veya /* ... */ ile ... olan yer için birden çok
-- satır şeklinde yazılır.
-- DATA DEFINITION LANGUAGE (DDL): Veritabanında veriyi sakladığımız veya kullandığımız yapıları oluşturmak, değiştirmek
-- veya silmek için kullanılır.
-- Örnek olarak database (veritabanı), table (tablo), column(sütun) ve view'ler (dinamik görünümler) için
-- DDL sorguları çalıştırılabilir.
-- DDL sorguları kullanılmadan da Microsoft SQL Server design sayfaları üzerinden veritabanı, tablo, tablolar arası ilişkiler
-- vb. işlemleri yapılabilir.
-- master: Sunucudaki veritabanlarımızın yapılarıyla ilgili verilerin saklandığı veritabanıdır.
-- İki çalıştırılan SQL sorgusu arasına go konularak mutlaka birincinin işleminin bitmesi sağlanabilir, daha sonra diğeri çalışır.
-- Yeni bir veritabanı oluşturulurken önce master veritabanı üzerinden oluşturucağımız veritabanı (Filmler) var mı kontrolü yapılır,
-- eğer varsa bu veritabanı drop database Filmler sorgusu ile silinir.
-- create database Filmler ile yeni veritabanı oluşturulur.
-- use Filmler ile Filmler veritabanının kullanılması sağlanır, sonrasında sorgular Filmler veritabanı üzerinde çalışacaktır.
-- create table Film ile yeni tablo oluşturulur. Bu tablo Yonetmen ile 1 to many, Tur ile many to many ilişkilidir.
-- primary key (birincil anahtar): Bir tablodaki her bir satırda tanımlandığı sütun için tekil veri tutulmasını sağlar.
-- identity(1, 1): identity ile bu verinin soldaki 1 değeri ile 1'den başlaması, sağdaki 1 değeri ile de birer birer artması sağlanır.
-- Eğer veritabanının bu veriyi otomatik arttırması istenmiyorsa identity(1, 1) yazmaya gerek yoktur.
-- foreign key (yabancıl anahtar): Bir tabloya ilişkili olduğu başka tablodan taşınan ve taşındığı tabloda primary key olan sütundur.
-- bigint, int, smallint, tinyint ve bit saklayabildikleri değerler bakımından büyükten küçüğe doğru tam sayı verilerinin
-- tutulması için kullanılan veri tipleridir.
-- varchar, char ve text metinsel verilerin tutulması için kullanılan veri tipleridir.
-- varchar(uzunluk) ve char(uzunluk) ile parantez içinde maksimum kaç karakter metinsel veri tutulabileceği yani uzunluk belirtilir.
-- varchar(max) ve char(max) ile SQL Server'da tanımlı olan ve versiyonlara göre değişen maksimum karakter sayısı tanımlanabilir.
-- text için max tanımlamaya gerek yoktur, bu veri tipi çok büyük metinsel verilerin tutulması için kullanılır.
-- Tutulan varchar verisinin uzunluğu girilen veriye göre değişirken char verinin uzunluğu sabittir,
-- veri girilmeyen karakterler boşluk olarak tutulur.
-- Eğer veritabanının collation'ı (verileri saklamak için kullandığı dil) Türkçe (TURKISH_CI_AS) olarak tanımlanmamışsa metinsel
-- veri tiplerinin başına n konularak (nvarchar, nchar, ntext) bu verilerin unicode karakter kümesi kullanılarak saklanması
-- sağlanır ki Türkçe veriler için bir sorun olmasın. Bu şekilde tanımlanan sütunlara veri girilirken de başına N eklenir.
-- null: Veri girişi yapılan sütunda hiç bir verinin saklanmaması için kullanılır, özel bir boş veri olarak düşünülebilir.
-- Ondalık veriler için genel olarak float veri tipi kullanılır.
-- Ondalık sayılarda tam kısım ile ondalıklı kısım özelleştirmeleri için decimal veri tipi kullanılabilir.
-- Örneğin decimal(9, 2) bize sayının nokta ile beraber 9 hane olacağını, 2 ise noktadan sonraki hane sayısını belirtir.
-- Para verisi de ondalık sayı olduğundan money veri tipi ile özelleştirilmiş ve kullanımımıza sunulmuştur.
-- Tarih verilerinde sadece tarih için date veri tipi, tarih ve saat içinse datetime veri tipi tanımlanabilir.
-- T-SQL tarih formatı: yıl-ay-gün saat:dakika:saniye.milisaniye (Örnek: 2021-09-07 17:25:50.123)
-- Metinsel olmayan yani ikilik sistemde oluşturulmuş imaj gibi veriler image, varbinary(uzunluk) veya binary(uzunluk) veri tipleriyle saklanabilir.
-- alter komutu veritabanı dahil herhangi bir veritabanı yapısının değiştirilmesi için kullanılır.
-- Örneğin database, table, column ve view'ler için kullanılabilir.
-- drop komutu veritabanı dahil herhangi bir veritabanı yapısının silinmesi için kullanılır.
-- Örneğin database, table, column ve view'ler için kullanılabilir.
use master
go
if exists (select name from sys.databases where name = 'Filmler')
begin
alter database Filmler set single_user with rollback immediate -- veritabanı bağlantısını koparmak için özel sorgu
drop database Filmler -- veritabanını silen esas sorgu
end
go
create database Filmler
go
use Filmler
go
create table Film -- Yonetmen ile 1 to many tablosu, Tur ile many to many tablosu, FilmDetay ile 1 to 1 tablosu
(
Id int primary key identity(1, 1), -- 1. primary key tanımlama yöntemi
Adi varchar(300) not null,
YapimYili char(4),
YonetmenId int null, -- null: Herhangi bir filmin yönetmeni olmayabilir, not null: Her filmin bir yönetmeni olmalıdır.
-- Yonetmen tablosundan taşındığı için foreign key'dir.
-- Eğer sütunda null verilere izin verilecekse null yazmaya gerek yoktur.
Gisesi money,
HataliSutun int -- örnek için silinecek sütun
)
create table FilmDetay -- Film ile 1 to 1 tablosu
(
FilmId int primary key,
Maliyeti decimal(9, 2) not null,
Aciklamasi varchar(MAX)
)
create table Yonetmen
(
Id int primary key identity(1, 1),
Adi varchar(50) not null,
Soyadi varchar(50) not null,
DogumTarihi date,
EmekliMi bit
)
create table Tur
(
Id int primary key identity(1, 1),
Adi varchar(1) -- örnek için düzeltilecek sütun
)
create table FilmTur -- Film ve Tur için many to many tablosu
(
FilmId int not null, -- Film tablosundan taşındığı için foreign key'dir.
TurId int not null, -- Tur tablosundan taşındığı için foreign key'dir.
constraint PK_FilmTur PRIMARY KEY (FilmId, TurId) -- 2. primary key tanımlama yöntemi,
-- burada olduğu gibi birden çok sütun primary key olarak tanımlanabilir.
)
create table Hatalitablo -- örnek için silinecek tablo
(
Id int primary key
)
alter table Tur alter column Adi varchar(25) not null -- örnek için Tur tablosundaki adi sütununun veri tipini
-- null girilemeyecek şekilde varchar(25) olarak değiştiriyoruz.
alter table Film drop column HataliSutun -- örnek için Film tablosundaki hatalı sütunu siliyoruz.
drop table Hatalitablo -- örnek için hatalı oluşturduğumuz tabloyu siliyoruz.
-- Tablolar arası ilişkiler:
-- Film ile Yonetmen arasındaki 1 to many ilişki için Film tablosuna bir foreign key constraint (kısıtlama) ekleyerek
-- bu constraint'in Film tablosundaki yonetmenid ile Yonetmen tablosundaki id sütunları için olduğunu belirtiyoruz.
alter table Film add constraint FK_Film_Yonetmen foreign key (YonetmenId) references Yonetmen(Id)
-- Dolayısıyla Film ile Yonetmen tabloları arasında 1 to many ilişki oluşturmuş oluyoruz.
-- Film ile FilmTur arasındaki 1 to many ilişki için FilmTur tablosuna bir foreign key constraint ekleyerek
-- bu constraint'in FilmTur tablosundaki filmid ile Film tablosundaki id sütunları için olduğunu belirtiyoruz.
alter table FilmTur add constraint FK_FilmTur_Film foreign key (FilmId) references Film(Id)
-- Tur ile FilmTur arasındaki 1 to many ilişki için FilmTur tablosuna bir foreign key constraint ekleyerek
-- bu constraint'in FilmTur tablosundaki turid ile Tur tablosundaki id sütunları için olduğunu belirtiyoruz.
alter table FilmTur add constraint FK_FilmTur_Tur foreign key (TurId) references Tur(Id)
-- Dolayısıyla Film ile Tur tabloları arasında many to many ilişki oluşturmuş oluyoruz.
-- Film ile FilmDetay arasındaki 1 to 1 ilişki için FilmDetay tablosuna bir foreign key constraint ekleyerek
-- bu constraint'in Film tablosundaki id ile FilmDetay tablosundaki filmid sütunları için olduğunu belirtiyoruz.
alter table FilmDetay add constraint FK_FilmDetay_Film foreign key (FilmId) references Film(Id)