Skip to content

Commit 428daf2

Browse files
authored
Add files via upload
1 parent 78821ef commit 428daf2

9 files changed

+1194
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,193 @@
1+
2+
--Aggragete Function Example
3+
4+
--1952 ile 1960 yılları arasında doğan çalışanlarımın adı ve soyadını tek bir sütunda, ünvanını ve doğum tarihini listeleyin
5+
--Not: Employees tablosunda Birthdate bilgisi 1948-12-08 00:00:00.000 şekilnde tutulmuş. Buradan yıl bilgisini söküp almak için SQL içerisinde gömül olarak bulunan (built-in) Year() fonksiyonunu kullanacağız.
6+
7+
select EmployeeID,
8+
(FirstName+' '+LastName) as [Full Name],
9+
YEAR(BirthDate) as [Birth Year],
10+
Title
11+
from Employees
12+
where YEAR(BirthDate) between 1952 and 1960
13+
14+
--Yaşı 60'dan büyük olan çalışanları listeleyiniz
15+
--DateDiff() => Yaş hesaplarken kullanabileceğimiz bir built-in methodtur.
16+
17+
select (FirstName+' '+LastName) as [Full Name],
18+
YEAR(BirthDate) as [Birth Year],
19+
DATEDIFF("YY", BirthDate, GETDATE()) as Age
20+
from Employees
21+
where DATEDIFF("YY", BirthDate, GETDATE()) > 60
22+
--Not: DATEDIFF() => Fonksiyonu içerisine parametre olarak verilen BirthDate ve GetDate() değerlerinden ilk parametre olarak verdiğimiz değere göre "YY" bilgisini alarak çıkartacak.
23+
24+
25+
select GETDATE() -- System saatini yani bize anı teslim eder
26+
27+
28+
--Çalışanların Id'si 2 ile 5 arasında olan kullanıcıları FirstName'lerine göre a'dan z'ye sıralayınız
29+
select (FirstName+' '+LastName) as [FullName],
30+
Title,
31+
DATEDIFF("YY", BirthDate, GETDATE()) as Age
32+
from Employees
33+
where EmployeeID between 2 and 5
34+
order by FirstName asc --Not: Order by ile asc kullanmaya gerek yoktur. Çünkü order by deyiminin varsayılan (default) değeri "asc"dir.
35+
36+
37+
--Aggragete Function
38+
--Sum() => İçerisine parametre olarak verilen değeri toplar
39+
select Sum(EmployeeID) as [Id'lerin Toplamı] from Employees
40+
41+
--Toplam stok durumu nedir?
42+
select Sum(UnitsInStock) as [Total Stock] from Products
43+
44+
--Order Details tablosundan faydalanarak, siparişlerin toplam tutarı
45+
select Sum(Quantity * UnitPrice * (1 - Discount)) from [Order Details]
46+
47+
--Çalışanların yaşlarının toplamı
48+
select SUM(DATEDIFF("YY", BirthDate, GetDate())) as [Total Age] from Employees
49+
50+
--Count() => Sorgu sonucunda dönen veri kümesinin satır sayısını sayar
51+
select COUNT(*) as [Toplam Çalışan Sayısı] from Employees
52+
53+
--Toplamda kaç sipariş gerçekleştirmişim (Order)
54+
select COUNT(OrderId) from Orders
55+
56+
--Kaç farklı şehirde oturan çalışanım var
57+
select Count(distinct City) from Employees
58+
--Not: "distinct" anahtar sözcüğü ile count fonksiyonu içeriisnde kullanılan parametredeki sütun içerisinde ki tekrar eden satırları görmezden gelir.
59+
--Uyarı: Count() fonksiyonunu kullanırken çok dikkatli olmalıyız. Şayet Count içerisine vereceğimiz parametrede tekrar eden değerler var ise çok yanlış sonuçlar elde edebiliriz.
60+
61+
--Average() => Ortamayı hesaplar
62+
63+
--Çalışanların yaşlarının ortalamasını bulalım
64+
select Avg(DATEDIFF("YY", BirthDate, GETDATE())) from Employees
65+
66+
--Siparişleirmden elde ettiğim gelirin ortalaması
67+
select Cast(Avg(Quantity * UnitPrice * (1 - Discount)) as smallmoney) from [Order Details]
68+
69+
--Min() & Max()
70+
select Min(UnitsInStock) from Products
71+
select Max(UnitsInStock) from Products
72+
73+
--En genç çalışan ve En yaşlı çalışanı bulun
74+
select Min(DATEDIFF("YY", BirthDate, GETDATE())) as [En Küçük Çalışan],
75+
MAX(DATEDIFF("YY", BirthDate, GetDate())) as [En Büyük Çalışan] from Employees
76+
77+
--Group By: Sorgu sonucunda dönen veri kümesi üzerinde gruplama işlemleri yapmka için kullanılır. Aggregate function kullanıldığında select alaında birdan fazla sütun varsa sorgu sonucunda bu sütunlardan herhangi birine göre gruplama yapmak gerekmektedir. Burada ki düşünce mantığımızı şöylede kurabiliriz. Group by kullandığımda verdiğim parametreyi select alanında da kullanmalıyım.
78+
79+
--hangi category altında kaç ürünüm var
80+
select CategoryID,
81+
COUNT(*) as Adet
82+
from Products
83+
group by CategoryID
84+
85+
select ProductID, CategoryID, ProductName from Products where CategoryID = 1
86+
87+
--UnitPrice 35'den büyük olan kaç tane ürünüm var ve bu ürünleri Categorilerine göre gruplayınız
88+
select CategoryID,
89+
COUNT(*) as Adet -- burada count her bir CategoryId için çalışacak
90+
from Products
91+
where UnitPrice > 35
92+
group by CategoryID
93+
94+
95+
--Her bir siparişten ne kadar para kazanmışım? (Her siparişin tutarına göre gruplayınız)
96+
select OrderID,
97+
Sum(Quantity * UnitPrice * (1- Discount)) as [Sipariş Tutarı] -- burada aggregate function her bir orderıd için çalışacak
98+
from [Order Details]
99+
group by OrderID
100+
order by [Sipariş Tutarı] desc
101+
102+
--Ürün baş harfi A-K aralığında olan, stok bilgisi 5 ile 50 arasında olan ürünleri kategorilerine göre gruplayınız. Elde edilen adet sayısına göre çoktan aza sıralayınız
103+
select CategoryID,
104+
Count(*) as Adet
105+
from Products
106+
where (ProductName like '[A-K]%') and
107+
(UnitsInStock between 5 and 50)
108+
group by CategoryID
109+
order by Adet Desc
110+
111+
select CategoryID,
112+
Count(*) as Adet
113+
from Products
114+
where (ProductName between 'A%' and 'K%') and
115+
(UnitsInStock between 5 and 50)
116+
group by CategoryID
117+
order by Adet Desc
118+
119+
--Ingilterede oturan kadınların, adı , soyadı birleştirerek, ünvanı, ülkesi, doğum tarihini listeliyinz
120+
select EmployeeID,
121+
(FirstName+SPACE(1)+LastName) as [Full Name],
122+
Title,
123+
TitleOfCourtesy
124+
from Employees
125+
where (Country = 'UK')
126+
and
127+
(TitleOfCourtesy = 'Mrs.' or TitleOfCourtesy = 'Ms.')
128+
and
129+
(FirstName like 'A%')
130+
131+
--Unvanı Mr. olanlar veya yaşı 60'tan büyük olanların, Id, Adı, Soyadı, Doğum Tarihi, ünvanı bilgilerini getirin
132+
select (TitleOfCourtesy+SPACE(1)+FirstName+SPACE(1)+LastName) as [Full Name],
133+
(
134+
Cast(YEAR(BirthDate) as varchar)
135+
+'.'+
136+
Cast(MONTH(BirthDate) as varchar)
137+
+'.'+
138+
Cast(DAY(BirthDate) as varchar)
139+
) as [Birth Date]
140+
from Employees
141+
where (TitleOfCourtesy = 'Mr.')
142+
or
143+
(DATEDIFF("YY", BirthDate, GETDATE()) > 60)
144+
145+
--Region bilgisi olmayan çalışanları listeleyin
146+
select * from Employees where Region is null
147+
148+
--Alfabetik olarak Janet ve Robert arasında olan çalışaçanları listeleyin
149+
select FirstName,
150+
LastName
151+
from Employees
152+
where FirstName between 'Janet' and 'Robert'
153+
order by FirstName
154+
155+
--Fosil olan çalışalı bulalım
156+
select Top 1 FirstName+SPACE(1)+LastName as [Full Name],
157+
YEAR(BirthDate) as Age
158+
from Employees
159+
order by Age asc
160+
161+
--Hangi ülkede kaç çalışalım var
162+
select Country,
163+
COUNT(*) as [Employee Count]
164+
from Employees
165+
--where Country is not null -- çalıştığımız tabloda null alanlar varsa muhakak bu where mantığıda düşünülmelidir
166+
group by Country
167+
168+
--Having
169+
--Sorgu sonucunda dönen veri kümesi üzerinde Aggreagete Fonksiyonlara bağlı olarak filtreleme işlemlerinde kullanılır. Şayet sorguda aggregate function yoksa where kullanılabilinir. Aggregate function sonucunda dönen veri kümesi üzerinde filtreleme için where kullanılamaz.
170+
171+
--Hangi category altındaki ürünlerin stok miktarıları 400'ün altındadır
172+
select CategoryID,
173+
Sum(UnitsInStock) as [Stock]
174+
from Products
175+
group by CategoryID
176+
having Sum(UnitsInStock) < 400
177+
order by Stock desc
178+
179+
--Her bir siparişteki toplam ürün sayısı 200 üzerinde olan siparişleri listeleyiniz
180+
select OrderID,
181+
Sum(Quantity) as [Total Product]
182+
from [Order Details]
183+
group by OrderID
184+
having Sum(Quantity) > 200
185+
order by [Total Product] desc
186+
187+
--Toplam Tutarı 2500 ile 3500 arasında olan siparileri sıralayalım
188+
select OrderID,
189+
Cast(Sum(Quantity * UnitPrice * (1 - Discount)) as decimal) as [Total Income]
190+
from [Order Details]
191+
group by OrderID
192+
having Sum(Quantity * UnitPrice * (1 - Discount)) between 2500 and 3500
193+
order by 2 desc

SQL Server Gıthub Note/SQL(DML).sql

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
--DML (Data Manipulating Language)
2+
--Veri tabanına veri ekleme, güncelleme ve silme
3+
-- Backend developer olarak bizim omuzlarımızdaki en büyük yük CRUD(Create-Read-Update-Delete) işlemleridir.
4+
--Bu işlemler neredeyse bir projenin yüzde 70 lik dilimini temsil eder. Özellikle Create, Update ve Delete
5+
--işlemlerinin başarıyla yürütülmesi, bunun yanında Read operasyonlarında da performans çok önemlidir.
6+
7+
8+
9+
--Uyarı: Insert işleminde ilgli tablonun Id sütunana biz değer vermiyoruz. Bütün veri tabaları bu sütuna kendisi otomatik olarak değer verir.
10+
-- insert işleminde önce insret atacağımız tablonun ismini daha sonra parantez içerisinde insert atılacak sütun isimleri yazılır. verilecek değerler sırasıyla bekirtilmelidir.
11+
12+
13+
--Kitap tablosuna yeni bir kitap girişi yapalım ve Tur tablosuna kitaba uygun bir tür satırı girişi yapalım
14+
insert tur (ad) values ('Fantaztik')
15+
16+
insert kitap(ad, sayfasayisi,puan,turno) values ('KralKatilli Güncesi', '736','100' , '20')
17+
18+
19+
--Update: Güncelleme işlemi için kullanılır.
20+
Update tur
21+
Set
22+
ad = 'Fantastik'
23+
where turno = 20
24+
25+
/*delete from tur where turno = 20*/
26+
27+
--Not: Update ve Delete operasyonlarında muhakak işlem yapılacak bilgi Id vb. biricik(Primary Key) alanlardan filtrelenerek uygulanmalıdır.
28+
--Yoksa tüm tabloya Update atar.
29+
+118
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
2+
3+
--User Defined Function
4+
--Useru Defined Function'lar sorgu sonucunda dönen veri kümesi üzerinde kullanılabilinirler(select ). Biz bugüne kadar sql içerisinde gömülü olarak kullanılan
5+
--fonksiyonları kullandık. Öenğin, DATEDIFF, Cast, Space vb. Bu fonksiyonlar sahip oldukları parametreler aracılığıyla kullanıcıdan
6+
--gelen değerleri karşılamakta ve işlemler yaparak bize bir sonuç dönmekteydiler. Örneğin en sık kullanıdığımız DATEDIFF() fonksiyonu 3
7+
--parametre almakta ve bize int tipinde bir sonuç dönmekteydi.UDF'ler ile biz kendi custom fonksiyonlarımızı yazabileceğiz.
8+
9+
--Fonksiyon kullanmamızdaki amaç yapılacak bir iş için yazılan tekrar kodlarını engelemektir. Örneğin bir işi handle etmek için 20 satır
10+
--kod yazmamız gerekiyor ve bu iş için aynı kodları uygulamada 20 kez kullanmamız gerekmektedir. Bu süreç bize 400 koda mal olmaktadır.
11+
--Ama bu süreci fonksiyon kullansaydık bu kodları bir kez yazıp onu ihtiyacımız olan yerde çağırsaydık bize daha temiz ve bakımı, onarımı
12+
--daha kolay olan kod blokları ile süreç daha yönetilebilir bir hale gelirdi.
13+
14+
15+
use Northwind
16+
17+
18+
19+
go
20+
CREATE FUNCTION KDVHESAPLA(@fiyat money) /*Fonksiyonu oluşturacağımız için "Create Function" + Foksiyon ismi(Yaptığı göreve uygun bir isim) +*/
21+
returns money -- geriye döndürülecek veri tipini belirtiyorum /* (@girilecek değer ismi + yapılmak istelinen işe ve değere uygun veri tipi )*/
22+
begin
23+
return @fiyat * 1.08
24+
end
25+
go
26+
27+
select ProductName,
28+
CategoryName,
29+
UnitPrice,
30+
dbo.KDVHESAPLA(UnitPrice) as [KDV'Li Tutar]
31+
from Products p
32+
join Categories c on p.CategoryID = c.CategoryID
33+
34+
35+
36+
--Satışlardan elde eidlen geliri hespalarken kullandığımız formülü bir fonksiyona taşıyılam 2debir yazmayalım
37+
38+
go
39+
CREATE FUNCTION SATIS(@miktar smallint, @birimfiyati money, @iskonto real)
40+
RETURNS int
41+
BEGIN
42+
return @miktar * @birimfiyati * 1 - @iskonto
43+
END
44+
go
45+
46+
47+
48+
select OrderID,
49+
SUM(DBO.SATIS(Quantity, UnitPrice, Discount)) as [SATIŞ]
50+
from [Order Details]
51+
group by OrderID
52+
order by SATIŞ desc
53+
54+
55+
56+
--Tablo döndüren fonksiyonlar.
57+
--Hangi ürünüm ne kadardan fazla satış almış , hangi ürün ilgi görmüş görebileceğimiz bir tablo yaratalım
58+
go
59+
CREATE FUNCTION CTGRYS (@miktar int)
60+
returns Table
61+
return
62+
select p.ProductName,
63+
64+
cast(sum(od.Quantity * od.UnitPrice * (1-Discount)) as decimal) [Satıs]
65+
from
66+
Categories c join Products p
67+
on c.CategoryID = p. CategoryID
68+
join [Order Details] od
69+
on od.ProductID = p.ProductID
70+
Group By p.ProductName
71+
Having sum(od.Quantity * od.UnitPrice * (1-Discount)) >= @miktar
72+
73+
go
74+
75+
76+
select * from CTGRYS(10)--
77+
78+
79+
80+
--Kullanıcıdan alınana kategori bilgisine göre, ilgili kategori altındaki ürünlerin satışından ne kadar gelir elde etmişim?
81+
go
82+
CREATE FUNCTION GetCategoryBySold(@category_name varchar(max))
83+
RETURNS TABLE
84+
return select c.CategoryName,
85+
sum(Quantity) as [Satılan Ürün Adedi],
86+
(CAST(SUM(od.Quantity*od.UnitPrice*(1-od.Discount)) as decimal)) as [Toplam Satış]
87+
from Products p
88+
join [Order Details] od on od.ProductID = p.ProductID
89+
join Categories c on c.CategoryID = p.CategoryID
90+
group by c.CategoryName
91+
having c.CategoryName = @category_name
92+
go
93+
94+
select * from GetCategoryBySold('Beverages')
95+
96+
97+
98+
--Kullanıcıdan alınan çalışan isim ve soyisim bilgisine göre, ilgili çalışan ne kadar satış getçekleştirmiş
99+
100+
CREATE FUNCTION Soru1(@Fullname nvarchar(20))
101+
RETURNS TABLE
102+
Return select e.FirstName,
103+
104+
Cast(SUM(od.Quantity * od.UnitPrice * (1- Discount)) as decimal) as [Satış]
105+
from
106+
Employees e join Orders o
107+
on e.EmployeeID = o.EmployeeID
108+
join [Order Details] od
109+
on od.OrderID = o.OrderID
110+
Group By e.FirstName
111+
having e.FirstName = @Fullname
112+
113+
114+
select * from Soru1('Andrew')
115+
116+
117+
118+

0 commit comments

Comments
 (0)