Die Addition in SQL (Die Addition in SQL), Lektion, Seite 722938
https://www.purl.org/stefan_ram/pub/addition_sql (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
SQL-Kurs

Die Addition in SQL  (MySQL )

Vorbereitung

Zum Nachvollziehen der folgenden Beispiele kann das folgende Skript in einen MySQL -Klienten kopiert werden. Der Inhalt dieses Skripts kann aber ansonsten ignoriert werden. Dieses Skript muß zum jetzigen Zeipunkt also nicht verstanden werden. Bei Kopieren ist darauf zu achten nur genau den Text von »DROP« bis zum letzten »;« zu kopieren und dann die Eingabetaste zu drücken.

Skript (MySQL )

WARNINGS; SET sql_mode = 'ANSI,TRADITIONAL';
SET div_precision_increment = 4;
DROP SCHEMA IF EXISTS S; CREATE SCHEMA S; USE S;

CREATE TABLE ZEICHEN ( ZEICHEN INTEGER AUTO_INCREMENT, NAME VARCHAR( 32 ), PRIMARY KEY( ZEICHEN ));
INSERT INTO ZEICHEN ( ZEICHEN, NAME ) VALUES ( 1, 'Alpha' );
INSERT INTO ZEICHEN ( ZEICHEN, NAME ) VALUES ( 2, 'Gamma' );
INSERT INTO ZEICHEN ( ZEICHEN, NAME ) VALUES ( 3, 'Delta' );

CREATE TABLE PERSON ( VORNAME VARCHAR ( 255 ), NACHNAME VARCHAR ( 255 ));

INSERT INTO PERSON ( VORNAME, NACHNAME ) VALUES ( 'Emma', 'Schneider' );
INSERT INTO PERSON ( VORNAME, NACHNAME ) VALUES ( 'Finn', 'Weber' );
INSERT INTO PERSON ( VORNAME, NACHNAME ) VALUES ( 'Charlotte', 'Wagner' );

CREATE TABLE POSTEN ( NAME VARCHAR ( 255 ), ANZAHL VARCHAR ( 255 ), WERT VARCHAR ( 255 ) );
INSERT INTO POSTEN ( NAME, ANZAHL, WERT ) VALUES ( 'Stuhl', '6', '720' );
INSERT INTO POSTEN ( NAME, ANZAHL, WERT ) VALUES ( 'Tisch', '1', '2800' );

CREATE TABLE UMSATZ( JAHR INTEGER, OST INTEGER, WEST INTEGER );
INSERT INTO UMSATZ( JAHR, OST, WEST )VALUES( 2025, 1424, 4228 );
INSERT INTO UMSATZ( JAHR, OST, WEST )VALUES( 2026, 733, 2891 );
INSERT INTO UMSATZ( JAHR, OST, WEST )VALUES( 2027, 126, 561 );
INSERT INTO UMSATZ( JAHR, OST, WEST )VALUES( 2028, 78, 121 );

CREATE TABLE ONE ( COL INTEGER );
INSERT INTO ONE ( COL ) VALUES ( 1 );

SELECT * FROM ZEICHEN;
SELECT * FROM PERSON;
SELECT * FROM POSTEN;
SELECT * FROM UMSATZ;
SELECT * FROM ONE;

Addition mit Literalwerten

SELECT 1 + 2 ;

+-------+
| 1 + 2 |
+-------+
| 3 |
+-------+

SELECT 1 + 2;

+-------+
| 1 + 2 |
+-------+
| 3 |
+-------+

SELECT 1 + 2, 3;

+-------+---+
| 1 + 2 | 3 |
+-------+---+
| 3 | 3 |
+-------+---+

SELECT ( ( 1 )+( 1 ));

+----------------+
| ( ( 1 )+( 1 )) |
+----------------+
| 2 |
+----------------+

SELECT 1 + 'a';

+---------+
| 1 + 'a' |
+---------+
| 1 |
+---------+

SELECT 1 + '2';

+---------+
| 1 + '2' |
+---------+
| 3 |
+---------+

