Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (Deutsch) » SQL Anywhere Server - SQL-Referenzhandbuch » Verwendung von SQL » SQL-Anweisungen » SQL-Anweisungen (E-O)

 

FROM-Klausel

Mit dieser Klausel geben Sie die Datenbanktabellen oder Ansichten an, die in einer DELETE-, SELECT- oder UPDATE -Anweisung verwendet werden. Wenn sie in einer SELECT-Anweisung verwendet wird, kann die FROM-Klausel auch in einer MERGE- oder INSERT-Anweisung verwendet werden.

Syntax
FROM  Tabellenausdruck, ...
Tabellenausdruck :
  Tabellenname
| Ansichtsname
| Prozedurname
| Abgeleitete_Tabelle
| Lateral_abgeleitete_Tabelle
| Join-Ausdruck 
| ( Tabellenausdruck, ... )
| Openstring-Ausdruck
| Apply-Ausdruck
| Contains-Ausdruck
Tabellenname :
[ Benutzer-ID.]Tabellenname
[ [ AS ] Korrelationsname ]
[ WITH ( Hint [...] ) ]
Ansichtsname :
[ Benutzer-ID.] Ansichtsname [ [ AS ] Korrelationsname ]
[ WITH ( Tabellen-Hint ) ]
Prozedurname :
[ Eigentümer.]Prozedurname ( [ Parameter, ... ] )
[ WITH ( Spaltenname Datentyp, ... ) ]
[ [ AS ] Korrelationsname ]
Abgeleitete_Tabelle :
( Select-Anweisung ) 
[ AS ] Korrelationsname [ ( Spaltenname, ... ) ]
Lateral_abgeleitete_Tabelle :
LATERAL ( Select-Anweisung | Tabellenausdruck )
[ AS ] Korrelationsname [ ( Spaltenname, ... ) ]
Join-Ausdruck :
Tabellenausdruck Join-Operator Tabellenausdruck 
[ ON Join-Bedingung ] 
Join-Operator:
 [ KEY | NATURAL ] [ Join-Typ ] JOIN 
| CROSS JOIN
Join-Typ:
 INNER 
| LEFT [ OUTER ] 
| RIGHT [ OUTER ] 
| FULL [ OUTER ]
Hint :
Tabellen-Hint | Index-Hint
Tabellen-Hint:
  READPAST
| UPDLOCK
| XLOCK
| FASTFIRSTROW
| HOLDLOCK
| NOLOCK
| READCOMMITTED
| READUNCOMMITTED
| REPEATABLEREAD
| SERIALIZABLE
Index-Hint : 
NO INDEX 
| INDEX ( Indexname [, ...] ) [ INDEX ONLY { ON | OFF } ]
| FORCE INDEX ( Indexname )
Openstring-Ausdruck : 
OPENSTRING ( [ FILE | VALUE ] Zeichenfolgenausdruck ) 
WITH ( Rowset-Schema ) 
 [ OPTION ( Scan-Option ...  ) ]
 [ AS ] Korrelationsname
Apply-Ausdruck :
Tabellenausdruck { CROSS | OUTER } APPLY Tabellenausdruck
Contains-Ausdruck : 
{Tabellenname  | Ansichtname } CONTAINS ( Spaltenname [,...], Contains-Abfrage ) [ [ AS ] Score-Korrelationsname ]
Rowset-Schema :
Spaltenschemaliste
| TABLE [Eigentümer.]Tabellenname [ ( Spaltenliste ) ]
Spaltenschemaliste :
{ Spaltenname Benutzer-oder-Basis-Typ |  filler( ) } [ , ... ]
Spaltenliste :
      { Spaltenname | filler( ) } [ , ... ]
