TigerJython4Kids
HomeTurtlegrafikRobotikDatenbanken
select

4. DATENSÄTZE AUSWÄHLEN (SELECT)

 

 

DU LERNST HIER...

 

wie du in einer Datenbank gezielt nach bestimmten Informationen suchst und nur  ausgewählte Informationen anzeigst.  Die gezielte Auswahl bestimmter Informationen aus einer riesigen Datensammlung, auch Datenreduktion oder Datenfilterung genannt, ist eine wichtige Datenbankoperation.

 

 

MUSTERBEISPIEL

 

Du gehst wieder von der Personendatenbank aus, die du in den vorherigen Kapiteln erzeugt hast,  interessierst dich aber nur für den Namen, Vornamen und den Jahrgang von Mädchen. Dazu verwendest du den select-Befehl mit einer zusätzlichen Angabe, die festlegt, welche Felder du zurück erhalten willst. Folgender Aufruf liefert dir das Gewünschte:

Der Aufruf liefert in einzelnen Tupels die Datensätze zurück, welche die Bedingung erfüllen. Das Tupel enthält aber nur die Werte für den Namen, Vornamen und Jahrgang  Den Rückgabewert nennt man oft einen ResultSet, denn es handelt sich um  eine Menge von Datensätzen, die alle zusammen wiederum in ein Tupel verpackt sind.

from dbtable import *

persons = DbTable()
persons.restore("schule.db")
resultSet = persons.select("name", "vorname", "jahrgang", geschlecht = "w")
print resultSet
► In Zwischenablage kopieren

Für die in Kapitel 3 verwendete Personentabelle liefert das Programm tatsächlich ein Tupel, in dem die einzelnen Datensätze in Tupels verpackt sind.

(('Huber', 'Lia', 2002), ('Meier', 'Nina', 2001))

Am einfachsten kannst du auf die einzelnen Datensätze des ResultSets mit einer for-Schleife

for row in resultSet:

zugreifen. Da  row selbst wieder ein Tupel ist,  erhältst du die Werte einzelner Felder mit einem Index: row[0] liefert den Namen, row[1] den Vornamen und row[2] den Jahrgang. Du kannst damit beispielsweise die Mädchen wieder in einer neuen Tabelle girls in der Datenbank speichern.

from dbtable import *

persons = DbTable()
persons.restore("schule.db")
resultSet = persons.select("name", "vorname", "jahrgang", geschlecht = "w")
print resultSet
girls = DbTable("name", "vorname", "jahrgang")
for row in resultSet:
    girls.insert(row[0], row[1], row[2])
print girls  
girls.save("schule.db") 
► In Zwischenablage kopieren

Mit dem folgenden Programm kannst du jederzeit die gespeicherte Information über die Mädchen zurückholen und anzeigen:

from dbtable import *

girls = DbTable()
girls.restore("schule.db")
print girls
► In Zwischenablage kopieren

 

 

MERKE DIR...

 

Der select()-Befehl liefert einen ResultSet in einem Tupel, in dem jeder Datensatz wieder in ein Tupel gepackt ist. Auf die einzelnen Felder greifst du mit einem Index zu. Im select-Befehl kann man leider nur Gleichheitsbedingungen angeben. Du kannst aber den ResultSet durchlaufen und dort nach einer Bedingung suchen. Beispielsweise findest du alle Teens (mit Jahrgang später als 2001 und früher als 2005 mit


 
from dbtable import *

persons = DbTable()
persons.restore("schule.db")
resultSet = persons.select()
for row in resultSet:
    if row[5] > 2001 and row[5] < 2005:
        print row
► In Zwischenablage kopieren

 

 

ZUM SELBST LÖSEN

 

1.

Hole alle Personen mit Wohnort Bern aus der Personendatenbank und füge sie in eine Tabelle berner, die du dann ausschreibst.


2a.

Verwende die Tabelle mountains (aus der TigerJython-Distribution) und suche alle Schweizer "Viertausender".


2b.

Speichere die Namen und die Höhe dieser Berge in einer Datenbank hochgebirge in der Tabelle viertausender.

3.

Die Tabelle countries (aus der TigerJython-Distribution) enthält u.a. die Felder country_de mit dem deutschen Ländernamen und continent mit dem Kontinent. Schreibe im Ausgabefenster alle Ländernamen mit dem Kontinent "Africa" untereinander aus.