Veri Tabanı-I 6.Hafta
06
.01
.20
12
M
uh
amm
er İL
KU
ÇA
R, M
AK
Ü-2
01
1 B
UR
DU
R
1
Tablo Oluşturma
Sunucu
SUNUCU-DATABASE-TABLO-ALAN
06
.01
.20
12
M
uh
amm
er İL
KU
ÇA
R, M
AK
Ü-2
01
1 B
UR
DU
R
2
numarası adı soyadı
0913109001 Ali Can
0913109002 Nuri Koç
0913109003 Fatma Kara
Tablo
Database
Satır,Kayıt (row, record)
Kolon,nitelik,alan(Column,attributes,fields)
Verilerimizi kayıt ettiğimiz yapılar tablolardır. Bu sebeple tabloların düzdün bir şekilde oluşturulması; verilerimizin sağlıklı bir şekilde saklanmasına ve sorgulanabilmesine olanak sağlayacaktır.
SQL komutu yazma ve Çalıştırma
06
.01
.20
12
M
uh
amm
er İL
KU
ÇA
R, M
AK
Ü-2
01
1 B
UR
DU
R
3
SQL ( Structured Query Language) kodları ile SQL sunucular üzerinde komutlar (emir) verilir-
işletilir.
MS SQL sunucuda SQL kodları yazıldıktan sonra kodlar seçilip (F5 veya Run tuşu ile
işletilir- icra edilir- çalıştırılır).
Komutlar sadece Run edildiği zaman işlem yapar. Bu sebeple komutlar üzerinde bir
değişiklik yapıldığında mutlaka komut (F5 veya Run tuşu ile) ile tekrara çalıştırılmalıdır.
Database Oluşturma
06
.01
.20
12
M
uh
amm
er İL
KU
ÇA
R, M
AK
Ü-2
01
1 B
UR
DU
R
4
-- MYO adında database oluşturmak için Create DATABASE MYO ON PRIMARY (
Name = myo_db, FILENAME = 'C:\myo.mdf' , SIZE = 10 MB, MAXSIZE = 25 MB, FILEGROWTH = 20%
) LOG ON (
Name = myo_log, FILENAME = 'C:\myo.ldf' , SIZE = 3 MB, MAXSIZE = 5 MB, FILEGROWTH = 1 MB
)
Veri Tanımlama
06
.01
.20
12
M
uh
amm
er İL
KU
ÇA
R, M
AK
Ü-2
01
1 B
UR
DU
R
5
CREATE TABLE Özellikleri ve veri türleri ile birlikte yeni bir tablo (ilişki)
tanımlamak için kullanılır.
Özellikler için NOT NULL tanımlaması yapılabilir.
Birincil anahtar özellikler (PRIMARY KEY) tanımlanabilir.
Farklı (UNIQUE) değerler alması gereken özellikler tanımlanabilir.
Bir alana veri girişi CHECK Constrain ile kontrol edilebilirr
Bir alana DEFAULT değer verilebilir
Yabancı anahtarlar (FOREIGN KEY) tanımlanabilir.
Tablo Oluşturma
06
.01
.20
12
M
uh
amm
er İL
KU
ÇA
R, M
AK
Ü-2
01
1 B
UR
DU
R
6
-- üzerinde çalışılacak database mutlaka seçilmelidir
USE DATABASE MYO
GO
CREATE TABLE ogrenci
(
numara char(10) NOT NULL,
adsoy VARCHAR(50) NOT NULL,
dogumtarihi DateTime,
PRIMARY KEY (numara),
UNIQUE(numara)
);
CREATE TABLE ogrenci
(
numara char(10) NOT NULL PRIMARY KEY UNIQUE ,
adsoy VARCHAR(50) NOT NULL,
dogumtarihi DateTime
);
Tablo Oluşturma
06
.01
.20
12
M
uh
amm
er İL
KU
ÇA
R, M
AK
Ü-2
01
1 B
UR
DU
R
7
Tablo Oluşturma
06
.01
.20
12
M
uh
amm
er İL
KU
ÇA
R, M
AK
Ü-2
01
1 B
UR
DU
R
8
IDENTITY alanı kayıt eklendikçe otomatik olarak artarak devam eden artan bir alandır. Bu alana dışardan veri girilmez. idno int identity(1,1) primary key, Değişkenadi Tip IDENTITY ( başlangıç değeri , artış miktarı) Tip : int, bigint, smallint, tinyint, decimal, numeric Başlangıç değeri : tamsayı bir değer Artış miktarı : tamsayı bir değer CHECK : bir alana girilebilecek değerlerin kontrol edilmesi için kullanılır. Örn : int vize CHECK ( vize >=0 AND final <=100)
Tablo Oluşturma
06
.01
.20
12
M
uh
amm
er İL
KU
ÇA
R, M
AK
Ü-2
01
1 B
UR
DU
R
9
CREATE TABLE musteri
(
musterino int NOT NULL PRIMARY KEY ,
adi varchar(15) NOT NULL,
soyadi varchar(15) not null,
adres varchar(50),
telefon varchar(11) CHECK( len(telefon)=10 )
);
adres
MÜŞTERİ Müşteri_No
Adı Soyadı
telefon
Musteri_no adi soyadi adres telefon
int Varchar(15) Varchar(15) Varchar(50) Varchar(11)
Tablo Oluşturma
06
.01
.20
12
M
uh
amm
er İL
KU
ÇA
R, M
AK
Ü-2
01
1 B
UR
DU
R
10
CREATE TABLE ogrenciders ( idno int identity(1,1) primary key, numara char(10) , derskodu char(7), vize int DEFAULT (0) CHECK( vize>=0 AND vize <=100), final int DEFAULT (0) CHECK(final >=0 AND final <=100), tarih DateTime Default ( GetDate( ) ) );
id numara derskodu vize final tarih
Otomatik tamsayı
Char(10) char(7) (0-100 arası tamsayı)
(0-100 arası tamsayı)
Otomatik tarih atılacak
final
ogrenciders numara
vize derskodu
tarih
idno
Tablo Oluşturma
06
.01
.20
12
M
uh
amm
er İL
KU
ÇA
R, M
AK
Ü-2
01
1 B
UR
DU
R
11
DERS
Ders Adı Kredi
Ders Kodu
ÖĞRENCİ
Ad
numara
Soyad
Ogrenci_ders N N
vize
Final
CREATE TABLE OGRENCI ( numara char(10) primary key , ad varchar(15), soyad varchar(15) );
CREATE TABLE DERS ( derskodu char(7) primary key , ders_adi varchar(25), kredi real );
create table ogrenci_ders ( numara char(10) FOREIGN KEY REFERENCES OGRENCI(numara) , derskodu char(7) FOREIGN KEY REFERENCES DERS (derskodu), vize int check( vize>=0 AND vize <=100), final int check( final>=0 AND final <=100), )
Tablo Oluşturma
06
.01
.20
12
M
uh
amm
er İL
KU
ÇA
R, M
AK
Ü-2
01
1 B
UR
DU
R
12
CREATE TABLE URUNLER ( urun_no int primary key , urun_adi varchar(15), fiyati money );
CREATE TABLE MUSTERI ( musterino int primary key , ad varchar(25), soyad varchar(25) );
create table SATIS ( musterino int FOREIGN KEY REFERENCES MUSTERI ON DELETE CASCADE ON UPDATE CASCADE , urun_no int FOREIGN KEY REFERENCES URUNLER ON DELETE CASCADE ON UPDATE CASCADE , satis_miktari real, satis_fiyati money, satis_tarihi DateTime Default(GetDate()) )
ürün_No ÜRÜNLER
ÜrünAdı
Fiyatı
MÜŞTERİ
Müşteri_No
Adı Soyadı
SATIŞ
Satış fiyatı Satış miktarı
Satış Tarihi
Tablo Oluşturma
06
.01
.20
12
M
uh
amm
er İL
KU
ÇA
R, M
AK
Ü-2
01
1 B
UR
DU
R
13
CREATE TABLE URUNLER ( urun_no int primary key , urun_adi varchar(15), fiyati money );
CREATE TABLE MUSTERI ( musterino int primary key , ad varchar(25), soyad varchar(25) );
create table SATIS ( musterino int FOREIGN KEY REFERENCES MUSTERI ON DELETE SET DEFAULT ON UPDATE CASCADE , urun_no int FOREIGN KEY REFERENCES URUNLER ON DELETE SET NULL ON UPDATE CASCADE , satis_miktari real, satis_fiyati money, satis_tarihi DateTime Default(GetDate()) )
ürün_No ÜRÜNLER
ÜrünAdı
Fiyatı
MÜŞTERİ
Müşteri_No
Adı Soyadı
SATIŞ
Satış fiyatı Satış miktarı
Satış Tarihi
Tablo oluşturma (hesaplanmış alanlar)
06
.01
.20
12
M
uh
amm
er İL
KU
ÇA
R, M
AK
Ü-2
01
1 B
UR
DU
R
14
CREATE TABLE hesaplanmis_tablo ( num int, vize int, final int, ort AS (vize + final)/2 -- hesaplanmış alan ) ; insert into hesaplanmis_tablo (num,vize,final) VALUES(101,50,80) select * from hesaplanmis_tablo
NOT: Hesaplanmış alanların tipi yoktur otomatik sonucun tipini alır ve alanlara veri girilmez.
Tablo oluşturma
06
.01
.20
12
M
uh
amm
er İL
KU
ÇA
R, M
AK
Ü-2
01
1 B
UR
DU
R
15
CREATE TABLE cust ( cust_id uniqueidentifier NOT NULL DEFAULT newid(), ad nvarchar(20), soy nvarchar(20) ) insert into cust (ad , soy) VALUES('Ayşe', ‘Şaçbağı') insert into cust (cust_id, ad, soy) VALUES ( NEWID() , 'Melda‘ , 'Başçı') select * from cust
NOT: Uniqueidentifier Alanların verileri
NEWID() fonksiyonu ile elde edilen bir değer olmalıdır.
Tablo oluşturma
06
.01
.20
12
M
uh
amm
er İL
KU
ÇA
R, M
AK
Ü-2
01
1 B
UR
DU
R
16
CREATE TABLE ExampleTable (PriKey int PRIMARY KEY, timestamp); insert into ExampleTable ( PriKey)VALUES(1) insert into ExampleTable ( PriKey)VALUES(2) select * from ExampleTable CREATE TABLE ExampleTable2 (PriKey int PRIMARY KEY, VerCol rowversion) ; insert into ExampleTable2 ( PriKey)VALUES(1) insert into ExampleTable2 ( PriKey)VALUES(2) select * from ExampleTable2
NOT: ExampleTable deki
timestamp ve
ExampleTable2 deki
VerCol rowversion alanına veri girilmez
Vizard(sihribaz) ile Tablo oluşturma
06
.01
.20
12
M
uh
amm
er İL
KU
ÇA
R, M
AK
Ü-2
01
1 B
UR
DU
R
17
Database-Tables seçilir ve üzerinde sağ kliknenip- New Table … seçildiğinde aşağıdaki ekran gelir. Bu ekrandan değişken adı ve değişken tipi seçilerek tablonun alanları belirlenip kaydet butonuna basılır . Karşımıza aşağıdaki gibi tablo adını girebileceğimiz açılan pencereden tablo adını yazıp OK ile işelm tamamlanır.
Tablo Üzerinde Düzeltme Yapmak
06
.01
.20
12
M
uh
amm
er İL
KU
ÇA
R, M
AK
Ü-2
01
1 B
UR
DU
R
18
DROP TABLE: Bir tabloyu (ilişkiyi) silmek için kullanılır.
Örnek; DROP TABLE ogrenci;
ALTER TABLE :
Bir tabloya (ilişkiye) yeni bir özellik eklemek,
mevcut bir özelliği silmek veya alfasayısal bir özelliğin uzunluğunu değiştirmek
için kullanılır. Yeni eklenen özellik NULL değer alacağı için, özellik NOT NULL
tanımlanamaz.
Örnek; ALTER TABLE ogrenci ADD yas int;
ALTER TABLE ogrenci DROP dogumtarihi;
ALTER TABLE ogrenci MODIFY COLUMN adsoy varchar(30);
Geçici Tablolar(Temporary Tables)
06
.01
.20
12
M
uh
amm
er İL
KU
ÇA
R, M
AK
Ü-2
01
1 B
UR
DU
R
19
# ile başlayan tablolar geçici (temprorary) tablolardır.
SQL server da geçici tablolar tempdb tabanı içerisinde oluşturulurlar.
SQL Server a login olduğunuzda SQL Server sizin için bir oturum(Session) yaratır. Oluşturduğunuz geçici
tablolar bu session da tutulur.
SQL Server da açtığınız Session ı kapattığınızda geçici tablolarınızda yok edilir.
Sonraki salyttaki örnekdeki gibi “Local Temporary Table” lar sadece oluşturuldukları Session da kullanılabilir
durumdadır.
Eğer bir stored procedure geçici bir tablo oluşturuyor ise procedure sonlandığında tablo da yok edilir.
Eğer birden çok session da kullanılmak üzere bir geçici tablo(Global Temporary Table) oluşturmak isterseniz
aşağıdaki kodu kullanabilirsiniz. Bu tip tablolar bu tabloyu kullanan son Session kapandığında yani kullanıcı
çıkış yaptığında yok edilirler.
Temporary table ların farklı kullanıcılar tarafından aynı anda oluşturulma ihtimalleri vardır. Bu durumda sistem kendilerine unique(benzersiz) bir id ataması yaparak isim çakışmalarını engeller.
Geçici Tablolar(Temporary Tables)
06
.01
.20
12
M
uh
amm
er İL
KU
ÇA
R, M
AK
Ü-2
01
1 B
UR
DU
R
20
CREATE TABLE #gecici
(
numara int primary key,
ad varchar(50),
soyad varchar(50)
)
CREATE TABLE ##gecici_global
(
numara int primary key,
ad varchar(50),
soyad varchar(50)
)
SELECT * FROM #global
SELECT * FROM ##gecici_global
MS SQL Veri Tipleri
06
.01
.20
12
M
uh
amm
er İL
KU
ÇA
R, M
AK
Ü-2
01
1 B
UR
DU
R
21
bigint numeric
bit smallint
decimal smallmoney
int tinyint
money
float real date datetimeoffset
datetime2 smalldatetime
datetime time
char varchar
text
Character Strings
Tamsayı Reel Sayı
nchar nvarchar
ntext
binary varbinary
image
Unicode Character Strings Binary Strings
cursor timestamp
hierarchyid uniqueidentifier
sql_variant xml
table
Diğer Data Tipleri
Detaylı Bilgi için:http://msdn.microsoft.com/en-us/library/ms187752.aspx
Date and Time
TABLODA EKLEME - SİLME - GÜNCELLEME
06
.01
.20
12
M
uh
amm
er İL
KU
ÇA
R, M
AK
Ü-2
01
1 B
UR
DU
R
22
INSERT
INSERT INTO Tablo [(Kolon Listesi)] VALUES (Değerler Listesi)
DELETE
DELETE FROM Tablo WHERE Koşullar
UPDATE
UPDATE Tablo SET Kolon1=Değer1, Kolon2=Değer2… WHERE Koşullar
EKLEME
06
.01
.20
12
M
uh
amm
er İL
KU
ÇA
R, M
AK
Ü-2
01
1 B
UR
DU
R
23 INSERT INTO ogrenci (numara , adsoy , dogumtarihi) VALUES ('1013160101' , 'Arda Koç' , '1990-12-18')
INSERT INTO Tablo ( Kolon Listesi ) VALUES (Değerler Listesi)
Bir tabloya (ilişkiye) bir veya daha fazla satır eklemede kullanılır.
Kolon listesi zorunlu değil. Belirtilmemişse TABLO’daki tüm kolonlar
CREATE TABLE komutundaki sırada kabul edilir.
Kolon için DEFAULT belirtilmemişse ve boş bırakılacaksa, değerler
listesinde NULL belirtilmelidir.
Değerler Listesi sayısı, Kolon Listesi sayısına eşit olmalıdır.
Değerler Listesi’ndeki verinin yeri, ilgili kolonun yerine uygun olmalıdır.
Değerler Listesi’ndeki verinin türü, ilgili kolonun veri türünde olmalıdır.
EKLEME
06
.01
.20
12
M
uh
amm
er İL
KU
ÇA
R, M
AK
Ü-2
01
1 B
UR
DU
R
24
INSERT INTO ogrenci (numara , adsoy , dogumtarihi) VALUES ('1013160101' , 'Arda Koç' , '1990-12-18') INSERT INTO ogrenci VALUES ('1013160101' , 'Arda Koç' , '1990-12-18') Var olan yeni_ogrenci tablosu aktarır. Her iki tablonun da aynı yapıda olması gerekir INSERT INTO ogrenci_yeni SELECT * FROM ogrenci INSERT INTO ogrenci_yeni (numara , adsoy , dogumtarihi) ( SELECT numara , adsoy , dogumtarihi FROM ogrenci WHERE numara <100) Yeni ogrenci_yeni TABLOSU oluşturur ve ogrenci tablosundan numara ve adsoy bilgilerini aktarır SELECT numara, adsoy INTO ogrenci_yeni FROM ogrenci
Soru ve Önerileriniz …
06
.01
.20
12
M
uh
amm
er İL
KU
ÇA
R, M
AK
Ü-2
01
1 B
UR
DU
R
25
?