Scan-Option :
COMMENTS INTRODUCED BY Kommentarpräfix
| DELIMITED BY Zeichenfolge      
| ENCODING Kodierung
| ESCAPE CHARACTER Zeichen
| ESCAPES { ON | OFF }
| FORMAT { TEXT | BCP }
| HEXADECIMAL { ON | OFF }
| QUOTE Zeichenfolge
| QUOTES { ON | OFF }
| ROW DELIMITED BY Zeichenfolge
| SKIP Ganzzahl
| STRIP { ON | OFF | LTRIM | RTRIM | BOTH } 
Contains-Abfrage: Zeichenfolge
Parameter
  • Tabellenname   Eine Basistabelle oder temporäre Tabelle. Tabellen, die einem anderen Benutzer gehören, können durch die Angabe der Benutzer-ID qualifiziert werden. Tabellen, deren Eigentümer Gruppen sind, zu denen der aktuelle Benutzer gehört, werden standardmäßig auch ohne Angabe der Benutzer-ID gefunden. (Weitere Hinweise finden Sie unter Bezugnahme auf Tabellen, deren Eigentümer Gruppen sind.)

  • Ansichtsname   Gibt eine in die Abfrage einzubeziehende Ansicht an. Genau wie Tabellen können auch Ansichten, die einem anderen Benutzer gehören, durch die Angabe der Benutzer-ID qualifiziert werden. Ansichten, deren Eigentümer Gruppen sind, zu denen der aktuelle Benutzer gehört, werden standardmäßig auch ohne Angabe der Benutzer-ID gefunden.

    Obwohl die Syntax Tabellen-Hints zulässt, haben solche Hints keine Auswirkung.

  • Prozedurname   Eine gespeicherte Prozedur, die eine Ergebnismenge zurückgibt. Diese Klausel gilt nur für die FROM-Klausel von SELECT-Anweisungen. Die Klammern nach dem Prozedurnamen sind erforderlich, auch wenn die Prozedur keine Parameter erhält. Wenn die gespeicherte Prozedur mehrere Ergebnismengen zurückgibt, wird nur die erste verwendet.

    Die WITH-Klausel bietet eine Möglichkeit, Spaltennamenaliase für die Ergebnismenge der Prozedur anzugeben. Wenn eine WITH-Klausel angegeben ist, muss die Anzahl der Spalten der Anzahl von Spalten in der Ergebnismenge der Prozedur entsprechen, und die Datentypen müssen mit denen in der Ergebnismenge der Prozedur übereinstimmen. Wenn keine WITH-Klausel angegeben ist, werden die Spaltennamen und Typen verwendet, die von der Prozedurdefinition definiert wurden. Die folgende Abfrage veranschaulicht die Verwendung der WITH-Klausel:

    SELECT sp.ident, sp.quantity, Products.name
    FROM ShowCustomerProducts( 149 ) WITH ( ident INT, description CHAR(20), quantity INT ) sp
       JOIN Products
    ON sp.ident = Products.ID;

  • Abgeleitete_Tabelle   Sie können eine SELECT-Anweisung anstelle eines Tabellen- oder Ansichtsnamens in der FROM-Klausel angeben. Eine auf diese Art verwendete SELECT-Anweisung wird als abgeleitete Tabelle bezeichnet und muss einen Alias erhalten. Beispiel: Die nachstehende Anweisung enthält eine abgeleitete Tabelle namens MyDerivedTable, die Produkte in der Products-Tabelle nach UnitPrice ordnet.
    SELECT TOP 3 *
           FROM ( SELECT Description, 
                         Quantity, 
                         UnitPrice,
                         RANK() OVER ( ORDER BY UnitPrice ASC ) 
                     AS Rank 
                     FROM Products ) AS MyDerivedTable
    ORDER BY Rank;

    Weitere Hinweise zu abgeleiteten Tabellen finden Sie unter Abgeleitete Tabellen abfragen.

  • Lateral_abgeleitete_Tabelle   Eine abgeleitete Tabelle, gespeicherte Prozedur oder verknüpfte Tabelle, die Referenzen auf Objekte in der übergeordneten Anweisung (oder Outer-Referenzen) enthalten kann. Sie müssen eine lateral abgeleitete Tabelle benutzen, wenn Sie eine äußere Referenz in der FROM-Klausel verwenden wollen.

    Sie können äußere Referenzen nur für Tabellen verwenden, die der lateral abgeleiteten Tabelle in der FROM-Klausel vorangehen. Beispielsweise können Sie keine äußere Referenz für ein Element in der Auswahlliste verwenden.

    Die Tabelle und die äußere Referenz müssen durch ein Komma getrennt sein. Beispielsweise sind folgende Abfragen gültig:

    SELECT *
     FROM A, LATERAL( B LEFT OUTER JOIN C ON ( A.x = B.x ) ) LDT;
    SELECT *
     FROM A, LATERAL( SELECT * FROM B WHERE A.x = B.x ) LDT;
    SELECT *
     FROM A, LATERAL( Prozedurname( A.x ) ) LDT;

    Die Angabe von LATERAL ( Tabellenausdruck) ist zur Angabe von LATERAL ( SELECT * FROM Tabellenausdruck ) äquivalent.

  • Openstring-Ausdruck   Verwenden Sie eine OPENSTRING-Klausel, um eine Abfrage innerhalb einer Datei oder einem Blob durchzuführen, wobei der Inhalt dieser Quellen als Zeilenmenge behandelt wird. Dabei geben Sie auch Informationen über das Schema der Datei oder des Blobs für die Erzeugung der Ergebnismenge an, da Sie keine definierte Struktur wie eine Tabelle oder Ansicht abfragen. Diese Klausel gilt nur für die FROM-Klausel einer SELECT-Anweisung. Wird für UPDATE- oder DELETE-Anweisungen nicht unterstützt.

    Die ROWID-Funktion wird über die Ergebnismenge einer Tabelle unterstützt, die von einem OPENSTRING-Ausdruck erstellt wird.

    Nachstehend werden die Unterklauseln und Parameter der OPENSTRING-Klausel angeführt und es wird erklärt, wie sie verwendet werden, um Daten in Dateien und Blobs zu definieren und abzufragen:

    • FILE- und VALUE-Klauseln   Verwenden Sie die FILE-Klausel, um die abzufragende Datei anzugeben. Verwenden Sie die VALUE-Klausel, um den abzufragenden Blob-Ausdruck anzugeben. Der Datentyp für den Blob-Ausdruck wird als LONG BINARY angenommen. Sie können die READ_CLIENT_FILE-Funktion als Wert für die VALUE-Klausel angeben.

      Wenn weder das FILE- noch das VALUE-Schlüsselwort angegeben ist, wird VALUE angenommen.

    • WITH-Klausel   Verwenden Sie diese Klausel, um das Rowset-Schema (Spaltennamen und Datentypen) der abzufragenden Daten anzugeben. Sie können die Spalten direkt angeben (z.B. WITH ( Surname CHAR(30), GivenName CHAR(30) )). Sie können auch die TABLE-Unterklausel verwenden, um eine Tabelle für den Abruf von Schemainformationen zu referenzieren (z.B. WITH TABLE dba.Employees ( Surname, GivenName )). Sie müssen Eigentümer der angegebenen Tabelle sein oder SELECT-Berechtigungen dafür haben.

      Bei der Angabe von Spalten können Sie filler( ) für Spalten verwenden, die sie bei den Eingabedaten auslassen möchten (z.B. WITH ( filler( ), Surname CHAR(30), GivenName CHAR(30) )). Weitere Hinweise zur Verwendung von filler( ) finden Sie unter LOAD TABLE-Anweisung.

    • OPTION-Klausel   Verwenden Sie die OPTION-Klausel, um Optionen für die syntaktische Analyse der Eingabedatei anzugeben, wie Escapezeichen, Begrenzer, Kodierung, usw. Unterstützte Optionen enthalten jene Optionen aus der LOAD TABLE-Anweisung, die die syntaktische Analyse einer Eingabedatei steuern. Weitere Hinweise finden Sie unter LOAD TABLE-Anweisung.

  • Apply-Ausdruck   Verwenden Sie diese Klausel, um eine Join-Bedingung anzugeben, in der der rechte Tabellenausdruck für jede Zeile im linken Tabellenausdruck ausgewertet wird. Sie können zum Beispiel einen Apply-Ausdruck verwenden, um eine Funktion, eine Prozedur oder eine abgeleitete Tabelle für jede Zeile in einem Tabellenausdruck auszuwerten. Weitere Hinweise finden Sie unter Joins, die sich aus APPLY-Ausdrücken ergeben.

  • Contains-Ausdruck   Verwenden Sie die CONTAINS-Klausel nach einem Tabellennamen, um die Tabelle zu filtern und nur jene Zeilen zurückzugeben, die zur Volltextabfrage passen, die Sie in Contains-Abfrage eingegeben haben. Jede übereinstimmende Zeile der Tabelle wird gemeinsam mit einer Score-Spalte zurückgegeben, die mit Score-Korrelationsname referenziert werden kann, wenn dieser angegeben ist. Wenn Score-Korrelationsname nicht angegeben ist, kann die Score-Spalte mit dem Standardkorrelationsnamen "contains" referenziert werden.

    Mit Ausnahme des optionalen Korrelationsname-Arguments übernimmt die CONTAINS-Klausel dieselben Argumente wie die CONTAINS-Suchbedingung. Weitere Hinweise finden Sie unter CONTAINS-Suchbedingung.

    Es muss ein Textindex für die Spalten vorhanden sein, die in der CONTAINS-Klausel aufgelistet sind. Weitere Hinweise finden Sie unter Textindizes.

  • Korrelationsname   Verwenden Sie Korrelationsname, um einen Ersatznamen für eine Tabelle oder Ansicht in der FROM-Klausel anzugeben. Der Ersatzname kann dann von anderen Elementen in der Anweisung referenziert werden. Beispiel: emp und dep sind Korrelationsnamen für die Tabellen Employees und Departments:
    SELECT Surname, GivenName, DepartmentName
       FROM Employees emp, Departments dep,
       WHERE emp.DepartmentID=dep.DepartmentID;

  • WITH Tabellen-Hint-Klausel   Mit der Klausel WITH Tabellen-Hint können Sie das Verhalten festlegen, das nur für diese Tabelle und nur für diese Anweisung angewendet wird. Sie können diese Klausel verwenden, um das Verhalten zu ändern, ohne die Isolationsstufe zu ändern oder eine Datenbank- bzw. Verbindungsoption festlegen zu müssen. Tabellen-Hints können für Basistabellen, temporäre Tabellen und materialisierte Ansichten benutzt werden.

    Achtung

    Bei der Klausel WITH Tabellen-Hint handelt es sich um eine erweiterte Funktion, die nur dann verwendet werden sollte, wenn sie wirklich benötigt wird, und auch dann nur von erfahrenen Datenbankadministratoren. Zusätzlich kann es sein, dass die Einstellungen nicht in allen Situationen berücksichtigt werden.

  • Mit der Isolationsstufe zusammenhängende Tabellen-Hints   Die Tabellen-Hints für Isolationsstufen werden verwendet, um das Isolationsstufenverhalten bei der Abfrage von Tabellen anzugeben. Sie geben eine Sperrmethode an, die nur bei den angegebenen Tabellen und nur für die aktuelle Abfrage gilt. Snapshot-Isolationsstufen können Sie nicht als Tabellen-Hints angeben.

    Es folgt eine Liste der mit der Isolationsstufe zusammenhängenden Tabellen-Hints, die unterstützt werden:

    Tabellen-Hint Beschreibung
    HOLDLOCK Setzt das Verhalten auf ein Äquivalent der Isolationsstufe 3. Dieser Tabellen-Hint ist synonym mit SERIALIZABLE.
    NOLOCK Setzt das Verhalten auf ein Äquivalent der Isolationsstufe 0. Dieser Tabellen-Hint ist synonym mit READUNCOMMITTED.
    READCOMMITTED Setzt das Verhalten auf ein Äquivalent der Isolationsstufe 1.
    READPAST Weist den Datenbankserver an, schreibgeschützte Zeilen zu ignorieren anstatt bei ihnen anzuhalten. Dieser Tabellen-Hint kann nur mit Isolationsstufe 1 verwendet werden. Der READPAST-Hint wird nur respektiert, wenn der Korrelationsname in der FROM-Klausel eine Basistabelle oder eine global gemeinsam genutzte temporäre Tabelle referenziert. Unter anderen Umständen (Ansichten, Proxytabellen und Tabellenfunktionen) wird der READPAST-Hint ignoriert. Abfragen mit Ansichten können READPAST verwenden, wenn der Hint für einen Korrelationsnamen angegeben ist, der eine Basistabelle bezeichnet. Die Verwendung des READPAST-Tabellen-Hints kann aufgrund der Interaktion von Sperren und Prädikatauswertungen im Server zu abnormalen Situationen führen. Außerdem können Sie den READPAST-Hint nicht mit Tabellen verwenden, die Ziel einer DELETE-, INSERT- oder UPDATE-Anweisung sind.
    READUNCOMMITTED Setzt das Verhalten auf ein Äquivalent der Isolationsstufe 0. Dieser Tabellen-Hint ist synonym mit NOLOCK.
    REPEATABLEREAD Setzt das Verhalten auf ein Äquivalent der Isolationsstufe 2.
    SERIALIZABLE Setzt das Verhalten auf ein Äquivalent der Isolationsstufe 3. Dieser Tabellen-Hint ist synonym mit HOLDLOCK.
    UPDLOCK Zeigt an, dass die von der Anweisung verarbeiteten Zeilen aus der Hint-Tabelle mit Absichtssperren gesperrt werden. Die betroffenen Zeilen bleiben bis zum Abschluss der Transaktion gesperrt. UPDLOCK gilt für alle Isolationsstufen und verwendet Absichtssperren. Weitere Hinweise finden Sie unter Absichtssperren.
    XLOCK Zeigt an, dass die von der Anweisung verarbeiteten Zeilen aus der Hint-Tabelle exklusiv gesperrt werden müssen. Die betroffenen Zeilen bleiben bis zum Abschluss der Transaktion gesperrt. XLOCK gilt für alle Isolationsstufen und verwendet Schreibsperren. Weitere Hinweise finden Sie unter Schreibsperren.

    Hinweise zu Isolationsstufen finden Sie unter Isolationsstufen und Konsistenz.

    READPAST mit MobiLink-Synchronisation verwenden

    Wenn Sie Abfragen für Datenbanken schreiben, die an einer MobiLink-Synchronisation teilnehmen, wird empfohlen, dass Sie den READPAST-Tabellen-Hint nicht in Ihren Synchronisationsskripts verwenden.

    Weitere Hinweise finden Sie unter:

    Wenn Sie eine Verwendung von READPAST in Erwägung ziehen, weil Ihre Anwendung viele Aktualisierungen durchführt, die sich auf die Download-Performance auswirken, wäre die Verwendung der Snapshot-Isolation eine alternative Lösung. Weitere Hinweise finden Sie unter MobiLink-Isolationsstufen.

  • Optimierungsziel-Tabellen-Hint (FASTFIRSTROW)   Der Tabellen-Hint FASTFIRSTROW ermöglicht Ihnen die Einstellung des Optimierungsziels für die Abfrage, ohne die optimization_goal-Option auf First-row setzen zu müssen. Wenn Sie FASTFIRSTROW benutzen, wählt SQL Anywhere einen Zugriffsplan, der die Zeit für den Abruf der ersten Zeile in den Abfrageergebnissen reduzieren soll. Weitere Hinweise finden Sie unter optimization_goal-Option [Datenbank].

  • WITH ( Index-Hint )-Klausel   Mit der Klausel WITH ( Index-Hint ) können Sie die Algorithmen für die Auswahl des Abfrageoptimiererplans außer Kraft setzen und den Optimierer anweisen, wie auf die Tabelle über Indizes zugegriffen werden soll. Index-Hints können für Basistabellen, temporäre Tabellen und materialisierte Ansichten benutzt werden.

  • NO INDEX   Verwenden Sie diese Klausel, um ein sequenzielles Durchsuchen der Tabelle zu erzwingen (Indizes werden nicht benutzt). Beachten Sie, dass sequenzielles Durchsuchen sehr kostenaufwendig sein kann.

  • INDEX ( Indexname [,... ] )   Verwenden Sie diese Klausel, um bis zu vier Indizes anzugeben, die der Optimierer benutzen muss, um die Abfrage durchzuführen. Wenn einer der angegebenen Indizes nicht verwendet werden kann, wird ein Fehler zurückgegeben.

  • INDEX ONLY { ON | OFF }   Verwenden Sie diese Klausel, um zu steuern, ob ein reiner Indexabruf von Daten durchgeführt wird. Wenn die Klausel INDEX ( Indexname... ) mit INDEX ONLY ON angegeben ist, versucht der Datenbankserver einen reinen Indexabruf mit den angegebenen Indizes. Wenn einer der angegebenen Indizes für eine reine Indexabfrage nicht benutzt werden kann, wird eine Fehlermeldung zurückgegeben (z.B. wenn keine Indizes vorhanden sind oder die bestehenden für die Abfrage nicht geeignet sind).

    Geben Sie INDEX ONLY OFF an, um einen reinen Indexabruf zu verhindern.

  • FORCE INDEX ( Indexname )   Verwenden Sie diese Klausel, um den Index anzugeben, den der Optimierer verwenden muss, um in der Tabelle Zeilen zu finden, die für die Abfrage geeignet sind. Die Syntax FORCE INDEX ( Indexname ) wird aus Kompatibilitätsgründen bereitgestellt und kann nicht mehr als eine Indexbezeichnung aufnehmen.

    Achtung

    Index-Hints heben die Entscheidungsfindungs-Logik des Abfrageoptimierers auf und sollten daher nur von erfahrenen Benutzern verwendet werden. Die Verwendung von Index-Hints kann die Qualität von Zugriffsplänen beeinträchtigen und zu Performanceverlusten führen.

