Sortieren in SQL (MySQL) (Sortieren in SQL (MySQL)), Lektion, Seite 722407
https://www.purl.org/stefan_ram/pub/sortieren_sql_de (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
SQL-Kurs

Sortieren in SQL  (MySQL )

Vorbereitung

Skript (MySQL )

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

CREATE TABLE PLANET ( PLANET VARCHAR( 255 ) PRIMARY KEY, NAME VARCHAR( 255 ));
INSERT INTO PLANET( PLANET, NAME )VALUES( '10', 'Mars' );
INSERT INTO PLANET( PLANET, NAME )VALUES( '2', 'Venus' );
INSERT INTO PLANET( PLANET, NAME )VALUES( '3', 'Erde' );
INSERT INTO PLANET( PLANET, NAME )VALUES( '1', 'Merkur' );

CREATE TABLE KUNDE ( KUNDE INT PRIMARY KEY, VORNAME VARCHAR( 255 ), NACHNAME VARCHAR( 255 ));
INSERT INTO KUNDE( KUNDE, VORNAME, NACHNAME )VALUES( 23, 'Friederike', 'Nordbeck' );
INSERT INTO KUNDE( KUNDE, VORNAME, NACHNAME )VALUES( 2, 'Michael', 'Rosowski' );
INSERT INTO KUNDE( KUNDE, VORNAME, NACHNAME )VALUES( 14, 'Birgit', 'Rosowski' );
INSERT INTO KUNDE( KUNDE, VORNAME, NACHNAME )VALUES( 9, 'Bodo', 'Rosowski' );
INSERT INTO KUNDE( KUNDE, VORNAME, NACHNAME )VALUES( 6, 'Simon', 'Rosowski' );
INSERT INTO KUNDE( KUNDE, VORNAME, NACHNAME )VALUES( 5, 'Frank', 'Aldegeerds' );
INSERT INTO KUNDE( KUNDE, VORNAME, NACHNAME )VALUES( 1, 'Eelco', 'Fischbach' );

SELECT * FROM PLANET;
SELECT * FROM KUNDE;

Reihenfolge von Zeilen

Die Reihenfolge  der Ausgabe von einzelnen Zeilen einer Tabelle ist durch SQL nicht bestimmt.

Konsole
SELECT * FROM PLANET;
+--------+--------+
| PLANET | NAME |
+--------+--------+
| 10 | Mars |
| 2 | Venus |
| 3 | Erde |
| 1 | Merkur |
+--------+--------+

Sortieren nach einer Spalte

Durch Verwendung einer ORDER-BY-Klausel kann jedoch Sortierung nach einer bestimmten Spalte verlangt werden.

Konsole
SELECT NAME, PLANET FROM PLANET ORDER BY NAME;
+--------+--------+
| NAME | PLANET |
+--------+--------+
| Erde | 3 |
| Mars | 10 |
| Merkur | 1 |
| Venus | 2 |
+--------+--------+

Die ORDER-BY-Klausel muß hinter der WHERE-Klausel stehen.

Aufsteigend oder Absteigend?

Durch Verwendung von »ASC« (“ascending ” – „aufsteigend“) oder »DESC« (“descending ” – „absteigend“) kann die Sortierrichtung festgelegt werden. Erfolgt keine solche Festlegung, wird aufsteigend  sortiert.

Konsole
SELECT NAME, PLANET FROM PLANET ORDER BY NAME ASC;
+--------+--------+
| NAME | PLANET |
+--------+--------+
| Erde | 3 |
| Mars | 10 |
| Merkur | 1 |
| Venus | 2 |
+--------+--------+
SELECT NAME, PLANET FROM PLANET ORDER BY NAME DESC;
+--------+--------+
| NAME | PLANET |
+--------+--------+
| Venus | 2 |
| Merkur | 1 |
| Mars | 10 |
| Erde | 3 |
+--------+--------+

Kombination von Spalten

Es kann auch nach einer Kombination von Spalten sortiert werden, beispielsweise zuerst nach dem Nachnamen  und dann nach dem Vornamen.

