Share via


Id's (Entiteit SQL)

Id's worden gebruikt in Entity SQL om aliassen voor query-expressies, variabele verwijzingen, eigenschappen van objecten, functies enzovoort weer te geven. Entity SQL biedt twee soorten id's: eenvoudige id's en aanhalings-id's.

Eenvoudige id's

Een eenvoudige id in Entity SQL is een reeks alfanumerieke tekens en onderstrepingstekens. Het eerste teken van de id moet een alfabetisch teken (a-z of A-Z) zijn.

Id's tussen aanhaatjes

Een aanhalingsteken-id is een reeks tekens tussen vierkante haken ([]). Met aan geciteerde id's kunt u id's opgeven met tekens die niet geldig zijn in id's. Alle tekens tussen de vierkante haken maken deel uit van de id, inclusief alle witruimte.

Een id tussen aanhalingstekens mag niet de volgende tekens bevatten:

  • Newline.

  • Regelteruglooptekens.

  • Tabbladen.

  • Backspace.

  • Extra vierkante haken (vierkante haken binnen de vierkante haken die de id afbakenen).

Een aanhalingsteken-id kan Unicode-tekens bevatten.

Met aangeroepen id's kunt u eigenschapsnaamtekens maken die niet geldig zijn in id's, zoals wordt geïllustreerd in het volgende voorbeeld:

SELECT c.ContactName AS [Contact Name] FROM customers AS c

U kunt ook aanhalings-id's gebruiken om een id op te geven die een gereserveerd trefwoord van Entity SQL is. Als het type Email bijvoorbeeld een eigenschap heeft met de naam 'Van', kunt u deze als volgt onderscheiden van het gereserveerde trefwoord FROM met vierkante haken:

SELECT e.[From] FROM emails AS e

U kunt een aanhalingsteken-id aan de rechterkant van een puntoperator (.) gebruiken.

SELECT t FROM ts as t WHERE t.[property] == 2

Als u de vierkante haak in een id wilt gebruiken, voegt u een extra vierkante haak toe. In het volgende voorbeeld is 'abc]' de id:

SELECT t from ts as t WHERE t.[abc]]] == 2

Zie Invoertekenset voor vergelijkingssemantiek tussen id's.

Aliasregels

We raden u aan om waar nodig aliassen op te geven in Entiteit SQL-query's, met inbegrip van de volgende Entiteit SQL-constructies:

  • Velden van een rijconstructor.

  • Items in de FROM-component van een query-expressie.

  • Items in de SELECT-component van een query-expressie.

  • Items in de GROUP BY-component van een query-expressie.

Geldige aliassen

Geldige aliassen in Entity SQL zijn een eenvoudige id of id tussen aanhaaltekens.

Aliasgeneratie

Als er geen alias is opgegeven in een Entity SQL-queryexpressie, probeert Entity SQL een alias te genereren op basis van de volgende eenvoudige regels:

  • Als de query-expressie (waarvoor de alias niet is opgegeven) een eenvoudige of aanhalingeerde id is, wordt die id gebruikt als de alias. Zo wordt ROW(a, [b]) gewijzigd in ROW(a AS a, [b] AS [b]).

  • Als de query-expressie een complexere expressie is, maar het laatste onderdeel van die query-expressie een eenvoudige id is, wordt die id gebruikt als alias. Zo wordt ROW(a.a1, b.[b1]) gewijzigd in ROW(a.a1 AS a1, b.[b1] AS [b1]).

U wordt aangeraden geen impliciete aliasing te gebruiken als u de aliasnaam later wilt gebruiken. Wanneer aliassen (impliciet of expliciet) conflicteren of in hetzelfde bereik worden herhaald, wordt er een compilatiefout weergegeven. Een impliciete alias geeft compilatie door, zelfs als er een expliciete of impliciete alias van dezelfde naam is.

Impliciete aliassen worden automatisch gegenereerd op basis van gebruikersinvoer. De volgende coderegel genereert bijvoorbeeld NAME als een alias voor beide kolommen en veroorzaakt daarom een conflict.

SELECT product.NAME, person.NAME

De volgende regel code, die gebruikmaakt van expliciete aliassen, mislukt ook. De fout wordt echter duidelijker door de code te lezen.

SELECT 1 AS X, 2 AS X …

Bereikregels

Entiteit SQL definieert bereikregels die bepalen wanneer bepaalde variabelen zichtbaar zijn in de querytaal. In sommige expressies of instructies worden nieuwe namen geïntroduceerd. De bereikregels bepalen waar deze namen kunnen worden gebruikt en wanneer of wanneer een nieuwe declaratie met dezelfde naam als een andere declaratie de voorafgaande naam kan verbergen.

