forked from profmuratcakir/SQL
-
Notifications
You must be signed in to change notification settings - Fork 0
/
day2_constraints.sql
98 lines (74 loc) · 3.91 KB
/
day2_constraints.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
/*======================= CONSTRAINTS - KISITLAMALAR ======================================
NOT NULL - Bir Sütunun NULL içermemesini garanti eder.
UNIQUE - Bir sütundaki tüm değerlerin BENZERSİZ olmasını garanti eder.
PRIMARY KEY - Bir sütünün NULL içermemesini ve sütundaki verilerin
BENZERSİZ olmasını garanti eder.(NOT NULL ve UNIQUE birleşimi gibi)
FOREIGN KEY - Başka bir tablodaki Primary Key’i referans göstermek için kullanılır.
Böylelikle, tablolar arasında ilişki kurulmuş olur.
CHECK - Bir sutundaki tüm verilerin belirlenen özel bir şartı sağlamasını garanti eder.
DEFAULT - Herhangi bir değer atanamadığında Başlangıç değerinin atanmasını sağlar.
========================================================================================*/
----------------------------------------------------------------
-- KISITLAMALAR (ORNEK1 - PRIMARY KEY)
----------------------------------------------------------------
CREATE TABLE calisanlar
(
id CHAR(5) PRIMARY KEY,
isim VARCHAR2(50) UNIQUE,
maas NUMBER(5) NOT NULL,
ise_baslama DATE
);
INSERT INTO calisanlar VALUES('10001', 'Ahmet Aslan',7000, '13-04-2018');
INSERT INTO calisanlar VALUES( '10002', 'Mehmet Yılmaz' ,12000, '14-04-18');
INSERT INTO calisanlar VALUES('10003', '', 5000, '14-04-18');
INSERT INTO calisanlar VALUES('10004', 'Veli Han', 5000, '14-04-18');
INSERT INTO calisanlar VALUES('10005', 'Mustafa Ali', 5000, '14-04-18');
INSERT INTO calisanlar VALUES('10006', 'Canan Yaş', NULL, '12-04-19');
SELECT * FROM calisanlar;
DROP TABLE calisanlar;
-- 10001 id'li calisani silme (İleride bu konuyu göreceğiz).
DELETE calisanlar
WHERE id='10001';
----------------------------------------------------------------
-- KISITLAMALAR (ORNEK2 - PRIMARY KEY ALTERNATİF YÖNTEM)
----------------------------------------------------------------
-- Bu yöntemde Kısıtlamaya istediğimiz ismi atayabiliriz
-- ve DISABLE komutuyla istediğimizde pasif hale getirebiliriz.
CREATE TABLE calisanlar
(
id CHAR(5),
isim VARCHAR2(50) UNIQUE,
maas NUMBER(5) NOT NULL,
ise_baslama DATE,
CONSTRAINT id_pk PRIMARY KEY(id) --DISABLE
);
INSERT INTO calisanlar VALUES('10001', 'Ahmet Aslan',7000, '13-04-2018');
INSERT INTO calisanlar VALUES( '10002', 'Mehmet Yılmaz' ,12000, '14-04-18');
INSERT INTO calisanlar VALUES('10003', 'CAN', 5000, '14-04-18');
----------------------------------------------------------------
-- KISITLAMALAR (ORNEK3 - FOREIGN KEY)
----------------------------------------------------------------
CREATE TABLE adresler
(
adres_id CHAR(5), -- REFERENCES calisanlar(id),
sokak VARCHAR2(50),
cadde VARCHAR2(30),
sehir VARCHAR2(15),
CONSTRAINT id_fk FOREIGN KEY(adres_id) REFERENCES calisanlar(id)
);
INSERT INTO adresler VALUES('10001','Mutlu Sok', '40.Cad.','IST');
INSERT INTO adresler VALUES('10001','Can Sok', '50.Cad.','Ankara');
INSERT INTO adresler VALUES('10002','Ağa Sok', '30.Cad.','Antep');
-- FK'ye null değeri atanabilir.
INSERT INTO adresler VALUES('','Ağa Sok', '30.Cad.','Antep');
INSERT INTO adresler VALUES('','Ağa Sok', '30.Cad.','Antep');
-- Parent tabloda olmayan bir id ile ekleme yapılamaz.
INSERT INTO adresler VALUES('10004','Gel Sok', '60.Cad.','Van');
SELECT * FROM adresler;
SELECT * FROM calisanlar;
-- Child tablo silinmeden parent tablo silinemez.
DROP TABLE calisanlar;
DROP TABLE adresler;
-- FK ile birleştirilen tablolardaki tüm verileri çekmek için
-- JOIN İşlemi yapmak gerekir. Bu konuyu sonra göreceğiz.
SELECT * FROM calisanlar, adresler WHERE calisanlar.id = adresler.adres_id;