0% found this document useful (1 vote)
17 views120 pages

SQLInstructor DEV - PPTX

Uploaded by

umutoyun04
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (1 vote)
17 views120 pages

SQLInstructor DEV - PPTX

Uploaded by

umutoyun04
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

189..

195
NT 04.10.2023
SQL
Introduction
SQL
Structured Query Language
Yapılandırılmış Sorgu Dili
DATA-DATABASE
DATABASE (VERITABANI) NEDIR?

Veritabanı genellikle elektronik olarak bir bilgisayar sisteminde depolanan


yapılandırılmış(Structured) bilgi veya veriden oluşan düzenli bir koleksiyondur.
Veritabanı genellikle bir Veritabanı Yönetim Sistemi DBMS
(DataBaseManagementSystem ) ile kontrol edilir.

Çoğu veritabanında veri yazma ve sorgulama için yapılandırılmış sorgu dili SQL
kullanılır.
DATABASE’IN FAYDALARI NELERDIR

1) Yüksek miktarda bilgi depolanabilir


2) Oluşturma, Okuma, Değiştirme ve Silme kolayliği
Create,Read,Update,Delete (CRUD)
3) Girişin kolay ve kontrollü olmasi
4) Dataya ulaşim kolayliği
5) Güvenlik
Database Management System (DBMS)

- Veritabanlarını yönetmek, kullanmak, geliştirmek ve bakımını yapmak için


kullanılan yazılımlara denir.

Database’e erisimi duzenler


Create,Read,Update,Delete islemlerini duzenler
Data guvenligini saglar
Sorgular oluşturur ve sorgular iletilir,
Raporlar oluşturur ve raporları işletir,
Uygulamayı kontrol eder
Diger uygulamalarla (Application) iletisimi saglar.
Cok Kullanilan DBMS(Veri Tabani Yonetim Sistemleri)

SQL Server : Microsoft tarafindan gelistirilmistir

Negatif: Pahali – Kurumsal Kullanicilar icin binlerce dolar odenmesi gereklidir


Pozitif : Zengin bir user interface’e sahip ve cok buyuk datalarin
kullanilmasinda sorunsuz calisir.

MySQL Server : Isvecli MySQL firmasi tarafindan gelistirildi.


2010’da Oracle satin aldi

Negatif: Es zamanli cok fazla islem girildiginde calismayi durdurabilir.


Pozitif: Acik kaynak. Online destek ve ucretsiz cok fazla dokuman var
Cok Kullanilan DBMS(Veri Tabani Yonetim Sistemleri)
PostgreSQL Server : Created by a computer science professor
Michael Stonebraker.
Pozitif:Yeni nesil olarak ortaya cikti. açık kaynaklı, zor gorevler
icin ideal olabilir.

PL/SQL Oracle database sunuculari icinde depolanir


PL/SQL SQL komutlarini ozellikle karsilamak uzere dizayn edilmistir.

Pozitif: PL/SQL yuksek guvenlik seviyesi saglar ve


Object-Oriented Programming’e uyumludur
TABLOLAR (TABLES)

Headers====>

Row (Record) ====>

Row (Record) ====>

Row (Record) ====>

Row (Record) ====>


RELATIONAL DATABASES (ILISKILI TABLOLAR)

SQL Databases datalari iliskili tablolarda depolar.

Tablolar arasi iliskiler net olmalidir.

Tablolar arasi gecis kolay olmalidir

Tablolarin ve iliskilerin butunune


SCHEMA denir

Relational Databases, SQL Databases (Structured Query Language) olarak


da adlandirilir
RELATIOANAL DATABASES (ILISKILI TABLOLAR)
Non Relational Databases(non-SQL Database)

SQL veritabanı verilerle


ilgilenirken Yapısal Sorgu Dili
kullanır. Veri yapısını
belirlemek için önceden
tanımlanmış şemalar
gerektirir.

NoSQL veritabanı verilerle çalışırken Yapılandırılmamış Sorgu Dili kullanır.


SQL Komutlari
SQL Komutlari

SQL komutları 4 ana gruba ayrılır:

1. Veri Sorgulama Dili (Data Query Language - DQL)


