SQL JOIN Kullanimi

JOIN İŞLEMLERİ

Tabloları bir birine  bağlama işlemi yapar.
INNER JOIN & JOIN Aynıdır.

SELECT
<tablo1Adi>.<kolonAdi>,
<tablo1Adi>.<kolonAdi>,
<tablo2Adi>.<kolonAdi>,
<tablo2Adi>.<kolonAdi>
FROM <tablo1Adi>
(INNER) JOIN <tablo2Adi> ON  <tablo1Adi>.<kolonAdi> = <tablo2Adi>.<kolonAdi>





ÜRÜN VE KATEGORİSİNİ GETİREN SORGU 

SELECT p.ProductName,c.CategoryName FROM Products p
INNER JOIN Categories c ON p.CategoryID = c.CategoryID

HANGİ ÜRÜNÜ HANGİ TEDARİKÇİDEN TEDARİK ETTİĞİMİZİ GÖSTEREN RAPORU VERİNİZ
SELECT p.ProductName,s.CompanyName FROM Products p
JOIN Suppliers s ON s.SupplierID = p.SupplierID

ÜRÜNLERİ KATEGORİSİ VE TEDARİKÇİSİ İLE GETİREN RAPOR 
SELECT p.ProductName,c.CategoryName,s.CompanyName FROM Products p
JOIN  Categories c ON p.CategoryID = c.CategoryID
JOIN  Suppliers s ON p.SupplierID = s.SupplierID

--Kargolar(Shippers)'dan 'Federal Shipping' firması ile taşınmış,
--Nancy çalışanının almış olduğu siparişlerin

CalisanID(EmployeeID),
ÇalışanAdıSoyadı(FirstName + ' ' + LastName),
ŞirketAdı(CompanyName),
SiparişID(OrderID),
SiparişTarihi(OrderDate),
KargoÜcreti(Freight)

Bilgilerini getiren raporu çıkartınız. Employees,Shippers,Orders


SELECT e.EmployeeID,e.FirstName + ' ' + e.LastName as 'Adı Soyadı',s.CompanyName,o.OrderID,o.OrderDate,o.Freight FROM Orders o
JOIN Shippers s ON o.ShipVia = s.ShipperID
JOIN Employees e ON e.EmployeeID = o.EmployeeID
WHERE s.CompanyName = 'Federal Shipping' AND e.FirstName = 'Nancy'

TOPLAM SİPARİŞ SAYISINI ÇALIŞANLARA GÖRE GETİRİNİZ(Hangi çalışan kaç adet sipariş almış)

ÇalışanAdıSoyadı,
ToplamSiparişSayısı

SELECT e.FirstName + ' ' + e.LastName as 'Ad Soyad',COUNT(o.OrderID) as  'Toplam Sipariş Sayısı' FROM Orders o
JOIN Employees e ON o.EmployeeID = e.EmployeeID
GROUP BY e.FirstName,e.LastName ORDER BY 2 DESC

ÜRÜN ALDIĞIMIZ TEDARİKÇİLERİ(Toptancı-Suppliers) ALMIŞ OLDUĞUMUZ ÜRÜN ADETİNE GÖRE BÜYÜKTEN KÜÇÜĞE DOĞRU RAPORLAYINIZ --> ŞirketAdı(CompanyName),Adet

SELECT s.CompanyName AS Tedarikçi,SUM(p.UnitsInStock) as 'Şirketten Alınan Ürünler' FROM Products p
JOIN Suppliers s ON p.SupplierID = s.SupplierID
GROUP BY s.CompanyName ORDER BY 2 DESC

HER BİR ÜRÜNDEN TOPLAM NE TUTARINDA SATIŞ YAPILMIŞTIR VE O ÜRÜN HANGİ KATEGORİYE AİTTİR

SELECT p.ProductName,
c.CategoryName,
ROUND(SUM(od.UnitPrice * od.Quantity * (1 - od.Discount)),2) as 'ToplamSatıs'
FROM Products p
JOIN Categories c ON c.CategoryID = p.CategoryID
JOIN [Order Details] od ON od.ProductID = p.ProductID
GROUP BY p.ProductName,c.CategoryName
ORDER BY ToplamSatıs DESC


TOPLAM SATILAN ADETİ 1200'ün ÜZERİNDE OLAN ÜRÜNLERİN ADLARINI VE ADETLERİNİ GETİREN RAPORU VERİNİZ. 
OrderDetails,Products
SELECT p.ProductName,SUM(od.Quantity) as ToplamAdet
FROM [Order Details] od
JOIN Products p ON od.ProductID = p.ProductID
WHERE (SELECT SUM(od.Quantity) FROM [Order Details] od) > 1200 -- YANLIŞ
GROUP BY p.ProductName
ORDER BY 2 DESC

SELECT p.ProductName,SUM(od.Quantity) as ToplamAdet
FROM [Order Details] od
JOIN Products p ON od.ProductID = p.ProductID
GROUP BY p.ProductName
HAVING SUM(od.Quantity) > 1200
ORDER BY 2 DESC

SQL HAVING


--250 'DEN FAZLA SİPARİŞ TAŞIMIŞ OLAN 
--(Shippers)KARGO FİRMALARININ 
--ADLARINI(CompanyName),
--TELEFONNUMARALARINI(Phone)
--TAŞIDIKLARI SİPARİŞ SAYILARINI RAPORLAYINIZ.

SELECT s.CompanyName,s.Phone,COUNT(o.OrderID) FROM Shippers s 
JOIN Orders o ON s.ShipperID = o.ShipVia 
GROUP BY s.CompanyName,s.Phone 
HAVING COUNT(o.OrderID) > 250

--------------REPORTS TO --------------
SELECT e.FirstName + ' ' +e.LastName as 'Patron',
r.FirstName + ' ' + r.LastName as 'Çalışan' 
FROM Employees e 
JOIN Employees r ON E.EmployeeID = r.ReportsTo


--LEFT OUTER JOIN 
SELECT e.FirstName + ' ' +e.LastName as 'Patron',
r.FirstName + ' ' + r.LastName as 'Çalışan' 
FROM Employees e 
LEFT OUTER JOIN Employees r ON E.EmployeeID = r.ReportsTo


--RIGHT OUTER JOIN
SELECT e.FirstName + ' ' +e.LastName as 'Patron',
r.FirstName + ' ' + r.LastName as 'Çalışan' 
FROM Employees e 
RIGHT OUTER JOIN Employees r ON E.EmployeeID = r.ReportsTo

SELECT e.FirstName + ' ' +e.LastName as 'Patron',
r.FirstName + ' ' + r.LastName as 'Çalışan' 
FROM Employees e 
CROSS JOIN Employees r 

-----------------------DATEDIFF-----------------------------------
SELECT 
calisan.FirstName + ' ' + calisan.LastName as 'Çalışan',
patron.FirstName + ' ' + patron.LastName,
DATEDIFF(YEAR,calisan.BirthDate,GETDATE())
FROM Employees calisan LEFT JOIN Employees patron ON calisan.ReportsTo = patron.EmployeeID
ORDER BY 3 DESC



Yorumlar

Bu blogdaki popüler yayınlar

En İyi 20 Hacker Duvar Kağıtları