FROM (Entity SQL)
SELECT deyimlerinde kullanılan koleksiyonu belirtir.
Söz dizimi
FROM expression [ ,...n ] AS C
Bağımsız değişkenler
expression
Deyiminde kaynak olarak kullanılacak bir koleksiyon veren geçerli sorgu SELECT
ifadeleri.
Açıklamalar
Yan FROM
tümcesi, bir veya daha fazla FROM
yan tümce öğesinin virgülle ayrılmış bir listesidir. FROM
yan tümcesi, bir deyimi için bir SELECT
veya daha fazla kaynak belirtmek için kullanılabilir. Yan tümcenin FROM
en basit biçimi, aşağıdaki örnekte gösterildiği gibi bir koleksiyonu ve deyimde kaynak olarak kullanılan diğer adı tanımlayan tek bir SELECT
sorgu ifadesidir:
FROM C as c
FROM Yan Tümcesi Öğeleri
Her FROM
yan tümce öğesi, Entity SQL sorgusundaki bir kaynak koleksiyonuna başvurur. Entity SQL şu yan tümce öğeleri sınıflarını FROM
destekler: simple FROM
yan tümce öğeleri, JOIN FROM
yan tümce öğeleri ve APPLY FROM
yan tümce öğeleri. Bu FROM
yan tümce öğelerinin her biri aşağıdaki bölümlerde daha ayrıntılı olarak açıklanmıştır.
Basit FROM Yan Tümcesi Öğesi
En FROM
basit yan tümce öğesi, bir koleksiyonu ve diğer adı tanımlayan tek bir ifadedir. İfade yalnızca bir varlık kümesi veya alt sorgu ya da koleksiyon türü olan başka bir ifade olabilir. Aşağıda bir örnek verilmiştir:
LOB.Customers as c
Diğer ad belirtimi isteğe bağlıdır. Yukarıdaki from yan tümcesi öğesinin alternatif belirtimi aşağıdakiler olabilir:
LOB.Customers
Diğer ad belirtilmezse, Entity SQL koleksiyon ifadesini temel alan bir diğer ad oluşturmayı dener.
JOIN FROM Yan Tümce Öğesi
Yan JOIN FROM
tümce öğesi, iki FROM
yan tümce öğesi arasındaki birleştirmeyi temsil eder. Entity SQL çapraz birleşimleri, iç birleşimleri, sol ve sağ dış birleşimleri ve tam dış birleşimleri destekler. Tüm bu birleşimler Transact-SQL'de desteklenme yöntemlerine benzer şekilde desteklenir. Transact-SQL'de olduğu gibi, içinde yer alan JOIN
iki FROM
yan tümce öğesi bağımsız olmalıdır. Yani, bağıntılı olamazlar. A CROSS APPLY
veya OUTER APPLY
bu durumlar için kullanılabilir.
Çapraz Birleşimler
Sorgu CROSS JOIN
ifadesi, aşağıdaki örnekte gösterildiği gibi iki koleksiyonun Kartezyen ürününü üretir:
FROM C AS c CROSS JOIN D as d
İç Birleşimler
, INNER JOIN
aşağıdaki örnekte gösterildiği gibi iki koleksiyonun kısıtlanmış Kartezyen ürününü üretir:
FROM C AS c [INNER] JOIN D AS d ON e
Önceki sorgu ifadesi, sağ taraftaki koleksiyonun her öğesiyle eşleştirilen ve koşulun true olduğu soldaki koleksiyonun her öğesinin bir birleşimini ON
işler. Herhangi bir ON
koşul belirtilmezse, bir INNER JOIN
olarak dejenere olur CROSS JOIN
.
Sol Dış Birleşimler ve Sağ Dış Birleşimler
Sorgu OUTER JOIN
ifadesi, aşağıdaki örnekte gösterildiği gibi iki koleksiyonun kısıtlanmış Kartezyen ürününü oluşturur:
FROM C AS c LEFT OUTER JOIN D AS d ON e
Önceki sorgu ifadesi, sağ taraftaki koleksiyonun her öğesiyle eşleştirilen ve koşulun true olduğu soldaki koleksiyonun her öğesinin bir birleşimini ON
işler. ON
Koşul false ise, ifade yine de soldaki öğenin tek bir örneğini sağdaki öğeyle eşleştirilir ve null değeriyle işler.
A RIGHT OUTER JOIN
da benzer şekilde ifade edilebilir.
Tam Dış Birleşimler
Açık FULL OUTER JOIN
, aşağıdaki örnekte gösterildiği gibi iki koleksiyonun kısıtlanmış Kartezyen ürününü üretir:
FROM C AS c FULL OUTER JOIN D AS d ON e
Önceki sorgu ifadesi, sağ taraftaki koleksiyonun her öğesiyle eşleştirilen ve koşulun true olduğu soldaki koleksiyonun her öğesinin bir birleşimini ON
işler. ON
Koşul false ise, ifade yine de soldaki öğenin bir örneğini sağ taraftaki öğeyle eşleştirilir ve null değeriyle işler. Ayrıca, soldaki öğeyle eşleştirilen sağ taraftaki öğenin bir örneğini null değeriyle işler.
Not
SQL-92 uyumluluğunu korumak için Transact-SQL'de OUTER anahtar sözcüğü isteğe bağlıdır. Bu nedenle, LEFT JOIN
, RIGHT JOIN
ve FULL JOIN
, ve FULL OUTER JOIN
için LEFT OUTER JOIN
RIGHT OUTER JOIN
eş anlamlıdır.
APPLY Yan Tümcesi Öğesi
Entity SQL iki tür APPLY
destekler: CROSS APPLY
ve OUTER APPLY
.
A CROSS APPLY
, soldaki koleksiyonun her öğesinin, sağdaki ifadeyi değerlendirerek üretilen koleksiyonun bir öğesiyle benzersiz bir eşleştirmesi oluşturur. CROSS APPLY
ile, sağdaki ifade, aşağıdaki ilişkili koleksiyon örneğinde gösterildiği gibi, işlevsel olarak soldaki öğeye bağımlıdır:
SELECT c, f FROM C AS c CROSS APPLY c.Assoc AS f
öğesinin CROSS APPLY
davranışı birleştirme listesine benzer. Sağdaki ifade boş bir koleksiyon olarak değerlendirilirse, CROSS APPLY
soldaki öğenin bu örneği için hiçbir eşleştirme oluşturmaz.
sağdaki OUTER APPLY
ifade boş bir CROSS APPLY
koleksiyon olarak değerlendirildiğinde bile bir eşleştirmenin yine de üretilmesi dışında , değerine benzer. Aşağıda bir örneği verilmiştir OUTER APPLY
:
SELECT c, f FROM C AS c OUTER APPLY c.Assoc AS f
Not
Transact-SQL'in aksine, Entity SQL'de açık bir istenmeyen adıma gerek yoktur.
Not
CROSS
ve OUTER APPLY
işleçleri SQL Server 2005'te kullanıma sunulmuştur. Bazı durumlarda, sorgu işlem hattı ve/veya OUTER APPLY
işleçleri içeren CROSS APPLY
Transact-SQL üretebilir. SQL Server'ın SQL Server 2005'ten önceki sürümleri de dahil olmak üzere bazı arka uç sağlayıcıları bu işleçleri desteklemediğinden, bu tür sorgular bu arka uç sağlayıcılarında yürütülemez.
Çıkış sorgusunda ve/veya OUTER APPLY
işleçlerinin CROSS APPLY
bulunmasına yol açabilecek bazı tipik senaryolar şunlardır: sayfalama ile bağıntılı alt sorgu; AnyElement, bağıntılı bir alt sorgu veya gezinti tarafından üretilen bir koleksiyon üzerinden; Öğe seçici kabul eden gruplandırma yöntemlerini kullanan LINQ sorguları; veya öğesinin CROSS APPLY
açıkça belirtildiği bir OUTER APPLY
sorgu; bir yapı üzerinde yapısı olan bir DEREF
REF
sorgu.
FROM Yan Tümcesinde Birden Çok Koleksiyon
yan tümcesi FROM
virgülle ayrılmış birden fazla koleksiyon içerebilir. Böyle durumlarda koleksiyonların bir araya toplanmış olduğu varsayılır. Bunları n yönlü CROSS JOIN olarak düşünün.
Aşağıdaki örnekte C
bağımsız D
koleksiyonlardır, ancak c.Names
öğesine bağımlıdır C
.
FROM C AS c, D AS d, c.Names AS e
Önceki örnek mantıksal olarak aşağıdaki örnekle eşdeğerdir:
FROM (C AS c JOIN D AS d) CROSS APPLY c.Names AS e
Sol Bağıntı
Yan tümcesindeki FROM
öğeler, önceki yan tümcelerde belirtilen öğelere başvurabilir. Aşağıdaki örnekte C
bağımsız D
koleksiyonlardır, ancak c.Names
şunlara bağımlıdır C
:
from C as c, D as d, c.Names as e
Bu mantıksal olarak şuna eşdeğerdir:
from (C as c join D as d) cross apply c.Names as e
Semantik
Mantıksal olarak, yan tümcesindeki FROM
koleksiyonların bir n
yollu çapraz birleştirmenin parçası olduğu varsayılır (1 yönlü çapraz birleşim hariç). Yan tümcesindeki diğer adlar soldan FROM
sağa işlenir ve daha sonra başvurmak üzere geçerli kapsama eklenir. FROM
yan tümcesinin çok sayıda satır ürettiği varsayılır. Yan tümcesindeki FROM
her öğe için, bu koleksiyon öğesinden tek bir öğeyi temsil eden bir alan olacaktır.
FROM
Yan tümcesi mantıksal olarak Satır(c, d, e) türünde çok sayıda satır oluşturur; burada c, d ve e alanlarının C
, D
ve c.Names
öğe türünde olduğu varsayılır.
Entity SQL kapsamındaki her basit FROM
yan tümce öğesi için bir diğer ad tanıtır. Örneğin, aşağıdaki FROM yan tümcesi kod parçacığında, kapsama eklenen adlar c, d ve e'dir.
from (C as c join D as d) cross apply c.Names as e
Entity SQL'de (Transact-SQL'in aksine), FROM
yan tümcesi yalnızca kapsama diğer adları ekler. Bu koleksiyonların sütunlarına (özelliklere) yapılan tüm başvuruların diğer adla nitelenmiş olması gerekir.
İç İçe Sorgulardan Anahtarları Çekme
İç içe sorgudan anahtarların çekilmesini gerektiren bazı sorgu türleri desteklenmez. Örneğin, aşağıdaki sorgu geçerlidir:
select c.Orders from Customers as c
Ancak, iç içe sorguda anahtar olmadığından aşağıdaki sorgu geçerli değildir:
select {1} from {2, 3}