Wie Verwenden von SQL Row Wertausdrücke

In den ursprünglichen SQL-Standards, SQL-86 und SQL-89, behandelt die meisten Operationen mit einem einzelnen Wert oder eine einzelne Spalte in einer Tabellenzeile. Für den Betrieb auf mehreren Werten, mussten Sie komplexe Ausdrücke zu bauen durch logische Verwendung Konnektive.

SQL-92 eingeführt Zeilenwert Ausdrücke, die arbeiten auf einer Liste von Werten oder Spalten und nicht auf einen einzelnen Wert oder Spalte. Eine Reihe Wertausdruck ist eine Liste der Wertausdrücke, die Sie in Klammern setzen und trennen durch Kommas. Sie können diese Ausdrücke auf einmal oder auf einer ausgewählten Teilmenge der Reihe auf einer ganzen Reihe zu betreiben codieren.

So verwenden Sie die EINFÜGEN Anweisung, um eine neue Zeile zu einer vorhandenen Tabelle hinzufügen, verwendet die Anweisung, um einen Zeilenwert Ausdruck. Betrachten Sie das folgende Beispiel:

INSERT INTO FOODS (FOODNAME, Kalorien, Eiweiß, Fett, Kohlenhydrate) VALUES ( 'Käse, Cheddar', 398, 25, 32,2, 2,1) -

In diesem Beispiel ( 'Käse, Cheddar', 398, 25, 32.2, 2.1) ist ein Zeilenwert Ausdruck. Wenn Sie eine Zeile Wertausdruck in ein verwenden EINFÜGEN Aussage auf diese Weise kann es null und Standardwerte enthalten. (EIN Standardwert der Wert ist, die eine Tabellenspalte wird davon ausgegangen, wenn Sie keinen anderen Wert angeben), um die folgende Zeile ein, zum Beispiel, ist ein Rechtszeilenwert Ausdruck.:

( 'Käse, Cheddar', 398, NULL, 32,2, DEFAULT)

Sie können, indem sie mehrere Zeilenwert Ausdrücke in der mehrere Zeilen zu einer Tabelle hinzufügen WERTE Klausel, wie folgt:

INSERT INTO FOODS (FOODNAME, Kalorien, Eiweiß, Fett, Kohlenhydrate) VALUES ( 'Salat', 14, 1.2, 0.2, 2.5), ( 'Butter', 720, 0,6, 81,0, 0,4), ( 'Mustard', 75, 4.7, 4.4, 6.4), ( 'Spaghetti', 148, 5,0, 0,5, 30,1) -

Sie können Zeilenwert Ausdrücke verwenden, um sich davor zu bewahren, Vergleiche manuell eingeben zu müssen. Angenommen, Sie zwei Tabellen von Nährwerte haben, eine auf Englisch und die andere in Spanisch zusammengestellt. Sie möchten die Zeilen in der englischen Sprache Tabelle zu finden, die genau auf die Zeilen in der spanischen Sprache Tabelle entsprechen. Ohne einen Zeilenwert Ausdruck, müssen Sie so etwas wie das folgende Beispiel zu formulieren:

SELECT * FROM FOODSWHERE Nahrungsmittel.Kalorien = COMIDA.CALORIAAND FOODS.PROTEIN = COMIDA.PROTEINASAND FOODS.FAT = COMIDA.GRASASAND FOODS.CARBOHYDRATE = COMIDA.CARBOHIDRATO -

Zeilenwert-Ausdrücke können Sie die gleiche Logik zu codieren, wie folgt:

SELECT * FROM FOODSWHERE (Nahrungsmittel.Kalorien, FOODS.PROTEIN, FOODS.FAT, FOODS.CARBOHYDRATE) = (COMIDA.CALORIA, COMIDA.PROTEINAS, COMIDA.GRASAS, COMIDA.CARBOHIDRATO) -

In diesem Beispiel sparen Sie nicht viel Tipparbeit. Sie würden etwas mehr profitieren, wenn Sie mehr Spalten zu vergleichen waren. In Fällen von Grenznutzen wie in diesem Beispiel, können Sie besser dran mit der älteren Syntax kleben, weil seine Bedeutung ist klarer.

Sie gewinnen einen Vorteil durch einen Zeilenwert Ausdruck anstelle seines kodierten Äquivalent unter Verwendung - der Zeilenwert Ausdruck viel schneller ist. Grundsätzlich kann eine kluge Umsetzung der codierten Version zu analysieren und sie als Zeilenwert Version zu implementieren. In der Praxis ist diese Operation eine schwierige Optimierung, die keine DBMS derzeit durchführen kann.

Menü