Bemerkungen

Die Anweisungen SELECT, UPDATE und DELETE erfordern eine Tabellenliste, um anzugeben, welche Tabellen von der Anweisung verwendet werden.

Ansichten und abgeleitete Tabellen

Obwohl sich die Beschreibung der FROM-Klausel auf Tabellen bezieht, gilt sie, sofern nicht anders angegeben, auch für Ansichten und abgeleitete Tabellen.

Die FROM-Klausel erstellt eine Ergebnismenge, die aus allen Spalten aller angegebenen Tabellen besteht. Anfänglich sind alle Zeilenkombinationen in den Komponententabellen in der Ergebnismenge enthalten, und die Anzahl der Kombinationen wird im Allgemeinen durch JOIN-Bedingungen bzw. WHERE-Klauseln verringert.

Es ist nicht möglich, eine ON-Klausel mit CROSS JOIN zu verwenden.

Für die Syntax 2 gilt: Wenn weder die FILE-Klausel noch die VALUE-Klausel angegeben ist, wird VALUE angenommen. Das heißt, dass für den abzurufenden Wert der Zeichenfolgenausdruck angenommen wird.

Berechtigungen

Die FILE-Klausel des Openstring-Ausdrucks erfordert DBA- oder READFILE-Datenbankberechtigungen.

