1 Źródło: http://pl.wikipedia.org/wiki/Join_(SQL) Zagadnienie, jakie

Transkrypt

1 Źródło: http://pl.wikipedia.org/wiki/Join_(SQL) Zagadnienie, jakie
Zagadnienie, jakie zostało opisane poniżej, to złączenie typu Left Join w zapytaniu LINQ.
Złączenie typu LEFT JOIN pozwala nam na uwzględnienie w wyniku danych, które nie posiadają
swoich odpowiedników w złączanych tabelach. Oznacza to, że jeśli w pierwszej tabeli pojawiają się
wiersze, które nie posiadają odpowiedników w drugiej tabeli to zostaną wzięte pod uwagę podczas
złączenia, ale puste kolumny zostaną wypełnione wartościami NULL1.
try
{
var query = from c in dc.Categories
from o in dc.Products.Where(a => a.CategoryID == c.CategoryID &&
a.CategoryID > 4).DefaultIfEmpty()
select new
{
c.CategoryID,
c.CategoryName,
c.Description,
o.ProductName,
o.QuantityPerUnit,
o.UnitPrice,
o.ReorderLevel
};
DgvWidok.DataSource = query;
}
Powyżej zaprezentowane zostało przykładowe zapytanie z użyciem łączenia Left Join.
Pobierane zostają wartości z tabel CATEGORIES oraz PRODUCTS. Zapytanie zostało zrealizowane z
klauzulą WHERE dla tabeli PRODUCTS, z której wyświetlane zostają rekordy spełniające następujące
warunki:
 Wartości CategoryID są równe w obu tabelach
 Wartości CategoryID pobierane z tabeli PRODUCTS są większe od 4
W klamrach „{}”select new deklarowane są kolumny jakie mają zostać wyświetlone.
Najważniejszą częścią zapytania wykorzystującego łączenie tabel jest metoda DefaultIFEmpty. To
właśnie dzięki tej metodzie otrzymujemy typ złączenia Left Join. Metoda ta odpowiada za
„dopisanie” wartości NULL w miejscu, gdzie brak wartości wydobywanych z tabeli Products dla
wartości z tabeli Categories. Najlepiej zobrazować to na przykładzie.
Rys. 1 Wyświetlone wartości bez zastosowanie metody DefaultIFEmpty()
1
Źródło: http://pl.wikipedia.org/wiki/Join_(SQL)
Na rysunku nr 1 przedstawione zostały wartości pobrane z bazy danych bez użycia metody
DefaultIfEmpty, widać zatem, że z obu tabel zostały pobrane wartości tylko te, które spełniały
warunek znajdujący się w klauzuli WHERE. Natomiast na rysunku nr 2 widać 4 pierwsze wiersze, gdzie
przypisane są tylko wartości CategoryID, CategoryName oraz Description(kolumny tabeli
CATEGORIES). Pozostałe kolumny (z tabeli PRODUCTS) zawierają puste komórki, gdyż nie spełniły
warunku: ”a.CategoryID > 4”.
Rys. 2 Wyświetlone wartości z użyciem metody DefaultIFEmpty()
Można zatem stwierdzić, że zapytanie z wykorzystaniem złączenia LEFT JOIN zostało wykonane
poprawnie.