Der SQL-Befehl kann verwendet werden, um Reports mit einer beliebigen unterstützten Datenquelle oder Datenquellen zu erstellen. Standardmäßige TABLE-Phrasen für das Formatieren von Reports können den SQL-Anweisungen angehängt werden, um eine Vielzahl von Optionen für die Vorbereitung von Reports zu nutzen.
Hinweis: Wenn Sie Datenquellen für Ihre Anfrage verknüpfen müssen, gibt es zwei Möglichkeiten: Verwenden Sie den JOIN-Befehl bevor Sie jegliche SQL-Anweisungen ausstellen oder verwenden Sie das WHERE-Prädikat in der SQL SELECT-Anweisung, um die benötigten Dateien dynamisch zu verknüpfen. Siehe SQL-Joins.
SQL
sql statement;
[ECHO|FILE]
[TABLE phrases]
END
Hierbei gilt:
Ist der Identifikator des SQL-Befehls, der den SQL Translator aufruft.
Hinweis: Die SQL-Befehlskomponenten müssen in der Reihenfolge erscheinen, die oben dargestellt ist.
Ist eine unterstützte SQL-Anweisung. Die Anweisung muss mit einem Semikolon (;) beendet werden. Sie kann länger als eine Zeile sein. Siehe Unterstützte SQL-Anweisungen.
In der SQL-Anweisung sind Feldnamen auf 48 Zeichen beschränkt (eine standardmäßige ANSI Level 2-Beschränkung). Ansichtsnamen, die mit der SQL CREATE VIEW-Anweisung erzeugt wurden, sind begrenzt auf 18 Zeichen und Unterabfragen können bis zu 15 Ebenen tief geschachtelt werden. Korrelierte Unteranfragen werden von FOCUS und anderen nicht relationalen Datenquellen nicht unterstützt.
Sind optionale Debugging-Phrasen, die die erzeugte TABLE-Anfrage aufzeichnen. Diese Optionen werden hinter der SQL-Anweisung platziert.
Schreibt die übertragenen TABLE-Phrasen in die benannte Prozedur. Wenn Sie keinen Dateinamen angeben, wird der Defaultname zugewiesen, wenn die Anfrage ausgeführt wird. Die Datei wird dann gelöscht.
Sind optionale TABLE-Formatierungsphrasen. Siehe TABLE-Formatierphrasen in SQL-Anfragen.
Ist erforderlich, um die Prozedur zu beenden.
Die folgende Anfrage enthält eine SQL-Anweisung und TABLE-Formatierungsbefehle:
SQL SELECT BODYTYPE, AVG(MPG), SUM(SALES) FROM CAR WHERE RETAIL_COST > 5000 GROUP BY BODYTYPE; TABLE HEADING CENTER "AVERAGE MPG AND TOTAL SALES PER BODYTYPE" END
Sie können TABLE-Formatierungsphrasen in eine SQL-Anfrage aufnehmen. Es gelten hierbei die folgenden Regeln:
Genaueres über Kopf- und Fußzeilen finden Sie unter Kopfzeilen, Fußzeilen, Titel und Labels verwenden.
Genaueres über ON TABLE HOLD oder ON TABLE PCHOLD finden Sie unter Ihre Reportausgabe speichern und wiederverwenden.
Die SQL SELECT-Anweisung wird in eine oder mehrere TABLE PRINT- oder TABLE SUM-Befehle übertragen, abhängig davon, ob Felder individuell angezeigt werden oder auf die Anfrage Aggregation angewendet wird. Siehe Reportdaten anzeigen.
Die SQL-Anweisung SELECT * wird in ein PRINT für jedes Feld in der Masterdatei übertragen und verwendet alle Felder des kartesischen Produkts. Dies ist eine schnelle Möglichkeit, eine Datei anzuzeigen, vorausgesetzt sie passt bei der Anzeige auf eine sinnvolle Anzahl von Bildschirmen oder vorausgesetzt Sie verwenden ON TABLE HOLD oder ON TABLE PCHOLD, um abgerufene Daten in einer Datei zur späteren Verwendung zu speichern. Siehe Ihre Reportausgabe speichern und wiederverwenden.
SQL-Funktionen (wie COUNT, SUM, MAX, MIN, AVG) werden in SELECT-Listen und HAVING-Bedingungen unterstützt. Formeln können als Funktionsargumente verwendet werden.
Die Funktion COUNT (*) wird übertragen in eine Zählung der erzeugten Datensätze, indem alle Felder in der Masterdatei gedruckt werden. Dies ist identisch mit dem Zählen aller Zeilen im kartesischen Produkt, das aus einem SELECT mit allen Feldern resultiert.
Wenn möglich werden Formeln im SQL WHERE-Prädikat in entsprechende WHERE-Kriterien in der TABLE-Anfrage übertragen. Formeln in SELECT-Listen erzeugen virtuelle Felder. Die SQL HAVING-Klauseln werden auch in entsprechende WHERE TOTAL-Kriterien in der TABLE-Anfrage übertragen. Der SQL LIKE-Operator wird direkt in den entsprechenden LIKE-Operator in den WHERE-Kriterien der TABLE-Anfrage übertragen. Genaueres über Datensatzauswahl in der TABLE-Anfrage finden Sie unter Datensätze für einen Report auswählen.
Es werden nur Unteranfragen unterstützt, die auf Gleichheit basieren, wenn die Formel WHERE verglichen wird mit einer Unteranfrage, indem das Gleichheitszeichen (=) verwendet wird. Beispiel: WHERE field = (SELECT ...).
Der Operator SQL UNION überträgt in eine TABLE-Anfrage, die eine HOLD-Datei für jede angegebene Datenquelle erstellt, gefolgt von einem MATCH-Befehl mit der Option HOLD OLD-OR-NEW, die Datensätze aus der ersten (alten) Datenquelle und der zweiten (neuen) Datenquelle kombiniert. Siehe Datenquellen kombinieren.
Zugehörige Informationen finden Sie unter Unterstützte SQL-Anweisungen und SQL Translator-Befehle verwenden.
Vorgehensweise: Referenz: |
Wenn SQL-Joins durchgeführt werden, müssen die Formate der verbundenen Felder identisch sein. Join-Felder müssen indiziert sein und es werden nicht-Equijoins unterstützt.
Es werden rekursive, äußere und innere Joins unterstützt. Innerer Join ist der Default.
Zwei Syntaxvariationen werden für innere Joins unterstützt.
Variation 1
SQL SELECT fieldlist FROM file1 [alias1], file2 [alias2] [WHERE where_condition]; END
Variation 2
SQL SELECT fieldlist FROM file1 [alias1] INNER JOIN file2 [alias2] ON join_condition [INNER JOIN ...] [WHERE where_condition]; END
Hierbei gilt:
Gibt an, welche Felder von welchen Datenquellen abgerufen werden.
Verbundene Felder im SQL WHERE-Prädikat müssen qualifiziert sein, wenn die Namen nicht eindeutig sind. Geben Sie sie mit den entsprechenden Dateinamen oder Dateialiasen an. Beispiel:
{file1|alias1}.field1, {file2|alias2}.field2
Stellt die Datenquellen vor, die verbunden werden sollen.
Sind die Datenquellen, die verbunden werden sollen.
Sind optionale alternative Namen für die Datenquellen, die verbunden werden sollen.
Ist eine optionale Auswahlbedingung für das verbundene Antwortset. Verbundene Zeilen, die diese Bedingung nicht erfüllen, werden im zurückgegebenen Antwortset weggelassen. Wenn in der Variation 1 weggelassen, ist das Antwortset das kartesische Produkt der beiden Datenquellen.
Ist die Join-Bedingung.
SQL SELECT fieldlist FROM file1 {LEFT|RIGHT|FULL} JOIN file2 ON join_condition [{LEFT|RIGHT|FULL} JOIN ...] WHERE where_condition END
Hierbei gilt:
Gibt an, welche Felder von welchen Datenquellen abgerufen werden sollen.
Verbundene Felder im SQL WHERE-Prädikat müssen qualifiziert sein, wenn die Namen nicht eindeutig sind. Geben Sie sie mit den entsprechenden Dateinamen oder Dateialiasen an. Beispiel:
{file1|alias1}.field1, {file2|alias2}.field2
Stellt die Datenquellen vor, die verbunden werden sollen.
Sind die Datenquellen, die verbunden werden sollen.
Sind optionale alternative Namen für die Datenquellen, die verbunden werden sollen.
Ist die Join-Bedingung. Die Bedingung muss Gleichheit angeben. Beispielsweise T1.A=T2.B.
Ist eine optionale Auswahlbedingung für das verbundene Antwortset. Verbundene Zeilen, die diese Bedingung nicht erfüllen, werden im zurückgegebenen Antwortset weggelassen.
Es werden den Joins, die vom SQL Translator ausgegeben werden, Namen im folgenden Format zugewiesen:
SQLJNMnn
Hierbei gilt:
Ist das Join-Präfix des SQL Translator.
Ist eine Zahl zwischen 01 und 16, die in der Reihenfolge zugewiesen wird, in der die Joins erstellt werden (FOCUS unterstützt maximal 16 Joins). Der erste Join hat den AS-Namen SQLJNM01, der zweite Join heißt SQLJNM02 usw., bis SQLJNM16.
Es werden alle Joins automatisch vom SQL Translator erstellt und gelöscht. Dies wirkt sich auf keine benutzerspezifizierten Joins aus.
In der folgenden Anweisung sind T.A und U.B qualifizierte Feldnamen:
SQL SELECT T.A, T.B FROM T, U WHERE T.A = U.B; END
In der folgenden Anweisung sind A und B Aliase für dieselbe Datenquelle (CAR). Die Ausgabe von CAR besteht aus Paaren von B-Werten, die dieselben A-Werte haben:
SQL SELECT A.SEATS, B.SEATS FROM CAR A, CAR B WHERE A.MODEL = B.MODEL; END
Beachten Sie, dass alle Feldnamen in der SELECT-Klausel eindeutig oder qualifiziert sein müssen.
In der folgenden Anweisung sind B, C und D Aliase für unterschiedliche Datenquellen:
SQL SELECT B.FIELD1 AS B_FIELD1, B.FIELD2 AS B_FIELD2, D.FIELD1 AS D_FIELD1, D.FIELD2 AS D_FIELD2 FROM ((FILE1 B FULL OUTER JOIN FILE2 C ON B.FIELD2 = C.FIELD2 ) FULL OUTER JOIN FILE3 D ON C.FIELD2 = D.FIELD2 ) WHERE B.FIELD1 < 2 END
Es werden mehrere FULL OUTER JOINS unterstützt. Sie erzeugen jedoch wenige bis viele temporäre HOLD-Dateien.
Weitere Informationen über Indexoptimierung und optimierte Join-Anweisungen finden Sie in der Dokumentation Ihres Servers.
Referenz: |
SQL Translator unterstützt die Befehle CREATE TABLE und INSERT INTO Tabelle:
Diese Befehle ermöglichen es Ihnen, Tabellen zu erstellen, um Reports effizienter zu erstellen.
Hinweis: Wenn Anwendungen aktiviert sind, werden Masterdatei und Datenquelle in das APPHOLD-Verzeichnis geschrieben. Wenn Anwendungen deaktiviert sind, werden die Masterdatei und Datenquelle in das TEMP-Verzeichnis geschrieben.
Nachfolgend ist eine Einfügung einzelner Datensätze zu sehen, die die Tabelle U mit einem Datensatz erstellt:
-* Single-record insert example. -* SQL CREATE TABLE U (A INT, B CHAR(6), C CHAR(6), X INT, Y INT); END SQL INSERT INTO U (A,B,C,X,Y) VALUES (10, '123456','654321', 10, 15); END
Vorgehensweise: |
Eine Ansicht ist ein Übergangsobjekt, das die meisten Eigenschaften einer Tabelle übernimmt. Sie besteht wie eine Tabelle aus Zeilen und Spalten:
Tipp: Um eine Ansicht zu verwenden, geben Sie von ihr ein SELECT aus. Sie können keine TABLE-Anfrage mit der Ansicht ausgeben, da die Ansicht nicht als eine physische FOCUS-Datenquelle extrahiert wird. Um eine HOLD-Datei für extrahierte Daten zu erstellen, geben Sie ON TABLE HOLD nach den SQL-Anweisungen an. Genaueres über HOLD-Dateien finden Sie unter Ihre Reportausgabe speichern und wiederverwenden.
Der SQL Translator unterstützt die folgende SQL-Anweisung:
CREATE VIEW viewname AS subquery ;
Hierbei gilt:
Ist der Name der Ansicht.
Ist eine SELECT-Anweisung, die eingebettet ist in:
Im folgenden Beispiel wird eine Ansicht namens XYZ erstellt:
SQL CREATE VIEW XYZ AS SELECT CAR, MODEL FROM CAR; END
Geben Sie Folgendes aus, um von der Ansicht einen Report zu erstellen:
SQL SELECT CAR, MODEL FROM XYZ; END
Entsprechend der normalen Syntax für SQL-Datendefinition muss jede CREATE VIEW-Anweisung mit einem Semikolon beendet werden.
Die folgende Anfrage entfernt die XYZ-Ansicht:
SQL DROP VIEW XYZ; END
Der SQL Translator erzeugt automatisch Antwortsets im Stil des kartesischen Produkts, es sei denn Sie deaktivieren dieses Feature explizit. Es wird jedoch empfohlen, die Einstellung CARTESIAN aktiviert zu lassen, um ANSI-Standards einzuhalten. Genaueres über den SET CARTESIAN-Befehl finden Sie unter Datenquellen kombinieren.
Kontinentale Dezimalschreibweise zeigt Zahlen mit einem Komma an, um die Dezimalposition anzugeben, und Punkte für die Unterteilung von Stellen in Gruppen von drei. Diese Schreibweise ist für SQL Translator-Anfragen verfügbar.
Im folgenden Beispiel wird eine Spalte erstellt, die als 1.2 + SEATS definiert ist:
SET CDN=ON SQL SELECT SEATS + 1,2 FROM CAR; END
Felder in einer SQL-Anfrage angeben mit:
Es kann der folgende Feldidentifikator in eine Anfrage aufgenommen werden:
"COUNTRY.NAME"
Verwenden Sie Folgendes, um den begrenzten Feldnamen COUNTRY.NAME mit seinem Dateinamen zu qualifizieren:
CAR."COUNTRY.NAME"
Die Operatoren SQL UNION, INTERSECT und EXCEPT erzeugen MATCH-Logik. Die Anzahl der Dateien, die enthalten sein können, wird durch die MATCH-Begrenzung bestimmt. UNION mit Klammern wird unterstützt.
Match-Logik kombiniert die Inhalte Ihrer Datenquellen. Siehe Datenquellen kombinieren.
Die SQL SELECT-Liste, das WHERE-Prädikat und die HAVING-Klausel können numerische Konstante enthalten, Literale in einfachen Anführungszeichen, Formeln und alle Skalarfunktionen. Es wird intern ein virtuelles Feld für jedes dieser Elemente in der SELECT-Liste erstellt. Der Wert des virtuellen Feldes wird im Antwortset bereitgestellt.
WebFOCUS |