DQL içindeki SELECT komutu ile veri tabanında yer alan mevcut kayıtların bir kısmını veya
tamamını tanımlanan koşullara bağlı olarak alır.
SELECT : Veritabanındaki verileri alır.

2. Veri Kullanma Dili (Data Manipulation Language - DML)


DML komutları ile veri tabanlarında bulunan verilere işlem yapılır. DML ile veritabanına yeni
kayıt ekleme, mevcut kayıtları güncelleme ve silme işlemleri yapılır.
INSERT : Veritabanına yeni veri ekler.
UPDATE : Veritabanındaki verileri günceller.
DELETE : Veritabanındaki verileri siler.
SQL Komutlari

3. Veri Tanimlama Dili (Data Definition Language - DDL)


DDL komutları ile veritabanı ve tabloları oluşturma, değiştirme ve silme işlemleri yapılır:

CREATE : Bir veritabanı veya veritabanı içinde tablo oluşturur.


ALTER : Bir veritabanı veya veritabanı içindeki tabloyu günceller.
DROP : Bir veritabanını veya veritabanı içindeki tabloyu siler.

4. Veri Kontrol Dili (Data Control Language - DCL)


DCL komutları ile kullanıcılara veritabanı ve tablolar için yetki verilir veya geri alınır:
GRANT : Bir kullanıcıya yetki vermek için kullanılır.
REVOKE : Bir kullanıcıya verilen yetkiyi geri almak için kullanılır.
SQL Data Types
String Data Types
Data Type Aciklama
char(size) Maximum boyutu 2000 byte olur.
1 karakter 1 byte kullanir. “size” database’e eklenecek karakter sayisidir.
“char” data tipinden uzunlugu sabit datalari depolar. (Strings)
“char” SSN, zip kodu gibi uzunlugu sabit datalari depolamak icin idealdir.
nchar(size) Maximum boyutu 2000 byte olur.
1 karakter 2 byte kullanir
“size” depolanacak karakter sayisi’dir.
“nchar” Unicode datalari depolamak icin kullanilir.
Genellikle farkli dillerdeki karakterler icin kullanilir
Uzunlugu belli Stringler icin kullanilir.
varchar(size) Maximum boyutu 4000 byte olur.
1 karakter 1 byte kullanir.
“size” database’e eklenecek max. karakter sayisidir.
Degisken uzunluktaki stringler icin kullanilir.
nvarchar(size) Maximum boyutu 8000 byte olur.
1 karakter 2 byte kullanir
“size” depolanacak karakter sayisi’dir.
Degisken uzunluktaki stringlerin Unicode degerleri icin kullanilir.
SQL Data Types
Numeric Data Types
Data Type Aciklama
“Precision” (p) sayidaki rakam sayisidir
“Scale” (s) virgulden sonra kac rakam oldugunu belirler

1) “numeric(5, 2)” virgulden once 3,vigulden sonra 2 rakam


olan sayi ==> 123,45

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

Alabileceği değerler –2147483648 ile 2147483647 arasındadır.


INTEGER
Hafızada kapladığı alan: 4 byte.

-[Link].854.775.808 ile [Link].854.775.807 arasında değer


BIGINT alır. “Boyut” ile alabileceği sınırı belirtebiliriz.
Hafızada kapladığı alan: 8 byte.
0’dan başlar. Tabloya bir veri girildiğinde bir artırılır, 1 olur. Diğer databaselerde
SERIAL bulunan Auto Increment özelliğinin karşılığıdır.
Serial ifadeler eşsiz olacak diye bir kural yoktur.
SQL Data Types
Date Data Types

Data Type Aciklama

“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

Data Type Aciklama

“BYTEA” resim,video,ses gibi datalari binary formatina cevirerek depolar.


BYTEA
Create Table Komutu

1) Create – Tablo Oluşturma 2) Var olan tablodan yeni tablo olusturmak


CREATE TABLE tablo_adı
CREATE TABLE yeni_tablo_adı
(
sütun_adı1 data tipi, AS SELECT sütun1,sütun2,…
sütun_adı2 data tipi, FROM var_olan_tablo;
….
);
Insert Into Komutu

