SQL Server nie wymaga FROM
w oświadczeniu SELECT
.
Na przykład, nie ma żadnego błędu w składni zapytanie:
SELECT 2 AS t
WHERE 0 = 0
Zwraca jednego wiersza z kolumny t
i wartości 2
.
Możesz napisać prosty
SELECT 2 AS t
aby uzyskać ten sam rezultat.
Zapytanie jest taki sam jak ten:
SELECT *
FROM Customer_Tbl
WHERE EXISTS(
SELECT 2 AS Customer_Tbl
WHERE Customer_Tbl.Country = 'MEXICO'
);
Wewnętrzna Customer_Tbl
jest aliasem dla kolumny ze stałym 2
. Country
w WHERE
jest kolumną zewnętrznego stołu Customer_Tbl
.
Dobrze jest używać AS
dla aliasów i całkowicie zakwalifikować kolumny z ich nazwami.
Podczas próby uruchomienia wewnętrznej części osobno
SELECT 2 Customer_Tbl
WHERE Country = 'MEXICO'
nie powiodło się, ponieważ nie ma FROM
, ale dlatego, że parser nie wie, co jest Country
:
Msg 207, Poziom 16, Stan 1, Wiersz 2 Nieprawidłowa nazwa kolumny "Kraj".
Dla kompletności, tutaj jest składnia SELECT
oświadczenie w SQL Server od MSDN:
<SELECT statement> ::=
[ WITH { [ XMLNAMESPACES ,] [ <common_table_expression> [,...n] ] } ]
<query_expression>
[ ORDER BY { order_by_expression | column_position [ ASC | DESC ] }
[ ,...n ] ]
[ <FOR Clause>]
[ OPTION (<query_hint> [ ,...n ]) ]
<query_expression> ::=
{ <query_specification> | (<query_expression>) }
[ { UNION [ ALL ] | EXCEPT | INTERSECT }
<query_specification> | (<query_expression>) [...n ] ]
<query_specification> ::=
SELECT [ ALL | DISTINCT ]
[TOP (expression) [PERCENT] [ WITH TIES ] ]
<select_list>
[ INTO new_table ]
[ FROM { <table_source> } [ ,...n ] ]
[ WHERE <search_condition> ]
[ <GROUP BY> ]
[ HAVING <search_condition> ]
klauzule opcjonalne są w nawiasach kwadratowych [
]
. Jak widać, wszystkie klauzule są opcjonalne, w tym FROM
, z wyjątkiem samego słowa kluczowego SELECT
i <select_list>
.
Pytanie oparte na fałszywych założeniach. Produkt nie zgłasza błędów składniowych, gdy w rzeczywistości nie występują błędy składniowe. –