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.
Az entity SQL-ben az azonosítók a lekérdezési kifejezések aliasait, változóhivatkozásait, objektumtulajdonságait, függvényeit stb. jelölik. Az Entity SQL kétféle azonosítót biztosít: egyszerű azonosítókat és idézett azonosítókat.
Egyszerű azonosítók
Az Entity SQL egyszerű azonosítója alfanumerikus és aláhúzásjeles karakterek sorozata. Az azonosító első karakterének betűrendes karakternek (a-z vagy A-Z) kell lennie.
Idézett azonosítók
A idézett azonosító a szögletes zárójelekbe ([]) zárt karakterek sorozata. Az idézett azonosítók lehetővé teszik az azonosítókban érvénytelen karaktereket tartalmazó azonosítók megadását. A szögletes zárójelek közötti összes karakter az azonosító részévé válik, beleértve az összes szóközt is.
A idézett azonosítók nem tartalmazhatják a következő karaktereket:
Newline.
Kocsi visszatér.
Lapfülek.
Backspace.
További szögletes zárójelek (vagyis az azonosítót leíró szögletes zárójelek).
Az idézett azonosítók Unicode-karaktereket is tartalmazhatnak.
Az idézett azonosítók lehetővé teszik olyan tulajdonságnév-karakterek létrehozását, amelyek nem érvényesek az azonosítókban, ahogyan az az alábbi példában is látható:
SELECT c.ContactName AS [Contact Name] FROM customers AS c
Idézőjeles azonosítók használatával is megadhat egy olyan azonosítót, amely az Entity SQL fenntartott kulcsszója. Ha például a típus Email rendelkezik "From" nevű tulajdonságtal, szögletes zárójelek használatával egyértelműsítheti azt a FENNTARTOTT FROM kulcsszóból az alábbiak szerint:
SELECT e.[From] FROM emails AS e
A pont (.) operátor jobb oldalán idézőjeles azonosítót használhat.
SELECT t FROM ts as t WHERE t.[property] == 2
Ha a szögletes zárójelet egy azonosítóban szeretné használni, adjon hozzá egy további szögletes zárójelet. A következő példában a "abc]" az azonosító:
SELECT t from ts as t WHERE t.[abc]]] == 2
Az idézett azonosító-összehasonlító szemantikákért lásd a bemeneti karakterkészletet.
Aliasozási szabályok
Javasoljuk, hogy szükség esetén adjon meg aliasokat az Entity SQL-lekérdezésekben, beleértve a következő Entity SQL-szerkezeteket:
Sorkonstruktor mezői.
A lekérdezési kifejezés FROM záradékában szereplő elemek.
A lekérdezési kifejezés SELECT záradékában található elemek.
Egy lekérdezési kifejezés GROUP BY záradékának elemei.
Érvényes aliasok
Az Entity SQL érvényes aliasai bármilyen egyszerű azonosító vagy idézett azonosító.
Alias létrehozása
Ha nincs megadva alias egy Entity SQL-lekérdezési kifejezésben, az Entity SQL az alábbi egyszerű szabályok alapján próbál aliast létrehozni:
Ha a lekérdezési kifejezés (amelynek az aliasa nincs meghatározva) egy egyszerű vagy idézett azonosító, akkor a rendszer ezt az azonosítót használja aliasként.
ROW(a, [b])példáulROW(a AS a, [b] AS [b])lesz.Ha a lekérdezési kifejezés összetettebb kifejezés, de a lekérdezési kifejezés utolsó összetevője egy egyszerű azonosító, akkor a rendszer ezt az azonosítót használja aliasként.
ROW(a.a1, b.[b1])példáulROW(a.a1 AS a1, b.[b1] AS [b1])lesz.
Javasoljuk, hogy ne használjon implicit aliast, ha később szeretné használni az aliasnevet. Amikor az aliasok (implicit vagy explicit) ütközést okoznak, vagy ugyanabban a hatókörben ismétlődnek, fordítási hiba lép fel. Az implicit alias akkor is átengedi a fordítást, ha az azonos nevű explicit vagy implicit alias szerepel.
Az implicit aliasok automatikusan jönnek létre a felhasználói bemenet alapján. Az alábbi kódsor például a NAME nevet fogja létrehozni mindkét oszlop aliasaként, ezért ütközik.
SELECT product.NAME, person.NAME
A következő kódsor, amely explicit aliasokat használ, szintén sikertelen lesz. A hiba azonban a kód beolvasásával nyilvánvalóbbá válik.
SELECT 1 AS X, 2 AS X …
Hatókörkezelési szabályok
Az Entity SQL olyan hatókörkezelési szabályokat határoz meg, amelyek meghatározzák, hogy egyes változók mikor láthatók a lekérdezési nyelven. Egyes kifejezések vagy utasítások új neveket vezetnek be. A hatókörkezelési szabályok határozzák meg, hogy hol használhatók ezek a nevek, és mikor vagy hol rejtheti el az elődjét egy másikkal azonos nevű új deklaráció.
Ha a nevek egy Entity SQL-lekérdezésben vannak definiálva, azt mondják, hogy egy hatókörön belül vannak definiálva. A hatókör a lekérdezés egy teljes régióját lefedi. Egy adott hatókörben lévő összes kifejezés vagy névhivatkozás láthatja az adott hatókörben definiált neveket. A hatókör kezdete és befejezése előtt a hatókörön belül definiált nevekre nem lehet hivatkozni.
A hatókörök beágyazhatók. Az Entity SQL egyes részei új hatóköröket vezetnek be, amelyek teljes régiókat fednek le, és ezek a régiók tartalmazhatnak más entitás SQL-kifejezéseket is, amelyek hatóköröket is bevezetnek. Ha a hatókörök beágyazottak, a hivatkozásokat tartalmazó legbelső hatókörben definiált nevekre lehet hivatkozni. A külső hatókörökben definiált nevekre is hivatkozhat. Az ugyanabban a hatókörben definiált két hatókör testvér hatókörnek minősül. A testvértartományokban definiált nevekre nem lehet hivatkozni.
Ha egy belső hatókörben deklarált név megegyezik egy külső hatókörben deklarált névvel, akkor a belső hatókörben vagy az adott hatókörben deklarált hatókörön belüli hivatkozások csak az újonnan deklarált névre vonatkoznak. A külső hatókörben lévő név rejtett.
Még ugyanazon a hatókörön belül sem lehet a nevekre hivatkozni a definiálásuk előtt.
A globális nevek a végrehajtási környezet részeként is létezhetnek. Ez tartalmazhat állandó gyűjtemények vagy környezeti változók nevét. Ahhoz, hogy egy név globális legyen, a legkülső hatókörben kell deklarálni.
A paraméterek nincsenek hatókörben. Mivel a paraméterekre mutató hivatkozások speciális szintaxist tartalmaznak, a paraméterek nevei soha nem ütköznek a lekérdezés többi nevével.
Lekérdezési kifejezések
Az Entity SQL lekérdezési kifejezés új hatókört vezet be. A FROM záradékban definiált nevek megjelenési sorrendben kerülnek a hatókörbe, balról jobbra. Az illesztéslistában a kifejezések a listában korábban definiált nevekre hivatkozhatnak. A FROM záradékban azonosított elemek nyilvános tulajdonságai (mezői stb.) nem lesznek hozzáadva a hatókörhöz. Az alias által minősített névnek mindig hivatkoznia kell rájuk. A SELECT kifejezés minden része általában a hatókörön belül van.
A GROUP BY záradék új testvértartományt is bevezet. Minden csoportnak lehet egy csoportneve, amely a csoport elemeinek gyűjteményére hivatkozik. Minden csoportosítási kifejezés új nevet is bevezet a csoport hatókörébe. Emellett a beágyazott aggregátum (vagy az elnevezett csoport) is hozzáadódik a hatókörhöz. Maguk a csoportosítási kifejezések a hatókörön belül vannak. A GROUP BY záradék használata esetén azonban a select-list (előrejelzés), a HAVING záradék és az ORDER BY záradék a csoport hatókörébe tartozik, nem pedig a hatókörön belülre. Az aggregátumok speciális kezelést kapnak, az alábbi felsorolásban leírtak szerint.
További megjegyzések a hatókörökről:
A kijelölési lista sorrendben új neveket is bevezethet a hatókörbe. A jobb oldali kivetítőkifejezések a bal oldalon kivetített nevekre hivatkozhatnak.
Az ORDER BY záradék a kiválasztási listában megadott nevekre (aliasokra) hivatkozhat.
A SELECT kifejezésben lévő záradékok kiértékelési sorrendje határozza meg a nevek hatókörbe való bevezetésének sorrendjét. A FROM záradékot először a WHERE záradék, a GROUP BY záradék, a HAVING záradék, a SELECT záradék és végül az ORDER BY záradék értékeli ki.
Összesítés kezelése
Az Entity SQL kétféle aggregátumot támogat: gyűjteményalapú összesítéseket és csoportalapú összesítéseket. A gyűjteményalapú aggregátumok az entity SQL által előnyben részesített szerkezetek, a csoportalapú összesítések pedig támogatottak az SQL-kompatibilitás szempontjából.
Az összesítés feloldásakor az Entity SQL először gyűjteményalapú összesítésként próbálja kezelni. Ha ez nem sikerül, az Entity SQL átalakítja az összesítő bemenetet a beágyazott aggregátumra mutató hivatkozássá, és megpróbálja feloldani ezt az új kifejezést az alábbi példában látható módon.
AVG(t.c) becomes AVG(group..(t.c))