Konsole
SELECT NACHNAME, VORNAME, KUNDE FROM KUNDE ORDER BY NACHNAME, VORNAME;
+------------+------------+-------+
| NACHNAME | VORNAME | KUNDE |
+------------+------------+-------+
| Aldegeerds | Frank | 5 |
| Fischbach | Eelco | 1 |
| Nordbeck | Friederike | 23 |
| Rosowski | Birgit | 14 |
| Rosowski | Bodo | 9 |
| Rosowski | Michael | 2 |
| Rosowski | Simon | 6 |
+------------+------------+-------+

»DESC« oder »ASC« bezieht sich immer nur auf die direkt vorangehende Spalte!

Konsole

SELECT NACHNAME, VORNAME, KUNDE FROM KUNDE ORDER BY NACHNAME, VORNAME DESC;

+------------+------------+-------+
| NACHNAME | VORNAME | KUNDE |
+------------+------------+-------+
| Aldegeerds | Frank | 5 |
| Fischbach | Eelco | 1 |
| Nordbeck | Friederike | 23 |
| Rosowski | Simon | 6 |
| Rosowski | Michael | 2 |
| Rosowski | Bodo | 9 |
| Rosowski | Birgit | 14 |
+------------+------------+-------+

SELECT NACHNAME, VORNAME, KUNDE FROM KUNDE ORDER BY NACHNAME DESC, VORNAME DESC;

+------------+------------+-------+
| NACHNAME | VORNAME | KUNDE |
+------------+------------+-------+
| Rosowski | Simon | 6 |
| Rosowski | Michael | 2 |
| Rosowski | Bodo | 9 |
| Rosowski | Birgit | 14 |
| Nordbeck | Friederike | 23 |
| Fischbach | Eelco | 1 |
| Aldegeerds | Frank | 5 |
+------------+------------+-------+

Einfluß des Datentyps auf die Sortierung

Auch Numerale (Zahlwörter) werden lexikographisch aufsteigend  sortiert, falls der Spaltentyp ein VARCHAR-Typ ist (bei einem INT-Typ werden sie jedoch nach ihrem Zahlenwert sortiert).

Konsole
SELECT * FROM PLANET ORDER BY PLANET;
+--------+--------+
| PLANET | NAME |
+--------+--------+
| 1 | Merkur |
| 10 | Mars |
| 2 | Venus |
| 3 | Erde |
+--------+--------+
SELECT * FROM KUNDE ORDER BY KUNDE;
+-------+------------+------------+
| KUNDE | VORNAME | NACHNAME |
+-------+------------+------------+
| 1 | Eelco | Fischbach |
| 2 | Michael | Rosowski |
| 5 | Frank | Aldegeerds |
| 6 | Simon | Rosowski |
| 9 | Bodo | Rosowski |
| 14 | Birgit | Rosowski |
| 23 | Friederike | Nordbeck |
+-------+------------+------------+

»LIMIT«

Durch eine LIMIT-Klausel kann die Anzahl der Zeilen auf die ersten Zeilen eines Ergebnisses beschränkt werden.

Eine zusätzliche OFFSET-Klausel erlaubt es, einen Versatz festzulegen.

main.sql

WARNINGS; SET sql_mode = 'ANSI,TRADITIONAL';

DROP SCHEMA IF EXISTS S; CREATE SCHEMA S; USE S;

CREATE TABLE PLANET ( PLANET VARCHAR( 255 ) PRIMARY KEY, NAME VARCHAR( 255 ));

INSERT INTO PLANET( PLANET, NAME )VALUES( '10', 'Mars' );
INSERT INTO PLANET( PLANET, NAME )VALUES( '2', 'Venus' );
INSERT INTO PLANET( PLANET, NAME )VALUES( '3', 'Erde' );
INSERT INTO PLANET( PLANET, NAME )VALUES( '1', 'Merkur' );

SELECT NAME FROM PLANET ORDER BY NAME;

SELECT NAME FROM PLANET ORDER BY NAME LIMIT 2;

SELECT NAME FROM PLANET ORDER BY NAME LIMIT 1;

SELECT NAME FROM PLANET ORDER BY NAME DESC LIMIT 1;

SELECT NAME FROM PLANET ORDER BY NAME LIMIT 2 OFFSET 2;

SELECT NAME FROM PLANET ORDER BY NAME LIMIT 1 OFFSET 1;

Protokoll
+--------+
| NAME |
+--------+
| Erde |
| Mars |
| Merkur |
| Venus |
+--------+
+------+
| NAME |
+------+
| Erde |
| Mars |
+------+
+------+
| NAME |
+------+
| Erde |
+------+
+-------+
| NAME |
+-------+
| Venus |
+-------+
+--------+
| NAME |
+--------+
| Merkur |
| Venus |
+--------+
+------+
| NAME |
+------+
| Mars |
+------+