Für die TABLE-Klausel des Openstring-Ausdrucks muss der Benutzer Eigentümer der angegebenen Tabelle sein oder SELECT-Berechtigungen dafür haben.

Nebenwirkungen

Keine.

Siehe auch
Standards und Kompatibilität
  • SQL/2003   Kernfunktion, ausgenommen die nachstehende Liste. Aufgrund der Komplexität der FROM-Klausel sollten Sie individuelle Klauseln mit dem Standard vergleichen.

    • KEY JOIN ist eine Erweiterung des Herstellers.

    • FULL OUTER JOIN und NATURAL JOIN sind SQL/Foundation-Funktionen außerhalb der Kern-SQL

    • READPAST Tabellen-Hint ist eine Erweiterung des Herstellers.

    • LATERAL ( Tabellenausdruck ) ist eine Erweiterung des Herstellers. Beachten Sie, dass LATERAL ( Select-Anweisung ) im ANSI SQL-Standard als Funktion T491 enthalten ist.

    • Abgeleitete Tabellen sind Funktion F591.

    • Prozeduren in der FROM-Klausel (Tabellenfunktionen) sind Funktion T326.

    • Gemeinsame Tabellenausdrücke sind Funktion T121.

    • Rekursive Tabellenausdrücke sind Funktion T131.