SELECT 1 + '3a7';

+-----------+
| 1 + '3a7' |
+-----------+
| 4 |
+-----------+

SELECT 1 + '3e7';

+-----------+
| 1 + '3e7' |
+-----------+
| 30000001 |
+-----------+

SELECT -3 + 9;

+--------+
| -3 + 9 |
+--------+
| 6 |
+--------+

SELECT -( 3 + 9 );

+------------+
| -( 3 + 9 ) |
+------------+
| -12 |
+------------+

Addition mit Spaltenwerten und Literalwerten

SELECT * FROM Zeichen;

+---------+-------+
| ZEICHEN | NAME |
+---------+-------+
| 1 | Alpha |
| 2 | Gamma |
| 3 | Delta |
+---------+-------+

SELECT ZEICHEN, NAME FROM Zeichen;

+---------+-------+
| ZEICHEN | NAME |
+---------+-------+
| 1 | Alpha |
| 2 | Gamma |
| 3 | Delta |
+---------+-------+

SELECT 1 + Zeichen, Name FROM Zeichen;

+-------------+-------+
| 1 + Zeichen | Name |
+-------------+-------+
| 2 | Alpha |
| 3 | Gamma |
| 4 | Delta |
+-------------+-------+

SELECT Zeichen + 1 FROM Zeichen;

+-------------+
| Zeichen + 1 |
+-------------+
| 2 |
| 3 |
| 4 |
+-------------+

SELECT 1 + Zeichen FROM Zeichen;

+-------------+
| 1 + Zeichen |
+-------------+
| 2 |
| 3 |
| 4 |
+-------------+

SELECT Zeichen, 1 + Zeichen FROM Zeichen;

+---------+-------------+
| Zeichen | 1 + Zeichen |
+---------+-------------+
| 1 | 2 |
| 2 | 3 |
| 3 | 4 |
+---------+-------------+

SELECT 1 + Zeichen AS Pos, Name FROM Zeichen;

+-----+-------+
| Pos | Name |
+-----+-------+
| 2 | Alpha |
| 3 | Gamma |
| 4 | Delta |
+-----+-------+

SELECT 2 + 4/2 ;

+---------+
| 2 + 4/2 |
+---------+
| 4.0000 |
+---------+

SELECT 2 +( 4/2 ) ;

+------------+
| 2 +( 4/2 ) |
+------------+
| 4.0000 |
+------------+

Addition mit Spaltenwerten

SELECT * FROM UMSATZ;

+------+------+------+
| JAHR | OST | WEST |
+------+------+------+
| 2025 | 1424 | 4228 |
| 2026 | 733 | 2891 |
| 2027 | 126 | 561 |
| 2028 | 78 | 121 |
+------+------+------+

SELECT JAHR, OST, WEST FROM UMSATZ;

+------+------+------+
| JAHR | OST | WEST |
+------+------+------+
| 2025 | 1424 | 4228 |
| 2026 | 733 | 2891 |
| 2027 | 126 | 561 |
| 2028 | 78 | 121 |
+------+------+------+

SELECT JAHR, OST + WEST FROM UMSATZ;

+------+-------------+
| JAHR | OST + WEST |
+------+-------------+
| 2025 | 5652 |
| 2026 | 3624 |
| 2027 | 687 |
| 2028 | 199 |
+------+-------------+

SELECT JAHR, OST, WEST, OST + WEST FROM UMSATZ;

+------+------+------+-------------+
| JAHR | OST | WEST | OST + WEST |
+------+------+------+-------------+
| 2025 | 1424 | 4228 | 5652 |
| 2026 | 733 | 2891 | 3624 |
| 2027 | 126 | 561 | 687 |
| 2028 | 78 | 121 | 199 |
+------+------+------+-------------+

SELECT JAHR, OST, WEST, OST + WEST AS GESAMT FROM UMSATZ;

+------+------+------+--------+
| JAHR | OST | WEST | GESAMT |
+------+------+------+--------+
| 2025 | 1424 | 4228 | 5652 |
| 2026 | 733 | 2891 | 3624 |
| 2027 | 126 | 561 | 687 |
| 2028 | 78 | 121 | 199 |
+------+------+------+--------+

