expertenaustausch > comp.* > comp.datenbanken.misc

Stefan Ram (14.01.2019, 10:39)
Nehmen wir einmal den Anfang einer einfachen
SELECT-Anweisung:

SELECT 'ABC'

. Wie kann ich diesen nach der ISO-SQL-Syntax analysieren?

Hier folgt ein Versuch. Aber ich finde das unübersichtlich.
Ist meine Analyse so korrekt?

»SELECT 'ABC'« ist eine <query specification> mit dem Aufbau
SELECT <select list>.

Jetzt muß ich nur noch zeigen, daß »'ABC'« eine <select list>
ist.

Eine <select list> kann eine <select sublist> sein.

Eine <select sublist> kann eine <derived column> sein.

Eine <derived column> kann eine <value expression> sein.

Eine <value expression> kann ein <row value expression> sein.

Eine <row value expression> kann ein
<row value special case> sein. - Hier finde ich es besonders
verwirrend, daß die meisten üblichen Ausdrücke einer
Auswahlliste als "special case" bezeichnet werden. Daher
frage ich mich, ob ich mich hier wirklich auf dem richtigen
Weg befinde!

Ein <row value special case> kann ein
<nonparenthesized value expression primary> sein.

Ein <nonparenthesized value expression primary> kann eine
<unsigned value specification> sein. - Hier ist "unsigned"
verwirred, da ich doch ein Zeichenfolgenliteral habe!

Eine <unsigned value specification> kann ein <unsigned literal>
sein.

Ein <unsigned literal> kann ein <general literal> sein.

Ein <general literal> kann ein <character string literal> sein.

Ein <character string literal> kann
<quote> [ <character representation>... ] <quote> sein.

<quote> ist »'«.

<character representation> kann <nonquote character> sein.

»A«, »B« und »C« sollte jeweils ein <nonquote character> sein.

(Ende des Analyseversuchs.)

War diese Analyse von »SELECT 'ABC'« nun korrekt?
Stefan Ram (14.01.2019, 10:57)
ram (Stefan Ram) writes:
>Eine <value expression> kann ein <row value expression> sein.


Und hier ist eine Alternative, die ebenfalls möglich ist!

Eine <value expression> kann auch eine <common value expression>
sein!

Eine <common value expression> kann eine <string value expression>
sein.

Eine <string value expression> kann eine <character value expression>
sein.

Eine <character value expression> kann ein <character factor> sein.

Ein <character factor> kann ein <character primary> sein.

Ein <character primary> kann ein <value expression primary> sein.

Ein <value expression primary> kann ein <nonparenthesize value
expression primary> sein.

(Und von dort geht es dann weiter wie zuvor.)

Ist »'ABC'« in »SELECT 'ABC'« nun also eine <row value expression>
oder eine <common value expression>?
Jörg Burzeja (14.01.2019, 22:00)
Am 14.01.2019 um 09:57 schrieb Stefan Ram:
> ram (Stefan Ram) writes:
>> Eine <value expression> kann ein <row value expression> sein.

> Und hier ist eine Alternative, die ebenfalls möglich ist!


Was ist denn eigentlich Dein Ziel?
Und sprichst Du von MSSQL? MySQL? ...
Peter J. Holzer (15.01.2019, 00:05)
On 2019-01-14 20:00, Jörg Burzeja <No_Spam_burzeja> wrote:
> Am 14.01.2019 um 09:57 schrieb Stefan Ram:
>> ram (Stefan Ram) writes:
>>> Eine <value expression> kann ein <row value expression> sein.

>> Und hier ist eine Alternative, die ebenfalls möglich ist!


Warum wundert mich jetzt gar nicht, dass der SQL-Standard mehrdeutig
ist? ;-)

> Was ist denn eigentlich Dein Ziel?
> Und sprichst Du von MSSQL? MySQL? ...


Nachdem er hier offensichtlich Syntax-Regeln aus dem SQL-Standard
zitiert, spricht er von Standard SQL, nicht einem tatsächlich
existierenden Dialekt.

hp
Ähnliche Themen