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
|
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
|
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
|
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 |