PHP Kod: Kodu kopyalamak için üzerine çift tıklayın!
-- DATA DEFINITION LANGUAGE ---- --CREATE ALTER DROP TEMEL CUMLE YAPILARIDIR. --DATABASE,TABLO,VIEW,PROCEDURE GIBI SISTEMI VE DBYI AYAKTA TUTAN YAPILARI OLUSTURABILMENIZ ICIN GEREKLİ TEMEL KOD BLOKLARIDIR.. CREATE DATABASE DENEME -- Customize Edilmis Database Yaratma --Name : mantıksal isim. dbye ulasmak için verilen addır. --FileName : fiziksel olarak dbnizin bulunacagı yer. --Size : kb,mb,gb,tb cinsinden kullanılabilir. varsayılan deger mbdir. kesinlikle integer bir deger olmalıdır. --MaxSize : eger max size belirlenmez ise db hdd kadar buyuyecektir. kb mb gb tb olabilir. dbnin ne kadar buyuyecegini belirten ozelliktir. --Unlimited : ldf dosyaları için : 2tb ye kadar. mdfler icin ise 16tbye kadar buyume oranı belirtilmis olur.. --FileGrowth : dosyanın buyume oranı demektir. mdf dokumanları için mb ldf dokumanları için ise yuzdelik dilim verilebilir. create database TestDB on primary ( NAME=test_data, FILENAME='C:\test_data.mdf', SIZE=10, MAXSIZE=50, FILEGROWTH=5 ) LOG ON ( NAME='test_log', FILENAME='C:\test_log.ldf', SIZE=2MB, MAXSIZE=20MB, FILEGROWTH=5% )
--FILEGROUP : 32767 tane filegroup yaratabilirsiniz. amac databasein sahip oldugu tabloları bir arada tutan mantıksal bir nesneyi yaratmaktır. siz olusturmasanız dahi sizin icin bir tane primary yaratılır. diger filegroupların uzantısı ndf dir.. --yeni bir dosyagrubu olusturma Alter database TestDB Add FileGroup fg_hakan GO alter database TestDB add file ( NAME='fghakan_deneme', FILENAME='C:\testfghakan.ndf', SIZE=10MB, MAXSIZE=200MB, FILEGROWTH=5MB )to filegroup fg_hakan; --test edelim ... create table dbo.Hakan ( SiparisID int not null, SiparisTarihi varchar(50) ) on fg_hakan create table dbo.Osman ( SiparisID int not null, SiparisTarihi varchar(50) )
--- database ortadan kaldırma drop database TestDB
--------------------------------------------------------------------- --------------------------------------------------------------------- -- create table ---------- create database Deneme GO use Deneme GO create table Calisanlar ( CalisanID int identity(1,1) primary key not null, Adi varchar(30), Soyadi varchar(20), DogumTarihi datetime check(datediff(year,DogumTarihi,getdate())>=18) null, Telefon varchar(24) default 'tel no yok' )
create table Siparisler ( SiparisID int identity(1,1) primary key not null, SiparisTarihi datetime, SiparisAdresi varchar(255), CalisanID int foreign key references Calisanlar(CalisanID) ) create table Ogrenciler ( OgrenciAdi varchar(45) unique ) -- yukarıda belirtilen ozel anlam ifade eden degerlere Constraint(baskı) adı verilir. --Proje : -- markalar ve modeller tablosunu olusturun.. create table Markalar ( MarkaID int identity(1,1) primary key not null, MarkaAdi varchar(30) ) create table Modeller ( ModelID int identity(1,1) primary key not null, ModelAdi varchar(30), MarkaID int foreign key references Markalar(MarkaID) ) -- tablo degisikleri ---- --varolan kolonun ayarlarını degistirmek için alter table Modeller alter column ModelAdi varchar(50) not null --yeni bir kolon eklemek için alter table Modeller add ModelYili datetime null -- kolonu silmek için alter table Modeller drop column ModelYili -- drop table : tabloyu ve içerisinde ne var ne yoksa temizler drop table tabloadi ------------------------------------------------ create table Adlar ( AdID int identity(1,1) primary key not null, Ad varchar(40) ) ---------- Insert Into Adlar(Ad) Values('janet') --------- select * from Adlar --------- delete from Adlar -- tablonun içerisindeki bilgileri sildikten sonra otomatik artıs kolonu sıfırlanmaz. --tabloadki tum bilgiler silinir ve artıs resetlenir.. truncate table Adlar
------------------------------------------------------ ------------------------------------------------------ --VIEW ---GORUNUM----------- --1- select sorgusu uzerine insaa edilirler. --2- karmasık select sorgularında kullanılır. --3- amac: surekli calısan select sorgularını tekrar tekrar yazmak yerine sql içerisinde saklamak ve zamanı gelince kolay yoldan erişim. --4- yaratılan viewler uzerinde olusturuldukları tablolarla beraber yasarlar sanal tablo olarak adlandırabilirsiniz.. create view SpeedSiparisler as Select OrderId,Orderdate,Freight,Shippers.Companyname from Orders inner join Shippers on Shippers.ShipperID=Orders.Shipvia where Shippers.CompanyName='Speedy Express'
--Calistirilmasi select * from SpeedSiparisler --Ornek 1 : -- kategorisi seafood olan urunlerimin adlarını ucretlerini ve kdvli hallerini gosteriniz.. create view DenizUrun as Select ProductName,Unitprice,Unitprice * 1.18 as 'Kdvli' from Products inner join categories on Categories.CategoryID = Products.CategoryID where Categories.CategoryName = 'Seafood' -- select * from DenizUrun --Ozellikleri ---------------- --1- Encyription --viewlerinizin içerisinde saklanan komutların dıs dunyadan erişilebilmesini engellemek için uygulanan bir yontemdir. create view abcd as Select * from Products where CategoryID=5 ------------ alter view abcd with encryption as Select * from Products where CategoryID=5 -------------- alter view abcd as Select * from Products where CategoryID=5
--2 -- With Check Option -- eger select sorgunuz içerisinde where kosulunuz var ise ve siz bu view uzerinden tabloya insert işlemi yapmak isterseniz girdiginiz bilgilerin kesinlikle where kosuluna uygun olması gerekmektedir. create view kargolar as Select Companyname,Phone from Shippers where CompanyName like '%a%' with check option
--*** viewler uzerinden alakalı olunan tabloya kayıt eklenebilir. Insert Into kargolar (CompanyName,Phone) Values('dename','475863483')
-- 3- with schemabinding -- view içerisindeki select sorgusunda gecen kolonlar kilitlenir ve silinmesine izin verilmez.. create view kategoriler with schemabinding as select categoryID,categoryName,Description from dbo.Categories ---- alter table Categories drop column categoryName --bu yapıyı olustururken dikkat edilmesi gerekenler --1- select * gibi bir sorgu yazamazsınız. kolon adları acık bir sekilde yazılmalıdır. --2- from dedikten sonra yazılacak olan tablo adının tam adı yazılmalıdır. dbo.Categories gibi.
---------------------------------------------------------------------- ---------------------------------------------------------------------- ---PROCEDURE---YORDAM-YONTEM--- --Calıstırmak istedigimiz kodları onbellekte calısmaya hazır bir sekilde bekletebiliriz. bu calısma sekli normal kodların calısma sekline gore daha hızlı ve daha guvenlidir. -- amac : dısarıdan girilen degerleri hazırladıgınız kalıbın içerisinde uygun yerlere yerlestirerek calıstırmak.. Insert Into Shippers(CompanyName,Phone) Values('abcd kargo','348573') --procedure yaratma create proc KEkle @ad varchar(20), @tel varchar(24) as Insert Into Shippers(CompanyName,Phone) Values(@ad,@tel)
--Ornek 1 : --dısarıdan girilen kargIDye gore sirketleri silen bir procedure yazınız. create proc KSil @ID int as delete from Shippers where ShipperID = @ID ----- exec KSil 39
--Ornek2: -- dısarıdan girilen ucret kadar urunlerin fiyatlarını arttir. --**azaltma işlemi olmaz cunku bu konu ile ilgili bir check constrainti vardır. bu yuzden arttırdık alter proc Uazalt @indirim money as Update Products Set Unitprice = Unitprice + @indirim --Calistirilmasi Exec Uazalt 10 Exec Uazalt 5
-------------- --dısarıdan girilen kategoriIdye gore urun adlarını donen proc yazınız. create proc KUrunler @ID int as Select ProductName from Products where CategoryID = @ID
-- Exec KUrunler 7 -------------------------------------- --dısarıdan girilen ada gore database olusturan bir proc yazınız. -- ddl komutlarını proc uzerinde calıstırmak isterseniz normal yazım kuralı işlemez. --yanlıs kod create proc DbOlustur @ad varchar(50) as create database @ad --dogru kod : string toplaması create proc DbOlustur @ad varchar(50) as Execute('Create Database '+@ad) --test exec DbOlustur 'sahte'
--------------------------------------------- --master databasei içerisinde sistem hareketlerini hızlı bir sekilde yapabilmek için genellikle sp_ adıyla baslayan bir cok procedure bulabilirsiniz.. --tablo adını degistirmek için Exec sp_rename 'Shipps','Shippers' --kolon adı degistirmek Exec sp_rename 'Shippers.Tel','Phone','Column'
--------------------------------------------------------------- --------------------------------------------------------------- -- FUNCTIONS (fonksiyonlar) --genellikle matematiksel işlemlerin kolay yoldan yapılabilmesi için kullanılan bir ozelliktir. aynı c# ta oldugu gibi içerisinde yaptıgı işlerden sonra bize bir bilgi doner. return anahtar kelimesi ile.. --1 - Scalar Fonksiyonlar : yaptıkları işlerden sonra tek bir deger donerler. --2- Table Value Fonksiyonlar : tek bir deger yerine tablo seklinde birden fazla deger donebilirler... -----------Scalar Fonksiyonlar --------------- --Ornek 1 : --dısarıdan girilen iki tane sayıyı toplayan ve sonucunu bize veren bir fonksiyon yazınız... create function Topla(@sayi1 float,@sayi2 float) returns float as begin return @sayi1 +@sayi2 end
--Calistirmasi Select dbo.Topla(3,5)
--Ornek 1 : --dısarıdan 3 tane sayı alsın ve ortalamasını bize donsun create function Ortalama(@s1 float,@s2 float,@s3 float) returns float as begin return (@s1+@s2+@s3) /3 end
--calistirma Select dbo.Ortalama(1,2,3) as 'Sonuc'
--Ornek 2 : --dısarıdan girilen 2 tane stringi toplayan bir func create function Birlestir(@isim1 varchar(50),@isim2 varchar(50)) returns varchar(100) as begin declare @sonuc varchar(100) set @sonuc = @isim1+' '+@isim2 return @sonuc end --test Select dbo.Birlestir(FirstName,LastName) as 'ad soyad' from Employees
--Ornek 3 :dısarıdan employeeID girilsin kactane siparis aldıgını bize soylesin .. create function SipSayi(@ID int) returns int as begin declare @sayi int; select @sayi = Count(*) from Orders Where EmployeeID = @ID return @sayi end ----------------------------------------------------- --calısanadlarını ve siparis sayılarını gosteriniz. Select FirstName,Count(*) from Employees inner join Orders on Orders.EmployeeID=Employees.EmployeeID group by FirstName --fonksiyon test Select FirstName,dbo.SipSayi(EmployeeID) from Employees ---------------------------------------------------------- ------------Table Value Functions ------------------ --geriye tablo donerler. birden fazla satır bilgi donerler.
--Ornek 1 : dısarıdan bir harf girilsin calısanımızın adı bu harfle baslıyorsa bilgileri gosterilsin.. create function LookbyName(@harf char(1)) returns table as return select * from Employees where left(FirstName,1) = @harf --*** table donerken begin ve end e ihtiyacınız yok . hata alırsınız yazmayalım... --test Select * from dbo.LookbyName('A')
--Ornek 2 : dısarıdan kargoID girilsin bu kargoid ile tasınmıs siparislerin listesi. create function SipKargo(@ID int) returns table as return Select * from Orders Where Shipvia = @ID
-- test select * from dbo.SipKargo(3)
------------------------------------------------------------ -------- IF - ELSE KOSUL DURUMLARI -------------
if exists(kosul) begin -- kosul uyarsa end else -- kosul uymazsa
-- Ornek 1 : sistemin içerisinde Okul diye bir database var ise zaten var diye bir mesaj yok ise yaratmasını saglayın.. if exists(Select * from sys.sysdatabases where Name='Okul') begin print 'boyle bir db zaten var' end else begin create database Okul end
--Ornek 2: kargo ucreti 50 dolardan yuksek bir urun var ise var yazsın yoksa yok declare @sayim int set @sayim = (Select count(*) from Orders where Freight>50) if @sayim >0 begin print 'ne yazıkki var' end else begin select 'yok' end
--Ornek 3 : companyname i ttt kargo telefonu 1111 olan bir kayıdımız var ise boyle bir kayıt var yok ise shippers tablosuna insert if exists (Select * from Shippers where Companyname='ttt kargo' and Phone='1111') begin print 'boyle bir kayıt var' end else begin Insert Into Shippers(CompanyName,Phone) Values('ttt kargo','1111') end --test------- Select * from Shippers
--Ornek 4 : calisanlar tablosuna bir kisi ekleyin eklerken bir sistem hatası olusursa uyarı gosterin olusmazsa kyaıt eklenmistir.. Insert Into Employees(FirstName,LastName) Values('yasin','kizilbakir') if (@@error > 0) begin Select 'bir hata meydana geldi' end else begin Select 'oke' end
---------------------------------------------------------------- ----------------------------------------------------------------- -------TRIGGER --- TETIKLEYICI ------------ -- kullanıcı tarafından elle veya belirli bir komutla calıstırılamayan sadece belirli bir olay olduktan sonra otomatik olarak calisan bir yapısı vardır. --1- dml trigger (insert update delete işlemlerinden sonra veya once tetiklenen triggerlardir.b triggerin tetiklenebilmesi için belirli bir tablo uzerinde yukarıdaki kodlardan birini calsıtırmanız gerekir. ) --2- ddl trigger (create alter drop)
--Trigger Modlari --- --1- After : sadece tablolar uzerinde calıstırılabilir. ornegin bir tabloya kayıt eklemek istedigimiz zaman, kayıt eklendikten sonra bu trigger içerisindeki kodlar otomatik olarak calısır. --2- Instead Of : tablolar ve viewler uzerinde kullanabilirsiniz. eylem gerceklesmeden once tetiklenen yapılardır. işlemden once trigger tetiklendigi için asıl yapılması gereken iş yapılmaz. ama siz bunu trigger içerisinde kontrol edebilirsiniz.. -- inserted - deleted tablolarını kullanarak trigger uzerinde uzmanlasabilirsiniz.. -- Ornek 1 : -- shippers tablosundan bir veri silindikten sonra kargo ucretlerine 10 dolar zam yapın. create trigger tetikciKemal on Shippers after delete as Update Orders Set Freight = Freight +10
--test Delete from Shippers where ShipperId = 40
--Ornek 2 : kategoriler tablosuna bir veri eklendikten sonra urunlerin stoklarını 5 birim arttırın. create trigger deneme on Categories after insert as Update Products set UnitsInstock = UnitsInStock +5
-- Senaryo : --1- musteriler tablosunu olsturun --2- yedek_mus tablosunu olsuturun --3- musteriler tablosuna bir kayıt eklendikten sonra aynısını yedege atın.... --1 - create table Musteriler ( MusteriID int identity(1,1) primary key not null, Adi varchar(50) , Soyadi varchar(50) ) --2- create table Yedek_Mus ( MusteriID int identity(1,1) primary key not null, Adi varchar(50) , Soyadi varchar(50) ) --3- create trigger log_trig on Musteriler after Insert as declare @ad varchar(50) declare @soyad varchar(50) select @ad=Adi,@soyad=Soyadi from Inserted Insert Into yedek_Mus(Adi,Soyadi) Values(@ad,@soyad)
--test Insert Into Musteriler(Adi,Soyadi) Values('onur','kizilbakir') Select * from Yedek_Mus Select * from Musteriler
-- triggeri silmeden aktifliği uzerinde işlem yapabilirsiniz.. disable trigger dbo.triggeradi on dbo.tabloadi; enable trigger dbo.triggeradi on dbo.tabloadi; disable trigger dbo.log_trig on dbo.Musteriler; enable trigger dbo.log_trig on dbo.Musteriler; -- triggeri silmek drop trigger triggeradi
--------------------------------------------------------- --------------------------------------------------------- --------------ddl trigger ----- -- genel anlamda create alter drop işlemlerinden sonra calısacak olan kod bloklarıdır. database uzerine veya tum server uzerine kurulabilirler.
--Ornek 1 : --northwind databasei uzerinde alter table diye bir komut calıstırılırsa yapılan degisiklikler geri alınmalı ve etkisizligi hakkında bilgi vermeli... create trigger tridine on database for alter_table as print 'yapamazsın' rollback;
--test alter table Shippers drop column Phone alter table Customers drop column CompanyName ------------------------------------------- --ALL Server trigger --- create trigger ddl_trig on all server for create_database as print 'vooaw inanılmazsın databasei bir cırpıda yarattın'
--test create database Abcd
-- on server triggerler master databaseinin içerisindeki sys.triggers denilen sistem tablosunda saklanırlar. --Odev : trigger her insert işleminden sonra sistem zamanına bakar ve 10cak oldugunda gecmis yıla ait olan tum siparisleri siler..
--------------------------------------------------------------------- --------------------------------------------------------------------- ---------------TRANSACTION -- HAREKET BILGISI ----------- -- insert update delete işlemlerinde kullanılır. bir olayın tamamını gerceklestirebilmek için birden fazla eyleme ihtiyacınız varsa transaction kullanılır. ya tum işlemler basarılı olacak ve commit edeceksiniz. yada basarısızlık durumunda rollback ile sanki olaylar hic olmamıs gibi basa doneceksiniz.. begin tran Insert Into Shippers(CompanyName,Phone) Values('deneme tran','34543') Update Products Set Unitprice = Unitprice +1 Delete from Shippers where ShipperID >3 Insert Into Shippers(CompanyName,Phone) Values('tran kargo','34543') commit tran if @@error <>0 begin rollback tran end
--- Try Catchli Kullanım begin try
begin tran Insert Into Shippers(CompanyName,Phone) Values('deneme tran','34543') Update Products Set Unitprice = Unitprice +1 Delete from Shippers where ShipperID >3 Insert Into Shippers(CompanyName,Phone) Values('tran kargo','34543') commit tran end try begin catch rollback tran end catch
----------------------------------------------------------------- ----------------------------------------------------------------- --- BACKUP - RESTORE ------------------- --Backup : yedeklemek --Recovery Modeller ---------- --1- Simple Rec : eger db bu yapıya sahip ise transaction loglar min seviyede tutulur. yapılan degisikliklerin tamamı loglanmaz. dolayısıyla herhangi bir hata anında istenilen bir ana geri donus yapamazsınız sadece elinizdeki son backupa geri donebilirsiniz.. -- transaction logların backupını alamazsınız. sadece full ve differential backup alabilirsiniz.. --2- Full Rec : db uzerinde olan her sey loglandıgı için hem istediginiz backupa geri donebilir hemde istenilen bir zamana geri donebilirsiniz. --ayrıca transactiın loglarında backupını alabilirsiniz.. --3- Bulk Logged : yarı full yarı simple gibidir. tranaction loglar tutulur ancak saniye saniye degil bloklar halinde. transaction logların backupını alabilirsiniz ama istenilen zamana geri donemezsiniz...
-------------------------------------------------- --- BackUpCesitleri -------------- --Full : databasein ilk anından itibaren tum bilgilerinin son ana kadar yedeklenmesi durumudur. --differential : bir kere full backup aldıktan sonra aradaki farkı yedekleyen ve onceden alınmıs full backup ile birlestiren sistemdir. --transaction log : log dosyasının yedeklenmesidir. --Sebebi : --1- istenilen zamana geri donebilmek saniye saniye yapılan işlemleri kaybetmemek gerekir. --2- ldf dosyasının dolması demek yapılan işlemlerin kaydedilmemesi demektir. db hata vermez ama hic bir işlemde yapmaz. bundan kurtulmak için log dosyasının backupını alıp onu temizlenir.. create database dbBack --Restore : geri yukleme --restore with recovery : geri yukleme sırasında bir hata meydana gelirse sanki hic bir bilgiyi yuklememis gibi geri alır. bu sayede geri yukleme garantisi verir. diger yontemlere gore yavas.. -- restore with norecovery : geri yukleme sırasında meydana gelen hatalarda yukleme yapmaya devam eder. hata duzelene kadar bilgileri kaybedersiniz.. hızlıdır. -- standby : geri yukleme işlemini yapar ancak readonly sadece okuma modunda. insert update delete haricinde sadece select sorgularını calıstırabilirsiniz.. ---------------------------------------------------------- --Transaction Belirli Bir zamana Geri Donme ----------- --1- database yaratılır --2- içerisine veriler ekle --3- full backup ardından transaction log backup almalısın. --4 en son hali ile bir tane daha transaction log backup alın..
create database A GO use A GO create table Musteriler ( MusteriID int identity(1,1) primary key not null, MusteriAdi varchar(50) ) GO Insert Into Musteriler(MusteriAdi) Values('Danone') select * from Musteriler delete from Musteriler
--------------------------------------------------------- --------------------------------------------------------- -------------- INDEXLER ------------------- --CLUSTERED INDEX : --kolonumuzdaki bilgiler fiziksel olarak kucukten buyuge veya alfabetik olarak sıralanır bu sayede sql server select sorgunuzunda gelecek sonucları daha cabuk bulur... --bir tabloda sadece 1 tane clustered index uygulanabilir. eger tablonuzda primary key bir kolon varsa zaten clustered var demektir. --NONCLUSTERED INDEX : -- bir tabloda 249 adet olabilir. ilgili kolondaki bilgilere gore kayıtları kategorize eder. kategorilerine gore kitaplar , yaslarına gore insanlar , yazarlara gore kitaplar
--Indexler ne zaman uygulanmalı ? --1- tablonuz uzerinde cok fazla select sorgusu calıstırılıyor ise uygulanır. select sorgusunda en cok gecen adı gecen kolonlar indexlenir --2- eger index yapılacak tablo uzerinde cok sık insert update delete yapılırsa listeleme zorlasacagından index uygulanmaması daha iyi olur. --3- uygulanırsa rebuild işlemleri ile yeniden duzenlenme yapılır. --4- index onceligi daime where kosulunda gecen kolonlara verilmelidir. cunku aranan bilgi where kosuluna gore belirlenir ilk bakılan yer burası oldugu için indexin onemi burada artar... Select ProductName,Unitprice where Unitprice >100 --index onceligi : Unitprice - ProductName
-- index yaratılısı create clustered index indexadi on tabloadi(kolonadi)
create nonclustered index indexadi on tabloadi(kolonadi)
--yukarıdaki formule gore shippers tablosundaki telefonları indexlerin. create nonclustered index ind_deneme on Shippers(Phone)
--- disable etme : alter index ind_deneme on Shippers DISABLE; --eski haline cevirmek için yapılması gereken rebuild işlemi. -- 2 amac için kullanılır. --1- disable olanları tekrar aktiflestirmek --2- bakımsız kalmıs yavaslamıs duzeni bozulmus indexleri tekrar canlandırmak için kullanılır. alter index ind_deneme on Shippers rebuild; -- drop etme drop index indexadi on dbo.tabloadi drop index ind_deneme on dbo.Shippers --Arastırma Odevi : dbcc showcontig istatistiksel yapısı nasıl kullanılır ve amacı nedir?
-------------------------------------------------------------- -------------------JOIN TIPLERI ------------------------ --sql serverin varsayılan olarak kullandıgı ve tam destek verdigi join tipi inner joindir. -- outer join : full - left - right joinler
--LEFT OUTER JOIN ------ --ilk tablonun yada gorunum olarak solda kalan tablonun tum bilgileri gosterilir ancak eslesmeyen bilgiler varsa bu durumda null ifadesi bilgileri goruntuler.. --Calisanlarin ad soyad bilgilerini ve aldıgı siparisleri gormek istiyoruz.. Select FirstName,LastName,OrderID from Employees inner join Orders on Orders.EmployeeID = Employees.EmployeeID Select FirstName,LastName,OrderID from Employees left join Orders on Orders.EmployeeID = Employees.EmployeeID
--RIGHT OUTER JOIN ----ikinci tablonun yada join ile içersine dahil olunan tablonun tum bilgileri gosterilir ancak eslesmeyen bilgiler varsa bu durumda null ifadesi ile bilgileri goruntuler.
--siparisler hangi kargo firmaları ile tasındı. ana tablo orders Select OrderID, CompanyName from Orders inner join Shippers on Shippers.ShipperID =Orders.Shipvia Select OrderID, CompanyName from Orders right join Shippers on Shippers.ShipperID =Orders.Shipvia
--musteri adlari ve aldıkları siparisıdleri gosteriniz. ana tablo customers... Select CompanyName,OrderID from Customers inner join Orders on Orders.CustomerID = Customers.CustomerID Select CompanyName,OrderID from Customers left join Orders on Orders.CustomerID = Customers.CustomerID Select CompanyName,OrderID from Customers full outer join Orders on Orders.CustomerID = Customers.CustomerID -- full outer join : tum tablolardaki tum bilgileri getirir ve karsılıgı olmayan bilgiler yerine null yazar..
------------------------------------- --- Cross join ---------------------------- --baglantısız tablolardan bilgiler almak için kullanılır.. dikakt edilmesi gereken nokta kolonların sayısı ve tipleridir... Select Shippers.CompanyName, Suppliers.ContactName from Shippers cross join Suppliers
-- UNION ------ -- iki veya daha fazla bagımsız select sorgusundan gelen cevabı birlestirmek ve tek bir rapor da sunmak için kullanılır.. --kolon sayısına dikkat Select FirstName,City from Employees union Select ContactName,Country from Customers --------------------------------------------------------------- --------------------------------------------------------------- -- SHRINK DATABASE ---------- --db uzerinde surekli veri silinmesi ve veri eklenmesi gerceklesirse yer yer bosluklar olusur buda dbnin biraz daha fazla yer kaplamasına ve hızlı erişimini engeller. bunu ortadan kaldırmak bosluklarının alınması gerekir. dbcc SHRINKDATABASE('Northwind')
-- sql server dblerle ilgili verilere daha cabuk erisebilmesi icin sayfa sayfa ayırır. db uzerinde veriyi tutan en kucuk birim pagedir. --8 tane sayfa bir araya geldiginde extend denilen klasor sistemini olustururlar...
------------------------------------------------------ --Arayuz Calismalari ------------- -- Generate Script : databasein veri olmayan halini sorgu penceresi seklinde elde edebilmek için kullanılır. kullanılan tum idler sıfırlanmıstır..
--SECURITY-------------- --1-loginler yaratılır.. security bolumu altından loginler yaratılır.. --2-sql server hesaplarını acabilecek olan loginler yaratıldıktan sonra hangi db ile işleri varsa o dbnin içerisindeki security bolumune gidilir ve userlar yaratılır. --3- ilgili db içerisine gidilerek roles bolumunden senaryonuz geregi tum rolleri yaratın ve alt bolumden bu role ait olan kisileri ekleyin. --4- role yetkiler verilerek işlem tamamlanır.
----------------------------------------------------- --Senaryo :-- spawn adı ile bir login ve user olusturun. northwind db uzerinde bu kisinin yetkileri asagıdaki gibidir. -- bu kisi ozel isimli rolee atanacaktır. ozel rolunun yetkileri : select yapsın update yapsın delete yapamasın insert yapamasın seklinde olacaktır.
----------------------------------------------------- --------------------------------------------------- --from dedikten sonra veri kaynagının tam adının yazılması ile bilgiyi alma yontemine Full Qualified Name denir. Select * from Northwind.dbo.Shippers ------------------------------------------------------- ------------------------------------------------------- --Gecici Tablolar - Temp Tables ---------- --2 tip gecici tablo vardır. bu tablolar orjinal db uzerinde yapılması istenmeyen degisikliklerin gecici bir tabll uzerinde yapılarak etkilerinin gorulmesi amacı ile kullanılır.. --1 local temp table : -- # işareti ile temsil edilir. sadece o an oturumu acık olan kisi tarafından kullanılır. o kisi disconnect oldugunda otomatikmen yaratmıs oldugu bu temp table ortadan kalkar. --2 global temp table : -- ## işareti ile kullanılır. o an oturumu acık olan tum kullanıcılar tarafından kullanılabilir. son kullanıcı disconnect olana kadar yasar o da ayrılınca kendisini ortadan kaldırır. --local select * into #ailecalisanlar from Northwind.dbo.Customers where CompanyName like 'a%' --global select * into ##ailecalisanlar from Northwind.dbo.Customers where CompanyName like 'a%'
select * from #ailecalisanlar
Delete Sorguları
PHP Kod: Kodu kopyalamak için üzerine çift tıklayın!
--DELETE SORGUSU ---------- --tablodaki bilgilerin silinmesi için kullanılan bir yontemdir. fiziksel silme olarak adlandırılan yapıdır. tablonun kendisi kalır ama içerisindekiler gider. Delete from TabloAdi where kosul
-- shipperIDsi 3ten buyuk olan tum verileri siliniz. Delete from Shippers where ShipperID > 3 Select * from Employees
-- 10 ve 11 nolu calisanlarımı dbden siliniz.. Delete from Employees where EmployeeID in(10,11)
Delete from Employees where EmployeeID=10 or EmployeeID=11
Insert Sorguları
PHP Kod: Kodu kopyalamak için üzerine çift tıklayın!
--INSERT Yapısı---- --databaseniz içerisinde bulunan bir tabloya veri eklemek için kullanılır.
Insert Into TabloAdi (EklemeYapilacakKOlonlar) Values(Kolonlara Gelecek Degerler)
--Shippers tablosuna yeni bir kargo firmasi ekleyin Insert Into Shippers(CompanyName,Phone) Values('Mng Kargo','3478374') Insert Into Shippers(CompanyName) Values('Mng Kargo') Insert Shippers(CompanyName,Phone) Values('YurtIci Kargo','5675567') --test Select * from Shippers -- employees tablosuna bir aktor adıyla kayıt olun.. Insert Into Employees(FirstName,LastName) Values('tom','cruise') --Insert Isleminden Sonra en son hangi idyi verdi ise onu size gosterir. Insert Into Employees(FirstName,LastName) Values('angelina','jolie');Select @@Identity
--TABLOLAR ARASI INSERT ------ --Toptanncilar tablosundaki tum sirket adlarını ve telefon bilgilerini al kargolar tablosuna ekle.. Insert Into Shippers(CompanyName,Phone) Select CompanyName,Phone from Suppliers --Satır Satır ugrasmak yerine toplu insert yapılarak işlemler daha cabuk bir sekilde eklenir. --Ekleme işlemi yapılırken dikkat edilmesi gereken nokta : --1- kolonların veri tipleri birbirine uygun olmalı --2- illa kolonadlari aynı olacak diye bir sart yoktur.
Select Sorguları
PHP Kod: Kodu kopyalamak için üzerine çift tıklayın!
--eger hangi db uzerinde calısacagınızı belirlemedi iseniz asagıdaki kodla secim işlemini yapabilirsiniz. yada sol yukarıdaki comboboxtan secim yapılır.. use Northwind
-- Select Sorgusu -- --databaseimizdeki tablolardan ilgili bilgilerin alınması ve gosterilmesi amacı ile kullanılır. size her zaman bir sonuc kumesi (resultset) doner. Select 1+2 Select 2-1 Select 4/2 Select 4*5 --kolonlar yanyana Select 1+2,2-1,4/2,4*5 --kolonların adını degistirmek için Select 1+2 as 'Toplama',2-1 'Cikartma',4/2 as Bolme,4*5 as [Carpma Islemi]
--harfler buyuk kucuk Select Lower('DeNeMe') Select Upper('deneme') --sonuc lg gelir cunku index mantıgı yoktur. 1 den saymaya baslar Select Substring('bilgeadam',3,2) --sagdan soldan boslukların alınması Select ltrim(' hakan') Select rtrim('hakan ') --ascii karsılıgı Select ascii('a') --girilen degerin uzunlugu Select len('bilgeadam') -- replace : yer degistirme Select replace('abcdefghijklcde','cde',' Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir. style="color: #007700">) --ters cevirme Select 'hakan' as 'Normal' , reverse('hakan') as 'Ters' --stuff : bir stringi baska bir stringin içerisinde monte etme select stuff('abcdefgh',2,3,'ijklmno') --sagdan soldan istenilen karakter sayısı kadar alma select left('kelime',2) Select right('kelime',4)
--ZAMAN FORMATLARI -------------------------- --simdiki zaman Select getdate() --yıl kısmı Select year(getdate()) Select month(getdate()) select day(getdate())
--zaman ekleme islemleri select dateadd(year,20,getdate()) select dateadd(day,15,'06.03.1998') -- zamanlar arasındaki fark select datediff(year,'08.02.1990',getdate()) select datediff(day,'05.13.1990',getdate()) select datediff(month,'08.02.1990',getdate()) -- datename : haftanın gununu ve yılın kacıncı gunundeyiz bilgisi select datename(weekday,getdate()) select datename(dayofyear,getdate()) select datepart(weekday,getdate())
-------Select Tablolar Uzerinde Calisma--------- Select kolonadlari from tabloadi Select ShipperID,CompanyName,Phone from Shippers --tum siparis bilgilerini gosterin... --****eger tum tablo bilgilerini gostermek istiyorsanız kolonadları teker teker yazmak yerine * anahtar kelimesini kullanabilirsiniz.. Select * from Orders
-- calisanlarımızın adlarını ve soyadlarını tek bir kolonda gosteriniz... Select FirstName+' '+LastName as [Adi Soyadi] from Employees -- urunlerin adlarını , ucretlerini , ve kdvli hallerini gosteriniz. computed column denilir. Select ProductName,Unitprice,Unitprice * 1.18 as 'kdvli' from Products
--WHERE --- KOSUL IFADELERI --her zaman tabloda bulunan tum nesneleri goruntulemek istemeyebilirsiniz. bazen kriterlere gore filitrelendirme işlemleri yapılabilir. -- > >= < <= =(esit) <>(esit degil)
--urun ucretleri 50 dolardan yuksek olan urunlerin adlarını gosteriniz.. Select ProductName from Products where Unitprice > 50 -- sehri londra olan calısanlarımın adlarını gosteriniz. Select FirstName from Employees where City = 'London' -- kategoriidsi 5 olan kategorinin adini ve adinin ilk harfini gosteriniz.. Select CategoryName,left(CategoryName,1) from Categories where CategoryID = 5
-- 1997 yılında alınmıs olan siparislerin idlerini , tarihlerini ve kargoucretlerini gosteriniz.. Select OrderID,Orderdate,Freight from Orders where year(Orderdate) = 1997
-- NULL Degerlerin Kontrolu ------------------- --eger tablodaki kolonlara hic bir bilgi girilmez ise o kolon null degerini alır.
-- fotografi olmayan calısanlarımın tum bilgilerini gosteriniz. Select * from Employees where Photo is null -- fotograf bilgisi null olmayanları gosteriniz. Select * from Employees where Photo is not null
--Birden Fazla KOsulun Incelenmesi Durumu -- -- and (ve) or(veya) --her zaman tek bir kriterle bilgiler sorgulanamaz. bazen birden fazla kriterde uygulanabilir..
-- urunucreti 30 dolardan yuksek ve stok miktari 10 dan fazla olan urunlerimin adlarını gosteriniz... Select ProductName from Products where Unitprice > 30 and UnitsInStock >10
-- fransaya gondermedigimiz ve kargo ucreti olarak 10 dolardan fazla odedigimiz tum siparislerin idlerini gosteriniz. Select OrderID from Orders where ShipCountry <> 'France' and Freight >10
-- 4 nolu kategoriye ait, urun bedeli 20 ile 100 arasında olan ve stoklarda 5 ve 5ten fazla bulunan urunleri gosteriniz... Select ProductName from Products where CategoryID =4 and Unitprice >20 and Unitprice <100 and UnitsInStock >=5 -- 1,2,3 nolu calısanlarımın almıs oldukları , siparis tarihleri null olmayan ve 3 nolu kargo firması(ShipVia) ile tasınmıs siparislerin idlerini gosteriniz... --112 Select OrderID from Orders where (EmployeeID =1 or EmployeeID=2 or EmployeeID=3) and Orderdate is not null and Shipvia = 3
-- adi a ile baslayan, stok miktari 100 den kucuk , 3,5,7 nolu toptancılardan alınmmıs urunlerin adlarını gosteriniz.. Select ProductName from Products where left(ProductName,1) = 'A' and UnitsInStock <100 and (SupplierID=3 or SupplierID=5 or SupplierID=7)
-- SIRALAMA ISLEMLERı -- ORDER BY-- --raporlama yaparken en cok kullanılan ozelliklerin bilgilerin alfabetik veya kucukten buyuge sıralanma sekilleridir. yapılması gereken order by anahtar cumlesinden sonra hangi kolona gore sıralama yapılacak belirtilmesi gerekir. --kucukten buyuge yani a dan zye Select FirstName from Employees Order by FirstName --urunleri ucretlerine gore sıralayınız.. Select ProductName,Unitprice from Products order by Unitprice asc --ascending -- artan varsayılan --descending -- azalan sıralama
--urunleri pahalıdan ucuza gore sıralayınız.. Select ProductName,Unitprice from Products order by Unitprice desc
-- urun ucreti 10 dolardan yuksek olan urunleri alfabetik olarak sıralayınız.. Select ProductName from Products where Unitprice > 10 Order by ProductName -- amerikali calısanlarımından photografı null olmayanların listesini dogum tarihlerine gore listeyeleyin... Select FirstName from Employees where Photo is not null and Country = 'USA' order by BirthDate -- TOP anahtar kelimesi (en ust) --size verilen sonuc kumesinden istenilen satır kadar bilgiyi cekip alabilirsiniz. her zaman en ust satırdan saymaya baslar.. Select top 10 * from Orders
-- en pahalı 3 urunumuzu gosterin... Select top 3 ProductName from Products order by Unitprice desc -- en dusuk kargo ucretli siparisimizin siparisıdsini ve hangi calisanımın aldı ise onun idsini gormek istiyoruz.. Select top 1 OrderID,EmployeeID from Orders Order by Freight -- 1973ten once dogmus en genc calısanımın adını gosteriniz.. Select top 3 FirstName,Birthdate from Employees where year(Birthdate) <1973 order by Birthdate desc
---------------------------------- --BETWEEN AND ... --Urun ucreti 50 ile 100 dolar arasında olan urunlerin adlarını gosteriniz.. Select ProductName from Products where Unitprice >=50 and Unitprice <=100 --verilen degerler kontrole dahildir.. Select ProductName from Products where Unitprice between 50 and 100 -- kod adları cactu ve dumon arasında olan musterileri gosteriniz. Select * from Customers where CustomerID between 'Cactu' and 'Dumon' --cactu ve dumon arasındaki sirketlerin dısında kalanları goster Select * from Customers where CustomerID not between 'Cactu' and 'Dumon' -- 1 ocak 1996 ile 12 temmuz 1996 arasında alınmıs siparislerimizin idlerini gosteriniz. Select OrderID from Orders where Orderdate between '01.01.1996' and '07.12.1996'
-- categoryIdsi 1 ile 5 arasında olan urunlerimin adlarını ve depoda toplam ne kadarlık bulunduklarını gosteriniz.. Select ProductName,Unitprice*UnitsInStock as [Stok Durumu] from Products where CategoryID between 1 and 5
-- carsamba gunu dogmamıs olan ve idsi 3 ile 10 arasında olan calisanlarımın adlarını adan zye gosteriniz.. --wednesday Select FirstName from Employees where EmployeeID between 3 and 10 and Datename(weekday,Birthdate) <> 'Wednesday' order by FirstName -- en uzun isme sahip urunun adını ve uzunlugunu gosterin.. Select top 1 ProductName, len(ProductName) from Products order by len(ProductName) desc
---------------------------------------------- -- LIKE (Arama Islemleri) -- a ile baslayan urunleri gosteriniz. Select * from Products where ProductName like 'A%' --adları içerisinde bir yerlerde sti gecen musterileri gosteriniz. Select * from Customers where CompanyName like '%Restaurant%' Select * from Customers where CompanyName not like '%Restaurant%' -- ilk 3 harfini unuttum ama son iki harfi ON idi. Select * from Customers where CustomerID like '___ON' -- ilk harfleri a ile k olanlar Select * from Customers where CustomerID like '[ak]%' -- ilk harfleri a ile k arasında olanlar Select * from Customers where CustomerID like '[a-k]%' --ilk hafleri a ile g arasında olsun ikinci harfi n veya l olsun ... Select * from Customers where CustomerID like '[a-g][nl]%' -- ilk harfi a olan ikinci harfi n olmayanlari gosteriniz. Select * from Customers where CustomerID like 'a[^n]%'
-- tost yemeyi seven calisanim kimdir ? Select FirstName from Employees where Notes like '%toast%'
-- ulkesi uk olmayan -- adi a ile baslayan --soyadı r ile biten --, dogum tarihi 1965ten kucuk --calisanımın adını ve soyadı tek bir kolonda gosterin. Select FirstName +' '+LastName as 'AdSoyad' from Employees where Country <> 'UK' and FirstName like 'a%' and LastName like '%r' and year(BirthDate) < 1965 -- kargo ucreti 20 ile 200 arasında olan , -- a ve k arasındaki customeridlere sahip musterilerden alınmıs--gonderilen kisilerin adları arasında bir yerde c var ise -- bu siparislerin listesini en guncelden en eskiye dogru goruntuleyin .. -- 81 Select OrderID from Orders where Freight between 20 and 200 and CustomerID like '[a-k]%' and Shipname like '%c%' order by Orderdate desc
-- METHODLAR ------- -- SAYMA ISLEMLERI - COUNT --bu method içerisine verilen kolon adındaki bilgileri sayar ve size sadece sonucu dondurur. --kac calısan Select Count(FirstName) from Employees --kac kategori Select Count(CategoryName) from Categories --1996 yılında alınan siparis sayısını gosteriniz. Select Count(OrderID) as 'Siparis Sayısı' from Orders where year(Orderdate) = 1996 --kac ulkeye satıs yapıyoruz.. --distinct : tekrarlanmıs kayıtlar var ise onları bir defa sayar Select Count(distinct Country) from Customers
---------------------------------------------- -- SUM (Toplam) -- içerisine verilen kolonadindaki bilgilerin genel toplamını alır size doner.
-- her bir urunden bir tane alsam kaca para oderim. Select Sum(Unitprice) from Products -- depoda toplam kac paralık mal var ? --74050,85 Select Sum(Unitprice*UNitsInStock) from Products -- 1997 yılında toplam kac paralık kargo ucreti odemisiz ? --32468 --32164 Select Sum(Freight) from Orders where year(ShippedDate) = 1997 -- ortalama urun ucretini gosteriniz. --28.8663 Select Sum(Unitprice) / Count(ProductID) from Products
----------------------------------------------- --Average - Avg Ortalama Islemleri Select Avg(Unitprice) from Products -- 1345 nolu calısanımın almıs oldugu , zamanında teslim edilmis siparislerimin ortalama kargo ucreti ne kadardır. Select Avg(Freight) from Orders where (EmployeeID=1 or EmployeeID=3 or EmployeeID=4 or EmployeeID=5) and RequiredDate >= ShippedDate
--------------------------------------------------- --IN Sorgusu .. -- uzun uza diye or sorguları yazmak yerine bu anahtar kelimeyi kullanarak kolon adi tekrar etmeden sorgunuzu yazabilirsiniz.
-- 13579 nolu calisanlarımızın almıs oldukları siparisleri gosteriniz. Select OrderID from Orders where EmployeeID in (1,3,5,7,9)
-- 1 ve 2 nolu kargo firmasının tasıdıgı siparislerin toplam kargo ucretini gosteriniz. Select Sum(Freight) from Orders where Shipvia in (1,2)
-- 2 nolu kargo firması ile tasınmamıs --, freighti 40 dolardan yuksek , -- 2 ile 9 idleri arasındaki calısanlarımdan alınmıs siparislerin toplam kargo ucretlerinin yuzde 30unu gosteriniz.. --8387.92800 Select Sum(Freight) * 0.3 from Orders where Shipvia <> 2 and Freight >40 and EmployeeID between 2 and 9
------------------------------------------------------------ -- MAX - MIN -- kolondaki en buyuk veya en kucuk degeri bulabilmek için kullanılan yapılardır.
-- en pahalı urunumuzun ucreti ne kadardır? Select Max(Unitprice) from Products Select min(Unitprice) from Products -- en son isim Select max(FirstName) from Employees Select min(FirstName) from Employees
------------------------------------------------------ --When - Oldugu zaman --dbde tutulan verilerle raporda istenen veriler her zaman uyusmayabilir. burada mevcut bilgilerin gercek hallerini degistirmeden sadece rapor bazlı degisimi saglar. Select EmployeeID,FirstName,LastName, Unvan= case TitleOfCourtesy when 'Mr.' then 'Bay' when 'Mrs.' then 'Bayan' when 'Ms.' then 'Bayan' when 'Dr.' then 'Doktor' else '' end from Employees -- urun stoklarına gore bir kolon yaratmanız gerekiyor -- stoklarda 15 dan az var ise siparis ver, --15 ile 60 arasında ise ortalama seviye --60 dan fazla ise full yazsın Select ProductID,ProductName,UnitsInStock, Durum = case when UnitsInStock < 15 then 'siparis verilmeli' when UnitsInStock between 15 and 60 then 'ortalama miktar' else 'gerek yok' end from Products
--urun ucretlerine gore degerlendirme yapınız.. -- urun ucreti 10 dolardan dusuk ise ucuz mal --10 dolar ile 40 dolar arasında ise ortalama mal --40 dolardan yuksek ise luks mal Select ProductID,ProductName,Unitprice, Durum = case when Unitprice <10 then 'ucuz' when Unitprice between 10 and 40 then 'ortalama' else 'luks' end from Products order by ProductName
--------------------------------------------------------- --Group by -- gruplandırma
-- ulkelere gore insan sayısı .. Select Country , Count(EmployeeID) from Employees group by Country --ulkelere gore musteri sayım Select Country,Count(CustomerID) from Customers group by Country -- calısanlarıma gore siparis sayılarını gosterin. 1997 yılındakilere gore. Select EmployeeID,Count(OrderID) from Orders where year(Orderdate) = 1997 group by EmployeeID -- her bir kategoriden depoda kac paralık malımız var. Select CategoryID,sum(Unitprice*UnitsInStock) as 'Total' from Products group by CategoryID Order by Total -- musterilere gore siparis sayısı .. -- musterilerin bas harfleri a ile r arasında olmalı. odenen kargo ucretlerinin aralıgı 10 ile 100 dolar arasında olmalı. Select CustomerID,Count(OrderID) as 'OrderCount' from Orders Where CustomerID like '[A-R]%' and Freight between 10 and 100 Group by CustomerID Order by OrderCount desc ---------------------------------------------------- --BAGLANTILI TABLOLARDA SORGULAMA ----------------- --Kuzey Ruzgari dbsi kullanılmıstır.... -- 3 nolu kategoriye ait olan urunleri gosteriniz. Select Adi from Urunler where KategoriID = 3 --cikletler kategorisine ait olan urunleri gosteriniz. Select Adi from Urunler inner join Kategoriler on Kategoriler.KategoriID=Urunler.KategoriID where Kategoriler.KategoriAdi = 'dondurmalar'
-- ulker firmasından alınmıs urunleri gosteriniz. Select Urunler.Adi from Urunler inner join Toptancilar on Toptancilar.ToptanciID = Urunler.ToptanciID where Toptancilar.Adi = 'ulker'
-- bir sorgu içerisinde 7 tane inner join yazma hakkınız var. inner joinler peş peşe ve araya virgul konulmaksızın yazılır.. sql server varsayılan olarak bu join tipine destek vermektedir..
--Ornek : istanbullu toptancilardan alınmıs urunlerimizin adlarını gosteriniz. Select Urunler.Adi from Urunler inner join Toptancilar on Toptancilar.ToptanciID = Urunler.ToptanciID where Toptancilar.Sehri = 'istanbul' --Ornek : turkiyeli toptancilardan alınmıs, urun bedeli 2 dolardan yuksek ve biskuviler kategorisine sahip olan urunleri gormek istiyoruz. Select Urunler.Adi from Urunler inner join Toptancilar on Toptancilar.ToptanciID = Urunler.ToptanciID inner join Kategoriler on Kategoriler.KategoriID = Urunler.KategoriID where Toptancilar.Ulkesi = 'turkiye' and Urunler.Ucreti >2 and Kategoriler.KategoriAdi = 'biskuviler' --Northwind----- -- speedy express ile tasınmıs siparislerin idlerini gosteriniz. Select OrderID from Orders inner join Shippers on Shippers.ShipperID = Orders.Shipvia where Shippers.CompanyName = 'Speedy Express'
-- calisanlarımdan nancy andrew ve janet almıs oldukları siparislere toplam ne kadarlık kargo ucreti odemisiz ? Select Sum(Freight) from Orders inner join Employees on Employees.EmployeeID = Orders.EmployeeID where Employees.FirstName in ('Nancy','Andrew','Janet') -- fransiz musterilerimden, 1996 yılında Nancy ve Janet ile aldıgımız siparislerin Federal Shipping ile tasınanlarının sayısını gosteriniz... Select Count(OrderID) from Orders inner join Customers on Customers.CustomerID=Orders.CustomerID inner join Shippers on Shippers.ShipperID=Orders.Shipvia inner join Employees on Employees.EmployeeID = Orders.EmployeeID where Customers.Country= 'France' and year(Orderdate) = 1996 and Employees.FirstName in ('Nancy','Janet') and Shippers.CompanyName = 'Federal Shipping'
-- kategorilere gore urun sayısnı gosteren bir sorgu yazınız... Select Categories.CategoryName, Count(ProductID) from Products inner join Categories on Categories.CategoryID = Products.CategoryID group by Categories.Categoryname
-- Sirket Adlarina Gore alınan urun sayısını gosteriniz. Select Suppliers.CompanyName,Count(ProductID) from Products inner join Suppliers on Suppliers.SupplierID = Products.SupplierID group by Suppliers.CompanyName
-- amerikadan almıs oldugum , kategorisi seafood,beverages,produce olan urunlerimin ucret ortalaması ne kadardır. Select Avg(Unitprice) from Products inner join Suppliers on Suppliers.SupplierID = Products.SupplierID inner join Categories on Categories.CategoryID = Products.CategoryID where Suppliers.Country = 'USA' and Categories.CategoryName in ('Seafood','Beverages','Produce')
-- 50 yasından buyuk calısanlarımın almıs oldugu siparislerin sayısını gosteriniz.. --521 Select Count(OrderID) from Orders inner join Employees on Employees.EmployeeID=Orders.EmployeeID where (year(getdate()) - year(Birthdate)) > 50
Select Count(OrderID) from Orders inner join Employees on Employees.EmployeeID=Orders.EmployeeID where datediff(year,Birthdate,getdate()) >50 -- stok miktari 30 dan fazla olan urunleri hangi toptancilardan almısız.. Select distinct Suppliers.CompanyName from Suppliers inner join Products on Products.SupplierID=Suppliers.SupplierID where UnitsInStock >30 -- HAVING YAN TUMLECI -------------- -- Having bir nevi where yan tumlecinin gelismis halidir. count , sum , avg , max,min gibi fonksiyonlardan gelen cevapları sorgulamak isterseniz bu yan tumleci kullanmak zorundasınız. --having groupbyddan daima sonra yazılır where ise once
-- 120 den fazla siparis alan calısanlarımın adlarını gosteriniz. Select FirstName,Count(OrderID) from Orders inner join Employees on Employees.EmployeeID = Orders.EmployeeID group by FirstName having Count(OrderID) > 120 order by Count(OrderID) -- 2000 dolardan daha fazla depomda bulunan urunlerin adlarını gosteriniz. select ProductName from Products group by ProductName having sum(Unitprice*UnitsInStock) > 2000 -- select ProductName from Products where (Unitprice * UnitsInStock )> 2000
--- SUbQuery ------ --alt sorgu : yada iç içe select sorgusu... -- ortalama urun ucretindan daha pahalıya gonderilen siparisleri gosteriniz.. Select OrderID from Orders where Freight > (Select Avg(Unitprice) from Products) -- kategorisi seafood olan urunleri gosteriniz.. Select ProductName from Products where CategoryID = (Select CategoryID from Categories where CategoryName='Seafood') -- musteri sayımdan daha pahalı olan urunlerimin ortalama ucreti ne kadardir. Select avg(Unitprice) from Products where Unitprice > (Select count(*) from Customers)
-- nancy ve andrewin almıs oldudu siparisler için toplam ne kadarlık kargo ucreti odedik.. Select Sum(Freight) from Orders where EmployeeID in (Select EmployeeID from Employees where FirstName in ('Nancy','Andrew'))
-- WHERE ILE TABLO BAGLANTISI --Urunleri ve ait oldukları categoryadlarini gosteriniz.. Select ProductName,CategoryName from Products,Categories where Products.CategoryID=Categories.CategoryID -- Speedy Express ile tasınmıs siparisleri gosteriniz.. Select OrderID from Orders,Shippers where Shippers.ShipperID=Orders.Shipvia and Shippers.CompanyName = 'Speedy Express' --calisanlara gore siparis sayısı Select Employees.FirstName,Count(OrderID) from Orders,Employees where Employees.EmployeeID=Orders.EmployeeID group by Employees.FirstName
Update Sorguları
PHP Kod: Kodu kopyalamak için üzerine çift tıklayın!
--UPDATE ISLEMLERI --- --databaseimizde var olan bilgilerin bazen degismesi gerekebilir.bunu saglamak amacı kullanılan bir sorgu tipidir. Update tabloadi set kolon1 = yenidegeri1, kolon2=yenidegeri2
--5 nolu idye sahip kargo firmasının telefon bilgisini 5554433 olarak guncelleyiniz. Update Shippers Set Phone = '5554433' where ShipperID = 5 Select * from Shippers --urunlerin tamamını 5 dolar zamlandırın Update Products Set Unitprice = Unitprice+5
-- toptanciların fax numaralarına bakın ve eger null olanlar var ise yerine bilgi yok yazınız. update Suppliers set Fax = 'bilgi yok' where Fax is null
Konu Sunay tarafından (24 Nisan 2010 Saat 15:44 ) değiştirilmiştir.