Mit Hilfe von »ORDER BY«, »LIMIT« und »OFFSET« kann leicht der größte, kleinste, zweitgrößte, zweitkleinste u.s.w. Wert einer Spalte ermittelt werden.

Manchmal werden bestimmte Ausschnitte aus größeren Tabellen mit Hilfe von »LIMIT« und »OFFSET« ausgewählt, dies kann für ein Datenbanksystem relativ zeitaufwendig sein, könnte also ein Grund für eine verminderte Leistung darstellen.

 

Sortieren nach berechneten Werten ⃗

An Stelle einer Spalte (wie »PLANET«) kann auch ein beliebiger Ausdruck  (wie »-PLANET«) angegeben werden.

Konsole
SELECT NAME, PLANET FROM PLANET ORDER BY PLANET;

+--------+--------+
| NAME | PLANET |
+--------+--------+
| Merkur | 1 |
| Mars | 10 |
| Venus | 2 |
| Erde | 3 |
+--------+--------+

SELECT NAME, PLANET FROM PLANET ORDER BY -PLANET;

+--------+--------+
| NAME | PLANET |
+--------+--------+
| Mars | 10 |
| Erde | 3 |
| Venus | 2 |
| Merkur | 1 |
+--------+--------+

Nach »ORDER BY PLANET« wird wegen des Spaltentyps »VARCHAR« lexikographisch  sortiert.

Nach »ORDER BY -PLANET« wird numerisch  sortiert, da der Operator »-« aus einem VARCHAR-Wert eine Zahl macht. Da diese Zahl das Negative  des Zahlenwertes in der Spalte ist, wird außerdem absteigend  sortiert.

Groß- und Kleinschreibung ⃗

Groß- und Kleinschreibung ist beim Sortieren normalerweise nicht signifikant. Um dies zu ändern kann »ORDER BY BINARY« verwendet werden.

main.sql

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

CREATE TABLE BEISPIEL ( BUCHSTABE CHAR( 1 )PRIMARY KEY );
INSERT INTO BEISPIEL( BUCHSTABE )VALUES( 'A' );
INSERT INTO BEISPIEL( BUCHSTABE )VALUES( 'E' );
INSERT INTO BEISPIEL( BUCHSTABE )VALUES( 'b' );

SELECT BUCHSTABE FROM BEISPIEL ORDER BY BUCHSTABE;

SELECT BUCHSTABE FROM BEISPIEL ORDER BY BINARY BUCHSTABE;

Protokoll
+-----------+
| BUCHSTABE |
+-----------+
| A |
| b |
| E |
+-----------+
+-----------+
| BUCHSTABE |
+-----------+
| A |
| E |
| b |
+-----------+

Falls sowohl »A« als auch »a« eingetragen können werden sollen, wäre statt »CHAR« »BINARY« zu verwenden, aber dann bedeutet »ORDER BY« immer »ORDER BY BINARY«.

main.sql

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

CREATE TABLE BEISPIEL ( BUCHSTABE BINARY( 1 )PRIMARY KEY );
INSERT INTO BEISPIEL( BUCHSTABE )VALUES( 'A' );
INSERT INTO BEISPIEL( BUCHSTABE )VALUES( 'E' );
INSERT INTO BEISPIEL( BUCHSTABE )VALUES( 'b' );

SELECT BUCHSTABE FROM BEISPIEL ORDER BY BUCHSTABE;

SELECT BUCHSTABE FROM BEISPIEL ORDER BY BINARY BUCHSTABE;

Protokoll
+-----------+
| BUCHSTABE |
+-----------+
| A |
| E |
| b |
+-----------+
+-----------+
| BUCHSTABE |
+-----------+
| A |
| E |
| b |
+-----------+
main.sql

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

CREATE TABLE BEISPIEL ( BUCHSTABE CHAR( 1 )PRIMARY KEY );
INSERT INTO BEISPIEL( BUCHSTABE )VALUES( 'a' );
INSERT INTO BEISPIEL( BUCHSTABE )VALUES( 'A' );

SELECT BUCHSTABE FROM BEISPIEL;