Allgemeines zum Additionsoperator

Die Addition ist, wie schon die Division, linksassoziativ.

Syntaxdiagramm
Ausdruck (vereinfacht)
.-------------.
----.------------->| Spaltenname |--------------.--->
| '-------------' |
| .-------------. |
'------------->| Literal |--------------'
| '-------------' |
| .-. .-------------. |
'----->( + )-->| Ausdruck |--------------'
| '-' '-------------' |
| .-. .-------------. |
'----->( - )-->| Ausdruck |--------------'
| '-' '-------------' |
| .-. .-------------. .-. |
'----->( ( )-->| Ausdruck |--->( ) )-----'
| '-' '-------------' '-' |
| .----------. .-. .----------. |
'-->| Ausdruck |--->( / )--->| Ausdruck |---'
| '----------' '-' '----------' |
| .----------. .---. .----------. |
'-->| Ausdruck |-->( DIV )-->| Ausdruck |---'
| '----------' '---' '----------' |
| .----------. .-. .----------. |
'-->| Ausdruck |--->( + )--->| Ausdruck |---'
'----------' '-' '----------'

Priorität

Die Priorität des Divisionsoperators ist höher als die des Additionsoperators.

In der folgenden Liste von Operatoren stehen Operatoren höherer  Priorität weiter oben.

Prioritäten von Operatoren
»-«, »+« (Vorzeichen)
»/«, »DIV«
»+« (binäre Operatoren)

Weitere Beispiele

SELECT JAHR, OST, WEST, OST + WEST AS GESAMT, OST /( OST + WEST ), WEST/( OST + WEST ) FROM UMSATZ;

+------+------+------+--------+-----------------------+----------------------+
| JAHR | OST | WEST | GESAMT | OST /( OST + WEST ) | WEST/( OST + WEST ) |
+------+------+------+--------+-----------------------+----------------------+
| 2025 | 1424 | 4228 | 5652 | 0.2519 | 0.7481 |
| 2026 | 733 | 2891 | 3624 | 0.2023 | 0.7977 |
| 2027 | 126 | 561 | 687 | 0.1834 | 0.8166 |
| 2028 | 78 | 121 | 199 | 0.3920 | 0.6080 |
+------+------+------+--------+-----------------------+----------------------+

SELECT JAHR, OST, WEST, OST + WEST AS GESAMT, OST /( OST + WEST )/ 0.01 AS OSTPROZENT, WEST/( OST + WEST )/ 0.01 AS WESTPROZENT FROM UMSATZ;

+------+------+------+--------+-------------+-------------+
| JAHR | OST | WEST | GESAMT | OSTPROZENT | WESTPROZENT |
+------+------+------+--------+-------------+-------------+
| 2025 | 1424 | 4228 | 5652 | 25.19462130 | 74.80537860 |
| 2026 | 733 | 2891 | 3624 | 20.22626930 | 79.77373060 |
| 2027 | 126 | 561 | 687 | 18.34061130 | 81.65938860 |
| 2028 | 78 | 121 | 199 | 39.19597980 | 60.80402010 |
+------+------+------+--------+-------------+-------------+

SELECT JAHR, WEST/( OST + WEST )/ 0.01 AS WESTPROZENT, OST /( OST + WEST )/ 0.01 AS OSTPROZENT FROM UMSATZ;

+------+-------------+-------------+
| JAHR | WESTPROZENT | OSTPROZENT |
+------+-------------+-------------+
| 2025 | 74.80537860 | 25.19462130 |
| 2026 | 79.77373060 | 20.22626930 |
| 2027 | 81.65938860 | 18.34061130 |
| 2028 | 60.80402010 | 39.19597980 |
+------+-------------+-------------+

Textverkettung mit »||«

Nach

SET SQL_MODE = 'PIPES_AS_CONCAT';

kann der Operator »||« zur Verkettung genutzt werden (Dies ist auch im Modus »ANSI« enthalten).

