forked from profmuratcakir/SQL
-
Notifications
You must be signed in to change notification settings - Fork 0
/
day5_delete.sql
174 lines (122 loc) · 6.5 KB
/
day5_delete.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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
/* ============================== DELETE =================================== */
-- DELETE FROM tablo_adı; Tablonun tüm içerğini siler.
-- Bu komut bir DML komutudur. Dolayısıyla devamında WHERE gibi cümlecikler
-- kullanılabilir.
-- DELETE FROM tablo_adı
-- WHERE sutun_adi = veri;
CREATE TABLE ogrenciler
(
id CHAR(3),
isim VARCHAR2(50),
veli_isim VARCHAR2(50),
yazili_notu NUMBER(3)
);
INSERT INTO ogrenciler VALUES(123, 'Ali Can', 'Hasan',75);
INSERT INTO ogrenciler VALUES(124, 'Merve Gul', 'Ayse',85);
INSERT INTO ogrenciler VALUES(125, 'Kemal Yasa', 'Hasan',85);
INSERT INTO ogrenciler VALUES(126, 'Nesibe Yilmaz', 'Ayse',95);
INSERT INTO ogrenciler VALUES(127, 'Mustafa Bak', 'Can',99);
SELECT * FROM ogrenciler;
DROP TABLE ogrenciler;
/* =============================================================================
Seçerek silmek için WHERE Anahtar kelimesi kullanılabilir.
===============================================================================*/
/* -----------------------------------------------------------------------------
ORNEK1: id'si 124 olan ogrenciyi siliniz.
-----------------------------------------------------------------------------*/
DELETE FROM ogrenciler
WHERE id = 124;
/* -----------------------------------------------------------------------------
ORNEK2: ismi Kemal Yasa olan satırını siliniz.
-----------------------------------------------------------------------------*/
DELETE FROM ogrenciler
WHERE isim = 'Kemal Yasa';
/* -----------------------------------------------------------------------------
ORNEK3: ismi Nesibe Yilmaz ve Mustafa Bak olan kayıtları silelim.
-----------------------------------------------------------------------------*/
DELETE FROM ogrenciler
WHERE isim = 'Nesibe Yilmaz' OR isim = 'Mustafa Bak';
/* ----------------------------------------------------------------------------
ORNEK4: İsmi Ali Can ve id'si 123 olan kaydı siliniz.
-----------------------------------------------------------------------------*/
DELETE FROM ogrenciler
WHERE isim = 'Ali Can' AND id = 123;
/* ----------------------------------------------------------------------------
ORNEK5: id 'si 126'dan büyük olan kayıtları silelim.
-----------------------------------------------------------------------------*/
DELETE FROM ogrenciler
WHERE id>126;
/* ----------------------------------------------------------------------------
ORNEK6: id'si 123, 125 ve 126 olanları silelim.
-----------------------------------------------------------------------------*/
DELETE FROM ogrenciler
WHERE id IN(123,125,126);
/* ----------------------------------------------------------------------------
ORNEK7: TABLODAKİ TÜM KAYITLARI SİLELİM..
-----------------------------------------------------------------------------*/
DELETE FROM ogrenciler;
/* ======================== DELETE - TRUCATE - DROP ============================
1-) TRUNCATE komutu DELETE komutu gibi bir tablodaki verilerin tamamını siler.
Ancak, seçmeli silme yapamaz. Çünkü Truncate komutu DML değil DDL komutudur.
2-) DELETE komutu beraberinde WHERE cümleciği kullanılabilir. TRUNCATE ile
kullanılmaz.
3-) Delete komutu ile silinen veriler ROLLBACK Komutu ile kolaylıkla geri
alınabilir.
4-) Truncate ile silinen veriler geri alınması daha zordur. Ancak
Transaction yöntemi ile geri alınması mümkün olabilir.
5-) DROP komutu da bir DDL komutudur. Ancak DROP veriler ile tabloyu da
siler. Silinen tablo Veritabanının geri dönüşüm kutusuna gider. Silinen
tablo aşağıdaki komut ile geri alınabilir. Veya SQL GUI'den geri alınabilir.
FLASHBACK TABLE tablo_adı TO BEFORE DROP; -> tabloyu geri alır.
PURGE TABLE tablo_adı; -> Geri dönüşümdeki tabloyu siler.
DROP TABLE tablo_adı PURGE; -> Tabloyu tamamen siler
==============================================================================*/
DELETE FROM ogrenciler; -- Tüm verileri sil.
ROLLBACK; -- Silinen Verileri geri getir.
DROP TABLE ogrenciler; -- Tabloyu siler ve Veritabanının Çöp kutusuna
-- gönderir. (DDL komutudur.)
-- Çöp kutusundaki tabloyu geri getirir.
FLASHBACK TABLE ogrenciler TO BEFORE DROP;
-- Tabloyu tamamen siler (Çöp kutusuna atmaz.)
DROP TABLE ogrenciler PURGE;
-- Tüm veriler hassas bir şekilde siler.
TRUNCATE TABLE ogrenciler;
/* =============================================================================
Tablolar arasında ilişki var ise veriler nasıl silinebilir?
============================================================================= */
/*============================== ON DELETE CASCADE =============================
Her defasında önce child tablodaki verileri silmek yerine ON DELETE CASCADE
silme özelliğini aktif hale getirebiliriz.
Bunun için FK olan satırın en sonuna ON DELETE CASCADE komutunu yazmak yeterli
==============================================================================*/
CREATE TABLE talebeler
(
id CHAR(3), --PK
isim VARCHAR2(50),
veli_isim VARCHAR2(50),
yazili_notu NUMBER(3),
CONSTRAINT talebe_pk PRIMARY KEY (id)
);
INSERT INTO talebeler VALUES(123, 'Ali Can', 'Hasan',75);
INSERT INTO talebeler VALUES(124, 'Merve Gul', 'Ayse',85);
INSERT INTO talebeler VALUES(125, 'Kemal Yasa', 'Hasan',85);
INSERT INTO talebeler VALUES(126, 'Nesibe Yılmaz', 'Ayse',95);
INSERT INTO talebeler VALUES(127, 'Mustafa Bak', 'Can',99);
CREATE TABLE notlar
(
talebe_id char(3), --FK
ders_adi varchar2(30),
yazili_notu number (3),
CONSTRAINT notlar_fk FOREIGN KEY (talebe_id)
REFERENCES talebeler(id) ON DELETE CASCADE
);
INSERT INTO notlar VALUES ('123','kimya',75);
INSERT INTO notlar VALUES ('124', 'fizik',65);
INSERT INTO notlar VALUES ('125', 'tarih',90);
INSERT INTO notlar VALUES ('126', 'Matematik',90);
SELECT * FROM TALEBELER;
SELECT * FROM NOTLAR;
DELETE FROM notlar
WHERE talebe_id = 124;
DELETE FROM talebeler
WHERE id = 124;