INSERT INTO : PostgreSQL’de tabloya bir veya birden fazla kayıt eklemek için
kullanılır.

1) Tum Field’lere data eklemek icin


INSERT INTO students VALUES ('1001', ’Ali Can’, 85.60, '2020-01-07' );

2) Bazi Field’lere data eklemek icin


INSERT INTO students (id,full_name) VALUES ('123456789, ’Ali Can’);
Tablodaki Tum Field’lari Cagirma(SELECT )

Tablodaki Tum Field’lari Cagirma

SELECT * FROM tablo_adı; Tablodaki tüm datalari getirir

SELECT sütun1,sütun2,… FROM tablo_adı; Tablodan sadece sütun1,sütun2,... sütunlarındaki


dataları getirir
CONSTRAINT

UNIQUE - Bir sütundaki tüm değerlerin BENZERSİZ/TEKRARSIZ yani tek olmasını


sağlar.
NOT NULL - Bir Sütunun NULL içermemesini sağlar.
NOT NULL kısıtlaması için constraint ismi tanımlanmaz. Bu kısıtlama veri türünden
hemen sonra yerleştirilir
PRIMARY KEY - Bir sütünün NULL içermemesini ve sütundaki verilerin
BENZERSİZ olmasını sağlar. (NOT NULL ve UNIQUE)
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 sütuna yerleştirilebilecek değer aralığını sınırlamak için kullanılır .
Bir field’in “tekrarsiz” deger almasi nasil saglanir?
Bir fieldi “tekrarsiz” yapmak icin , field’in Data Type’dan sonra “UNIQUE” yazılır.

örn:CREATE TABLE developers();


Bir field’in “NULL” deger almamasi nasil saglanir?
Bir fieldin “NULL” değer kabul etmemesi için , fieldin Data Type’dan sonra “NOT
NULL” yazılır.

örn:CREATE TABLE doctors();


Primary Key
Primary Key (birincil anahtar), bir veri tablosunda yer alan her satır için
bir vekil / tanımlayıcı (identify) görevi görür, kısıtlamadır (constraint) ve
eşsizdir (Unique).
Satırlara ait değerlerin karışmaması adına
bu alana ait bilginin tekrarlanmaması
gerekir.

Çoğunlukla tek bir alan (id, user_id, e_mail,


username, national_identification_number
vb.) olarak kullanılsa da birden fazla alanın
birleşimiyle de oluşturulabilir
Primary Key

Primary Key değeri boş geçilemez ve NULL


değer alamaz.

Relational veri tabanlarında (relational


database management system) mutlaka
birincil anahtar olmalıdır.

Not : Bir Tabloda 1 tane primary Key olur.


Not : Primary Key benzersiz (Unique) olmalidir ama her
unique data Primary Key degildir
Not : Primary key her turlu datayi icerebilir. Sayi, String..
Not : Her tabloda Primary Key olmasi zorunlu degildir
Primary Key
Primary Key, dış dünyadaki gerçek verileri
temsil ediyorsa, orneğin; TC kimlik numarası,
bir kitabın ISBN numarası, bir ürünün
ismi,email hesabi gibi buna Natural key denir

Genel olarak kayıt eklenmeden önce üretilen


sira numarasi gibi sayisal degerlere Surrogate
Key denir
Foreign Key
Foreign Key iki tablo arasinda relation olusturmak icin kullanilir
Foreign Key baska bir tablodaki Primary Key ile iliskilendirilmis olmalidir

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.

1) Michael Scott’un manager'i kimdir?


2) Angela Martin’in Job_Name’i nedir ?
3) Manual Tester’larin ortalama Salary’si ne kadardir ?
4) En yuksek Salary’yi alan kisinin Job_Name’i nedir?
SQL Composite Key

Composite Key birden fazla field(kolon)’in


kombinasyonu ile olusturulur.

Tek basina bir kolon Primary Key olma ozelliklerini tasimiyorsa, bu ozellikleri elde
etmek icin birden fazla kolon birlestirilerek Primary olusturulur
“UNIQUE KEY” & “PRIMARY KEY”

