Megosztás:


FROM (Entity SQL)

A SELECT utasításokban használt gyűjteményt adja meg.

Szemantika

FROM expression [ ,...n ] AS C

Érvek

expression
Bármely érvényes lekérdezési kifejezés, amely egy gyűjteményt hoz létre forrásként egy SELECT utasításban.

Megjegyzések

A FROM záradék egy vagy több FROM záradékelem vesszővel tagolt listája. A FROM záradék egy vagy több utasítás forrásának megadására SELECT használható. A záradék legegyszerűbb formája FROM egyetlen lekérdezési kifejezés, amely egy utasítás forrásaként SELECT használt gyűjteményt és aliast azonosít, ahogyan az alábbi példában is látható:

FROM C as c

FROM záradékelemek

Minden FROM záradékelem egy forrásgyűjteményre hivatkozik az Entity SQL-lekérdezésben. Az Entity SQL a következő záradékelemek osztályait FROM támogatja: egyszerű FROM záradékelemek, JOIN FROM záradékelemek és APPLY FROM záradékelemek. Ezen FROM záradékelemek mindegyikét részletesebben a következő szakaszok ismertetik.

Egyszerű FROM záradékelem

A legegyszerűbb FROM záradékelem egyetlen kifejezés, amely azonosít egy gyűjteményt és egy aliast. A kifejezés lehet egyszerűen egy entitáskészlet, egy alquery vagy bármely más, gyűjteménytípusú kifejezés. Az alábbiakban egy példa látható:

LOB.Customers as c

Az alias specifikációja nem kötelező. A záradékelemből a fentiek alternatív specifikációja a következő lehet:

LOB.Customers

Ha nincs megadva alias, az Entity SQL megpróbál aliast létrehozni a gyűjteménykifejezés alapján.

JOIN FROM záradékelem

A JOIN FROM záradékelemek két FROM záradékelem közötti illesztéseket jelölnek. Az Entity SQL támogatja a keresztcsatlakozásokat, a belső illesztéseket, a bal és jobb oldali külső illesztéseket, valamint a teljes külső illesztéseket. Ezek az illesztések a Transact-SQL-ben támogatottakhoz hasonlóan támogatottak. A Transact-SQL-hez hasonlóan a két FROM záradékelemnek JOIN függetlennek kell lennie. Vagyis nem lehet korrelálni őket. A CROSS APPLY vagy OUTER APPLY használható ezekhez az esetekhez.

Keresztcsatlakozások

A CROSS JOIN lekérdezési kifejezés a két gyűjtemény Cartesian-szorzatát hozza létre az alábbi példában látható módon:

FROM C AS c CROSS JOIN D as d

Belső illesztések

Az An INNER JOIN a két gyűjtemény korlátozott Cartesian-termékét állítja elő az alábbi példában látható módon:

FROM C AS c [INNER] JOIN D AS d ON e

Az előző lekérdezési kifejezés a gyűjtemény minden elemének kombinációját dolgozza fel a bal oldalon a gyűjtemény minden eleméhez párosítva a jobb oldalon, ahol a ON feltétel igaz. Ha nincs ON megadva feltétel, egy INNER JOINCROSS JOIN.

Bal oldali külső illesztések és jobb oldali külső illesztések

A OUTER JOIN lekérdezési kifejezések a két gyűjtemény korlátozott Cartesian-szorzatát állítják elő, ahogyan az a következő példában is látható:

FROM C AS c LEFT OUTER JOIN D AS d ON e

Az előző lekérdezési kifejezés a gyűjtemény minden elemének kombinációját dolgozza fel a bal oldalon a gyűjtemény minden eleméhez párosítva a jobb oldalon, ahol a ON feltétel igaz. Ha a ON feltétel hamis, a kifejezés továbbra is feldolgozza a bal oldali elem egyetlen példányát a jobb oldali elemhez párosítva, null értékkel.

Az A RIGHT OUTER JOIN hasonló módon fejezhető ki.

Teljes külső illesztések

Az explicit FULL OUTER JOIN a két gyűjtemény korlátozott Cartesian-termékét állítja elő az alábbi példában látható módon:

FROM C AS c FULL OUTER JOIN D AS d ON e

Az előző lekérdezési kifejezés a gyűjtemény minden elemének kombinációját dolgozza fel a bal oldalon a gyűjtemény minden eleméhez párosítva a jobb oldalon, ahol a ON feltétel igaz. Ha a ON feltétel hamis, a kifejezés továbbra is feldolgozza a bal oldali elem egy példányát a jobb oldali elemhez párosítva, null értékkel. A jobb oldali elem egy példányát is feldolgozza a bal oldali elemhez párosítva, null értékkel.

Megjegyzés:

Az SQL-92-vel való kompatibilitás megőrzése érdekében Transact-SQL az OUTER kulcsszó nem kötelező. Ezért , LEFT JOINRIGHT JOINés FULL JOIN szinonimák az LEFT OUTER JOIN, RIGHT OUTER JOINés FULL OUTER JOIN.

APPLY záradékelem