Protokoll
ERROR 1062 (23000) at line 5 in file: 'main.sql': Duplicate entry 'A' for key 'PRIMARY'
main.sql

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

CREATE TABLE BEISPIEL ( BUCHSTABE BINARY( 1 )PRIMARY KEY );
INSERT INTO BEISPIEL( BUCHSTABE )VALUES( 'a' );
INSERT INTO BEISPIEL( BUCHSTABE )VALUES( 'A' );

SELECT BUCHSTABE FROM BEISPIEL;

Protokoll
+-----------+
| BUCHSTABE |
+-----------+
| A |
| a |
+-----------+

Angabe einer Spalte über ihre Position ⃗

Ein Spalte kann auch über ihre Position in der Tabelle angegeben werden. (Dabei hat eine Spalte im relationalen Modell gar keine Position.)

Hierzu darf nur ein einfaches Numerale verwendet werden, kein Ausdruck mit Operatoren.

Diese Möglichkeit erlaubt es, sich auf berechnete Spalten  zu beziehen, wofür allerdings auch ein mit »AS« vergebener Spaltenname verwendet werden könnte.

main.sql

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

CREATE TABLE BEISPIEL ( ZAHL INT PRIMARY KEY );
INSERT INTO BEISPIEL( ZAHL )VALUES( 12 );
INSERT INTO BEISPIEL( ZAHL )VALUES( 15 );

SELECT ZAHL, -ZAHL AS B FROM BEISPIEL ORDER BY ZAHL;

SELECT ZAHL, -ZAHL AS B FROM BEISPIEL ORDER BY 1;

SELECT ZAHL, -ZAHL AS B FROM BEISPIEL ORDER BY B;

SELECT ZAHL, -ZAHL AS B FROM BEISPIEL ORDER BY 2;

SELECT ZAHL, -ZAHL AS B FROM BEISPIEL ORDER BY -1;

Protokoll
+------+-----+
| ZAHL | B |
+------+-----+
| 12 | -12 |
| 15 | -15 |
+------+-----+
+------+-----+
| ZAHL | B |
+------+-----+
| 12 | -12 |
| 15 | -15 |
+------+-----+
+------+-----+
| ZAHL | B |
+------+-----+
| 15 | -15 |
| 12 | -12 |
+------+-----+
+------+-----+
| ZAHL | B |
+------+-----+
| 15 | -15 |
| 12 | -12 |
+------+-----+
+------+-----+
| ZAHL | B |
+------+-----+
| 12 | -12 |
| 15 | -15 |
+------+-----+

Im letzten Falle mit »-1« wird so sortiert, als gäbe es eine weitere Spalte, die in jeder Zeile den Wert »-1« enthält und dann nach jener Spalte sortiert – also praktisch gar nicht.

Sortieren und »UNION« ⃗

Eine ORDER-BY-Klausel hinter einer UNION-Anwendung bezieht sich auf das Ergebnis  der UNION-Anwendung (und nicht nur auf das Ergebnis der direkt voranstehenden Abfrage).

Skript (MySQL )

DROP SCHEMA D; CREATE SCHEMA D; USE D;

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

INSERT INTO FRAU ( VORNAME, NACHNAME ) VALUES ( 'Anita', 'Holm' );
INSERT INTO FRAU ( VORNAME, NACHNAME ) VALUES ( 'Cathrin', 'Naumann' );
INSERT INTO FRAU ( VORNAME, NACHNAME ) VALUES ( 'Simone', 'Meijer' );

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

INSERT INTO MANN ( VORNAME, NACHNAME ) VALUES ( 'Nicolas', 'Zeeck' );
INSERT INTO MANN ( VORNAME, NACHNAME ) VALUES ( 'Christian', 'Moorwessel' );
INSERT INTO MANN ( VORNAME, NACHNAME ) VALUES ( 'Michael', 'Aldekamp' );

SELECT * FROM FRAU;

SELECT * FROM MANN;

SELECT NACHNAME, VORNAME, 'w' AS GESCHLECHT FROM FRAU
UNION
SELECT NACHNAME, VORNAME, 'm' AS GESCHLECHT FROM MANN

ORDER BY NACHNAME, VORNAME, GESCHLECHT;

