IRCForumları - IRC ve mIRC Kullanıcılarının Buluşma Noktası
  sohbet

Yeni Konu aç Cevapla
 
LinkBack Seçenekler Stil
Alt 24 Nisan 2010, 15:22   #1
Çevrimdışı
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Sayısı: (0)
IF Ticaret Yüzdesi:(%)
SQL Veritabanı Sorguları




Sorgular Northwind database üzerinden yapilmistir. Aşağıdaki linkten db'yi indirerek sql server'a attach edebilirsiniz.

[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]


DDL Sorguları
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 isimdbye ulasmak için verilen addır.
--
FileName fiziksel olarak dbnizin bulunacagı yer
--
Size kb,mb,gb,tb cinsinden kullanılabilirvarsayılan deger mbdirkesinlikle integer bir deger olmalıdır
--
MaxSize eger max size belirlenmez ise db hdd kadar buyuyecektirkb mb gb tb olabilirdbnin ne kadar buyuyecegini belirten ozelliktir
--
Unlimited ldf dosyaları için 2tb ye kadarmdfler icin ise 16tbye kadar buyume oranı belirtilmis olur..
--
FileGrowth dosyanın buyume oranı demektirmdf 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 yaratabilirsinizamac databasein sahip oldugu tabloları bir arada tutan mantıksal bir nesneyi yaratmaktırsiz olusturmasanız dahi sizin icin bir tane primary yaratılırdiger 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,1primary key not null,
Adi varchar(30),
Soyadi varchar(20),
DogumTarihi datetime check(datediff(year,DogumTarihi,getdate())>=18null,
Telefon varchar(24) default 'tel no yok'
)
 