Wanneer namen zijn gedefinieerd in een Entiteit SQL-query, worden deze gedefinieerd binnen een bereik. Een bereik heeft betrekking op een hele regio van de query. Alle expressies of naamverwijzingen binnen een bepaald bereik kunnen namen zien die binnen dat bereik zijn gedefinieerd. Voordat een bereik begint en daarna eindigt, kan er niet naar namen worden verwezen die binnen het bereik zijn gedefinieerd.

Bereiken kunnen worden genest. Onderdelen van Entity SQL introduceren nieuwe bereiken die betrekking hebben op hele regio's en deze regio's kunnen andere Entiteit SQL-expressies bevatten die ook bereiken introduceren. Wanneer bereiken zijn genest, kunnen verwijzingen worden gemaakt naar namen die zijn gedefinieerd in het binnenste bereik, die de verwijzing bevat. Verwijzingen kunnen ook worden gemaakt naar namen die zijn gedefinieerd in alle buitenste bereiken. Twee bereiken die binnen hetzelfde bereik zijn gedefinieerd, worden beschouwd als bereiken op hetzelfde niveau. Verwijzingen kunnen niet worden gemaakt naar namen die zijn gedefinieerd binnen bereik van hetzelfde niveau.

Als een naam die in een binnenste bereik is gedeclareerd, overeenkomt met een naam die in een buitenste bereik is gedeclareerd, verwijzen verwijzingen binnen het binnenste bereik of binnen bereiken die binnen dat bereik zijn gedeclareerd alleen naar de zojuist gedeclareerde naam. De naam in het buitenste bereik is verborgen.

Zelfs binnen hetzelfde bereik kunnen namen niet worden verwezen voordat ze worden gedefinieerd.

Globale namen kunnen bestaan als onderdeel van de uitvoeringsomgeving. Dit kan bestaan uit namen van permanente verzamelingen of omgevingsvariabelen. Als een naam globaal moet zijn, moet deze worden gedeclareerd in het buitenste bereik.

Parameters bevinden zich niet in een bereik. Omdat verwijzingen naar parameters speciale syntaxis bevatten, komen namen van parameters nooit in conflict met andere namen in de query.

Query-expressies

Een Entiteit SQL-queryexpressie introduceert een nieuw bereik. Namen die in de FROM-component zijn gedefinieerd, worden in het bereik geïntroduceerd in volgorde van uiterlijk, van links naar rechts. In de joinlijst kunnen expressies verwijzen naar namen die eerder in de lijst zijn gedefinieerd. Openbare eigenschappen (velden enzovoort) van elementen die in de FROM-component zijn geïdentificeerd, worden niet toegevoegd aan het bereik. Er moet altijd naar worden verwezen door de alias gekwalificeerde naam. Normaal gesproken worden alle onderdelen van de SELECT-expressie in het bereik beschouwd.

De GROUP BY-component introduceert ook een nieuw bereik op hetzelfde niveau. Elke groep kan een groepsnaam hebben die verwijst naar de verzameling elementen in de groep. Elke groeperingsexpressie introduceert ook een nieuwe naam in het groepsbereik. Daarnaast wordt de nestaggregatie (of de benoemde groep) ook toegevoegd aan het bereik. De groeperingsexpressies zelf vallen binnen het bereik. Wanneer echter een GROUP BY-component wordt gebruikt, worden de select-list (projectie), DE HAVING-component en ORDER BY-component beschouwd als binnen het groepsbereik en niet het van-bereik. Aggregaties ontvangen een speciale behandeling, zoals beschreven in de volgende lijst met opsommingstekens.

Hier volgen aanvullende opmerkingen over bereiken:

  • In de select-list kunnen nieuwe namen in het bereik worden geïntroduceerd, in volgorde. Projectie-expressies aan de rechterkant kunnen verwijzen naar namen die aan de linkerkant zijn geprojecteerd.

  • De ORDER BY-component kan verwijzen naar namen (aliassen) die zijn opgegeven in de selectielijst.

  • De volgorde van evaluatie van componenten binnen de SELECT-expressie bepaalt de volgorde die namen in het bereik worden geïntroduceerd. De FROM-component wordt eerst geëvalueerd, gevolgd door de WHERE-component, GROUP BY-component, HAVING-component, SELECT-component en ten slotte de ORDER BY-component.

Aggregaties verwerken

Entity SQL ondersteunt twee vormen van aggregaties: op verzameling gebaseerde aggregaties en op groepen gebaseerde aggregaties. Aggregaties op basis van verzamelingen zijn de voorkeursconstructie in Entity SQL en op groepen gebaseerde aggregaties worden ondersteund voor SQL-compatibiliteit.

Bij het omzetten van een aggregaties probeert Entity SQL deze eerst te behandelen als een op verzameling gebaseerde statistische functie. Als dat mislukt, transformeert Entity SQL de geaggregeerde invoer in een verwijzing naar de nestaggregatie en probeert deze nieuwe expressie op te lossen, zoals wordt geïllustreerd in het volgende voorbeeld.

AVG(t.c) becomes AVG(group..(t.c))

Zie ook