Transcript Sunu 6

SQL
Structured Query
Language
Daha Elle tutulur
• Standart sorgu dilidir ve bircok RDBS tarfından kullanılır.
• Standart??? Neden
• Çok fazla VTYS var paralı/ücretsiz
• Her birisi kendi dilini kullansa bir VT diğerine geçmek mümkün olmazdı.
• Buna rağmen ufak farklılıklar gene de vardır.
• IBM tarafından R sistemi adı altında geliştirildi.
• Ilişkisel cebir ile alakası YOKTUR. Ama benzerlikleri vardır.
SQL
• VTYS den bağımsızdır.
• DDL Data definition Language
• Tables, Constraints, index vb.
• DML Data Manupulation Language
• CRUD işlemleri
• SQL 2 standartı bir SCHEMA getirmiştir.
• Create SCHEMA Univ Autherization dean;
• Dean adındaki kullnıcıya Univ adındaki şemaya yetki verilmiştir.
• Güvenlik ve güvenlik amaçlı kullanılır.
Catalog
• Schema LAR kolleksiyonuna verilen ad
• Referencila integraty
Table Oluşturma
• Create Table [schema.] Tablo_adı [{ sütün tanımları}]
• Create Table Univ.Department;
SQL2 nin desteklediği Veri Tipleri
ve Domainleri
• Numeric (int, smallint, float, real, double precision)
• Formated sayılar( decimal(I,j), numeric(i,j))
• Karakterler dizisi ( sabit uzunluklta char(n) değişen uzunluklarda
varchar(n)
• Bit dizisi ( sabit uzunlukta bit(n) veya değişen uzunlukta bit
varying(n)
• Date, time ve timestamp
• Text …..
Constraint ve Default Değerler
• Not NULL .. Null değeri alamaz
• DEFAULT .. Değer girilmediğine alınması istenen değeri ifade
eder
• PRIMARY KEY..
• UNIQUE
• FOREIGHN KEY, refencail integretey için. Var olan bir kayda
referans verilmesi
Örnek Create Table
Create Table Muhasebe.Calisan(
Tcno
char(11) NOT NULL, UNIQUE
CalNo int(6) NOT NULL,
Ad
varchar(40),
CinsiyetChar,
DT
Date,
Adress Varchar(100),
Maaş
decimal(8,2),
RaporVerir
int(6)
Primary Key (EMPNO),
Foreign Key (RaporVerir) REFERENCES Muhasebe.Calisan(CalNo)
);
Tablonun Silinmesi
• DROP TABLE tablo adı [DEPENDENT {Cascade|Restrict}];
• CASCADE: foreign key kısıta olan tablo var ise o da silinecektir.
• RESTRICT: tablo kimse tarafından referans edilmiyor ise ancak
o zaman silinmesine izin verir.
SCHEMA silinmesi
• Tablo ya benzer
• DROP SCHEMA şema_adı [Cascade|Restrict}];
• Cascade: şema içindeki elemanlarla birlikte SİL
• Restrict: Şema içinde eleman yoksa SiL
Tabloyu Değiştirmek
• Tabloyu değil aslında onun tanımını değiştiriyoruz
• ALTER
ALTER TABLE Muhasebe.Calisan
ADD JOB varchar(20)
Zaten içinde Veri varsa ??? JOB sütünunda ne değeri olur
Eğer Not NULL kısıtı kullanarak yapmışşsam ne olur?
DEğiştirme
• Mutlaka DEFAULT değerleri tanımlamak ZORUNDA KALIRIM
• Sutun Silmek
• Alter Table Muhasebe.Calisan
• Drop Tcno Cascade;
• Restrict de kullanılabilirdi.
Değiştirme Devam
• Alter Table Muhasebe.Calisan
• ALTER RaporVerir SET DEFAULT “007”;
• Tüm NULL değerler güncellenir.
• Alter Table Muhasebe.Calisan
• ALTER RaporVerir DROP DEFAULT;
SQL Select işlemi
•
•
•
•
•
En Karmaşık SQL işlemidir
Çok farlı formlarda olabilir
Temel görevi Verileri alabilmektir.
Ilişkisel CEBİRDEKİ SELECT ile ALAKASI YOKTUR 
Select aynı kayıtların çoklu kullnımına izin verir.
SELECT
•
•
•
•
SELECT FROM WHERE
Select <nitelik/alan listesi>
FROM < tablo Listesi>
WHERE <Şartlar>
• Select CalNo, Ad From Muhasebe.Calisan
• Where RaporVerir=‘007’;
Select
• SUPPLIES bölümünün başındaki kişinin adı nedir?
SELECT Calisan.Name
FROM Calisan, BOLUMLER
WHERE EMPNO=HEAD AND
BOLUMLER.NAME=‘SUPPLIES’ ;
Select
• Ahmet Çelik adlı çalışanın rapor verdiği kiş kimdir?
SELECT calisan.Ad
From Calisan, Calisan
WHERE Calisan.Ad=‘Ahmet Çelik’ AND
Calisan.RaporVerir=Calisan.CalNo
ALLIASING gereklidir.
Problem çözüldü
SELECT calisan.Ad
From Calisan, Calisan As BOSS
WHERE Calisan.Ad=‘Ahmet Çelik’ AND
Calisan.RaporVerir=BOSS.CalNo
Where siz SELECT
• İlişkisel cebirdeki PROJECT e benzer
• Select AD, TCNo
• From CALISAN
• Ya birden Fazla tablo adı verilirse ne olur?
• Select Calisan.AD, Bolumler.AD
• From Calısan, Bolumler
• KARtezyen Çarpım
Select
• * : tum alanları getirilecek.
• Select *
• From Calisan
• Where Ad=“Ahmet Cakar”
Select * from Calısan, Bolumlar
Tablolar Ve kümler
• Tablolar nasıl Görülmektedir.
• İlişkisel Cebir tabloları KÜME olarak görürken
• SQL tablolara (ilişkilere) bags veya çoklu küme şekline davranır.
• Kayıtlar bir tabloda çok kez görünebilir. Bu yüzden DISTINCT anahtar
kelimesi kullanılarak erişilebilir.
• Çift kayıtları ihmal etme:
• Select DISTINCT AD
• From CALISAN
Union, Intersection, Except
• Bu teorik yaklaşımlar ilişkilerin KÜME olarak
değerlendirmektedir.
•
•
•
•
•
•
•
Select Distinct Ad
From Calisan
Where Maas>3000
UNION
Select Distinct Ad
From Calisan
Where Maas<1500
Eğer Çift kayıtlara izin varsa
• Ve onlarıda kullanmak istersem
• UNION ALL ( disjoint union için
• INTERSECT ALL ( bag kesişimi için
• EXCEPT ALL ( bag farkı için
Kıyaslama LIKE
• % ve _ karakterlerini LIKE kıyaslayıcı anahtar kelimesi ile
birlikte kullanabilir
• Select *
• From calisan
• Where Ad LIKE ‘%al%’
• … Where AD LIKE ‘_ALG__’
Aritmetik işlemler
• */-+ işlemler
• Select 1.1*Maas as Result , Maas , Result-Maas
• From Calisan
• Anlamı 10% zam yapsak nasıl gözükürdü
Örnek Create Table
Create Table Muhasebe.Calisan(
Tcno
char(11) NOT NULL, UNIQUE
CalNo int(6) NOT NULL,
Ad
varchar(40),
CinsiyetChar,
DT
Date,
Adress Varchar(100),
Maaş
decimal(8,2),
RaporVerir
int(6)
Primary Key (EMPNO),
Dno
int(6)
Foreign Key (RaporVerir) REFERENCES Muhasebe.Calisan(CalNo)
);
Örnek Tablo Bolumler
• Create Muhasebe.Bolumler (
Dnumber
int(6) NOT NULL,
Ad
VarChar(20),
Adres
VarChar(60),
Yoneticisi
int(6),
Primary KEY (Dnumber)
Foreign Key Yoneticisi REFERENCES Calisan(CALNO)
);
Aritmetik işlemler
• BETWEEN
• Select *
• From Calisan
• Where Maas Between 3000 and 4000;
• ORDER BY
•
•
•
•
Select *
From Calisan
Where Maas Between 3000 and 4000;
Order by Ad, CalNo;
Explicit Set
• Select Name
• From Employee
• Where ReportsTo in (‘007’, ‘008’, ‘009’)
Checking NULL values
•
•
•
•
•
•
•
Select E.Name , E.Salary
From Employee as E
Where Exists ( Select Empno From Employee
Where E.ReportsTo=EmpNo AND
ReportsTo As NULL)
Rapor vermeyen kimseler (Müdürlerin )
Özniteliğin Adını Değiştirme
• Select Name As [Employee Name]
• From Employee,
Eğer boşluk konulmak istenrise […] işaretleri arasına alınmalıdır.
İç içe Sorgular Nested Query
• Ilişkisel Cebirde olduğu gibi bir ilişki üzerindeki işlemin
sonucu gene bir lişkidir.
• SQL de de bir tablo ile yapılan bir işlemin sonucu gene bir
tablodur.
•
•
•
•
•
•
Select AD
From Bolumler
Where Dnumber In
( Select DNO
From Calısan
Where Maas>3000);
Iç içe devam
• ALL
•
•
•
•
•
•
Select AD
From Calısan
Where Salary > ALL
( Select Salary
From Calısan
Where RaporVerir=‘007’);
Iç içe sorgularda Alias
Join (kartezyen çarpım
DEĞİLDİR)
• Select AD, Adres
• From Calisan JOIN Bolumler ON DNO=Dnumber
• Where DepartmentName=‘Research’
Join (Natural Join) m
• Iki ilişki de de Aynı ada sahip nitelik olmalıdır
• Select Calısan.Ad, Bolumler.Ad
• From Calısan NATURAL JOIN BOLUMLER
OUTER Join
Left outer JOIN
Right outer JOIN
Full outer JOIN
Aggregate Fonks.
• Select Count(Salary), Min(salary), Max(salary), Sum(Salary),
AVG(Salary )
• From Employee
• Count(*) da kullanılabilir.
• Select E.Name
• From Employee AS E
• Where (Select Count(*) from DepartmentID where
D.Head=E.EmpNo) >=2
Group By
• Select Dno, Count(*), Avg(salary)
• From Employee
• Group By Dno;
Having
•
•
•
•
Select Dno, Count(*), Avg(salary)
From Employee
Group By Dno;
Having count(*)>20
• Having filitrelemesi aggragete özelliğine göre
Having mi Where mi?
• En büyük Fark
• Where : bağımsız kayıtlar üzerinde
• Having : grup kayıtları üzerinde etkilidir.
SELECT in yazılımı
•
•
•
•
•
•
Select
From
Where
Group by
Having
Order by
INSERT
• Insert into Tablo Adı [( Alan adları )]
• Values( Değerler)
• Insert into Employee
• Values (‘5001’, 004, ‘Ali Kasap’, ‘E’, ‘9-5-1980’, ‘Kadıköy’, 3000,
007, 3)
• Alan adları belirtildiğinde alanların bir kısmına bilgi girişi
yaplacak anlamı çıkmaktadır.
• Insert into Employee(name, Addr, Dno)
• Values (‘ hulya K’, ‘üsküdar’, 5)
• Girilmeyen değerlere DEFAULT değerler varsa atanır. Yoksa
NULL atanır.
Insert
•
•
•
•
•
Create table EMD(
EmployeeNo as int,
Manager as int,
DepartmentNo as int
)
• Insert into EMD
• Select E.EmpNo as EmployeeNo,
E.ReportsTo as Manager,
D.Dno as DepartmentNo
From Employee s E Join Department as D on E.Dno= D.Dno
Kayıtların Silinmesi
• Delete From Where
• Delete From Employee Where EmpNo=007; bir kayıt siler
• Delete From Employee Where Dno in
( Select Dnumber From Department
where Head =007);
Birden fazla kayıt silebilir.
DELETE FROM Employee Tüm kayıtları siler
Kayıtları Güncelleme
• Update Set Where
• Update Employee
• Set Salary=Salary *1.1
• Where Reports To=007
View (sanal Tablolar)
• Fiziksel olarak DB içinde olan TABLOLARA BASE
TABLE adı verilir.
• Bir View veya sanal tablo başka BASE tablolardan
veya görünümlerden elde edilmektedir.
• Görünümler veri tabanında kayıtlı olarak
tutulmasına ihtiyaç yoktur. (fakat soruları
kaydedilir)
• View üzerinde Güncelleme işlemi sınırlıdır ama
istenilen sorgu gerçekleştirilebilir.
View Oluşturmak
• Create View EMD(EMPL, MNGR, DEPT)
• As
• Select E.Name, M.Name, D.Name
• From Employee as E, Employee as M, Department as D
• Where E.Reportsto=M.Empno
• AND
• E.DNO=D.Number
View Özellikleri
• View sorgu olarak saklandığı için her
zaman günceldir.
• Karakterizasonu sorgu sırasında yapılır
• View ler DROP komutu ile silinebilir.
• Viewlerin etkin kullanımına dikkat
etmek gereklidir.