“UNIQUE KEY” ve “PRIMARY KEY” arasindaki farklar

Primary Key Unique Key


Bir Tabloda 1 tane olur Bir tabloda birden fazla olabilir
NULL deger Kabul etmez NULL degeri Kabul eder

“UNIQUE KEY” ve “PRIMARY KEY” ortak ozellikleri


Duplication(Cift Kullanim)’a izin vermez
Related Tablolarla Calisma
One to One Relation

1) Tom Hanks’in adresi nedir?


2) Kevin Star’in eyaleti nedir?
3) ID’si 17 olan kisinin sehri nedir?
Related Tablolarla Calisma
One to Many Relation

1) Biology dersi alan ogrenciler kimler?


2) Selective ders alan ogrencilerin isimleri ?
3) CourseFee 600 olan ogrencilerin isimleri ?
Related Tablolarla Calisma
Many to Many Relation

1) Ogretmeni Mark Adam olan ogrencilerin isimleri nedir?


2) Kevin Star’in ogretmenlerinin isimleri nedir?
Bir Tabloya “Primary Key” Nasil Eklenir

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.

2) CONSTRAINT Keyword Kullanilarak Primary Key Tanimlanabilir

“CONSTRAINT constraintName PRIMARY KEY(column1, column2, ... column_n)”

örn:CREATE TABLE students();


Tabloya “Foreign Key” Nasil Eklenir ?
Foreign Key iki tablo arasinda Relation olusturmak icin kullanilir.
Foreign Key baska bir tablonun Primary Key’ine baglidir.
Referenced table (baglanilan tablo, Primary Key’in oldugu Tablo) parent table olarak
adlandirilir. Foreign Key’in oldugu tablo ise child table olarak adlandirilir.
Bir Tabloda birden fazla Foreign Key olabilir
Foreign Key NULL degeri alabilir

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 ?

CHECK ile bir alana girilebilecek değerleri sınırlayabiliriz.


Mesela tablomuzda YAŞ bir alanı number data tipinde yani sayısal alan olarak
belirlemiş olabiliriz. Ancak bu alan negatif sayı girilmesi anlamsız olacağı için
CHECK yapısını kullanarak negatif giriş yapılmasını engelleyebiliriz.

Ornek : sehirler2 tablosu olusturalim, nufusun negatif deger girilmemesi icin


sinirlandirma (Constraint) koyalim

CREATE TABLE sehirler2 (


alan_kodu int PRIMARY KEY,
isim varchar(20) NOT NULL,
nufus int CHECK (nufus>0)
);
DQL - SELECT KOMUTU ve WHERE KOŞULU
–Tablodaki Belli Bir Field’i Cagirma

SELECT isim
FROM calisanlar;

–Tablodaki Koşulu Sağlayan Belli Bir Field’i Cagirma


SELECT isim
FROM calisanlar
WHERE maas>5000;
Tablodan sadece maas’ı 5000 den buyuk olanlarin isim field’indaki datalari getirir
WHERE ile Kullanilan Mantiksal Operatorler
= ==> Equal to sign
> ==> Greater than sign
< ==> Less than sign
>= ==> Greater than or equal to sign
<= ==> Less than or equal to sign
<> ==> Not Equal to sign
AND ==> And operator

OR ==> Or operator
DQL - SELECT KOMUTU

Tablodan Birden Fazla Field’i Cagirma

SELECT column1,column2 FROM table_name;

SELECT column1,column2 FROM table_name WHERE column_name=condition;


DML - DELETE KOMUTU
* DELETE FROM tablo_adı; ---> Tablonun tüm içeriğini siler.

* 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.

!!! TRUNCATE TABLE where ...... OLMAZ

TRUNCATE TABLE table_name; -- tablodaki verileri siler


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

-- on delete cascade sayesinde parenttaki silinen bir kayıt ile ilişkili olan tüm child kayıtlarını silebiliriz

-- cascade yoksa önce child silinir sonra parent


Drop Table Komutu
-Tabloyu SCHEMA’dan kaldırma:
Oluşturduğumuz tabloları silmek için DROP anahtar kelimesi kullanılır.