Dieser Operator entspricht dem SQL-Standard, wird aber von MySQL  nicht ohne »PIPES_AS_CONCAT« unterstützt.

SET SQL_MODE = 'PIPES_AS_CONCAT';

SELECT 'A' || 'B';

+------------+
| 'A' || 'B' |
+------------+
| AB |
+------------+
SELECT 'A' || 'B' || 'C';
+-------------------+
| 'A' || 'B' || 'C' |
+-------------------+
| ABC |
+-------------------+
SELECT NAME FROM ZEICHEN;
+-------+
| NAME |
+-------+
| Alpha |
| Gamma |
| Delta |
+-------+
SELECT '"' || NAME || '"' AS NAME FROM ZEICHEN;
+---------+
| NAME |
+---------+
| "Alpha" |
| "Gamma" |
| "Delta" |
+---------+
SELECT ZEICHEN, NAME FROM ZEICHEN;
+---------+-------+
| ZEICHEN | NAME |
+---------+-------+
| 1 | Alpha |
| 2 | Gamma |
| 3 | Delta |
+---------+-------+
SELECT ZEICHEN || ' - ' || NAME AS ZEICHEN FROM ZEICHEN;
+-----------+
| ZEICHEN |
+-----------+
| 1 - Alpha |
| 2 - Gamma |
| 3 - Delta |
+-----------+
SELECT NAME || ' - ' || ZEICHEN AS ZEICHEN FROM ZEICHEN;
+-----------+
| ZEICHEN |
+-----------+
| Alpha - 1 |
| Gamma - 2 |
| Delta - 3 |
+-----------+
SELECT ZEICHEN || ' - "' || NAME || '"' AS ZEICHEN FROM ZEICHEN;
+-------------+
| ZEICHEN |
+-------------+
| 1 - "Alpha" |
| 2 - "Gamma" |
| 3 - "Delta" |
+-------------+
SELECT '0' || ZEICHEN || ': "' || NAME || '"' AS ZEICHEN FROM ZEICHEN;
+-------------+
| ZEICHEN |
+-------------+
| 01: "Alpha" |
| 02: "Gamma" |
| 03: "Delta" |
+-------------+
SELECT VORNAME, NACHNAME FROM PERSON;
+-----------+-----------+
| VORNAME | NACHNAME |
+-----------+-----------+
| Emma | Schneider |
| Finn | Weber |
| Charlotte | Wagner |
+-----------+-----------+
SELECT VORNAME || ' ' || NACHNAME AS NAME FROM PERSON;
+------------------+
| NAME |
+------------------+
| Emma Schneider |
| Finn Weber |
| Charlotte Wagner |
+------------------+
SELECT NACHNAME || ', ' || VORNAME AS NAME FROM PERSON;
+-------------------+
| NAME |
+-------------------+
| Schneider, Emma |
| Weber, Finn |
| Wagner, Charlotte |
+-------------------+

Wenn man die Namen zerlegt abspeichert, dann ist es einfach, sie in jeder gewünschten Weise zu einem vollständigen Namen zusammenzusetzen. Würde man sie zusammengesetzt speichern, wäre es viel schwieriger oder manchmal gar nicht möglich, den Namen erst zu zerlegen und dann wieder neu zusammenzusetzen. Deswegen legt man in SQL großen Wert darauf, daß jede einzelne Eigenschaft eine eigene Spalte erhält.

Man kann in der Verkettung von Texten eine Art der „Addition von Texten“ sehen, weswegen jener Operator in dieser Lektion hier vorgestellt wird.

Referenzierung von AS-Spaltennamen

Ein mit »AS« festgelegter Spaltenname kann nicht in derselben SELECT-Liste verwendet werden, um sich auf diese Spalte zu beziehen. Dort muß weiterhin der bisherige Name verwendet werden.

Konsole

SELECT BETRAG/10 AS STEUER, BETRAG + STEUER FROM ZAHL;

ERROR 1054 (42S22): Unknown column 'STEUER' in 'field list'

