Der Unterschied zwischen ihnen besteht darin, dass die erste Abfrage diese Spalte aliasiert und ihr einen eindeutigen Namen gibt, während die andere dies nicht tut.
Was bedeutet das?
SELECT * FROM (
SELECT 'asda' FROM dual
UNION
SELECT 'asdasda' FROM dual
)
WHERE ??? = ??
Diese Abfrage wird die Spalte nicht Aliasing, wenn Sie diese Spalte in der anderen Abfrage verwenden wollen, werden Sie ein Problem haben. Ich denke, der Standard ist, die Spalte nach dem, was Sie ausgewählt haben, zu benennen, was bedeutet, dass sie 'asda' heißen wird.
im Gegensatz zu:
SELECT * FROM (
SELECT 'asda' Col1 FROM dual
UNION
SELECT 'asdasda' as Col1 FROM dual
) WHERE Col1 <> 'asda'
Welche Sie diese Spalte aus einer äußeren Abfrage aufrufen lassen.
Der Standard ist, es als SELECT <Col> AS <New_Name>
zu schreiben, aber es kann auch mit der AS
geschrieben werden.