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 |
+-------------+