/    Spaltenauswahl
POSTEN
Name Anzahl Wert
Tisch 1 2800
Stuhl 6 720

Übungsfragen

?   Ausdrücke

Welcher der folgenden Ausdrücke hat denselben Wert wie »1 / 2+3«?

»1/( 2+3 )«   Anton 
»( 1/2 )+ 3«  Berta

?   Addition

Welchen Wert erwarten Sie in der Tabelle »SELECT 2+1;«?

?   Addition (1)

Welchen Wert erwarten Sie in der Tabelle »SELECT 2+6/2;«?

?   Addition (2)

Welchen Wert erwarten Sie in der Tabelle »SELECT -2+3;«?

?   Addition (3)

Welchen Wert erwarten Sie als Ergebnis der letzten Eingabe des folgenden Transskripts an Stelle des Fragezeichens?

Konsole

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; SET sql_mode = "ANSI,TRADITIONAL";
SET div_precision_increment = 0;
DROP SCHEMA IF EXISTS S; CREATE SCHEMA S; USE S;

CREATE TABLE T ( I INT, J INT );
INSERT INTO T ( I, J )VALUES( 8, 2 );

SELECT I, J FROM T;

+------+------+
| I | J |
+------+------+
| 8 | 2 |
+------+------+
SELECT I+J+1 FROM T;
+-------+
| I+J+1 |
+-------+
| ? |
+-------+

?   Addition (4)

Welchen Wert erwarten Sie als Ergebnis der letzten Eingabe des folgenden Transskripts an Stelle des Fragezeichens (bei Verwendung der Tabelle der vorherigen Übungsfrage)?

Konsole
SELECT I/J+1 FROM T;
+------+
| I |
+------+
| ? |
+------+

Inkrementieren einer Spalte

DROP SCHEMA S; CREATE SCHEMA S; USE S;
CREATE TABLE ZAHL ( I INTEGER );
INSERT INTO ZAHL ( I ) VALUES ( 0 );

SELECT * FROM ZAHL;

+------+
| I |
+------+
| 0 |
+------+

UPDATE ZAHL SET I = I + 1;

SELECT * FROM ZAHL;

+------+
| I |
+------+
| 1 |
+------+

UPDATE ZAHL SET I = I + 1;

SELECT * FROM ZAHL;

+------+
| I |
+------+
| 2 |
+------+

Übungsaufgaben

/   Mittelwerte

Die folgende Tabelle »NOTEN« enthält die Noten verschiedener Schüler in zwei Klassenarbeiten A1 und A2. Ergänzen Sie, was an Stelle der drei Punkte »...« in der letzten Benutzereingabe stehen muß, damit sich die Ausgabe mit der Spalte »MITTEL« ergibt, welche für jeden Schüler die Mittelwerte der beiden Noten enthält!

Skript (MySQL )

SET sql_mode = "ANSI,TRADITIONAL";
SET div_precision_increment = 1;
DROP SCHEMA IF EXISTS S; CREATE SCHEMA S; USE S;

CREATE TABLE NOTEN ( NAME VARCHAR( 255 ), A1 INT, A2 INT );
INSERT INTO NOTEN ( NAME, A1, A2 )VALUES( 'Emilia', 3, 2 );
INSERT INTO NOTEN ( NAME, A1, A2 )VALUES( 'Sophia', 1, 3 );
INSERT INTO NOTEN ( NAME, A1, A2 )VALUES( 'Moritz', 3, 1 );
INSERT INTO NOTEN ( NAME, A1, A2 )VALUES( 'Julian', 2, 3 );

SELECT * FROM NOTEN;

+--------+------+------+
| NAME | A1 | A2 |
+--------+------+------+
| Emilia | 3 | 2 |
| Sophia | 1 | 3 |
| Moritz | 3 | 1 |
| Julian | 2 | 3 |
+--------+------+------+
SELECT ... FROM NOTEN;
+--------+--------+
| NAME | MITTEL |
+--------+--------+
| Emilia | 2.5 |
| Sophia | 2.0 |
| Moritz | 2.0 |
| Julian | 2.5 |
+--------+--------+

