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.