DROP TABLE (IF EXISTS) tablo_adı;

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

AND (ve): Belirtilen şartların her ikiside gerçekleşiyorsa o kayıt listelenir.

OR (veya): Belirtilen şartlardan biri gerçekleşirse, kayıt listelenir.


BETWEEN CONDITION
BETWEEN Condition iki mantiksal ifade ile tanimlayabilecegimiz durumlari
tek komutla yazabilme imkani verir.
Yazdigimiz 2 sinir da araliga dahildir (INCLUSIVE)

Ö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)

1) Urun_id 20 ile 40 arasinda olmayan urunlerin tum bilgilerini listeleyiniz


SELECT *
FROM musteriler
WHERE urun_id<20 OR urun_id>40;
AGGREGATE FONKSİYON KULLANIMI
AGGREGATE FONKSİYON birden çok değer üzerinde bir hesaplama gerçekleştirir
ve tek bir değer döndürür.

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)?

SYNTAX: UPDATE table_name


SET column_name=yeni değer,column2=yeni değer2
WHERE condition
IS NULL CONDITION
Arama yapilan field’da NULL degeri almis kayitlari getirir.

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');
);

person tablosundaki datalari adres’e gore siralayin


GROUP BY CLAUSE
Group By komutu sonuçları bir veya daha fazla sütuna göre gruplamak için
SELECT komutuyla birlikte kullanılır

1) Isme gore alinan toplam urunleri bulun


GROUP BY CLAUSE
2) Urun ismine gore urunu alan toplam kisi sayisi

3) Alinan ürün miktarina gore musteri sayisi


HAVING CLAUSE
HAVING, AGGREGATE FUNCTION’lar ile birlikte kullanilan FILTRELEME komutudur.

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) Her sirketin MIN maaslarini eger 2000’den buyukse goster


HAVING CLAUSE
2)Ayni isimdeki kisilerin aldigi toplam gelir 10000 liradan fazla ise ismi ve
toplam maasi gosteren sorgu yaziniz

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

NOT : [Link] sonuna ORDER BY komutunu kullanirsaniz tum tabloyu istediginiz


siralamaya gore siralar
ORDER BY maas;
UNION OPERATOR
3) Sehirlerden odenen ucret 3000’den fazla olanlari ve personelden ucreti 5000’den az
olanlari bir tabloda maas miktarina gore sirali olarak gosteren sorguyu yaziniz

SELECT sehir AS isci_veya_sehir_ismi , maas


FROM personel
WHERE maas>3000
UNION
SELECT isim AS isci_veya_sehir_ismi , maas
FROM personel
WHERE maas<5000;
UNION OPERATOR
2 Tablodan Data Birlestirme
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');
( INSERT INTO personel VALUES(345678901, 'Mehmet Ozturk', 'Ankara', 3500, 'Honda');
id int, INSERT INTO personel VALUES(456789012, 'Mehmet Ozturk', 'Izmir', 6000, 'Ford');
isim varchar(50), INSERT INTO personel VALUES(567890123, 'Mehmet Ozturk', 'Ankara', 7000, 'Tofas');
sehir varchar(50), INSERT INTO personel VALUES(456715012, 'Veli Sahin', 'Ankara', 4500, 'Ford');
maas int, INSERT INTO personel VALUES(123456710, 'Hatice Sahin', 'Bursa', 4500, 'Honda');
sirket varchar(20),
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);
CREATE TABLE personel_bilgi ( INSERT INTO personel_bilgi VALUES(234567890, '5422345678', 4);
id int, INSERT INTO personel_bilgi VALUES(345678901, '5354561245', 3);
tel char(10) UNIQUE , INSERT INTO personel_bilgi VALUES(456789012, '5411452659', 3);
cocuk_sayisi int, INSERT INTO personel_bilgi VALUES(567890123, '5551253698', 2);
CONSTRAINT personel_bilgi_fk FOREIGN KEY INSERT INTO personel_bilgi VALUES(456789012, '5524578574', 2);
(id) REFERENCES personel(id) INSERT INTO personel_bilgi VALUES(123456710, '5537488585', 1);
);
UNION OPERATOR
id’si 123456789 olan personelin Personel tablosundan sehir ve maasini, personel_bilgi
tablosundan da tel ve cocuk sayisini yazdirin