Az Entity SQL kétféle APPLY: CROSS APPLY és OUTER APPLY.

Az A CROSS APPLY a gyűjtemény egyes elemeinek egyedi párosítását hozza létre a bal oldalon a gyűjtemény egy elemével, amelyet a jobb oldali kifejezés kiértékelésével állítanak elő. CROSS APPLYA jobb oldali kifejezés funkcionálisan a bal oldali elemtől függ, ahogy az a következő kapcsolódó gyűjteményi példában is látható:

SELECT c, f FROM C AS c CROSS APPLY c.Assoc AS f

A viselkedés hasonló CROSS APPLY az illesztési listához. Ha a jobb oldali kifejezés üres gyűjteménynek számít, a CROSS APPLY bal oldali elem adott példányához nem hoz létre párosítást.

CROSS APPLYA OUTER APPLY párosítások akkor is létrejönnek, ha a jobb oldali kifejezés üres gyűjteménynek számít. Az alábbiakban egy példa látható OUTER APPLY:

SELECT c, f FROM C AS c OUTER APPLY c.Assoc AS f

Megjegyzés:

A Transact-SQL-sel ellentétben az Entity SQL-ben nincs szükség explicit, legaptalanabb lépésre.

Megjegyzés:

CROSS és OUTER APPLY az operátorokat az SQL Server 2005-ben vezették be. Bizonyos esetekben a lekérdezési folyamat olyan Transact-SQL hozhat létre, amely tartalmazza és/vagy OUTER APPLY operátorokat tartalmazCROSS APPLY. Mivel egyes háttérszolgáltatók, köztük az SQL Server 2005-nél korábbi SQL Server-verziók nem támogatják ezeket az operátorokat, ezek a lekérdezések nem hajthatók végre ezeken a háttérszolgáltatókon.

Néhány tipikus forgatókönyv, amely a kimeneti lekérdezésben való jelenléthez CROSS APPLY és/vagy OUTER APPLY operátorokhoz vezethet: egy korrelált részlekérdezés lapozással; BármelyElement egy korrelált alkonfiguráció vagy egy navigációs rendszer által létrehozott gyűjtemény felett; OLYAN LINQ-lekérdezések, amelyek elemválasztót elfogadó csoportosítási metódusokat használnak; olyan lekérdezés, amelyben egy CROSS APPLY vagy egy OUTER APPLY explicit módon van megadva; olyan lekérdezés, amely szerkezettel DEREF rendelkezik egy REF szerkezeten keresztül.

Több gyűjtemény a FROM záradékban

A FROM záradék több gyűjteményt is tartalmazhat vesszővel elválasztva. Ezekben az esetekben a rendszer feltételezi, hogy a gyűjtemények össze lesznek illesztve. Gondoljon ezekre úgy, mint egy n-way CROSS JOIN.

Az alábbi példában CD független gyűjtemények, de c.Names függnek a következőktől C:

FROM C AS c, D AS d, c.Names AS e

Az előző példa logikailag egyenértékű a következő példával:

FROM (C AS c JOIN D AS d) CROSS APPLY c.Names AS e

Bal korreláció

A záradék elemei a FROM korábbi záradékokban megadott elemekre hivatkozhatnak. A következő példában CD független gyűjtemények, de c.Names a következőktől Cfügg:

from C as c, D as d, c.Names as e

Ez logikailag egyenértékű a következő értékeket:

from (C as c join D as d) cross apply c.Names as e

Szemantika

Logikailag a záradékban szereplő FROM gyűjtemények egy útkeresztbe illesztés nrészét képezik (kivéve egy 1irányú keresztcsatlakozás esetén). A záradék aliasai FROM balról jobbra vannak feldolgozva, és hozzáadódnak az aktuális hatókörhöz későbbi hivatkozás céljából. A FROM záradék feltételezi, hogy sorok többhalmazát hozza létre. A záradékban FROM minden elemhez egy mező lesz, amely az adott gyűjteményelem egyetlen elemét jelöli.

A FROM záradék logikailag sor(c, d, e) típusú sorokból álló többhalmazt hoz létre, ahol a c, d és e mezők az , Dés c.Names.C

Az Entity SQL egy aliast vezet be a hatókör minden egyszerű FROM záradékeleméhez. A következő FROM záradékrészletben például a hatókörbe bevezetett nevek a c, d és e.

from (C as c join D as d) cross apply c.Names as e

Az Entity SQL-ben (a Transact-SQLellentétben) a FROM záradék csak az aliasokat vezeti be a hatókörbe. A gyűjtemények oszlopaira (tulajdonságaira) mutató hivatkozásokat aliassal kell minősíteni.

Kulcsok lekérése beágyazott lekérdezésekből

Bizonyos típusú lekérdezések, amelyek kulcsokat igényelnek a beágyazott lekérdezésekből, nem támogatottak. Például a következő lekérdezés érvényes:

select c.Orders from Customers as c

A következő lekérdezés azonban érvénytelen, mert a beágyazott lekérdezés nem rendelkezik kulcsokkal:

select {1} from {2, 3}

Lásd még