-- 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.