SELECT sehir AS sehir_tel ,maas AS cocuk_sayisi_ve_maas


FROM personel
WHERE id='123456789'

UNION

SELECT tel,cocuk_sayisi
FROM personel_bilgi
WHERE id= '123456789';

NOT : Union islemi yaparken


1)Her 2 QUERY’den elde edeceginiz tablolarin sutun sayilari esit olmali
2)Alt alta gelecek sutunlarin data type’lari ayni olmali
UNION ALL OPERATOR
UNION islemi 2 veya daha cok SELECT isleminin sonuc KUMELERINI birlestirmek icin kullanilir,
Ayni kayit birden fazla olursa, sadece bir tanesini alir.

UNION ALL ise tekrarli elemanlari, tekrar sayisinca yazar.

NOT : UNION ALL ile birlestirmelerde de

1)Her 2 QUERY’den elde edeceginiz tablolarin sutun sayilari esit olmali


2)Alt alta gelecek sutunlarin data type’lari ayni olmali
UNION ALL OPERATOR
1) Personel tablosundada maasi 5000’den az olan tum isimleri ve maaslari bulunuz

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;

3) Ayni sorguyu UNION ALL ile iki kere yazarak calistirin

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;

2) Tabloda personel maasi 5000’den az olan tum isimleri ve maaslari yazdirin


SELECT isim,maas
FROM personel
WHERE maas<5000;

3) Iki sorguyu UNION ve UNION ALL ile birlestirin


INTERSECT OPERATOR
1) Personel tablosundan Istanbul veya Ankara’da calisanlarin id’lerini yazdir

SELECT id
FROM personel
WHERE sehir IN (‘Istanbul’,’Ankara’);

2) Personel_bilgi tablosundan 2 veya 3 cocugu olanlarin id lerini yazdirin


SELECT id
FROM personel_bilgi
WHERE cocuk_sayisi IN (2,3);

3) Iki sorguyu INTERSECT ile birlestirin


INTERSECT OPERATOR
1) Maasi 4800’den az olanlar veya 5000’den cok olanlarin id’lerini
listeleyin

SELECT id
FROM personel
WHERE maas NOT BETWEEN 4800 AND 5500;

2) Personel_bilgi tablosundan 2 veya 3 cocugu olanlarin id lerini yazdirin

SELECT id
FROM personel_bilgi
WHERE cocuk_sayisi IN (2,3);

3) Iki sorguyu INTERSECT ile birlestirin


INTERSECT OPERATOR
3) Honda,Ford ve Tofas’ta calisan ortak isimde personel varsa listeleyin

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

5 Cesit Join vardir


1) INNER JOIN iki Tablodaki ortak datalari gosterir
2) LEFT JOIN Ilk datada olan tum recordlari gosterir
3) RIGHT JOIN Ikinci tabloda olan tum recordlari gosterir
4) FULL JOIN Iki tablodaki tum recordlari gosterir
5) SELF JOIN Bir tablonun kendi icinde Join edilmesi ile olusur.
INNER JOINS
CREATE TABLE sirketler INSERT INTO sirketler VALUES(100, 'Toyota');
( INSERT INTO sirketler VALUES(101, 'Honda');
sirket_id int, INSERT INTO sirketler VALUES(102, 'Ford');
sirket_isim varchar(20) INSERT INTO sirketler VALUES(103, 'Hyundai');

);

CREATE TABLE siparisler


INSERT INTO siparisler VALUES(11, 101, '2020-04-17');
( INSERT INTO siparisler VALUES(22, 102, ' 2020-04-18');
siparis_id int, INSERT INTO siparisler VALUES(33, 103, ' 2020-04-19');
sirket_id int, INSERT INTO siparisler VALUES(44, 104, ' 2020-04-20');
siparis_tarihi date INSERT INTO siparisler VALUES(55, 105, ' 2020-04-21');
);
INNER JOINS
TABLE 1 TABLE 2

SORU) Iki Tabloda sirket_id’si ayni olanlarin sirket_ismi, siparis_id ve


