Veritabanlarında veri tekrarını önlemek için birden fazla tablo kullanılabilir. Birden fazla olan tabloları birbirleriyle etkin bir biçimde kullanmak için Primary ve Foreign keyler sayesinde “tablo birleştirme” yapılmalıdır. Bu birleştirme işlemleri join komutlarıyla rahatlıkla yapılır. Northwind veritabanını kullanarak birkaç örnek yapalım.
Where Komutu ile Tablo Birleştirme
Join komutları olmadan da where kısıtlayıcısı ile de birleştirme koşulu yazarak tablolarımızı birleştirebiliriz.
--CompanyName,ShipName kolonlarını ilgili table'lardan çekip iki table da eşleşen verilere göre azalan sırada listeledik.Join olmadan sorguyu yazdık. select CompanyName,ShipName from Customers,Orders where orders.CustomerID=Customers.CustomerID order by Customers.CustomerID desc
JOIN Komutu ile Tablo Birleştirme
Inner Join: Tablolarda birleştirdiğimiz alana göre mevcut olan kayıtları getirir.Sadece eşleşen veriler gelir.
Outer Join
Left join: Join ifadesinin solunda kalan tablodaki tüm veriler diğer tablonun sadece ilgili alanları gelir.Diğer tabloda eşleşme yakalayamazsa NULL olarak atanır.
Right join: Left join mantığıyla çalışır. Sadece tersi durum çalışır.
Full join: Her iki kolonunda tüm verileri getirilir.Karşılığı olmayan veriler varsa NULL olarak atanır.
Cross Join
Seçilen alanlar arasındaki tüm ihtimaller getirilir dolayısıyla eşleşme kolonu yok.
--Yukarıdaki sorgunun inner join kalıbı ile yapılışıdır.Farklı tabloların farklı kolonlarındaki bilgilerin eşleşmesi yada eşleşmemesi durumuna göre veri döndürür. --Sadece eşleşen veriler geldi. select companyName,ShipName from Customers inner join Orders on orders.CustomerID=Customers.CustomerID --Aynı sorguyu outer join için yazalım,join ifadesinin solunda kalan tablodan tüm CompanyName verileri geldi(customer tablosu), orders tablosunda eşleşme yakalayamadıysa NULL atadı. select companyName,ShipName from Customers left join orders on Orders.CustomerID=Customers.CustomerID --ProductName ve Quantity iki farklı tablodan çektik Id eşleşmesine göre, eşleşme olmayanlar NULL olarak atandı. select ProductName,Quantity from Products left join [Order Details] on Products.ProductID=[Order Details].ProductID --Right join ifadesinin sağında kalan Orders tablosunun istenilen tüm verileri geldi.Eşleşme olmayanlar NULL olarak atandıç select ShipName,ShipCity,LastName,FirstName,CustomerID from Employees as E right join Orders as O on E.EmployeeID=O.EmployeeID order by E.EmployeeID --Full join ifadesi her iki tablonun tüm verilerini getirdi, karşılığı olmayan veriler varsa NULL olarak gelir. select ShipPostalCode,ShipCountry,City from Employees as E full join Orders as O on e.EmployeeID=o.EmployeeID order by e.EmployeeID --Seçilen tüm alanlar arasındaki tüm kombinasyonları getirir, dolayısıyla eşleme kolonu yok. select ProductName,UnitsOnOrder,CompanyName from Products cross join Suppliers