500 likes | 775 Views
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ı .
E N D
Daha Elle tutulur • Standartsorgudilidirvebircok RDBS tarfındankullanılır. • Standart??? Neden • Çokfazla VTYS varparalı/ücretsiz • Her birisikendidilinikullansabir VT diğerinegeçmekmümkünolmazdı. • Buna rağmenufakfarklılıklar gene de vardır. • IBM tarafından R sistemiadıaltındageliştirildi. • Ilişkiselcebirilealakası YOKTUR. Amabenzerliklerivardı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 UnivAutherization dean; • Dean adındakikullnıcıyaUnivadındakişemayayetkiverilmiştir. • Güvenlikvegüvenlikamaçlıkullanılır.
Catalog • Schema LAR kolleksiyonunaverilen ad • Referencilaintegraty
Table Oluşturma • Create Table [schema.] Tablo_adı [{ sütüntanımları}] • Create Table Univ.Department;
SQL2 nindesteklediğiVeriTipleriveDomainleri • Numeric (int, smallint, float, real, double precision) • Formatedsayılar( decimal(I,j), numeric(i,j)) • Karakterlerdizisi ( sabituzunluklta char(n) değişenuzunluklardavarchar(n) • Bit dizisi ( sabituzunlukta bit(n) veyadeğişenuzunlukta bit varying(n) • Date, time ve timestamp • Text …..
Constraint ve Default Değerler • Not NULL .. Null değerialamaz • DEFAULT .. Değergirilmediğinealınmasıistenendeğeriifadeeder • PRIMARY KEY.. • UNIQUE • FOREIGHN KEY, refencailintegreteyiçin. Varolanbirkaydareferansverilmesi
Örnek Create Table Create Table Muhasebe.Calisan( Tcno char(11) NOT NULL, UNIQUE CalNoint(6) NOT NULL, Ad varchar(40), Cinsiyet Char, DT Date, AdressVarchar(100), Maaş decimal(8,2), RaporVerirint(6) Primary Key (EMPNO), Foreign Key (RaporVerir) REFERENCES Muhasebe.Calisan(CalNo) );
TablonunSilinmesi • DROP TABLE tabloadı [DEPENDENT {Cascade|Restrict}]; • CASCADE: foreign key kısıtaolantablovarise o da silinecektir. • RESTRICT: tablokimsetarafındanreferansedilmiyoriseancak o zamansilinmesineizinverir.
SCHEMA silinmesi • Tabloyabenzer • DROP SCHEMA şema_adı [Cascade|Restrict}]; • Cascade: şemaiçindekielemanlarlabirlikte SİL • Restrict: ŞemaiçindeelemanyoksaSiL
TabloyuDeğiştirmek • Tabloyudeğilaslındaonuntanımınıdeğiştiriyoruz • ALTER ALTER TABLE Muhasebe.Calisan ADD JOB varchar(20) ZateniçindeVerivarsa ??? JOB sütünunda ne değeriolur Eğer Not NULL kısıtıkullanarakyapmışşsam ne olur?
DEğiştirme • Mutlaka DEFAULT değerleritanımlamak ZORUNDA KALIRIM • SutunSilmek • Alter Table Muhasebe.Calisan • Drop Tcno Cascade; • Restrict de kullanılabilirdi.
DeğiştirmeDevam • Alter Table Muhasebe.Calisan • ALTER RaporVerir SET DEFAULT “007”; • Tüm NULL değerlergüncellenir. • Alter Table Muhasebe.Calisan • ALTER RaporVerir DROP DEFAULT;
SQL Select işlemi • En Karmaşık SQL işlemidir • Çokfarlıformlardaolabilir • TemelgöreviVerilerialabilmektir. • Ilişkisel CEBİRDEKİ SELECT ile ALAKASI YOKTUR • Select aynıkayıtlarınçoklukullnımınaizinverir.
SELECT • SELECT FROM WHERE • Select <nitelik/alanlistesi> • FROM < tabloListesi> • WHERE <Şartlar> • Select CalNo, Ad From Muhasebe.Calisan • Where RaporVerir=‘007’;
Select • SUPPLIES bölümününbaşındakikişininadınedir? SELECT Calisan.Name FROM Calisan, BOLUMLER WHERE EMPNO=HEAD AND BOLUMLER.NAME=‘SUPPLIES’ ;
Select • Ahmet Çelikadlıçalışanınraporverdiğikiş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şkiselcebirdeki PROJECT e benzer • Select AD, TCNo • From CALISAN • YabirdenFazlatabloadı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
TablolarVekümler • TablolarnasılGörülmektedir. • İlişkiselCebirtabloları KÜME olarakgörürken • SQL tablolara (ilişkilere) bags veyaçoklukümeşeklinedavranır. • Kayıtlarbirtablodaçokkezgörünebilir. Bu yüzden DISTINCT anahtarkelimesikullanılarakerişilebilir. • Çiftkayıtlarıihmaletme: • Select DISTINCT AD • From CALISAN
Union, Intersection, Except • Bu teorikyaklaşımlarilişkilerin KÜME olarakdeğerlendirmektedir. • Select Distinct Ad • From Calisan • Where Maas>3000 • UNION • Select Distinct Ad • From Calisan • Where Maas<1500
EğerÇiftkayıtlaraizinvarsa • Veonlarıdakullanmakistersem • UNION ALL ( disjoint union için • INTERSECT ALL ( bag kesişimiiçin • EXCEPT ALL ( bag farkıiçin
Kıyaslama LIKE • % ve _ karakterlerini LIKE kıyaslayıcıanahtarkelimesiilebirliktekullanabilir • Select * • From calisan • Where Ad LIKE ‘%al%’ • … Where AD LIKE ‘_ALG__’
Aritmetikişlemler • */-+ işlemler • Select 1.1*Maas as Result , Maas , Result-Maas • From Calisan • Anlamı 10% zamyapsaknasılgözükürdü
Örnek Create Table Create Table Muhasebe.Calisan( Tcno char(11) NOT NULL, UNIQUE CalNoint(6) NOT NULL, Ad varchar(40), Cinsiyet Char, DT Date, AdressVarchar(100), Maaş decimal(8,2), RaporVerirint(6) Primary Key (EMPNO), Dnoint(6) Foreign Key (RaporVerir) REFERENCES Muhasebe.Calisan(CalNo) );
ÖrnekTabloBolumler • Create Muhasebe.Bolumler ( Dnumberint(6) NOT NULL, Ad VarChar(20), AdresVarChar(60), Yoneticisiint(6), Primary KEY (Dnumber) Foreign Key Yoneticisi REFERENCES Calisan(CALNO) );
Aritmetikiş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) • Raporvermeyenkimseler (Müdürlerin )
ÖzniteliğinAdınıDeğiştirme • Select Name As [Employee Name] • From Employee, Eğerboşlukkonulmakistenrise […] işaretleriarasınaalınmalıdır.
İçiçeSorgular Nested Query • IlişkiselCebirdeolduğugibibirilişkiüzerindekiişleminsonucu gene birlişkidir. • SQL de debirtabloileyapılanbirişleminsonucu gene birtablodur. • Select AD • From Bolumler • Where Dnumber In • ( Select DNO • From Calısan • Where Maas>3000);
Içiçedevam • ALL • Select AD • From Calısan • Where Salary > ALL • ( Select Salary • From Calısan • Where RaporVerir=‘007’);
Join (kartezyençarpım DEĞİLDİR) • Select AD, Adres • From Calisan JOIN Bolumler ON DNO=Dnumber • Where DepartmentName=‘Research’
Join (Natural Join) m • Ikiilişki de deAynıadasahipnitelikolmalı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 filitrelemesiaggrageteözelliğinegöre
Having mi Where mi? • En büyükFark • Where : bağımsızkayıtlarüzerinde • Having : grupkayıtlarıüzerindeetkilidir.
SELECT in yazılımı • Select • From • Where • Group by • Having • Order by
INSERT • Insert into TabloAdı [( 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ğindealanlarınbirkısmınabilgigirişiyaplacakanlamıçıkmaktadır. • Insert into Employee(name, Addr, Dno) • Values (‘ hulyaK’, ‘üsküdar’, 5) • Girilmeyendeğerlere DEFAULT değerlervarsaatanı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ınSilinmesi • Delete From Where • Delete From Employee Where EmpNo=007; birkayıtsiler • Delete From Employee Where Dno in ( Select Dnumber From Department where Head =007); Birdenfazlakayıtsilebilir. DELETE FROM Employee Tümkayıtlarısiler
KayıtlarıGüncelleme • Update Set Where • Update Employee • Set Salary=Salary *1.1 • Where Reports To=007
View (sanalTablolar) • Fizikselolarak DB içindeolan TABLOLARA BASE TABLE adıverilir. • Bir View veyasanaltablobaşka BASE tablolardanveyagörünümlerdeneldeedilmektedir. • Görünümlerveritabanındakayıtlıolaraktutulmasınaihtiyaçyoktur. (fakatsorularıkaydedilir) • View üzerindeGüncellemeişlemisınırlıdıramaistenilensorgugerç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 sorguolaraksaklandığıiçin her zamangünceldir. • Karakterizasonusorgusırasındayapılır • View ler DROP komutuilesilinebilir. • Viewlerinetkinkullanımınadikkatetmekgereklidir.