SQLInstructor DEV - PPTX
SQLInstructor DEV - PPTX
195
NT 04.10.2023
SQL
Introduction
SQL
Structured Query Language
Yapılandırılmış Sorgu Dili
DATA-DATABASE
DATABASE (VERITABANI) NEDIR?
Çoğu veritabanında veri yazma ve sorgulama için yapılandırılmış sorgu dili SQL
kullanılır.
DATABASE’IN FAYDALARI NELERDIR
Headers====>
2) “numeric(7)” ondalik kismi olmayan 7 basamakli sayi demektir ==> 12345,67’I kabul eder ama
numeric(p, s) 12345 olarak depolar
(yüksek doğruluk) Note: “numeric(7)” ve “numeric(7, 0)” ayni seydir
real
Gerçek sayılar(ondalıklı) için kullanılı[Link]ızada kapladığı alan: 4 byte
(yeterli doğruluk )
SQL Data Types
Numeric DataTypes
Data Type Aciklama
SMALLINT -32.768 ile 32.767 arasında değer alır. Hafızada kapladığı alan: 2 byte
“DATE” data tipi tarih ve zamani depolamak icin kullanilir. Saniyenin virgüllü kısmını da alir.
DATE “DATE” yil, ay, gun, saat, dakika, ve saniye içerir.
Standart “Date Format” , “YYYY - MM - dd”.Örneğin 1982 - 07- 01
SQL Data Types
BLOB Data Types
INSERT INTO : PostgreSQL’de tabloya bir veya birden fazla kayıt eklemek için
kullanılır.
Foreign Key
StudentID FirstName LastName CourselD Primary Key
10 John Walker 200
CourselD CourseName CourseCredit CourseFee
11 Tom Hanks 400
100 Biology 3 1200
12 Kevin Star 400 200 Math 3 1200
13 Carl Wall 200 300 English 2 600
14 Andrei Apazniak 300 400 Selective 1 200
15 Mark High 400 Parent Table
16 Clara Star 100
17 John Ocean 100
18
19
John
Pamela
Walker
Star
200
300
Bir Tabloda birden fazla Foreign Key olabilir
20 Carl Wall NULL Forein Key NULL degeri Kabul eder
Child Table Foreign Key olarak tanimlanan field’da tekrarlar olabilir
Foreign Key, değerleri farklı bir tablodaki Primary Key ile eşleşen bir sütun veya
sütunların birleşimidir.
Foreign and Primary Key
Note: Foreign key Tablonun kendi icinde bir relation olusturabilir.
Tek basina bir kolon Primary Key olma ozelliklerini tasimiyorsa, bu ozellikleri elde
etmek icin birden fazla kolon birlestirilerek Primary olusturulur
“UNIQUE KEY” & “PRIMARY KEY”
1) Primary Key bir record’u tanimlayan bir field veya birden fazla field’in kombinasyonudur.
2) Primary Key Unique’dir
3) Bir tabloda en fazla bir Primary Key olabilir
4) Primary Key field’inda hiç bir data NULL olamaz
“id” field’ini “primary key” yapmak için 2 yol var
1) Data Type’dan sonra “PRIMARY KEY” yazarak.
Note 1: “Parent Table”da olmayan bir id’ye sahip datayi “Child Table”’a ekleyemezsiniz
Note 2: Child Table’i silmeden Parent Table’i silemezsiniz. Once “Child Table” silinir, sonra
“Parent Table” silinir.
Tabloya “Foreign Key” Nasil Eklenir ?
SIRKETLER Tablosu
PERSONEL Tablosu
Primary Key
Foreign Key
Parent Table
Child Table
Tabloya “CHECK Constraint” Nasil Eklenir ?
SELECT isim
FROM calisanlar;
OR ==> Or operator
DQL - SELECT KOMUTU
* DELETE FROM tablo_adı WHERE sutun_adi = veri; —>Tabloda istediğiniz veriyi siler.
NOT:“DELETE FROM tablo_adı” ->tablodaki tum datalari siler, fakat tabloyu silmez.
DML - DELETE - TRUNCATE
TRUNCATE komutu DELETE komutu gibi bir tablodaki verilerin tamamını
siler. Ancak, seçmeli silme yapamaz.
-- on delete cascade sayesinde parenttaki silinen bir kayıt ile ilişkili olan tüm child kayıtlarını silebiliriz
Burada IF EXISTS yapısını kullanarak yanlış tablo ismi yazımı durumunda hata
mesajı almayı önleriz.
IN CONDITION
IN Condition birden fazla mantiksal ifade ile tanimlayabilecegimiz durumlari
(Condition) tek komutla yazabilme imkani verir
Örnek:
--Müşteriler tablosunda urun_id 20 ile 40 arasinda olan urunlerin tum bilgilerini
listeleyiniz.
NOT BETWEEN CONDITION
NOT BETWEEN Condition iki mantiksal ifade ile tanimlayabilecegimiz durumlari tek
komutla yazabilme imkani verir. Yazdigimiz 2 sinirda araliga harictir (EXCLUSIVE)
SQL; avg, count, sum, min, max, vb. içeren birçok toplama işlevi sağlar.
ALIASES
Aliases(takma adları) bir tabloya veya sütuna geçici bir ad vermek için kullanılır.
Bir takma ad sadece sorgu süresi boyunca mevcuttur.
CREATE TABLE workers ( INSERT INTO workers VALUES(123456789, ‘Ali Can', ‘Istanbul');
calisan_id char(9), INSERT INTO workers VALUES(234567890, ‘Veli Cem', ‘Ankara');
calisan_isim varchar(50), INSERT INTO workers VALUES(345678901, ‘Mine Bulut', ‘Izmir');
calisan_dogdugu_sehir varchar(50)
);
SUBQUERIES
-SUBQUERY başka bir SQL sorgusunun içinde bulunan ve onun sonucundan yararlanarak
çalışan bir sorgudur. Bu sayede, veritabanında bulunan verileri daha karmaşık ve
detaylı bir şekilde sorgulama imkanı sağlar.
- Aggregate Metotlari (SUM,COUNT, MIN, MAX, AVG) Subquery içinde kullanilabilir.
EXISTS CONDITION
EXISTS Condition subquery’ler ile kullanilir. IN ifadesinin kullanımına benzer
olarak, EXISTS ve NOT EXISTS ifadeleri de alt sorgudan getirilen değerlerin içerisinde
bir değerin olması veya olmaması durumunda işlem yapılmasını sağlar.
Tablodaki Data Nasil Update Edilir (UPDATE SET)?
CREATE TABLE people INSERT INTO people VALUES(123456789, 'Ali Can', 'Istanbul');
( INSERT INTO people VALUES(234567890, 'Veli Cem', 'Ankara');
INSERT INTO people VALUES(345678901, 'Mine Bulut', 'Izmir');
ssn char(9),
INSERT INTO people (ssn, address) VALUES(456789012, 'Bursa');
name varchar(50), INSERT INTO people (ssn, address) VALUES(567890123, 'Denizli');
address varchar(50) INSERT INTO people (ssn, name) VALUES(567890123, 'Veli Han');
);
ORDER BY CLAUSE
ORDER BY komutu belli bir field’a gore NATURAL ORDER olarak siralama
yapmak icin kullanilir
ORDER BY komutu sadece SELECT komutu ile kullanilir
CREATE TABLE person INSERT INTO person VALUES(123456789, 'Ali','Can', 'Istanbul');
( INSERT INTO person VALUES(234567890, 'Veli','Cem', 'Ankara');
ssn char(9), INSERT INTO person VALUES(345678901, 'Mine','Bulut', 'Ankara');
INSERT INTO person VALUES(256789012, 'Mahmut','Bulut', 'Istanbul');
isim varchar(50), INSERT INTO person VALUES (344678901, 'Mine','Yasa', 'Ankara');
soyisim varchar(50), INSERT INTO person VALUES (345678901, 'Veli','Yilmaz', 'Istanbul');
adres varchar(50) INSERT INTO person VALUES(256789018, 'Samet','Bulut', 'Izmir');
);
3) Eger bir sehirde calisan personel sayisi 1’den coksa sehir ismini
ve personel sayisini veren sorgu yaziniz
4) Eger bir sehirde alinan MAX maas 5000’den dusukse sehir ismini
ve MAX maasi veren sorgu yaziniz
UNION OPERATOR
Iki farkli sorgulamanin sonucunu birlestiren islemdir. Secilen Field SAYISI ve DATA TYPE’i ayni
olmalidir.
CREATE TABLE personel INSERT INTO personel VALUES(123456789, ‘Ali Yilmaz', ‘Istanbul', 5500, ‘Honda');
( INSERT INTO personel VALUES(234567890, ‘Veli Sahin', ‘Istanbul', 4500, ‘Toyota');
id int, INSERT INTO personel VALUES(345678901, ‘Mehmet Ozturk', ‘Ankara', 3500, 'Honda');
isim varchar(50), INSERT INTO personel VALUES(456789012, 'Mehmet Ozturk', ‘Izmir', 6000, ‘Ford');
sehir varchar(50), INSERT INTO personel VALUES(567890123, 'Mehmet Ozturk', ‘Ankara', 7000, ‘Tofas');
maas int, INSERT INTO personel VALUES(456789012, 'Veli Sahin ', ‘Ankara', 4500, ‘Ford');
sirket varchar(20) INSERT INTO personel VALUES(123456710, ‘Hatice Sahin', ‘Bursa', 4500, 'Honda');
);
1) Maasi 4000’den cok olan isci isimlerini ve 5000 liradan fazla maas alinan
sehirleri gosteren sorguyu yaziniz
UNION OPERATOR
2) Mehmet Ozturk ismindeki kisilerin aldigi maaslari ve
Istanbul’daki personelin maaslarini
bir tabloda gosteren sorgu yaziniz
UNION
SELECT tel,cocuk_sayisi
FROM personel_bilgi
WHERE id= '123456789';
SELECT isim,maas
FROM personel
WHERE maas<5000;
UNION ALL OPERATOR
2) Ayni sorguyu UNION ile iki kere yazarak calistirin
SELECT sehir,maas
FROM personel
WHERE maas<5000
UNION
SELECT sehir,maas
FROM personel
WHERE maas<5000;
SELECT sehir,maas
FROM personel
WHERE maas<5000;
UNION ALL
SELECT sehir,maas
FROM personel
WHERE maas<5000;
UNION ALL OPERATOR
1) Tabloda personel maasi 4000’den cok olan tum sehirleri ve maaslari yazdirin
SELECT sehir,maas
FROM personel
WHERE maas>4000;
SELECT id
FROM personel
WHERE sehir IN (‘Istanbul’,’Ankara’);
SELECT id
FROM personel
WHERE maas NOT BETWEEN 4800 AND 5500;
SELECT id
FROM personel_bilgi
WHERE cocuk_sayisi IN (2,3);
SELECT isim
FROM personel
WHERE sirket=‘Honda’
INTERSECT
SELECT isim
FROM personel
WHERE sirket=‘Ford’
INTERSECT
SELECT isim
FROM personel
WHERE sirket=‘Tofas’;
EXCEPT OPERATOR
1) 5000’den az maas alip Honda’da calismayanlari yazdirin
SELECT isim,sirket
SELECT 2
FROM personel
WHERE maas<5000
EXCEPT
SELECT isim,sirket
FROM personel
WHERE sirket=‘Honda’
2) Ismi Mehmet Ozturk olup Istanbul’da calismayanlarin isimlerini ve sehirlerini listeleyin
SELECT isim,sehir
FROM personel
WHERE isim='Mehmet Ozturk'
EXCEPT
SELECT isim,sirket
FROM personel
WHERE sehir='Istanbul';
— Tekrar —
1-HAVING, AGGREGATE FUNCTION’lar ile birlikte kullanilan FILTRELEME komutudur.
2- UNION : Iki farkli sorgulamanin sonucunu birlestiren islemdir. Ikinci sorgudan gelen
sonuc ilk sorgudan gelmisse tekrar yazilmaz
- Her 2 QUERY’den elde edeceginiz tablolarin sutun sayilari esit olmali
- Alt alta gelecek sutunlarin data type’lari ayni olmali
3-UNION ALL, UNION islemi ile ayni isleve sahiptir , farki ise tekrarli elemanlari, tekrar
sayisinca yazar.
4-INTERSECT : Her iki sorgu sonucunu karsilastirir ve ortak olanlari listeler
5- EXCEPT : Birinci sorguda olup, ikinci sorguda olmayan sonuclari listeler
JOINS
2 veya daha fazla tablodaki datalari Birlestirmek icin kullanilir.
Su ana kadar gordugumuz Union,Intersect ve Except (Minus) sorgu sonuclari icin
kullanılır. Tablolar icin ise JOIN kullanilir
);
NOT :
1) Select’ten sonra tabloda gormek istediginiz sutunlari yazarken Tablo_adi.field_adi seklinde yazin
2) From’dan sonra tablo ismi yazarken [Link] ismi + INNER JOIN + [Link] ismi yazmaliyiz
3) Join’i hangi kurala gore yapacaginizi belirtmelisiniz. Bunun icin ON+ kuralimiz yazilmali
LEFT JOINS
TABLE 1 TABLE 2
NOT :
1) Left Join’de ilk tablodaki tum record’lar gosterilir.
2) Ilk tablodaki datalara [Link] gelen ek datalar varsa bu ek datalar ortak datalar icin gosterilir ancak
ortak olmayan datalar icin o kisimlar bos kalir
3) Ilk yazdiginiz Tablonun tamamini aldigi icin hangi tabloyu istedigimize karar verip once onu yazmaliyiz
RIGHT JOINS
TABLE 1 TABLE 2
NOT :
1)Right Join’de ikinci tablodaki tum record’lar gosterilir.
2)Ikinci tablodaki datalara [Link] gelen ek datalar varsa bu ek datalar ortak datalar icin gosterilir
ancak ortak olmayan datalar icin o kisimlar bos kalir
FULL JOINS
SELECT sirketler.sirket_isim, siparisler. siparis_id, siparisler. siparis_tarihi
FROM sirketler FULL JOIN siparisler
ON sirketler.sirket_id = siparisler.sirket_id;
NOT :
1) FULL Join’de iki tabloda var olan tum record’lar gosterilir.
2) Bir tabloda olup otekinde olmayan data’lar bos kalir
SELF JOINS
CREATE TABLE personel
(
INSERT INTO personel VALUES(1, 'Ali Can', 'SDET', 2);
id int, INSERT INTO personel VALUES(2, 'Veli Cem', 'QA', 3);
isim varchar(20),
INSERT INTO personel VALUES(3, 'Ayse Gul', 'QA Lead', 4);
title varchar(60),
yonetici_id int INSERT INTO personel VALUES(4, 'Fatma Can', 'CEO', 5);
);
CREATE TABLE musteriler INSERT INTO musteriler (id, isim, gelir) VALUES (1002, 'Ayse', 57500);
( INSERT INTO musteriler (id, isim, gelir) VALUES (1003, 'Feride', 71000);
id int UNIQUE,
INSERT INTO musteriler (id, isim, gelir) VALUES (1004, 'Fatma', 42000);
isim varchar(50) NOT NULL, INSERT INTO musteriler (id, isim, gelir) VALUES (1005, 'Kasim', 44000);
gelir int
);
SORU : Ismi e harfi ile biten musterilerin isimlerini ve gelir’lerini yazdiran QUERY yazin
SELECT isim,gelir
FROM musteriler
WHERE isim LIKE '%e';
SORU : Isminin icindeer olan musterilerin isimlerini ve gelir’lerini yazdiran QUERY yazin
SELECT isim,gelir
FROM musteriler
WHERE isim LIKE '%er%';
LIKE Condition
2) _ => sadece bir karakteri gosterir.
SORU: Ismi 5 harfli olup son 4 harfi atma olan musterilerin tum bilgilerini yazdiran QUERY yazin
SELECT *
FROM musteriler
WHERE isim LIKE '_atma';
SORU : Ikinci harfi a olan musterilerin tum bilgilerini yazdiran QUERY yazin
SELECT *
FROM musteriler
WHERE isim LIKE '_a%';
SORU : Ucuncu harfi s olan musterilerin tum bilgilerini yazdiran QUERY yazin
SELECT *
FROM musteriler
WHERE isim LIKE '__s%';
LIKE Condition
SORU : Ucuncu harfi s olan ismi 4 harfli musterilerin tum bilgilerini yazdiran QUERY yazin
SELECT *
FROM musteriler
WHERE isim LIKE '__s_';
SORU : Ilk harfi F olan en az 4 harfli musterilerin tum bilgilerini yazdiran QUERY yazin
SELECT *
FROM musteriler
WHERE isim LIKE 'F___%';
SORU : Ikinci harfi a,[Link] m olan musterilerin tum bilgilerini yazdiran QUERY yazin
SELECT *
FROM musteriler
WHERE isim LIKE '_a_m%';
—- TEKRAR —-
JOIN : Bir tablonun kendisinden veya iki farkli tablodan istedigimiz field’lari kullanarak
yeni tablo elde etmek icin kullanilir.
- join islemi yeni tablo olusturmaz fakat yazdigimiz sorgu sonuclarini istedigimiz
sekildeki bir tabloda gormemizi saglar
- Daha once gordugumuz union,intersect,minus komutlari tablolari birlestirmiyor, ayri
ayri sorgular yapip sorgu sonuclarini birlestiriyordu. Hatta farkli tablolardan gelen ism
ve sehir gibi degerleri tablo olarak yansitamadigindan alt alta yazmamiz gerekiyordu.
- INNER : her iki tabloda ortak olan recordlara ait her iki tablodaki bilgileri gosterir
- LEFT JOIN: Birinci tablodaki tum recordları ve ortak recordlara ait ikinci tablodaki
bilgileri gosterir
- RIGHT JOIN : Ikinci tablodaki tum recordlari ve ortak recordlara ait birinci tablodaki
bilgileri gosterir
- FULL JOIN : Her iki tablodaki tum record’lari gosterir, bir tabloda olup oteki tabloda
karsiligi olmayan bilgiler icin null yazar
—- TEKRAR —-
- SELF JOIN : Bir tablonun kendi icerisinde farkli bir kurala gore INNER JOIN
yapilmasidir.
Ayni tablo iki kere kullanilacagi icin gecici olarak tabloya iki farkli isim verilir ve bu
genelde tablo adinin ilk harfi ile 1 ve 2 rakamlarinin kullanilmasiyla olur (p1,p2 gibi)
FROM satirinda tablo adi ile kisaltmalar birlikte yazilarak tanimlanir
FROM personel p1 INNER JOIN personel p2
ON komutundan sonra olusturulan iki sanal tablo arasindaki kural tanimlanir
- LIKE : WHERE komutundan sonra kullanilir, wildcards kullanimina izin vererek
PATTERN MATCHING (sekil benzetme) ozelligini kullandirir
- (%) : yazdigimiz yerden sonra 0 veya daha fazla karakter olabilir
- (_) : sadece 1 tane karakteri gosterir
LIKE Condition
3) REGEXP_LIKE =>Daha karmaşık sorgular için herhangi bir kod, metin icerisinde istenilen yazi
veya kod parcasinin aranip bulunmasini saglayan kendine ait soz dizimi olan bir yapidir.
(REGEXP_LIKE) PostgreSQL de ‘’ ~ ‘’ karekteri ile kullanilir
INSERT INTO kelimeler VALUES (1001, 'hot', 3);
CREATE TABLE kelimeler INSERT INTO kelimeler VALUES (1002, 'hat', 3);
( INSERT INTO kelimeler VALUES (1003, 'hit', 3);
id int UNIQUE, INSERT INTO kelimeler VALUES (1004, 'hbt', 3);
kelime varchar(50) NOT NULL, INSERT INTO kelimeler VALUES (1008, 'hct', 3);
Harf_sayisi int INSERT INTO kelimeler VALUES (1005, 'adem', 4);
); INSERT INTO kelimeler VALUES (1006, 'selim', 5);
INSERT INTO kelimeler VALUES (1007, 'yusuf', 5);
SORU : Ilk harfi h,son harfi t olup [Link] a veya i olan 3 harfli kelimelerin tum bilgilerini yazdiran
QUERY yazin
SELECT *
FROM kelimeler
WHERE kelime ~ 'h[ai]t';
LIKE Condition
SORU : Ilk harfi h,son harfi t olup [Link] a ile k arasinda olan 3 harfli kelimelerin tum bilgilerini
yazdiran QUERY yazin
SELECT *
FROM kelimeler
WHERE kelime ~ 'h[a-k]t';
SORU : Icinde m veya i olan kelimelerin tum bilgilerini yazdiran QUERY yazin
SELECT *
FROM kelimeler
WHERE kelime ~ '[mi]';
SORU : a veya s ile baslayan kelimelerin tum bilgilerini yazdiran QUERY yazin
SELECT *
FROM kelimeler
WHERE kelime ~ '^[as]';
LIKE Condition
SORU : m veya f ile biten kelimelerin tum bilgilerini yazdiran QUERY yazin
SELECT *
FROM kelimeler
WHERE kelime ~ '[mf]$';
NOT LIKE Condition
SORU 1 : ilk harfi h olmayan kelimelerin tum bilgilerini yazdiran QUERY yazin
SELECT *
FROM kelimeler
WHERE kelime NOT LIKE 'h%';
SELECT *
FROM kelimeler
WHERE kelime NOT LIKE '%a%';
NOT LIKE Condition
SORU 3 : ikinci ve ucuncu harfi ‘de’ olmayan kelimelerin tum bilgilerini yazdiran QUERY yazin
SELECT *
FROM kelimeler
WHERE kelime NOT LIKE '_de%';
SORU 4 : 2. harfi e,i veya o olmayan kelimelerin tum bilgilerini yazdiran QUERY yazin
SELECT *
FROM kelimeler
WHERE kelime !~ '[_eio]';
LIKE Condition
LIKE: Sorgulama yaparken belirli patternleri(kalıp ifadelerle sorgu) kullanabilmezi sağlar
ILIKE: Sorgulama yaparken büyük/küçük harfe duyarsız olarak eşleştirir.
LIKE = ~~
ILIKE = ~~*
NOT LIKE = !~~
NOT ILIKE = !~~*
NOT REGEXP_LIKE = !~*
NOT REGEXP_LIKE = !~
173..177
SQL
18.07.2023
Alter Table-Transaction
SELECT UPPER(kelime)
FROM kelimeler;
SELECT LOWER(kelime)
FROM kelimeler; SELECT INITCAP(kelime)
FROM kelimeler;
DISTINCT
--DISTINCT clause, çağrılan terimlerden tekrarlı olanların sadece birincisini alır.
CREATE TABLE musteri_urun INSERT INTO musteri_urun VALUES (10, 'Ali', 'Portakal');
( INSERT INTO musteri_urun VALUES (10, 'Ali', 'Portakal');
urun_id int, INSERT INTO musteri_urun VALUES (20, 'Veli', 'Elma');
musteri_isim varchar(50), INSERT INTO musteri_urun VALUES (30, 'Ayse', 'Armut');
urun_isim varchar(50) INSERT INTO musteri_urun VALUES (20, 'Ali', 'Elma');
); INSERT INTO musteri_urun VALUES (10, 'Adem', 'Portakal');
INSERT INTO musteri_urun VALUES (40, 'Veli', 'Kaysi');
INSERT INTO musteri_urun VALUES (20, 'Elif', 'Elma');
SELECT DISTINCT urun_isim
FROM musteri_urun;
SELECT *
FROM musteri_urun
ORDER BY urun_id
OFFSET 3 ROW
FETCH NEXT 4 ROW ONLY;
ALTER TABLE STATEMENT
ALTER TABLE statement tabloda add, Type(modify)/Set, Rename veya drop columns
islemleri icin kullanilir.
ALTER TABLE statement tablolari yeniden isimlendirmek icin de kullanilir.
CREATE TABLE personel
(
id int,
isim varchar(50),
sehir varchar(50),
maas int,
sirket varchar(20),
CONSTRAINT personel_pk PRIMARY KEY (id)
);
INSERT INTO personel VALUES(123456789, 'Ali Yilmaz', 'Istanbul', 5500, 'Honda'); INSERT
INTO personel VALUES(234567890, 'Veli Sahin', 'Istanbul', 4500, 'Toyota'); INSERT INTO
personel VALUES(345678901, 'Mehmet Ozturk', 'Ankara', 3500, 'Honda'); INSERT INTO
personel VALUES(456789012, 'Mehmet Ozturk', 'Izmir', 6000, 'Ford'); INSERT INTO
personel VALUES(567890123, 'Mehmet Ozturk', 'Ankara', 7000, 'Tofas'); INSERT INTO
personel VALUES(456715012, 'Veli Sahin', 'Ankara', 4500, 'Ford'); INSERT INTO personel
VALUES(123456710, 'Hatice Sahin', 'Bursa', 4500, 'Honda');
ALTER TABLE STATEMENT
NOT :PostgreSQL de Transaction kullanımı için «Begin;» komutuyla başlarız sonrasında tekrar
yanlış bir veriyi düzelmek veya bizim için önemli olan verilerden
sonra ekleme yapabilmek için "SAVEPOINT savepointismi" komutunu
kullanırız ve bu savepointe dönebilmek için "ROLLBACK TO savepointismi" komutunu
kullanırız ve rollback çalıştırıldığında savepoint yazdığımız satırın üstündeki
verileri tabloda bize verir ve son olarak Transaction'ı sonlandırmak için mutlaka
"COMMIT" komutu kullanılır.
INTERVIEW QUESTION
CREATE TABLE personel
( INSERT INTO personel VALUES(123456789, 'Johnny Walk', 'New Hampshire', 2500, 'IBM');
id number(9), INSERT INTO personel VALUES(234567891, 'Brian Pitt', 'Florida', 1500, 'LINUX');
isim varchar2(50), INSERT INTO personel VALUES(245678901, 'Eddie Murphy', 'Texas', 3000, 'WELLS FARGO');
sehir varchar2(50), INSERT INTO personel VALUES(456789012, 'Teddy Murphy', 'Virginia', 1000, 'GOOGLE');
INSERT INTO personel VALUES(567890124, 'Eddie Murphy', 'Massachuset', 7000, 'MICROSOFT');
maas number(20),
INSERT INTO personel VALUES(456789012, 'Brad Pitt', 'Texas', 1500, 'TD BANK');
sirket varchar2(20)
INSERT INTO personel VALUES(123456719, 'Adem Stone', 'New Jersey', 2500, 'IBM');
);
SELECT isim,id
FROM personel
WHERE id IN (SELECT id
FROM isciler
WHERE [Link]=[Link]);
2) Her iki tablodaki ortak id ve isme sahip kayitlari listeleyen query yaziniz
SELECT isim,id
FROM personel
INTERSECT
SELECT isim,id
FROM personel;
INTERVIEW QUESTION
3) Personel tablosunda kac farkli sehirden personel var?
4) Personel tablosunda id’si cift sayi olan personel’in tum bilgilerini listeleyen Query yaziniz
SELECT *
FROM personel
WHERE MOD (id,2)=0;
INTERVIEW QUESTION
5) Personel tablosunda kac tane kayit oldugunu gosteren query yazin
SELECT COUNT(id) AS kayit_sayisi
SELECT COUNT(*)
FROM personel;
FROM personel;
6) Isciler tablosunda en yuksek maasi alan kisinin tum bilgilerini gosteren query yazin
SELECT *
FROM isciler
WHERE maas IN (SELECT
MAX(maas)
FROM isciler);
INTERVIEW QUESTION
7) Personel tablosunda en dusuk maasi alan kisinin tum bilgilerini gosteren query yazin
SELECT *
FROM personel
ORDER BY maas
FETCH NEXT 1 ROW ONLY;
SELECT MAX(maas)
FROM personel
WHERE maas<>(SELECT MAX(maas)
FROM personel);
INTERVIEW QUESTION
9) Isciler tablosunda ikinci en dusuk maasi alan iscinin tum bilgilerini gosteren query yazin
SELECT *
FROM isciler
ORDER BY maas
OFFSET 1 ROW
FETCH NEXT 1 ROW ONLY;
INTERVIEW QUESTION
10) Isciler tablosunda en yuksek maasi alan iscinin disindaki tum iscilerin, tum bilgilerini
gosteren query yazin
SELECT *
FROM isciler
WHERE maas<>( SELECT MAX(maas)
FROM isciler)
ORDER BY maas DESC;
Tekrar Sorulari
1) DELETE ile TRUNCATE arasindaki fark nedir ?
2) DELETE ile DROP arasindaki fark nedir?
3) DROP ile DROP PURGE arasindaki fark nedir?
4) Asagidaki sorgu ile ayni sonucu veren bir sorgu yaziniz.
SELECT *
FROM ogrenciler
WHERE yas>=8 AND yas<=17;
5) Asagidaki sorgu ile ayni sonucu veren bir sorgu yaziniz
SELECT *
FROM ogrenciler
WHERE yas<8 OR yas>17;
6) Asagidaki sorgu ile ayni sonucu veren bir sorgu yaziniz
SELECT *
FROM ogrenciler
WHERE yas = 6 OR yas = 7 OR yas = 8 OR yas = 9;
Tekrar Sorularinin Cevaplari
1) DELETE ile TRUNCATE arasindaki fark nedir ?
A) TRUNCATE tum kayitlari siler, DELETE istersek tum kayitlari,istersek belirli kayitlari siler
B) DELETE ile sildigimiz datalari ROLLBACK yapabiliriz, TRUNCATE ile silinenler geri getirilemez
C) DELETE ile WHERE komutunu kullanabiliriz ama TRUNCATE ile kullanamayiz
2) DELETE ile DROP arasindaki fark nedir?
DELETE kayitlari siler, DROP ise tab;olari.
3) DROP ile DROP PURGE arasindaki fark nedir?
DROP ile sildigimiz dosyalar RECYLEBIN’e gider. PURGE RECYLEBIN’deki dosyalari geri getirilmeyecek sekilde siler. DROP
PURGE beraber kullanilirsa geri getirilmeyecek sekilde silinir.
4) Asagidaki sorgu ile ayni sonucu veren bir sorgu yaziniz.
SELECT *
SELECT *
FROM ogrenciler
FROM ogrenciler
WHERE yas>=8 AND yas<=17;
WHERE yas BETWEEN 8 AND 17;
5) Asagidaki sorgu ile ayni sonucu veren bir sorgu yaziniz
SELECT *
SELECT *
FROM students FROM ogrenciler
WHERE age<8 OR yas>17; WHERE yas NOT BETWEEN 8 AND 17;
6) Asagidaki sorgu ile ayni sonucu veren bir sorgu yaziniz
SELECT * SELECT *
FROM students FROM ogrenciler
WHERE yas = 6 OR yas= 7 OR yas = 8 OR yas = 9; WHERE yas IN (6,7,8,9);
KISA TEKRAR
Personel isminde bir tablo [Link] id,isim,sehir,maas ve sirket field’lari olsun. Id’yi [Link] PK yapin
CREATE TABLE personel
INSERT INTO personel VALUES(123456789, ‘Ali Yilmaz', ‘Istanbul', 5500, ‘Honda');
(
INSERT INTO personel VALUES(234567890, ‘Veli Sahin', ‘Istanbul', 4500, ‘Toyota');
id number(9), INSERT INTO personel VALUES(345678901, ‘Mehmet Ozturk', ‘Ankara', 3500, 'Honda');
isim varchar2(50), INSERT INTO personel VALUES(456789012, 'Mehmet Ozturk', ‘Izmir', 6000, ‘Ford');
sehir varchar2(50), INSERT INTO personel VALUES(567890123, 'Mehmet Ozturk', ‘Ankara', 7000, ‘Tofas');
maas number(20), INSERT INTO personel VALUES(456715012, 'Veli Sahin', ‘Ankara', 4500, ‘Ford'); INSERT
sirket varchar2(20), INTO personel VALUES(123456710, ‘Hatice Sahin', ‘Bursa', 4500, 'Honda');
CONSTRAINT personel_pk PRIMARY KEY (id)
);
Personel_bilgi isminde bir tablo [Link] id,tel ve cocuk sayisi field’lari olsun. Id’yi FK yapin ve personel
tablosu ile relation kurun
INSERT INTO personel_bilgi VALUES(123456789, ‘5302345678' , 5);
INSERT INTO personel_bilgi VALUES(234567890, ‘5422345678', , 4);
CREATE TABLE personel_bilgi INSERT INTO personel_bilgi VALUES(345678901, ‘5354561245', 3);
( INSERT INTO personel_bilgi VALUES(456789012, '5411452659', 3);
id number(9), INSERT INTO personel_bilgi VALUES(567890123, '5551253698', 2);
tel char(10) UNIQUE , INSERT INTO personel_bilgi VALUES(456789012, '5524578574', 2);
cocuk_sayisi number(2), INSERT INTO personel_bilgi VALUES(123456710, ‘5537488585', 1);
CONSTRAINT personel_bilgi_fk FOREIGN KEY (id) REFERENCES personel(id)
);
KISA TEKRAR
UPDATE personel_bilgi
SET cocuk_sayisi=2
WHERE cocuk_sayisi=5;
Tekrar Sorulari
SORU 2) Persone tablosundan ucreti 4500 veya 5000 olanlarin maaslarini %10 artirin
UPDATE personel
SET maas=maas*1.1
WHERE maas IN (4500,5000);
SORU 7) Persone tablosundan maasi 4000 ile 5000 arasinda olanlari silin