Übungsaufgabe

DROP SCHEMA S; CREATE SCHEMA S; USE S;
CREATE TABLE BEZEICHNUNG ( I INT, BEZEICHNUNG VARCHAR ( 255 ));
INSERT INTO BEZEICHNUNG ( I, BEZEICHNUNG ) VALUES ( 0, 'Lehrter Stadtbahnhof' );
INSERT INTO BEZEICHNUNG ( I, BEZEICHNUNG ) VALUES ( 1, 'Bundesgrenzschutz' );
INSERT INTO BEZEICHNUNG ( I, BEZEICHNUNG ) VALUES ( 2, 'Karl-Marx-Stadt' );
INSERT INTO BEZEICHNUNG ( I, BEZEICHNUNG ) VALUES ( 3, 'Zaire' );

In dem Tabellenspeicher »BEZEICHNUNG« beginnt die Numerierung der Zeilen durch die Spalte »I« mit der Zahl »0«. Ändern Sie die Numerierung durch eine möglichst kurze Änderungsabfrage dauerhaft so ab, daß sie mit »1« beginnt.

/   Tabellen erweitern

Skript (MySQL )

WARNINGS; SET sql_mode = 'ANSI,TRADITIONAL';
SET div_precision_increment = 4;
DROP SCHEMA S; CREATE SCHEMA S; USE S;

CREATE TABLE POSTEN ( NAME VARCHAR( 255 ), ANZAHL INTEGER, WERT INTEGER, PRIMARY KEY( NAME ));
INSERT INTO POSTEN ( NAME, ANZAHL, WERT ) VALUES ( 'Tisch', 1, 2800 );
INSERT INTO POSTEN ( NAME, ANZAHL, WERT ) VALUES ( 'Stuhl', 6, 720 );

Erweitern Sie die Tabelle »POSTEN« um den Gesamtwert, die Mehrwertsteuer und den Bruttobetrag für jeden Posten.

(Das heißt: Schreiben Sie eine Abfrage, welche eine neue abgeleitete Tabelle ergibt, die sechs Spalten hat: Die drei Spalten der ursprünglichen Tabelle und zusätzlich jeweils eine Spalte mit dem Gesamtwert der in der Zeile angegebenen Ware (Anzahl mal Wert), der Mehrwertsteuer zu diesem Gesamtwert und dem Bruttobetrag als Summe aus Gesamtwert und der Mehrwertsteuer. Hier soll keine neue Basistabelle angelegt werden, sondern nur eine abgeleitete Tabelle.)

Legen Sie eine Tabelle mit der von Ihnen geschrieben Abfrage an. (Hier soll eine Ansicht-Tabelle [ein View] angelegt werden, keine neue Basistabelle.)

Übungsaufgabe

Schreiben Sie eine SELECT-Abfrage, welche eine abgeleitete Tabelle ergibt, die eine einzige Spalte enthält, in welcher der Vorname und der Nachname (in dieser Reihenfolge und mit einem Leerzeichen dazwischen) zu einem vollständigen Name zusammengesetzt sind.

DROP SCHEMA S; CREATE SCHEMA S; USE S;
CREATE TABLE PERSON ( NACHNAME VARCHAR ( 255 ), VORNAME VARCHAR ( 255 ) );
INSERT INTO PERSON ( NACHNAME, VORNAME ) VALUES ( 'Wallner', 'Maximilian' );
INSERT INTO PERSON ( NACHNAME, VORNAME ) VALUES ( 'Akcakaya', 'Christina' );
INSERT INTO PERSON ( NACHNAME, VORNAME ) VALUES ( 'Reisser', 'Michael' );
INSERT INTO PERSON ( NACHNAME, VORNAME ) VALUES ( 'Garnreiter', 'Simon' );
INSERT INTO PERSON ( NACHNAME, VORNAME ) VALUES ( 'Batel', 'Frank' );
INSERT INTO PERSON ( NACHNAME, VORNAME ) VALUES ( 'Heimbeck', 'Petra' );
INSERT INTO PERSON ( NACHNAME, VORNAME ) VALUES ( 'Koss', 'Jannis' );
INSERT INTO PERSON ( NACHNAME, VORNAME ) VALUES ( 'Wolff', 'Sylvia' );
INSERT INTO PERSON ( NACHNAME, VORNAME ) VALUES ( 'Noack', 'Fabian' );
INSERT INTO PERSON ( NACHNAME, VORNAME ) VALUES ( 'Schlegel', 'Bettina' );
SELECT * FROM PERSON;
+------------+------------+
| NACHNAME | VORNAME |
+------------+------------+
| Wallner | Maximilian |
| Akcakaya | Christina |
| Reisser | Michael |
| Garnreiter | Simon |
| Batel | Frank |
| Heimbeck | Petra |
| Koss | Jannis |
| Wolff | Sylvia |
| Noack | Fabian |
| Schlegel | Bettina |
+------------+------------+

