KK10_7 Einfache Datenabfragen

Werbung
Datenbanken
7 Einfache Datenabfragen
Karl Meier
[email protected]
26.10.2010
Inhalt






Daten abfragen
Bedingungen definieren
Operatoren und logische Ausdrücke
Ergebnisse gruppieren
Ergebnisse sortieren
Übung
26.10.2010
7 Einfache Datenabfragen
2
1
Datenabfrage
Gezielte Abfrage gespeicherter Information
SELECT
Komplexeste SQL Anweisung
In der Praxis am häufigsten verwendet
Qualität der Anfrage bestimmt das Resultat
26.10.2010
7 Einfache Datenabfragen
3
Anzeige aller Attribute
SELECT * FROM
mysql> SELECT * FROM t_ma;
+-------+--------+----------------+------+------------+----+
| vname | name
| str
| plz | ort
| id |
+-------+--------+----------------+------+------------+----+
| Otto | Kaiser | Bahnstr. 3
| 5600 | Brugg
| 1 |
| Hans | Huber | Ahornweg 12
| 8765 | Engi
| 2 |
| Eva
| Lustig | Paradiesstr. 7 | 7000 | Chur
| 3 |
| Fritz | Moll
| Scherzweg 13
| 7000 | Chur
| 4 |
| Heidi | Huber | Auf der Alp
| 7304 | Maienfeld | 5 |
| Rolf | Bader | Moosstrasse 42 | 8105 | Regensdorf | 6 |
+-------+--------+----------------+------+------------+----+
6 rows in set (0.00 sec)
26.10.2010
7 Einfache Datenabfragen
4
2
Anzeige einzelner Attribute
SELECT … FROM
mysql> SELECT vname, name FROM t_ma;
+-------+--------+
| vname | name
|
+-------+--------+
| Otto | Kaiser |
| Hans | Huber |
| Eva
| Lustig |
| Fritz | Moll
|
| Heidi | Huber |
| Rolf | Bader |
+-------+--------+
6 rows in set (0.00 sec)
26.10.2010
7 Einfache Datenabfragen
5
Spalten umbenennen
SELECT … AS …
mysql> SELECT vname AS Vorname, name AS Name FROM t_ma;
+---------+--------+
| Vorname | Name
|
+---------+--------+
| Otto
| Kaiser |
| Hans
| Huber |
| Eva
| Lustig |
| Fritz
| Moll
|
| Heidi
| Huber |
| Rolf
| Bader |
+---------+--------+
6 rows in set (0.00 sec)
26.10.2010
7 Einfache Datenabfragen
6
3
Konstante Werte
SELECT ″…″ AS …
mysql> SELECT ″Mitarbeiter″ AS status, vname, name
-> FROM t_ma;
+-------------+--------+------------+
| status
| name
| vname
|
+-------------+--------+------------+
| Mitarbeiter | Kaiser | Otto
|
| Mitarbeiter | Huber | Hans
|
| Mitarbeiter | Lustig | Eva
|
| Mitarbeiter | Moll
| Fritz
|
| Mitarbeiter | Huber | Heidi
|
| Mitarbeiter | Bader | Rolf
|
+-------------+--------+------------+
6 rows in set (0.00 sec)
26.10.2010
7 Einfache Datenabfragen
7
Operatoren
Folgende Operatoren können für
Berechnungen in SQL verwendet werden:
+
*
/
26.10.2010
Subtraktion
Addition
Multiplikation
Division
7 Einfache Datenabfragen
8
4
Spezialfälle 1
SELECT kann auch losgelöst von Datenbanken
und Tabellen verwendet werden:
mysql> SELECT 2*4;
+-----+
| 2*4 |
+-----+
|
8 |
+-----+
1 row in set (0.27 sec)
mysql> SELECT now();
+---------------------+
| now()
|
+---------------------+
| 2002-11-25 21:26:53 |
+---------------------+
1 row in set (0.00 sec)
Berechnungen
Zeit
26.10.2010
7 Einfache Datenabfragen
9
Die DUAL Tabelle in Oracle
oracle> DESCRIBE dual;
Name
Null
Type
------------ ------ ----------DUMMY
VARCHAR2(1)
oracle> SELECT * FROM dual;
+---+
| D |
+---+
| X |
+---+
1 row in set (0.02 sec)
Auch wenn diese System-Tabelle geändert
werden kann, sollte dies tunlichst unterlassen
werden!!!
26.10.2010
7 Einfache Datenabfragen
10
5
Spezialfälle 2
mysql> SELECT COUNT(*) FROM t_ma;
+----------+
| count(*) |
+----------+
|
9 |
+----------+
1 row in set (0.00 sec)
Ausgabe der Anzahl Datensätze in einer Tabelle
( Wird im Kapitel 9 Funktionen ausführlich behandelt )
26.10.2010
7 Einfache Datenabfragen
11
Syntax
SELECT [DISTINCT] * | spalten FROM tabelle
[WHERE bedingung]
[GROUP BY spalten [HAVING bedingung]]
[ORDER BY spalten [ASC|DESC] ]
[LIMIT [start, ] anzahl ];
• Beginn der Abfrage mit SELECT
• Doppelte Datensätze vermeiden mit DISTINCT
• Nach FROM folgt die gewünschte Tabelle
26.10.2010
7 Einfache Datenabfragen
12
6
Optionale Parameter
WHERE
Bedingung, welche die Auswahl einschränkt
GROUP BY
Daten werden nach Feld(ern) gruppiert
HAVING
Gruppierte Abfrage wird durch Bedingung eingeschränkt
ORDER BY
Sortierung nach Datenfeld(ern)
LIMIT
Anzahl zurückgelieferter Datensätze wird beschränkt
26.10.2010
7 Einfache Datenabfragen
13
WHERE
Einschränkung der Resultate mit Bedingung(en)
mysql> SELECT name, vname FROM t_ma
-> WHERE name>="m";
> grösser als
+--------+------------+
| name
| vname
|
< kleiner als
+--------+------------+
>= grösser/gleich
| Moll
| Fritz
|
| Moll
| Fritz jun. |
<= kleiner/gleich
| Zubler | Heinz
|
<> / != ungleich
+--------+------------+
LIKE String Vergleich 3 rows in set (0.12 sec)
= gleich
26.10.2010
7 Einfache Datenabfragen
14
7
WHERE … LIKE
LIKE Vergleiche sind bei grossen Tabellen in der Regel sehr
aufwändig und langsam! Es müssen alle Datensätze gelesen
und analysiert werden.
mysql> SELECT name, vname FROM t_ma
-> WHERE name LIKE "%er";
+--------+---------+
| name
| vname
|
+--------+---------+
| Kaiser | Otto
|
| Huber | Hans
|
| Huber | Heidi
|
| Bader | Rolf
|
| Zubler | Heinz
|
| Huber | Andreas |
+--------+---------+
6 rows in set (0.00 sec)
26.10.2010
7 Einfache Datenabfragen
15
Bedingungen
Bedingung
Vergleich
Beispiel
Erklärung
Vergleich Datenfeld mit
vorgegebenen Wert
Bereich
preis < 100
name = „Huber“
preis BETWEEN 50 AND 100
Element
ort IN („Chur“, „Zuerich“)
Wert in einer Liste
Muster
name LIKE „%er“
name LIKE „____“
Wertübereinstimmung
mit Muster ( % , _ )
Nullwert
preis IS NULL
ISNULL(preis)
Feldinhalt NULL
Wert innerhalb eines
Bereiches
Verknüpfung mehrerer
preis < 100 AND preis > 50
Logische
Operatoren name = „Koch“ OR name = „Moll“ Bedingungen
NOT (name LIKE „M%“)
26.10.2010
7 Einfache Datenabfragen
16
8
GROUP BY
Gruppierte Abfragen
• Sinn dieser Abfrage?
• Abhängig vom Zufall, bzw.
• Abhängig von Sortierung
Aggregatsfunktionen
COUNT, SUM, MIN, MAX, AVG
machen Abfrage erst sinnvoll
(Kapitel 10: Funktionen)
26.10.2010
mysql> SELECT name, vname
-> FROM t_ma
-> GROUP by name;
+--------+-------+
| name
| vname |
+--------+-------+
| Bader | Rolf |
| Bond
| James |
| Eagle | Edi
|
| Huber | Hans |
| Kaiser | Otto |
| Lustig | Eva
|
| Moll
| Fritz |
| Zubler | Heinz |
+--------+-------+
8 rows in set (0.00 sec)
7 Einfache Datenabfragen
17
GROUP BY
mysql> SELECT name, COUNT(vname) AS anzahl
-> FROM t_ma
-> GROUP BY name;
+--------+--------+
| name
| anzahl |
+--------+--------+
| Bader |
1 |
| Bond
|
1 |
| Eagle |
1 |
| Huber |
3 |
| Kaiser |
1 |
| Lustig |
1 |
| Moll
|
2 |
| Zubler |
1 |
+--------+--------+
8 rows in set (0.00 sec)
26.10.2010
7 Einfache Datenabfragen
18
9
HAVING
HAVING erlaubt es, Bedingungen für die einzelnen Zeilen
des GROUP BY Statements festzulegen
mysql> SELECT name, count(vname) FROM t_ma
-> GROUP BY name
-> HAVING count(vname) > 1;
+-------+--------------+
| name | count(vname) |
+-------+--------------+
| Huber |
3 |
| Moll |
2 |
+-------+--------------+
2 rows in set (0.00 sec)
26.10.2010
7 Einfache Datenabfragen
19
ORDER BY
Ergebnisse sortieren
• ASC (ascending) Aufsteigend – Default
• DESC (descending) Absteigend
mysql> SELECT name, vname FROM t_ma ORDER BY name ;
+--------+------------+
| name
| vname
|
+--------+------------+
| Bader | Rolf
|
| Bond
| James
|
…
| Moll
| Fritz jun. |
| Zubler | Heinz
|
+--------+------------+
10 rows in set (0.00 sec)
26.10.2010
7 Einfache Datenabfragen
20
10
GROUP BY / ORDER BY
mysql> SELECT name, COUNT(vname) AS anzahl
-> FROM t_ma
-> GROUP BY name
-> ORDER BY anzahl DESC, name;
+--------+--------+
| name
| anzahl |
+--------+--------+
| Huber |
3 |
| Moll
|
2 |
| Bader |
1 |
| Bond
|
1 |
| Eagle |
1 |
| Kaiser |
1 |
| Lustig |
1 |
| Zubler |
1 |
+--------+--------+
8 rows in set (0.00 sec)
26.10.2010
7 Einfache Datenabfragen
21
ORDER BY RAND()
Ausgabe der Ergebnisse in zufälliger Reihenfolge
mysql> SELECT * FROM t_ma ORDER BY RAND() LIMIT 3;
+-------+--------+----------------+------+------------+----+
| vname | name
| str
| plz | ort
| id |
+-------+--------+----------------+------+------------+----+
| Otto | Kaiser | Bahnstr. 3
| 5600 | Brugg
| 1 |
| Rolf | Bader | Moosstrasse 42 | 8105 | Regensdorf | 6 |
| Hans | Huber | Ahornweg 12
| 8765 | Engi
| 2 |
+-------+--------+----------------+------+------------+----+
3 rows in set (0.00 sec)
Drei zufällige Datensätze aus der Tabelle t_ma
26.10.2010
7 Einfache Datenabfragen
22
11
LIMIT n
Limitierung der Anzahl Ergebnissätze
• Rechenzeit
• Speicher- und Netzwerkkapazität
mysql> SELECT * FROM t_ma LIMIT 3;
+-------+--------+----------------+------+-------+----+
| vname | name
| str
| plz | ort
| id |
+-------+--------+----------------+------+-------+----+
| Otto | Kaiser | Bahnstr. 3
| 5600 | Brugg | 1 |
| Hans | Huber | Ahoernweg 12
| 8765 | Engi | 2 |
| Eva
| Lustig | Paradiesstr. 7 | 7000 | Chur | 3 |
+-------+--------+----------------+------+-------+----+
3 rows in set (0.00 sec)
26.10.2010
7 Einfache Datenabfragen
23
LIMIT offset, n
Limitierung der Anzahl Ergebnissätze mit Offset
• Zählung der Datensätze beginnt mit 0
• Offset 3 bedeutet also, Beginn mit viertem Datensatz
mysql> SELECT * FROM t_ma LIMIT 3, 3;
+-------+-------+----------------+------+------------+----+
| vname | name | str
| plz | ort
| id |
+-------+-------+----------------+------+------------+----+
| Fritz | Moll | Scherzweg 13
| 7000 | Chur
| 4 |
| Heidi | Huber | Auf der Alp
| 7304 | Maienfeld | 5 |
| Rolf | Bader | Moosstrasse 42 | 8105 | Regensdorf | 6 |
+-------+-------+----------------+------+------------+----+
3 rows in set (0.01 sec)
26.10.2010
7 Einfache Datenabfragen
24
12
Übersicht Kapitel 7
Befehl
Aktion
SELECT * FROM tabelle;
Datenabfrage
SELECT * FROM tabelle WHERE bedingung;
Abfrage mit
Suchbedingung
SELECT … WHERE daten LIKE „muster“;
Musterabfrage
SELECT … WHERE daten BETWEEN lo AND hi;
Bereichsabfrage
SELECT … WHERE daten IN (werteliste);
Werteliste
SELECT … WHERE bedingung1 AND bedingung2 …;
Logische
Verknüpfung
SELECT … WHERE NOT bedingung;
Negierung
SELECT … ORDER BY spalte;
Sortierung
SELECT … GROUP BY spalte;
Gruppierung
SELECT … GROUP BY spalte HAVING bedingung;
Bedingte Gruppe
26.10.2010
7 Einfache Datenabfragen
25
Übungen (t_ma)
1.
Lassen Sie sich 12 Einträge Vorname Name anzeigen
Ohne Einschränkungen
Alphabetisch sortiert
Zufällig ausgewählt
a)
b)
c)
2.
3.
4.
5.
6.
7.
Nehmen Sie zusätzlich Postleitzahl und Ort hinzu
Benennen Sie die Spalten mit anderen Namen
Listen Sie nur die Mitarbeiter aus Zuerich und Chur auf
Gruppieren Sie die Mitarbeiter nach Ortschaften
Sortieren Sie die Ortschaften absteigend
In welchen Ortschaften wohnen mehrere Mitarbeiter
26.10.2010
7 Einfache Datenabfragen
26
13
26.10.2010
7 Einfache Datenabfragen
27
14
Herunterladen