cemtopkaya (10:46):

21 Nisan 2016 Perşembe

SQL sorgu ifadeleri ile örnekler

-- yorum satırı
/*yorum satırı*/

--Select -> Seçme Sorgusu
--Veri sorgulamak ve görüntülemek için kullanılaır.
-- as ifadesinin solunda yazılan ifadeler column name'dir.

select 5 as Sayi
select 'Muhammed' as İsimler
select 13+24 as Deneme
select 'Sql' +' Dersleri' as Dersler
select 'Fatih' as Ad, 'Terim' as Soyad, 45 as Yas

--Select'in tablo sorgulama formülü
--select [kolon adları] from [tablo adı]
select * from Employees
select * from Categories
select * from Products
-- * -> girdiğimiz tablodaki tüm bilgileri gösterir.

-- girdiğimiz tablodaki belirli alanları aşağıdaki şekilde sorgulama yaparak gösterebiliriz.
select FirstName,LastName,City,Address from Employees


-- Where yapısı (kriter)

-- Where'in formülü: select kolanadi from tabloadı where kriter

-- eşitlik operatörü =
-- büyük eşit küçük eşit >=,<=
-- büyüktür,küçüktür >,<
-- eşit değildir !=
-- eşit değildir <>

-- Tüm tablomuzu çağıralım önce
select * from Employees

-- Çalışan id'si sadece 7 olan kaydı getir.
select * from Employees where EmployeeID=7

-- 3 nolu çalışanın almış olduğu siparişleri gösteriniz.
select * from Orders where EmployeeID=3

-- birim fiyatı 50 dolardan az olan ürünlerin adlarını görüntüleyiniz.
select * from Products where UnitPrice<50

-- ALFKI müşteri ad'li müşterinin siparişini gösteriniz.
select * from Orders where CustomerID='ALFKI'

-- Stokta 10 taneden az olan ürünleri gösteriniz.
select * from Products where UnitsInStock<10

-- Kategori id'si 2 olan ve 3 nolu tedarikçiden gelen ürünlerin adını gösteriniz.
select * from Products where CategoryID=2 and SupplierID=3

-- London'da yaşayan çalışanlar.
select * from Employees where City='London'

-- 1997 yılı siparişlerini gösteriniz
select * from Orders where YEAR(OrderDate)=1997 --yıl
select * from Orders where MONTH(OrderDate)=05 --ay
select * from Orders where DAY(OrderDate)=15 --gün

-- NANCY isimli çalışanın adresi nedir?
select FirstName,LastName Address from Employees where FirstName='NANCY'

-- null için is null, null olmayan için is not null diyoruz
select * from Customers where Region is null
select * from Customers where Fax is not null

-- Gönderilmemiş siparişlerin listesi?
select * from Orders where ShippedDate is null

-- Arasında ifadesi nedir?
-- stokta 10 ile 30 arasında bulunan ürünlerin listesini yazınız.
select * from Products where UnitsInStock>10 and UnitsInStock<30  --1. kullanım şekli
select * from Products where UnitsInStock between 10 and 30       --2. kullanım şekli

-- CompanyName k ile o arasındakileri listeleyiniz.
select * from Customers where CompanyName between 'k' and 'o'

-- Veya ifadesi nedir?
-- kategori id'si 3,5,8 olan ürünleri gösteriniz.
select * from Products where CategoryID=3 or CategoryID=5 or CategoryID=8  --1. kullanım şekli
select * from Products where CategoryID in (3,5,8)   --2. kullanım şekli

-- 2,3,4 nolu çalışanların 1997 yılında almış oldukları siparişler?
select * from Orders where EmployeeID in (2,3,4) and YEAR(OrderDate)=1997

-- Like : belirli bir şablona göre verilerin filtrelenmesi için kullanılır.
-- Like'ın özel karakteri % karakteridir.
-- Like, where kriter yapısı ile birlikte kullanılır.
-- Like her zaman where ifadesinin sağında olur.


-- sadece ismi k harfi ile naşlayanları göster.
select * from Customers where CompanyName like 'k%'
-- % , sonrası beni bağlamaz. :) anlamındadır.

-- ismi k harfi ile bitenler
select * from Customers where CompanyName like '%k'
-- % , öncesi beni bağlamaz. :) anlamındadır.

-- isminde k harfi olanları göster
select * from Customers where CompanyName like '%k%'

-- belirsiz demek alt tire demektir _
-- ilk harfi belirsiz, ikinci harfi e olan companyName leri göster
select * from Customers where CompanyName like '_e%'

-- ilk harfi belirsiz olan ikinci harfi e olan, son harfi s olan
select * from Customers where CompanyName like '_e%s'