siparis_tarihleri ile yeni bir tablo olusturun

SELECT sirketler.sirket_isim, siparisler. siparis_id, siparisler. siparis_tarihi


FROM sirketler INNER JOIN siparisler
ON sirketler.sirket_id = siparisler.sirket_id;

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

SELECT sirketler.sirket_isim, siparisler. siparis_id, siparisler. siparis_tarihi


FROM sirketler LEFT JOIN siparisler
ON sirketler.sirket_id = siparisler.sirket_id;

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

SELECT sirketler.sirket_isim, siparisler. siparis_id, siparisler. siparis_tarihi


FROM sirketler RIGHT JOIN siparisler
ON sirketler.sirket_id = siparisler.sirket_id;

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);
);

Her personelin yanina yonetici ismini yazdiran bir tablo olusturun

SELECT [Link] AS personel_ismi, [Link] AS yonetici_ismi


FROM personel p1 INNER JOIN personel p2
ON p1.yonetici_id = [Link];
LIKE Condition
LIKE condition WHERE ile kullanilarak SELECT, INSERT, UPDATE, veya DELETE
statement ile calisan wildcards’a(özel sembol) izin verir.. Ve bize pattern matching yapma
imkani verir.
INSERT INTO musteriler (id, isim, gelir) VALUES (1001, 'Ali', 62000);

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
);

1) % => 0 veya birden fazla karakter belirtir


SORU : Ismi A harfi ile baslayan musterilerin tum bilgilerini yazdiran QUERY yazin
SELECT *
FROM musteriler
WHERE isim LIKE 'A%';
LIKE Condition

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%';

SORU 2 : a harfi icermeyen kelimelerin tum bilgilerini yazdiran QUERY yazin

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

ZOOM GİRİŞLERİNİZİ LÜTFEN LMS SİSTEMİ ÜZERİNDEN YAPINIZ


UPPER – LOWER - INITCAP
Tablolari yazdirirken buyuk harf, kucuk harf veya ilk harfleri buyuk digerleri
kucuk harf yazdirmak icin kullaniriz

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 DISTINCT musteri_isim


FROM musteri_urun;

Tabloda kac farkli meyve vardir ?

SELECT COUNT(DISTINCT urun_isim) AS urun_cesit_sayisi


FROM musteri_urun;
FETCH NEXT (SAYI) ROW ONLY- OFFSET
1) Tabloyu urun_id ye gore siralayiniz

1) Sirali tablodan ilk 3 kaydi listeleyin


SELECT *
FROM musteri_urun
ORDER BY urun_id
FETCH NEXT 3 ROW ONLY;

3) Sirali tablodan 4. kayittan [Link] kadar olan kayitlari listeleyin

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

1) ADD default deger ile tabloya bir field ekleme

ALTER TABLE personel


ADD ulke_isim varchar(20) DEFAULT ‘Turkiye';

2) Tabloya birden fazla field ekleme

ALTER TABLE personel


ADD cinsiyet varchar(20) , ADD yas int;
ALTER TABLE STATEMENT

3) DROP tablodan sutun silme

ALTER TABLE personel


DROP COLUMN yas;

4) RENAME COLUMN sutun adi degistirme

ALTER TABLE personel


RENAME COLUMN ulke_isim TO ulke_adi;
ALTER TABLE STATEMENT

5) RENAME tablonun ismini degistirme


ALTER TABLE personel
RENAME TO isciler;

6) TYPE/SET sutunlarin ozelliklerini degistirme

ALTER TABLE isciler

ALTER COLUMN ulke_adi TYPE varchar(30),

ALTER COLUMN ulke_adi SET NOT NULL;

Not: String data türünü numerik bir data türüne dönüştürmek


istersek;

ALTER COLUMN fieldname

TYPE int USING(fieldname::int) şeklinde yaparız.


