17.06.2014 Aufrufe

Nutzung der Datenbank SQLite - RRZN

Nutzung der Datenbank SQLite - RRZN

Nutzung der Datenbank SQLite - RRZN

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!