Nutzung der Datenbank SQLite - RRZN
Nutzung der Datenbank SQLite - RRZN
Nutzung der Datenbank SQLite - RRZN
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
Python<br />
Arbeiten mit <strong>Datenbank</strong>en am Beispiel „sqlite“
Eine <strong>Datenbank</strong> ...<br />
<br />
<br />
<br />
<br />
ist eine Sammlung von Daten zu einem bestimmten Thema<br />
o<strong>der</strong> einem bestimmtem Zweck.<br />
ermöglicht eine strukturierte Ablage von Informationen.<br />
kann Arbeitsabläufe eines Unternehmens abbilden.<br />
stellt einen Container für die Ablage von Daten in Tabellen<br />
dar.<br />
Python – Programmierung, 27.10.10 Seite 2
Beispiele für die <strong>Nutzung</strong><br />
<br />
<br />
<br />
<br />
<br />
Adressverwaltung.<br />
Sammlung aller Informationen zu CDs o<strong>der</strong> Büchern.<br />
Literatursammlung.<br />
Bestellwesen.<br />
Abbildung eines Warenlagers.<br />
Python – Programmierung, 27.10.10 Seite 3
Relationale <strong>Datenbank</strong>en ...<br />
<br />
<br />
<br />
sind das am weitesten verbreitete Modell.<br />
legen Daten in Tabellenform strukturiert ab.<br />
Jede Zeile beschreibt eine Person, Gegenstand, etc.<br />
Für jedes Merkmal des beschriebenen Objekts wird eine<br />
Spalte eingerichtet.<br />
nutzen Schlüsselwerte, um Tabellen miteinan<strong>der</strong> zu<br />
verknüpfen.<br />
Python – Programmierung, 27.10.10 Seite 4
Vorteile einer <strong>Datenbank</strong> am Beispiel „Adressbuch“<br />
Ablage<br />
… aus Papier<br />
… in beliebiger Form.<br />
Die Adressmerkmale wie<br />
Name, Straße etc. werden in<br />
beliebiger Reihenfolge erfasst.<br />
… als <strong>Datenbank</strong><br />
… in Tabellenform.<br />
Pro Zeile werden die<br />
Informationen zu einer Person<br />
abgelegt. Für jedes<br />
Adressmerkmal wird eine Spalte<br />
angelegt. Die Daten sind<br />
strukturiert abgelegt.<br />
Sortierung<br />
Filterung<br />
Häufig werden Adressen<br />
alphabetisch nach dem Namen<br />
abgelegt. Eine an<strong>der</strong>e<br />
Sortierung zerstört das alte<br />
Adressbuch.<br />
Das Adressbuch muss neu<br />
geschrieben werden.<br />
Die Adressen können nach je<strong>der</strong><br />
Spalte sortiert werden.<br />
Die Daten können in<br />
Abhängigkeit von Kriterien<br />
gefiltert werden.<br />
Python – Programmierung, 27.10.10 Seite 5
Nachbildung in einer <strong>Datenbank</strong><br />
Vorname Nachname Strasse PLZ Ort<br />
<br />
<br />
<br />
<br />
Pro Spalte wird eine Information gespeichert.<br />
Jede Zeile beschreibt eindeutig ein Objekt. Für ein<br />
Adressbuch wird pro Zeile eine Adresse abgebildet.<br />
Die Daten in den Spalten können auf Gültigkeit geprüft<br />
werden.<br />
Eine Sortierung ist mit Hilfe <strong>der</strong> Spalten möglich.<br />
Python – Programmierung, 27.10.10 Seite 6
Aufbau einer Tabelle<br />
Feldnamen (Attribut, Merkmal)<br />
im Spaltenkopf.<br />
Vorname Nachname Strasse PLZ Ort<br />
Heinz Peters Friesenstr. 4 30159 Hannover<br />
Sonja Müller 30159 Hannover<br />
Marlis Schulze Lerchenstr. 1 30159 Hannover<br />
Scholz Baumstr. 2a 30159 Hannover<br />
Das Datenfeld (Zelle) enthält den<br />
Attributwert.<br />
Der Datensatz (Tupel)<br />
beschreibt ein Objekt<br />
zeilenweise.<br />
Python – Programmierung, 27.10.10 Seite 7
Regeln<br />
Jede Tabelle (Relation) besteht aus einer Menge von<br />
Datensätzen (Tupeln).<br />
Pro Datensatz wird eine Zeile in einer Tabelle benötigt.<br />
Je<strong>der</strong> Datensatz ...<br />
<br />
hat die gleiche Menge an Attributen / Spalten.<br />
beschreibt ein Objekt.<br />
Je<strong>der</strong> Attributwert (Datenfeld)<br />
definiert die Ausprägung des Merkmals.<br />
hat exakt einen Wert für ein Merkmal.<br />
Python – Programmierung, 27.10.10 Seite 8
Regeln<br />
Je<strong>der</strong> Datensatz in einer Tabelle unterscheidet sich von allen<br />
an<strong>der</strong>en Datensätzen in mindestens einem Attributwert. Jedes<br />
beschriebene Objekt ist einzigartig.<br />
Ein Attributwert ist atomar. Zum Beispiel das Element "30159<br />
Hannover" ist nicht atomar. Es kann weiter zerlegt werden.<br />
Der Attributwert kann in die Bestandteile Postleitzahl und Ort<br />
zerlegt werden. Nach <strong>der</strong> Zerlegung ist eine Sortierung nach<br />
Postleitzahl o<strong>der</strong> Ort möglich.<br />
Python – Programmierung, 27.10.10 Seite 9
Verknüpfungen zwischen Tabellen<br />
StudentID Vorname Nachname Strasse PLZ Ort<br />
123 Heinz Peters Friesenstr. 4 30159 Hannover<br />
456 Sonja Müller 30159 Hannover<br />
753 Marlis Schulze Lerchenstr. 1 30159 Hannover<br />
789 Scholz Baumstr. 2a 30159 Hannover<br />
Schlüsselwert<br />
… <strong>der</strong> in dieser<br />
Tabelle zur<br />
Identifizierung des<br />
Studenten genutzt<br />
wird.<br />
StudentID Prüfung1 Prüfung2 Prüfung3<br />
123 1 3<br />
753 2 3<br />
789 3<br />
Python – Programmierung, 27.10.10 Seite 10
Beispiel einer <strong>Datenbank</strong><br />
Informationen zu<br />
Studenten<br />
Informationen zu<br />
Fachbereichen<br />
Studenten ↔ Fachbereich<br />
Bücher in einer<br />
Bibliothek<br />
Informationen zur Ausleihe<br />
Python – Programmierung, 27.10.10 Seite 11
Ablage <strong>der</strong> Informationen<br />
StudentID Vorname Nachname Strasse PLZ Ort<br />
123 Heinz Peters Friesenstr. 4 30159 Hannover<br />
456 Sonja Müller 30159 Hannover<br />
753 Marlis Schulze Lerchenstr. 1 30159 Hannover<br />
789 Scholz Baumstr. 2a 30159 Hannover<br />
Student Fach<br />
123 S2<br />
456 S1<br />
753 S3<br />
ID<br />
S1<br />
S2<br />
S3<br />
Fachrichtung<br />
Physik<br />
Wirtschaftswissenschaft<br />
Jura<br />
Python – Programmierung, 27.10.10 Seite 12
Schlüssel (Key) ...<br />
<br />
<br />
<br />
<br />
sind immer eindeutige Werte. Ein Schlüsselwert kommt exakt<br />
einmal in einer Tabelle vor.<br />
identifizieren einen Datensatz.<br />
können Beziehungen zwischen zusammenhängenden Daten<br />
in verschiedenen Tabellen knüpfen.<br />
sind häufig künstliche Attribute wie Personalnummer,<br />
Kundennummer etc.<br />
Python – Programmierung, 27.10.10 Seite 13
Beispiele<br />
<br />
<br />
Ein Auto hat die Attribute Anzahl <strong>der</strong> Rä<strong>der</strong>, Farbe, km-<br />
Leistung etc.<br />
Die Fahrzeugnummer ist eine künstliche Eigenschaft und wird<br />
nicht für den Gebrauch benötigt. Die Fahrzeugnummer<br />
identifiziert aber ein Auto eindeutig.<br />
Ein Buch hat einen Titel, wird von einem Autor geschrieben<br />
und als Hardcover o<strong>der</strong> Taschenbuch ausgeliefert.<br />
Der Autor genügt nicht zur Identifizierung eines Buches. Ein<br />
Autor kann mehr als ein Buch schreiben. Der Titel identifiziert<br />
ein Buch auch nicht eindeutig, weil <strong>der</strong> gleiche Titel als<br />
Taschenbuch und / o<strong>der</strong> als Hardcover ausgeliefert werden<br />
kann.<br />
Die ISBN-Nummer ist für jedes Buch eindeutig.<br />
Python – Programmierung, 27.10.10 Seite 14
Python und <strong>Datenbank</strong>en<br />
Python -<br />
Applikation<br />
Relationale<br />
<strong>Datenbank</strong><br />
Python – Programmierung, 27.10.10 Seite 15
Schnittstellen zu <strong>Datenbank</strong>en<br />
<br />
<br />
<br />
MySQL<br />
http://pythonblog.de/mysql-mit-python/<br />
http://dev.mysql.com/doc/refman/5.1/de/python.html<br />
PostgreSQL<br />
http://www.pygresql.org/<br />
http://pypgsql.sourceforge.net/<br />
Firebird<br />
http://kinterbasdb.sourceforge.net/<br />
Python – Programmierung, 27.10.10 Seite 16
Schnittstellen zu <strong>Datenbank</strong>en<br />
<br />
<br />
Python Database API:<br />
http://www.python.org/dev/peps/pep-0249/<br />
http://www.zope.de/tagung/Dresden_2010/Python-<br />
<strong>Datenbank</strong>programmierung_mal.pdf/view<br />
SQLLite<br />
http://docs.python.org/py3k/library/sqlite3.html<br />
http://www.sqlite.org/<br />
http://www.shokhirev.com/nikolai/abc/sql/sql.html<br />
Python – Programmierung, 27.10.10 Seite 17
Hinweise zu Python 3.x<br />
<br />
<br />
Für viele <strong>Datenbank</strong>en wie MySQL, Firebird, Oracle o<strong>der</strong><br />
Microsoft SQL-Server sind keine Schnittstellen für die aktuelle<br />
Python-Version vorhanden.<br />
Nähere Informationen zu welchen Versionen Schnittstellen<br />
vorhanden sind, finden Sie unter<br />
http://wiki.python.org/moin/DatabaseProgramming/.<br />
Python – Programmierung, 27.10.10 Seite 18
sqlite ...<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
speichert die Daten in Dateien ab. Die Dateiendung ist frei<br />
wählbar.<br />
benötigt keinen <strong>Datenbank</strong>-Server.<br />
wird für Testzwecke o<strong>der</strong> kleine Datenmengen genutzt.<br />
eignet sich nicht für eine Mehrbenutzer-Umgebung.<br />
ist eine in Python eingebettete <strong>Datenbank</strong>. Die <strong>Datenbank</strong> wird<br />
mit Hilfe von « import sqlite3 » geladen.<br />
wird momentan in <strong>der</strong> Version 3.7.3 ausgeliefert.<br />
Informationen zu <strong>der</strong> <strong>Datenbank</strong> finden Sie unter<br />
http://www.sqlite.org/.<br />
Python – Programmierung, 27.10.10 Seite 19
Arbeitsablauf<br />
Passend zur <strong>Datenbank</strong> muss das passende Modul<br />
implementiert werden.<br />
Anschließend wird eine Verbindung zur <strong>Datenbank</strong> erstellt.<br />
In <strong>der</strong> <strong>Datenbank</strong> werden ...<br />
<br />
Tabellen neu erstellt und gelöscht.<br />
Daten ausgewählt, eingefügt, verän<strong>der</strong>t und gelöscht.<br />
Die Verbindung zur <strong>Datenbank</strong> wird geschlossen.<br />
Python – Programmierung, 27.10.10 Seite 20
Verbindung aufbauen und schließen<br />
«<br />
import sqlite3<br />
connection = sqlite3.connect("prospekt01.dat")<br />
»<br />
connection.close()<br />
Python – Programmierung, 27.10.10 Seite 21
Verbindung erstellen<br />
Mit Hilfe <strong>der</strong> Methode « .connect() » ...<br />
<br />
wird eine vorhandene <strong>Datenbank</strong> eingelesen und mit einem<br />
Connection-Objekt verbunden.<br />
wird eine neue leere <strong>Datenbank</strong> mit dem angegebenen<br />
Namen erstellt.<br />
Der Methode wird als Parameter <strong>der</strong> Speicherort und <strong>der</strong> Name<br />
<strong>der</strong> <strong>Datenbank</strong> übergeben. Eine Pfadangabe ist nicht nötig,<br />
wenn sich die <strong>Datenbank</strong> sowie das Python-Skript im gleichen<br />
Ordner befinden.<br />
Python – Programmierung, 27.10.10 Seite 22
Verbindung schließen<br />
<br />
<br />
<br />
Mit Hilfe <strong>der</strong> Methode « .close() » wird die Verbindung zu<br />
Connection-Objekt geschlossen. Nach <strong>der</strong> Trennung <strong>der</strong><br />
Verbindung sind die Daten in <strong>der</strong> <strong>Datenbank</strong> nicht mehr lesbar.<br />
Das, mit <strong>der</strong> Methode, verbundene Objekt besitzt einen<br />
ungültigen Verweis. Um Fehler zu vermeiden sollte dem Objekt<br />
<strong>der</strong> Wert « None » zugewiesen werden.<br />
Falls nach Trennung <strong>der</strong> Verbindung, Methoden des<br />
Connection-Objekts aufgerufen, wird <strong>der</strong> Fehler<br />
ProgrammingError geworfen.<br />
Python – Programmierung, 27.10.10 Seite 23
Positionszeiger<br />
«<br />
import sqlite3<br />
connection = sqlite3.connect("prospekt01.dat")<br />
baseCursor = connection.cursor()<br />
»<br />
baseCursor.close()<br />
connection.close()<br />
Python – Programmierung, 27.10.10 Seite 24
Arbeiten mit Positionszeigern<br />
Mit Hilfe <strong>der</strong> Methode « .cursor() » wird ein Cursor-Objekt<br />
zurückgegeben.<br />
Das Cursor-Objekt ...<br />
übernimmt die Kommunikation mit <strong>der</strong> <strong>Datenbank</strong>.<br />
überbringt <strong>der</strong> <strong>Datenbank</strong> eine Nachricht. Die Antwort auf<br />
die Nachricht enthält das Cursor-Objekt wie<strong>der</strong>um.<br />
kann beliebig oft zu einer <strong>Datenbank</strong> existieren.<br />
muss mit Hilfe <strong>der</strong> Methode « .close() » geschlossen werden.<br />
Python – Programmierung, 27.10.10 Seite 25
Beispiel: Tabelle erzeugen<br />
«<br />
import sqlite3<br />
connection = sqlite3.connect("prospekt01.dat")<br />
baseCursor = connection.cursor()<br />
# Verbindung öffnen<br />
# Kommunikationskanal öffnen<br />
»<br />
baseCursor.execute("""<br />
# SQL-Anweisung ausführen<br />
CREATE TABLE tblProspekt(<br />
idProspekt SMALLINT PRIMARY KEY,<br />
prospektName CHARACTER(50) NOT NULL,<br />
prospektbeschreibung TEXT(500))<br />
""")<br />
baseCursor.close() # Kommunikationskanal schließen<br />
connection.close() # Verbindung schließen<br />
Python – Programmierung, 27.10.10 Seite 26
SQL (Structed Query Language) ...<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
erlaubt eine Kommunikation mit <strong>der</strong> <strong>Datenbank</strong>.<br />
ist eine strukturierte Abfragesprache für relationale<br />
<strong>Datenbank</strong>en.<br />
definiert Strukturen einer <strong>Datenbank</strong>.<br />
manipuliert und filtert Daten in einer Tabelle.<br />
verknüpft Tabellen.<br />
besteht aus sehr wenigen Kommandos, sehr vielen<br />
Schlüsselwörter und einfachen Funktionen. In SQL sind keine<br />
Schleifen, bedingte Anweisungen o<strong>der</strong> die <strong>Nutzung</strong> von<br />
Variablen implementiert.<br />
ist als „SQL:2008 ISO/IEC 9075:2008“ standardisiert.<br />
Python – Programmierung, 27.10.10 Seite 27
SQL-Anweisung ...<br />
<br />
<br />
<br />
<br />
<br />
können in einer Zeile o<strong>der</strong> in mehreren Zeilen eingegeben<br />
werden.<br />
werden mit einem Semikolon abgeschlossen.<br />
werden immer von links nach rechts gelesen.<br />
beginnen immer mit einem SQL-Schlüsselwort. Beispiele:<br />
SELECT für die Auswahl von Daten.<br />
CREATE TABLE für das Erstellen von Tabellen.<br />
INSERT INTO für das Einfügen von Daten.<br />
werden in Python immer durch drei Anführungszeichen<br />
begrenzt.<br />
Python – Programmierung, 27.10.10 Seite 28
Beispiel: „Erzeuge eine Tabelle“<br />
«<br />
»<br />
CREATE TABLE tblProspekt(<br />
idProspekt SMALLINT PRIMARY KEY,<br />
prospektName CHARACTER(50) NOT NULL,<br />
prospektbeschreibung TEXT(500)<br />
)<br />
<br />
<br />
In diesem Beispiel wird mit Hilfe von CREATE TABLE die neue<br />
Tabelle tblProspekt erzeugt.<br />
In den runden Klammern werden die Spalten und <strong>der</strong>en<br />
Datentyp definiert.<br />
Python – Programmierung, 27.10.10 Seite 29
Aufbau <strong>der</strong> SQL-Anweisung<br />
«<br />
»<br />
«<br />
»<br />
CREATE TABLE tblProspekt(<br />
idProspekt SMALLINT PRIMARY KEY,<br />
prospektName CHARACTER(50) NOT NULL,<br />
prospektbeschreibung TEXT<br />
)<br />
CREATE TABLE tabellenname(<br />
spaltenname DATENTYP,<br />
spaltenname DATENTYP OPTIONEN<br />
)<br />
Python – Programmierung, 27.10.10 Seite 30
Schlüsselwörter in SQL ...<br />
<br />
<br />
<br />
wie zum Beispiel CREATE TABLE, FROM etc.<br />
können sowohl als auch groß o<strong>der</strong> klein geschrieben werden.<br />
werden häufig vollständig groß geschrieben, um die Lesbarkeit<br />
<strong>der</strong> SQL-Anweisung zu erhöhen.<br />
Python – Programmierung, 27.10.10 Seite 31
Benutzerdefinierte Namen ...<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
sind zum Beispiel Tabellennamen wie tblProspekt,<br />
Spaltennamen wie idProspekt etc..<br />
können aus einer beliebigen Kombination von Buchstaben und<br />
Ziffern bestehen. Es dürfen alle alphanumerischen Zeichen<br />
genutzt werden.<br />
können zusätzlich den Unterstrich o<strong>der</strong> das Dollarzeichen<br />
enthalten.<br />
dürfen mit einem beliebigen alphanumerischen Zeichen, dem<br />
Unterstrich o<strong>der</strong> Dollarzeichen beginnen.<br />
dürfen nicht nur aus Zahlen bestehen.<br />
dürfen keine Leerzeichen enthalten<br />
sollten keine deutschen Umlaute enthalten.<br />
Python – Programmierung, 27.10.10 Seite 32
Beachtung von Groß- und Kleinschreibung<br />
<br />
<br />
<strong>Nutzung</strong> des Betriebssystem Windows:<br />
Die Groß- und Kleinschreibung wird nicht beachtet.<br />
<strong>Nutzung</strong> des Betriebssystem Linux / UNIX:<br />
Die Groß- und Kleinschreibung bei benutzerdefinierten Namen<br />
wird beachtet.<br />
Python – Programmierung, 27.10.10 Seite 33
Datentypen ...<br />
<br />
<br />
<br />
<br />
geben über das Format des gespeicherten Wertes Auskunft.<br />
legen Regeln fest, wie ein Attributwert interpretiert und<br />
verwendet werden kann.<br />
Die implementierten Datentypen sind abhängig von <strong>der</strong><br />
gewählten <strong>Datenbank</strong>.<br />
werden in sqlite mit den Wert assoziiert.<br />
Python – Programmierung, 27.10.10 Seite 34
Beispiele für Datentypen in sqlite<br />
<br />
<br />
<br />
<br />
<br />
NULL. Keine Angabe in <strong>der</strong> Spalte.<br />
INTEGER. Positive o<strong>der</strong> negative Ganzzahlen.<br />
REAL. Dezimalzahlen.<br />
TEXT. Zeichenketten in <strong>der</strong> Codierung UTF-8, UTF-16BE o<strong>der</strong><br />
UTF-16LE.<br />
BLOB. Die Daten werden wie eingegeben gespeichert.<br />
Python – Programmierung, 27.10.10 Seite 35
Datentypen <strong>der</strong> Spalten<br />
<br />
<br />
<br />
<br />
INTEGER o<strong>der</strong> SMALLINT erzeugt eine Ganzzahl.<br />
CHARACTER(Anzahl) erzeugt einen Text mit einer Zeichenlänge<br />
von Anzahl Zeichen. TEXT speichert eine beliebig lange<br />
Zeichenkette.<br />
FLOAT erzeugt eine Fließkommazahl.<br />
Nähere Informationen finden Sie unter<br />
http://www.sqlite.org/datatype3.html.<br />
Python – Programmierung, 27.10.10 Seite 36
Verbot eines leeren Feldes<br />
<br />
<br />
<br />
<br />
prospektName CHARACTER(50) NOT NULL.<br />
Das angegebene Feld darf nicht leer sein.<br />
Falls keine Daten in dem Feld existieren, wird eine<br />
Fehlermeldung ausgegeben.<br />
Der Benutzer muss Daten in das Feld eingeben.<br />
Python – Programmierung, 27.10.10 Seite 37
Schlüssel zur Identifizierung<br />
<br />
<br />
<br />
<br />
idProspekt SMALLINT PRIMARY KEY.<br />
Das Feld wird als Schlüsselfeld gekennzeichnet.<br />
Der Wert des Feldes identifiziert eindeutig einen Datensatz,<br />
Je<strong>der</strong> Attributwert in dieser Spalte ist einmalig.<br />
Python – Programmierung, 27.10.10 Seite 38
Falls die Tabelle nicht existiert, erzeuge diese<br />
«<br />
»<br />
CREATE TABLE IF NOT EXISTS tblProspekt(<br />
idProspekt SMALLINT PRIMARY KEY,<br />
prospektName CHARACTER(50) NOT NULL,<br />
prospektbeschreibung TEXT<br />
)<br />
Python – Programmierung, 27.10.10 Seite 39
SQL-Anweisung ausführen<br />
«<br />
»<br />
baseCursor.execute("""<br />
CREATE TABLE tblProspekt(<br />
idProspekt SMALLINT PRIMARY KEY,<br />
prospektName CHARACTER(50) NOT NULL,<br />
prospektbeschreibung TEXT(500))<br />
""")<br />
Python – Programmierung, 27.10.10 Seite 40
Methode „execute“<br />
<br />
<br />
Parameter in runden Klammern:<br />
Eine SQL-Anweisungen, die in <strong>der</strong> <strong>Datenbank</strong> ausgeführt<br />
werden soll.<br />
Variable Werte in <strong>der</strong> SQL-Anweisung in Tupeln.<br />
Rückgabewert:<br />
Auf wie viele Datensätze wurde die Aktion ausgeführt?<br />
Python – Programmierung, 27.10.10 Seite 41
SQL-Anweisung als Parameter<br />
«<br />
»<br />
«<br />
baseCursor.execute("""<br />
CREATE TABLE tblProspekt(<br />
idProspekt SMALLINT PRIMARY KEY,<br />
prospektName CHARACTER(50) NOT NULL,<br />
prospektbeschreibung TEXT(500))<br />
""")<br />
sqlString = "CREATE TABLE tblProspekt(<br />
sqlString = sqlString +, " idProspekt SMALLINT PRIMARY KEY, ...;“<br />
»<br />
baseCursor.execute(sqlString)<br />
Python – Programmierung, 27.10.10 Seite 42
Übergabe <strong>der</strong> SQL-Anweisung ...<br />
<br />
<br />
als konstanten Text. Der Text beginnt und endet mit drei<br />
Apostrophs, wenn dieser über mehr als eine Zeile geht.<br />
in einer Variablen. Mit Hilfe des Gleichheitszeichens wird einer<br />
Variablen eine SQL-Anweisung übergeben.<br />
Python – Programmierung, 27.10.10 Seite 43
SQL-Anweisung „Tabelle löschen“<br />
<br />
<br />
<br />
«<br />
»<br />
DROP TABLE tblDruckerei;<br />
beginnt mit dem Schlüsselwort DROP TABLE.<br />
Dem Schlüsselwort folgt <strong>der</strong> Name <strong>der</strong> zu löschenden Tabelle.<br />
Das Cursor-Objekt <strong>der</strong> Methode « .execute() » definiert die<br />
<strong>Datenbank</strong>, in <strong>der</strong> sich die zu löschende Tabelle befindet.<br />
Python – Programmierung, 27.10.10 Seite 44
Daten in eine Tabelle einfügen<br />
«<br />
»<br />
baseCursor.execute("""<br />
INSERT INTO tblProspekt<br />
VALUES(3, "Gästeverzeichnis", "")<br />
""")<br />
«<br />
»<br />
baseCursor.execute("""<br />
INSERT INTO tabellenname<br />
VALUES(argument01, argument02)<br />
""")<br />
Python – Programmierung, 27.10.10 Seite 45
SQL-Anweisung<br />
<br />
<br />
<br />
<br />
«<br />
»<br />
INSERT INTO tblProspekt VALUES(3, "Gästeverzeichnis", "")<br />
INSERT INTO startet die Aktion „Füge einen Datensatz in eine<br />
Tabellle ein.“<br />
Die Werte in <strong>der</strong> Liste werden durch Kommata getrennt.<br />
Dem Schlüsselwort folgt <strong>der</strong> Name <strong>der</strong> Tabelle, in <strong>der</strong> die<br />
Daten eingefügt werden.<br />
Mit dem Schlüsselwort VALUES beginnt eine Liste von<br />
Attributwerten, die in die Tabelle eingefügt werden sollen.<br />
Python – Programmierung, 27.10.10 Seite 46
Liste <strong>der</strong> einzufügenden Werte<br />
<br />
<br />
<br />
<br />
<br />
<br />
«<br />
»<br />
… VALUES(3, "Gästeverzeichnis", "")<br />
Mit dem Schlüsselwort VALUES beginnt eine Liste von<br />
Attributwerten, die in die Tabelle eingefügt werden sollen.<br />
Die Liste wird durch die runden Klammern begrenzt.<br />
Die Elemente <strong>der</strong> Liste werden durch Kommata getrennt.<br />
Das erste Element <strong>der</strong> Liste wird in die erste Spalte <strong>der</strong><br />
angegebenen Tabelle eingetragen und so weiter.<br />
Die Anzahl <strong>der</strong> Elemente entspricht <strong>der</strong> Anzahl <strong>der</strong> Spalten <strong>der</strong><br />
Tabelle.<br />
Mit Hilfe <strong>der</strong> zwei Anführungsstriche wird ein leeres Feld<br />
gekennzeichnet.<br />
Python – Programmierung, 27.10.10 Seite 47
Variable Werte an die Liste übergeben<br />
«<br />
sqlString = """INSERT INTO tblProspekt VALUES(?, ?,"");"""<br />
lstPlatzhalter = (5, "Wan<strong>der</strong>wege <strong>der</strong> Region")<br />
»<br />
baseCursor.execute(sqlString, lstPlatzhalter)<br />
Python – Programmierung, 27.10.10 Seite 48
Platzhalter als Werte nutzen<br />
<br />
<br />
<br />
«<br />
»<br />
sqlString = """INSERT INTO tblProspekt VALUES(?, ?,"");"""<br />
Das Fragezeichen in <strong>der</strong> Werteliste ist ein Platzhalter für einen<br />
variablen Wert.<br />
Maximal können so viele Fragezeichen angegeben werden, wie<br />
Spalten vorhanden sind.<br />
Die konstanten Werte sowie die Platzhalter werden in <strong>der</strong> Liste<br />
durch Kommata getrennt.<br />
Python – Programmierung, 27.10.10 Seite 49
Platzhalter ersetzen<br />
<br />
<br />
<br />
«<br />
»<br />
lstPlatzhalter = (5, "Wan<strong>der</strong>wege <strong>der</strong> Region")<br />
baseCursor.execute(sqlString, lstPlatzhalter)<br />
Der Methode « .exceute() » werden folgende Parameter<br />
übergeben:<br />
Die auszuführende SQL-Anweisung.<br />
Ein Tupel, Liste o<strong>der</strong> Dictonary mit den gewünschten<br />
Attributenweren.<br />
Das Tupel etc. hat so viele Elemente wie Fragezeichen in <strong>der</strong><br />
Liste VALUES vorhanden sind.<br />
Das erste Fragezeichen in <strong>der</strong> Liste VALUES() wird durch den<br />
ersten Parameter im Tupel ersetzt und so weiter.<br />
Python – Programmierung, 27.10.10 Seite 50
Mehrere Datensätze einfügen<br />
«<br />
sqlString = """INSERT INTO tblProspekt VALUES(?, ?,"");"""<br />
listDatensatz = []<br />
listDatensatz.append([10, "Wan<strong>der</strong>karte"])<br />
listDatensatz.append([11, "Stadtplan"])<br />
»<br />
for zeile in listDatensatz:<br />
baseCursor.execute(sqlString, zeile)<br />
Python – Programmierung, 27.10.10 Seite 51
Transaktion<br />
Transaktion<br />
INSERT UPDATE INSERT<br />
DELETE<br />
UPDATE<br />
« .Commit()»<br />
« .Rollback()»<br />
Python – Programmierung, 27.10.10 Seite 52
Endgültige Speicherung <strong>der</strong> Daten<br />
<br />
<br />
<br />
<br />
« connection.commit() » speichert alle Än<strong>der</strong>ungen permanent in<br />
<strong>der</strong> <strong>Datenbank</strong>.<br />
Eine Menge von SQL-Anweisungen (Transaktionen) werden<br />
abgeschlossen.<br />
Je<strong>der</strong> Nutzer <strong>der</strong> <strong>Datenbank</strong> kann die Än<strong>der</strong>ungen<br />
anschließend sehen.<br />
Die Än<strong>der</strong>ungen an den Daten <strong>der</strong> <strong>Datenbank</strong> im<br />
Arbeitsspeicher<br />
Python – Programmierung, 27.10.10 Seite 53
Transaktionen zurücksetzen<br />
<br />
<br />
<br />
<br />
Mit Hilfe des Befehl « connection.rollback() » werden<br />
durchgeführte Transaktionen zurück gesetzt.<br />
Nach dem Starten des Befehls werden alle Än<strong>der</strong>ungen an den<br />
Daten bis zum letzten « connection.commit() » rückgängig<br />
gemacht.<br />
Alle, ab dem letzten « connection.commit() » ausgeführten<br />
Transaktionen haben keine Auswirkungen auf die <strong>Datenbank</strong>.<br />
Beim Schließen <strong>der</strong> <strong>Datenbank</strong> werden alle nicht gespeicherten<br />
Transaktionen automatisch zurückgesetzt.<br />
Python – Programmierung, 27.10.10 Seite 54
Bestehende Datensätze verän<strong>der</strong>n<br />
«<br />
sqlString = """UPDATE tblKunde SET kundeStrasse = ? WHERE idKunde = ?;"""<br />
lstPara = []<br />
lstPara.append(kundeStrasse)<br />
lstPara.append(kundeID)<br />
»<br />
baseCursor.execute(sqlString, lstPara)<br />
connection.commit()<br />
Python – Programmierung, 27.10.10 Seite 55
SQL-Anweisung<br />
<br />
<br />
<br />
<br />
<br />
«<br />
»<br />
sqlString = """UPDATE tblKunde SET kundeStrasse = ? WHERE idKunde = ?;"""<br />
UPDATE startet die Aktion „Än<strong>der</strong>e Datensatz in einer Tabelle“.<br />
Dem Schlüsselwort folgt ein Tabellenname. In dieser Tabelle<br />
werden Datensätze verän<strong>der</strong>t.<br />
Dem Schlüsselwort SET folgt <strong>der</strong> Name einer Spalte in <strong>der</strong><br />
angegebenen Tabelle. Der Spaltenname beschreibt das zu<br />
än<strong>der</strong>nde Datenfeld.<br />
Mit Hilfe des Gleichheitszeichens wird dem Spaltenname <strong>der</strong><br />
neue Wert übergeben.<br />
Mit Hilfe des Schlüsselwortes WHERE können die zu än<strong>der</strong>nden<br />
Datensätze eingeschränkt werden.<br />
Python – Programmierung, 27.10.10 Seite 56
Bedingungen ...<br />
<br />
<br />
<br />
<br />
<br />
beginnen in SQL immer mit dem Schlüsselwort WHERE.<br />
sind Ausdrücke zur Definition eines Filters für Datensätze.<br />
wählen bestimmte Datensätze aus.<br />
geben ein boolsches Ergebnis zurück. Die Bedingung trifft auf<br />
einen Datensatz zu o<strong>der</strong> nicht.<br />
Verschiedenen Bedingungen können miteinan<strong>der</strong> verknüpft<br />
werden.<br />
Python – Programmierung, 27.10.10 Seite 57
Auswahlabfragen<br />
<br />
<br />
<br />
beginnen immer mit dem Schlüsselwort SELECT.<br />
liefern Daten aus einer Tabelle, eventuell in Abhängigkeit von<br />
bestimmten Kriterien.<br />
beantworten Fragen in <strong>der</strong> Form:<br />
Welcher Lieferant liefert welche Produkte?<br />
Welche Artikel sind lieferbar?<br />
Welche Kunden wohnen in Ort xyz?<br />
Python – Programmierung, 27.10.10 Seite 58
Beispiel<br />
«<br />
»<br />
baseCursor.execute("""<br />
""")<br />
SELECT *<br />
FROM tblKunde<br />
Python – Programmierung, 27.10.10 Seite 59
Alle Spalten einer Tabelle anzeigen<br />
<br />
<br />
<br />
«<br />
»<br />
SELECT * FROM tblKunde;<br />
Wähle (SELECT) alle Fel<strong>der</strong> aus (FROM) <strong>der</strong> Tabelle … aus.<br />
Dem Befehl SELECT folgt das Sternchen. Das Sternchen steht<br />
für alle Spalten in <strong>der</strong> angegebenen Tabelle. Die Tabelle wird<br />
vollständig angezeigt.<br />
Dem Schlüsselwort FROM folgt <strong>der</strong> Namen <strong>der</strong> Datenquelle.<br />
Woher kommen die angezeigten Daten?<br />
Python – Programmierung, 27.10.10 Seite 60
Bestimmte Tabellenspalten anzeigen<br />
<br />
<br />
<br />
«<br />
»<br />
SELECT kundeAnrede, kundeVorname, kundeNachname<br />
FROM tblKunde;<br />
Dem Befehl SELECT folgt eine Liste von Spaltennamen.<br />
Die Spaltennamen werden durch ein Kommata getrennt.<br />
Die Spalten in <strong>der</strong> Liste werden ausgewählt und können weiter<br />
verarbeitet werden.<br />
Python – Programmierung, 27.10.10 Seite 61
Daten auswählen<br />
<br />
<br />
<br />
<br />
«<br />
»<br />
SELECT *<br />
FROM tblKunde<br />
WHERE kundeWohnort = 'Hannover';<br />
Der Befehl WHERE folgen Kriterien zur Auswahl von Daten in<br />
einer Tabelle.<br />
Die Daten werden nach einem bestimmten Kriterium gefiltert.<br />
Die Daten werden in Abhängigkeit einer Bedingung<br />
ausgewählt.<br />
In diesem Beispiel werden alle Kunden aus Hannover<br />
angezeigt.<br />
Python – Programmierung, 27.10.10 Seite 62
Bedingungen ...<br />
<br />
<br />
<br />
<br />
<br />
vergleichen mit Hilfe von bestimmten Operatoren zwei Werte.<br />
liefern immer ein boolsches Ergebnis zurück.<br />
True (Wahr). Die Bedingung trifft zu.<br />
False (Falsch). Die Bedingung trifft nicht zu.<br />
Verschiedenen Bedingungen können miteinan<strong>der</strong> verknüpft<br />
werden.<br />
können für jedes Feld in einer Auswahlabfrage eingegeben<br />
werden.<br />
werden von links nach rechts abgearbeitet.<br />
Python – Programmierung, 27.10.10 Seite 63
Beispiele für Bedingungen<br />
<br />
<br />
<br />
Wenn die Bestellmenge die Höchstmenge überschreitet...<br />
… WHERE bestellmenge > maxBestellmenge<br />
Wenn <strong>der</strong> Lieferbestand die Mindestmenge unterschreitet...<br />
… WHERE lieferbestand < 10<br />
Wenn <strong>der</strong> Kunde mit Nachnamen Meier heißt...<br />
… WHERE kundeNachname = 'Meier'<br />
Python – Programmierung, 27.10.10 Seite 64
Bedingungen verknüpften<br />
<br />
<br />
«<br />
… WHERE (kundeWohnort = 'Hannover') AND (kundeAnrede = 'Dr.');<br />
… WHERE (kundeWohnort = 'Hannover') OR (kundeWohnort = 'Hildesheim');<br />
»<br />
Und-Verknüpfung (AND):<br />
Beide Bedingungen müssen zutreffen.<br />
U<strong>der</strong>-Verknüpfung (OR):<br />
Eine <strong>der</strong> beiden Bedingungen muss zutreffen.<br />
Python – Programmierung, 27.10.10 Seite 65
Auswahl im Programm weiterverarbeiten<br />
<br />
<br />
<br />
«<br />
»<br />
baseCursor.execute("""<br />
""")<br />
SELECT kundeAnrede, kundeVorname, kundeNachname<br />
FROM tblKunde;<br />
kundeInfo = baseCursor.fetchall()<br />
Mit Hilfe <strong>der</strong> Methode « .execute() » wird die SQL-Anweisung<br />
ausgeführt.<br />
Die Methode « .fetchall() » liefert die ausgewählten Datensätze<br />
als Tupel an das Programm.<br />
Das Tupel besitzt für jede Zeile ein Tupel. Jede Zeile besteht<br />
wie<strong>der</strong>um aus einem Tupel für jede Spalte.<br />
Python – Programmierung, 27.10.10 Seite 66
Erste Zeile zurückliefern<br />
<br />
<br />
«<br />
»<br />
baseCursor.execute("""<br />
""")<br />
SELECT * FROM tblKunde<br />
WHERE kundeWohnort = 'Hannover'<br />
ORDER BY idKunde;<br />
kundeHan = baseCursor.fetchone()<br />
Die Methode « .fetchone() » liefert den ersten Datensatz <strong>der</strong><br />
Auswahl als Tupel an das Programm.<br />
Mit Hilfe von ORDER BY können die Daten aufsteigend sortiert<br />
werden ORDER BY idKunde DESC sortiert Daten absteigend.<br />
Python – Programmierung, 27.10.10 Seite 67
x Zeilen zurückliefern<br />
<br />
<br />
<br />
«<br />
»<br />
baseCursor.execute("""<br />
""")<br />
SELECT * FROM tblKunde<br />
WHERE kundeWohnort = 'Hannover'<br />
ORDER BY idKunde;<br />
kundeHan = baseCursor.fetchmany(2)<br />
Die Methode « .fetchmany() » liefert eine bestimmte Anzahl von<br />
Datensätzen <strong>der</strong> Auswahl als Tupel an das Programm zurück.<br />
Die Anzahl wird <strong>der</strong> Funktion als Parameter übergeben.<br />
Beispiele für die <strong>Nutzung</strong>:<br />
Die höchsten / niedrigsten zehn Bestellsummen.<br />
Python – Programmierung, 27.10.10 Seite 68
Relationen zwischen Tabellen<br />
<br />
<br />
<br />
<br />
… sind Verbindungen zwischen zwei o<strong>der</strong> mehreren Objekten.<br />
… stellen Beziehungen zwischen Objekten dar.<br />
… werden mit Hilfe <strong>der</strong> Schlüsselwerte hergestellt.<br />
… entstehen durch die detaillierte Beschreibung eines Objekts.<br />
Python – Programmierung, 27.10.10 Seite 69
Primärschlüssel (Primary key) ...<br />
<br />
<br />
<br />
<br />
<br />
<br />
identifiziert die Datensätze einer Tabelle eindeutig.<br />
ist immer nur einmal in einer Tabelle vorhanden.<br />
muss nicht gesetzt werden.<br />
wird meist aus künstlichen Attributen erstellt.<br />
kann von einem beliebigen Datentyp sein.<br />
wird bei <strong>der</strong> Erstellung <strong>der</strong> Tabelle mit Hilfe des<br />
Schlüsselwortes PRIMARY KEY festgelegt.<br />
Python – Programmierung, 27.10.10 Seite 70
Beispiel<br />
«<br />
»<br />
baseCursor.execute("""<br />
CREATE TABLE IF NOT EXISTS tblAutor(<br />
idAutor SMALLINT PRIMARY KEY,<br />
autorNachname TEXT NOT NULL,<br />
buchVorname TEXT;<br />
""")<br />
Python – Programmierung, 27.10.10 Seite 71
… erstellt eine Mastertabelle<br />
<br />
<br />
<br />
Die Mastertabelle beschreibt ein Objekt.<br />
Eine Mastertabelle kann oberhalb einer an<strong>der</strong>en Tabelle<br />
stehen.<br />
Zur Identifizierung <strong>der</strong> Datensätze wird ein Primärschlüssel<br />
angelegt.<br />
idAutor autorNachname autorVorname<br />
Python – Programmierung, 27.10.10 Seite 72
Fremdschlüssel (Foreign key) ...<br />
<br />
<br />
<br />
<br />
<br />
wird in einer Detailtabelle genutzt.<br />
ist ein Platzhalter für Informationen aus einer an<strong>der</strong>en Tabelle.<br />
identifiziert einen Datensatz in <strong>der</strong> dazugehörigen<br />
Mastertabelle.<br />
Der Primärschlüssel in <strong>der</strong> Mastertabelle und <strong>der</strong><br />
Fremdschlüssel haben den gleichen Datentyp.<br />
können einmal, keinmal o<strong>der</strong> mehrmals in einer Detailtabelle<br />
vorkommen.<br />
Python – Programmierung, 27.10.10 Seite 73
Beispiel<br />
«<br />
»<br />
baseCursor.execute("""<br />
CREATE TABLE IF NOT EXISTS tblBuch(<br />
idBuch SMALLINT PRIMARY KEY,<br />
autor TEXT,<br />
buchtitel TEXT NOT NULL,<br />
FOREIGN KEY(autor) REFERENCES tblAutor(idAutor));<br />
""")<br />
Python – Programmierung, 27.10.10 Seite 74
Fremdschlüssel in SQL<br />
<br />
<br />
<br />
<br />
FOREIGN KEY(autor) REFERENCES tblAutor(idAutor)<br />
Der Fremdschlüssel FOREIGN KEY verweist auf die Spalte in <strong>der</strong><br />
Tabelle.<br />
In diesem Beispiel verweist <strong>der</strong> Fremdschlüssel autor auf die<br />
Spalte idAutor in <strong>der</strong> Tabelle tblAutor.<br />
Zwischen <strong>der</strong> Mastertabelle und <strong>der</strong> Detailtabelle wird eine<br />
Verbindung erstellt.<br />
Python – Programmierung, 27.10.10 Seite 75
Detailtabelle<br />
<br />
<br />
<br />
beschreibt einen bestimmten Teilaspekt eines Objekts genau.<br />
enthält Schlüsselwerte aus an<strong>der</strong>en Tabellen. Über den<br />
Fremdschlüssel wird eine Beziehung zu einer an<strong>der</strong>en Tabelle<br />
hergestellt.<br />
Die Beziehung wird häufig durch das Verb „hat“ o<strong>der</strong> „ist“ in<br />
einem Text verdeutlicht.<br />
idAutor autorNachname autorVorname<br />
hat … ein … geschrieben.<br />
idBuch autor buchtitel<br />
Python – Programmierung, 27.10.10 Seite 76
Daten aus zwei Tabellen verknüpfen<br />
<br />
<br />
«<br />
»<br />
baseCursor.execute("""<br />
""")<br />
SELECT tblAutor.autorName, tblBuch.buchtitel<br />
FROM tblBuch INNER JOIN tblAutor<br />
ON tblBuch.autor = tblAutor.IDAutor;<br />
mit Hilfe des Schlüsselwortes JOIN verknüpfen.<br />
In diesem Beispiel werden die Tabellen tblBuch mit <strong>der</strong> Tabelle<br />
tblAutor in Abhängigkeit <strong>der</strong> Schlüsselwerte verknüpft.<br />
Python – Programmierung, 27.10.10 Seite 77
Folgende Tabellen werden ...<br />
Kennung Land Kuerzel<br />
1 Schweden SE<br />
2 Dänemark Dk<br />
3 Großbritannien GB<br />
4 Deutschland D<br />
5 Polen PL<br />
Land Vorname Nachname<br />
4 Wilhelm Hauff<br />
4 Brü<strong>der</strong> Grimm<br />
2 H. C. An<strong>der</strong>sen<br />
1 Astrid Lindgren<br />
2 Halfdan Rasmussen<br />
Python – Programmierung, 27.10.10 Seite 78
mit Hilfe von Inner Join verknüpfen<br />
Land<br />
Deutschland<br />
Deutschland<br />
Dänemark<br />
Schweden<br />
Dänemark<br />
Autor<br />
Hauff<br />
Brü<strong>der</strong> Grimm<br />
An<strong>der</strong>sen<br />
Lindgren<br />
Rasmussen<br />
<br />
<br />
Falls ein Schlüsselwert aus <strong>der</strong> Mastertabelle in <strong>der</strong><br />
Detailtabelle existiert, werden die Datensätze verknüpft und im<br />
temporären Ergebnis angezeigt.<br />
Die Datensätze aus <strong>der</strong> linken und rechten Tabelle werden nur<br />
zusammengesetzt, wenn alle Kriterien erfüllt sind.<br />
Python – Programmierung, 27.10.10 Seite 79
… und in SQL<br />
«<br />
<br />
<br />
<br />
<br />
<br />
»<br />
SELECT tblAutor.autorName, tblBuch.buchtitel<br />
FROM tblBuch INNER JOIN tblAutor<br />
ON tblBuch.autor = tblAutor.IDAutor;<br />
Dem Befehl « FROM » folgt die linke Tabelle.<br />
Dem Befehl « INNER JOIN » folgt die rechte Tabelle.<br />
Die Tabelle tblBuch hat eine Relation zur Tabelle tblAutor.<br />
Dem Befehl « ON » folgt eine Bedingung. Der Fremdschlüssel<br />
tblBuch.autor muss gleich dem Wert in <strong>der</strong> Spalte tblAutor.IDAutor<br />
sein.<br />
Python – Programmierung, 27.10.10 Seite 80
Linksseitige Verknüpfung<br />
Land Autor<br />
Schweden Lindgren<br />
Dänemark An<strong>der</strong>sen<br />
Dänemark Rasmussen<br />
Großbritannien Lindgren<br />
Deutschland Hauff<br />
Deutschland Brü<strong>der</strong> Grimm<br />
Polen<br />
<br />
<br />
Es werden alle Datensätze<br />
aus <strong>der</strong> linken Tabelle in die<br />
Auswahl übernommen.<br />
Falls die Schlüsselwerte aus<br />
<strong>der</strong> linken Tabelle in <strong>der</strong><br />
rechten Tabelle genutzt<br />
werden, werden diese<br />
Informationen zusätzlich<br />
angezeigt.<br />
Python – Programmierung, 27.10.10 Seite 81
… und in SQL<br />
«<br />
<br />
<br />
<br />
<br />
»<br />
SELECT tblAutor.autorName, tblBuch.buchtitel<br />
FROM tblBuch LEFT JOIN tblAutor<br />
ON tblBuch.autor = tblAutor.IDAutor;<br />
Dem Befehl « FROM » folgt die linke Tabelle.<br />
Dem Befehl « LEFT JOIN » folgt die rechte Tabelle.<br />
Es werden alle Datensätze aus <strong>der</strong> links von dem Befehl<br />
stehenden Tabellen in die Auswahl übernommen.<br />
Falls ein Schlüssel aus <strong>der</strong> linken Tabelle in <strong>der</strong> rechten<br />
Tabelle vorkommt, werden diese Informationen (Details)<br />
zusätzlich eingeblendet.<br />
Python – Programmierung, 27.10.10 Seite 82
Rechtsseitige Verknüpfung<br />
Land<br />
Deutschland<br />
Deutschland<br />
Dänemark<br />
Schweden<br />
Dänemark<br />
Autor<br />
Hauff<br />
Brü<strong>der</strong> Grimm<br />
An<strong>der</strong>sen<br />
Lindgren<br />
Rasmussen<br />
<br />
<br />
Es werden alle Datensätze<br />
aus <strong>der</strong> rechten Tabelle in<br />
die Auswahl übernommen.<br />
Falls die Schlüsselwerte aus<br />
<strong>der</strong> rechten Tabelle in <strong>der</strong><br />
linken Tabelle genutzt<br />
werden, werden diese<br />
Informationen zusätzlich<br />
angezeigt.<br />
Python – Programmierung, 27.10.10 Seite 83
… und in SQL<br />
«<br />
<br />
<br />
<br />
<br />
»<br />
SELECT tblAutor.autorName, tblBuch.buchtitel<br />
FROM tblBuch RIGHT JOIN tblAutor<br />
ON tblBuch.autor = tblAutor.IDAutor;<br />
Dem Befehl « FROM » folgt die linke Tabelle.<br />
Dem Befehl « RIGHT JOIN » folgt die rechte Tabelle.<br />
Es werden alle Datensätze aus <strong>der</strong> rechten Tabelle angezeigt.<br />
Falls Datensätze aus <strong>der</strong> linken Tabelle den gleichen<br />
Schlüsselwert wie Datensätze aus <strong>der</strong> rechten Tabelle haben,<br />
werden diese Informationen zusätzlich eingebunden.<br />
Python – Programmierung, 27.10.10 Seite 84