TRANSACTION (Begin – Savepoint – rollback - commit)
• Transaction veritabanı sistemlerinde bir işlem başladığında başlar ve işlem bitince
sona erer. Bu işlemler veritabanı oluşturma , veri silme , veri güncelleme, veriyi
gerigetirme gibi işlemler olabilir .
CREATE TABLE ogrenciler2 BEGIN;
( INSERT INTO ogrenciler2 VALUES(default, 'Ali Can', 'Hasan',75.5);
id serial, INSERT INTO ogrenciler2 VALUES(default, 'Merve Gul', 'Ayse',85.3);
savepoint x;
isim VARCHAR(50),
INSERT INTO ogrenciler2 VALUES(default, 'Kemal Yasa', 'Hasan',85.6);
veli_isim VARCHAR(50), INSERT INTO ogrenciler2 VALUES(default, 'Nesibe Yilmaz', 'Ayse',95.3);
yazili_notu real savepoint y;
); INSERT INTO ogrenciler2 VALUES(default, 'Mustafa Bak', 'Can',99);
INSERT INTO ogrenciler2 VALUES(default, 'Can Bak', 'Ali', 67.5);
ROLLBACK to y;
COMMIT;
--Transaction kullanımında SERIAL data türü kullanımı tercih edilmez.
Savepointten sonra eklediğimiz veride sayaç mantığı ile çalıştığı için sayacta en
son hangi sayıda kaldıysa ordan devam eder

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');
);

CREATE TABLE isciler


( INSERT INTO isciler VALUES(123456789, 'John Walker', 'Florida', 2500, 'IBM');
id number(9), INSERT INTO isciler VALUES(234567890, 'Brad Pitt', 'Florida', 1500, 'APPLE');
isim varchar2(50), INSERT INTO isciler VALUES(345678901, 'Eddie Murphy', 'Texas', 3000, 'IBM');
INSERT INTO isciler VALUES(456789012, 'Eddie Murphy', 'Virginia', 1000, 'GOOGLE');
sehir varchar2(50),
INSERT INTO isciler VALUES(567890123, 'Eddie Murphy', 'Texas', 7000, 'MICROSOFT');
maas number(20),
INSERT INTO isciler VALUES(456789012, 'Brad Pitt', 'Texas', 1500, 'GOOGLE');
sirket varchar2(20)
INSERT INTO isciler VALUES(123456710, 'Mark Stone', 'Pennsylvania', 2500, 'IBM');
);
INTERVIEW QUESTION
1)Her iki tablodaki ortak id’leri ve personel tablosunda bu id’ye sahip isimleri listeleyen query
yaziniz

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?

SELECT COUNT (DISTINCT sehir) AS sehir_sayisi


FROM personel;

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

Max Maas SELECT MAX(maas) AS max_maas


FROM isciler;

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;

8) Isciler tablosunda ikinci en yuksek maasi maasi gosteren query yazin

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

SORU 1) Personel_bilgi tablosundan 5 cocugu olan kisinin cocuk sayisini 2 yapin

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 3) Persone tablosundan maasi 4950 olanlari silin

DELETE FROM personel


WHERE maas =4900;
Tekrar Sorulari
SORU 4) Personel_bilgi tablosundan 3 veya 4 cocugu olanlari silin

DELETE FROM personel_bilgi


WHERE cocuk_sayisi IN (3,4);

SORU 5) Persone tablosundan HONDA’da calisip maasi 3500 olanlari silin

DELETE FROM personel


WHERE maas =3500 AND sirket=‘Honda’;
Tekrar Sorulari
SORU 6) Personel_bilgi tablosundan datalari geri getirilemeyecek sekilde silin

TRUNCATE TABLE personel_bilgi;

SORU 7) Persone tablosundan maasi 4000 ile 5000 arasinda olanlari silin

DELETE FROM personel


WHERE maas BETWEEN 4000 AND 5000;
Tekrar Sorulari
SORU 8) Personel tablosundan maasi 5000 ile 6000 arasinda olmayanlari silin

DELETE FROM personel


WHERE maas NOT BETWEEN 5000 AND 6000;

SORU 9) Persone tablosunu geri getirilemeyecek sekilde silin

DROP TABLE personel PURGE; HATA VERIR


Once personel_bilgi tablosunu silin

DROP TABLE personel_bilgi;

Persone tablosunu geri getirilemeyecek sekilde silin

You might also like