-- [^x] : değillerde bu ifade kullanılır.
-- ilk harfi belirsiz ikinci harfi e olan, son  harfi s olmayan
select * from Customers where CompanyName like '_e%[^s]'

-- ilk harfi l ve r olan şirketleri göster
select * from Customers where CompanyName like '[lr]%'

-- ilk harfi l ve r arasında olanları göster
select * from Customers where CompanyName like '[l-r]%'


-- AGGREGATE FONKSIYONLAR
-- Sorgu sonucuna bakarak işlem yapabilen fonksiyonlardır.
-- Select'ten hemen sonra yazılırlar.
-- => Count - Sum - Avg - Min - Max

-- Count : satırları sayar.
-- eğer sütun ismi verirsek değeri null olanları saymaz.

-- Kaç çeşit ürünüm vardır?
select COUNT(*) from Products

-- Kaç tane sipariş almışım.
select COUNT(OrderID) from Orders

-- Kaç sipariş gitmemiş?
select COUNT(*)-COUNT(ShippedDate) from Orders


-- Sum : Toplamı gösterir.
-- Hücre içindeki değerlere müdahale ediyo yani onları topluyor.

-- Stoktaki ürünlerin toplamı kaçtır?
select SUM(UnitsInStock) from Products

-- Ürünlerin birim fiyatı toplamı kaçtır?
select SUM(UnitPrice) FROM Products


-- Avg : Ortalama alır.

-- Üürnlerimizin fiyatlarının ortalaması kaçtır?
select AVG(UnitPrice) from Products

-- Max ve Min : maksimum , minumum alır.

-- En pahalı ürün?
select MAX(UnitPrice) from Products

-- En ucuz ürün?
select MIN(UnitPrice) from Products

-- Categori id'si 3 olan kaç çeşit ürünümüz vardır?
select COUNT(*) from Products where CategoryID=3

-- 2 nolu çalışanımın almış olduğu sipariş sayısı nedir?
select COUNT(*) from Orders where EmployeeID=2

-- Case ve Order by
-- Case : okunan kolondaki bilgiye göre farklı değerler ortaya çıkarmayı sağlayan yapıdır.


