Weiter Zurück [Inhalt] Online Suche im Handbuch

31.9 Auswahl spezieller Einträge

Die Einträge sind in den Reihen enthalten, die Felder in Spalten, ganz wie in EXCEL Tabellen.

Wir möchten uns gerne nur die Zeile von Bowser ausgeben lassen:

mysql> SELECT * FROM tier WHERE name = "Bowser";
+--------+----------+---------+-------------+--------------+----------------+
| name   | besitzer | spezies | geschlecht  | geboren      | gestorben      |
+--------+----------+---------+-------------+--------------+----------------+
| Bowser | Diane    | dog     | m           |  1989-08-31  |   1995-07-29   |
+--------+----------+---------+-------------+--------------+----------------+

Die Änderung wurde also ausgeführt, fein !

Stringvergleiche sind normalerweise nicht CASE SENSITIV, das Ergebnis bei der der Eingabe von "bowser" oder "BOWSER" ist iedntisch.

Ein weiteres Beispiel mit Datumsvergleich:

mysql> SELECT * FROM tier WHERE birth >= "1998-1-1";
+----------+----------+---------+-------------+--------------+-----------+
| name     | besitzer | spezies | geschlecht  | geboren      | gestorben |
+----------+----------+---------+-------------+--------------+-----------+
| Chirpy   | Gwen     | bird    | w           | 1998-09-11   | NULL      |
| Puffball | Diane    | hamster | w           | 1999-03-30   | NULL      |
+----------+----------+---------+-------------+--------------+-----------+

Es können auch Bedingungen mit einander verbunden werden:

mysql> SELECT * FROM tier WHERE spezies = "dog" AND geschlecht = "w";
+----------+----------+---------+-------------+--------------+-----------+
| name     | besitzer | spezies | geschlecht  | geboren      | gestorben |
+----------+----------+---------+-------------+--------------+-----------+
| Buffy    | Harold   | dog     | w           | 1989-05-13   | NULL      |
+----------+----------+---------+-------------+--------------+-----------+

Die vorhergehende Abfrage benutzt einen logischen Operator: AND. Hier nun die Anwendung für den Operator OR:

mysql> SELECT * FROM tier WHERE spezies = "snake" OR spezies = "bird";
+----------+----------+---------+-------------+--------------+-----------+
| name     | besitzer | spezies | geschlecht  | geboren      | gestorben |
+----------+----------+---------+-------------+--------------+-----------+
| Chirpy   | Gwen     | bird    | w           | 1998-09-11   | NULL      |
| Whistler | Gwen     | bird    | NULL        | 1997-12-09   | NULL      |
| Slim     | Benny    | snake   | m           | 1996-04-29   | NULL      |
+----------+----------+---------+-------------+--------------+-----------+

AND und OR können auch gemeinsam eingesetzt werden. Es ist immer eine gute Idee, viele Klammern zu verwenden. Sie erhöhen die Lesbarkeit bei komplexen Konstrukten und ermöglichen somit die schnellere Fehleranalyse. Ohne Klammern kann es passieren, daß die Hierarchie der Operatoren nicht mehr eindeutig zu verstehen ist und die MySQL keine eindeutig richtigen Ergebnisse liefert. Hier also das erste kompliziertere Beispiel:


mysql> SELECT * FROM tier WHERE (spezies = "cat" AND geschlecht = "m")
    -> OR (spezies = "dog" AND geschlecht = "w");

+----------+-----------+---------+-------------+--------------+----------------+
| name     | besitzer  | spezies | geschlecht  | geboren      | gestorben      |
+----------+-----------+---------+-------------+--------------+----------------+
| Claws    | Gwen      | cat     | m           | 1994-03-17   | NULL           |
| Buffy    | Harold    | dog     | w           | 1989-05-13   | NULL           |
+----------+-----------+---------+-------------+--------------+----------------+

Wie gesehen, werden immer alle Spalten ausgegeben. Es könnte jedoch sein, daß wir uns nur für wenige Spalten interessieren. Ein weiterer Grund, nur einige Spalten auszuwählen ist, daß Tabellen miteinander verknüpft werden können. Wir benutzen also die Ausgabe einer selektierten Spalte, um nach diesen Elementen in anderen Tabellen zu suchen. Theoretisch könnte man alle Elemente in einer riesigen Tabelle speichern, ähnlich einem EXCEL Sheet. Was ist aber, wenn man eine 3 Dimensionale Tabelle hat. Die Gefahr, daß viele Elemente leerbleiben und unnötig Speicher belegen ist groß. Eine 3-Dimensionale Tabelle kann man aber in zwei einfache Tabellen splitten und die Elemente über jeweils eine oder mehrere Spalten verknüpfen. Zum besseren Verständnis öffnen Sie ein EXCEL Sheet, und stellen sich vor, die Zellen wären kleine Parzellen eines großen Fußballfeldes. Die Spieler 1-11 laufen auf dem Feld herum. Tragen Sie ein, zu welcher Minute sich welcher Spieler auf welcher Parzelle befunden hat. Sie werden merken - man benötigt eine §-Dimensionale Konstruktion. Diese hat zudem sehr viele Freifelder mit NULL, da sich ein Fußballspieler ja zumeist nur in einer Parzelle momentan aufhält. Um einem riesigen EXCEL Sheet zu entkommen, kann man zwei Tabellen anlegen. Die eine mit den durchlaufend numerierten Parzellen (Nummer), Spieler und Minute und einer weiteren mit Nummer, Spalte und Zeile, damit man der Nummer auch X-Y Parzellen wieder zuordnen kann. Am Ende des Spiels sind beide Tabellen gefüllt, ohne daß Platz verschenkt wurde. Zurück also zur Auswahl von einzelnen Spalten:


Weiter Zurück [Inhalt] Online Suche im Handbuch