Beispiel

Die folgenden Klauseln sind gültige FROM-Klauseln:

...
FROM Employees
...
...
FROM Employees NATURAL JOIN Departments
...
...
FROM Customers
KEY JOIN SalesOrders
KEY JOIN SalesOrderItems
KEY JOIN Products
...
...
FROM Employees CONTAINS ( Street, ' Way ' )
...

Die folgende Abfrage veranschaulicht die Verwendung von abgeleiteten Tabellen in einer Abfrage:

SELECT Surname, GivenName, number_of_orders
FROM Customers JOIN
     ( SELECT CustomerID, COUNT(*)
       FROM SalesOrders
        GROUP BY CustomerID )
     AS sales_order_counts( CustomerID,
                             number_of_orders )
ON ( Customers.ID = sales_order_counts.CustomerID )
WHERE number_of_orders > 3;

Die folgende Abfrage veranschaulicht, wie Zeilen aus Ergebnismengen von gespeicherten Prozeduren ausgewählt werden.

SELECT t.ID, t.QuantityOrdered AS q, p.name
FROM ShowCustomerProducts( 149 ) t JOIN Products p
ON t.ID = p.ID;

Das folgende Beispiel zeigt, wie eine Abfrage mit der OPENSTRING-Klausel ausgeführt wird, um eine Datei abzufragen. Die CREATE TABLE-Anweisung erstellt eine Tabelle namens testtable mit den zwei Spalten column1 und column2. Die UNLOAD-Anweisung erstellt eine Datei namens testfile.dat durch Entladen von Zeilen aus der Tabelle RowGenerator. Die SELECT-Anweisung verwendet die OPENSTRING-Klausel in einer FROM-Klausel, um eine Abfrage aus testfile.dat mit den Schemainformationen aus den Tabellen testtable und RowGenerator durchzuführen. Die Abfrage gibt eine Zeile mit dem Wert 49 zurück.

CREATE TABLE testtable( column1 CHAR(10), column2 INT );
UNLOAD SELECT * FROM RowGenerator TO 'testfile.dat'; 
SELECT A.column2 
  FROM OPENSTRING( FILE 'testfile.dat' ) 
  WITH ( TABLE testtable( column2 ) ) A, RowGenerator B
  WHERE A.column2 = B.row_num
  AND A.column2 < 50
  AND B.row_num > 48;

Das folgende Beispiel zeigt, wie eine Abfrage mit der OPENSTRING-Klausel ausgeführt wird, um einen Zeichenfolgenwert abzufragen. Die SELECT-Anweisung verwendet die OPENSTRING-Klausel in einer FROM-Klausel, um einen Zeichenfolgenwert unter Verwendung der Schemainformationen abzurufen, die in der WITH-Klausel übergeben wurden. Die Abfrage gibt zwei Spalten mit drei Zeilen zurück.

SELECT *
  FROM OPENSTRING( VALUE '1,"First"$2,"Second"$3,"Third"')
  WITH (c1 INT, c2 VARCHAR(30))
  OPTION ( DELIMITED BY ',' ROW DELIMITED BY '$')
  AS VALS