+------------+-----------+------------+
| NACHNAME | VORNAME | GESCHLECHT |
+------------+-----------+------------+
| Aldekamp | Michael | m |
| Holm | Anita | w |
| Meijer | Simone | w |
| Moorwessel | Christian | m |
| Naumann | Cathrin | w |
| Zeeck | Nicolas | m |
+------------+-----------+------------+

Sortieren und Register ⃗

In vielen Fällen kann die Registrierung einer Spalte das Sortieren über jene Spalte beschleunigen.

Sortieren mit Umlauten *

Bei Verwendung von Umlauten ist es in manchen Fällen nötig, die gewünschte Sortierart mit »COLLATE utf8_german2_ci« anzugeben.

(Unter Windows 7 ist statt »utf8« »latin1« zu verwenden.)

Die Angabe enthält zum einen die verwendete Zeichenkodierung »utf8« und dann das zu verwendende Sortierverfahren »german2_ci«.

Die Details der verschiedenen Zeichenkodierungen, die MySQL verwenden kann, sind kompliziert, und sollen hier noch nicht vertieft werden.

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

CREATE TABLE BUCHSTABE ( BUCHSTABE INTEGER, BUCHSTABENTEXT VARCHAR( 255 ));
INSERT INTO BUCHSTABE ( BUCHSTABE, BUCHSTABENTEXT )VALUES( 1, 'a' );
INSERT INTO BUCHSTABE ( BUCHSTABE, BUCHSTABENTEXT )VALUES( 2, 'o' );
INSERT INTO BUCHSTABE ( BUCHSTABE, BUCHSTABENTEXT )VALUES( 3, 'u' );
INSERT INTO BUCHSTABE ( BUCHSTABE, BUCHSTABENTEXT )VALUES( 4, 'ä' );
INSERT INTO BUCHSTABE ( BUCHSTABE, BUCHSTABENTEXT )VALUES( 5, 'ö' );
INSERT INTO BUCHSTABE ( BUCHSTABE, BUCHSTABENTEXT )VALUES( 6, 'ü' );

SELECT * FROM BUCHSTABE ORDER BY BUCHSTABENTEXT COLLATE utf8_german2_ci;

+-----------+----------------+
| BUCHSTABE | BUCHSTABENTEXT |
+-----------+----------------+
| 1 | a |
| 4 | ä |
| 2 | o |
| 5 | ö |
| 3 | u |
| 6 | ü |
+-----------+----------------+

SELECT * FROM BUCHSTABE ORDER BY BUCHSTABENTEXT COLLATE utf8_unicode_520_ci;

+-----------+----------------+
| BUCHSTABE | BUCHSTABENTEXT |
+-----------+----------------+
| 1 | a |
| 4 | ä |
| 2 | o |
| 5 | ö |
| 3 | u |
| 6 | ü |
+-----------+----------------+

SELECT * FROM BUCHSTABE ORDER BY BUCHSTABENTEXT COLLATE utf8_bin;

+-----------+----------------+
| BUCHSTABE | BUCHSTABENTEXT |
+-----------+----------------+
| 1 | a |
| 2 | o |
| 3 | u |
| 4 | ä |
| 5 | ö |
| 6 | ü |
+-----------+----------------+

Beispiel Das symmetrische  kartesische Produkt zweier Tabellen ⃗

Das symmetrische kartesische Produkt zweier Tabellen ist die Vereinigung des kartesischen Produkts der beiden Tabellen mit dem kartesischen Produkt der beiden Tabellen mit vertauschter Reihenfolge der Faktoren.

Beispielsweise sollen in einem Schach-Turnier jeder der Spieler einer Mannschaft M gegen jeden der Spieler einer Mannschaft W zweimal  antreten: Einmal soll der Spieler aus A mit Weiß  spielen und einmal der Spieler aus B.

main.sql

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

CREATE TABLE M ( NAME VARCHAR ( 255 ));
INSERT INTO M ( NAME ) VALUES ( 'Rudolf' );
INSERT INTO M ( NAME ) VALUES ( 'Werner' );
INSERT INTO M ( NAME ) VALUES ( 'Reinhard' );

CREATE TABLE W ( NAME VARCHAR ( 255 ));
INSERT INTO W ( NAME ) VALUES ( 'Heike' );
INSERT INTO W ( NAME ) VALUES ( 'Claudia' );
INSERT INTO W ( NAME ) VALUES ( 'Anita' );

