TigerJython xx
für Gymnasien

Datensätze mit SELECT auswählen

Mit dem Befehl SELECT können Datensätze nach bestimmten Kriterien ausgewählt werden. Die Stärke der SELECT-Anweisung liegt in der Vielzahl von Optionen, mit deren Hilfe die Datensätze filtriert und in geeigneter Form dargestellt werden können.

Allgemeine Form:

SELECT * FROM tabelle WHERE bedingung ORDER BY feld [DESC]

SELECT feld1, feld2,.. FROM tabelle WHERE bedingung ORDER BY feld [DESC]
zeigt nur gewählte Felder an. Mit dem Zusatz DESC werden die Datensätze in absteigender Reihenfolge sortiert.

Einige Beispiele:

SELECT * FROM person Alle Datensätze aus der Tabelleperson
SELECT * FROM person ORDER BY name Alle Datensätze geordnet nach name
SELECT name, vorname FROM person Nur die Felder name und vorname werden ausgewählt
SELECT * FROM person WHERE name = 'Bauer' Alle Datensätze mit dem Namen Bauer
SELECT * FROM person WHERE geschlecht = 'm' Alle männliche Personen
SELECT * FROM person WHERE 2017-jahrgang < 15 Alle Personen, die jünger als 15 Jahre sind


# SelectEx1.py

from sqlite3 import *
from prettytable import *

with connect("demo.db") as con:
    cursor = con.cursor()
    sql = "SELECT * FROM person"
    #sql = "SELECT * FROM person ORDER BY name"
    #sql = "SELECT name, vorname FROM person ORDER BY name"
    #sql = "SELECT * FROM person WHERE name = 'Bauer'"
    #sql = "SELECT * FROM person WHERE geschlecht = 'm'"
    #sql = "SELECT * FROM person WHERE 2017-jahrgang < 15"
    resultset = cursor.execute(sql)
    printTable(resultset)

Programmcode markieren (Ctrl+C kopieren, Ctrl+V einfügen)

Ergebnis der letzten Abfrage
:

Erklärungen zum Programmcode:

sql = "SELECT * FROM person" Die SELECT-Anweisung wird in der Variablen sql gespeichert
#sql: zum Testen werden im gleichen Programm mehrere Abfragen definiert. Man muss jeweils nur eine Zeile aktivieren, indem man das Kommentarzeichen # löscht
resultset = cursor.execute(sql): Ergebnis einer SQL-Abfrage ist eine Liste der Datensätze, ein sog. resultset.

Man kann mit dem Modul prettytable das Ergebnis einer Abfrage auch in einem eigenständigen Fenster anzeigen. Man muss nur printTable(cursor) durch showTable(resultset) ersetzen.

# SelectEx1a.py

from sqlite3 import *
from prettytable import *

with connect("demo.db") as con:
    cursor = con.cursor()
    #sql = "SELECT * FROM person"
    #sql = "SELECT * FROM person ORDER BY name"
    #sql = "SELECT name, vorname FROM person ORDER BY name"
    #sql = "SELECT * FROM person WHERE name = 'Bauer'"
    #sql = "SELECT * FROM person WHERE geschlecht = 'm'"
    sql = "SELECT * FROM person WHERE 2017 - jahrgang < 15"
    resultset = cursor.execute(sql)
    showTable(resultset) 
Programmcode markieren (Ctrl+C kopieren, Ctrl+V einfügen)


Beispiel 2: Auswahlbedingungen verknüpfen

Häufig will man mit einer Abfrage Datensätze herausfiltern, die nicht nur eine sondern mehrere Bedingungen erfüllen müssen. Dazu werden die Operatoren AND, OR und NOT verwendet. Man kann auch Wildcards % verwenden, wenn man an Stelle des Gleichheitszeichens LIKE verwendet. name LIKE 'H%' liefert alle Namen, die mit H beginnen. Man kann auch den Wildcard _ für ein einzelnes Zeichen verwenden.

Einige Beispiele:

SELECT * FROM person WHERE name = 'Meier' AND vorname = 'Nina' Sucht Nina Meier
SELECT * FROM person WHERE wohnort = 'Thun' OR home = 'Biel' Alle, die in Thun oder Biel wohnen
SELECT * FROM person WHERE name = 'Meier' AND NOT geschlecht = 'f' Meier, männlich
SELECT * FROM person WHERE wohnort = 'Bern' AND name LIKE 'H%' Berner mit Namen, der mit H beginnt


# SelectEx2.py

from sqlite3 import *
from prettytable import *

with connect("demo.db") as con:
    cursor = con.cursor()
    sql = "SELECT * FROM person WHERE name = 'Meier' AND vorname = 'Nina'"
    #sql = "SELECT * FROM person WHERE wohnort = 'Thun' OR wohnort = 'Biel'"
    #sql = "SELECT * FROM person WHERE NOT wohnort = 'Bern'"   
    #sql = "SELECT * FROM person WHERE name = 'Meier' AND NOT wohnort = 'Biel'"
    #sql = "SELECT * FROM person WHERE wohnort = 'Bern' AND name LIKE 'H%'"
    resultset = cursor.execute(sql)
    printTable(resultset) 

Programmcode markieren (Ctrl+C kopieren, Ctrl+V einfügen)

Ergebnis der letzten Abfrage:


Erklärungen zum Programmcode:

Die Wildcards % können auch am Anfange oder in der Mitte des gesuchten Namens stehen:
name LIKE '%er' liefert alle Namen, die mit er enden
name LIKE 'Me_er' liefert alle Meier oder Meyer