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 JOINve FULL JOIN , ve FULL OUTER JOINiçin LEFT OUTER JOINRIGHT OUTER JOINeş anlamlıdır.

APPLY Yan Tümcesi Öğesi

Entity SQL iki tür APPLYdestekler: 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 APPLYile, 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 APPLYkoleksiyon 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 nyollu ç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, Dve 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}

Ayrıca bkz.