È possibile utilizzare un alias in un elenco di selezione di query per assegnare a una colonna un nome diverso. Puoi usare l'alias in GROUP BY
, ORDER BY
, o HAVING
clausole a cui fare riferimento nella colonna:
SELECT SQRT(a*b) AS root FROM tbl_name
GROUP BY root HAVING root > 0;
SELECT id, COUNT(*) AS cnt FROM tbl_name
GROUP BY id HAVING cnt > 0;
SELECT id AS 'Customer identity' FROM tbl_name;
L'SQL standard non consente i riferimenti agli alias di colonna in un WHERE
clausola. Questa restrizione è imposta perché quando il WHERE
viene valutata, il valore della colonna potrebbe non essere stato ancora determinato. Ad esempio, la seguente query è illegale:
SELECT id, COUNT(*) AS cnt FROM tbl_name
WHERE cnt > 0 GROUP BY id;
Il WHERE
La clausola determina quali righe devono essere incluse in GROUP BY
clausola, ma si riferisce all'alias di un valore di colonna che non è noto fino a quando le righe non sono state selezionate e raggruppate per GROUP BY
.
Nell'elenco di selezione di una query, è possibile specificare un alias di colonna tra virgolette utilizzando identificatori o caratteri di virgolette di stringa:
SELECT 1 AS `one`, 2 AS 'two';
Altrove nell'istruzione, i riferimenti all'alias tra virgolette devono utilizzare la virgoletta dell'identificatore o il riferimento viene trattato come una stringa letterale. Ad esempio, questa istruzione raggruppa in base ai valori nella colonna id, a cui si fa riferimento utilizzando l'alias a
:
SELECT id AS 'a', COUNT(*) AS cnt FROM tbl_name
GROUP BY `a`;
Ma questa istruzione raggruppa in base alla stringa letterale 'a' e non funzionerà come previsto:
SELECT id AS 'a', COUNT(*) AS cnt FROM tbl_name
GROUP BY 'a';
Fonte:https://docs.oracle .com/cd/E17952_01/refman-5.0-en/problemi-con-alias.html