Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
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}