Die Subtraktion in SQL
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 D; CREATE SCHEMA D; USE D;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 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 ONE ( COL INTEGER );
INSERT INTO ONE ( COL ) VALUES ( 1 );SELECT * FROM UMSATZ;
SELECT * FROM ZEICHEN;
SELECT * FROM ONE;
»-« – Die Subtraktion in SQL
Subtraktion mit Spaltenwerten
SELECT JAHR, OST, WEST, WEST - OST FROM UMSATZ;
+------+------+------+-------------+
| JAHR | OST | WEST | WEST - OST |
+------+------+------+-------------+
| 2025 | 1424 | 4228 | 2804 |
| 2026 | 733 | 2891 | 2158 |
| 2027 | 126 | 561 | 435 |
| 2028 | 78 | 121 | 43 |
+------+------+------+-------------+
Subtraktion mit Literalwerten
SELECT 2 - 2;
+-------+
| 2 - 2 |
+-------+
| 0 |
+-------+SELECT 2 - 2;
+-------+
| 2 - 2 |
+-------+
| 0 |
+-------+SELECT 3 - 2;
+-------+
| 3 - 2 |
+-------+
| 1 |
+-------+SELECT 2 - 3;
+-------+
| 2 - 3 |
+-------+
| -1 |
+-------+SELECT 2.0 - 1.999999999999999999999999999999999999999999999999999999999999999999999;
+-------------------------------------------------------------------------------+
| 2.0 - 1.999999999999999999999999999999999999999999999999999999999999999999999 |
+-------------------------------------------------------------------------------+
| 0.000000000000000000000000000000000000000000000000000000000000000000001 |
+-------------------------------------------------------------------------------+SELECT 2.0 - 1.999999999999999999999999999999999999999999999999999999999999999999999999999999999999999;
+-------------------------------------------------------------------------------------------------+
| 2.0 - 1.999999999999999999999999999999999999999999999999999999999999999999999999999999999999999 |
+-------------------------------------------------------------------------------------------------+
| 0.000000000000000000000000000000000000000000000000000000000000000000000001 |
+-------------------------------------------------------------------------------------------------+SELECT 0.1 + 0.1 + 0.1 - 0.1;
+-----------------------+
| 0.1 + 0.1 + 0.1 - 0.1 |
+-----------------------+
| 0.2 |
+-----------------------+SELECT 0.1e0 + 0.1e0 + 0.1e0 - 0.1e0;
+-------------------------------+
| 0.1e0 + 0.1e0 + 0.1e0 - 0.1e0 |
+-------------------------------+
| 0.20000000000000004 |
+-------------------------------+SELECT 100000000000000000000000000000000000. + 1. - 100000000000000000000000000000000000.;
+------------------------------------------------------------------------------------+
| 100000000000000000000000000000000000. + 1. - 100000000000000000000000000000000000. |
+------------------------------------------------------------------------------------+
| 1 |
+------------------------------------------------------------------------------------+SELECT 100000000000000000000000000000000000.e0 + 1. - 100000000000000000000000000000000000.e0 ;
+----------------------------------------------------------------------------------------+
| 100000000000000000000000000000000000.e0 + 1. - 100000000000000000000000000000000000.e0 |
+----------------------------------------------------------------------------------------+
| 0 |
+----------------------------------------------------------------------------------------+SELECT 100000000000000000000000000000000000000000000000000000000000000000000000000000. + 1. - 100000000000000000000000000000000000000000000000000000000000000000000000000000.;
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| 100000000000000000000000000000000000000000000000000000000000000000000000000000. + 1. - 100000000000000000000000000000000000000000000000000000000000000000000000000000. |
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| 1 |
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
Subtraktion mit Spaltenwerten und Literalwerten
SELECT Zeichen, Name FROM Zeichen;
+---------+-------+
| Zeichen | Name |
+---------+-------+
| 1 | Alpha |
| 2 | Gamma |
| 3 | Delta |
+---------+-------+SELECT Zeichen - 1, Name FROM Zeichen;
+-------------+-------+
| Zeichen - 1 | Name |
+-------------+-------+
| 0 | Alpha |
| 1 | Gamma |
| 2 | Delta |
+-------------+-------+
Assoziativität
Die Subtraktion ist linksassoziativ.
Priorität
Die Priorität des Subtraktionsoperators ist genauso hoch wie 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)
/ Mindestbestand
Schreiben Sie eine Abfrage, welche die Differenz zwischen Bestand und Mindestbestand so ausgibt, daß sich ein negativer Wert ergibt, wenn der Bestand den Mindestbestand unterschreitet.
CREATE TABLE ARTIKEL ( BEZEICHNUNG VARCHAR ( 255 ), BESTAND INTEGER, MINDESTBESTAND INTEGER );
INSERT INTO ARTIKEL ( BEZEICHNUNG, BESTAND, MINDESTBESTAND ) VALUES ( 'Schraube', 81, 72 );
INSERT INTO ARTIKEL ( BEZEICHNUNG, BESTAND, MINDESTBESTAND ) VALUES ( 'Unterlegscheibe', 84, 60 );
INSERT INTO ARTIKEL ( BEZEICHNUNG, BESTAND, MINDESTBESTAND ) VALUES ( 'Tisch', 77, 84 );
INSERT INTO ARTIKEL ( BEZEICHNUNG, BESTAND, MINDESTBESTAND ) VALUES ( 'Lineal', 33, 41 );
INSERT INTO ARTIKEL ( BEZEICHNUNG, BESTAND, MINDESTBESTAND ) VALUES ( 'Feder', 34, 54 );
SELECT * FROM ARTIKEL;+-----------------+---------+----------------+
| BEZEICHNUNG | BESTAND | MINDESTBESTAND |
+-----------------+---------+----------------+
| Schraube | 81 | 72 |
| Unterlegscheibe | 84 | 60 |
| Tisch | 77 | 84 |
| Lineal | 33 | 41 |
| Feder | 34 | 54 |
+-----------------+---------+----------------+