Reserveaufgaben

/   Bruttopreise

Diese Reserveaufgabe sollte erst nach der Nachbesprechung der vorherigen Übungsaufgabe bearbeitet werden, falls es bei der Bearbeitung der vorherigen Übungsaufgabe noch Probleme gab.

Der unten angelegte Tabellenspeicher »WAREN« enthält Angaben zu Werten von Produkten und der beim Kauf zu entrichtenden Mehrwertsteuer. Ergänzen Sie, was an Stelle der drei Punkte »...« in der letzten Benutzereingabe stehen muß, damit sich die Ausgabe mit der Spalte »BRUTTO« ergibt, welche für jedes Produkt den Bruttopreis enthält!

Skript (MySQL )

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; SET sql_mode = "ANSI,TRADITIONAL";
SET div_precision_increment = 0;
DROP SCHEMA IF EXISTS S; CREATE SCHEMA S; USE S;

CREATE TABLE WAREN ( NAME VARCHAR( 255 ), WERT DECIMAL( 9, 2 ), MWST DECIMAL( 9, 2 ));
INSERT INTO WAREN ( NAME, WERT, MWST )VALUES( 'Kappa X-2000', 120, 12 );
INSERT INTO WAREN ( NAME, WERT, MWST )VALUES( 'Miranda Wunder', 470, 47 );
INSERT INTO WAREN ( NAME, WERT, MWST )VALUES( 'Excelsior Star', 250, 25 );
INSERT INTO WAREN ( NAME, WERT, MWST )VALUES( 'Chromium 500', 90, 9 );

SELECT * FROM WAREN;

+----------------+--------+-------+
| NAME | WERT | MWST |
+----------------+--------+-------+
| Kappa X-2000 | 120.00 | 12.00 |
| Miranda Wunder | 470.00 | 47.00 |
| Excelsior Star | 250.00 | 25.00 |
| Chromium 500 | 90.00 | 9.00 |
+----------------+--------+-------+
SELECT ... FROM WAREN;
+----------------+--------+
| NAME | BRUTTO |
+----------------+--------+
| Kappa X-2000 | 132.00 |
| Miranda Wunder | 517.00 |
| Excelsior Star | 275.00 |
| Chromium 500 | 99.00 |
+----------------+--------+

/   Erste Lücke finden *

Schreiben Sie eine Abfrage, welche die erste Lücke in einer Tabelle ganzer Zahlen findet. (Die erste Lücke ist die kleinste ganze Zahl, deren Nachfolger in der Tabelle fehlt. Der Nachfolger einer ganzen Zahl ist die Summe aus jener Zahl und Eins.)

main.sql

DROP SCHEMA S; CREATE SCHEMA S; USE S;

CREATE TABLE T( C INT );

INSERT INTO T( C )VALUES( 0 ),( 1 ),( 2 ),( 3 ),( 5 ),( 6 ),( 7 ),( 9 );

Protokoll
+-------------+
| ERSTELUECKE |
+-------------+
| 4 |
+-------------+

 

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram722938 stefan_ram:722938 Die Addition in SQL Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd722938, slrprddef722938, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/addition_sql