Dela via


SELECT (Entitets-SQL)

Anger de element som returneras av en fråga.

Syntax

SELECT [ ALL | DISTINCT ] [ topSubclause ] aliasedExpr
      [{ , aliasedExpr }] FROM fromClause [ WHERE whereClause ] [ GROUP BY groupByClause [ HAVING havingClause ] ] [ ORDER BY orderByClause ]
-- or
SELECT VALUE [ ALL | DISTINCT ] [ topSubclause ] expr FROM fromClause [ WHERE whereClause ] [ GROUP BY groupByClause [ HAVING havingClause ] ] [ ORDER BY orderByClause

Argument

ALLA Anger att dubbletter kan visas i resultatuppsättningen. ALLA är standardvärdet.

DISTINCT Anger att endast unika resultat kan visas i resultatuppsättningen.

VÄRDE Tillåter att endast ett objekt anges och lägger inte till på en radomslutning.

topSubclause Ett giltigt uttryck som anger antalet första resultat som ska returneras från frågan i formuläret top(expr).

Med parametern LIMIT för ORDER BY-operatorn kan du också välja de första n objekten i resultatuppsättningen.

aliasedExpr Ett uttryck för formuläret:

expr Som identifier | expr

expr En literal eller ett uttryck.

Kommentarer

SELECT-satsen utvärderas efter att satserna FROM, GROUP BY och HAVING har utvärderats. SELECT-satsen kan bara referera till objekt som för närvarande finns i omfånget (från FROM-satsen eller från yttre omfång). Om en GROUP BY-sats har angetts kan SELECT-satsen endast referera till aliasen för GROUP BY-nycklarna. Att referera till FROM-satsobjekt tillåts endast i aggregerade funktioner.

Listan över ett eller flera frågeuttryck som följer nyckelordet SELECT kallas för urvalslistan, eller mer formellt som projektion. Den mest allmänna formen av projektion är ett enda frågeuttryck. Om du väljer en medlem member1 från en samling collection1skapar du en ny samling med alla member1 värden för varje objekt i collection1, enligt följande exempel.

SELECT collection1.member1 FROM collection1

Om customers till exempel är en samling av typen Customer som har en egenskap Name som är av typen string, ger valet Name från customers en samling strängar, som illustreras i följande exempel.

SELECT customers.Name FROM customers AS c

Du kan också använda JOIN-syntax (FULL, INNER, LEFT, OUTER, ON och RIGHT). ON krävs för inre kopplingar och är nto tillåtet för korskopplingar.

Rad- och värdevalssatser

Entitets-SQL stöder två varianter av SELECT-satsen. Den första varianten, radval, identifieras med nyckelordet SELECT och kan användas för att ange ett eller flera värden som ska projiceras ut. Eftersom en radomslutning implicit läggs till runt de värden som returneras är resultatet av frågeuttrycket alltid en raduppsättning.

Varje frågeuttryck i en rad måste ange ett alias. Om inget alias anges försöker Entity SQL generera ett alias med hjälp av reglerna för aliasgenerering.

Den andra varianten av SELECT-satsen, värdeval, identifieras med nyckelordet SELECT VALUE. Det gör att endast ett värde kan anges och lägger inte till en radomslutning.

En radmarkering är alltid uttrycksbar när det gäller VALUE SELECT, vilket visas i följande exempel.

SELECT 1 AS a, "abc" AS b FROM C
SELECT VALUE ROW(1 AS a, "abc" AS b) FROM C

Alla och distinkta modifierare

Båda varianterna av SELECT i Entity SQL tillåter specifikationen av en ALL- eller DISTINCT-modifierare. Om DISTINCT-modifieraren anges elimineras dubbletter från samlingen som skapas av frågeuttrycket (upp till och med SELECT-satsen). Om ALL-modifieraren har angetts utförs ingen duplicerad eliminering. ALLA är standardvärdet.

Skillnader från Transact-SQL

Till skillnad från Transact-SQL stöder entitets-SQL inte användning av argumentet * i SELECT-satsen. I stället tillåter entitets-SQL att frågor projicerar ut hela poster genom att referera till samlingsaliasen från FROM-satsen, enligt följande exempel.

SELECT * FROM T1, T2

Det tidigare Transact-SQL-frågeuttrycket uttrycks i Entitets-SQL på följande sätt.

SELECT a1, a2 FROM T1 AS a1, T2 AS a2

Exempel

Följande SQL-entitetsfråga använder SELECT-operatorn för att ange vilka element som ska returneras av en fråga. Frågan baseras på AdventureWorks försäljningsmodell. Följ dessa steg för att kompilera och köra den här frågan:

  1. Följ proceduren i Så här kör du en fråga som returnerar StructuralType-resultat.

  2. Skicka följande fråga som ett argument till ExecuteStructuralTypeQuery metoden:

SELECT VALUE product FROM AdventureWorksEntities.Products 
    AS product WHERE product.ListPrice < @price

Se även