Alias

Alias kan användas för att skapa ett tillfälligt namn på kolumner eller tabeller och namnet är bara giltigt i den SQL-satsen. En skillnad mellan tabeller och kolumner, är att inte nyckelordet AS behövs när man skapar ett alias för tabeller. För att slippa glömma AS när det behövs, föredrar jag att alltid använda det för tabeller också.

Man kan använda mellanslag när man skapar alias för ett kolumnnamn, men man bör undvika det för ett tabellnamn. Om ett alias innehåller mellanslag, måste man ha det inom enkla citationstecken eller hakparenteser. Det går även bra att använda citationstecken runt alias som inte innehåller mellanslag.

Skapa alias

Kolumner

SELECT 
    ReceptNamn,
    COUNT(*) AS 'Antal recept'
FROM 
    Recept
GROUP BY 
    RecptNamn;

Eftersom jag använder en aggregatfunktion och har med kolumnen ”ReceptNamn” utan att det också är en aggregatfunktion, måste jag lägga in den i en GROUP BY sats.

Tabeller

SELECT
    ReceptNamn
FROM
    TableRecept Recept;

Alias i WHERE-satser

Det går att använda alias i satser med ORDER BY, GROUP BY och HAVING, men däremot inte i WHERE-satser. Orsaken till det beror på att WHERE kommer före SELECT och därför inte känner till några alias. För att lösa det finns det några alternativ:

Upprepa uttrycket

Att behöva upprepa uttrycket känns inte så bra. Dessutom kan uttrycken vara betydligt längre än nedanstående exempel och då är det definitivt inte roligt att upprepa det.

SELECT
    FirstName + ' ' + LastName AS Name
FROM
    Persons
WHERE
    FirstName + ' ' + LastName LIKE 't%';

Skapa en användardefinierad funktion

Att skapa en användardefinierad funktion är inte mycket bättre och det krävs att du vet hur man skriver en användardefinierad funktion. Eftersom det inte går att använda alias i WHERE-satser med det här alternativet heller, så namnger ”Nettoinkomst” i exemplet bara kolumnen. Här nedan har jag skapat en funktion som räknar ut nettoinkomster med ett avdrag på 15000 före skatt och ett avdrag på 15000 efter skatt. Sedan har jag valt att visa alla personer som har en nettoinkomst över 100 000. Fördelen med den här funktionen är att uttrycket i både SELECT-satsen och i WHERE-satsen inte blir lika långt. Det kan underlätta att använda den här metoden för kalkyler som det här, men att skapa en funktion för exemplet ovan med för- och efternamn, är mycket tveksamt.

GO
CREATE FUNCTION min_Funktion ( @income float )
RETURNS float
AS
BEGIN
    RETURN (@Income-((@income-15000) * 0.30)-15000)
END
GO

SELECT
    dbo.min_Funktion(income) AS Nettoinkomst
FROM
    Persons
WHERE
    dbo.min_Funktion(income) > 100000;

CTE – Common table expression

En trevlig lösning är att använda common table expression. Med CTE lägger man in en tabelldefinition mellan parenteserna som i nedanstående exempel och sedan ställer man frågan.

WITH TempTabell AS (
    [...]
);

Ett riktigt exempel

Jag har lagt in en SELECT-sats i en CTE, som sammanfogar för- och efternamn samt namnger det med ett alias, ”Namn”.  Detta alias kan användas i SELECT-satsen efter CTE och då även i WHERE-satsen. I den vanliga SELECT-satsen, finns alias ”Namn” igen och den behöver vara med för att namnge kolumnen. Med den här metoden slipper vi upprepningar i WHERE-satsen.

WITH FirstAndLast AS (
    SELECT
        FirstName, LastName,
        FirstName + ' ' + LastName AS Namn
    FROM
        Persons
);

SELECT
    FirstName + ' ' + LastName AS Namn
FROM
    FirstAndLast
WHERE
    Namn LIKE '%u%';

Funktioner och CTE kommer jag att gå igenom i ett särskilt inlägg senare och jag antar att dessa inte ingår i grunderna för nybörjare.

2 kommentarer i “Alias

Kommentera

E-postadressen publiceras inte. Obligatoriska fält är märkta *