SELECT M.NAME AS WEISS, W.NAME AS SCHWARZ FROM M INNER JOIN W
UNION
SELECT W.NAME AS WEISS, M.NAME AS SCHWARZ FROM W INNER JOIN M

Protokoll
+----------+----------+
| WEISS | SCHWARZ |
+----------+----------+
| Rudolf | Heike |
| Werner | Heike |
| Reinhard | Heike |
| Rudolf | Claudia |
| Werner | Claudia |
| Reinhard | Claudia |
| Rudolf | Anita |
| Werner | Anita |
| Reinhard | Anita |
| Heike | Rudolf |
| Claudia | Rudolf |
| Anita | Rudolf |
| Heike | Werner |
| Claudia | Werner |
| Anita | Werner |
| Heike | Reinhard |
| Claudia | Reinhard |
| Anita | Reinhard |
+----------+----------+

Eine UNION-Abfrage erlaubt auch noch einer ORDER-BY--Klausel.

main.sql

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

CREATE TABLE M ( NAME VARCHAR ( 255 ));
INSERT INTO M ( NAME ) VALUES ( 'Rudolf' );
INSERT INTO M ( NAME ) VALUES ( 'Werner' );
INSERT INTO M ( NAME ) VALUES ( 'Reinhard' );

CREATE TABLE W ( NAME VARCHAR ( 255 ));
INSERT INTO W ( NAME ) VALUES ( 'Heike' );
INSERT INTO W ( NAME ) VALUES ( 'Claudia' );
INSERT INTO W ( NAME ) VALUES ( 'Anita' );

SELECT M.NAME AS WEISS, W.NAME AS SCHWARZ FROM M INNER JOIN W
UNION
SELECT W.NAME AS WEISS, M.NAME AS SCHWARZ FROM W INNER JOIN M
ORDER BY WEISS

Protokoll
+----------+----------+
| WEISS | SCHWARZ |
+----------+----------+
| Anita | Werner |
| Anita | Reinhard |
| Anita | Rudolf |
| Claudia | Werner |
| Claudia | Reinhard |
| Claudia | Rudolf |
| Heike | Werner |
| Heike | Reinhard |
| Heike | Rudolf |
| Reinhard | Heike |
| Reinhard | Claudia |
| Reinhard | Anita |
| Rudolf | Heike |
| Rudolf | Claudia |
| Rudolf | Anita |
| Werner | Heike |
| Werner | Claudia |
| Werner | Anita |
+----------+----------+

Im folgenden Beispiel wird die ORDER-BY-Klausel durch die Klammerung nur der inneren SELECT-Abfrage zugeordnet (was relativ sinnlos ist, da die Vereinigung eine eventuelle Sortierung nicht bewahren muß).

main.sql

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

CREATE TABLE M ( NAME VARCHAR ( 255 ));
INSERT INTO M ( NAME ) VALUES ( 'Rudolf' );
INSERT INTO M ( NAME ) VALUES ( 'Werner' );
INSERT INTO M ( NAME ) VALUES ( 'Reinhard' );

CREATE TABLE W ( NAME VARCHAR ( 255 ));
INSERT INTO W ( NAME ) VALUES ( 'Heike' );
INSERT INTO W ( NAME ) VALUES ( 'Claudia' );
INSERT INTO W ( NAME ) VALUES ( 'Anita' );

SELECT M.NAME AS WEISS, W.NAME AS SCHWARZ FROM M INNER JOIN W
UNION
( SELECT W.NAME AS WEISS, M.NAME AS SCHWARZ FROM W INNER JOIN M
ORDER BY WEISS )

Protokoll
+----------+----------+
| WEISS | SCHWARZ |
+----------+----------+
| Rudolf | Heike |
| Werner | Heike |
| Reinhard | Heike |
| Rudolf | Claudia |
| Werner | Claudia |
| Reinhard | Claudia |
| Rudolf | Anita |
| Werner | Anita |
| Reinhard | Anita |
| Heike | Rudolf |
| Claudia | Rudolf |
| Anita | Rudolf |
| Heike | Werner |
| Claudia | Werner |
| Anita | Werner |
| Heike | Reinhard |
| Claudia | Reinhard |
| Anita | Reinhard |
+----------+----------+

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 stefanram722407 stefan_ram:722407 Sortieren in SQL (MySQL) Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd722407, slrprddef722407, 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/sortieren_sql_de