Hallo
Kann mir vielleicht jemand bei folgendem Beispiel weiterhelfen.
Ich soll alle Angestellten anzeigen deren Nachname mit „J“, „K“, „L“ oder „M“ beginnt.
Ich habe die Aufgabe schon gelöst, aber ich habe sie nicht in ANSI SQL Geschrieben.
Habt Ihr einen Auszug, Übersicht oder was auch immer über den zu verwendenden ANSI-SQL-Standard (es gibt übrigens verschiende, je nach Jahr des Standards) bekommen? Die SQL-Spezifikation kostet, soweit ich gehört habe, Geld, richtig Geld. Keiner meiner bisherigen Arbeitgeber hat es für nötig erachtet, dieses zu investieren - auch wenn das Hauptprodukt eine SQL-basierte Anwendung war.
Aber:
> SELECT -- Schlüsselwort SELECT gehört zu jedem ANSI-SQL-Standard
last_name -- Spaltenname korrekt nach ANSI
> FROM -- Schlüsselwort FROM korrekt nach ANSI
employees
> WHERE -- Schlüsselwort WHERE korrekt nach ANSI
last_name LIKE 'J%' -- Spaltenname in Ordnung
-- Operator LIKE korrekt nach ANSI
-- Wildcard-Zeichen % sollte auch ANSI entsprechen
> OR -- Operator OR sollte auch korrekt sein
last_name LIKE 'K%'
> OR
last_name LIKE 'L%'
> OR
last_name LIKE 'M%'
Was zum Geier soll hier der ANSI-SQL-Spezifikation nicht entsprechen? Frag' das Deinen Dozenten, Betreuer. Ich bin der gleichen Ansicht wie Ilja: es entspricht der Spezifikation.
Vielleicht soll statt OR ein anderer Operator verwendet werden, MySQL unterstützt beispielsweise auch || als logisches ODER (ist || nicht in Oracle der Verknüpfungsoperator für Zeichenketten?). T-SQL hingegen nur OR und T-SQL brüstet sich durchaus damit, irgendwelche älteren ANSI-SQL-Standards zu erfüllen :-)
Alle weiteren Versuche von Dir zeugen eher von Verzweiflung und naivem Umgang mit dem IN-Operator. Sie sind bereits auf den ersten Blick völlig falsch.
Eine Idee hätte ich noch:
Ersetze den OR-Operator in Deiner WHERE-Klausel durch eine UNION-Operation für vier getrennte Abfragen, die jeweils die Daten mit einem Anfangsbuchstaben zurückliefern. Wenn Deine Ausbilder das haben wollten, dann gehörten sie gesteinigt.
Freundliche Grüße
Vinzenz