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
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
Yorum Gönder