create table Siparisler
(
SiparisID int identity(1,1primary key not null,
SiparisTarihi datetime,
SiparisAdresi varchar(255),
CalisanID int foreign key references Calisanlar(CalisanID)
)
create table Ogrenciler
(
OgrenciAdi varchar(45unique
)
-- 
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,1primary key not null,
MarkaAdi varchar(30)
)
create table Modeller
(
ModelID int identity(1,1primary 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
(50not 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,1primary 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-----------
--
1select sorgusu uzerine insaa edilirler.
--
2karmasık select sorgularında kullanılır.
--
3amacsurekli calısan select sorgularını tekrar tekrar yazmak yerine sql içerisinde saklamak ve zamanı gelince kolay yoldan erişim
--
4yaratı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 ----------------
--
1Encyription
--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
 
---- 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')
 
-- 
3with 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 
--1select gibi bir sorgu yazamazsınızkolon adları acık bir sekilde yazılmalıdır
--
2from dedikten sonra yazılacak olan tablo adının tam adı yazılmalıdırdbo.Categories gibi
 
----------------------------------------------------------------------
----------------------------------------------------------------------
---
PROCEDURE---YORDAM-YONTEM---
--
Calıstırmak istedigimiz kodları onbellekte calısmaya hazır bir sekilde bekletebilirizbu 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)
 
--
Calsitirma---- 
Exec KEkle 'deneme kargo','48584'
 
--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ırbu 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 ozelliktiraynı c# ta oldugu gibi içerisinde yaptıgı işlerden sonra bize bir bilgi doner. return anahtar kelimesi ile.. 
--Scalar Fonksiyonlar yaptıkları işlerden sonra tek bir deger donerler.
--
2Table 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(EmployeeIDfrom Employees
----------------------------------------------------------
------------
Table Value Functions ------------------
--
geriye tablo donerlerbirden 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 2kargo 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,PhoneValues('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
--
1dml 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. )
--
2ddl trigger (create alter drop)
 
--
Trigger Modlari --- 
--
1After sadece tablolar uzerinde calıstırılabilirornegin bir tabloya kayıt eklemek istedigimiz zamankayıt eklendikten sonra bu trigger içerisindeki kodlar otomatik olarak calısır
--
2Instead Of tablolar ve viewler uzerinde kullanabilirsinizeylem gerceklesmeden once tetiklenen yapılardırişlemden once trigger tetiklendigi için asıl yapılması gereken iş yapılmazama 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 
--
1musteriler tablosunu olsturun
--2yedek_mus tablosunu olsuturun
--3musteriler tablosuna bir kayıt eklendikten sonra aynısını yedege atın.... 
--

create table Musteriler
(
MusteriID int identity(1,1primary key not null,
Adi varchar(50) ,
Soyadi varchar(50)
)
--
2-
create table Yedek_Mus
(
MusteriID int identity(1,1primary 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,SoyadiValues(@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ırdatabase 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ırbir olayın tamamını gerceklestirebilmek için birden fazla eyleme ihtiyacınız varsa transaction kullanılırya tum işlemler basarılı olacak ve commit edeceksinizyada basarısızlık durumunda rollback ile sanki olaylar hic olmamıs gibi basa doneceksiniz.. 
begin tran
Insert Into Shippers
(CompanyName,PhoneValues('deneme tran','34543')
Update Products Set Unitprice Unitprice +1
Delete from Shippers where ShipperID 
>3
Insert Into Shippers
(CompanyName,PhoneValues('tran kargo','34543')
commit tran
if @@error <>0
begin
rollback tran
end
 
--- Try Catchli Kullanım
begin 
try
 
begin tran
Insert Into Shippers
(CompanyName,PhoneValues('deneme tran','34543')
Update Products Set Unitprice Unitprice +1
Delete from Shippers where ShipperID 
>3
Insert Into Shippers
(CompanyName,PhoneValues('tran kargo','34543')
commit tran
end 
try
begin catch
rollback tran
end 
catch
 
-----------------------------------------------------------------
-----------------------------------------------------------------
--- 
BACKUP RESTORE -------------------
--
Backup yedeklemek 
--Recovery Modeller ----------
--
1Simple Rec eger db bu yapıya sahip ise transaction loglar min seviyede tutuluryapılan degisikliklerin tamamı loglanmazdolayı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ızsadece full ve differential backup alabilirsiniz.. 
--
2Full 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.. 
--
3Bulk Logged yarı full yarı simple gibidirtranaction loglar tutulur ancak saniye saniye degil bloklar halindetransaction 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 :
--
1istenilen zamana geri donebilmek saniye saniye yapılan işlemleri kaybetmemek gerekir
--
2ldf dosyasının dolması demek yapılan işlemlerin kaydedilmemesi demektirdb hata vermez ama hic bir işlemde yapmazbundan 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ırbu sayede geri yukleme garantisi verirdiger yontemlere gore yavas.. 
-- 
restore with norecovery geri yukleme sırasında meydana gelen hatalarda yukleme yapmaya devam ederhata duzelene kadar bilgileri kaybedersiniz.. hızlıdır
-- 
standby geri yukleme işlemini yapar ancak readonly sadece okuma modundainsert update delete haricinde sadece select sorgularını calıstırabilirsiniz.. 
----------------------------------------------------------
--
Transaction Belirli Bir zamana Geri Donme -----------
--
1database yaratılır
--2içerisine veriler ekle
--3full 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,1primary 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 uygulanabilireger tablonuzda primary key bir kolon varsa zaten clustered var demektir
--
NONCLUSTERED INDEX :
-- 
bir tabloda 249 adet olabilirilgili kolondaki bilgilere gore kayıtları kategorize ederkategorilerine gore kitaplar yaslarına gore insanlar yazarlara gore kitaplar 
 
--Indexler ne zaman uygulanmalı 
--
1tablonuz uzerinde cok fazla select sorgusu calıstırılıyor ise uygulanırselect sorgusunda en cok gecen adı gecen kolonlar indexlenir
--2eger index yapılacak tablo uzerinde cok sık insert update delete yapılırsa listeleme zorlasacagından index uygulanmaması daha iyi olur
--
3uygulanırsa rebuild işlemleri ile yeniden duzenlenme yapılır
--
4index onceligi daime where kosulunda gecen kolonlara verilmelidircunku 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
--
1disable olanları tekrar aktiflestirmek
--2bakı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 gosterinizana 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.CompanyNameSuppliers.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 engellerbunu 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ırdb 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ırkullanı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.
--
3ilgili db içerisine gidilerek roles bolumunden senaryonuz geregi tum rolleri yaratın ve alt bolumden bu role ait olan kisileri ekleyin
--
4role yetkiler verilerek işlem tamamlanır
 
-----------------------------------------------------
--
Senaryo :-- spawn adı ile bir login ve user olusturunnorthwind db uzerinde bu kisinin yetkileri asagıdaki gibidir
-- 
bu kisi ozel isimli rolee atanacaktırozel 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ırbu 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. 
--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 yontemdirfiziksel silme olarak adlandırılan yapıdırtablonun 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 :
--
1kolonların veri tipleri birbirine uygun olmalı
--2illa 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 yapabilirsinizyada sol yukarıdaki comboboxtan secim yapılır.. 
use 
Northwind
 
-- Select Sorgusu -- 
--
databaseimizdeki tablolardan ilgili bilgilerin alınması ve gosterilmesi amacı ile kullanılırsize her zaman bir sonuc kumesi (resultsetdoner
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
+as 'Toplama',2-'Cikartma',4/as Bolme,4*as [Carpma Islemi]
 
-- 
Metinsel Islemler ---------------------------------------
Select 'Asker' ' '+'Tamer'
Select 'Asker' ' '+'Tamer' as 'Adi Soyadi'
 
--harfler buyuk kucuk 
Select Lower
('DeNeMe')
Select Upper('deneme')
--
sonuc lg gelir cunku index mantıgı yoktur1 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 Soyadifrom 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 istemeyebilirsinizbazen 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 sorgulanamazbazen 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 aiturun bedeli 20 ile 100 arasında olan ve stoklarda 5 ve 5ten fazla bulunan urunleri gosteriniz... 
Select ProductName from Products
where CategoryID 
=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ı(ShipViaile tasınmıs siparislerin idlerini gosteriniz... 
--
112
Select OrderID from Orders
where 
(EmployeeID =or EmployeeID=or EmployeeID=3)
and 
Orderdate is not null and 
Shipvia 3
 
-- adi a ile baslayanstok 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=or SupplierID=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 alabilirsinizher 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 ProductNamelen(ProductName
from Products
order by len
(ProductNamedesc
 
----------------------------------------------
-- 
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
(FirstNamefrom Employees
--kac kategori
Select Count
(CategoryNamefrom 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 Countryfrom 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(Unitpricefrom Products
-- depoda toplam kac paralık mal var ? 
--
74050,85
Select Sum
(Unitprice*UNitsInStockfrom Products
-- 1997 yılında toplam kac paralık kargo ucreti odemisiz 
--
32468
--32164
Select Sum
(Freightfrom Orders
where year
(ShippedDate) = 1997
-- ortalama urun ucretini gosteriniz
--
28.8663
Select Sum
(Unitprice) / Count(ProductID)
from Products
 
-----------------------------------------------
--
Average Avg Ortalama Islemleri
Select Avg
(Unitpricefrom Products
-- 1345 nolu calısanımın almıs oldugu zamanında teslim edilmis siparislerimin ortalama kargo ucreti ne kadardır.  
Select Avg(Freightfrom Orders
where 
(EmployeeID=or EmployeeID=or EmployeeID=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(Freightfrom 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 
<> and Freight >40 and EmployeeID between 2 and 
 
------------------------------------------------------------
-- 
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(Unitpricefrom Products
Select min
(Unitpricefrom Products
-- en son isim 
Select max
(FirstNamefrom Employees
Select min
(FirstNamefrom Employees
 
------------------------------------------------------
--
When Oldugu zaman
--dbde tutulan verilerle raporda istenen veriler her zaman uyusmayabilirburada 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(EmployeeIDfrom Employees
group by Country
--ulkelere gore musteri sayım
Select Country
,Count(CustomerIDfrom Customers
group by Country
-- calısanlarıma gore siparis sayılarını gosterin1997 yılındakilere gore
Select EmployeeID,Count(OrderIDfrom 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ısurun 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 >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(Freightfrom Orders
inner join Employees on Employees
.EmployeeID Orders.EmployeeID
where Employees
.FirstName in ('Nancy','Andrew','Janet')
-- 
fransiz musterilerimden1996 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(OrderIDfrom 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.CategoryNameCount(ProductIDfrom 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(ProductIDfrom 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(Unitpricefrom 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
(OrderIDfrom Orders
inner join Employees on Employees
.EmployeeID=Orders.EmployeeID
where 
(year(getdate()) - year(Birthdate)) > 50
 
Select Count
(OrderIDfrom 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 halidircount 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(OrderIDfrom 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(Unitpricefrom 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(Unitpricefrom 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(Freightfrom 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 
yenidegeri1kolon2=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.
 
Alıntı ile Cevapla

IRCForumlari.NET Reklamlar
sohbet odaları sohbet odaları Benimmekan Mobil Sohbet
Cevapla

Etiketler
sorguları, sql, veritabanı


Konuyu Toplam 1 Üye okuyor. (0 Kayıtlı üye ve 1 Misafir)
 
Seçenekler
Stil

Yetkileriniz
Konu Acma Yetkiniz Yok
Cevap Yazma Yetkiniz Yok
Eklenti Yükleme Yetkiniz Yok
Mesajınızı Değiştirme Yetkiniz Yok

BB code is Açık
Smileler Açık
[IMG] Kodları Açık
HTML-Kodu Kapalı
Trackbacks are Kapalı
Pingbacks are Açık
Refbacks are Açık


Benzer Konular
Konu Konuyu Başlatan Forum Cevaplar Son Mesaj
Php İle Veritabanı Flevour PHP 0 26 Eylül 2012 13:20
php veritabanı classı HolySpectre PHP 0 13 Mayıs 2011 20:55
ADO İle Veritabanı Cemalizim Visual Basic 0 19 Temmuz 2008 16:52
Sorguları tamamlanan 8 asker Van'da tutuklandı!! Lee Haber Arşivi 0 11 Kasım 2007 17:01