SQL Translator-Befehle verwenden

In diesem Abschnitt:

Vorgehensweise:

Referenz:

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.


Nach oben

x
Syntax: SQL Translator-Befehle verwenden
SQL 
sql statement;
[ECHO|FILE]
[TABLE phrases]
END

Hierbei gilt:

SQL

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.

sql-Anweisung

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.

ECHO

Sind optionale Debugging-Phrasen, die die erzeugte TABLE-Anfrage aufzeichnen. Diese Optionen werden hinter der SQL-Anweisung platziert.

FILE [name]

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.

TABLE-Phrasen

Sind optionale TABLE-Formatierungsphrasen. Siehe TABLE-Formatierphrasen in SQL-Anfragen.

END oder QUIT

Ist erforderlich, um die Prozedur zu beenden.



Beispiel: SQL Translator-Befehle verwenden

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

Nach oben

x
Referenz: TABLE-Formatierphrasen in SQL-Anfragen

Sie können TABLE-Formatierungsphrasen in eine SQL-Anfrage aufnehmen. Es gelten hierbei die folgenden Regeln:


Nach oben

x
Die SQL SELECT-Anweisung

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.


Nach oben

x
SQL-Joins

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.



x
Syntax: Einen inneren Join erstellen

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:

fieldlist

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									
FROM

Stellt die Datenquellen vor, die verbunden werden sollen.

file1, file2

Sind die Datenquellen, die verbunden werden sollen.

alias1, alias2

Sind optionale alternative Namen für die Datenquellen, die verbunden werden sollen.

where_condition

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.

join_condition

Ist die Join-Bedingung.



x
Syntax: Einen äußeren Join erstellen
SQL
SELECT fieldlist FROM file1 {LEFT|RIGHT|FULL} JOIN file2 
ON join_condition [{LEFT|RIGHT|FULL} JOIN ...]
WHERE where_condition 
END

Hierbei gilt:

fieldlist

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									
FROM

Stellt die Datenquellen vor, die verbunden werden sollen.

file1, file2

Sind die Datenquellen, die verbunden werden sollen.

alias1, alias2

Sind optionale alternative Namen für die Datenquellen, die verbunden werden sollen.

join_condition

Ist die Join-Bedingung. Die Bedingung muss Gleichheit angeben. Beispielsweise T1.A=T2.B.

where_condition

Ist eine optionale Auswahlbedingung für das verbundene Antwortset. Verbundene Zeilen, die diese Bedingung nicht erfüllen, werden im zurückgegebenen Antwortset weggelassen.



x
Referenz: Join-Name-Zuweisungen vom SQL Translator

Es werden den Joins, die vom SQL Translator ausgegeben werden, Namen im folgenden Format zugewiesen:

SQLJNMnn						

Hierbei gilt:

SQLJNM

Ist das Join-Präfix des SQL Translator.

nn

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.



Beispiel: Qualifizierte Feldnamen in SQL-Joins verwenden

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


Beispiel: Rekursive SQL-Joins verwenden

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.



Beispiel: Vollständige äußere SQL-Joins erstellen

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.



x
Referenz: Hinweise zu SQL-Joins

Weitere Informationen über Indexoptimierung und optimierte Join-Anweisungen finden Sie in der Dokumentation Ihres Servers.


Nach oben

x
SQL CREATE TABLE- und INSERT INTO-Befehle

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.



x
Referenz: Verwendungshinweise für CREATE TABLE- und INSERT INTO-Befehle


Beispiel: Eine Tabelle mit Einfügung einzelner Datensätze erstellen

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

Nach oben

x
SQL CREATE VIEW- und DROP VIEW-Befehle

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.



x
Syntax: Eine Ansicht erstellen

Der SQL Translator unterstützt die folgende SQL-Anweisung:

CREATE VIEW viewname AS subquery ;

Hierbei gilt:

viewname

Ist der Name der Ansicht.

subquery

Ist eine SELECT-Anweisung, die eingebettet ist in:

  • Eine WHERE-, HAVING- oder SELECT-Klausel eines anderen SELECTs.
  • Eine UPDATE-, DELETE- oder INSERT-Anweisung.
  • Eine Unteranfrage.


Beispiel: Eine SQL-Ansicht erstellen und von ihr Reports erstellen

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.



Beispiel: Eine SQL-Ansicht fallenlassen

Die folgende Anfrage entfernt die XYZ-Ansicht:

SQL
 DROP VIEW XYZ;
END

Nach oben

x
Antwortsets im Kartesisches Produkt-Style

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.


Nach oben

x
Kontinentale Dezimalschreibweise (CDN)

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.



Beispiel: Kontinentale Dezimalschreibweise verwenden, um Stellen abzutrennen

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

Nach oben

x
Feldnamen in SQL-Anfragen angeben

Felder in einer SQL-Anfrage angeben mit:



Beispiel: Einen Feldname mit einem begrenzten Identifikator angeben

Es kann der folgende Feldidentifikator in eine Anfrage aufgenommen werden:

"COUNTRY.NAME"


Beispiel: Einen begrenzten Feldnamen qualifizieren

Verwenden Sie Folgendes, um den begrenzten Feldnamen COUNTRY.NAME mit seinem Dateinamen zu qualifizieren:

CAR."COUNTRY.NAME"

Nach oben

x
Die Operatoren SQL UNION, INTERSECT und EXCEPT

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.


Nach oben

x
Numerische Konstanten, Literale, Formeln und Funktionen

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