-- ekranda firstname ,lastname yazsın ve ünvanları türkçe olarak değişsin.
 select FirstName,LastName,TitleOfCourtesy, Unvan=case TitleOfCourtesy
 when 'Ms.' then 'Bayan'
 when 'Dr.' then 'Doktor'
 when 'Mr.' then 'Bay'
 else 'Sayın'
 end from Employees

 -- Order by => sıralamak.

 -- Küçükten büyüğe sıralamak için asc (varsayılan)
 -- Büyükten küçüğe sıralamak için desc

 -- Ürün fiyatlarını sırala. defoult olarak küçükten büyüğe sıralayacak asc ifadesini kullansakta kullanmasakta
 select * from Products order by UnitPrice

 -- Ürün fiyatlarını büyükten küçüğe sırala.
 select * from Products order by UnitPrice desc

 -- Group by : sorgularımızı gruplamaya yardımcı olur.
 -- group by, where'den sonra yazılır.

 -- 1 nolu çalışanın almış olduğu sipariş sayısı?
 select COUNT(*) from Orders where EmployeeID=1

 -- her çalışanın toplamda almış olduğu sipariş sayıları kaçtır?
 select COUNT(*) from Orders group by EmployeeID

 -- kargo firmaları kaç tane sipariş almıştır?
 select shipVia,COUNT(*) from Orders group by ShipVia

 -- hangi katagoride kaç ürün olduğunu gösteriniz?
 select CategoryID, COUNT(*) from Products group by CategoryID

 -- hangi ülke ne kadar satış yapılmış?
 select ShipCountry, COUNT(*) from Orders group by ShipCountry

 -- nakliye şirketlerine toplam ne kadar ödenmiştir?
 select ShipVia, SUM(freight) from Orders group by ShipVia order by SUM(Freight) desc

 -- Müşterilere 1997 yılında kaç sipariş verilmiştir?
 select CustomerID,COUNT(*) from Orders where YEAR(OrderDate)=1997 group by CustomerID

 -- Kategorilerdeki stok miktarları?
 select CategoryID,COUNT(UnitsInStock)  from Products group by CategoryID

 -- Siparişlerden ne kadar kazanılmış?Büyükten küçüğe sırala
 select * from [Order Details]

 -- 1. kullanım
 select OrderID,SUM(UnitPrice*Quantity) from [Order Details] group by OrderID order by SUM(UnitPrice*Quantity) desc

 -- 2. kullanım
 select OrderID,SUM(UnitPrice*Quantity) as hesap from [Order Details] group by OrderID order by hesap desc

 -- çalışanların kaçı bay, kaçı bayan, kaçı doktor?
 select TitleOfCourtesy,COUNT(*) from Employees group by TitleOfCourtesy

 --JOINLER
 -- Bazen 2 yada daha fazla tablodan veri çekmemiz gerekebilir.
 -- Yani join tabloları birleştirmeye yarıyor.

 -- siparişler ve sipariş detaylarını birleştir.
 select * from Orders
 select * from [Order Details]

 select * from Orders join [Order Details] on Orders.OrderID=[Order Details].OrderID

 -- ürünler  ile kategorileri birleştir.
 select * from Categories join Products on Categories.CategoryID=Products.CategoryID

 -- kategorilerdeki ürünlerin sayısını gösteriniz?
 select Categories.CategoryName,COUNT(*) as urunsayisi from Categories join Products on Categories.CategoryID=Products.CategoryID group by Categories.CategoryName

 -- Çalışanların aldığı siparişlerin sayısını gösteriniz?
 select Employees.FirstName,COUNT(*) from Employees join Orders on Employees.EmployeeID=Orders.EmployeeID group by Employees.FirstName

 -- Nakliye şirketlerine ne kadar ödeneceğini listeleyiniz?
 select Shippers.CompanyName,SUM(Freight) from Orders join Shippers on Orders.ShipVia=Shippers.ShipperID group by Shippers.CompanyName

 -- Kategorilerden yapılan satış sayısını çıkarınız.
 select * from Categories join Products on Categories.CategoryID=Products.CategoryID join
 [Order Details] on Products.ProductID=[Order Details].ProductID join Orders on [Order Details].OrderID=Orders.OrderID

 -- Müşterilerim hangi ürünleri almış?
 -- distinct : benzer komutları yok eder.select'ten sonra yazılır.
 select distinct Customers.CompanyName,Products.ProductName from Customers join Orders on Customers.CustomerID=Orders.CustomerID
 join [Order Details] on orders.OrderID=[Order Details].OrderID join Products on [Order Details].ProductID=Products.ProductID


 -- ürünlerinden ne kadar para kazanmış?büyükten küçüğe sırala
 select Products.ProductName, SUM([Order Details].UnitPrice*[Order Details].Quantity) as Kazanç from Products join
 [Order Details] on Products.ProductID=[Order Details].ProductID group by Products.ProductName order by Kazanç desc

 -- en değerli 3 müşterime tebrik kartı gönderelim?
 -- top : select ifadesinden hemen sonra kullanılır.
 select top 3 Customers.CompanyName, SUM([Order Details].UnitPrice*[Order Details].Quantity)
 as Kazanç from Customers join Orders on Customers.CustomerID=Orders.CustomerID join
 [Order Details] on Orders.OrderID=[Order Details].OrderID group by Customers.CompanyName
 order by Kazanç asc

 -- çalışanlarıma prim ödeyeceğim
 -- prim ödemem gereken ilk 5 çalışan
 -- 1. yazılış şekli
 select top 5 Employees.FirstName, SUM([Order Details].UnitPrice*[Order Details].Quantity) as Kazanç from Employees
 join Orders on Employees.EmployeeID=Orders.EmployeeID join [Order Details] on Orders.
 OrderID=[Order Details].OrderID group by Employees.FirstName order by Kazanç desc

 -- 2. yazılış şekli (kısaltılmış)
 select top 5 e.FirstName, SUM(od.UnitPrice*od.Quantity) as Kazanç from Employees as e
 join Orders as o on e.EmployeeID=o.EmployeeID join [Order Details] as od on o.
 OrderID=od.OrderID group by e.FirstName order by Kazanç desc

 -- hangi çalışan hangi çalışana bağlıdır?
 select e.EmployeeID,e.FirstName,em.FirstName from Employees as e join Employees as em on e.EmployeeID=em.ReportsTo

 -- left join : birleşmenin solundaki null değeri dikkate alarak işlem yapar.
  select e.EmployeeID,e.FirstName,em.FirstName from Employees as e left join Employees as em on e.EmployeeID=em.ReportsTo

 -- right join : birleşmenin sağındaki null değeri dikkate alarak işlem yapar.
  select e.EmployeeID,e.FirstName,em.FirstName from Employees as e right join Employees as em on e.EmployeeID=em.ReportsTo

  -- full outer join : her iki taraftan null'u ekler
  select e.EmployeeID,e.FirstName,em.FirstName from Employees as e full outer join Employees as em on e.EmployeeID=em.ReportsTo

  -- müşterilerimin aldığı siparişlerin sayısı?
  select c.CompanyName,COUNT(o.OrderID) as SiparişSayısı from Customers as c join Orders as
  o on c.CustomerID=o.CustomerID group by c.CompanyName order by SiparişSayısı desc

Konunun detaylı anlatımını buradan görebilirsiniz.

Hiç yorum yok:

Yorum Gönder