Home
SQL – *ISBN 978-3-8273-2485-6*
Contents
1. 215 6 3 1 DELETE Grundlagen 215 6 3 2 Alle Datens tze l schen TRUNCATE 216 6 3 3 Besonderheiten des DELETE bei MS Aces nassen en a 217 6 3 4 bungen zur DELETE Anweisung 218 Datenbanken modellieren 219 7 1 Das 3 Ebenen Modell 219 7 1 1 Anforderungen an das Datenbankmodell 219 7 1 2 Die drei Ebenen des Datenbankmodells 220 7 1 3 Der Weg zum Datenbankmodell 222 7 2 Das Entity Relationship Modell ERM 224 7 2 1 Entit ten 2 e2scs20ceeseeeese 226 7 2 2 Attribute Eigenschaften 226 7 2 3 Dom nen 22eeccceeeeeeeeee 227 7 2 4 Beziehungen 2222cseeeeeenn 228 7 3 Beispiel B roFix 22c2ececseseeeenenn 232 7 4 Umsetzung in das relationale Modell 237 7 5 Sinn und Unsinn der Normalisierung 240 7 5 1 Redundanz und Anomalien 240 7 5 2 Normalisierungsziele 242 7 5 3 Funktionale Abh ngigkeit 243 7 5 4 Normalformen 222222 245 7 5 5 Grenzen der Normalisierung 246 Datenbanken erstellen SQL DDL 249 8 1 Das Datenbankschema erstellen CREATE SCHEMA 222222 aaan 249 BILL MOL ie 250 8 1 2 MS Access 222222eneeeeeeeeeennn 253 8 1 3 Oracle 222ccseeeeeeeeeeenenen 254 8 1 4 Firebird 4 20 255 8 1 5 openBase 2ec2eceeeeeeen 2
2. 343 12 7 Rechte entziehen REVOKE 344 12 8 Benutzerkonzepte verschiedener Datenbanken 345 12 8 1 Benutzerkonzept in MySQL 345 12 8 2 Benutzerkonzept in Oracle 347 12 8 3 Benutzerkonzept in Firebird 350 12 8 4 Benutzerkonzept in MS Access 352 12 8 5 Benutzerkonzept in openBase 353 12 9 VIEW als Zugriffsschutz 22 354 Kapitel 13 Transaktionen 222cccecenenn 357 13 1 Grundlagen 2222cseeeeseeeeeenennennn 357 13 2 AUTOCOMMIT 222222eseeeeeeneenenn 359 13 3 Eigenschaften einer Transaktion 360 134 Sperren suite 361 13 5 Transaktionen und Benutzervariablen 367 Kapitel 14 Mit SQL Datenbanken betreiben und optimieren 369 14 1 Optimierter Zugriff der INDEX 369 14 1 1 Nutzen von Indizes 369 14 1 2 Einen Index anlegen CREATE INDEX 370 14 2 Einen Index l schen 375 11 E 12 Inhaltsverzeichnis 14 3 Weitere berlegungen zum Einsatz von Indizes mn nee nen 375 14 4 Weitere Anweisungen zur physischen Datenspeicherung 2222222 screen 379 14 5 Prozeduren und Trigger 2222220 380 14 6 Application Program Interface 381 14 7 Abschluss 202222222eseeeeseeneee nennen 383 Anhang Benutzung der Datenbanksysteme 385 AT MySQL een 385 AZ Orales renni aE
3. gt 29223 Celle ASCII a gt n ASCIl Zeichencode des Zeichens a a muss ein ein zelnes Zeichen sein ASCIIC A gt 65 CHAR n gt a Liefert das Zeichen das zu dem angegebenen ASCII Code geh rt CHAR 65 gt A POSITION a IN a2 gt n Sucht das erste Vorkom men des Textes a im Text a2 Oft wird statt des IN auch ein normales Komma verwendet Die Zeichen werden ab 1 gez hlt POSITION C an IN Hannover gt 2 LENGTHCa gt n Gibt die Anzahl der Zei chen n im Text a an LENGTHC Hal10 gt 5 LOWER a gt a Wandelt alle Zeichen des Textes a in Kleinbuchsta ben um und gibt diesen Text aus LOWERC Name gt name SUBSTRINGCa n n2 gt a Ermittelt den Teil von a als Text der beim n ten Zei chen anf ngt und die L nge n2 hat SUBSTRING Han nover 2 4 gt anno REPLACE a a2 a3 gt a In a wird das Auftreten von a2 durch a3 ersetzt REPLACEC Tisch T F gt Fisch TRIM a gt a Entfernt aus dem Text a alle f hrenden und alle anh ngenden Leerzeichen TRIM Text gt Text Datensatzorientierte Funktionen Skalarfunktionen SQL Funktion Erl uterung Beispiel LTRIM a gt a den Leerzeichen Entfernt aus a alle f hren LTRIM Text gt Text RTRIM a gt a genden Leerzeichen Entfernt aus a alle anh n RTRIMC Text gt
4. Damit kann die neue Datenbank als neues Schema erzeugt werden Beispiel 255 W kaites Neue Datenbank neues Schema in Firebird 256 Datenbanken erstellen SQL DDL I Create Database Server Local Server Eilefs Filenamels Size Pages Options Page Size 4096 Default Character Set 1508859 _1 V Register database Alias artikel 8 1 5 openBase Die Erstellung eines neuen Schemas in openBase entspricht weitgehend der Vorgehensweise in MS Access Eine M glichkeit besteht darin nach dem Start von openBase im Startfenster direkt die Option NEUE DATENBANK ERSTELLEN zu w hlen Der Assistent f hrt dann die wenigen weiteren Schritte durch Die zweite M glichkeit besteht darin bei bereits ge ffneter Datenbank in openBase mit der Option DATEI NEU DATENBANK eine neue Datenbank zu erstellen Sie werden wiederum vom Assistenten weitergef hrt und m ssen wie oben einen Dateinamen eingeben Dieser Dateiname ist zugleich eine Datei mit der Endung odb der physische Speicherort der Datenbank und der Name der Datenbank und des Schemas Danach schlie t openBase eine andere eventuell ge ffnete Datenbank weil openBase wie MS Access immer nur eine Datenbank mit einem Schema gleichzeitig bearbeiten kann Anschlie end wird die neue noch leere Daten bank ge ffnet Tabellen erstellen CREATE TABLE 8 1 6 bungen 1 Ermitteln Sie in einem W rterbuch beispielsweise dem Duden welche Sortierung verw
5. Danach wird unterschieden ob es sich um eine rein lesende Anfrage Query oder eine den Datenbankinhalt ndernde Abfrage handelt siehe Kapitel 6 und 10 Bei ndernden Abfragen werden die im Data Dictionary hinterleg ten Integrit tsregeln gepr ft Dies kann beinhalten dass ein Lagerbestand positiv bleiben muss eine Bestellung einen Kunden haben muss oder ein Artikel sich einer bestehenden Warengruppe zuordnen l sst Diese Regeln werden bei der Erstellung der Datenbank festgelegt Damit wird hier verhin dert dass eine nderung zu einer Verletzung dieser Regeln f hrt Bei einer rein lesenden Abfrage wird gepr ft ob die Abfrage unn tig kom pliziert gestellt ist und vielleicht vereinfacht werden kann Au erdem muss in jedem Fall bei dem Zugriff des Benutzers auf ein externes Schema VIEW eine Umsetzung der verwendeten Begriffe auf das eigentliche Datenbankschema erfolgen Diese Abfragen SELECT werden in Kapitel 4 5 9 und 11 ausf hrlich angesprochen Die Struktur von SQL Anweisungen A m Die bis hierhin akzeptierte und eventuell umgeformte SQL Anweisung wird Codegenerator dann vom Codegenerator bernommen der die SQL Anweisung in eine Folge von Lese und Schreibbefehlen umsetzt die in der Datenbank ausge f hrt werden m ssen um die SQL Anweisung inhaltlich richtig umzusetzen Gleichzeitig wird hierbei durch die Wahl performanter Zugriffspfade und die Nutzung von Indizes und anderer physischer Zugriffs und
6. Kursthema Kursbeschreibung Kursdemo DauerPlan Voraussetzung Geburtsdatum tbDozent DID PID Beschaeftigungsbeginn Stundensatz Firma Titel Qualifikationen Wie Sie in Abbildung 3 1 sehen besteht die Datenbank aus f nf Tabellen Kleine Ausschnitte der Daten in den Tabellen tbPerson und tbDozent haben wir in Kapitel 2 bereits betrachtet Hier sehen Sie die kompletten Tabellen Sie erkennen dass im Datenbankschema die Datenfeldnamen vertikal in der Tabelle eingetragen sind Werden die realen Daten gezeigt wird die horizon tale Darstellung verwendet bei der die Datenfeldnamen die oberste Zeile bil den da zumeist eine ganze Reihe von Datens tzen darunter angegeben wer den sollen Die beiden Tabellen sind mit einer Linie verbunden die die Beziehung zwischen den Tabellen symbolisiert Eine Linie verbindet bei spielsweise das Prim rschl sselfeld PID der Tabelle tbPerson mit dem Fremd schl sselfeld PID der Tabelle tbDozent Dies bedeutet dass inhaltlich die Dozenten mit einer bestimmten PID den Personen mit derselben PID entspre chen Auf Details gehen wir sp ter ein Die Darstellung in Abbildung 3 1 ist MS Access entnommen hnliche Darstellungen werden aber von vielen Datenbanksystemen oder entsprechenden Hilfswerkzeugen angeboten Die Tabelle tbPerson beinhaltet die Stammdaten aller Personen die mit dem Schulungsunternehmen zu tun haben sei es als Teilnehmer oder Dozent Die Verwaltungsangestellten und
7. Tabelle Sortierung Sichtbar Funktion Kriterium tbPerson 87 W kaites 88 Die Beispieldatenbanken Das Umschalten zwischen der Design Ansicht und der SQL Ansicht funktio niert zwar theoretisch in beiden Richtungen tats chlich gibt es aber Prob leme Einerseits werden wir sp ter SQL Anweisungen verwenden die teil weise f r die Design Ansicht zu komplex sind und dort nicht dargestellt werden k nnen Andererseits wird bei der Umschaltung von der Design Ansicht in die SQL Ansicht die SQL Anweisung komplett neu generiert Das kann zu einer anderen Darstellung f hren da der Generator bestimmte Dinge rein schematisch durchf hrt Wenn Sie beispielsweise jetzt wieder auf die SQL Ansicht zur ckschalten indem Sie dieselbe Schaltfl che wieder bet tigen steht als SQL Anweisung jetzt SELECT FROM tbPerson dort Die eingef gten Anf hrungszeichen sind zwar harmlos und insofern sogar sinnvoll dass sie in jedem Fall zu einer korrekten Schreibweise des Namens ohne Umsetzung durch den SQL Interpreter f hren zeigen aber andererseits dass hier die SQL Anweisung neu generiert wurde Dies kann sp ter auch zu sehr un bersichtlichen Anweisungen f hren wenn insbeson dere Klammern in gr erer Zahl entstehen Weitere Hinweise zur Nutzung von openBase finden Sie in Anhang A Mit SQL Daten abfragen SELECT Datenbanken dienen der Verwaltung von Informationen Die wichtigste Auf gabe von SQL besteht also z
8. Unter einer Ausdrucksliste k nnen Sie sich hier zun chst eine Liste von Datenfeldern vorstellen Ausdr cke k nnen neben Feldern auch aus Berech nungen Funktionen und verschiedenen Kombinationen dieser Elemente bestehen Darauf werden wir in Kapitel 5 ausf hrlich eingehen Hier reicht es uns also uns zun chst eine Liste von Datenfeldern aus einer oder mehre ren Tabellen vorzustellen Auf Deutsch bedeutet das dann also etwa W hle die ben tigten Felder aus den Tabellen aus beachte einige Einschr nkungen bilde bei Bedarf Pakete Gruppen mit weiteren Einschr nkungen und sortiere das Ganze abschlie Bend SELECT Datensatzmenge Eine SELECT Anweisung liefert immer eine Datensatzmenge Das Ergebnis k nnen Sie sich also immer als virtuelle Tabelle vorstellen Genau wie rich tige Tabellen hat diese virtuelle Tabelle Felder als Spalten und Datens tze als Zeilen Sie sehen dass viele optionale Teile in den eckigen Klammern stehen die zun chst entfallen k nnen Trotzdem sollen die einzelnen Bestandteile der bersicht wegen hier bereits kurz erl utert werden Die geschweiften Klammern weisen auf Wiederholungsgruppen hin bein halten also Elemente die mehrfach auftreten k nnen BE Die erste Zeile mit SELECT ausdrucksliste bestimmt welche Felder der ermittelten Datens tze angezeigt werden sollen sie legt also die Spalten der Datens tze in der Ergebnismenge und somit deren Struktur fest Mit FROM we
9. Das ERM erm glicht es die konzeptionellen Entw rfe einer Datenbank auf leicht verst ndliche Art grafisch darzustellen Die zwei Grundbausteine des ERM sind die Entit ten engl entity Sache Ding und die Beziehun gen engl relationship Entit ten und seltener Beziehungen haben Attri bute engl attribute die ihre Eigenschaften beschreiben Das ERM ist also ein Modell das eine strukturierte Darstellung der Informa tionen f r einen bestimmten Zweck in grafischer Form mithilfe von Entit ten Entity Beziehungen Relationship und Attributen erlaubt Von der physischen Umsetzung der Speicherung und Verwaltung der Informationen wird abstrahiert Zur leichteren Veranschaulichung k nnen Sie sich vorstellen dass aus einer Entit t in der Datenbank eine Tabelle wird Die Beziehungen sorgen daf r dass die Tabellen miteinander verbunden werden k nnen also die Prim r schl ssel Fremdschl ssel Verbindungen definiert und f r die verschiedenen Arten des JOIN verwendet werden k nnen Das ERM ist aber noch kein logi sches Schema f r eine Datenbank kann also noch nicht direkt in MySQL Oracle MS Access oder ein anderes Datenbankmanagement eingegeben wer den Es beschreibt auch nicht was mit den Informationen gemacht wird beschreibt also keine Funktionen Programme oder Gesch ftsabl ufe Es bie tet aber die Basis f r eine sp tere Umsetzung in eine Datenbank Entity Relationship Modell Entit t Beziehung und Attr
10. Ein paar Felder mehr und dann jeweils die richtigen ver wenden m sste doch auch gehen Tats chlich hat es sogenannte Daten bankmanagementsysteme gegeben die diesen Ansatz verfolgt haben das ber hmt ber chtigste ist dBase dBase ist kein relationales Datenbanksys tem sondern eine gro e Tabelle man k nnte eigentlich auch gleich Excel nehmen was einige Anwender auch tun wie meine Erfahrungen in der Pra xis leider gezeigt haben Das grunds tzliche Problem hei t dann Redundanz also die mehrfache Abspeicherung desselben Sachverhaltes Redundanz ist speicherintensiv und fehleranf llig Mit dem Speicherplatz k nnte man bei kleinen Datenbanken noch leben und bei einigen gr eren wie im Data Warehouse Bereich ist sie zum Zweck der schnelleren Abfrage sogar gewollt aber die Fehleranf lligkeit stellt ein gro es Problem dar Sinn und Unsinn der Normalisierung E m Betrachten Sie die Beispieltabelle Bestellungen unserer B rofix Datenbank in Abbildung 7 10 Die vollst ndige Tabelle ist als Excel Tabelle unter Daten banken MSAccess Artikel unter Bestellungen_Kap7_redundant xls auf der CD enthalten Sie sehen dass die Information ber den Mitarbeiter 777 777 Olsen Edwin allein in dem kleinen Ausschnitt siebenmal auftaucht Es reicht vollkommen wenn Sie diesen Zusammenhang einmal speichern nicht siebenmal Dann gen gt die Mitarbeiternummer 777 um eine Bestellung aufzunehmen und ein JOIN holt jederzei
11. ON DELETE NO ACTIONICASCADEISET DEFAULT SET NULL Nach dem Schl sselwort FOREIGN KEY wird der Fremdschl ssel als Liste der Fremdschl sselfelder angegeben Die Fremdschl sselfelder m ssen Felder der Tabelle sein in der die Integrit tsbedingung angegeben wird ber das nachfolgende Schl sselwort REFERENCES wird der Bezug zu der anderen Tabelle angegeben in der anschlie end der Prim rschl ssel als Liste der Pri m rschl sselfelder angegeben wird Betrachten wir dazu die Tabelle der Bestellungen Beispiel CREATE TABLE bestellung Listing 8 6 mid INT NOT NULL Erstellung einer Tabelle mit bnr INT NOT NULL referenzieller Integrit t kid VARCHAR 50 NOT NULL bestelldatum DATE NOT NULL letzte_aenderung TIMESTAMP DEFAULT current_timestamp CONSTRAINT PKBEST PRIMARY KEY mid bnr kid CONSTRAINT FKBESTKUND FOREIGN KEY mid kid REFERENCES kunden mid kid ON UPDATE CASCADE ON DELETE SET NULL ber diese Anweisung wird eine Beziehung zwischen den beiden Tabellen Mastertabelle bestellung und kunden hergestellt Die Tabelle kunden enth lt den Prim r schl ssel sie wird auch als Prim rschl sseltabelle oder Mastertabelle bezeichnet 269 W kaites 270 Detailtabelle Fremdschl ssel beziehung Abbildung 8 11 Beziehung zwischen Tabellen bestellung und kunde Datenbanken erstellen SQL DDL Die Tabelle bestellung enth lt den Fremdschl ssel Sie wird als Fremd schl sseltabelle als Detailtabelle
12. amp _ Mit referentieller Integrit t Aktualisier Verkn pfungseigenschaften Beinhaltet nur die Datens tze bei denen die Inhalte der verkn pften Felder beider Tabellen gleich sind Beinhaltet ALLE Datens tze aus tbDozent und nur die Datens tze aus tbKurs bei denen die Inhalte der verkn pften Felder beider Tabellen gleich sind Beinhaltet ALLE Datens tze aus tbKurs und nur die Datens tze aus tbDozent bei denen die Inhalte der verkn pften Felder beider Tabellen gleich sind Beziehungstyp Oz Neben dem LEFT OUTER JOIN gibt es nat rlich auch die umgekehrte Variante RIGHT OUTER JOIN den RIGHT OUTER JOIN Dabei werden alle Datens tze aus der rechten Tabelle bernommen und soweit vorhanden die passenden Datens tze aus der linken Tabelle dazu kombiniert Ein OUTER JOIN l sst sich mit einem anderen OUTER JOIN oder INNER JOIN kombinieren Dabei treten allerdings in der Praxis immer Probleme auf wenn die offene Seite eines JOIN also die rechte Seite eines LEFT OUTER JOIN oder die linke Seite eines RIGHT OUTER JOIN in einem weiteren JOIN ver wendet werden soll Die Ursache ist in vielen F llen in den sogenannten NULL Werten zu suchen NULL steht dabei f r das Fehlen jeden Wertes also das was den OUTER JOIN ausmacht Als Faustregel bei der Kombination von INNER JOIN und OUTER JOIN gilt dass zun chst so viele INNER JOIN bearbeitet werden wie ben tigt nach einem OUTER JOIN sollte aber kein INNER J
13. sofern es vorkommt sonst 0 bungen bungen zu den alphanumerischen Funktionen Erstellen Sie f r die folgenden Aufgaben jeweils eine SELECT Anweisung 1 Es soll ein neuer numerischer Schl ssel f r die Kurse verwendet werden Dazu soll der ASCII Code des ersten Zeichens der KID mit einer Zufalls zahl multipliziert werden und das Ergebnis auf eine ganze Zahl gerundet werden U5 6 3 1 2 Es soll eine bersicht ber die Kurse mit der Kurskennung dem Kursthe ma der geplanten Dauer sowie Beginn und Endtermin erstellt werden Dabei sollen die Datenbankkurse zu Access auf MySQL oder ein anderes Datenbanksystem Ihrer Wahl umgestellt werden die Stundenangabe soll den Zusatz Stunden erhalten 5 6 3 2 3 F r Adresslisten soll eine Umformatierung vorgenommen werden Die Ausgabe soll in der Form Bucz Susanne29xxxCELLEMarxallee12 er folgen Erstellen Sie eine solche Liste zun chst ohne das Problem des fehlenden Vornamens zu ber cksichtigen 5 6 3 3 4 Um neue Kurse vorzubereiten sollen alle Kurs IDs umbenannt werden Die neue Kurs ID soll aus der bisherigen Ortskennung CE oder H und dem Kursbeginn bestehen 5 6 3 4 182 Datensatzorientierte Funktionen Skalarfunktionen 5 6 4 Datumsorientierte Funktionen Zun chst gibt es Funktionen um das aktuelle Datum die aktuelle Uhrzeit oder einen kompletten aktuellen Zeitstempel zu erzeugen Es wird dabei stets auf den aktuellen Rechner
14. Dieser Vorgang der Aufspaltung von Tabellen nach bestimmten Kriterien die Normalisierung kann in einem klar strukturierten Verfahren erfolgen Das Verfahren beruht auf einem simplen mathematischen Prinzip der funktiona len Abh ngigkeit 7 5 3 Funktionale Abh ngigkeit Stellen Sie sich vor Sie stehen auf einem Turm und lassen einen Stein fallen Sie sind sicher dass unten niemand steht und k nnen zu bestimmten Zeit punkten die Strecke messen die der Stein zur ckgelegt hat Sie kommen zu den Ergebnissen in der Tabelle 7 3 tin Sekunden 0 1 2 3 s in Metern 0 4 905 19 62 44 145 Die Formel dazu lautet brigens s 4 905 t Auf diesem Weg hat Galileo Galilei brigens am Schiefen Turm von Pisa die Erdbeschleunigung bestimmt die das Doppelte des oben angegebenen Wer tes 9 81 m s betr gt aber das sollten Sie dann doch lieber in einer Formel sammlung zur Physik vertiefen Wichtig f r uns ist die folgende Tatsache E E u E Normalisierungs verfahren Tabelle 7 3 Funktionale Abh ngigkeit zwischen Zeit und Weg 243 WM karitez 244 Datenbanken modellieren Wenn Sie einen Wert f r t kennen k nnen Sie den Wert f r s eindeutig bestimmen Das nennt man funktionale Abh ngigkeit Geschrieben wird die funktionale Abh ngigkeit als Pfeil gt der bedeutet daraus ergibt sich In obigem Beispiel k nnten wir also schreiben 0 gt 0 1 gt 4 905 2 3 gt 19 62 gt 44 1
15. EUR FROM tbDozent SELECT CONCAT Stundensatz EUR FROM tbDozent Listing 5 17 Casting mit CAST und mit implizitem Casting 187 WM kaites Listing 5 18 Umwandlung mit CAST und DATE MySQL Abbildung 5 15 Gleiche Ergebnisse mit CAST und typspezifischer 188 Umwandlung CONVERT Datentypen Ausdr cke und Funktionen Der SQL Interpreter erkennt dass die Funktion CONCAT als Datentypen Texte ben tigt und wandelt den Stundensatz implizit von einem Zahlwert in einen Text um Zum anderen sind aber in den Datenbanken typspezifische Funktionen vor handen die zur Umwandlung in den gew nschten Datentyp verwendet wer den k nnen und oft noch zus tzliche Optionen bieten Diese Funktionen haben typischerweise Namen wie der Zieltyp oder hnliche Namen bei spielsweise DATEO oder TO_DATEO w hrend die CAST Funktion nur teilweise umgesetzt ist SELECT Beschaeftigungsbeginn DATEDIFF CCASTC 2008 07 01 as DATE Beschaeftigungsbeginn AS mit CAST DATEDIFF DATEC 2008 07 01 Beschaeftigungsbeginn AS mit DATE FROM tbDozent Beschaeftigung mit CAST mit DATE 2003 07 01 1327 1327 2002 01 01 2373 2373 2005 09 15 1020 1020 2003 08 01 1796 1796 2001 01 01 2738 2738 In beiden Spalten wird das Literal in ein Datum umgewandelt und dann eine Differenz von Tagen bestimmt um zu ermitteln seit wie vielen Tagen ein Dozent besch ftigt ist Neben der Umwandlung von Datentypen k nnen auch innerhalb eines
16. Kunden 1 ROLLBACK SELECT s i Die neue Bestellung ist wieder verschwunden Sie war nie wirklich Bestandteil der Datenbank Sie sehen nur noch eine Bestellung des Kunden 1 FROM be tellung WHERE KID COMMIT Der Vorteil liegt hier in dem geringen Verwaltungsaufwand der Datenbank Der Nachteil ist dass Daten wie Phantome auftauchen k nnen da sie von einer anderen Transaktion zwischenzeitlich eingepflegt waren die dann aber wieder r ckg ngig gemacht wurde Damit k nnen Abfragen Ergebnisse lie fern die in gro en Mehrbenutzersystemen nie wieder nachvollziehbar oder erkl rbar sind Die n chste Isolationsstufe ist der READ COMMITED die Standardeinstellung READ COMMITTED von Oracle die bei einem SELECT nur diejenigen Daten anderer Transak tionen liest die bereits durch einen COMMIT abgeschlossen wurden Die eige nen aktualisierten Daten werden gelesen A A z Tabelle 13 2 Eigene Transaktion T1 Fremde Transaktion T2 ae u D mit der Isolationsstufe START TRANSACTION READ COMMITTED SET TRANSACTION ISOLATION LEVEL READ COMMITTED SELECT FROM bstellung WHERE KID 1 Sie sehen 1 Bestellung des Kunden 1 START TRANSACTION SELECT FROM bestellung WHERE KID 1 LOCK IN SHARE MODE 1 Datensatz des Kunden gefunden INSERT INTO bestellung VALUES 1 9999 1 CURRENT_DATE CURRENT_TIMESTAMP 365 Karite 13 366 Tabelle 13 2 Forts Transaktion mit de
17. WM karitea 108 Listing 4 21 Kombination von AND und OR Abbildung 4 16 Ergebnis der Abfrage MS Access Mit SQL Daten abfragen SELECT SELECT k KID k Zahlweise k Rabatt k GezahlterBetrag k Fehltage k KTID FROM tbKursbesuche k WHERE k KID CE23 AND k Zahlweise IN Bar berweisung AND k GezahlterBetrag NOT BETWEEN 250 AND 350 OR CCk KID CE23 AND k Zahlweise Gutschein AND k Fehltage gt 1 Die wHERE Bedingung besteht aus zwei mit OR verbundenen Teilen Ein Teil nehmer ist in der Ergebnismenge enthalten wenn er den ersten Teil ODER den zweiten Teil oder beide was hier aber logisch nicht m glich ist erf llt Beide Teile bestehen aus mehreren mit AND verbundenen Bedingungen die jeweils also alle WAHR sein m ssen damit ein Teilnehmer ber cksichtigt wird Das Ergebnis ist in Abbildung 4 16 dargestellt KID Zahlweise Rabatt GezahlterBetrag Fehltageg KTID CE23 Gutschein 0 00 350 00 2 4 CE23 berweisung 100 00 50 00 0 5 CE23 berweisung 150 00 50 00 8 37 Hier wird der BETWEEN Operator verwendet Mit BETWEEN werden aus allen Datens tzen nur diejenigen Daten ausgew hlt bei denen die Werte des Fel des GezahlterBetrag zwischen 250 und 350 liegen Die beiden Grenz werte sind eingeschlossen Zus tzlich ist dem BETWEEN ein NOT vorangestellt NOT ist ein Operator der den Wert jedes Ausdrucks negiert also gerade das umgekehrte Ergebnis lie
18. berall m glich ist oder eine Gruppierung erfordert bungen zu Unterabfragen mit ALL ANY bungen Erstellen Sie f r die folgenden Aufgaben jeweils eine SELECT Anweisung 1 1 Ermitteln Sie die KBID die KID und den gezahlten Betrag f r alle dieje nigen Kursbesucher die den maximalen Betrag bezahlt haben 09 3 1 2 2 Schr nken Sie das Ergebnis aus U9 3 1 so ein dass nur noch Kursteil nehmer des Kurses CE23 ber cksichtigt werden 9 3 2 3 3 Ermitteln Sie die KID und den durchschnittlichen von den Kursteilneh mern gezahlten Betrag von dem Kurs bei dem dieser Durchschnitt am gr ten ist 9 3 3 4 4 Ermitteln Sie die KTIG den gezahlten Betrag den Rabatt die Kursken nung und die Kursgeb hr f r den Teilnehmer der den geringsten noch zu zahlenden Betrag offener Betrag hat U9 3 4 9 4 Unterabfragen mit IN und EXISTS Zwei weitere Operatoren arbeiten ebenfalls mit mehreren Datens tzen im Ergebnis Mit IN beziehungsweise NOT IN kann ermittelt werden ob der Wert eines Datenfeldes in der Hauptabfrage einem Wert eines Datenfeldes in der Unterabfrage entspricht wenn die Unterabfrage mehrere Datens tze liefert Sollen beispielsweise alle Personen unserer Kursdatenbank ermittelt werden Beispiel IN die mindestens einen Kurs besucht haben so muss berpr ft werden ob ihre Personen Identifikation PID in der Liste der Kursteilnehmer Identifikatio nen KTIp in der Tabelle tbKursbesuche auftaucht Im fo
19. berblick erl utert werden ohne auf die Details der einzelnen Systeme umfassend eingehen zu k nnen 14 1 Optimierter Zugriff der INDEX 14 1 1 Nutzen von Indizes da m ssen wir noch einen Index drauflegen ist einer der g ngigsten S tze im Datenbankmanagement Der Index ist in vielen F llen das Allheil mittel um schlechte Zugriffszeiten auf die Datenbank zu optimieren Ein Index kann in vielen Situationen den Ablauf erheblich beschleunigen bei spielsweise E die Suche nach bestimmten Datens tzen wHERE Klausel E die Sortierung von Tabellen nach bestimmten Attributwerten ORDER BY Klausel EM die Gruppierung nach Attributen GROUP BY und HAVING Klausel die Abfrage ber mehrere Tabellen hinweg Fremdschl ssel Prim r schl ssel Beziehungen Ein Index ist immer ein Zusatz zu einer Tabelle sozusagen eine eigene zus tzliche Tabelle Dieser Index bezieht sich auf ein oder mehrere Daten felder der zugrunde liegenden Tabelle Diese Indextabellen sind kleiner und die Werte dieser Datenfelder werden f r alle Datens tze neu angeordnet 369 E arite 14 Geringerer Speicherplatz 370 Verwendung sichern Beispiel Mit SQL Datenbanken betreiben und optimieren sodass ein schnellerer Zugriff erfolgen kann Jeder Eintrag in der Indexta belle verweist dann auf den Originaldatensatz in der Originaltabelle Da im Rahmen des Index nur die Werte der Indexfelder ber cksichtigt wer den
20. f r die SOL Anweisung wird in der SQL Anweisung als FROM tbPerson wieder auftauchen Die Felder der Tabelle werden im oberen Teil ebenfalls aufgelistet Aus diesen verf gbaren Feldern werden die Felder der Abfrage ausgew hlt Diese Felder Familienname Vorname und PLZ sind im unteren Teil des Fensters wiedergegeben Aus ihnen erzeugt MS Access dann SELECT Familienname Vorname PLZ als SOL Anweisung Man sieht der grafischen Darstellung also bereits die sp ter enthaltenen Spalten an Schlie lich erfolgt noch die Auswahl der 27 WM karite Abbildung 2 4 Auswahl dreier Felder aus der Tabelle tbPerson 28 in MS Access Ergebnis Abbildung 2 5 Ergebnisdaten der SQL Anweisung SQL Grundregeln SQL der Standard relationaler Datenbanken Datens tze mit der Postleitzahl 29221 Diese Einschr nkung wird als Eintrag in die Zeile KRITERIEN eingetragen Hieraus entsteht dann in der SQL Abfrage WHERE PLZ 29221 tbPerson PID Familienname Vorname PLZ Ort Strasse Geburtsdatum lt na Feld Tabelle Sortierung Anzeigen Kriterien 29221 oder Die Oberfl che beinhaltet weitere Eingabem glichkeiten So sehen Sie dass auch eine Sortierung der Ergebnismenge vorgesehen ist Zudem scheinen weitere Kriterien eingegeben werden zu k nnen Schlie lich wird sich zei gen dass noch weitere hier noch verborgene Eingabem glichkeiten beste hen Das Ergebnis der Beschrei
21. fach keinen Vornamen F r den Ort wird mit DEFAULT Celle der Wert Celle als Standardwert f r das Feld Ort festgelegt Die Angabe von DEFAULT in der obigen INSERT Anweisung bewirkt daher dass in dem neuen Datensatz f r das Feld Ort der Wert Celle eingesetzt wird Die Umsetzung geschieht bei der Ausf hrung der INSERT Anweisung Es gilt also bei der Angabe von DEFAULT immer der Standardwert der bei der Definition der Tabelle festgelegt worden ist Ist f r ein Feld kein Standardwert angegeben wird das Feld beim Einf gen des Datensatzes mit NULL belegt Ist NULL nicht erlaubt wird der Datensatz abge wiesen Neue Datens tze einf gen ner W E O0 B Die folgende Anweisung w rde abgewiesen werden INSERT INTO tbPerson Listing 6 3 PID Familienname Vorname PLZ Ort Strasse Geburtsdatum Unerlaubte INSERT VALUES Anweisung C 51 NULL NULL 29223 DEFAULT Hauptstra e 2 1981 Erstens ist der Familienname NULL Dies ist nicht erlaubt und w rde f r sich allein schon zum Abweisen des Datensatzes f hren Zweitens ist die Angabe 1981 kein g ltiges Datum und w rde ebenfalls dazu f hren dass die Daten bank den Datensatz nicht einf gt W ren beide Fehler nicht vorhanden k nnte dann ein Problem entstehen wenn der Datensatz aus dem ersten Bei spiel bereits eingef gt worden w re In diesem Fall w rde n mlich als PID zum zweiten Mal 51 verwendet Dies ist aber der Prim rschl ssel der f r alle Date
22. mithilfe einer INSERT INTO Anweisung Sie werden immer wieder sch ne Beispiele f r die Erzeugung neuer Daten s tze und sogar ganzer Tabelleninhalte mithilfe des INSERT INTO SELECT finden Bedenken Sie jedoch dass dabei Informationen kopiert werden Dies beinhaltet immer die Gefahr der Redundanz also der mehrfachen Ablage einer Information Die Anweisung sollte daher immer sehr bewusst und mit gutem Grund genutzt werden Dies kann beispielsweise im Fall der Bereitstellung von Informationen als Backup oder f r Auswertungen durch Reporting Werkzeuge sinnvoll sein Andererseits ist hier gerade bei gro en Datenmengen ein spezielles Tool unter Umst nden sinnvoller Eine M glichkeit in Datenbanken alte Zust nde zu konservieren ist die Erzeugung von historischen Datens tzen bevor die aktuellen Datens tze ver ndert werden Sollen beispielsweise Informationen ber unseren Kurs CE23 archiviert werden weil der Kurs nach seiner Beendigung irgendwann gel scht werden soll k nnen die zu archivierenden Informationen in einer eigenen Tabelle tbKursarchiv archiviert werden In diesem Fall werden alle ben tigten teilweise redundanten Informationen in jeweils einem Daten satz zusammengefasst INSERT INTO tbKursarchiv KID Kursthema Kurskennung Kursbeginn Kursende PID Familienname Vorname archiviert SELECT tbKurs KID tbKursthema Kursthema tbKurs Kurskennung tbKurs Kursbeginn tbKurs Kursende tbPerson PID tbPerso
23. mwst_satz INT geworden Um diese Beschreibung in die Datenbank umzusetzen ben tigen wir eine neue SQL Anweisung CREATE TABLE Mit der folgenden SQL Anwei sung wird die Tabelle erzeugt Beispiel Abbildung 8 5 ERM Ausschnitt f r die Mehrwertsteuer 257 W kaites Listing 8 1 Erzeugen der Tabelle mwst 258 CREATE TABLE Felddefinition Feldname Datentyp Datenbanken erstellen SQL DDL CREATE TABLE mwst mwst_art CHARACTER 9 NOT NULL PRIMARY KEY mwst_satz SMALLINT DEFAULT O NOT NULL Damit wird eine Tabelle mwst angelegt die zwei Felder beinhaltet Das erste Feld hei t mwst_art Es kann bis zu 9 Zeichen Text speichern was f r die drei Werte voll erm ssigt oder kein ausreicht Das zweite Datenfeld mwst_satz wird mit dem Datentyp SMALLINT definiert also als kleine Ganz zahl Durch die Angabe NOT NULL werden NULL Werte verboten das Feld muss also in jedem Datensatz einen Wert beinhalten was bei einem Prim rschl s sel nat rlich sinnvoll ist NULL Werte k nnen durch die Angabe NULL erlaubt werden Als letzte Angabe hat das erste Attribut den Zusatz PRIMARY KEY erhalten wodurch es zum Prim rschl ssel der Tabelle deklariert wird Der Prim rschl ssel kann aus einem oder mehreren Feldern bestehen Jedes Feld das Teil eines Prim rschl ssels werden soll muss diesen Zusatz erhalten Damit haben wir die Modellierung aus dem ERM genau umgesetzt Die Namen sind abgek rzt und Name
24. 29223 Marsallee 12 Celle 05 02 1953 Add Field Sm C Programme FirebirdYFirebird_2_O KURSE FDB Weitere Hinweise zum Umgang mit dem Feuervogel finden Sie in Anhang A 3 7 OpenOffice orgBase Abschlie end sehen wir uns jetzt noch eine Alternative zum Einsatz von MS Access an die auch viele hnlichkeiten mit der MS Access Umgebung auf weist So steht mit der Datenbankkomponente orgBase von OpenOffice 2 2 eine weitere Datenbank zur freien Nutzung f r die hier ben tigten Beispiele zur Verf gung Die Einbindung in eine Office Umgebung und die f r viele Aufgaben unmittelbar nutzbare grafische Oberfl che sind MS Access nicht un hnlich In der Art der Ausstattung und Nutzung bei den Datentypen und auch beim SQL Dialekt gibt es allerdings auch gravierende Unterschiede So hnelt MS Access oft mehr einer Entwicklungsumgebung f r Datenbank anwendungen unter Windows und speziell unter MS Office w hrend open Office orgbase mehr hnlichkeiten mit den gro en Geschwistern MySQL oder Firebird aufweist Auch wenn dies nicht ganz korrekt ist wollen wir die Datenbank im Folgenden entsprechend der Oberfl che immer kurz als openBase bezeichnen OpenOffice orgBase openBase wurde hier als freie Alternative zu MS Access aufgenommen Es ist neben MS Access hier die einzige Datenbank die direkt mit einer grafi schen Oberfl che ausgeliefert wird und somit unmittelbar kontrollierbar ist Eine Datenbank in
25. 98 Alias in Oracle Alias in openBase Verwenden Sie das Alias f r die Tabellennamen wann immer m glich Statt SELECT tbPerson vorname tbPerson familienname tbPerson PLZ tbPerson Ort FROM tbPerson k nnen Sie auch einfach schreiben SELECT p vorname p familienname p PLZ p Ort FROM tbPerson p Das macht die Anweisung k rzer ist genauso verst ndlich und erlaubt das Alias der Tabelle sp ter auch noch an deren Stelle in der SELECT Anweisung zu nutzen Alias in Oracle Oracle verh lt sich hier standardkonform Namen werden grunds tzlich in Gro buchstaben umgesetzt sofern sie nicht in Anf hrungsstrichen stehen Alias in openBase Das Datenbankmanagementsystem openBase verh lt sich hier im Gegensatz zu MS Access weitgehend standardkonform Es erfolgt allerdings ebenfalls keine Umsetzung der Alias in Gro buchstaben was unter Windows den Erwartungen entspricht Beachten Sie dass openBase bei der Generierung von SQL Anweisungen aus der Entwurfssicht die Namen der Datenbankob jekte generell in Anf hrungszeichen setzt Au erdem gibt es manchmal Schwierigkeiten wenn Sie mehrere Alias verwenden ALL und DISTINCT Sicher ist Ihnen schon bei der SELECT Syntax am Anfang dieses Kapitels die Angabe DISTINCT ALL unmittelbar nach dem SELECT aufgefallen Zur Erin nerung die eckigen Klammern bedeuten dass es sich um optionale Angaben handelt der Inhalt also entfallen kann Der senkrechte Strich trennt ver schi
26. ADD CONSTRAINT Fkname FOREIGN KEY fremdschl sselfeld REFERENCES prim rschl sseltabelle prim rschl sselfeld aufgebaut Der Vorteil liegt darin dass bei der Reihenfolge der Tabellenerzeu gung CREATE TABLE nicht auf die Beziehungen zwischen den Tabellen geachtet werden muss weil noch keine Beziehungen erzeugt werden Die Reihenfolge der Tabellenerstellung spielt also insofern keine Rolle Folgen dann die ALTER TABLE Anweisungen als zweiter Teil der Datenbankerstellung sind bereits alle Tabellen vorhanden und es kann bei der Erstellung der Fremdschl sselbeziehungen mit der REFERENCES Klausel zu keinerlei Konflik ten wegen fehlender Tabellen kommen So k nnen auch Schleifen in den Beziehungen problemlos eingef gt werden Beispiel Beispiel Tipp 281 W kaites Syntax ALTER TABLE 282 MySQL Datenbanken erstellen SQL DDL Wie erw hnt lassen sich die nderungen einer Tabelle auch durch deren L schung mit der DROP TABLE Anweisung und der anschlie enden neuen Erzeugung in ver nderter Struktur mit einem neuen CREATE TABLE erreichen Dies f hrt allerdings zu einem Verlust der in der Tabelle gespeicherten Daten Der Datenverlust l sst sich vermeiden indem die Daten zun chst exportiert und dann die Tabelle mit einer DROP TABLE Anweisung gel scht wird Dann kann die Tabelle mit einem ge nderten CREATE TABLE neu erzeugt werden Anschlie end m ssen die Daten mit einem ge nderten INSERT wieder ein
27. Anwendungen und andere in sich mehr oder weniger geschlos sene Informationsbereiche Wir wollen jetzt die Datenbankschemata f r die bungsdatenbanken anle gen Dazu verwenden wir den Benutzer root der bei der Installation einge richtet wird Geben Sie zun chst im Fenster mit der Eingabeaufforderung folgenden Befehl ein um ein Datenbankschema kurse einzurichten mysqladmin exe uroot pmasterkey CREATE kurse Die wesentliche Syntax ist dabei wie folgt lt pfadname gt mysqladmin exe uBenutzer pPasswort CREATE DROP Datenbankschema Mit CREATE wird das Datenbankschema erzeugt wobei es noch nicht vorhan den sein darf In diesem Fall wird die Anweisung zum Schutz der in dem Schema enthaltenen Daten abgewiesen Mit DROP k nnen Sie ein Schema einschlie lich aller enthaltenen Daten l schen Die Abk rzung u steht f r User p f r Password Beachten Sie dass kein Leer zeichen oder irgendein anderes Zeichen zwischen dem u und dem eigentli chen Benutzernamen respektive zwischen dem p und dem Passwort stehen darf Alternativ k nnen Sie als Syntax user root und password Passwort ver wenden mysqladmin exe user root password masterkey CREATE kurse Schritt 2 Tabellen erstellen Nachdem das Datenbankschema eingerichtet ist kann jetzt auf das Tool mysql exe zur ckgegriffen werden das f r normale Anwender ausreichend ist Die Syntax lautet hier lt pfadname gt mysql exe uBenutzer pPasswort Datenb
28. Auf die Installation soll hier nicht eingegangen werden Sie erfolgt im Rah men der Installation des Office Paketes Eine Datenbank f r das Datenbank managementsystem MS Access besteht aus einer einfachen Datei im Win dows Dateisystem hnlich einer Word oder Excel Datei wird f r die komplette Datenbank eine Datei angelegt die die Endung mdb Microsoft Data Base erh lt Sie k nnen MS Access Datenbanken als Ganzes kopieren verschieben oder l schen indem Sie einfach die MDB Datei kopieren verschieben oder l schen Achten Sie aber vor einer solchen Aktion stets darauf dass die Datenbank nicht ge ffnet ist also kein Benutzer damit arbeitet Dies k nnen Sie leicht daran erkennen dass keine Datei mit Sperren Locks existiert Diese Datei hat denselben Namen wie die MDB Datei besitzt aber die Namenserweiterung Ick MS Access Nach dem Start von MS Access k nnen Sie zun chst eine bestehende Daten bank ffnen oder eine neue Datenbank anlegen wenn Sie DATEN FFNEN w hlen Wenn Sie von der mitgelieferten CD aus dem Verzeichnis datenban ken MSAccess kurse die Datenbankdatei Kurse2003 mdb auf Ihre Festplatte kopieren k nnen Sie schnell starten Wenn Sie die Datei direkt mit dem Windows Explorer kopieren m ssen Sie darauf achten den Schreibschutz zu entfernen bevor Sie auf die Kopie zugreifen Dies geschieht im Windows Explorer durch Anklicken mit der rechten Maustaste Auswahl der EIGEN SCHAFTEN und Entfernen des Hak
29. Befehlszeile soll hier verzichtet werden da dies den Rahmen sprengen w rde oc MO 0 Abbildung 3 32 Oracle Werkzeuggruppe A Hilfe aufrufen gt E Backup der Datenbank E Datenbank starten amp Datenbank stoppen E Datenbank zur ckschreiben E Erste Schritte A Gehe zu Datenbank Homepage G SQl Befehlszeile ausf hren Wenn Sie zu der angebotenen Datenbank Homepage gehen ffnet sich Ihr Standard Browser Die Oberfl che besteht also aus einer Browser Anwen dung Sie k nnen sich jetzt mit dem Benutzer SYSTEM und dem von Ihnen w hrend der Installation angegebenen Passwort anmelden Danach kommen Sie auf eine bersichtsseite wie sie die Abbildung 3 33 darstellt Abbildung 3 33 bersichtsfenster der 7 a Oracle Umgebung auf Qumu MAD Suchen ig Favorten amp O ih i DREA i Browser Basis 2 Oracle Microsoft Internet Explorer ENE w Datei Bearbeiten Ansicht Favoriten Extras 2 Adresse http 127 0 0 1 8080 apex f p 4500 1000 2843837046559582 v E wechseinzu Links User SYSTEM License Agreement ad o Getting Started 3 Learn more MR A l o Documentation Administration Object Browser Rilities S Forum Regletration Discussion Forum o Product Page Internet Der Bereich ADMINISTRATION dient der kompletten Speicher und Benutzer verwaltung Im OBJECT BROWSER k nnen Sie sich die Datenbankstruktur und die Inhalte berblickartig anzeigen lassen w hrend der Bereich SQL
30. E Zeitbezogene Daten Datum Uhrzeit Zeitintervalle ji Bin re Daten Daten mit eigener innerer Struktur die nicht von SQL in terpretiert werden 150 Datentypen m 5 m In Tabelle 5 1 sind die Basisdatentypen zusammengestellt die heute die Grundlage der g ngigen Datenbanken bilden und weitgehend durch den SQL Standard in seinen Entwicklungsstufen definiert sind Tabelle 5 1 Kategorie Datentyp Beschreibung Basisdatentypen alphanumerisch CHARACTER n Jede Art alphanumerischer Zeichen nn SQL entsprechend dem eingestellten Zei alenbanken chensatz Es wird Speicherplatz f r Zeichenketten der festen L nge n reserviert CHARACTER Wie CHARACTER aber es werden nur die VARYING n tats chlich verwendeten Zeichen belegt n gibt die maximale Zeichen anzahl an numerisch NUMERIC m n Dezimalzahl mit der festen L nge m und mit n Nachkommastellen beispiels weise bei finanzmathematischen Berechnungen DECIMAL m n Dezimalzahl mit variabler maximaler L nge m und mit n Nachkommastellen ansonsten wie NUMERIC INTEGER Ganze Zahl 4 Byte SMALLINT Ganze Zahl 2 Byte BIGINT Ganze Zahl 8 Byte ab SQL2003 FLOAT n Gleitkommazahl mit gegebener Genau igkeit n REAL Gleitkommazahl mit einfacher Genauig keit DOUBLE Gleitkommazahl mit doppelter Genauig PRECISION keit Datum Zeit DATE Datumsangabe normalerweise JJJJ MM TT TIME Zeitangabe normalerweise h
31. GROUP BY Klasse ORDER BY Klasse ASC Im vorliegenden Beispiel in Listing 9 21 werden also in der Tabelle tbKurs besuche die gezahlten Betr ge untersucht Es werden aus dem Bereich der Werte 0 bis 400 insgesamt 8 gleich gro e Klassen gebildet sodass jede Klasse die Breite 50 hat Es entsteht also eine virtuelle Tabelle deren Anzahl an Datens tzen genau der Anzahl in der Tabelle tbKursbesuche entspricht Diese Tabelle hat nur ein Feld mit der Klassennummer je Datensatz Diese Tabelle wird dann in der Hauptabfrage gruppiert und f r jede Gruppe wird die Anzahl der Datens tze ermittelt Das Ergebnis ist in Abbildung 9 9 darge stellt Unterabfragen mit MS Access u 9 m Abbildung 9 9 KLASSE Ab Bis Unter Anzahl Kursbesuche Unterabfrage mit 1 0 50 2 WIDTH_BUCKET 2 50 100 3 3 100 150 1 6 250 300 5 F 300 350 2 8 350 400 5 Die Funktion ist zum jetzigen Zeitpunkt zun chst in Oracle verf gbar soll aber auch in den anderen Systemen in einer der n chsten Versionen imple mentiert werden bungen zu erweiterten Unterabfragen bungen Erstellen Sie f r die folgenden Aufgaben jeweils eine SELECT Anweisung 1 Ermitteln Sie als Vorbereitung noch ohne Unterabfrage zun chst f r alle Artikel die Artikelnummer die Artikelbezeichnung den Listenpreis als Nettopreis und einen Bruttopreis mit Aufschlag des Mehrwertsteuer satzes Runden Sie den Bruttopreis auf zwei Nachkommastellen 09 7 1 2 Ermitteln Sie mithilfe de
32. Gutschein CE17 Gutschein CE17 berweisung KID CE23 und CE23 Bar Zahlweise Bar CE23 Bar KID CE23 und CE23 Gutschein CE23 Gutschein CE23 Gutschein CE23 berweisung CE23 berweisung CE23 berweisung CE24 Bar CE24 Bar CE24 Gutschein CE24 Gutschein CE24 berweisung H90 Gutschein H90 berweisung KID CE23 und Zahlweise berweis KID CE24 KID H90 137 S Kapitel 4 Abbildung 4 39 Ergebnis bei zweifacher Gruppierung Virtueller Datensatz Wert des Gruppierungs 138 feldes Aggregatfunktion Mit SQL Daten abfragen SELECT Entsprechend k nnen jetzt die Datens tze in den einzelnen Gruppen mit COUNTC gez hlt werden und Sie erhalten das Ergebnis in Abbildung 4 39 Wollen Sie beispielsweise die Werte f r den Kurs CE23 verifizieren so k n nen Sie leicht nachz hlen dass es sich um zwei drei und noch einmal drei Datens tze handelt Gutschein berweisung Bar Gutschein berweisung Bar Gutschein berweisung Gutschein berweisung ao N www ND N In einer SELECT Anweisung mit Gruppenbildung wird jeweils aus allen tat s chlichen Datens tzen einer Gruppe ein virtueller Gruppendatensatz gebil det Dieser Gruppendatensatz enth lt alle Felder die in der SELECT Anwei sung vorgegeben sind F r die Ausgabe muss daher f r jedes Feld aus allen Werten des Feldes in allen Datens tzen der Gruppe genau ein Wert ermittelt werden Mehr als ein Wert je Feld ist auch
33. Identifizierungsschl ssel genannt Ein Prim rschl ssel Primary key ist ein Feld mit dessen Wert jeder Daten satz in einer Tabelle eindeutig identifizierbar ist F r jeden Prim rschl ssel in einer Datenbank muss stets gelten dass E cr eindeutig jeden Datensatz in der Datenbank identifiziert E cr sofort bei der Anlage eines Datensatzes vergeben wird E er sich w hrend der Existenz des Datensatzes niemals ndern darf oder bestimmte besondere Regeln beachtet werden m ssen Prim rschl ssel k nnen f r den Anwender erkennbare und interpretierbare Informationen enthalten beispielsweise Anfangsbuchstaben von Kunden Unterscheidungen von privaten und gesch ftlichen Kunden Gesch ftsstel len und andere Angaben die Mitarbeitern weiterhelfen Man spricht in die sen F llen von sprechenden Schl sseln Dies ist aber f r die Datenbank nicht zwingend notwendig da die Nummern im Wesentlichen der automatischen Suche in der Datenbank dienen Oft existieren auch sprechende Schl ssel neben den in der Datenbank verwendeten Prim rschl sseln die f r die Anwender dann nie sichtbar werden Manchmal ergibt sich der f r eine Tabelle sinnvolle Prim rschl ssel auf nat rliche Weise beispielsweise die Fahrgestellnummer f r die Identifizie rung eines Autos die EAN Europ ische Artikelnummer als Prim rschl ssel der Artikel aus dem Sortiment eines Handelsunternehmens oder die Bestim mung der Lage eines Ortes mithilfe seines L
34. Ihre Eingaben k nnen Sie mit GSEC gt display berpr fen Um das L schen eines Benutzers zu demonstrieren wird noch ein zweiter Benutzer angelegt und wieder gel scht GSEC gt add meier2 pw hase fname Horst Iname Meier GSEC gt delete meier2 Sie verlassen das Tool wieder mit GSEC gt quit Das Tool arbeitet nur auf der Sicherheitsdatenbank Diese dient der Identifi kation und Authentifikation der Benutzer Firebird verwendet diese Daten bank sozusagen als Eingangskontrolle Sie k nnen die Benutzer auch ber die Oberfl che mit SERVER USER SECU RITY pflegen was aber wenig bersichtlich ist oder aber einfach ber die Oberfl che mit dem Symbol Users im linken Fenster ganz unten Ist der Benutzer einmal identifiziert k nnen die mit SQL Anweisungen bearbeiteten Rollen f r die Zuordnung der Berechtigungen verwendet wer den So kann f r die Vertriebsgruppe eine Rolle vertrieb angelegt werden und der Rolle k nnen Rechte zugewiesen werden Weiter k nnen mit GRANT auch die Benutzer der Rolle zugeordnet werden siehe Listing 12 6 CREATE ROLE vertrieb Listing 12 6 GRANT ALL ON tbPerson TO vertrieb Beispiel f r den Umgang GRANT vertrieb TO meier mit Rollen in Firebird REVOKE SELECT ON tbKurs FROM vertrieb DROP ROLE vertrieb Die Rollen lassen sich auch ber die Datenbankobjekte anzeigen siehe Abbildung 12 5 Wie bereits im Beispiel zu sehen ist werden auch in Firebird die Rechte mit der REVOKE Anwei
35. Ihre Kunden interessiert der Rest der Datenbank ist f r Sie uninteressant Dies ist eine typische Situation wenn verschiedene Personen oder verschie dene Abteilungen dieselbe Datenbank nutzen also das Normalste der Welt in jedem Unternehmen Dann muss jeder SQL Befehl mit dem Sie auf die Datenbank zugreifen stets alle Informationen ausfiltern die Sie nicht ben tigen also immer und immer wieder In unserer Artikeldatenbank k nnte dies der Fall sein wenn Sie f r eines der Unternehmen arbeiten also f r einen Mandanten Dann m ssen Sie in allen Abfragen immer wieder die Mandantennummer verwenden um sicherzustellen dass Sie nur die Kunden Ihres Unternehmens sehen Und vielleicht m chte Ihr Chef das ja auch sicherstellen Besser w re es in diesen F llen diese Sicht auf die Daten einmalig zu defi nieren und dann immer wieder darauf zur ckzugreifen Sie ben tigen in solchen F llen entsprechend der Idee des 3 Ebenen Modells ein externes Schema also eine Datensicht auf die Datenbank SQL bietet die M glichkeit solche Sichten zu definieren Sichten hei en in SQL VIEW Ein VIEw stellt eine Sicht auf die Tabellen einer Datenbank dar Er wird hnlich wie eine TABLE einmalig definiert und kann dann in vielen SOQL Befehlen insbesondere in SELECT DELETE UPDATE und INSERT verwendet werden Der VIEW filtert die Daten wie Sie sie ben tigen und kann von Ihnen statt der Originaltabellen als Datenquelle verwendet werden
36. Im Regelfall arbeiten aber mehrere Benutzer gleich zeitig auf einer Datenbank deren Aktionen sich gegenseitig beeinflussen k nnten Es muss dann sichergestellt werden dass die Befehlsfolge Ihrer SQL Anweisung nicht durch die Folgen anderer Benutzer mittendrin beeinflusst wird oder Sie die Anweisung anderer Benutzer beeinflussen Die L sung f r derartige Probleme bietet der Transaktionsmanager der eine SQL Anweisung als Transaktion ausf hren kann also eine in sich geschlos sene Einheit von Befehlen die garantiert entweder vollst ndig oder ber haupt nicht ausgef hrt wird In einem Logbuch werden alle Folgen der Transaktion protokolliert und zwischengespeichert Tritt in der Befehls folge ein nicht behebbares Problem auf das einen erfolgreichen Abschluss der Transaktion verhindert wird mithilfe des Recoverymanagers das Log buch genutzt um alle Folgen der Transaktion zur ckzunehmen und den Zustand vor Beginn der Transaktion wiederherzustellen Transaktionsmanager 357 E Karite 13 Beispiel START TRANSACTION 358 COMMIT Beispiel Transaktionen Das Problem kann sich innerhalb einer SQL Anweisung aber auch ber mehrere SQL Anweisungen hinweg erstrecken in dem Sinn dass nur die Ausf hrung aller SQL Anweisungen zusammen wieder einen sinnvollen Zustand herstellt Stellen Sie sich vor wir wollen eine neue Bestellung ein tragen aber sicherstellen dass sie nur eingetragen wird wenn der Kunde ei
37. Listing 9 13 Alle Teilnehmer die NICHT 308 den kleinsten Betrag bezahlt haben Unterabfragen Sub SELECT SELECT p Familienname p Vorname kb GezahlterBetrag kb KID FROM tbPerson p INNER JOIN tbKursbesuche kb ON p PID kb KTID WHERE kb GezahlterBetrag gt ALL CSELECT kb2 GezahlterBetrag FROM tbKursbesuche kb2 WHERE kb2 KID CE23 I Das Ergebnis ist in Abbildung 9 5 dargestellt Familienname Vorname GezahlterBetrag KID Kama Thomas 350 CE23 M ller Claudia 350 CE23 Schulze Tania 350 CE23 Ruppert Nicola 350 CE23 Lisewski Bemd 350 CE24 Die Aussage der Abfrage war etwa Ermittle diejenigen Teilnehmer die mindestens so viel Beitrag bezahlt haben wie ALLE anderen aber auch er selbst Teilnehmer des Kurses CE23 Das bedeutet dass das Maximum des von den Teilnehmern des Kurses CE23 bezahlten Betrags ermittelt werden muss und anschlie end damit verglichen wird Somit kann derselbe Effekt auch mit folgender SQL Anweisung erzielt werden SELECT p Familienname p Vorname kb GezahlterBetrag kb KID FROM tbPerson p INNER JOIN tbKursbesuche kb ON p PID kb KTID WHERE kb GezahlterBetrag gt SELECT MAXCkb2 GezahlterBetrag FROM tbKursbesuche kb2 WHERE kb2 KID CE23 I Eng verwandt mit dem ALL Operator ist der ANY Operator Mit ANY bersetzt irgendein werden alle Datens tze ausgew hlt deren Wert im Vergleichs feld gr er oder kleiner als irgendein Datensatz der Unterabfrage is
38. MANDS ENTER COMMAND ausw hlen Danach k nnen Sie im oberen Fenster beispielsweise SELECT FROM tbPerson eingeben und anschlie end die Schaltfl che Run verwenden Im unteren Bereich erscheint dann das Ergebnis 3 6 Firebird Firebird ist der Nachfolger und die Weiterentwicklung des Borland Daten bankmanagementsystems Interbase Es handelt sich wiederum um eine f r Testzwecke frei nutzbare Datenbank die dank der Vorarbeiten in Interbase eine erstaunliche St rke und Robustheit f r den produktiven Einsatz auf weist Die geringe Verbreitung ist sicher in erster Linie auf ihre Herkunft aus dem Haus Borland jetzt CodeGear Embarcadero zur ckzuf hren Der Ruf von Borland ist der eines hervorragenden Lieferanten von Softwareentwick lungsumgebungen wie Delphi C Builder und inzwischen einer Reihe von Firebird Umgebungen f r die Internetprogrammierung aber eben nicht der eines Datenbankherstellers Das Schattendasein des Systems ist daher eher auf die fehlende Positionierung im Markt als auf technische Schw chen zur ckzu f hren Das System wurde hier trotz der vergleichsweise geringen Verbreitung auch aufgenommen da es gerade f r Programmierer von Anwendungen mit einer embedded Database eine interessante Alternative bietet Firebird bietet einen vergleichsweise geringen Funktionsumfang der sich aber mithilfe soge nannter User Defined Functions UDF schnell erweitern l sst Das System ist sehr schlank und stabil Es i
39. Meier Kathrin 8 Schlachter Dieter 17 Cromberg J rg 26 Klever Klaus 39 In diesem Zusammenhang spricht man auch von korrelierten Unterabfragen worauf im n chsten Abschnitt eingegangen wird bungen zu Unterabfragen mit IN EXISTS Beispiel EXISTS Listing 9 16 Kursthemen zu denen mindestens ein Kurs existiert Abbildung 9 7 Alle Kursthemen zu denen mindestens ein Kurs existiert Listing 9 17 Personen die noch an keinem Kurs teilgenommen haben Abbildung 9 8 Alle Personen die nie einen Kurs besucht haben 311 W kaites bungen Korrelierte Unterabfragen Listing 9 18 Hauptabfrage und Unterabfrage sind ber das Feld p PID korreliert 312 Synchronisierte Unterabfragen Listing 9 19 Synchronisierte Unterabfrage Unterabfragen Sub SELECT Erstellen Sie f r die folgenden Aufgaben jeweils eine SELECT Anweisung 1 Ermitteln Sie die Artikelnummer und die Artikelbezeichnung aller Arti kel f r die noch keine Bestellposition vorliegt die also noch nicht be stellt wurden 9 4 1 2 Ermitteln Sie die Bestellnummer und das Bestelldatum aller Bestellun gen die einen Artikel der Warengruppe 9 beinhalten 9 4 2 3 Erweitern Sie Ihre Abfrage aus 09 4 2 so dass f r die ermittelten Bestel lungen zus tzlich die Anzahl der Bestellpositionen der Warengruppe 9 ermittelt wird U9 4 3 4 Ermitteln Sie den Nachnamen und den Vornamen der Personen in der Kundentabelle f r die keine Bestellu
40. Mit SQL Daten abfragen SELECT Jede einzelne Bedingung hat das Format feldname Operator ausdruck Die zugelassenen Operatoren die auch als Pr dikate bezeichnet werden sind der Tabelle 4 1 zu entnehmen Operator Bedeutung Beispiel Pr ft auf Gleichheit bei Ort Celle MySQL auch lt gt l lt gt Pr ft auf Ungleichheit Ort Celle lt gt wird nicht von allen RDBMS unterst tzt DB2 nur lt gt Ort lt gt Celle Pr ft auf kleiner als Stundensatz lt 15 PLZ lt 30000 Pr ft auf kleiner oder Gleich heit Stundensatz lt 15 Pr ft auf gr er als Pr ft auf gr er oder Gleich heit Stundensatz gt 15 PLZ gt 28999 Stundensatz gt 15 PLZ gt 29000 IS NOT NULL Pr ft auf das Fehlen eines Wertes NULL Wert Dies ist nicht gleichwertig mit oder 0 oder hnlichen Abfragen denn in diesen F l len wird mit Werten vergli chen Die Antwort auf IS NULL ist f r jeden von NULL verschie denen Wert falsch also auch beispielsweise f r 0 oder ein leeres Feld Vorname IS NULL Geburtsdatum IS NOT NULL NOT LIKE Fragt nach Mustern mithilfe von Platzhaltern _ bzw und siehe unten ab Damit lassen sich beispiels weise Felder finden die einen bestimmten Text enthalten mit diesem beginnen oder enden PLZ LIKE 29 Name _eiss Vorname Ka__ NOT BETWEEN Pr ft
41. Mit der Option PRIMARY KEY wird ein Feld zum Prim rschl sselfeld der Tabelle Damit muss jeder Wert dieses Feldes in der gesamten Tabelle eindeu tig sein kein Datensatz darf denselben Wert wie ein anderer Datensatz haben Im vorherigen Kapitel haben wir im Zusammenhang mit den Alternativ schl sseln gesehen dass es neben dem eigentlichen Prim rschl ssel auch weitere Schl sselkandidaten geben kann Sind diese nicht im Rahmen der Normalisierung entfernt worden k nnen die entsprechenden Felder mit der Option UNIQUE ebenfalls als eindeutig definiert werden Das Datenbankma nagementsystem wird diese Eindeutigkeit dann bei jedem neuen INSERT oder ge nderten UPDATE Datensatz berpr fen UNIQUE Ein Prim rschl ssel erfordert eindeutige Werte in allen Datens tzen einer Tabelle Damit kann durch Angabe der Werte des oder der Prim rschl ssel felder jeder Datensatz einer Tabelle eindeutig identifiziert werden Neben dem Prim rschl ssel k nnen auch die Angaben in weiteren Feldern ber eine gesamte Tabelle eindeutig sein Es handelt sich um die Schl ssel kandidaten Soll diese Eindeutigkeit ebenfalls sichergestellt werden kann eine UNIQUE Bedingung mit derselben Syntax wie der PRIMARY KEY mit dem Schl sselwort UNIQUE definiert werden Wir wollen als weiteres Beispiel die Kundentabelle anlegen Dazu nutzen wir folgende SQL Anweisung CREATE TABLE kunden mid INT NOT NULL kid VARCHAR 50 NOT NULL firma VARCHAR 59 U
42. MySQL im Linux Umfeld umschaltbar und noch deutlicher openBase auch im Win dows Umfeld zeigen dies bei unseren Beispielsystemen Bei MS Access fin den wir ein Windows typisches Verhalten ohne besondere Beachtung von Gro und Kleinschreibung Beachtet Sie dies k nnen Sie also mit obigen Hinweisen und etwas gutem Willen Namen verwenden die wenig Probleme bereiten Trotzdem findet man gerade im Umfeld von MS Access openBase oder anwendernahen Ent wicklungen immer wieder kunstvolle Namen mit Leerzeichen oder Sonder zeichen Sind sie erst einmal in der Datenbank vorhanden ist es oft schwer sie wieder zu ndern Soll eine Datenbank l ngerfristig Anwendung finden versuchen Sie trotzdem zun chst diese Namen zu ndern Ist dies nicht m g lich weil es zu aufwendig ist so hilft bei SOL Anweisungen die Verwendung Keine Sonderzeichen in Datenbanknamen Regeln f r die Namensvergabe CamelCase Schreibweise Alias f r die Programmierung 95 WM karitea Listing 4 8 Umsetzung in einen IT konformen Namen Alias in MS Access Abbildung 4 5 Ergebnis in MS Access bei 96 SQL standardkonformer Alias Angabe Mit SQL Daten abfragen SELECT der Alias Schreibweise auch in umgekehrter Richtung weiter und sollte kon sequent in jeder Anweisung verwendet werden bevor die Ergebnisse weiter verarbeitet werden Hei t beispielsweise das Feld in einer Tabelle tbMitar beiter tats chlich Stundensatz in Euro so behelfe
43. PT tbkurs T tbkursbesuche T tbkursthema P tbperson i mysql gt E test 17 Q Ergebnismenge 1 Field Type Null Key Default Extra KID char 10 NO PRI Kurskennung char 50 NO KTHID int 11 NO KursdauerStunden int 11 YES pato Kursbeginn date YES oa Kursende date YES Du Zertifikat char 50 YES ma Gebuehr float YES mE Ustpflichtig charl1 YES ma DID int 11 YES ma Sie haben vielleicht im unteren rechten Teil bereits ein kleines Fenster ent deckt Dort erhalten Sie Hilfe zu verschiedenen SQL Aspekten Diese Hilfe ist sinnvoll wenn Sie die grunds tzlichen Befehle und die Struktur von SQL verstanden haben Sie k nnen dann leicht die diversen spezifischen Parame ter und Optionen einer SQL Anweisung nachschlagen ffnen Sie beispiels weise MYSQL UTILITY STATEMENTS so finden Sie hier neben dem bereits bekannten USE zur Auswahl eines Datenbankschemas auch die SQL Anwei sung DESCRIBE In der Hilfe zu DESCRIBE erfahren Sie dass Sie auch die Abk rzung DESC verwenden sowie gezielt einzelne Spalten columns aus w hlen k nnen beispielsweise mit DESC tbPerson Ort MySQL Schritt 3 Daten importieren Nach der Erzeugung der Tabellenstruktur werden jetzt in einem dritten Schritt die eigentlichen Daten importiert Daf r wird wieder mysql exe mit identischer Syntax verwendet Um gleich eine weitere Tabelle kennenzulernen sollen zun chst Daten in die Tabelle tbKurs geladen werden Pr fen Sie zun c
44. Q x a A JO Suchen 57 Favoriten amp B 2 wj m Fol 3 Adresse http 127 0 0 1 8080 apex f p 4500 1003 2398896960047551 NO 1008 v EJ wechseinzu Links ORACLE Database Express Edition User KURSE Home gt SQL gt SOL Commands Vl Autocommit Display 20 DESCRIBE tbPerson Results Explain Describe Saved SOL History Object Type TABLE Object TBPERSON Table Column Data Type Length Precision Scale Primary Key Hullable Default Comment TBPERSON ID Number 0 1 Varchar2 Varchar2 Char WVarchar2 Varchar2 GEBURTSDATUM Date Application Express 2 1 0 00 39 4 gt Internet 393 5j Anhang A 394 Abbildung A 17 Eingabe von SQL Anweisungen Anhang Benutzung der Datenbanksysteme A 3 Firebird Firebird ist als Datenbank konzipiert die haupts chlich in andere Anwen dungsprogramme integriert wird Die hier verwendete Oberfl che ist also eher untypisch f r Firebird Firebird ist aus dem System Interbase entstan den das urspr nglich die Firma Borland die sp ter eine Zeitlang Inprise hie entwickelt hat Heute werden diese Systeme alle von CodeGear betreut dass zu Embarcadero geh rt Entsprechende Informationen finden Sie dort Im Internet bietet www firebirdsql org Informationen zu dem freien Firebird In den meisten F llen k nnen Sie auch gut auf die Interbase Dokumenta tionen zur ckgreifen Die Abbildung A 17 zeigt die Eingabeoberfl che die Sie aus de
45. SELECT k kurskennung k ustpflichtig k Gebuehr AS Gebuehr k Gebuehr 0 19 AS Umsatzsteuer k Gebuehr 1 19 AS Geb hr brutto FROM tbKurs k WHERE k ustpflichtig J Das Ergebnis ist in Abbildung 5 9 dargestellt KURSKENNUNG USTPFLICHTIG Gebuehr Umsatzsteuer Geb hr Brutto Celle17 Word J 280 53 2 333 2 Celle20 Word J 280 53 2 333 2 Hannover90 Windows J 120 22 8 142 8 Hannover91 Windows J 120 22 8 142 8 4 rows returned in 0 08 seconds CSV Export Hier ist zun chst die Grundrechenart zum Multiplizieren verwendet wor den Entsprechend funktionieren die anderen Grundrechenarten sodass und immer als Operatoren f r numerische Angaben zur Verf gung ste hen Beachten Sie dass das und das Zeichen zwei Aufgaben ber nehmen Sie k nnen un re Operatoren Vorzeichen sein also 2 oder 3 Sie k nnen auch bin re Operatoren im Sinne der normalen Grundrechenarten also 5 3 oder 5 7 sein Gl cklicherweise unterscheidet SQL hier nicht Zus tzlich werden oft noch Operatoren f r die ganzzahlige Division DIV sowie f r die Berechnung des Restes angeboten MOD oder Datensatzorientierte Funktionen Skalarfunktionen Sie k nnen in den meisten Systemen eine SELECT Anweisung auch als reine Rechenoperation nutzen beispielsweise SELECT 5 7 was dann eine Spalte mit der berschrift 5 7 und eine Zeile mit dem Wert 2 liefert Sie k nnen SELECT also auch als recht umst ndlichen Tas
46. Sollen beispielsweise die Artikel in Ihrer Tabelle wegen der Einf hrung der EAN Nummern der sogenannten europ ischen Artikelnummern zus tzlich diese Nummern erhalten ben tigen Sie ein neues Feld f r die EAN Nummer Jetzt k nnten Sie die Tabelle nat rlich l schen und sofort wieder neu anle gen Dabei gehen leider alle Daten verloren Diese m ssten Sie also vorher sichern dann die Tabelle l schen die Struktur neu anlegen und die Daten wieder laden Das ist machbar aber aufwendig Stattdessen k nnen Sie auch eine ALTER TABLE Anweisung verwenden ALTER TABLE artikel ADD ean VARCHAR 13 NULL Die ALTER TABLE Anweisung f gt ein neues Feld an die vorhandene Tabelle artikel an hier das Feld ean Die Angaben f r die Felddefinition entspre chen den Angaben des CREATE TABLE Die neue Spalte enth lt nat rlich noch keine Werte daf r fehlt dann noch ein UPDATE Die ALTER TABLE Anweisung stellt eine elegante Art dar nachtr glich Tabelleninformationen zu ndern Dabei k nnen Sie E Felder anf gen Felder ndern Felder l schen Integrit tsbedingungen anlegen Integrit tsbedingungen l schen Tats chlich ist es nicht un blich die gesamten Fremdschl ssel nicht mit CRE ATE TABLE zu erzeugen sondern zun chst alle Tabellen einzeln und ohne Beziehungen zueinander also ohne REFERENCES Klausel zu erzeugen Anschlie end werden die Beziehungen durch ALTER TABLE Anweisungen in der Form ALTER TABLE fremdschl sseltabelle
47. Spinaci Christian 8 2 2 Fremdschl sselbeziehungen Die CREATE TABLE Anweisung beinhaltet in den Felddefinitionen der einzel nen Felder die zum Aufbau der Tabelle notwendigen Informationen Eine besondere Rolle spielen dabei die Fremdschl sselattribute die die Beziehun gen des Entity Relationship Modells in Beziehungen zwischen den Tabellen umsetzen Das folgende Beispiel zeigt die Erstellung der Tabelle artikel mit dem gleichzeitigen Aufbau von Beziehungen zu den Tabellen warengruppe und mwst Mehrwertsteuersatz Schauen wir uns dazu zun chst die Situation der Entit t Artikel mit ihren Attributen und Beziehungen im ERM an Abbil dung 8 7 1 Warengruppe Artikel Mehrwertsteuer Einstandspreis Mindestbestand Lieferantennr Die Umsetzung in eine SQL CREATE Anweisung ist jetzt etwas komplexer als bisher Es sind nicht nur die Attribute zu ber cksichtigen sondern auch die Beziehungen zu den anderen Entit ten Warengruppe und Mehrwertsteuer Beim CREATE TABLE sind diese Beziehungen umzusetzen um die Daten aus den Tabellen f r die Artikel Mehrwertsteuer und Warengruppe zusammen h ngend bearbeiten zu k nnen Die SQL Anweisung dazu ist in Listing 8 4 dargestellt CREATE TABLE artikel anr int NOT NULL PRIMARY KEY bezeichnung VARCHAR 255 NOT NULL gebinde FLOAT einheit VARCHAR 30 wgknz INT DEFAULT O NOT NULL REFERENCES warengruppe kennziffer Abbildung 8 6 Tabelle zu
48. Text UPPER a gt a Wandelt den Text a in UPPER name Gro buchstaben um gt NAME ANSI MySQL MS Oracle Firebird openBase Access CONCA CONCATO textl amp CONCATO text1 CONCATC TENATEO text2 text2 ASCIIO ASCIIO AsSc ASCIIO ASCIIO CHARO CHAR Chr CHRO CHARO Zchn POSITIONO POSI InStr INSTR POSITION TION Basis Basis C IN I Suchtext Suchtext LOCATE a IN a2 Suchtext INSTR Basis Basis Suchtext LOCATE Suchtext Basis LENGTHO LENGTHO LenO LENGTHO LENGTHO L nge LOWER LOWER C Lcase LOWER LOWER Klein LCASE bstO SUBSTRING SUBST MidO SUBSTRC SUBSTRING SUBSTRING O RING O TeilO wert FROM FROM MIDO FOR FOR SUBSTRC REPLACEO REPLACECO Replace REPLACEC REPLACE Erset zen TRIMO TRIMO TrimO TRIMO TRIM FROM Gl tten wert LTRIMC LTRIMC Ltrim LTRIMC TRIM LEA LTRIMO LGl t DING FROM ten wert RTRIMC RTRIMC Rtrim RTRIMC TRIM RTRIMC RGl t CTRAILING ten FROM wert UPPERC UPPERC Ucase UPPERC UPPER UPPERC Gross UCASE bstO Tabelle 5 13 Forts G ngige alphanumerische Funktionen Tabelle 5 14 Alphanumerische Funktionen 181 5 Kapitel5 Datentypen Ausdr cke und Funktionen Beispiel In der Tabelle tbKursthema sind die Kursbeschreibungen f r die einzelnen Kursthemen enthalten Jetzt soll f r einen Prospekt die
49. WM karitez nderungsanomalie UPDATE L schanomalie DELETE 242 Datenbanken modellieren Sollte der Kunde umziehen m ssen alle Auftr ge nachtr glich ge ndert werden Zieht unser Kunde Ewald Kuhn KG um und ist seine neue Post leitzahl 29225 statt 29223 so ist dies nicht nur an einer Stelle sondern in allen Datens tzen der Bestelltabelle die Bestellungen dieses Kunden enthal ten und wer wei wo sonst noch zu ndern Dies ist nicht nur aufwendig sondern auch fehleranf llig Werden Auftr ge vergessen so haben wir wie der einen Widerspruch eine nderungsanomalie UPDATE Anweisung Vermissen Sie noch eine SQL Anweisung aus Kapitel 6 Richtig auch die DELETE Anweisung kann in nicht redundanzfreien Datenbanken Probleme verursachen Stellen Sie sich vor Sie wollen die Daten ber den Kunden Ewald Kuhn KG l schen weil dieser den Gesch ftsbetrieb eingestellt hat Wollen Sie dann alle seine Auftr ge l schen Dies k nnte problematisch sein wenn Sie sp ter Ihren Umsatz insgesamt bestimmen wollen Anderer seits haben Sie Auftr ge ohne Kunden wenn Sie die Auftr ge in der Daten bank lassen und nur den Kunden l schen wollen Wenn Sie dann beispiels weise die Kundennummer noch als Fremdschl ssel f r Ihren INNER JOIN definiert haben m ssen Sie jetzt einen k nstlichen Dummy erfinden Auch umgekehrt k nnen Probleme entstehen Stellen Sie sich vor Sie wollen alle Auftr ge die lter al
50. Wenn keine einschr nkende Bedingung f r die Kombination zweier Datens tze vergeben wird werden einfach alle Datens tze einer Tabelle mit allen Datens tzen der anderen Tabelle kombiniert Mathematisch wird dies als kartesisches Produkt bezeichnet In SQL hei t es CROSS JOIN In der Praxis ist dies nahezu immer ein Problem Normalerweise ist es nicht sinnvoll wahllos alle Datens tze miteinander zu kombinieren Es macht schlie lich wenig Sinn beispiels weise einen Kunden auch mit allen Auftr gen der anderen Kunden zu kom binieren Trotzdem ist die entsprechende Syntax im SQL Standard definiert worden FROM tabellenamel CROSS JOIN tabellenname2 CROSS JOIN Syntax Den CROSS JOIN gab es de facto bereits vor dessen Definition In der SQL89 Syntax ergibt sich ein CROSS JOIN immer dann zumeist ungewollt wenn man vergisst zwei Tabellen miteinander in der WHERE Klausel zu verbinden wie etwa in Listing 4 37 SELECT Listing 4 37 k KID k GezahlterBetrag p Familienname CROSS JOIN p Vorname p PLZ p Ort p Strasse durch fehlende FROM tbPerson p tbKursbesuche k WHERE k KID CE23 AND k GezahlterBetrag lt 250 ORDER BY p Familienname p Vorname Verkn pfungsbedingung Es fehlt in der Anweisung eine Verbindung der beiden Tabellen also bei spielsweise ein p PID k KTID und schon werden alle nicht ber die wHERE Klausel herausgefilterten Datens tze der Tabelle tbKursbesuche mit allen Datens tzen der Tabelle tbPer
51. ber die insgesamt drei Fremdschl sselattribute werden das Kursthema die Teilnehmer und der Dozent mit dem Kurs verbunden 3 2 Schnelleinstieg und Neustart Wenn Sie Ihre Datenbank bereits installiert haben k nnen Sie die Kursda tenbank und wenn Sie wollen auch das zweite Beispiel die Artikeldaten bank jetzt schnell installieren Die Artikeldatenbank wird inhaltlich in den Kapiteln 7 und 8 ausf hrlich besprochen Dieser Abschnitt richtet sich also 37 W kaites 38 kurse artikel kurse Die Beispieldatenbanken zun chst ausdr cklich nur an diejenigen Leser die eine der hier verwendeten Datenbankumgebungen bereits lauff hig installiert haben und sich im Umgang damit bereits etwas auskennen F r die anderen Leser erfolgt im Anschluss eine ausf hrliche Beschreibung Au erdem wird hier beschrieben wie Sie bereits installierte Datenbanken wieder in den Ausgangszustand zur cksetzen k nnen Wenn Sie noch keine Datenbank installiert haben berspringen Sie diesen Abschnitt und kommen darauf zur ck falls Sie sp ter einmal Ihre Datenbank zur cksetzen m chten 3 2 1 MySQL Alle Daten f r die Kursdatenbank stehen auf der CD unter datenbanken MySQL kurse Um die Kursdatenbank wieder zur ckzusetzen wird das Skript LoescheKursdb aufgerufen und anschlie end das L schen mit y best tigt Um die Datenbank wieder zu laden wird das Skript Kursdb aufgerufen Beide Skripte gehen davon aus dass Sie das Passwor
52. das Recht einger umt werden Daten aus der Tabelle tbPerson abzufragen einzuf gen und zu ndern so kann dies mit einer GRANT Anweisung wie in Listing 12 1 dargestellt gesche hen GRANT SELECT INSERT UPDATE ON TABLE kurse tbPerson TO meier WITH GRANT OPTION Bei der Ausgestaltung der Rechte f r Tabellen als Datenbankobjekte also im Wesentlichen der SQL Anweisungen gibt es erwartungsgem erhebliche Unterschiede Die wesentlichen Rechte sind aber bereits im urspr nglichen Standard definiert und nur minimal ver ndert worden SELECT Datenfeldliste INSERT Datenfeldliste DELETE UPDATE Datenfeldliste REFERENCES Datenfeldliste Oder einfach E ALL Diese Rechte sind sinnvoll f r Tabellen und VIEws als Datenbankobjekte zu vergeben SELECT INSERT DELETE und UPDATE sind selbsterkl rend und bezie hen sich auf die entsprechenden SQL Anweisungen REFERENCES bezieht sich auf das Recht eine Tabelle anzulegen die ein Datenfeld der Tabelle als Fremdschl ssel verwendet Bei einigen Rechten k nnen Sie zus tzlich die Spalten in einer Datenfeldliste angeben auf die sich das Recht beziehen soll Beachten Sie auch den Einfluss von nderungen der Datenbankstruktur auf die Rechte So kann es Ihnen beispielsweise bei Oracle passieren dass Sie zwar ein UPDATE Recht auf eine Tabelle haben das sich aber nach der Erg n GRANT Beispiel Listing 12 1 Vergabe von Rechten an den Benutzer meier Rechte
53. derung und L schung von Datenbankstrukturen Hiermit werden also die grundlegenden Strukturen der Datenbank Tabellen Felder Views ver ndert m SQL DML Data Manipulation Language Die DML dient der Abfrage dem Einf gen der nderung und dem L schen von Daten in bereits vor handenen Datenbankstrukturen also vorhandenen Tabellen Feldern und Beziehungen SQL DCL Data Control Language Die DCL dient der Pflege der Daten bankinfrastruktur insbesondere der Zugriffsberechtigungen W hrend die SQL DDL und die SQL DCL vorwiegend von Datenbankadmi nistratoren verwendet werden ist die SOL DML das wesentliche Instrument f r den Datenbankanwender sei es ein Mensch oder ein Programm Die SQL DML l sst sich aufgrund der Aufgaben noch einmal grob in zwei Gruppen untergliedern E Die rein lesende Abfrage von Daten SELECT E Die Ver nderung der Daten durch das Einf gen ndern und L schen INSERT UPDATE DELETE Von herausragender Bedeutung ist dabei insbesondere das Lesen von Informationen mithilfe von SELECT das dem Anwender die ganze Flexibilit t der Datengewinnung und Analyse zur Verf gung stellt die relationale Datenbanken bieten In Kapitel 4 wird daher ausf hrlich auf den grunds tz lichen Aufbau des SELECT eingegangen SQL ist recht einfach zu lesen und zu verstehen trotzdem bleibt es eine Pro Programmiersprache grammiersprache Die M chtigkeit von SQL ist beeindruckend man muss sie allerdings auch
54. die Feldnamenliste an Als Werte f r die Felder sind nicht nur Zahlen alphanumerische Angaben oder Datumsangaben erlaubt sondern auch alle Ausdr cke die einen Wert des richtigen Datentyps f r das Feld berechnen Dies bedeutet insbesondere dass neben der direkten Wertangabe auch Funktionen verwendet werden k nnen In der folgenden SQL Anweisung in MySQL Syntax wird die Kurskennung durch eine CONCATO Funktion zusammengesetzt Der Kursbe ginn wird auf zwei Wochen nach dem aktuellen Datum gesetzt Das Kurs ende liegt 4 Tage nach dem Kursbeginn 201 W kaites Listing 6 4 Einf gen eines Datensatzes mit Funktionen Listing 6 5 Einf gen eines Datensatzes mit einem 202 Sub SELECT Datenbankinhalte ndern INSERT UPDATE DELETE INSERT INTO tbKurs KID Kurskennung KTHID KursdauerStunden Kursbeginn Kursende Zertifikat Gebuehr Ustpflichtig DID VALUES 896 CONCAT CE24 Access 3 40 ADDDATE Current_Date 14 ADDDATE Kursbeginn 4 N 400 00 J NULL Die verf gbaren Funktionen entsprechen den in Kapitel 5 angesprochenen Funktionen Sie sind datenbankabh ngig 6 1 2 INSERT mit Unterabfragen In Kapitel 9 wird auf sogenannte Unterabfragen eingegangen Dabei wird der Wert eines Feldes durch eine eigene SELECT Anweisung ermittelt Lesen Sie gegebenenfalls dort das Prinzip der Unterabfragen Sub SELECT nach INSERT INTO tbKurs_Statistik C KID sum_fehltage sum_rabatt
55. die ein Datensatz erf llen muss damit er Teil der Ergebnismenge einer SELECT Anweisung wird Sie besteht also aus einer Liste von Bedingungen Jede Bedingung liefert entwe der den Wert WAHR true oder FALSCH false Diese Bedingungen werden in der Liste mit AND und und OR oder verkn pft Ist das Gesamtergebnis f r einen Datensatz WAHR wird er Bestandteil der Ergebnismenge sonst wird er aussortiert Die Logik der Verkn pfungen mit UND ODER und NICHT und ihr Zusam menspiel werden in Anhang B zur booleschen Logik genauer erl utert Die SELECT Klausel mit ihrer Feldnamenliste und die WHERE Klausel mit ihrer Bedingungsliste erg nzen sich in der Auswahl der anzuzeigenden Zellen einer Tabelle Das SELECT w hlt ber die angegebenen Feldnamen die anzu zeigenden Spalten aus einer Tabelle aus man spricht auch von einer Projek tion siehe Abbildung 4 13 Select namel name Projektion Bei einer Projektion werden also die ben tigten Datenfelder einer Tabelle bestimmt Demgegen ber wird ber die Angaben in der wHERE Klausel fest gelegt welche Zeilen der Tabelle Bestandteil der Datens tze in der Ergebnis menge werden mengentheoretisch ist dies eine Selektion siehe Abbildung 4 14 Die Daten mit der WHERE Klausel ausw hlen WHERE namel xyz Selektion Schauen wir uns die WHERE Klausel an einem zweiten Beispiel an Es soll die Liste aller Kursteilnehmer des Kurses CE23 erstellt werden wobei die Zahl
56. eingef gt worden und sollen in Wei umbenannt werden ndern Sie alle betroffenen Datens tze Hinweis Sie k nnen die nderung mit einem SELECT ber pr fen 06 2 1 2 Machen Sie die eben gemachten nderungen mit einer neuen UPDATE Anweisung wieder r ckg ngig 6 2 2 3 Erh hen Sie den Stundensatz aller Dozenten die 15 oder weniger ver dienen um 10 6 2 3 4 Machen Sie die eben gemachten nderungen mit einer neuen UPDATE Anweisung wieder r ckg ngig 6 2 4 6 3 Datens tze l schen DELETE 6 3 1 DELETE Grundlagen Die dritte M glichkeit den Inhalt von Tabellen zu ndern besteht im L schen von Datens tzen Gel scht werden wie beim Einf gen grunds tzlich komplette Datens tze Sollen einzelne Felder gel scht werden kann dies ber das ndern auf einen NULL Wert geschehen In Abschnitt 6 1 wurde mit der folgenden SQL Anweisung ein neuer Daten satz in die Personentabelle eingef gt INSERT INTO tbPerson PID Familienname Vorname PLZ Ort Strasse Geburtsdatum VALUESC 51 Gerhardt NULL 29221 DEFAULT Z llnerstra e 12 1955 02 24 2 Diese Zeile soll jetzt wieder gel scht werden Bevor Sie dies tun beachten Sie den dringenden Rat vor jeder DELETE Anweisung die Anweisung als nor male SELECT Anweisung zu testen da ein R ckg ngig nicht m glich ist Um gezielt einen einzelnen Datensatz auszuw hlen der gel scht werden soll ist eine
57. fl che von MySQL kennen falls Ihnen einmal keine andere Oberfl che zur Verf gung steht oder falls Sie einmal Batchprozesse aufbauen und dabei die entsprechenden Komponenten nutzen wollen Wir beschr nken uns hier wieder auf die Windows Sicht unter Linux sieht die Umgebung aber prinzi piell sehr hnlich aus Die Kommandooberfl che von MySQL wird direkt bei der Installation bereit gestellt Installieren Sie MySQL unter Windows wird das System direkt im Pfad C Programme MySQL MySQL Server 5 0 abgelegt Ein Unterverzeich nis das dabei angelegt wird ist das bin Verzeichnis Einen Ausschnitt aus dem typischen Inhalt dieses Verzeichnisses sehen Sie in Abbildung 3 15 Wir wollen zun chst nur mit den beiden Standardprogrammen mysql ere und mysqladmin exe arbeiten Sie m ssen dazu unter Windows ber START ALLE PROGRAMME ZUBEH R das Zubeh r von Windows w hlen Dort wie derum w hlen Sie die EINGABEAUFFORDERUNG Sie gelangen in das Fenster EINGABEAUFFORDERUNG Hier m ssen Sie in das MySQL Verzeichnis navigie ren wenn Sie das Verzeichnis nicht bei der Installation in den Windows Pfad aufgenommen haben Falls Sie die alte DOS Logik nicht mehr griffbe reit haben es reichen im Prinzip wenige Befehle um dieses Verzeichnis zu erreichen 51 Abbildung 3 15 Inhalt des Verzeichnisses mysagl bin hier unter Windows Tabelle 3 1 Basisbefehle zum Erreichen der Kommandozeile von MySQL Verzeichnis von G Programme MySQL MyS
58. hlen Sie die Datei kurse fdb aus siehe Abbildung 3 45 Sie k nnen noch eine eigene Anmeldung sowie einen Zeichensatz angeben Abbildung 3 45 Registrierung der Datenbank 80 F Register Database and Connect PR Server Local Server Database Eile C Programme Firebird Firebird_2_0 KURSE FDB fa Alias Name KURSE FDB IV Save Alias Information M Login Information User Name KURSE Password Role ja ase sensitive role name peo mem Default Character Set 1508859_1 k J Gun Firebird Nach der Registrierung der Datenbank k nnen Sie sich im Hauptfenster mit einem CONNECT anmelden und erhalten die bersicht in Abbildung 3 46 t 1BOConsole Console View Server Database Tools s Help Z Era Servers Action kE Local Server D Databases Y KURSE FDB ka Domains a Tables a Views Description R Disconnect Disconnect from the current database pe Properties m Database Statistics Display database statistics R Shutdown Shutdown the database W Sweep Transaction Reco amp View Metadata Database Restart Show database properties Perform a database sweep fe J Stored Procedures Recover limbo transactions PR Extemal Functions A Generators Exceptions Blob Filters View Database Metadata Restart a database Drop Database amp Database Backup R Connected Users g Restore Database Th Database Windows Drop the current database Bac
59. llen zu k nnen ist das Konzept der Trans aktion eingef hrt worden Eine Transaktion ist eine in sich abgeschlossene Folge von nderungen und Abfragen die zun chst so lange gekapselt und vor anderen Benutzern verborgen werden bis sie als Ganzes entweder durchgef hrt COMMIT oder zur ckgenommen ROLLBACK werden Die Unterst tzung von Transaktionen in den einzelnen Datenbankmanage mentsystemen ist sehr unterschiedlich und h ngt teilweise auch von den verwendeten Dateiverwaltungssystemen ab also den Systemen die tats ch lich f r die physikalische Datenhaltung verwendet werden Generell beginnt eine Transaktion entweder automatisch mit der Eingabe einer SQL Anweisung oder sie muss mit der SQL Anweisung START TRANSACTION gestartet werden Danach werden alle weiteren SQL Befehle in einem gesch tzten Zustand ausgef hrt bis die Folge der Befehle mit COMMIT oder ROLLBACK beendet wird avoowm WW ME B Wir wollen einen neuen Kursteilnehmer in die Kursdatenbank aufnehmen Das k nnte etwa mit der INSERT Anweisung aus Listing 13 1 geschehen INSERT INTO tbPerson VALUESC Listing 13 1 99 Eintrag eines neuen Klever Kursteilnehmers Klaus 29223 Celle M hlenweg 2 1981 04 02 I Vor dem COMMIT ist der Befehl noch nicht dauerhaft in der Datenbank gespei chert Wenn ein anderer Benutzer der Datenbank jetzt mit einem SELECT eine bersicht ber die Personen erstellt wird der neue Datensatz im N
60. null 0 negativ 1 SICN 7 gt i SORT n gt n Positive Quadratwurzel von n SQRT 4 gt 2 SQRTC 1 gt NULL TRUNCATE n n1 Alle Nachkommastellen wer TRUNCATE 12 45 0 gt a den auf n1 Stellen abgeschnit 12 ten nicht gerundet Wird n1 en men nicht angegeben wird auf eine ganze Zahl abgeschnitten Tabelle 5 12 Vergleich numerischer ANSI MySQL MS Access Oracle Firebird openBase Funktionen verschiedener ABSO ABSO Abs ABSO ABSO Datenbanken LUTEO CEILINGC CEILINGC CEILO CEILINGO CEILO CEILO FLOORC FLOORO IntO FLOORO FLOOR C DIVO FixO bei neg Zah len wie FLOOR 176 Datensatzorientierte Funktionen Skalarfunktionen Tabelle 5 12 Forts ANSI MySQL MS Access Oracle Firebird openBase Vergleich numerischer EXPO EXPO Exp O EXPO EXPO Funktionen verschiedener Exponen Datenbanken tialO POWER C POWER POWER C POWER C LEASTO LEASTO LEASTO LNO LNO Log x LNO Logarith mus LOGO LOGO LOGO LOGO LOG2 C LOG2O LOG 2 LOG 2 LOG10 0 LOG10C LOG 10 LOG10C MODO MODO MODO PIO PIO RANDOM RANDO dbms_ RAND random value GREA GREA TESTO TESTO ROUND ROUND Round C ROUND O ROUND Runden SIGNO SIGNO SgnO SIGNO SIGNO Vorzchn SORTO SORTO sarO SORTO SORTO QWurzel O TRUN TRUN TRUNC C TRUNCATE CATE O CATE Daneben existieren noch die zu
61. ob der Feldwert in einen bestimmten Wertebereich f llt Die Grenzen geh ren zum g l tigen Bereich PLZ BETWEEN 29000 AND 29999 entspricht PLZ gt 29000 AND PLZ lt 29999 Die Daten mit der WHERE Klausel ausw hlen Operator Bedeutung Beispiel NOT IN Pr ft ob der Feldwert in einer Ort IN C Braun gegebenen Menge von Werten SChweig Hannover auftritt NOT EXISTS ALL berpr ft jeweils f r einen siehe Kapitel 9 Unter ANY gesamten Datensatz also abfragen nicht f r ein einzelnes Feld ob eine zumeist mit einer Unterabfrage formulierte Bedingung zutrifft Regul re Regul re Ausdr cke entspre 23 0 9 Ausdr cke chen weitgehend den von Postleitzahlen die mit 2 LINUX UNIX bekannten Aus oder 3 beginnen dr cken Sie sind unter MySQL Oracle SQL Server und einigen anderen Daten banken verf gbar An verschiedenen Stellen k nnen Platzhalter sogenannte Wildcards einge setzt werden die einzelne unbekannte Zeichen oder ganze Zeichenfolgen repr sentieren In Windows haben sich die Platzhalter f r eine beliebig lange auch leere Zeichenkette und f r ein einzelnes Zeichen durchgesetzt SQL hat derartige Platzhalter schon wesentlich fr her eingef hrt Windows hat aber dann sp ter die SQL Platzhalter leider nicht bernommen In SQL ist das Prozentzeichen f r eine beliebig lange auch leere Zeichen kette blich Ein einzelnes Zeichen das auch
62. r alle Feldnamen Alias Ersatznamen Listing 4 7 Feldnamen mit Alias Abbildung 4 4 Ausschnitt aus der Darstellung mit Alias Leerzeichen und Sonderzeichen Mit SQL Daten abfragen SELECT Qualifizieren Sie die Feldnamen aus unserer Beispielabfrage mit dem Tabel lennamen erhalten Sie SELECT tbPerson vorname tbPerson familienname tbPerson PLZ tbPerson Ort FROM tbPerson Dies funktioniert auch mit dem Platzhalter wunderbar womit Sie dann alle Felder abfragen k nnen SELECT tbPerson FROM tbPerson Die Felder der Ergebnisdatenmenge einer SELECT Anweisung tragen die glei chen Namen wie die Felder in der Datenbank Die Namen werden also unmittelbar bernommen und stehen bei einer Ausgabe im Spaltenkopf Sie k nnen die Namen aber ndern was sowohl f r die Anzeige als auch f r die Weiterverarbeitung in einem Programm wichtig sein kann F gen Sie dazu in der SELECT Anweisung an den Feldnamen ein sogenanntes Alias an Die Alias sind Ersatznamen die bei einem Feldnamen und auch bei einem beliebigen Ausdruck erg nzt werden k nnen und dann als Ersatzname des Feldes in der Ergebnismenge der SELECT Anweisung verwendet werden So liefert die Ergebnismenge der Anweisung SELECT Vorname AS Vorname Familienname AS Name PLZ AS Postleitzahl Ort AS Wohnort der Person FROM tbPerson eine Ergebnismenge deren Felder VORNAME NAME Postleitzahl und Wohnort der Person sind Die Gro Kleinschreibung wird dabei
63. rfen Fragen Sie Ihren Administrator nach einem Schema das Sie beliebig gestalten k nnen Jetzt k nnen Sie innerhalb des Schemas arbeiten Dazu m ssen Sie sich abmelden und mit dem eben erzeugten User artikel neu anmelden Jetzt k n nen die Tabellen und andere Objekte angelegt werden ver ndert und gel scht werden Sie k nnen jetzt auch die Anweisung CREATE SCHEMA AUTHORIZATION artikel verwenden Dies mag merkw rdig erscheinen haben wir doch bereits ein Schema erzeugt und uns in diesem angemeldet Tats chlich erzeugt in Oracle diese Anweisung auch kein Schema Dieses wird bereits von der CREATE USER Anweisung generiert Die Anweisung CREATE SCHEMA dient nur der B n delung weiterer CREATE Anweisungen also etwa CREATE SCHEMA AUTHORIZATION artikel CREATE TABLE tabelell CREATE TABLE tabelle2 CREATE VIEW viewl Das Datenbankschema erstellen CREATE SCHEMA Der Vorteil gegen ber der einzelnen Eingabe der CREATE Anweisungen liegt darin dass eine CREATE SCHEMA Anweisung als Transaktion ausgef hrt wird also entweder vollst ndig oder berhaupt nicht Tritt also in der Anweisung ein Fehler auf wird die komplette Anweisung zur ckgesetzt kann korrigiert und erneut ausgef hrt werden 8 1 4 Firebird Firebird verwendet wie MySQL die Begriffe DATABASE und SCHEMA synonym Die entsprechende Anweisung lautet von einigen Sonderfunktionen abgese hen CREATE DATABASEISCHEMA dateiname USER benutzername PASSWORD pa
64. weise der Rabatt und der bereits gezahlte Betrag von Interesse sind Teilneh mer die mit Gutschein bezahlen sollen nicht ber cksichtigt werden Es soll absteigend nach dem gezahlten Betrag sortiert werden In SQL ergibt sich dann SELECT k KID k Zahlweise k Rabatt k GezahlterBetrag FROM tbKursbesuche k WHERE k KID CE23 AND k Zahlweise Gutschein ORDER BY k GezahlterBetrag DESC In MS Access kann das entsprechend durch ein lt gt ersetzt werden in anderen Systemen wie DB2 muss es das sogar Das Ergebnis der Anweisung ist in Abbildung 4 15 zu sehen Es sind nur die Teilnehmer in der Ergebnismenge enthalten f r die beide Bedingungen WAHR sind sie sind Teilnehmer des Kurses CE23 UND sie zahlen NICHT mit einem Gutschein CE23 Bar 0 00 350 00 CE23 berweisung 50 00 300 00 CE23 Bar 100 00 250 00 CE23 berweisung 150 00 50 00 CE23 berweisung 100 00 50 00 Zur Ermittlung kritischer F lle sollen jetzt noch alle Teilnehmer des Kurses CE23 ermittelt werden die bar oder per berweisung zahlen und noch nicht zwischen 250 und 350 bezahlt haben oder die den Kurs mit einem Gutschein besuchen und schon mehr als einen Fehltag haben Abbildung 4 14 Auswahl der Datens tze ber die WHERE Klausel Zweites Beispiel Listing 4 20 Teilnehmer des Kurses CE23 die nicht mit Gutschein bezahlen Abbildung 4 15 Ergebnis der SQL Anweisung 107
65. 01 01 2001 15 00 Paulsen GmbH Industriekaufmann Windows Rechnungswesen 417 5 Anhang C Anhang Daten Abbildung c 3 KTHID Kursthema Kursbeschreibung Kursdemo DauerPlan Voraussetzung Tabelle tbKursthema 1 Einstieg mit Windows Windows bietet die Grundlage f r alle modernen unc 20 2 Windows f r Fortgeschrittene Der Kurs wendet sich an PC Benutzer die schon ewi 20 1 3 Ordnung im Dateisystem Wie schaffe ich Ordnung auf dem PC Wie k nnen F 8 2 4 Word Einstieg in die Textverarbeitung mit Word Grundleg 40 2 5 Access Einstieg in das Datenbankmanagementsystem Acci 40 2 6 Excel Einstieg in die Tabellenkalkulation mit Excel Grundf 40 2 Access Vertiefung der Arbeit mit MS Access Komplexe Abfr 40 5 8 Datenbankentwurf Entwurf relationaler Datenbanken und Umsetzung in 80 9 VBA Datenbankprogrammierung Programmierung von Anwendungen auf der Basis vi 80 10 Word Il Vertiefung des Umgang mit Word Mehrspaltige Fori 40 4 11 Excel II Vertiefung des Umgangs mit Excel Funktionen einst 40 6 Abbildung C 4 KID Kurskennung KTHID KursdauerStunden Kursbeginn Kursende Zertifikat Gebuehr Ustpflichtig DID Tabelle toKurs CE17 Celle17 word 4 40 23 04 2007 27 04 2007 eigen 280 00 WAHR 833 CE20 Celle20 Word 4 40 09 07 2007 13 07 2007 eigen 280 00 WAHR 812 CE23 Celle23 Access 5 36 06 08 2007 10 08 2007 eigen 350 00 FALSCH 812 CE24 Celle24 Access 40 13 08 2007 17 08 2007 eigen 400 00 FALSCH 812 H89 Hannover84 Access
66. 122 Performance Klammersetzung bungen Mit SQL Daten abfragen SELECT SELECT k Kurskennung p Familienname p Vorname FROM tbKursbesuche kb INNER JOIN tbKurs k ON k KID kb KID INNER JOIN tbPerson p ON kb KTID p PID WHERE k KID CE23 ORDER BY p Familienname p Vorname Bei der Verwendung eines JOIN mit gro en Tabellen muss im Einzelfall die Performance der SELECT Anweisung analysiert werden Eine grobe Richtlinie ist dabei dass zun chst m glichst kleine Tabellen in den JOIN einbezogen werden sollen und die gro en Tabellen m glichst sp t ber cksichtigt wer den Dahinter verbirgt sich die Erkenntnis dass die virtuellen Zwischenta bellen verwaltet werden m ssen Je kleiner diese Tabellen sind desto perfor manter ist zumeist der JOIN Zu beachten ist dabei aber auch inwieweit ber eine WHERE Klausel eine der am JOIN beteiligten Tabellen bereits verkleinert wird Tats chlich kann aber auch aufgrund von Indizes und anderen Opti mierungen ein anderes Verhalten auftreten sodass im Zweifelsfall einfach getestet werden sollte welche Variante g nstiger ist Was passiert aber wenn beim JOIN mit mehreren Tabellen gar keine Klam mern gesetzt werden Der SQL Standard sieht vor dass ein JOIN immer von links nach rechts abgearbeitet wird dass also streng genommen die Klam mern im vorletzten Beispiel nicht notwendig sind Die Erfahrung zeigt dass die realen Datenbankmanagementsysteme das durchaus anders sehen
67. 2 Bucz Susanne 30531 Hannover Heinestra e 23 06 04 1976 4 Karmann Thomas 29227 Celle Trift 28 04 08 1954 5 Kl tzer Karl 29221 Celle Bahnhofstra e 2 13 03 1971 b Weiss Karin 30529 Hannover Palmstra e 6 05 10 1962 Weiss Peter 38134 Braunschweig Glanweg 4 02 03 1974 8 Meier Kathrin 38154 Braunschweig Welfenallee 23 03 05 1981 9 Schmidt Karl 30529 Hannover Lavesallee 32 25 06 1949 10 M ller Claudia 29596 Breitenhees Inden Fuhren 12 11 Lisewski Bernd 30890 Barsinghausen Roggenkamp 10 06 06 1960 15 Martens Melanie 29221 Celle Horstweg 258 17 02 1961 17 Schlachter Dieter 29227 Celle Mondhagen 43 02 02 1961 23 Peredy Helmut 29221 Celle Mauernstra e 2 23 02 1956 24 Ruppert Nicola 29301 Bergen Welfenallee 23 25 02 1962 25 Sander 29223 Celle Marallee 12 05 02 1953 26 Cromberg J rg 38152 Braunschweig Nordring 13 07 06 1991 31 Schulze Tanja 29308 Winsen Berliner Ring 23 09 11 1992 32 Winter Petra 29320 Hermannsburg Immenhoop 51 30 12 1989 34 Plate Ulrich 30529 Hannover Gutenberggasse 5 02 12 1986 37 Magerkuth Melissa 29336 Nienhagen Am T mpel 3 04 09 1951 DID PID Beschaeftigungsbeginn Stundensatz Firma Titel Qualifikationen Abbildung c2 812 1 01 07 2003 17 00 selbstst ndig Informatiker Word Windows Datenbanken Tabelle tbDozent 815 17 01 01 2002 15 00 selbstst ndig IT Kaufmann Office Datenbanken Netzwerke 821 6 15 09 2005 13 00 Dreher KG Meister CNC Steuerungen 833 26 01 08 2003 14 00 Pension r Mathematiker Windows Word 834 2
68. 5 32 09 07 2007 13 07 2007 eigen 350 00 FALSCH 812 H90 Hannover30 Windows 1 18 16 07 2007 18 07 2007 kein 120 00 WAHR 834 H91 Hannover91 Windows 2 18 23 07 2007 25 07 2007 kein 120 00 WAHR 834 Abbildung C 5 KBID KTID KID Fehltage Zeugnis Selbstzahler Zahlweise Rabatt GezahlterBetrag Tabelle tbKursbesuche 310 25 CE17 0 WAHR WAHR berweisung 20 00 260 00 312 4 CE24 0 FALSCH FALSCH Gutschein 100 00 250 00 314 4 CE1 0 WAHR FALSCH Gutschein 0 00 280 00 315 5 CE17 0 WAHR FALSCH Gutschein 0 00 250 00 354 34 H90 1 FALSCH WAHR Uberweisung 20 00 80 00 361 9 H90 0 FALSCH FALSCH Gutschein 0 00 120 00 412 4 CE23 2 FALSCH FALSCH Gutschein 0 00 350 00 413 5 CE23 0 FALSCH WAHR berweisung 100 00 50 00 415 15CE23 5 FALSCH WAHR Bar 100 00 250 00 416 10 CE23 0 FALSCH FALSCH Gutschein 0 00 350 00 418 3S1 CE23 1 FALSCH FALSCH Gutschein 0 00 350 00 419 32 CE23 0 FALSCH WAHR berweisung 50 00 300 00 420 24CE23 2 FALSCH WAHR Bar 0 00 350 00 421 37 CE23 8 FALSCH WAHR berweisung 150 00 50 00 423 10 CE24 0 FALSCH WAHR Bar 100 00 0 00 432 15 CE24 0 FALSCH WAHR Bar 100 00 0 00 438 11 CE24 0 FALSCH FALSCH Gutschein 0 00 350 00 442 231CE24 0 FALSCH WAHR berweisung 50 00 300 00 418 Datenbank Artikel ae C 2 Datenbank Artikel MNr Kar Firma Anrede Name Vorname Strasse PL
69. 6 1 4 Besonderheiten des INSERT mit MS Access Die Oberfl che von MS Access verf gt ber spezielle Mechanismen zum Ein f gen ndern und L schen von Datens tzen Die Aktivierung der entspre chenden Mechanismen ist einfach Sie gehen dazu zun chst in die Entwurfs ansicht einer normalen Abfrage Hier finden Sie den Men befehl ABFRAGE Nach Auswahl dieses Befehls finden Sie eine bersicht ber die zur Verf gung stehenden Abfragetypen siehe Abbildung 6 2 Abfrage Extras Fenster Ausf hren Tabelle anzeigen Tabelle entfernen Auswahlabfrage Kreuztabellenabfrage Tabellenerstellungsabfrage Aktualisierungsabfrage Anf geabfrage L schabfrage SQL spezifisch Parameter SET Syntax Listing 6 8 Einf gen eines Datensatzes mit der SET Syntax MS Access Abbildung 6 2 Spezialabfragen in MS Access 205 WM Kapite e 206 Abbildung 6 3 Zieltabelle einer Anf geabfrage INSERT INTO Datenbankinhalte ndern INSERT UPDATE DELETE Anf gen Anf gen an Tabellenname tbKurs_Statistik v Abbrechen Aktuelle Datenbank Andere Datenbank Damit haben Sie die Zieltabelle des INSERT INTO festgelegt Die Tabelle tbKurs_Statistik beinhaltet f r jeden Kurs ein Feld KID f r die Identifikati onsnumm er ein Feld sum_fehltage f r die Anzahl der Fehltage aller Kurs teilnehmer ein Feld sum_rabatt f r die Summe der Rabatte ein Feld mittel_be
70. 71828 gt 1 LNC1 gt 0 Basis e verbotene Werte lt 0 LNC 1 gt NULL liefern NULL LOG n1 n gt n LOG 10 100 gt 2 LOG 0 100 gt NULL Logarithmus zur Basis n1 von n Tabelle 5 11 G ngige numerische Funktionen 175 5 Kapitel5 Datentypen Ausdr cke und Funktionen Tabelle 5 11 Forts G ngige numerische SQL Funktion Erl uterung Beispiel Funktionen LOG2 n gt n Logarithmus zur Basis 2 vonn LOG2 8 gt 3 LOG10 n gt n Logarithmus zur Basis 10 von n LOG10 100 gt 2 MOD n n1 gt n Bestimmt den Rest der ganz MOD 124 10 gt 4 n ni gt n zahligen Division n n1 Teil 26 5 gt 1 weise darf auch das 27 MOD 3 gt 0 Prozentzeichen als Operator verwendet werden PIO gt n Liefert den Wert der Zahl Pi PIO gt 3 14159 RANDOMC n Erzeugt eine Zufallszahl zwi RANDO gt 0 254 schen 0 und 1 Wird n angege RAND 1 gt 0 343 ben kann eine definierte wiederholbare Folge erreicht werden GREATEST n n1 Gr ter Wert einer Reihe von GREATEST 2 3 5 gt 5 ME an Werten die einzeln aufgez hlt als Parameter angegeben wer den ROUND n n1 gt Rundet n auf die angegebene ROUND 12 45 gt 12 n Anzahl Dezimalstellen n1 Fehlt en 2 gt n1 wird auf ganzzahlige Werte ROUND 12 gt 12 gerundet SIGN n gt n Liefert das Vorzeichen von n SIGN 5 gt 1 als Zahlwert SICN 0 gt 0 positiv 1
71. Access 36 Access 40 H89 Hannover89 Access 32 Access 40 Neu ist der Abschnitt AND k KursdauerStunden lt kt DauerPlan der daf r sorgt dass nur solche Datens tze in der Ergebnismenge erzeugt werden bei denen die tats chliche Kursdauer in k KursdauerStunden kleiner als die geplante Kursdauer in kt DauerPlan ist NON EQUI JOIN Beispiel Listing 4 33 Non Equi JOIN Abbildung 4 29 Ergebnis des Vergleichs tats chlicher und geplanter Stunden 125 WM karitea 126 Nutzung der WHERE Klausel Listing 4 34 Non Equi JOIN in der WHERE Klausel bungen Beispiel Mit SQL Daten abfragen SELECT Der Vergleich k KTHID kt KTHID ist zus tzlich notwendig damit nur sol che Kurse und Kursthemen miteinander in Beziehung gesetzt werden die einander entsprechen Fehlte diese Angabe w rden zus tzlich alle Kombi nationen ausgegeben bei denen ein Kurs mit einer kleineren Kursdauer als irgendein anderes Kursthema existiert Ein Non Equi JoIn l sst sich in manchen F llen durch einen Equi J0IN und eine WHERE Klausel ersetzen Der Programmtext in Listing 4 34 zeigt die umformulierte Anweisung mit einem Non Equi JOIN in der WHERE Klausel SELECT k KID k Kurskennung k KursdauerStunden kt Kursthema kt DauerPlan FROM tbKursthema kt INNER JOIN tbKurs k ONCk KTHID kt KTHID WHERE k KursdauerStunden lt kt DauerPlan Zusammenfassung Neben dem Gleichheitsoperator k nnen auch weitere Operatore
72. Access m sste also f r die obige SELECT Anweisung etwa das Ergebnis in Abbildung 4 5 geliefert haben Vorname Name Postleitzahl Wohnort der Person Peter Weiss 30529 Hannover Susanne Bucz 30531 Hannover Thomas Karmann 29227 Celle Karl Kl tzer 29221 Celle Iarin Manier AnEra Hannnmanr Um in MS Access sinnvoll mit Ersatznamen arbeiten zu k nnen m ssen die Alias Angaben in die f r MS Access typischen eckigen Klammern gesetzt werden Soll das Standardverhalten der Umsetzung in Gro buchsta ben erfolgen ist dies ebenfalls vorher zu ber cksichtigen In MS Access m sste die SELECT Anweisung also etwa wie folgt lauten Einfache Abfragen SELECT tbPerson Vorname AS VORNAME tbPerson Familienname AS NAME tbPerson PLZ AS Postleitzahl tbPerson Ort AS Wohnort der Person FROM tbPerson Die Angabe der eckigen Klammern ist optional solange keine Leerzeichen oder sonstigen Sonderzeichen auftreten In der grafischen Oberfl che von MS Access k nnte das dann wie in Abbildung 4 6 aussehen Feld Postleitzahl PLZ Wohnort der Person Ort Tabelle tbPerson tbPerson tbPerson tbPerson Sortierung Anzeigen Kriterien oder Alias in MySQL An dieser Stelle sind jetzt noch ein paar Hinweise f r die MySQL Nutzer angebracht Wie immer unterscheidet der SQL Interpreter von MySQL die Gro Kleinschreibung entsprechend der Konfiguration und dem Betriebs system auf dem MySQL l uft Insbesondere kann es zwi
73. Attributen wird in eine eigene Tabelle umgesetzt Die Attribute werden bernommen Zus tzlich werden die Prim rschl ssel der beiden beteiligten Entit ten als Fremdschl ssel bernommen Der Prim rschl ssel besteht aus allen Attributen einschlie lich der Fremd schl sselattribute gegebenenfalls Pr fung ob weniger ausreichend sind Der Name wird aus dem Namen des Beziehungstyps und oder den Entit tstypen gebildet Umsetzung in das relationale Modell Spezialfall Beziehungen mit drei oder mehr Entit ten Dies sind die verbleibenden vielleicht 5 aller Beziehungen Jede Beziehung mit einem Grad gr er als 2 also mit mehr als zwei be teiligten Entit ten wird in eine eigene Tabelle umgesetzt Die Prim r schl ssel aller beteiligten Entit ten werden als Fremdschl ssel bernommen Alle zusammen bilden gemeinsam mit eventuell noch vor handenen weiteren Attributen den Prim rschl ssel Es sollte hier beson ders sorgf ltig gepr ft werden ob ein Teil der Attribute entfallen kann Regeln f r Attribute Die Attribute werden ebenfalls komplett bernommen und in die Tabellen integriert Dabei sind erstmals auch die physischen Datentypen zu vergeben also etwa CHARC VARCHARC INTEGER FLOAT BOOLEAN DATE TIME TIMESTAMP oder ein anderer Datentyp der Datenbank F r das Beispiel ergeben sich im relationalen Modell folgende Tabellen Fel der sind bereits an Namenskonventionen angepasst und teilweise reduziert Die
74. Benutzerkonzept in Oracle Oracle verwendet aufgrund seines oft unternehmensweiten Einsatzes in der gro en Version ein sehr differenziertes Konzept Mit Einrichtung eines Ora cle Datenbanksystems werden zwei Benutzer als Superuser eingerichtet SYSTEM und SYS Die Passw rter sind bei Einrichtung des Systems bekannt und sollten schnell ge ndert werden Beiden Benutzern wird die Benutzer klasse DBA Database Administrator zugeordnet die die gr tm glichen Rechte gew hrt Oracle hat ein Rollenkonzept f r die Benutzer das jedem Benutzer den Rollen Status E CONNECT E RESOURCE E DBA oder E ADMIN zuordnet 347 arite 12 348 Listing 12 3 Einrichten eines Benutzers in Oracle CONNECT RESOURCE DBA ADMIN Benutzer Rechte und Zugriffsschutz Diese Rollen beinhalten standardm ig eine gro e Menge von Rechten und stellen letztlich eine komfortable M glichkeit dar einem neu erzeugten Benutzer eine sinnvolle Menge an Rechten direkt zuzuordnen CREATE USER meier IDENTIFIED BY meinpasswort GRANT ADMIN TO meier Mit den beiden SQL Anweisungen aus Listing 12 3 weisen Sie dem neu erzeugten Benutzer alle Rechte zu die man normalerweise als Administrator ben tigt Teilweise historisch bedingt ist die kombinierte M glichkeit eine derartige Rollenzuweisung zusammen mit der Erzeugung des Benutzers in einer GRANT Anweisung bei der Erzeugung des Benutzers vorzunehmen GRANT RESOURCE DBA ADMIN TO benu
75. Bestellungen die aus mehreren Bestellpositionen bestehen k nnen Jede Bestellposition betrifft einen Artikel Es sollen Kundenlisten erstellt werden mit deren Hilfe den Kunden gezielt Angebote im Rahmen von Aktionen gemacht werden Beispiel B roFix k nnen Au erdem will man eine ganze Reihe von Informationen abfragen k nnen beispielsweise wann welcher Kunde welche Waren gekauft hat wel che Ums tze man mit welchem Artikel macht oder wie hoch die Lagerbe st nde sind Eine ganze Reihe der markierten Substantive kommen nicht als Entit ten infrage So sind B roFix B roFix KG B ro Versand GmbH oder Paul und Weiss B robedarf GmbH Begriffe von denen nur eine Instanz existiert Sie kommen daher als Entit t nicht infrage Dann gibt es eine Reihe von Begriffen die als nicht zum Problemumfang zugeh rig angesehen werden oder rein technischer Natur sind Dies sind ins besondere B robedarf Ladengesch ft Versandhandel Nachbarstadt Gesch ft Datenbank und Reihe weiterer Informationen Dann gibt es berechenbare Informationen die sp ter aus der Datenbank gewonnen werden k nnen aber nicht selbst Bestandteil der Information in der Datenbank sind In unserem Beispiel sind das Kundenlisten die mit einer SELECT Anweisung aus den Kunden erstellt werden k nnen Auch Angebote im Rahmen von Aktionen oder Ums tze deuten auf berechen bare Informationen
76. Bucz Susanne 4 Karmann Thomas 5 Kl tzer Karl 6 Weiss Karin 7 Weiss Peter 8 Meier Kathrin 9 Schmidt Karl 10 M ller Claudia 11 Lisewski Bernd 15 Martens Melanie 17 Schlachter Dieter 23 Peredy Helmut 24 Ruppert Nicola 25 Sander 26 Cromberg J rg 31 Schulze Tanja 32 Winter Petra 34 Plate Ulrich 37 Magerkurth Melissa Al Datensatz 4 4 1 TACIE von 20 Abbildung A 27 Speichern der Abfrage S peic hern unter Abfragename BEJE Beispielabfrage x Danach erscheint die Abfrage in der Liste der verf gbaren Abfragen im Datenbankfenster wie in Abbildung 1 28 dargestellt 400 MS Access u A Abbildung 1 28 Kurse2003 Datenbank Access 2002 2003 Dateiformat EIER bersicht nach Sr Erstellung der Abfrage PA ffnen BZ Entwurf Neu X 2 E Objekte Erstellt eine neue Abfrage in der Entwurfsansicht Tabellen 2 Erstellt eine Abfrage unter Verwendung des Assistenten Re Beispielabfrage Formulare Berichte Seiten Makros Module Gruppen Ga Favoriten A 4 2 Die Daten aus Excel importieren Wir wollen die Gelegenheit nutzen beispielhaft auch eine neue Datenbank Datenimport in anzulegen Damit haben Sie nicht nur eine Datenbank zur Verf gung die Sie MS Access einerseits kopieren und andererseits immer wieder neu aufbauen und erwei tern k nnen wenn Sie die bungsdatenbank aus irgendwelchen Gr nden zerst rt haben sondern auch ein Verfahren eigene Dateien beispiel
77. CExs 0 N N Gutschein 0 0 1001 1 CExx ON N Gutschein 0 0 DELETE mit Unterabfragen Je nach Datenbanksystem sind hier unterschiedlich komplexe Ausdr cke beispielsweise auch Aggregatfunktionen m glich Die prinzipielle Syntax beim Einsatz einer Unterabfrage bleibt aber gleich INSERT INTO tabellenname feldnamel feldname2 SELECT F r weitere auch komplexere Beispiele sei an dieser Stelle auf das Kapitel 6 verwiesen wo im Zusammenhang mit der INSERT Anweisung bereits auf Unterabfragen in der INSERT Anweisung eingegangen wurde weil diese gerade im Zusammenhang mit dem Einf gen von Werten eine zentrale Rolle spielen Firebird und MS Access erlauben keine Klammern um die SELECT Anweisung Lassen Sie einfach die Klammern weg dann funktioniert die Unterabfrage wie im Standard bungen zu INSERT TABLE mit Unterabfragen Erstellen Sie f r die folgenden Aufgaben jeweils eine SELECT Anweisung 1 Ulrich Plate siehe Tabelle tbPerson soll als Dozent in die Tabelle tbDo zent aufgenommen werden Seine DID wird 835 Er wird zum 1 1 2009 aufgenommen Sein Stundensatz ist 15 Er ist selbstst ndig Titel und Qualifikationen sind noch nicht bekannt Nutzen Sie bei der Erstellung die Tabelle tbPerson um die PID zu ermitteln 10 3 1 2 Melissa Magerkurth soll ebenfalls als Dozent aufgenommen werden Sie wird mit dem aktuellen Tag aufgenommen Ihre DID wird 836 ihr Stun densatz ist der durchschnittliche Stundensa
78. Da wir in unserer bungsdatenbank eher mit wenigen maximal drei parallelen Nutzern arbeiten k nnen Sie entweder die Variante DECISION SUPPORT DSS OLAP oder MANUAL SETTING mit einer Anzahl von beispiels weise f nf Nutzern w hlen Im Folgenden geht es um die technische Basis des Servers Unter Windows wird das System als Dienst eingerichtet F r die Nutzung zusammen mit anderen Oberfl chen ist es sinnvoll wenn Sie TCP IP aktivieren und den STRICT MODE ebenfalls einschalten siehe Abbildung 3 8 Danach m ssen Sie den Standardzeichensatz festlegen der in sogenannten Collations gespeichert wird siehe dazu auch Kapitel 8 F r unsere Zwecke reicht im Normalfall die Standardvariante Latin 1 Danach aktivieren Sie MySQL endg ltig als Windows Service Sie k nnen den Standardnamen MySQL w hlen Starten Sie den Service automatisch mit Windows wenn Sie ihn regelm ig zum Testen und Probieren ben ti gen Sonst sollten Sie ihn ber den Windows Dienstemanager jeweils akti vieren wenn Sie ihn ben tigen da die Datenbank beim Start des Dienstes doch einige Zeit ben tigt und Ressourcen belegt va U 0 M Abbildung 3 8 MySQL Server Instance Configuration Wizard Technische Aktivierung MySQL Server Instance Configuration Configure the MySQL Server 5 0 server instance Please set the networking options Enable TCP IP Networking 3 Enable this to allow TCP IP connections When disabled only local connections through nam
79. Datenbanken erstellen SQL DDL Mit dem SELECT werden die gew nschten Felder f r eine Datenabfrage aus gew hlt Schematisch entspricht das der Darstellung in Abbildung 8 15 Sie erhalten genau die Spalten die grau dargestellt sind Nehmen Sie den SELECT Befehl jetzt als Datenquelle eines VIEw und f gen ihn in eine CREATE VIEw Anweisung ein ergibt sich das Listing 8 12 CREATE VIEW postanschrift AS SELECT Fami lienname Vorname PLZ Ort Strasse FROM tbPerson Damit ist eine Sicht ein VIEw mit dem Namen postanschrift auf die Tabelle tbPerson festgelegt Basierend auf diesem VIEW kann beispielsweise Herr Peter Weiss wie auch alle anderen Personen k nftig mit einem SELECT FROM postanschrift WHERE Fami lienname Weiss AND Vorname Peter gefunden werden Wird die Tabelle tbPerson k nftig um weitere Spalten erweitert beispielsweise die Umsatzsteuer ID f r Gesch ftskunden Hinweise auf Vegetarier und Veganer oder andere Angaben so muss das unseren Post versand nicht st ren Er wird in seinem VIEW davon nichts mitbekommen Wird die Tabelle von tbPerson in tbKunde umbenannt so ist nur der VIEW ein malig zu ndern alle darauf basierenden SQL Anweisungen funktionieren danach wie zuvor 8 6 2 Zeilenselektion Ein VIEw erlaubt es nicht nur bestimmte Spalten aus einer Tabelle auszuw h len sondern auch bestimmte Datens tze zu selektieren Sie wollen beispiels weise nur diejenigen anschreiben die in Braunschwei
80. Datensatz des VIEW entspricht nicht 1 1 einem Datensatz der zugrunde liegenden Tabelle es fehlt insbesondere der Prim rschl ssel oder Teile des Prim rschl ssels Mehr als problematisch sind also zumeist VIEws die sich nicht auf genau eine Tabelle beziehen Es gibt aber auch verschiedene Gr nde warum ein VIEN der auf nur einer Tabelle basiert nicht nderbar ist Insbesondere erhalten Sie auch keinen nderbaren VIEW wenn Aggregatfunktionen wie SUM AVG MIN oder MAX verwendet werden eine GROUP BY Klausel verwendet wird eine HAVING Klausel verwendet wird ein DISTINCT verwendet wird ein UNION siehe Kapitel 11 verwendet wird Unterabfragen siehe Kapitel 10 verwendet werden Sie sollten bei der Definition eines VIEW also ber cksichtigen ob Sie ihn nur f r Auswertungen SELECT oder auch f r Ver nderungen verwenden wollen UPDATE INSERT DELETE Da die Updatef higkeit eines VIEW sehr oft nicht gegeben ist muss hier bei der Definition sehr vorsichtig vorgegangen wer den Im brigen kann die nderbarkeit sofort nach der Definition eines VIEW von der Datenbank analysiert werden Einige Datenbankadministrations werkzeuge zeigen diese Updatef higkeit unmittelbar an Die Einschr nkungen in der Updatef higkeit resultieren letztlich immer da raus dass die Datenbank die SELECT Anweisung zwar zur Gewinnung Ver dichtung und Kombination von Daten bei der Darstellung nutzen kann sie aber umgekehrt bei einer nder
81. Definitionsm glichkeit des Prim r schl ssels die insbesondere bei mehreren Prim rschl sselattributen sinnvoll ist E Fremdschl ssel eine alternative Definitionsm glichkeit f r einen Fremdschl ssel die insbesondere bei der Nutzung der zus tzlichen Op tionen bersichtlicher ist CHECK weitere Bedingungen die f r die Datens tze der Tabelle einzu halten sind E Indizes Optimierung des Zugriffs auf bestimmte Felder durch die be wusste Einrichtung schneller Suchmechanismen f r einzelne Felder oder Gruppen von Feldern Diese Integrit tsbedingungen stehen neben den Felddefinitionen Sie k n nen wie Felddefinitionen als Aufz hlung in die Definition des CREATE TABLE aufgenommen werden Damit erweitert sich die Syntax f r die CREATE TABLE Anweisung CREATE IF NOT EXISTS TABLE Felddefinition Integrit tsbedingung Felddefinition Integrit tsbedin gung Sie sehen dass Felddefinitionen und Integrit tsbedingungen jeweils durch ein Komma getrennt aneinandergereiht werden Wir wollen die verschiede nen Typen einzeln betrachten 8 3 1 Prim rschl ssel PRIMARY KEY Der Prim rschl ssel dient der Identifizierung der Datens tze in einer Tabelle Jede Tabelle sollte daher einen Prim rschl ssel besitzen auch wenn dies technisch nicht zwingend vorgeschrieben ist Ein Prim rschl ssel besteht aus einem oder mehreren Feldern Eine M glichkeit den Prim rschl ssel zu definieren besteht in dem Zusat
82. Dies funktioniert nur bei Feldern des Typs Datum nicht bei numerischen oder alphanumerischen Feldern Anschlie end wird der bezahlte Anteil an den Kursgeb hren berechnet Derartige Berechnungen k nnen nat rlich nur mit numerischen Angaben erfolgen Das Ergebnis wird anschlie end in einem CONCAT mit dem Prozent zeichen kombiniert Daf r wandelt es der SQL Interpreter intern in eine alphanumerische Angabe um Ergeb an Name Geburtsjahr KID Bezahlter Anteil Anweisung in Listing 5 1 Karmann Thomas 1954 CE17 100 00 Karmann Thomas 1954 CE23 100 00 Karmann Thomas 1954 CE24 62 50 Kl tzer Karl 1971 CE17 100 00 Kl tzer Karl 1971 CE23 14 29 Lisewski Bernd 1960 CE24 87 50 Magerkurth Melissa 1951 CE23 14 29 Martens Melanie 1911 CE24 0 00 Martens Melanie 1911 CE23 71 43 M ller Claudia CE24 0 00 M ller Claudia ua CE23 100 00 Peredy Helmut 1956 CE24 75 00 Plate Ulrich 1986 H90 66 67 Ruppert Nicola 1962 CE23 100 00 Sander 1953 CE17 32 86 Schmidt Karl 1949 H90 100 00 Schulze Tanja 1992 CE23 100 00 Winter Petra 19893 CE23 85 71 SQL Anweisungen erlauben also eine gro e Vielfalt von Berechnungen und sonstigen Umformungen in den Ergebnismengen Wir wollen uns nun mit den Datentypen besch ftigen die SQL kennt und die bei diesen Umformun gen zu beachten sind Grunds tzlich unterscheidet man in SQL E Alphanumerische Daten zeichenorientiert E Numerische Daten zahlenorientiert
83. Er tritt also an die Stelle der TABLE bungen Datensicht 285 W kaites 286 VIEW Beispiel Listing 8 10 VIEW auf die Kunden der B roFix KG Datenbanken erstellen SQL DDL Das hat entscheidende Vorteile f r Sie E Sie k nnen f r Anwendergruppen oder einzelne Anwender einge schr nkte Sichten auf die Datenbank einrichten und so sicherstellen dass jeder nur die Daten sieht die er sehen soll oder darf E Sie m ssen bei Zugriffen mit SELECT nicht immer wieder die f r Sie rele vanten Daten filtern m Sie k nnen Spalten umbenennen und so dem Anwender f r ihn vertraute Begriffe anbieten Dies kann sowohl die Fachsprache als auch eine Fremdsprache betreffen E Sie k nnen Berechnungen und oder Verdichtungen von Daten durchf h ren und f r Abfragen mit SELECT bereitstellen ohne die Ergebnisse in der Datenbank zu speichern E Sie k nnen mit gewissen Einschr nkungen auch nderungen der Da ten UPDATE INSERT DELETE in vereinfachter Form durchf hren E Sie sind nicht von irgendwelchen nderungen der Tabellen abh ngig die die Datenbankadministration f r andere Benutzer durchf hrt und die Sie nicht betreffen Diese Aufgaben sollte ein VIEW also f r Sie erledigen Ein weiterer Vorteil besteht darin dass der Datenbankadministrator die Verwendung von VIEWS sehr sch tzt erlauben sie ihm doch in gewissem Umfang nderungen an der Datenbank ohne dies mit allen Anwendern besprechen zu m ssen
84. F llen zu Datenkonflikten da die Werte in nur einem Feld nicht eindeutig sind Daher sollten Sie w hrend des Imports auf eine Prim rschl sselauswahl komplett verzichten 279 W kaites 280 Abbildung 8 14 Felddefinition in MS Access Datenbanken erstellen SQL DDL E kunden Tabelle Feldname Felddatentyp e rechnungsadresse strasse Datum Uhrzeit w hrung AutowWert Ja Nein OLE Objekt Hyperlink Nachschlage Assis Allgemein Nachschlagen Feldgr e Format Eingabeformat Beschriftung Standardwert G ltigkeitsregel G ltigkeitsmeldung Eingabe erforderlich Leere Zeichenfolge Indiziert Unicode Kompression IME Modus IME Satzmodus Smarttags so Ort Celle Nein Nein Nein Nein Keine Kontrolle Keine Ein Prim rschl ssel der aus mehreren Feldern besteht erfordert nur dass die Kombination der Werte aller Prim rschl sselfelder von der Kombination der Werte aller Prim rschl sselfelder aller anderen Datens tze verschieden ist Einzelne Prim rschl sselfelder d rfen also denselben Wert beinhalten Fremdschl sselbeziehungen REFERENCES werden ber die Beziehungsan sicht erzeugt Die Tabellen ndern ALTER TABLE 8 4 Die Tabellen ndern ALTER TABLE Wir haben jetzt Tabellen angelegt Die Datenbank steht Es k nnen aber immer Situationen entstehen die nderungen der Datenbankstruktur erfordern
85. FROM DE Streng genommen k nnten Sie also auf IN praktisch verzichten es ist aber recht beliebt da es zumeist leichter zu verstehen ist als die entsprechenden Abfragen mit ANY oder ALL Beachten Sie dass jede Abfrage auf Gleichheit oder Ungleichheit sehr exakt formuliert werden muss So d rfen bei alphanumerischen Werten keine f h renden oder folgenden Leerzeichen enthalten sein verwenden Sie TRIM oder eine hnliche Funktion und die Gro und Kleinschreibung ist unter Umst n den ebenfalls zu beachten verwenden Sie UPPER LOWER oder eine hnliche Funktion Bei numerischen Werten sind zumeist nur ganzzahlige Werte sinnvoll da alle anderen Angaben immer die Gefahr kleiner Rundungsdifferenzen oder unter schiedlich genauer Angaben beinhalten Gegebenenfalls sollten Sie mit den entsprechenden Rundungsfunktionen arbeiten W hrend bei IN auf die Gleichheit von Werten gepr ft wird erfordert EXISTS nur die Existenz mindestens eines Datensatzes in der Unterabfrage der eine bestimmte Bedingung erf llt Es wird also wiederum mit der Unterabfrage Unterabfragen mit IN und EXISTS eine Menge von Datens tzen ermittelt und gepr ft ob mindestens einer die ser Datens tze eine Bedingung erf llt Sie wollen feststellen zu welchen Kursthemen bereits Kurse angeboten wer den Dazu ermitteln Sie eine Liste aller Kursthemen zu denen bereits min destens ein Kurs existiert SELECT kt kursthema kt Kursbeschreibung FROM tbKursthema
86. FROM artikel kunden k WHERE k nachname LIKE w ORDER BY 1 Die Ergebnisse der beiden Abfragen sind in Abbildung 11 4 und Abbildung 11 5 dargestellt Sie sehen dabei auch dass sich das DISTINCT auch auf Dup likate aus einem einzelnen SELECT bezieht denn w hrend das Duplikat Petra Winter aus der UNION der beiden Schemata entstanden ist war Peter Weiss schon innerhalb der Kursdatenbank ein Duplikat FAMILIENNAME VORNAME Weiss Peter Weiss Karin Weiss Peter Wieckenberg Peter Winter Petra Winter Petra in m Di 6 rows returned in 0 00 seconds FAMILIENNAME VORNAME Weiss Karin Weiss Peter Wieckenberg Peter Winter Petra m art 4 rows returned in 0 00 seconds Wird weder ALL noch DISTINCT angegeben gilt in den meisten Systemen der Standardwert DISTINCT In Oracle wie in MS Access darf das Schl sselwort DISTINCT berhaupt nicht verwendet werden der UNION Operator ist ohne zus tzliche Angabe von ALL automatisch DISTINCT UNION ist in den meis ten Datenbanksystemen realisiert im Gegensatz zu den jetzt zu besprechen den Operatoren INTERSECT und EXCEPT MINUS die von den hier besprochenen Systemen in der Oberfl che zurzeit berhaupt nur Oracle bereitstellt Die Schnittmenge INTERSECT 11 3 Die Schnittmenge INTERSECT hnlich wie bei der Erstellung der Vereinigungsmenge zweier SELECT Anweisungen kann mit der Anweisung INTERSECT die Schnittmenge zweier SELECT Anweisungen ermittelt
87. GROUP BY Klausel GROUP BY kb KID Abbildung 4 35 Einzeldatens tze der Tabelle Kursteilnehmer Listing 4 43 Einstufig gruppierte Liste der besuchten Kurse Abbildung 4 36 Ergebnis der SELECT Anweisung mit GROUP BY Klausel 135 WM karitea Gruppendatensatz Gruppierungsfelder Listing 4 44 Anzahl der Kursteilneh mer gruppiert je Kurs Mehrstufige Gruppierung 136 Mit SQL Daten abfragen SELECT die dazu f hrt dass die Datens tze so sortiert werden dass alle Datens tze mit demselben Wert im Datenfeld kb KID hintereinanderstehen Dann wird aus diesen Datens tzen ein einziger neuer virtueller Datensatz erstellt der auch als Gruppendatensatz bezeichnet wird Ein Gruppendatensatz repr sentiert also immer eine Gruppe von einzelnen Datens tzen die sonst in mehreren Zeilen getrennt dargestellt werden Die Gruppe definiert sich wie sonst auch ber mindestens eine Gemeinsamkeit hier ber einen gleichen Wert in einem bestimmten Datenfeld Ein Feld hier die KID enth lt also f r alle Einzeldatens tze einer Gruppe denselben Wert Dies bezeichnet man als Gruppenbildung oder Gruppierung die durch die GROUP BY Klausel definiert wird GROUP BY feldname feldname F r die Gruppierung d rfen nur Felder verwendet werden die in den durch die FROM Klausel ausgew hlten Tabellen vorhanden sind das hei t dass die Gruppierungsfelder nicht zwingend auch angezeigt werden m ssen Nachdem eine Gruppierun
88. In diesem Fall ndern sich auch die Schl ssel und viele andere Aspekte Die Modellierung der Zeit in Form einer Historie stellt besondere Anforderun gen an eine Datenbank die hier nicht weiter vertieft werden sollen 1 1 1 n und n n Beziehungen Tabelle 7 2 Grundtypen von Beziehungen 229 WM karitez 230 Kardinalit t Definition Beispiele Abbildung 7 3 Lieferant liefert Artikel Zuordnung der Kardinalit ten Datenbanken modellieren Abschlie end verdient hier noch das Konzept der Kardinalit t Erw hnung hat es doch unmittelbaren Einfluss auf unser sp teres Datenbankschema insbesondere auf NULL Werte in den Fremdschl sseln und damit auf die Nut zung von INNER JOIN und OUTER JOIN Die Kardinalit t gibt an wie viele Auspr gungen einer Entit t an einer Beziehung minimal und maximal beteiligt sein k nnen Es wird dabei das Minimum und das Maximum angegeben Das Maximum kennen wir schon von den Grundtypen es ist im Allgemeinen 1 oder n also maximal einer oder viele Das Minimum gibt zus tzlich an wie viele Auspr gungen einer Entit t mindestens zu einer Auspr gung der anderen Entit t geh ren m s sen Es wird also nicht nur das Maximum sondern auch das Minimum ange geben Die g ngigen Werte f r das Minimum sind E 0 keiner E 1 einer Die Schreibweise ist Entit t1 Minimum Maximum Beziehung Minimum Maximum Entit t2 Betrachten wir die folgenden Beziehungen PERSON1 0 1 ist verh
89. Informationen eines Index werden zumeist in sogenannten B B umen gespeichert Ein solcher B Baum beruht auf den aus der Graphen theorie stammenden B umen Die Indexeintr ge eines Baumes sind f r unse ren Index ort ausschnittsweise in Abbildung 14 3 dargestellt Listing 14 5 Nur die zweite Abfrage erlaubt eine Indexverwendung 375 arite 14 376 Abbildung 14 3 Baum f r einen Index Mit SQL Datenbanken betreiben und optimieren PeredyCelle29221 Kl tzerCelle29221 SchulzeWinsen29308 f RuppertBergen29301 WeissHannover30529 WeissBraunschweig38134 WeissHannover30529 WinterHermannsbur29320 Sie sehen dass jeder Knoten im Baum einem Eintrag der Indextabelle ent spricht Der Eintrag der zugeh rigen physischen ID kann dort ebenfalls gespeichert sein Ist jetzt ein Eintrag wie WeissHannover gesucht wird oben in der Wurzel des Baums eingestiegen Durch Vergleich mit dem Ein trag im Baum kann entschieden werden ob der gesuchte Eintrag links oder rechts im Unterbaum liegen muss da links alle kleineren und rechts alle gr Beren Eintr ge gem der verwendeten Sortierung liegen Aus dem Vergleich WeissHannover gt PeredyCelle ist eindeutig entscheidbar dass der gesuchte Eintrag im rechten Unterbaum liegt Es wird also danach mit SchulzeWinsen29308 verglichen Wieder muss der gesuchte Eintrag rechts liegen Hier wi
90. Kurse die alle die KID der bisherigen Kurse mit dem Zusatz Neuer Kurs haben die Kurskennung und ein Beginn datum das jeweils 7 Tage nach dem bisherigen Beginndatum liegt Sie k nnen zur Kontrolle den bisherigen Kursbeginn und den Wochentag hinzuf gen 5 6 4 4 5 6 5 Datentypumwandlungsfunktionen Casting Daten werden in verschiedenen Formaten gespeichert im Wesentlichen als CAST alphanumerische Zeichenketten String Text als Zahlen ganzzahlig Gleit komma als Zeitangabe Uhrzeit Datum Timestamp Intervall oder als bin res Objekt BLOB OLE Viele Funktionen funktionieren innerhalb dieser Datentypklassen F r die Kombination Bearbeitung und gerade f r die Aus gabe m ssen aber auch Umwandlungen zwischen den Datentypen vorge nommen werden k nnen man spricht von Casting Die Standardfunktion zur Umwandlung von Datentypen hei t CAST mit der Syntax CAST Ausdruck AS Datentyp Dabei wird ein beliebiger Ausdruck in den angegebenen Datentyp umge wandelt sofern dies m glich ist So kann eine Zahl in einen Text umgewandelt werden SELECT CAST Stundensatz AS CHAR FROM tbDozent In der Praxis tritt die CAST Funktion allerdings selten auf Dies liegt auch daran dass viele Datentypkonvertierungen implizit also automatisch ent sprechend dem Kontext durchgef hrt werden In Listing 5 17 sind zwei SQL Anweisungen angegeben die in MySQL identische Resultate erzeugen SELECT CONCATCCAST Stundensatz AS CHAR
91. L nge der einzelnen Beschreibungen in Form der Zeichenanzahl ermittelt werden Bei der Gele genheit soll gleichzeitig ermittelt werden in welchen Beschreibungen der Name Excel auftaucht da diese Kurse eventuell umbenannt werden sollen Dies k nnte mit der SELECT Anweisung in Listing 5 13 MySQL geschehen Listing 5 13 SELECT Analyse der L nge der LENGTH Kursbeschreibung Textl nge Kursbeschreibungen POSITIONC Excel IN Kursbeschreibung AS Excel vorhanden Kursbeschreibung FROM tbKursthema Abbildung 5 13 Ergebnis der Anweisung Textl nge Excel vorhanden Kursbeschreibung aus Listing 5 13 174 0 Windows bietet die Grundlage f r alle modernen und anwe 169 0 Der Kurs wendet sich an PC Benutzer die schon etwas Erf 148 0 wie schaffe ich Ordnung auf dem PC wie k nnen Progra 121 0 Einstieg in die Textverabeitung mit Word Grundlegende Fu 79 0 Einstieg in das Datenbankmanagmentsystem Access Tab 115 41 Einstieg in die Tabellenkalkulation mit Excel Grundfunktion 92 0 Vertiefung der Arbeit mit MS Access Komplexe Abfragen u 59 0 Entwurf relationaler Datenbanken und Umsetzung in MS A 58 0 Programmierung von Anwendungen auf der Basis von MS 90 0 Vertiefung des Umgangs mit word Mehrspaltige Formate 73 28 Vertiefung des Umgangs mit Excel Funktionen einschlie li Sie sehen vorn die Zeichenanzahl die mit der Funktion LENGTH ermittelt wurde und dann die erste Position des Vorkommens von Excel
92. Mehrwertsteuertabelle besteht aus zwei Feldern der Art des Mehrwert steuersatzes und dem tats chlichen Mehrwertsteuersatz mwst_satz als Angabe in Prozent mwst mwst_art ENUMC voll erm ssigt kein mwst_satz INT Ein typischer Datensatz w re hier voll 19 Die Kundentabelle besitzt die Mandantennummer mid und die Kunden ID kid als gemeinsamen Prim rschl ssel weil die Kunden nicht ber die Man danten die drei Firmen eindeutig sind kunden mid INT kid VARCHAR 50 firma VARCHAR 50 anrede VARCHAR 10 nachname VARCHAR 50 vorname VARCHAR 30 rechnungsadresse VAR CHAR 255 strasse VARCHARC50 PLZ CHARC5 ort VARCHARC50 geburts datum DATE Ein typischer Datensatz w re hier 1 1 Frau Sibum Jutta Hannoversche Stra e 6 29223 Cel1le 02 04 65 Warengruppen sollen die einzelnen Artikel des Sortiments gruppieren Die Warengruppe dient der Speicherung der Nummer und der Bezeichnung aller Warengruppen warengruppe kennziffer INT warengruppe VARCHAR 255 Ein typischer Datensatz w re hier 1 Papier und Papierprodukte Der Artikel beschreibt das einzelne Angebot Die Preise sind als DECIMAL rea lisiert um eine stellengenaue Speicherung zu erm glichen Hier werden auch Beziehungen durch Fremdschl sselfelder realisiert Das Feld wgknz stellt die Verbindung zur Warengruppe her Mit dem Feld mwst_art wird die Verbindung zur Mehrwertsteuer realisiert Beispiel 239 W karitez 240 Redundanz Da
93. MyISAM und InnoDB Der wesentliche Unterschied ist dass MyISAM zumeist schnellere Datenzugriffe bietet daf r aber keine Transaktionen also in sich abge schlossene Prozessschritte erlaubt Solange Sie nur allein in der Datenbank arbeiten oder zumindest nur ein Benutzer ndernd auf die Datenbank zugreift sind Transaktionen weitgehend berfl ssig Wenn Sie also MySQL nur zu bungszwecken f r dieses Buch einrichten wollen und die Transak tionsbeispiele in Kapitel 13 f r Sie nicht relevant sind reicht die Nutzung von MyISAM aus im anderen Fall ist es besser die Datenbank von vornher ein f r Transaktionen vorzubereiten Wenn Sie TRANSACTIONAL DATABASE ONLY ausw hlen stellt dies sicher dass die Daten gleich in InnoDB verwaltet werden k nnen F r unsere relativ kleinen Datenmengen sollten in keinem Fall Probleme mit der Performance entstehen Alternativ k nnen Sie die MULTIFUNCTIONAL DATABASE verwenden Dann blei ben alle Optionen offen Sie m ssen dann aber die Verwendung sp ter selbst steuern was unter Umst nden Komplikationen mit sich bringt Im Anschluss an die Wahl der Multifunctional Database m ssen Sie das Standardsystem f r die physische Dateiverwaltung InnoDB oder MyISAM ausw hlen Wenn Sie wirklich mit Transaktionen arbeiten wollen sollten Sie InnoDB w hlen Sonst ist nur noch der Pfad f r die Speicherung festzulegen Das n chste Auswahlfenster bestimmt die Anzahl gleichzeitiger Benutzer der Datenbank
94. Nur in sehr seltenen F llen muss bereits hier ein k nstlicher Schl ssel vergeben werden Sollten die Anwender einen neuen Schl ssel w nschen weil dies bei der Gestaltung der Abl ufe zu mehr Klarheit f hrt kann dieser nat rlich erg nzt werden Der Schl ssel entspricht dann einer Anwenderanforderung Es k nnen f r eine Entit t mehrere Schl ssel existieren die dann als Schl s selkandidaten bezeichnet werden So kann ein Haus beispielsweise alternativ durch E Ort Stra e und Hausnummer die Gemeinde und die Grundbucheintragung oder E die geografische L nge und Breite identifiziert werden In solchen F llen muss die Entscheidung getroffen wer den welcher Schl sselkandidat als Prim rschl ssel verwendet werden soll Der Prim rschl ssel erm glicht die eindeutige Identifizierung einer Entit t dadurch dass sein Wert in einer Entit tsmenge entspricht der Menge der Datens tze nur ein einziges Mal vorkommt Eine Entit t kann mehrere Schl sselkandidaten besitzen die f r bestimmte Abfragen oder Sortierungen ben tigt werden aber nur einen Prim rschl ssel Die Situation ist also ein fach Alle m glichen Kombinationen eindeutiger Attribute sind Schl ssel kandidaten Ein Schl sselkandidat wird als Prim rschl ssel ausgew hlt Alle anderen Schl sselkandidaten sind Alternativschl ssel In der grafischen Darstellung werden Prim rschl ssel durch unterstrichene Attribute markiert 7 2 3 Dom nen Eine Dom
95. Platzhalter f r die restlichen Namensbestandteile Wir hatten das bereits im Rahmen des Kapitels 4 angesprochen als es um die Sortierung der Text felder im Rahmen der SELECT Anweisung ging Das Ergebnis kann wie in Abbildung 8 3 aussehen c Eingabeaufforderung mysql uroo i latini_ger latini i latini_swe _ci i latini latini_danish_ci i latini i latini_german2_ci i latini i latini_bin i latini i latini_general_ci i latini i latini_general_cs i latini i latini_spanish_ci latini 4 4 4 8 rows in set 8 88 sec mysql gt Grunds tzlich wird zwischen drei Sortierreihenfolgen unterschieden m Bin re Sortierung _bin Es wird nach der Nummer des Zeichens im Zei chensatz sortiert Hat beispielsweise der Punkt eine kleinere Nummer als das A wird der Text com vor A Team sortiert Hier ist es wich tig die genaue Codierung des verwendeten Zeichensatzes zu beachten m Alphabetische Sortierung mit Beachtung der Gro Kleinschreibung _cs auch als case sensitiv bezeichnet m Alphabetische Sortierung ohne Beachtung der Gro Kleinschreibung case insensitiv _ci Hier gibt es dann l nderspezifische Standards In Deutschland wird dies in der DIN Norm 5007 festgelegt Die beiden g ngigen deutschen Sortierschemata latinI_germanl_ci und latin1_german2_ci entsprechen den in der DIN 5007 festgelegten Sortierun gen Der wesentliche Unterschied zwischen den beiden So
96. Rechte zugewiesen 12 2 Benutzer und Benutzergruppen Damit die Anwender von der Datenbank unterschieden werden k nnen m ssen zun chst Benutzer eingerichtet werden Unter Benutzern sind dabei Konten zu verstehen die dann verschiedene Rechte erhalten Benutzer und Benutzergruppen a w 112 p Soll beispielsweise ein Vertriebsmitarbeiter Meier k nftig die Personen der Beispiel Kursdatenbank pflegen d rfen so muss er sich identifizieren k nnen Daf r wird zun chst der Benutzer meier selbst erzeugt CREATE USER meier Allgemein wird ein Benutzer also mit einer CREATE USER Anweisung erzeugt Dieser Identifikation wird im Normalfall eine Authentifikation mit einem Passwort hinzugef gt CREATE USER benutzername IDENTIFIED BY PASSWORD passwort CREATE USER benutzername IDENTIFIED BY PASSWORD passwort y Um eine bessere Einbettung der Datenbank in ein gesamtes Anwendungs system zu erlauben bieten die meisten Systeme dar ber hinaus eine externe Authentifikation beispielsweise ber einen Betriebssystemmechanismus oder ein anderes System an Mit SQL3 ist das Konzept der ROLE also der Benutzerrolle oder Benutzer Rollen gruppe eingef hrt beziehungsweise erheblich erweitert worden Die Grundi dee ist dabei die aus Unternehmen bekannte Trennung zwischen einem kon kreten Mitarbeiter und der Stelle die er im Unternehmen besetzt auch auf die Informationen zu bertragen die dieser Stelle zur Verf gung gestellt w
97. Rechte an dem VIEW vergeben werden Betrachten wir dazu ein Beispiel Der Benutzer stolze ist der verantwortliche Kursbetreuer f r die Zahlungen der Teilnehmer des Kurses CE23 Er soll daher zun chst das Recht bekommen die Daten aller Kursteilnehmer einzu sehen Um seinen Zugriff auf die Daten des Kurses CE23 einzuschr nken wird eine entsprechende wHERE Klausel ben tigt Wir erzeugen daf r wie derum einen VIEW TeilnehmerCE23 auf die Tabelle tbKursbesuche Anschlie Bend wird dem Benutzer stolze dann das Zugriffsrecht auf diesen VIEW ein ger umt CREATE VIEW TeilnehmerCE23 TeilnehmerID Zahlung AS SELECT KTID GezahlterBetrag FROM tbKursbesuche WHERE KID CE23 GRANT SELECT ON TeilnehmerCE23 TO stolze Tats chlich spielt diese Vorgehensweise gerade bei gr eren Systemen eine wichtige Rolle da hier vorwiegend auf VIEw gearbeitet wird Der VIEW wird als gezielte Sicht f r einen Benutzer oder eine Benutzergruppe erzeugt Daher ist es naheliegend auch die Berechtigungen f r diese Benutzer an den VIEW zu kn pfen Am Beispiel von MySQL k nnen Sie auch gut sehen wie einzelne SQL Befehle in der praktischen Datenbankentwicklung gerade in Hinsicht auf die Berechtigungen erweitert wurden VIEW als Zugriffschtz WW MW A p CREATE OR REPLACE ALGORITHM UNDEFINED MERGE TEMPTABLEY DEFINER benutzername CURRENT_USER SQL SECURITY DEFINER INVOKER Y VIEW viewname feldnamenliste AS SE
98. Reihe von Informationen abfragen k n nen beispielsweise wann welcher Kunde welche Waren gekauft hat welche Ums tze man mit welchem Artikel macht oder wie hoch die Lagerbest nde sind Diese Beschreibung soll die Grundlage f r die Entwicklung einer kleinen Beispieldatenbank bilden die schrittweise umgesetzt wird Die Attribute sind nicht genau definiert und werden im Rahmen der Modellierung sinngem erg nzt Die Umsetzung in ein ER Modell beginnt mit der Suche nach Entit ten Dazu werden zun chst die Substantive einer genaueren Betrachtung unterzogen Dazu sind diese im folgenden Text hervorgehoben Das Unternehmen B roFix handelt mit einem breiten Sortiment f r den B robedarf Es m chte eine Datenbank aufbauen die ihm Auskunft ber Einkauf und Verkauf verschiedener Artikel seines Sortiments gibt B roFix besteht aus zwei Firmen der B roFix KG und der B ro Versand GmbH Die B roFix KG betreibt mehrere Ladengesch fte w hrend die B ro Versand GmbH ihre Kunden im Versandhandel beliefert Zus tzlich hat sie in der Nachbarstadt noch die Paul und Weiss B robedarf GmbH bernommen die dort mehrere Gesch fte betreibt B roFix m chte eine gemeinsame Daten bank f r die drei Firmen betreiben Alle Kunden einschlie lich der Versand kunden bilden einen gemeinsamen Kundenstamm Die Waren sind verschie denen Warengruppen zugeordnet Jeder Artikel hat einen von mehreren vordefinierten Mehrwertsteuers tzen Die Kunden erteilen
99. SQL Fenster zur Verf gung bungen zu CREATE TABLE mit Unterabfragen bungen Erstellen Sie f r die folgenden Aufgaben jeweils eine SELECT Anweisung 1 Erstellen Sie eine neue Tabelle warengruppe9 die alle Artikel mit allen re levanten Angaben beinhaltet die zur Warengruppe 9 geh ren U10 1 1 2 Erstellen Sie eine neue Tabelle endkundenliste die eine Preisliste f r die Endkunden beinhaltet W hlen Sie dazu alle relevanten Felder aus der Tabelle artikel aus und berechnen Sie den Endpreis der ausgehend von einem Nettolistenpreis die Mehrwertsteuer aufschl gt 10 1 2 3 Erstellen Sie eine neue Tabelle Kunden_BueroFix die nur die Kundennum mer den Namen und die Anschrift der Kunden der B roFix KG mid 1 beinhaltet 10 1 3 4 Nutzen Sie jetzt die Kursdatenbank Erzeugen Sie eine Tabelle unbearbei teteThemen aus der Tabelle tbKursthema mit Thema Kursbeschreibung und geplanter Dauer 10 1 4 5 Erzeugen Sie eine Tabelle eingesetzterDozent aller Dozenten aus tbDo zent von Dozenten die mindestens einen Kurs haben Die Tabelle soll aus der Tabelle tbDozent die Felder DID Beschaeftigungsbeginn und Stunden satz aus der Tabelle tbPerson den Familiennamen und Vornamen sowie zu s tzlich aus der Tabelle tbKurs die Felder Kurskennung KursdauerStunden Kursbeginn und Kursende beinhalten 10 1 5 319 Karite 10 Beispiel Listing 10 4 Erstellen einer Arbeitstabelle Listing 10 5 nderung des
100. SQL aus C Programmen aufgerufen werden kann Sie k nnen die Entwicklungskomponenten zus tzlich ausw hlen wenn Sie planen mit MySQL auch Anwendungen zu entwickeln Schnitt stellen f r andere Programmiersprachen existieren in gro em Umfang m s sen aber getrennt installiert werden Wollen Sie keine eigenen Programme schreiben k nnen Sie darauf verzichten und sp ter bei Bedarf nachinstal lieren In jedem Fall egal welche Konfigurationskomponente Sie gew hlt haben wird nach der Best tigung die eigentliche Installation durchgef hrt Nach Abschluss der Installation und vor Beginn der Konfiguration erscheint der Hinweis auf die kommerzielle Version des Enterprise Servers sowie weitere Informationsquellen zu MySQL siehe Abbildung 3 5 Abbildung 3 4 Benutzerspezifische Konfiguration 43 5j Kapitel3 Die Beispieldatenbanken Abbildung 3 5 Best tigung der Installation 44 Konfiguration Abbildung 3 6 Basiskonfiguration MySQL Enterprise A MySQL Enterprise subscription is the most comprehensive offering of MySQL database software services and support to ensure your M U saoL business achieves the highest levels of reliability security and uptime a An Enterprise Subscription indudes 1 The MySQL Enterprise Server The most reliable secure a version of the worlds most popular open source database 2 The MySQL Monitoring and Adviso database assistant Nach einem weiteren Fenster beginnt di
101. Server Manager auftauchen Er dient der Kontrolle des Firebird Servers rt WW WO F Abbildung 3 39 io Setup Firebird Datenbank Server 2 0 CS Konfiguration der Firebird Installation Zus tzliche Aufgaben ausw hlen Welche zus tzlichen Aufgaben sollen ausgef hrt werden w hlen Sie die zus tzlichen Aufgaben aus die das Setup w hrend der Installation von Firebird Datenbank Server 2 0 ausf hren soll und klicken Sie danach auf weiter Firebird Server starten als O Server als Anwendung starten Server als Dienst starten Firebird nach jedem Rechnemeustart automatisch starten V Installieren eines Symbols im Infobereich der Taskleiste C Die Firebird Client Bibliothek ins lt system gt Verzeichnis kopieren Die Client Bibliothek als GDS32 DLL ins lt system gt Verzeichnis kopieren Abbildung 3 40 i Setup Firebird Datenbank Server 2 0 Abschluss der Installation Beenden des Firebird Datenbank Server 2 0 Setup Assistenten Setup hat die Installation von Firebird Datenbank Server 2 0 auf Ihren Computer abgeschlossen Die Anwendung kann ber die installierten Programm Verkn pfungen gestartet werden Klicken Sie auf Fertigstellen um das Setup zu beenden Eertigstellen Firebird bietet hnlich wie MySQL nicht direkt eine grafische Benutzerober fl che Allerdings gibt es wieder wie bei MySQL Werkzeuge anderer Anbie ter Eines dieser Werkzeuge der Firma IB die BOConsole ist ebe
102. Sie bei der Ent wicklung und dem Test der SQL Anweisung wenn m glich zun chst auf die Sortierung verzichten Entsprechend gilt sp ter auch f r produktive SQL Anweisungen dass bei einer Sortierung gro er Datenbest nde zus tzliche Performance berlegungen notwendig sind SELECT bungen zur ORDER BY Klausel Erstellen Sie f r die folgenden Aufgaben jeweils eine SELECT Anweisung 1 Erstellen Sie auf Basis der Tabelle tbPerson eine Liste aller Personen mit Familienname Vorname und Geburtsdatum bei der die j ngsten Personen oben stehen U4 3 1 2 Ermitteln Sie aus der Tabelle tbPerson eine Liste mit beiden Namen Post leitzahl Ort und Stra e die nach Orten und innerhalb der Orte nach Postleitzahlen jeweils aufsteigend sortiert ist Qualifizieren Sie die Felder mit dem Tabellennamen als Alias p 4 3 2 3 Ermitteln Sie aus der Tabelle tbKursthema alle Kurse mit Kursthema und DauerPlan wobei diese so sortiert sein sollen dass die Kurse mit der l ngsten geplanten Dauer oben stehen Die geplante Dauer soll wieder unter dem Alias geplante Kursdauer aufgelistet werden Probieren Sie ob Sie das Alias zur Sortierung verwenden k nnen 4 3 3 4 Ermitteln Sie aus der Tabelle tbKursbesuche eine Liste aller Kursbesuche mit allen Datenfeldern die zun chst aufsteigend nach der KID sortiert ist Innerhalb eines Kurses soll aufsteigend nach Zahlweisen und inner halb der Zahlweisen so sortiert werden dass die h chsten Raba
103. Sortieren Sie die Liste aufsteigend nach dem Kursbeginn 4 5 1 3 4 Ermitteln Sie in der Tabelle tbKursthema alle eindeutigen Kursthemen in deren Kursbeschreibung die Begriffe Access Excel oder Datenbank vorkommen und die tats chlich 40 Stunden dauern 4 5 1 4 4 5 2 JOIN ber mehrere Tabellen Ein JOIN betrifft zun chst stets zwei Tabellen oder zwei Kopien einer Tabelle die miteinander in Verbindung gebracht werden Nat rlich k nnen auch mehr als zwei Tabellen miteinander kombiniert werden wie Abbildung 4 26 zeigt Wir verbinden jetzt drei und mehr Tabellen ber mehrere JoIN Verkn pfun gen Damit k nnen wir beliebig viele Tabellen einer Datenbank in einer SELECT Anweisung verwenden und haben vollen Zugriff auf die in einer Datenbank enthaltenen Informationen Es soll beispielsweise zu einem Kurs eine Liste der Teilnehmer mit Adressen und Kurskennung erstellt werden Daf r m ssen die drei Tabellen tbPerson tbKursbesuche und tbKurs miteinander in Beziehung gebracht werden Die Kurskennung kann letztlich nur aus der Tabelle tbKurs ermittelt werden Die Adressdaten stehen in tbPerson Die Tabelle tbKursbesuche verbindet beide Tabellen miteinander Schr nken wir das Ergebnis noch darauf ein dass eine Liste mit Kurskennung Familienname und Vorname des Teilnehmers von Kurs CE23 erstellt werden soll kann das als SELECT Anweisung wie folgt umge setzt werden SELECT k Kurskennung p Familienname
104. Stundensatzes auf den Durchschnittsstundensatz Abbildung 10 3 Tabelle gehaltsanpassung 320 nach dem UPDATE Unterabfragen in der DDL und DML 10 2 UPDATE mit Unterabfragen Die nderung von Daten mithilfe der UPDATE Anweisung l sst sich ebenfalls mit Unterabfragen sehr flexibel gestalten Wir wollen dazu zun chst allen Dozenten deren Stundensatz bisher geringer als der Durchschnitt war einen Stundensatz bezahlen der genau dem Durchschnitt entspricht Um dabei nicht die Originaldaten zu zerst ren legen wir zun chst eine neue Tabelle an Dabei greifen wir wiederum auf ein CREATE TABLE mit Unterabfrage zur ck CREATE TABLE gehaltsanpassung AS SELECT FROM tbDozent In MS Access und wahlweise openBase k nnen Sie eine solche Tabelle stattdessen auch ber die Standarddatenbankoberfl che kopieren Jetzt soll der durchschnittliche Stundensatz ermittelt und dann in den Datens tzen als neuer Stundensatz verwendet werden die bisher einen nied rigeren Stundensatz aufweisen Dazu wird in der WHERE Klausel mit einer Unterabfrage der durchschnittliche Stundensatz ermittelt und darauf basie rend die Datens tze ausgew hlt die ge ndert werden m ssen Dann wird in der SET Klausel wiederum mit einer in diesem Fall identischen Unterab frage der zu verwendende Stundensatz ermittelt und dem Feld Stundensatz in den ausgew hlten Datens tzen zugewiesen UPDATE gehaltsanpassung g SET g Stundensatz SELECT AVG d1 Stunden
105. Susanne Karmann Thomas Kl tzer Karl Weiss Karin Weiss Peter Meier Kathrin Schmidt Karl M ller Claudia Lisewski Bernd Martens Melanie Schlachter Dieter Peredy Helmut Ruppert Nicola Sander Cromberg J rg Schulze Tanja Winter Petra Plate Ulrich Magerkurth Melissa Abbildung 1 42 SQL Anweisung in der SQL Ansicht Eci Abbildung 1 43 Ergebnisdatens tze mit SQL Anweisung markiert 409 5 Anhang A Anhang Benutzung der Datenbanksysteme Sie sehen dass openBase neben den Ergebnissen auch die SQL Anweisung beziehungsweise bei eingeschalteter Entwurfsansicht auch diese dar stellt Abbildung A 44 Benennung der Abfrage Speichern unter Name der Abfrage Sie k nnen die erstellte Abfrage jetzt beliebig ndern und erg nzen Sie l sst sich jeweils wieder erneut ausf hren und somit auf die gew nschten Ergeb nisse testen Speichern Sie die Abfragen dieses Buches unter den Namen die Ihnen sinnvoll erscheinen wobei Sie auch die Seitennummern mit einbezie hen k nnen Haben Sie eine Abfrage einmal gespeichert wird sie in der bersichtsliste des Datenbankfensters dargestellt Benennen Sie sie beispielsweise mit Test abfrage erscheint dieser Name im Fenster wie in Abbildung A 45 darge stellt Abbildung A 45 Datenbankinster mit Abfrage E Testabfrage Eine Besonderheit von openBase ist dass rechts neben dieser Liste das Ergebnis der Abfrage dynamisch eingeblendet werden ka
106. Sys temen werden sie nicht mit gr ter Priorit t behandelt Im Gegenteil oft werden kostenlose oder g nstige Sparversionen auch gr erer Systeme gerade ohne diese Konzepte angeboten um bei breiterem Einsatz dann ent sprechende Lizenzen f r die kompletten Datenbanksysteme anbieten zu k n 341 arite 12 342 DROP USER RENAME USER CREATE ROLE Rolle Benutzer DROP ROLE Benutzer Rechte und Zugriffsschutz nen Entsprechend sind diese Konzepte auch in den in diesem Buch als Beispiele verwendeten Systemen nicht allzu umfangreich und recht unter schiedlich implementiert 12 3 Benutzer entfernen DROP USER Entsprechend dem Vorgehen bei Schemata Tabellen und anderen Datenbank objekten k nnen auch Benutzer mit einer DROP Anweisung entfernt werden DROP USER benutzername CASCADE Der Zusatz CASCADE f hrt dazu dass auch alle Informationen die mit dem Benutzer verbunden sind in der Datenbank gel scht werden Dies ist bei Benutzern die zu Testzwecken eingerichtet werden sinnvoll sollte sonst aber mit gro er Vorsicht gehandhabt werden Teilweise bieten Datenbanken auch die M glichkeit Benutzer umzubenen nen was den Vorteil hat dass die Rechte erhalten bleiben MySQL bietet hier beispielsweise RENAME USER altername TO neuername 12 4 Rollen einrichten Die Idee des Rollenkonzeptes ist es dass der Benutzer ausschlie lich zur Identifikation und Authentifikation eines Benutzers g
107. TABLE 317 in der FROM Klausel 313 korrelierte 312 mit ALL ANY 307 mit IN EXISTS 309 mit Vergleichsoperator 305 MS Access 315 Stichwortverzeichnis ae amp m synchronisierte 312 Syntax 304 verbundene 312 VIEW 295 Unterstrich 96 UPDATE 210 mit Unterabfrage 320 Syntax 212 UPPER 181 USING einfach 123 ber mehrere Felder 134 USING JOIN 123 UTC 161 V VALUES 201 VAR 143 VAR_POP 195 VAR_SAMP 195 VARBINARY 155 VARCHAR 154 VBA Funktionen 172 VIEW 221 285 nderbar 294 als Abfrage 293 MERGE 292 updateable 294 Zugriffsschutz 354 W WHERE 105 126 142 146 147 155 203 Klausel 109 Syntax 112 WIDTH_BUCKET 179 314 Wildcard 111 WITH GRANT OPTION 344 Z Zeichensatz 102 155 Zeitstempel 161 261 ZEROFILL 157 429
108. Tupel Codegenerator Schreib Lesebefehlsfolge Technische Records Becovamaage a a B u Physischer Speicher Hauptpeicher Cache Dictionary Das Data Dictionary soll uns im Folgenden nicht so sehr besch ftigen son dern nur als Merkposten dienen wenn unklar ist wo bestimmte Informa tionen die wir eingeben bleiben liegen beziehungsweise woher die Daten bank sie kennt So werden beispielsweise alle Informationen die bei der Erzeugung einer Datenbank mit SQL Anweisungen CREATE angegeben wer den siehe Kapitel 8 im Data Dictionary gespeichert 23 W karite 24 Programm oder Oberfl che Parser Autorisierung Update Query SQL der Standard relationaler Datenbanken SQL Befehle k nnen prinzipiell auf zwei Wegen an die Datenbank gelangen Zum einen ber eine Programmierschnittstelle bei der die SOL Anweisun gen in eine andere Programmiersprache wie C C Java Pascal COBOL Basic PHP Perl Ruby oder eine der vielen anderen Sprachen f r die Schnittstellen existieren eingebettet werden Zum anderen k nnen die Anweisungen direkt ber eine mitgelieferte und je nach Datenbanksystem mehr oder weniger grafische Oberfl che eingegeben werden Zudem gibt es f r praktisch alle Datenbanken weitere Oberfl chenwerkzeuge die von Drit ten entwickelt und kostenfrei oder gegen Lizenzgeb hr einen komfortable ren Umgang mit der D
109. Wenn Sie selbst der Datenbankadministrator sind werden Sie dies sp testens dann nachvollziehen k nnen wenn Sie bereits eine Reihe von SELECT Befehlen entwickelt und unter Umst nden in andere Anwendungen oder Programme eingebunden haben Ein VIEW ist eine spezielle Sicht auf die Datenbank die weitgehend wie eine Tabelle verwendet werden kann Ein VIEw dient bestimmten Anwendern oder Programmen zum Zugriff auf die Daten in vorgefilterter Form Die SQL Syn tax zur Erzeugung eines VIEW lautet CREATE VIEW viewname feldname feldname AS SELECT Select Klausel Eine Sicht auf die Kunden des Mandanten 1 die B roFix KG kann als VIEW auf die Tabelle Kunden definiert werden siehe Listing 8 10 CREATE VIEW kundenBueroFix AS SELECT FROM kunden WHERE mid 1 Dabei wird vorausgesetzt dass alle Kunden der B roFix KG die Mandanten nummer mid 1 haben Ist ein VIEw einmal definiert kann er mit SQL Befehlen mit gewissen Ein schr nkungen wie eine Tabelle bearbeitet werden Im Gegensatz zu einer Tabelle enth lt ein VIEW aber keine physikalischen Daten sondern stellt die Benutzer und Programmsichten CREATE VIEW Daten selbst mithilfe einer SELECT Anweisung bereit Es gibt Einschr nkun gen wenn Daten in einem VIEW mit INSERT UPDATE oder DELETE ver ndert werden sollen Prinzipiell kann ein VIEw drei verschiedene auch kombinierbare Aufgaben erledigen 1 Auswahl von Feldern Spaltenselektion 2 Auswahl von
110. alle Datens tze sondern nur die gruppierten Datens tze SELECT p Familienname p Vorname t DID t Stundensatz FROM tbDozent t INNER JOIN tbPerson p ON t PID p PID GROUP BY t DID HAVING t Stundensatz gt AVG t Stundensatz oder SELECT p Familienname p Vorname t DID t Stundensatz FROM tbDozent t INNER JOIN tbPerson p ON t PID p PID INNER JOIN tbDozent t2 ON t2 PID p PID GROUP BY t2 DID HAVING t Stundensatz gt AVG t2 Stundensatz Eine Gruppierung ber alle Datens tze w re nur m glich wenn es ein Datenfeld g be dessen Wert in allen Datens tzen identisch ist Das ist aber kaum die Idee einer relationalen Datenbank Fassen wir also zusammen Immer wenn in mehreren Schritten zun chst eine Datenmenge ermittelt werden soll die selbst wieder Basis f r eine wei tergehende Abfrage ist ist eine Unterabfrage in Erw gung zu ziehen Unter abfragen d rfen in der wHERE Klausel zus tzlich zu bereits vorhandenen Beziehungen auftreten sodass sich folgende Syntax ergibt SELECT DISTINCTIALL ausdruck ausdruck FROM tabelle joinliste WHERE SELECT GROUP BY feldname feldname HAVING SELECT ORDER BY feldnamenliste ASCIDESCIY Unterabfragen mit Vergleichsoperatoren Sie sehen bereits an der Syntax dass analog zu der Verwendung in der WHERE Klausel auch eine Verwendung einer Unterabfrage in der HAVING Klau sel f r gruppierte Datens tze m glich ist So w r
111. alle Spalten beider Tabellen in die resultierende virtuelle Tabelle ein Dazu geh rt auch die Spalte kb KID die dann im zweiten JOIN mit der Tabelle tbKurs genutzt wird um den JOIN ber tbKursbesuche KID tbKurs KID durchf hren zu k nnen VIRTUELLe Tabelle Join tbKurs k INNER JOIN VIRTUELLe Tabelle ON kb KID k KID k KID VIRTUELLe Tabelle tbKurs ii Join tbPerson p INNER JOIN tbKursbesuche kb tbKursbesuche ON p PID kb KTID tbPerson kb KID kb KTID p PID Bleibt man bei der Vorstellung der virtuellen Tabellen kann man den JOIN ber drei Tabellen wiederum symbolisch darstellen wie in Abbildung 4 27 zu sehen Dabei k nnen Sie auch gut die Felder aus den verschiedenen Tabellen erkennen Die Darstellung zeigt zun chst die m gliche Kombina tion an In Abbildung 4 26 sehen Sie aber bereits dass der JOIN nacheinan der nicht gleichzeitig erfolgt Tats chlich ist die Reihenfolge in der die Tabellen miteinander verbunden werden f r das Ergebnis eines INNER JOIN nicht relevant f r dessen Performance kann sie aber entscheidend sein Tabellen miteinander verbinden JOIN Daher ist es wichtig wenn ein JOIN einmal funktioniert ber m gliche Opti mierungen nachzudenken tbKursbesuche KTID KID Fehltage Zeugnis Selbstzahler tbKurs Zahlweise Rabatt D oo tbPerson GezahlterBetrag Kurskennung KTHID PD m KursdauerStunden Familienname Kursbeginn Kursende Zer
112. alle anderen Transaktionen beendet wur den und ihre Sperren entsprechend aufgehoben wurden In der Praxis finden sich noch eine Reihe weiterer Sperren die Sie der Doku mentation des jeweiligen Datenbankmanagementsystems entnehmen k n nen Listing 13 2 Exklusive Sperre im SELECT mit anschlie endem Update Nicht exklusive Sperre Listing 13 3 Einf gen zweier Datens tze nach einer nicht exklusiven Sperre 363 Karite 13 R 364 Isolationslevel EAD UNCOMMITTED Tabelle 13 1 Transaktion mit Isolationsstufe READ UNCOMMITED Transaktionen Isolationslevel von Transaktionen Hinzu kommt der Isolationslevel der Transaktion Grunds tzlich sieht der SQL Standard vier Ebenen vor die eine steigende Trennung der Transaktion von der restlichen Datenbank beinhalten die Isolationslevel Im Wesentli chen beeinflusst der Isolationslevel die Art wie ge nderte Informationen f r die Transaktion selbst und f r andere Transaktionen sichtbar werden Die wesentlichen Isolationslevel sind E READ UNCOMITTED E READ COMITTED E READ REPEATABLE E SERIALIZABLE Der Isolationslevel kann entweder als Standard in der Konfiguration des Datenbankmanagementsystems eingestellt oder beim Start einer Transaktion angegeben werden In den meisten Systemen steht dazu die SQL Anweisung SET TRANSACTION zur Verf gung die neben dem Isolationslevel zumeist die Einstellung einer ganzen Reihe weiterer Eigenschaften einer Transaktio
113. anr INT NOT NULL anzahl INT DEFAULT 1 NOT NULL letzte_aenderung TIMESTAMP DEFAULT current_timestamp CONSTRAINT PKBESTPOS PRIMARY KEY mid bnr pos Mit der letzten Zeile wird ein Prim rschl ssel definiert der aus den drei Fel dern mid bnr und pos besteht was der Mandanten ID der Bestellnummer und der Bestellposition entspricht Die Integrit tsbedingung hat ber den Zusatz CONSTRAINT PKBESTPOS einen eigenen Namen bekommen Dieser Zusatz ist nicht zwingend aber praktisch wenn der CONSTRAINT sp ter anzu passen ist Das Ergebnis der obigen Anweisung k nnen Sie mit DESCRIBE bestell_position berpr fen In MySQL erhalten Sie dann die Darstellung in Abbildung 8 9 267 W kaites Abbildung 8 9 Ergebnis der Tabellen definition der Tabelle bestell_position Abbildung 8 10 Zwei Datens tze die sich 268 nur in einem Prim r schl sselfeld unterscheiden Gleich Feldanzahl in Prim r und Fremd schl ssel Datenbanken erstellen SQL DDL Fa e u je e mid int 11 NO PRI bnr int 11 NO PRI pos int 11 NO PRI anr int 11 NO anzahl int 11 NO 1 letzte_aenderung timestamp YES CURRENT_TIMESTAMP Den Sinn der drei Prim rschl sselfelder k nnen Sie in der Abbildung 8 10 erkennen In einer Bestellung sind die Mandantennummer und die Bestell nummer normalerweise identisch Daher unterscheiden sich die einzelnen Bestellpositionen nur in der Positionsnummer pos mome ge MER STEPS TEE 4711 10
114. auch in den anderen Datenbankensystemen lauff hig und kann daher generell verwendet werden 8 3 4 UNIQUE Bedingung Als letzte g ngige Integrit tsbedingung sei hier noch die UNIQUE Bedingung erw hnt Die Angabe UNIQUE erfordert stets die Eindeutigkeit eines Wertes oder einer Gruppe von Werten ber alle Datens tze einer Tabelle Bezieht sich die Eindeutigkeit nur auf ein Datenfeld so kann der Zusatz UNIQUE in der Definition des entsprechenden Feldes erfolgen Der Zusatz muss dann nach der DEFAULT Angabe stehen sofern eine solche vorhanden ist Die meis Oracle openBase Listing 8 8 Integrit tsbedingungen als eigene Bedingung 277 W kaites 278 UNIQUE Listing 8 9 UNIQUE Integrit tsbedingung DROP TABLE Datenbanken erstellen SQL DDL ten Datenbanken unterst tzen dies Damit darf ein Wert in einer mit UNIQUE gekennzeichneten Spalte nur in h chstens einem Datensatz der Tabelle auf treten Die Integrit tsbedingung UNIQUE kann aber immer als eigene Integrit tsbe dingung in eine Tabellendefinition aufgenommen werden Der Zusatz hat dann die Form Integrit tsbedingung CONSTRAINT name UNIQUE feldname1 feldname Es handelt sich also um eine Aufz hlung von Feldnamen deren Werte gemeinsam eindeutig sein m ssen Das bedeutet dass eine bestimmte Kom bination von Werten in diesen Feldern zusammengenommen nur in h chs tens einem Datensatz auftreten darf Wird nur ein Feldname angegeben m
115. aus der Tabelle tbKurs_Statistik ndern Sie dann Ihre Anf geabfrage so dass Sie einen Filter auf den Kurs CE23 setzen Abbildung 6 6 und f hren Sie die Abfrage noch einmal aus Sie sollten jetzt noch gefragt werden ob Sie einen Datensatz einf gen wollen Nach der Best tigung sollte dieser Datensatz mit der KID CE23 wieder in der Tabelle tbKurs_Statistik enthal ten sein Feld KEID Tabelle tbKursbesuche Funktion Anzahl Sortierung o o BE BE Anf gen an Anzahl Kriterien oder Entsprechend k nnen Sie alle anderen Funktionen die Sie von Auswahlab fragen kennen hier nutzen um neue Datens tze einzuf gen Wichtig ist nur dass die Werte zu den Feldern der Zieltabelle passen Als Werte k nnen nat rlich nicht nur Daten aus anderen Tabellen sondern sowohl Literale wie CE23 als KID oder 12 als sum_fehltage als auch Funktionen wie Jetzt verwendet werden In SQL werden bei MS Access daraus immer eine Feldnamenliste und eine Unterabfrage SELECT die die Werte den Feldern paarweise zuordnet Als weiteres Beispiel wollen wir uns dazu noch eine Einf geabfrage f r die Tabelle tbKurs ansehen Abbildung 6 7 tbKurs EEE ggg Es Ausdr2 CE25 MyS Ausdr3 3 Ausdr4 40 Ausdr5 Jetzt Tabelle Sortierung Anzeigen Kriterien oder Daraus wird in SQL INSERT INTO tbKurs KID Kurskennung KTHID KursdauerStunden Kursbeginn Kursende Zertifikat Gebuehr Ustpflichtig
116. bes Tipp sere interne Optimierung Ein JOIN kann auch auf einer Tabelle gemacht werden Dabei werden Self JOIN gedanklich zwei Kopien der Tabelle verwendet die ber einen JOIN mitein ander verbunden werden Die Tabelle enth lt gleichzeitig Prim rschl ssel 117 WM karitea 118 Listing 4 26 JOIN auf der Tabelle tbKursthema Abbildung 4 24 Kurse mit ihren Voraussetzungen als Self JOIN bungen Mit SQL Daten abfragen SELECT und Fremdschl ssel und ihre beiden gedachten Kopien werden ber diese beiden Felder miteinander verbunden Man spricht von einem rekursiven JOIN oder Self JOIN So ist in der Tabelle tbKursthema zu einigen Kursthe men auch ein weiteres Kursthema als Voraussetzung f r den Besuch des Kur ses angegeben Mithilfe eines JOIN kann jetzt eine Liste erstellt werden die zu jedem Kurs dessen Voraussetzung mit angibt SELECT kt KTHID AS ID kt Kursthema AS Thema kv KTHID AS Voraussetzung ID kv Kursthema AS Voraussetzung Thema FROM tbKursthema kt INNER JOIN tbKursthema kv ON kv KTHID kt Voraussetzung ORDER BY kt KTHID ASC Es wird zweimal die Tabelle tbKursthema angesprochen Um beide gedachten Tabellen unterscheiden zu k nnen ist die Verwendung von Alias zwin gend Hier wird das Thema selbst mit dem Alias kt dessen Voraussetzung mit dem Alias kv bezeichnet Entsprechend k nnen dieselben Datenfelder je Alias getrennt verwendet werden Sinnvoll ist es dabei auch f r die D
117. besch ftigen Sie m ssen dazu nicht die Schlagworte und Abk rzungen kennen die hier gefallen sind Wir wollen hier ganz vorsichtig anfangen und mit verst ndli chen Begriffen Schritt f r Schritt die M glichkeiten von SQL erschlie en Dementsprechend ist das Buch so aufgebaut dass jedes Kapitel ein eigenes Modul darstellt Sollten Sie bereits Vorkenntnisse haben k nnen Sie nat r lich die entsprechenden Abschnitte berspringen oder schnell berfliegen Aufbau des Buches Das Buch selbst gliedert sich in f nf Hauptabschnitte mit zusammen 14 Ka piteln Die Struktur soll es Ihnen erm glichen einzelne Abschnitte nach Bedarf zu lesen ohne gezwungen zu sein alles von vorn bis hinten zu bearbeiten Die folgenden Zeilen sollen ein kleiner Wegweiser durch das Buch sein Kapitel 2 dient dem berblick ber SQL und ist jedem Leser empfohlen der ein paar Hintergrundinformationen zur Geschichte und dem Grundaufbau von SQL haben m chten Kapitel 3 dient dazu Ihnen die Umgebung der bungsbeispiele nahezubringen Die Beispieldatenbanken werden vorge stellt und die Installation der Beispielsysteme beschrieben Die Beispiele und bungen sind wie erw hnt f r die SQL Datenbankmanagementsysteme MySQL MS Access Oracle openBase und Firebird erarbeitet sodass Sie selbst Ihr bevorzugtes System ausw hlen k nnen Die Windows Versionen sind teilweise auf der mitgelieferten CD Zu allen Versionen erhalten Sie den Download oder entsprechende Hi
118. dass diese im Normalfall in Schemas einem einheitlichen Zeichensatz abgespeichert werden MySQL bietet bei der Schema Definition gerade bei der Wahl des Zeichensatzes und der damit verbundenen Sortierreihenfolge eine gro e Vielfalt Die MySQL Version des CREATE SCHEMA ist CREATE SCHEMA IF NOT EXISTS schemaname DEFAULT CHARACTER SET zeichensatz DEFAULT COLLATE sortierreihenfolge Sie k nnen damit f r jedes Datenbankschema den zu verwendenden Zei chensatz und die Sortierreihenfolge festlegen Wird nichts festgelegt wird der Standard des Servers bernommen Mithilfe des Kommandozeilenwerkzeuges mysql ere oder durch direkte Ein gabe in den Query Browser k nnen Sie die verf gbaren Zeichens tze ermit teln Mit SHOW CHARACTER SET erhalten Sie eine bersicht ber die verf gbaren Zeichens tze siehe Abbil dung 8 2 Abbildung 8 2 Zeichens tze in MySQL Big5 Traditional Chinese big5_chine DEC West European dec8_swedish_ci arnscii utf8 ucs2 cp866 keybcs2 macce macroman cp852 latin cp1251 cp1256 cp1257 binary geostd8 cp932 eucjpm G ngige Werte sind hier latin1 ascii oder utf8 wobei f r normale Daten mit DOS West European HP West European KOI8 R Relcom Russian cp1252 West European ISO 8859 2 Central European bit Swedish US ASCII EUC JP Japanese Shift JIS Japanese ISO 8859 8 Hebrew TIS620 Thai EUC KR Korean KOI8 U Ukrainian GB2312 Simplified Chinese ISO 8859 7 Greek indows Cen
119. den beiden anderen Anweisungen Auch wird oft ein UNION DISTINCT mit Vorrang vor einem UNION ALL behandelt Die Reihenfolge der Abarbeitung l sst sich au erdem nat rlich durch Klam mern beeinflussen 11 7 bungen Erstellen Sie f r die folgenden Aufgaben jeweils eine SQL Anweisung 1 Ermitteln Sie die Personen ID und das Geburtsdatum aller Personen aus der Kursdatenbank und verbinden Sie diese mit den Dozenten mit deren Personen ID F gen Sie statt des Geburtsdatums das aktuelle Datum ein Markieren Sie mit einer zus tzlichen Spalte die Herkunft der Datens tze als Person beziehungsweise Dozent Es sollen nur unterschiedliche Datens tze angezeigt werden 11 6 1 2 Ermitteln Sie alle Postleitzahlen und Orte aus denen die Personen der Kursdatenbank oder die Kunden der Artikeldatenbank stammen F gen Sie zun chst als zus tzliche Spalte eine Markierung hinzu aus der Sie erkennen k nnen ob ein Datensatz aus der Kursdatenbank oder der Ar tikeldatenbank stammt Sortieren Sie Ihr Ergebnis nach Postleitzahlen und innerhalb der Postleitzahlen nach der Herkunftsdatenbank Lassen Sie Duplikate zu 11 6 2 3 Entfernen Sie aus der Abfrage in U11 6 2 die Markierung der Herkunfts datenbank und erstellen Sie eine Abfrage ohne Duplikate U11 6 3 4 Ermitteln Sie die Personen ID aus den Tabellen tbPerson und tbDozent die in beiden Tabellen enthalten sind 11 6 4 5 Ermitteln Sie die Personen ID aus den Tabellen
120. den Weg zu vielen Anwendern findet Es darf auch nicht bersehen werden dass viele Anwen der in Fachabteilungen und auch private Nutzer zun chst MS Access zur Verf gung haben Die grafische Windows Oberfl che erleichtert au erdem den Zugang zur Datenbankwelt Drei wesentliche Gr nde haben also daf r gesprochen trotz aller Probleme und Besonderheiten gerade auch MS Access als eines der Datenbanksysteme zu verwenden die die Grundlage f r die Bei spiele in diesem Buch bilden m Viele Leser haben MS Access als bungsdatenbanksystem zur Verf gung Es ist eines der g ngigsten Datenbanksysteme E MS Access bietet durch seine Windows Oberfl che eine vertraute Umge bung in der viele Arbeiten in gewohnter Umgebung ablaufen k nnen m Viele Anwendungen in den Unternehmen entstehen in Fachabteilungen und hier spielt MS Access wegen des breiten Office Einsatzes eine wich tige Rolle Daher werden wir an vielen Stellen gezielt auf die Besonderheiten der grafi schen Oberfl che von MS Access eingehen um den interessierten Anwen dern auch deren Nutzung nahezubringen und insbesondere den Zusammen hang zwischen der grafischen Oberfl che und dem darunterliegenden SQL zu erl utern Dieser Zusammenhang kann auch f r diejenigen interessant sein die nicht MS Access nutzen da die Struktur der Anweisungen manch mal auch in ihrer Umsetzung in der grafischen Windows Oberfl che trans parenter wird 3 4 2 Eine Beispieldatenbank aufbauen
121. der GROUP BY Klausel als Gruppierung Totale Gruppierung Abbildung 4 41 Abfrage ohne Funktions 140 zeile und somit ohne Gruppierung Mit SQL Daten abfragen SELECT gegebenenfalls die Reihenfolge der Felder so anpassen dass die gew nschte Gruppierung entsteht tbKursbes GezahlterBetr Feld KBID GezahlterBetrag Tabelle tbKursbesuche tbKursbesuche Funktion Gruppierung Summe GEBE Sortierung _ __ Anzeigen Kriterien Eine weitere Besonderheit von MS Access ist dass sobald die FUNKTIONEN aktiviert sind grunds tzlich zun chst alle Felder beginnend von links nach rechts gruppiert werden Access bildet also im Standard in jeder Abfrage eine totale Gruppierung Sie k nnen dies gut nachvollziehen indem Sie die SELECT Anweisung SELECT kb KID kb Zahlweise FROM tbKursbesuche kb GROUP BY kb KID kb Zahlweise einmal mit und einmal ohne eingeschaltete FUNKTION Zeile ausf hren E Abfrage1 Auswahlabfrage tbKursbes Zeugnis ta Selbstzahler Zahlweise Rabatt GezahlterBetr 7 T Zm Feld KEID Tabelle tbKursbesuche tbKursbesuche Sortierung Anzeigen Die GROUP BY Klausel Die Einstellung in Abbildung 4 41 erzeugt die SELECT Anweisung SELECT tbKursbesuche KID tbKursbesuche Zahlweise FROM tbKursbesuche und liefert alle 18 Datens tze der Tabelle tbKursbesuche Wird die Funktions zeile dagegen eingeblendet kommen Sie zu der in Abbil
122. die Abfrage in der bersicht des Datenbankfensters dargestellt werden soll Gespeichert wird immer die Abfrage nicht die mit der Abfrage ermittelten Daten Sie k nnen aus der Entwurfsansicht jederzeit in die SQL Ansicht wechseln Dazu m ssen Sie nur das in der Symbolleiste aufgef hrte und hier angege bene Symbol w hlen und ausschalten Nach dem Ausschalten der Entwurfs ansicht arbeitet openBase grunds tzlich in der SOL Ansicht Sie k nnen die generierte SQL Anweisung sehen wie in Abbildung 1 42 dargestellt Das Umschalten zwischen Entwurfsansicht und SQOL Ansicht funktioniert in bei den Richtungen soweit es sich um eine g ltige und darstellbare SOQL Anwei sung handelt Also auch wenn Sie zu Beginn die SQL Ansicht gew hlt haben k nnen Sie wieder in die Entwurfsansicht zur ckwechseln 7 Abfrage1 OpenOffice org Base Abfrageentwurf Datei Bearbeiten Ansicht Einf gen Extras Fenster Hilfe TIDER ie SELECT PID Familienname Yorname FROM tbPerson Bisher haben wir nur auf verschiedene Arten die SOL Anweisung formuliert Sie wollen sie nat rlich auch ausf hren um die Ergebnisdaten zu erhalten Daf r k nnen Sie das am Seitenrand angegebene Symbol verwenden Das Ergebnis ist in Abbildung 1 43 zu sehen 7 Abfrage OpenOffice org Base Abfrageentwurf Datei Bearbeiten Ansicht Einf gen Extras Fenster Hilfe ap amp 8 amp Egg DE SIAO IA N ZI PID Familienname Vorname Weiss Peter Bucz
123. die Ver bindung zu einer bestehenden Datenbank herstellen wollen Im ersten Fall wird eine neue ODS Datei angelegt die tats chlich auch die Daten Ihrer Datenbank speichert und mit der HSQL Datenbankmaschine genutzt werden kann Im zweiten Fall wird eine bestehende ODS Datei ge ffnet Im dritten Fall k nnen Sie eine Verbindung zu einer anderen bestehenden Datenbank herstellen Hier stehen beispielsweise auch MS Access MySQL und ein Oracle Zugriff ber JDBC oder ODBC zur Verf gung sodass diese Systeme genutzt werden k nnen Weitere Informationen ber die javabasierte HSQL Engine finden Sie im Internet unter diesem Stichwort insbesondere auf www hsql org Anhang Boolesche Algebra SQL verwendet an verschiedenen Stellen Ausdr cke die einen sogenannten Wahrheitswert liefern also wahr oder falsch sind Dies gilt beispielsweise f r die wHERE Klausel der SELECT Anweisung Diese Ausdr cke k nnen mit den typischen Operatoren UND und ODER kombiniert werden in einigen Daten banksystemen auch mit weiteren Operatoren Daher sollen hier die wesentlichen Grundlagen der Logik erl utert werden Grundlegend ist zun chst der Begriff der Aussage Eine Aussage ist ein Aus druck f r den eindeutig entscheidbar ist ob er wahr oder falsch ist Beispiele sind A Die Zahl 6 ist eine gerade Zahl wahr B Berlin liegt in Frankreich falsch Eine Aussage wird im Folgenden mit Buchstaben wie A oder B bezeichnet Es existieren Oper
124. die alle tbKursthema angebotenen Kurse thematisch enth lt also jeweils das Thema des Kurses eine ausf hrliche Beschreibung und weitere Angaben Der Prim rschl ssel dieser Tabelle ist die KTHID KursTHema Identifikationsnummer Sie ist in Abbildung 3 1 beispielhaft hervorgehoben Die Prim rschl ssel der anderen Tabellen sind jeweils in Fettschrift markiert und nach demselben Schema benannt Die Tabelle tbKursthema ist aber nicht im Sinne eines konkreten Kurses zu verstehen sondern als Modul das inhaltsgleich zu verschiedenen Terminen von verschiedenen Dozenten f r verschiedene Teilnehmer angebo ten werden kann Die konkreten Kurse sind in der Tabelle tbKurs aufgelistet Hier werden die tbKurs Termine angegeben sowie alle weiteren eventuell f r die Durchf hrung rele vanten Angaben gemacht ber die Beziehung zur Tabelle tbKursthema kann auf die genauen Angaben zum Thema eines Kurses zur ckgegriffen werden Diese Angaben sind bei jeder Durchf hrung identisch w hrend sich die Ter mine die konkrete Dauer eine eventuelle Umsatzsteuerbefreiung und andere Angaben ndern k nnen Die Tabelle tbKurs beschreibt also die eigentliche Durchf hrung des Kurses die darin besteht dass zu dem geplanten Termin der Dozent und die Kursteilnehmer zusammengebracht werden auf den Ort wurde hier noch verzichtet Die Tabelle tbkurs ist somit das eigentliche Herzst ck des Kursangebotes obwohl sie vergleichsweise wenig Datenfelder enth lt
125. durchgef hrt Microsoft Office Access Sie beabsichtigen 11 Zeile n zu aktualisieren Sobald Sie auf Ja geklickt haben k nnen Sie die nderungen nicht mehr mit dem Befehl R ckg ngig zur cknehmen Sind Sie sicher dass Sie diese Datens tze aktualisieren m chten Ja Nein 6 2 3 Zusammenfassung Mit der SOL Anweisung UPDATE k nnen einzelne oder Gruppen von Daten s tzen bis hin zu ganzen Tabelleninhalten ge ndert werden Die Syntax der UPDATE Anweisung lautet im Allgemeinen UPDATE tabellenname SET feldname1 ausdruck feldname ausdruck WHERE bedingungsliste Bevor Sie eine UPDATE Anweisung an den SQL Interpreter senden sollten Sie sie als einfache Auswahlabfrage mit SELECT testen Sie k nnen die funktions Datens tze l schen DELETE f hige Abfrage dann in eine UPDATE Anweisung umbauen Wichtig ist in jeder UPDATE Anweisung die Verwendung der WHERE Klausel zu berpr fen Ohne wHERE Klausel werden alle Datens tze der Tabelle ge ndert 6 2 4 Update bungen Erstellen Sie f r die folgenden Aufgaben jeweils eine UPDATE Anweisung Hinweis Nutzen Sie in der Datenbank gegebenenfalls eine Kopie der Tabellen damit Sie die urspr nglichen Tabellen nicht zerst ren In MS Access k nnen Sie die Tabellen daf r im Datenbankfenster kopieren in den anderen Syste men k nnen Sie die urspr nglichen Tabellen neu laden siehe Kapitel 3 1 Die Familiennamen Weiss sind irrt mlich alle ohne
126. een 389 A3 Firebird a 2228er 394 AA MSACCESS en nanea aii 396 1 4 1 SQL Anweisungen eingeben 396 A 4 2 Die Daten aus Excel importieren 401 A5 OpenBase n n ssssr siert i aR oei 407 A 5 1 SQL Anweisungen eingeben 407 A 5 2 Andere SQL Anweisungen eingeben 411 Anhang Boolesche Algebra 413 Anhang Daten 222c2csceescenn 417 C 1 Datenbank Kurse o n 417 C 2 Datenbank Artikel 2 22cscseene 419 Stichwortverzeichnis 22 222222eeseeseennennen 423 Vorwort Dieses Buch m chte Ihnen einen Weg zu SQL zeigen und dabei stets den Nut zen im Rahmen der Datenbankverwendung und pflege in den Vordergrund stellen Ich werde die wesentlichen Aspekte von SQL vor dem Hintergrund der Prinzipien relationaler Datenbanken erl utern und dabei immer auf die unmittelbare Umsetzung eingehen Das Buch beruht auf SQL92 mit den wesentlichen Erweiterungen von SQL9Y9 SQL2003 und SQL2006 Meine berufliche wie p dagogische Praxis hat mir gezeigt dass jedes Lernen von der bung lebt Wie man das Tennisspielen nicht aus dem Fernsehen lernen kann kann man das Programmieren nicht durch das Lesen eines Buches erlernen Also beginnen die Abschnitte fast immer mit einem Beispiel und enden mit bungsaufgaben Dazwischen werden die wesentlichen Aspekte erl utert mit Beispielen versehen und schlie lich noch zusammen mit der Syntax der SOL Anweisung zusammengefass
127. einem Datensatz werden die entspre chenden Eintragungen in der Detailtabelle ebenfalls gel scht Problematisch ist CASCADE insofern als insbesondere beim L schen Informationsverluste auftreten k nnen Werden mehrere Tabellen ber Beziehungen mit CASCADE miteinander verbunden so kann der Dominoeffekt erhebliche Auswirkun gen haben da dann ber alle so verbundenen Tabellen hinweg gel scht wird Zu beachten ist auch dass keine Schleifen existieren die wieder zur urspr nglichen Tabelle zur ckf hren da so ebenfalls Fehler entstehen w r den 272 Integrit tsbedingung u 8 m Die Option SET DEFAULT kann sinnvoll genutzt werden um Datens tze zu SET DEFAULT sammeln die durch nderungs oder L schoperationen ihren Bezug zur Pri m rschl sseltabelle verloren haben Diese Datens tze k nnen dann in nach folgenden Bearbeitungsschritten entsprechend ausgewertet oder bearbeitet werden um das Problem dieser fehlenden Bez ge aufzul sen Die Option SET NULL ist der Option SET DEFAULT hnlich In den F llen in SET NULL denen kein DEFAULT Wert angegeben ist f hren beide auch zu demselben Ergebnis Abzuw gen ist die Bedeutung des Ergebnisses NULL bedeutet das Fehlen einer Information Insofern ist es sinnvoll NULL einzusetzen wenn gerade dies ausgedr ckt werden soll wenn also im Fremdschl ssel deutlich werden soll dass kein zugeh riger Prim rschl sselwert existiert Es fehlt die Information ber di
128. einzugehen ist Bei der Sortierung haben Sie die Wahl ob Sie in der ORDER BY Klausel den Namen des Datenfeldes das Alias oder auch die Nummer des Datenfeldes im SELECT angeben So k nnen Sie statt SELECT p Familienname p Vorname p PLZ p Ort FROM tbPerson p ORDER BY p Familienname ASC p Vorname ASC auch schreiben SELECT p Familienname p Vorname p PLZ p Ort FROM tbPerson p ORDER BY 1 ASC 2 ASC Entsprechend der Position des Familiennamens als erstem und des Vorna mens als zweitem Datenfeld in der Abfrage erfolgt die Sortierung wie bei der oberen Anweisung Au erdem lassen einige Systeme wie Oracle Zus tze zu wie bei einer Sor tierung mit fehlenden Werten in den Datens tzen umgegangen werden soll siehe Listing 4 17 SELECT p Familienname p Vorname p PLZ p Ort FROM tbPerson p ORDER BY 1 ASC 2 ASC NULLS LAST Die Angabe NULLS LAST bewirkt beispielsweise in Oracle dass alle Datens tze mit fehlenden Vornamen innerhalb eines Familiennamens an das Ende sor tiert werden Sie haben gesehen wie der SELECT Anweisung eine Sortierung hinzugef gt werden kann Bisher haben wir daher den folgenden Umfang der SELECT Anweisung erarbeitet SELECT DISTINCTIALL feldname AS alias feldname AS alias FROM tabelle AS alias ORDER BY feldname ASCIDESC feldname ASC DESC Sie wissen dass man das Ergebnis jeder SELECT Anweisung aufsteigend Standard oder absteigend nach einem oder mehreren Daten
129. fehlen kann wird durch einen Unterstrich _ repr sentiert Also f r Windows Nutzer entspricht und entspricht _ Beispiel Statt 29 muss 29 angegeben werden statt 2922 ist 2922_ zu schreiben Beispiele f r Ausdr cke mit Platzhaltern Wildcards E m alle Namen die mit M anfangen er alle Namen die mit er enden E E Mer alle Namen die mit M anfangen und mit er enden E M_ier alle Namen bei denen der Unterstrich ersetzt werden kann bei spielsweise Meier oder Maier Tabelle 4 1 Forts Operatoren Pr dikate der WHERE Klausel 111 WM karitea 112 Syntax mit WHERE Klausel bungen Mit SQL Daten abfragen SELECT Zusammenfassung Sie haben jetzt gesehen wie die in der Ergebnismenge einer SELECT Anwei sung enthaltenen Datens tze ausgew hlt werden k nnen Man nennt dies auch filtern Wir haben unsere Kenntnisse der SELECT Syntax damit wieder erweitert SELECT DISTINCTIALL feldname AS alias feldname AS alias FROM tabellenname AS alias WHERE bedingung AND OR bedingung ORDER BY feldname ASCIDESC feldname ASCIDESCIY Die WHERE Klausel kann in einer SELECT Anweisung fehlen Wenn sie vorhan den ist muss sie mindestens eine Bedingung enthalten Eine Bedingung ist ein Ausdruck der WAHR oder FALSCH ist und sinnvollerweise zumeist einen Vergleich eines Feldwertes mit einem anderen Wert beinhaltet Bedingungen sollten geklammert sein und werden mit AN
130. gerade performant aber grunds tzlich m glich ist Die firma ist ebenfalls als VARCHAR gespeichert Da hier nicht dieselbe Firma mehrmals erscheinen soll ist das Feld mit UNIQUE als eindeutig definiert wor den Das Feld Rechnungsadresse hatten wir bereits im Rahmen der Modellie rung problematisiert aber es war gew nscht Hier wird jetzt ein l ngeres Feld mit bis zu 255 Zeichen vorgesehen um auch l ngere Adressen komplett speichern zu k nnen Da in vielen F llen keine eigene Rechnungsadresse zu erwarten ist soll hier als Standardwert der Eintrag wie Anschrift eingesetzt werden Beim Einf gen eines neuen Kunden reicht dann die Angabe DEFAULT um diesen Wert zu erhalten Entsprechend werden Ort und Land mit Celle respektive Deutschland vorbelegt Eine Besonderheit stellt das Feld letzte_aenderung dar Es war in der logi schen Modellierung des ERM nicht vorgesehen Andererseits ist es gerade bei Stammdaten wichtig zu erkennen wann diese zuletzt aktualisiert wurden Hier wird daher ein Feld aufgenommen in dem ein TIMESTAMP also ein Zeit stempel abgelegt wird aus dem Datum und Uhrzeit der letzten nderung ersichtlich sind Um sicherzustellen dass das Feld beim Anlegen eines Datensatzes aktualisiert wird kann eine Funktion CURRENT_TIMESTAMP Syn tax in MySQL Oracle Firebird und openBase genutzt werden um den Wert in jedem Fall einzutragen Bei Firebird ist generell zu beachten dass der Feuervogel Wert
131. gt wert amp nbsp lt td gt echo lt tr gt Ohne jetzt die Details in PHP im Einzelnen zu kl ren ist ersichtlich wie eng die Integration zwischen PHP und MySQL ist Durch die direkt in PHP inte grierten Funktionen die alle mit mysql beginnen ist der Zugriff auf eine Datenbank aus PHP sehr einfach 14 7 Abschluss Nach all diesen Seiten bleiben noch viele Themen offen ber die Speiche rung geografischer Daten oder ber die Nutzung von Datenbanken f r OLAP Anwendungen konnte nicht gesprochen werden Die Reparatur von Datenbanken viele Funktionen der einzelnen Datenbanksysteme automati sche ID Datenfelder und andere Aspekte konnten nicht so ausf hrlich betrachtet werden wie sich das der eine oder andere Leser vielleicht erhofft h tte Die API h tten sogar mehr als ein eigenes Kapitel verdient So bleibt stets etwas offen Aber dies ist letztlich bei jedem Buch immer wieder der Fall Ich musste eine Auswahl treffen Priorit ten setzen und mich immer wieder entscheiden Dieses Buch soll ein Einstieg in SQL sein und der ist Ihnen hoffentlich gelun gen Ich habe versucht diesen Aspekt immer im Auge zu behalten Nur wer nichts tut macht keine Fehler Ich hoffe dass mir bei der Erstellung dieses Buches nicht zu viele davon unterlaufen sind und verspreche schon jetzt Besserung Wenn Sie Fehler entdecken W nsche oder Fragen haben habe ich daf r die Webseite www serval de SOL eingerichtet die auch die E Ma
132. hin die aus anderen Informationen gewonnen werden k nnen Lagerbest nde sind zwar wichtige Informationen die aber eher als Attribut eines Artikels denn als eigene Entit t zu sehen sind Es handelt sich hier eher um Detailinformationen die nicht durch weitere Attribute beschrieben wer den k nnen oder die einen Schl ssel besitzen Somit bleiben zun chst Sortiment Kunde Artikel Firma Warengruppe Bestellung Bestellposition Ware Mehrwertsteuersatz Die Liste enth lt eine Reihe von zumindest hnlichen wenn nicht sogar synonymen Begriffen Das Sortiment ist letztlich grob gesprochen nichts anderes als die Menge Artikel Ware ist in diesem Zusammenhang als Syno nym zu Artikel zu sehen da es bei der Bestellung der Waren letztlich um die Bestellung von Artikeln geht kann der Begriff entfallen Problematisch ist der Mehrwertsteuersatz Dieser kann als Attribut eines Artikels angesehen werden da er zun chst nur aus einem einzelnen Wert zu bestehen scheint der dem Artikel zugeordnet wird Das Mehrwertsteuersystem beinhaltet aber letztlich drei Gruppen von Artikeln solchen die dem vollen Mehrwert 233 S Kapitel 7 234 Abbildung 7 6 Entit t Kunde Datenbanken modellieren steuersatz unterliegen solchen die dem erm igten Steuersatz unterliegen und solchen die mehrwertsteuerfrei sind Die konkreten Prozents tze sind politischen nderungen unterworfen Daher ist hier eine Modellierung
133. k n nen Sie sollten also auch hier die Klammern setzen Es erspart Probleme und erh ht die Lesbarkeit der SELECT Anweisung Zusammenfassung Sie k nnen in einer SELECT Anweisung mehrere JoIN Verkn pfungen ver wenden Dadurch entstehen ganze Netze von Tabellen die schrittweise zu virtuellen Tabellen f r die Auswertung zusammengefasst werden Der INNER JOIN erfordert f r jede Verbindung zweier Tabellen die Angabe ber welchen Fremdschl ssel und Prim rschl ssel die Verbindung erfolgen soll ON tabelle1 Fremdschl ssel tabelle2 Prim rschl ssel Eine Klammerung der JoIN Verkn pfungen ist sinnvoll Letztlich sind auch die Anforderungen des konkreten SQL Interpreters des Datenbankmanage mentsystems zu beachten Nicht alle Varianten funktionieren mit allen Sys temen bungen zur SELECT Anweisung mit INNER JOIN ber mehr als zwei Tabellen Erstellen Sie f r die folgenden Aufgaben jeweils eine SELECT Anweisung 1 Erstellen Sie eine eindeutige alphabetisch sortierte Liste aller Kursteil nehmer mit Familienname und Vorname die an einem Kurs zum Thema Access teilnehmen 4 5 2 1 2 Ermitteln Sie f r alle Dozenten ihren Familiennamen Vornamen Stunden satz und die Geb hr der Kurse die sie zurzeit betreuen 4 5 2 2 Tabellen miteinander verbinden JOIN 3 Ermitteln Sie zu jedem Kursthema welche Personen als Dozent welche Kurse zu diesem Thema leiten Geben Sie das Kursthema die Kurskennung sowie Fami
134. kennt seit der Version 5 eine richtige VIEW Anweisung Daher soll hier exemplarisch am Beispiel von MySQL die Vielfalt der Erweiterungen gezeigt werden die bei einem CREATE VIEW umgesetzt werden k nnen Die vollst ndige Syntax in MySQL lautet CREATE OR REPLACE CREATE VIEW ALGORITHM UNDEFINED MERGE TEMPTABLEY nn VIEW viewname feldname feldname AS Select Anweisung WITH CASCADED LOCAL CHECK OPTION Die Angabe eines REPLACE f hrt dazu dass ein bereits vorhandener VIEW durch den neuen VIEW ersetzt wird Anderenfalls muss ein VIEW vor der erneuten Erzeugung gel scht werden Sie ahnen es bereits mit DROP VIEW viewname 291 W kaites Listing 8 15 Erzeugung eines VIEW mit MERGE Option Listing 8 16 SELECT Anweisung auf Basis eines VIEW MERGE Listing 8 17 Die virtuelle SELECT Anweisung aus der Kombination von VIEW 292 und SELECT Datenbanken erstellen SQL DDL Eine Besonderheit von MySQL ist die Option ALGORITHM Die Angabe MERGE f hrt dazu dass der SQL Interpreter versucht die Angaben des CREATE VIEW mit den Angaben einer SELECT Anweisung zu vermischen mit der wiederum auf den VIEW zugegriffen wird Nehmen wir an dass Sie in der Kursdaten bank einen weiteren VIEW TeilnehmerZahlungenCE23 erzeugt haben wie in Listing 8 15 angegeben CREATE ALGORITHM MERGE VIEW TeilnehmerZahlungenCE23 TeilnehmerID Zahlung AS SELECT KTID GezahlterBetrag FROM tbKursbesuche WHE
135. komplexen Dateien zu tun haben die auf verschiedene Tabellen zu verteilen sind siehe hierzu die Kapitel 7 und 8 bernehmen Sie die Vorgaben von MS Access Abbildung 1 36 E Import Assistent f r Kalkulationstabellen Automatische Festlegung des Datentyps und Sie k nnen Informationen zu jedem zu importierenden Feld angeben W hlen Sie dazu der Indizierung Felder aus dem unten stehenden Bereich aus und bearbeiten Sie dann die Feldinformationen im Bereich Feldoptionen Feldoptionen Feldname Pin o 7 Indziert Pa Duplkate m glich v Feld nicht importieren berspringen Abbrechen Eertig stellen 10 Im n chsten Schritt ist der Prim rschl ssel f r die neue Tabelle zu be stimmen MS Access schl gt als Standard immer ein eigenes zus tzliches Attribut vor das erzeugt werden soll und in dem eine fortlaufende Num merierung eingef hrt werden soll Sie sollten bei allen Tabellen des Beispiels Kurse immer die erste Spalte als selbst ausgew hlten Prim r schl ssel einstellen da alle Dateien entsprechend vorbereitet sind siehe Abbildung A 37 405 Ss Anhang A Abbildung A 37 Auswahl eines Prim rschl ssels Abbildung A 38 Benennung der Tabelle und Fertigstellung Import der Tabellen der 406 Kursdatenbank fae ffnen Anhang Benutzung der Datenbanksysteme In Microsoft Access wird die Definition eines Prim rschl ssels f r DZ Ihre neue Tabelle empfohlen Ein Prim rsch
136. konfigurieren Sie finden die MySQL Version auf der beiliegenden CD Es werden hier Ver sionen des MySQL Community Servers verwendet Neuere Versionen k nnen Sie aus dem Internet herunterladen Beachten Sie die jeweiligen Lizenz bedingungen da sich diese f r die verschiedenen Server ndern k nnen Zur Installation von MySQL verwenden Sie die Dateien im Unterordner MySQL auf der beiliegenden CD Sie finden dort die gepackte Datei mysql 5 0 41 win32 zip F r Linux sind unterschiedliche Versionen f r die ver schiedenen Systeme verf gbar deren komplette Bereitstellung den Rahmen dieses Buches sprengen w rde Sie k nnen sie f r die Beispiele aber in glei cher Weise nutzen Sie finden die Downloads unter dev mysql com downloads Nach dem Entpacken und dem Start von Setup exe f hrt Sie dann der Instal lationsassistent durch die weitere Installation Version 41 5j Kapitel3 Die Beispieldatenbanken Abbildung 3 2 Start des Setup Wizards ig MySQL Server 5 0 Setup Wizard Welcome to the Setup Wizard for MySQL Server 5 0 The Setup Wizard will install MySQL Server 5 0 release 5 0 41 on your computer To continue click Next WARNING This program is protected by copyright law Nach dem Start meldet sich der Installationsassistent wie in Abbildung 3 2 dargestellt Die Installation kann in drei verschiedenen Varianten erfolgen siehe Abbildung 3 3 Abbildung 3 3 X e Verschiedene Installations ir MySQL Ser
137. kt WHERE EXISTS SELECT FROM tbKurs k WHERE kt KTHID k KTHID Das Ergebnis ist in Abbildung 9 7 dargestellt Kursbeschreibung Einstieg mit Windows Windows bietet die Grundlage f r alle modernen und anwe windows f r Fortgeschrittene Der Kurs wendet sich an PC Benutzer die schon etwas Erf word Einstieg in die Textverabeitung mit Word Grundlegende Fu Access Einstieg in das Datenbankmanagmentsystem Access Tab Access Vertiefung der Arbeit mit MS Access Komplexe Abfragen u Die Besonderheit des EXISTS Operators ist dass keine unmittelbare Verbin dung zu einer Spalte der Hauptabfrage hergestellt wird Die Unterabfrage steht vielmehr isoliert in der WHERE Klausel Daher ist fast immer auch in der Unterabfrage eine eigene WHERE Klausel notwendig Fehlt diese WHERE Klau sel in der Unterabfrage ist die EXISTS Bedingung allein durch das Vorhan densein eines einzigen Datensatzes in der angesprochenen Tabelle erf llt Oft wird aber nicht nur irgendeine Bedingung in der Unterabfrage ben tigt sondern es wird Bezug auf die Datenfelder der Hauptabfrage genommen wie bereits in Listing 9 16 und auch in Listing 9 17 gezeigt SELECT p Familienname p Vorname p PID FROM tbPerson p WHERE NOT EXISTS SELECT FROM tbKursbesuche kb WHERE p PID kb KTID Hier werden wiederum alle Personen ermittelt die noch nie einen Kurs besucht haben siehe Abbildung 9 8 ET voe y w Weiss Peter 1 Bucz Susanne 2 Weiss Karin 6
138. mittel_beitrag Anzahl SELECT tbKursbesuche KID SUMCtbKursbesuche Fehltage SUMCtbKursbesuche Rabatt AVGCtbKursbesuche GezahlterBetrag COUNTCtbKursbesuche KBID FROM tbKursbesuche GROUP BY tbKursbesuche KID HAVING CtbKursbesuche KID CE23 Die Tabelle ist nicht Bestandteil der Kursdatenbank sondern dient hier nur als Beispiel Die Anweisung ermittelt zun chst aus der Tabelle tbKursbesuche alle Teilnehmer der verschiedenen Kurse Dabei wird das Ergebnis nach Kur sen gruppiert Dies geschieht ber die Identifikationsnummer der Kurse die KID Dabei entsteht je Kurs ein Datensatz der alle Informationen ber die Kursbesuche dieses Kurses zusammenfasst Anschlie end wird der Datensatz f r den Kurs CE23 herausgefiltert sodass letztlich nur ein einziger Daten satz brig bleibt Die Werte dieses Datensatzes werden dann paarweise den Feldern der Feldnamenliste zugeordnet Dabei ist die Reihenfolge entschei dend Dem ersten Feld KID wird das erste Ergebnis tbKursbesuche KID zugeordnet also die Identifikationsnummer des Kurses selbst Dies ist zugleich das Grup pierungsfeld bei dem alle Kursteilnehmer denselben Wert CE23 haben F r die anderen Felder m ssen die Werte der Einzeldatens tze der Teilnehmer zu Neue Datens tze einf gen INSERT einem Wert f r die Gruppe aggregiert werden F r das Feld tbKursbesu che Fehltage soll die Anzahl der Fehltage aller Kursteilnehmer summiert werden Daher wird die Agg
139. ngen und Breitengrades Oft sind diese nat rlichen Schl ssel aber gar nicht vorhanden oder sie sind vorhanden aber zu umst ndlich Beispiel Fahrgestellnummer nicht ein deutig f r das gesamte Sortiment eines Warenhauses Beispiel EAN nicht f r alle Artikel vorhanden oder sie sind einfach unhandlich Wer wei schon Relationale Datenbanken welche L ngen und Breitengradangaben der Palmstra e 6 in Hannover ent sprechen Und wenn Sie es w ssten w rden Sie es auf die f nfte oder sechste Dezimale genau eingeben wollen oder k nnen In diesen F llen werden bei der Gestaltung der Datenbank k nstliche Prim rschl ssel eingef hrt also Felder deren Werte nur der Identifizierung der Datens tze in einer Tabelle dienen Sie besitzen in der realen Welt keine weiter gehende Bedeutung In unserer Kursdatenbank haben wir schon zwei solche F lle gesehen In Abbildung 2 7 sehen die PID Personen Identifikationsnummer die in der Tabelle tbPerson dem eindeutigen Auffinden jedes Personendatensatzes dient Die Werte haben keine interpretierbare Bedeutung Entsprechendes gilt auch f r die DID Dozenten Identifikationsnummer in der Tabelle tbDo zent siehe Abbildung 2 6 Warum nehmen wir nicht einfach den Namen einer Person als Prim rschl s sel Wir k nnten Herrn Weiss doch auch eindeutig finden Gut ich habe oben schon behauptet dass der nicht eindeutig ist und Sie sehen es bereits in Abbildung 2 7 Wenn das aber nicht reicht
140. nnen Sie immer noch ber die tats chliche Arbeitsweise des SQL Interpreters nachdenken und die SELECT Anweisung optimieren Sie kennen die alte Programmierregel Make it right before you make it faster Also machen wir es erst einmal richtig bevor wir ber Performance nach denken Abbildung 4 21 Zusammenf hren zweier Tabellen zu einer virtuellen Tabelle mit einem JOIN 115 si Kapitel 4 116 INNER JOIN Syntax Beziehung Abbildung 4 22 Verbindung zweier Tabellen durch INNER JOIN ber PID KTID Weiteres Beispiel Listing 4 24 SQL Anweisung f r eine Kursliste Mit SQL Daten abfragen SELECT Nachdem wir jetzt einen ersten Blick auf einen JOIN geworfen haben ist es an der Zeit die Syntax n her zu analysieren Beachten Sie aber dass der JOIN in sehr unterschiedlichen Formen auftreten kann Wir wollen uns zun chst auf die g ngigste Form den sogenannten INNER JOIN in der Fas sung von SQL92 konzentrieren FROM tabellennamel INNER JOIN tabellenname2 ON tabellenname1 feld1 tabellenname2 feld2 Die Angabe INNER ist theoretisch nicht notwendig darauf sollten Sie sich in der Praxis der g ngigen Datenbankversionen allerdings nicht verlassen Sie sollten daher wenn m glich stets INNER JOIN schreiben Dies hilft au erdem bei der Unterscheidung von dem sp ter zu besprechenden OUTER JOIN Der JOIN beruht immer auf der Verbindung zweier Tabellen ber zumindest ein Paar von Feldern Dies l sst
141. noch relativ egal welche Daten dargestellt werden so m ssen wie in jeder Pro grammiersprache auch in SQL sp testens wenn es um die Verwendung von Funktionen geht diese Datentypen ber cksichtigt werden 5 1 Datentypen Um die Bedeutung von Datentypen zu zeigen soll zun chst ein Beispiel Beispiel genutzt werden das bereits eine ganze F lle von Funktionen verwendet die von dem jeweiligen Datentyp der Felder abh ngen SELECT Listing 5 1 CONCAT p Familienname IF p Vorname IS NOT NULL Beispiel f r ein komplexes CONCATC p Vorname i AS Name SELECT mit Funktionen EXTRACT YEAR FROM p Geburtsdatum AS Geburtsjahr kb KID CONCATCROUNDCkb GezahlterBetrag k Gebuehr 100 2 AS Bezahlter Anteil FROM tbPerson p INNER JOIN tbKursbesuche kb ON p PID kb KTID INNER JOIN tbKurs k ON kb KID k KID ORDER BY 1 ASC Zun chst einmal soll das Ergebnis der SELECT Anweisung aus Listing 5 1 betrachtet werden Dies ist in Abbildung 5 1 dargestellt Sie sehen dass zun chst der Familienname und der Vorname aneinandergeh ngt werden Dies geschieht mit der Funktion CONCAT die alphanumerische Daten erfor 149 5 Kapitel5 Datentypen Ausdr cke und Funktionen dert Zus tzlich ist hier noch eine IF Funktion eingebaut die auf die Exis tenz von Werten pr ft Daf r sind sogenannte NULL Werte wichtig die in Abschnitt 5 2 besprochen werden Dann wird das Geburtsjahr als Jahr aus dem Geburtsdatum extrahiert
142. oder als Slave Tabelle bezeichnet Die Beziehung wird hergestellt indem die Felder in der Reihenfolge ihrer Nennung nicht ihrer Namen miteinander in Beziehung gesetzt werden Im obigen Beispiel entspricht das Fremdschl sselfeld mid dem Prim rschl s selfeld mid weil beide als Erstes in der jeweiligen Liste genannt werden Ent sprechend m ssen die Werte der Bestellnummer kid in der Tabelle bestel lung den Werten des Feldes kid in der Tabelle beste11 entsprechen da beide an zweiter Stelle genannt werden Referenzielle Integrit t in anderen Datenbanken Referenzielle Integrit t wird in Form der ON DELETE und ON CASCADE Angaben von den einzelnen Datenbanken in unterschiedlicher Form unterst tzt Man che Systeme kennen nur ON DELETE manche gar keine referenzielle Integrit t In MS Access ist die referenzielle Integrit t in die grafische Oberfl che inte griert Hier kann in der Beziehungsansicht jede einzelne Beziehung aktiviert und deren Eigenschaften bearbeitet werden Die Aktualisierungsweitergabe und die L schweitergabe entsprechen jeweils dem ON UPDATE CASCADE respektive ON DELETE CASCADE Prim rschl sselattribute kunden Tabelle md kd fima anede nachname vomame 1 EZ 1 Frau Sibum Jutta m 1 2 Ewald Kuhn KC Herr Sch ller J rgen E 1 Bit Hans Joachim 5 mid br kid _bestelldatum letzte_aenderung 47112 15 10 2007 1 4856 2 16 11 2007 m Fremdschl sselattribute W
143. openBase ist analog der MS Access Datei mit der Erwei terung mdb eine einzelne Datei mit der Erweiterung odb Nat rlich werden wir auch hier die direkte Eingabe der SOL Anweisungen vorstellen die Ober fl che bietet aber einen schnellen berblick Der Funktionsumfang ist sehr gut und st rker am Standard angelehnt als bei MS Access daf r fehlt weit gehend die Funktionalit t eines echten Multiuserbetriebes Basis der Datenbank openBase ist die sogenannte HSQL Engine Daneben unterst tzt openBase auch die Weiterleitung von Anweisungen an andere Datenbanksysteme Hier wird aber die eigentliche und eigene HSQL Engine f r die Beispiele mit openBase verwendet Unter dem entsprechenden Schlagwort finden Sie auch die meiste Hilfe im Internet Wenn Sie openBase als Beispielumgebung f r die bungen dieses Buches nutzen wollen m ssen Sie zun chst OpenOffice installieren Die Version fin den Sie auf der CD im Unterordner OpenBase Nach dem Start von OOosetup ere meldet sich der Installationsassistent der Ihnen ein Installationsverzeichnis vorschl gt Sie k nnen das komplette Paket oder nur openBase OpenOffice org Base installieren F r unsere Zwe cke reicht die Base Komponente aus Sp testens wenn Sie aber Daten importieren oder exportieren wollen ben tigen Sie zumindest noch die Calc Komponente Die weiteren Fragen k nnen Sie entsprechend Ihres Systems beantworten Beachten Sie die Lizenzbedingungen OpenOffice ist eine fre
144. referenziellen Integrit ten und die Tabelle wird mit ihrem vollst ndigen Inhalt gel scht Ist dagegen mindestens ein Fremd schl ssel definiert so zeigen die Datens tze in dieser anderen Tabelle auf unsere Tabelle und wir haben gesagt dass ein L schen der Tabelle nicht erfolgen darf In diesem Fall ist im Gegensatz zur UPDATE oder DELETE Benutzer und Programmsichten CREATE VIEW Anweisung auch das Verhalten das bei der Erstellung des CONSTRAINT angegeben wurde nicht entscheidend Ist dort SET DEFAULT oder SET NULL angegeben kann in der anderen Tabelle trotzdem kein DROP erfolgen bungen zur DROP TABLE Anweisung 1 L schen Sie die in 8 3 2 angelegte Tabelle kind U8 5 1 2 Erstellen Sie eine neue Tabelle test mit einem Feld testfeld vom Typ INT das auch Prim rschl ssel ist Erstellen Sie dann eine zweite Tabelle test2 mit einem Feld test2pk und einem Feld testfeld2 beide vom Typ INT Das Feld test2pk soll Prim rschl ssel sein F gen Sie dann eine In tegrit tsbedingung zu test2 hinzu die testfeld2 als Fremdschl ssel zum Feld testfeld in der Tabelle test definiert Versuchen Sie anschlie end die Tabelle test zu l schen 8 5 2 3 Entfernen Sie test jetzt richtig U8 5 3 4 Entfernen Sie auch test2 U8 5 4 5 Wie h tten sich beide Tabellen auch entfernen lassen U8 5 5 8 6 Benutzer und Programmsichten CREATE VIEW Stellen Sie sich vor Sie sind stets nur an bestimmten Informationen ber
145. schreiben Sie es auf Den zus tzlichen anonymen Account ben tigen wir f r unsere Beispiele nicht zwingend 47 S Kapitel3 Die Beispieldatenbanken Abbildung 3 9 Einrichten des MySQL Server Instance Configuration Wizard Superusers in MySQL P ysa MySQL Server Instance Configuration Configure the MySQL Server 5 0 server instance Please set the security options Modify Security Settings New root password i Enter the root password Lroot Confirm 3 E Retype the password C Enable root access from remote machines D Create An Anonymous Account This option will create an anonymous account on this server Please note that this can lead to an insecure system Es beginnt die eigentliche Einrichtung des Servers die Sie ber eine Fort schrittsanzeige verfolgen k nnen siehe Abbildung 3 10 Abbildung 3 10 Einrichtung und MySQL Server Instance Configuration Wizard Start des Servers j MySQL Server Instance Configuration Configure the MySQL Server 5 0 server instance Processing configuration Prepare configuration Write configuration file C ProgrammeiMySQLMySQL Server 5 0 ny in O Start service Q Apply security settings Cancel 48 MySQL Probleme gibt es unter Windows zumeist wenn die Firewall eingeschaltet ist weil der Port 3306 ber den MySQL kommuniziert nicht freigegeben ist Sie erhalten dann eine Fehlermeldung wie in Abbildung 3 11 Abbildung 3 11 Fe
146. sein Hier ist die Lage allerdings schwierig Die Alternative zur Speicherung der PLZ w re eine Tabelle mit allen beteiligten Feldern und einem kompli zierten Schl ssel Hier w re eine Abw gung zwischen den Nachteilen der Redundanz und dem Vorteil der schnellen Verf gbarkeit notwendig Zusammenfassung Eine funktionale Abh ngigkeit eines Datenfeldes vom Prim rschl ssel ist gut und gewollt dies ist der Zweck des Prim rschl ssels Funktionale Abh ngigkeiten zwischen anderen Datenfeldern deuten immer auf Redun danz hin Sinn und Unsinn der Normalisierung 7 5 4 Normalformen Die Normalisierung ist also das Zerlegen von Tabellen entsprechend den funktionalen Abh ngigkeiten Dies geschieht stufenweise Mit jeder Stufe wird die m gliche Redundanz verringert Je nach Art und Umfang der ange wendeten Regeln erreichen Sie Tabellen die sich in einer sogenannten Nor malform befinden Die bekanntesten Normalformen sind E 1NF 1 Normalform m 2NF 2 Normalform m 3NF 3 Normalform Weitere Formen die aber keine so zentrale praktische Bedeutung haben m BCNF Boyce Codd Normalform E 4NF 4 Normalform E 5NF 5 Normalform Die Normalformen sind hierarchisch aufeinander aufbauend Dies bedeutet dass eine Tabelle die in 3NF ist automatisch auch in 1NF und in 2NF ist Ziel ist es zumeist f r alle Tabellen die 3NF zu erreichen 1 Normalform 1NF Flat table Eine Relation ist in INF wenn 1NF E kein Date
147. sein In jedem Fall m ssen alle beteiligten SELECT Anweisungen strukturgleiche Datens tze liefern Die letzte Spalte ist mit den Literalen Artikel beziehungsweise Kurse belegt worden um besser zu verdeutlichen welcher Datensatz aus welchem Schema stammt Das Ergebnis der Anweisung ist in Abbildung 11 2 als Ausschnitt zu sehen Die Ergebnismenge ist hier zus tzlich sortiert worden indem am Ende der Anweisung ein ORDER BY eingef gt wurde Die Sortierung muss am Ende geschehen da erst jetzt die gesamte Ergebnismenge bekannt ist Sortieren Sie in einer UNION Anweisung nach M glichkeit mit der Spaltennum mer gez hlt in der Reihenfolge der Spalten ab 1 da die Spalten in den ver Tipp schiedenen SELECT Anweisungen meistens unterschiedliche Feldnamen besitzen 329 5 Kapitel 11 Mengenoperationen UNION INTERSECT EXCEPT MINUS Abbildung 11 2 Ergebnis der UNION FAMILIENNAME VORNAME GEBURTSDATUM KURSE Anweisung A mmermann Udo 16 07 08 Artikel Bauer Tatjana 16 07 08 Artikel Behn Heinrich 16 07 08 Artikel Behrens Cornelia 16 07 08 Artikel Bit Hans Joachim 16 07 08 Artikel B ger Werner 16 07 08 Artikel Bothe Frieda 16 07 08 Artikel Brase Jan 16 07 08 Artikel Bucco Arnold 16 07 08 Artikel Bucz Susanne 06 04 76 Kurse B hren Tamara 16 07 08 Artikel B hring Uwe 16 07 08 Artikel B ttner Detlef 16 07 08 Artikel Cromberg Joerg 07 06 91 Kurse Dreyer Manfred 16 07 08 Artikel Dricksen Anja 16 07 08 Artikel Eggers
148. sequenziell erledi gen Die Datenbank kann in vielen F llen die infrage kommenden Daten s tze als linken oder rechten Teilbaum unterhalb des gefundenen Eintrags ermitteln und so unmittelbar weiterarbeiten Eine weitere Besonderheit stellen Spalten mit sehr wenigen verschiedenen Werten dar Im Extremfall sind es nur zwei Werte wie beim Datentyp Boo lean Es ist offensichtlich dass ein Index der auf einem B Baum basiert hier unter Umst nden nicht sonderlich effektiv ist wenn nicht gerade ein Wert selten ist und die Datens tze mit dem seltenen Wert oft gesucht werden In solchen F llen helfen die Bitindizes die von einigen Datenbanken ange boten werden und die speziell f r Spalten mit wenigen Werten entwickelt wurden Diese Werte werden dann so als Bitmuster verschl sselt dass ein schneller Match mit dem entsprechenden Muster bei der Suche m glich ist In der Praxis gilt Probieren geht ber Studieren Wenn Sie also eine Reihe bekannter Zugriffe in Form von SELECT Anweisungen haben die oft ausge f hrt werden m ssen und zeitkritisch sind sollten Sie mit verschiedenen Indizes testen Zusammenfassung Indizes helfen bei der Suche nach bestimmten Datens tzen WHERE Klausel der Sortierung von Tabellen nach bestimmten Attributwerten ORDER BY Klausel der Gruppierung nach Attributen GROUP BY und HAVING Klausel E der Abfrage ber mehrere Tabellen hinweg Fremdschl ssel Prim r schl ssel Beziehungen We
149. sich auch auf Tabellenebene darstellen MS Access verwendet dazu das sogenannte Beziehungsfenster in dem m gli che Verbindungen dargestellt werden k nnen Damit l sst sich die Struktur der Datenbank visualisieren die in allen Datenbanken existiert Mithilfe eines JOIN l sst sich beispielsweise auch eine Kursliste erstellen die neben der Kurskennung und dem Anfangs und Endedatum des Kurses das Kursthema angibt Dazu werden die beiden Tabellen tbKurs und tbKursthema miteinander verbunden SELECT k Kurskennung k Kursbeginn k Kursende kt Kursthema FROM tbKurs k INNER JOIN tbKursthema kt ON k KTHID kt KTHID ORDER BY k Kursbeginn ASC Das Ergebnis des JOIN ist in Abbildung 4 23 diesmal als Oracle Ergebnis dargestellt Tabellen miteinander verbinden JOIN u 4 m Abbildung 4 23 KURSKENNUNG KURSBEGINN KURSENDE KURSTHEMA Kurse mit Kursthema Celle17 Word 23 04 07 27 04 07 Word I Celle20 Word 09 07 07 13 07 07 Word I Hannover89 Access 09 07 07 13 07 07 Access Hannover90 Windows 16 07 07 18 07 07 Einstieg mit Windows Hannover91 Windows 23 07 07 25 07 07 Windows f r Fortgeschrittene Celle23 Access 06 08 07 10 08 07 Access Celle24 Access 13 08 07 17 08 07 Access Il 7 rows returned in 0 11 seconds CSV Export Die alte JOIN Syntax Leser die sich fr her schon einmal mit SQL besch ftigt haben werden sich JOIN mit SQL89 vielleicht ber die bisher beschriebene JOIN Syntax gewundert haben Tat s chlich war bis
150. t erheblich beitragen Ein weiterer Vorteil der Verwendung der REFERENCES Klausel liegt darin dass die Daten bank wenn sie um den Zusammenhang von Prim rschl ssel und Fremd schl sselfeld wei eigenst ndig den Zugriff auf diese Beziehung optimieren kann So kann beispielsweise ein Index auf den Fremdschl ssel generiert werden der bei Nutzung der Beziehung einen deutlich schnelleren Zugriff zwischen den beiden Tabellen garantiert bungen zur CREATE TABLE Anweisung mit REFERENCES 1 Erstellen Sie die Tabelle fahrzeughalter die den Namen und Vornamen des Fahrzeughalters sowie einen Fremdschl ssel kennzeichen enth lt der sich auf die in 8 2 1 3 erstellte Tabelle fahrzeug bezieht Der Prim r schl ssel ist der Name 8 2 2 1 2 Erstellen Sie eine Tabelle inspektion die eine Nummer und das Datum einer Inspektion zeigt und als Fremdschl ssel das Fahrzeug beinhaltet 8 2 2 2 Optionale Beziehung Vorteile des REFERENCES bungen 265 W kaites 266 Syntax Datenbanken erstellen SQL DDL 8 3 Integrit tsbedingung Neben der Definition von Feldern k nnen bei der Erzeugung der Tabellen struktur mit CREATE TABLE weitere Bedingungen angegeben werden Dabei handelt es sich um Integrit tsbedingungen die das Datenbankmanagement system selbstst ndig berpr ft beziehungsweise die es ihm erlauben den Zugriff auf die Daten zu optimieren Die wesentlichen Typen sind E Prim rschl ssel eine alternative
151. t2 Regeln f r Unterabfragen in der WHERE Klausel 9 6 Regeln f r Unterabfragen in der WHERE Klausel Die bisherigen Ergebnisse f r Unterabfragen sollen an dieser Stelle zusam mengefasst werden Unterabfragen werden in der WHERE oder HAVING Klausel einer SELECT Anweisung eingesetzt um die Menge der ermittelten Daten s tze einzuschr nken Dabei gilt dass E Unterabfragen als eigene SELECT Anweisung die in Klammern gesetzt wird formuliert werden E Unterabfragen mit einem Vergleichsoperator gt gt lt lt oder lt gt mit einem Datenfeld verbunden werden wenn es sich bei dem Ergebnis der Unterabfrage um eine einzelne Zeile mit einem einzelnen Wert han delt E Unterabfragen mit einem Vergleichsoperator mit ALL oder ANY oder einem IN oder EXISTS eingef gt werden wenn es sich um mehrere Zeilen han delt E cine Sortierung mit ORDER BY in einer Unterabfrage unn tig und in den meisten Datenbanksystemen auch unzul ssig ist Unterabfragen in vielen F llen durch einen JOIN ersetzt werden k nnen aber bei Weitem nicht in allen F llen 9 7 Erweiterungen der Unterabfragen Neben den bisher angesprochenen Nutzungsm glichkeiten existieren noch eine Reihe von Erweiterungen f r Unterabfragen Unterabfragen k nnen neben der Nutzung in der WHERE und der HAVING Klausel auch in der FROM Klausel einer SELECT Anweisung genutzt werden In diesem Fall dienen sie dazu eine eigene virtuelle Tabelle zu s
152. tem verbinden und die Handhabbarkeit der einzelnen API ist unterschied lich Manchmal muss auch ein Umweg ber eine andere Sprache gegangen werden Es gibt aber auch besonders enge Kopplungen Das beste Beispiel stellt die Verbindung von PHP und MySQL dar Mit dem Beispiel in Listing 14 10 wird die Verbindung zu einer MySQL Datenbank hergestellt ein Schema ausge w hlt und eine SQL Anweisung ausgef hrt Dann wird das Ergebnis der Anweisung genutzt um es als HTML Tabelle formatiert auszugeben verbindung mysql_connect localhost root masterkey if C verbindung die Der Server ist nicht erreichbar if C mysql_select_db kurse verbindung die Das Schema existiert nicht sql SELECT FROM tbPerson result mysql_query sql anzahl_felder mysql_num_fields result anzahl_datensaetze mysql_num_rows result Jetzt wird die Tabelle zur Ausgabe vorbereitet echo lt table border 1 gt Kopfzeile ausgeben echo lt tr gt for i 0 i lt anzahl_felder i feldname mysql_field_name result i echo lt th gt feldname lt th gt echo lt tr gt Datenzeilen ausgeben while row mysql_fetch_assoc result echo lt tr gt foreach row as key gt wert echo lt td gt wert amp nbsp lt td gt echo lt tr gt echo lt table gt Zun chst wird eine Verbindung zur Datenbank hergestellt Dabei werden der Name des Servers der Name des Benutz
153. tzer Karl 29221 Celle Bahnhofstra e 2 CE23 50 00 Magerkurth Melissa 29336 Nienhagen Am T mpel 3 Hier sind zum ersten Mal zwei Tabellen in einer SELECT Anweisung ange sprochen tbPerson alias p und tbKursbesuche alias k Entsprechend kann die Ergebnismenge aus einer Auswahl aus den Feldern dieser beiden Tabellen bestehen KID und GezahlterBetrag sind der Tabelle tbKursbesuche entnom men der Rest der Tabelle tbPerson Die Qualifizierung der Feldnamen macht die SOL Anweisung wieder einmal deutlich lesbarer Neu ist in beiden SQL Anweisungen der Ausdruck FROM tbPerson p INNER JOIN tbKursbesuche k ON p PID k KTID bersetzt bedeutet diese Zeile Verbinde die Datens tze der beiden Tabellen tbPerson und tbKursbesuche so dass ein neuer Datensatz entsteht bei dem der Wert des Feldes PID in tbPerson gleich dem Wert des Feldes KTID der Tabelle tbKursbesuche ist siehe Abbildung 4 20 tbKursbesuche KTID 413 5 CE23 0 v berweisung 100 00 50 00 tbPerson PID 5 Kl tzer Karl 29221 Celle Bahnhofstra e 2 13 03 1971 tbPerson PID tbKursbesuche KTID 413 Sice23 o o 5 Kl tzer Karl 29221 Celle Bahnh Gemeinsamer Datensatz mit allenAttributen nach dem Join beider Tabellen Tabellen miteinander verbinden JOIN Ein JOIN erzeugt also neue virtuelle Datens tze Es entsteht eine neue virtu elle Tabelle die alle Datenfelder beider Tabellen enth lt Dabei werden jeweils die beiden Datens tze aus d
154. und Zugriffsschutz Transaktionen 2222222sesesesesenenenn Mit SQL Datenbanken betreiben und optimieren Anhang Benutzung der Datenbanksysteme Anhang Boolesche Alge bra Anhang Dalen secretiei tirar ae Stichwortverzeichnis 2222 Inhaltsverzeichnis VORWOH een ee en ea nee 13 Kapitel 1 Einleitung 222c2ceeeeeeeeenennn 15 Kapitel2 SQL der Standard relationaler Datenbanken 19 2 1 Die Geschichte 2222222e2eeren 19 2 2 Die Bestandteile 22222222220 20 2 3 Die Verarbeitung einer SOL Anweisung 22 2 4 Die Struktur von SQL Anweisungen 25 2 5 Relationale Datenbanken 29 2 5 1 Tabellen 222222222 29 2 5 2 Prim rschl ssel 32 2 5 3 Beziehungen 2222cceeerenn 33 Kapitel 3 Die Beispieldatenbanken 35 3 1 Die Kursdatenbank 222222 35 3 2 Schnelleinstieg und Neustart 37 321 MySQL nee 38 322 Oracle dena 38 3 2 3 Firebird uunee ae assi 39 3 2 4 MS Access nunnana 40 3 2 5 penBase un nee 40 33 MYSOL rasen nase 41 3 3 1 Gr nde f r die Nutzung 41 3 3 2 Den Server installieren und konfigurieren 2222222cscnse 41 3 3 3 Die Kommandozeile 51 3 3 4 Die grafische Oberfl che MySQL Tools 54 3 3 5 Eine Beispi
155. vielen flei igen H nde die es letztlich erm glicht haben dieses Buch zu ver legen und zu Ihnen zu bringen Der Dank gilt insbesondere Frau Bauer Schiewek f r ihre Geduld ihre stets schnelle Reaktion und die gute Betreu ung Besonderer Dank gilt Herrn Dirk Louis f r viele Anregungen Verbesse rungsvorschl ge und Korrekturen F r dieses Buch habe ich eine eigene Internetseite eingerichtet www ser val de SQL Ich werde versuchen dort zeitnah Anregungen zu kommentie ren Fehler zu korrigieren und sonstige Informationen auszutauschen John Harry Wieken Celle Einleitung Die zentrale Bedeutung von SQL liegt in seiner fast monopolartigen Position beim Zugriff auf relationale Datenbanken Diese wiederum bilden das R ck grat der Datenverarbeitung von gro en mittleren und immer mehr auch kleineren Unternehmen Eine Bank eine Versicherung oder ein Industriebe trieb ohne eine relationale Datenbank ist schwer vorstellbar Sp testens dann wenn mehr als ein Mitarbeiter gleichzeitig auf den Datenbestand zugreifen soll ist eine Datenbank fast unerl sslich Das kann beispielsweise ein Warenwirtschaftssystem eine Internetpr senz oder ein Berichtssystem sein Datenbanken verbergen sich hinter Excel Anwendungen genauso wie hinter klassischen maskenorientierten Systemen hinter Web Oberfl chen wie hinter einer Gro rechneranwendung Datenbanken spielen also eine zentrale Rolle f r die Datenverarbeitung Relationale Systeme haben i
156. von verschiedenen SQL Interpretern konsequent in Gro schreibung umgesetzt siehe Abbildung 4 4 VORNAME NAME Postleitzahl Wohnort der Person Peter Weiss 30529 Hannover Susanne Bucz 30531 Hannover Thomas Karmann 29227 Celle Karl Kl tzer 29221 Celle Karin Weiss 30529 Hannover Datar WWaice 2R124A Rraunerkhuain Soll eine gemischte Schreibweise realisiert werden so k nnen daf r die dop pelten Anf hrungsstriche um das Alias gesetzt werden Sie sehen au erdem dass ber die Verwendung der Anf hrungsstriche auch Leerzeichen in den Namen eingef gt werden k nnen was vor allem bei einer direkten Ausgabe f r einen Endanwender sinnvoll sein kann Leerzeichen und andere Sonderzeichen erh hen aus Anwendersicht oft die Lesbarkeit von Namen Die Angabe Stundensatz in _ ist besser lesbar als StundensatzInEuro oder Stundensatz in Einfache Abfragen Als Namen f r Datenbankfelder sollten Leerzeichen oder andere Sonderzei chen aber vermieden werden F r den Anwender aber bitte niemals f r weiterverarbeitende Programme k nnen Sie dann einen Feldnamen Stundensatz_in_Euro immer noch mit einem SELECT Stundensatz_in_Euro AS Stundensatz in _ FROM tbMitarbeiter f r die Ausgabe mit dem gew nschten Alias versehen um den Anwender zufriedenzustellen Sollen also Datenbankobjekte wie Tabellen und Spalten verarbeitet werden so ist es im Allgemeinen keine gute Idee Leerzeichen oder andere sch ne Symbole und Sond
157. wird Die Unterabfrage tritt an die Stelle eines beliebigen Ausdrucks Datenfelds oder Literals und hat alle Eigenschaften eines Ausdrucks wie Datentyp L nge oder NULL Wert Die Grundsyntax ist feldname Vergleichsoperator SELECT Wobei die Unterabfrage und der erste Operand auch ihre Position tauschen k nnen So liefert in der folgenden SQL Anweisung die Unterabfrage die Anzahl der Kursbesuche Da keine weitere Einschr nkung erfolgt handelt es sich um die Besuche aller Kurse Listing 9 6 Unterabfrage in der HAVING Klausel 305 W kaites wen Alle Listing 9 7 Ermittlung aller Kurse n mindestens ein Kurs besucht wird Listing 9 8 Kurse mit mindestens einem Teilnehmer Unterabfrage ohne Aggregation Listing 9 9 Ermittlung eines Wertes Nu Zwei Unterabfragen in der 306 mit einer Unterabfrage Listing 9 10 tzung eines JOIN statt einer Unterabfrage Listing 9 11 WHERE Klausel Unterabfragen Sub SELECT SELECT KID FROM tbKursbesuche t WHERE C SELECT COUNTC FROM tbKursbesuche gt 0 Sinnvoller ist es die Kurse zun chst zu gruppieren und dann die Anzahl der Teilnehmer je Kurs zu ermitteln um dann die Kurse herauszufiltern die tat s chlich Teilnehmer haben SELECT KID FROM tbKursbesuche t GROUP BY t KID HAVING SELECT COUNT C FROM tbKursbesuche gt 0 Grunds tzlich lassen sich Unterabfragen auch nutzen um Werte zu ermit teln ohne dabei Aggregatfunktionen zu v
158. wird relativ wenig Speicherplatz f r den Index ben tigt Durch die geringe Gr e der Information kann wesentlich mehr Information mit einem Zugriff gelesen werden und es k nnen unter Umst nden schnellere Speicher Cache f r die Speicherung eines Index verwendet werden Dies zusammen mit der f r die Suche optimierten Struktur erm glicht eine wesentlich schnellere Suche nach Datens tzen als in den Originaltabellen In einem Index kann gesucht werden und anschlie end mithilfe des Querverweises auf die kompletten gefundenen Datens tze unmittelbar zugegriffen werden Die Verwaltung des Index und die Suche sind ausschlie lich Sache der Datenbank Sie erstellen Ihre SQL Anweisung insbesondere die SELECT Anweisung und das Datenbankmanagementsystem optimiert die Abfrage indem es die infrage kommenden Indizes ber cksichtigt Wie gesagt Sie m ssen sich theoretisch nicht um die Verwendung der von Ihnen angelegten Indizes in den SELECT Anweisungen k mmern praktisch ist es allerdings ratsam gerade f r h ufig eingesetzte SELECT Anweisungen eine Analyse der verwendeten Indizes vorzunehmen Dies stellt sicher dass die gew nschten Indizes tats chlich verwendet werden Das ist nicht so selbstverst ndlich wie es sich zun chst anh rt praktisch k nnen bereits kleine Unterschiede in einer SELECT Anweisung die Nutzung eines Index ver hindern und so zu erheblich l ngeren Antwortzeiten und einer erheblich gr eren Belastung des Datenbankm
159. zugegriffen und die entsprechenden Werte wer den entnommen Die Benennungen sind unterschiedlich Das Listing 5 14 zeigt g ngige Beispiele SELECT CURRENT_TIMESTAMP SELECT NOWO SELECT Jetzt SELECT SYSDATE Als Standard k nnen heute die Angaben mit CURRENT angesehen werden also CURRENT_DATE CURRENT_TIME beziehungsweise CURRENT_TIMESTAMP Die Ermittlung von Bestandteilen eines Datums oder einer Uhrzeit wie Jahr Monat Tag Stunde Minute oder Sekunde kann zunehmend mit der Funk tion EXTRACT geschehen Dabei wird angegeben welche Einheit also Jahr Monat Tag Stunde Minute Sekunde und einige andere Angaben aus wel cher Zeitangabe extrahiert werden soll Beispielsweise wird mit DAY FROM geburtsdatum der Tag aus dem Feld geburtsdatum extrahiert und kann dann weiterverwendet werden Daneben existieren eine Reihe lterer Funktionen f r diesen Zweck die aus Kompatibilit tsgr nden weiter verwendet werden Die Tabelle 5 15 gibt eine bersicht ber g ngige Funktionen SQL Funktion Erl uterung Beispiel CURRENT_DATEO Das aktuelle Datum und teil CURRENT_DATEC er Be weise auch die Uhrzeit werden gt 2008 07 20 se ermittelt CURRENT_TIME Die aktuelle Uhrzeit wird ermit CURRENT_TIMEC gt u telt gt 20 27 39 CURRENT_TIMEST Liefert den aktuellen Timestamp CURRENT_TIMESTAMP AMPO gt t gt 2008 08 20 20 27 39 an Standard um eine Datums Zeit EXTRACT YEA
160. zulassen Aktivieren Sie dies wenn Sie eine Verbindung mit einem ffentlichen Netzwerk von weniger sicheren Orten aus wie z B Flugh fen herstellen Es wird keine Benachrichtigung angezeigt wenn Programme geblockt werden Die auf der Registerkarte Ausnahmen durchgef hrte Auswahl wird ignoriert O Inaktiv nicht empfohlen Vermeiden Sie diese Einstellung Durch Deaktivieren des Windows Firewalls ist dieser Computer weniger vor Viren oder anderen Angriffen gesch tzt Weitere Informationen ber den Windows Firewall 49 W kaites 50 Abbildung 3 13 Freigabe des TCP Ports 3306 f r MySQL Die Beispieldatenbanken Gehen Sie in die Systemsteuerung und ffnen Sie die Windows Firewall Unter Vista m ssen Sie noch auf SICHERHEITSCENTER klicken bevor Sie die Windows Firewall ffnen k nnen Wenn Sie Ihre Firewall aktiviert haben siehe Abbildung 3 12 k nnen Sie diese nat rlich deaktivieren Ratsamer ist es aber gezielt nur den von MySQL verwendeten Port freizugeben Dazu m ssen zun chst Ausnahmen zugelassen sein Gehen Sie auf AUSNAH MEN und w hlen dort die Option PORT Sie gelangen in ein kleines Fenster in dem Sie den Port 3306 freigeben k nnen Port hinzuf gen Verwenden Sie diese Einstellungen um einen Port durch den windows Firewall zu ffnen Informationen betreffend der Suche der Portnummer und des Protokolls erhalten Sie in der Dokumentation des Programms bzw des Diensts den Sie ve
161. 02 10 2007 09 23 17 23 24 z 4711 2 9801 5 2007 09 23 17 29 24 8 3 2 Fremdschl ssel erstellen FOREIGN KEY Fremdschl ssel dienen der Verbindung von Tabellen untereinander Eine Beziehung zwischen zwei Tabellen wird durch eine Festlegung getroffen die angibt welches Fremdschl sselfeld welchem Prim rschl sselfeld in einer anderen Tabelle entspricht Ein Prim rschl ssel kann wie gesehen aus einem oder mehreren Feldern bestehen Entsprechend gilt dasselbe auch f r den Fremdschl ssel Die Anzahl der Felder in Prim rschl ssel und Fremd schl ssel muss sich nat rlich entsprechen damit die Felder paarweise ver bunden werden k nnen Der einfachste Fall eines Prim rschl ssels ist ein einziges Feld Entsprechend wird dann auch nur ein Fremdfeld ben tigt Das ist einfach daher ist ein sol ches Konzept oft w nschenswert In der Praxis zeigen sich aber immer F lle wo auch Konzepte mit mehreren Feldern sinnvoll erscheinen Datenbankadministratoren lieben einfache Prim r und Fremdschl ssel Sie werden viele Gr nde vortragen warum Sie keine mehrfachen Schl ssel brau chen und viele dieser Gr nde sind stichhaltig Tats chlich l sst sich jede logisch modellierte Kombination mehrerer Felder zu einem Schl ssel im Rah men der Umsetzung in das Datenbankmodell durch ein Feld ersetzen Es ist in jedem Fall bedenkenswert ein neues rein technisches Schl sselfeld einzu f hren das im einfachsten Fall einfach aus einer Nummerier
162. 04 2007 27 04 2007 17 15 00 H90 Hannover90 Windows 16 07 2007 18 07 2007 17 15 00 H91 Hannover91 Windows 23 07 2007 25 07 2007 Der USING JOIN ist letztlich eine verk rzte Schreibweise f r die klassische Variante des CONDITION JoIn Noch k rzer ist die Schreibweise des NATURAL JOIN Dieser nat rliche JOIN beruht ebenfalls auf gleichnamigen Datenfel dern in den beiden beteiligten Tabellen Er geht insofern noch einen Schritt weiter als der USING JOIN als dass alle gleichnamigen Felder als Teil des JOIN aufgefasst werden Es wird also berhaupt kein Datenfeldname mehr angegeben sondern der SQL Interpreter berpr ft alle Spalten auf m gliche Gleichnamigkeit und erstellt implizit eine Bedingung f r jede Kombination gleichnamiger Felder FROM tabellennamel NATURAL JOIN tabellenname2 Mit der Syntax des NATURAL JOIN erh lt man SELECT d PID d Stundensatz k KID k Kurskennung k Kursbeginn k Kursende FROM tbDozent d NATURAL JOIN tbKurs k Bitte beachten Sie dass MS Access openBase und Firebird hier wiederum keine Unterst tzung anbieten In MySQL m ssen Sie mit Alias arbeiten damit der NATURAL JOIN funktioniert Die USING Syntax ist eine eing ngige und einfache Syntax die allerdings nur relativ wenig Schreibarbeit spart Problematisch ist dass der USING JOIN nur von einigen Datenbankmanagementsystemen unterst tzt wird Sollten Sie planen verschiedene Datenbankmanagementsysteme zu verwenden sollten Sie lieber d
163. 0529 3 M llerBreitenhees29536 10 LisewskiB arsinghausen30890 11 MartensCelle29221 15 SchlachterCelle29227 17 PeredyCelle29221 23 RuppertBergen29301 24 Sanderlelle23223 25 CrombergBraunschweig38152 26 Schulzewinsen29308 31 WinterHermannsburg29320 32 PlateHannover30523 34 MagerkurthNienhagen29336 37 Damit zeigt sich dass f r die obige SOL Abfrage tats chlich nur der Index ort verwendbar ist Der Index ort2 enth lt zwar die Angaben allerdings in der falschen Reihenfolge Hier m sste die Abfrage wie in Listing 14 4 lauten Ein guter Optimierer erkennt dies selbstst ndig darauf verlassen kann man sich allerdings nicht SELECT FROM tbPerson WHERE Ort Hannover AND Familienname Weiss Der Index plz w re teilweise nutzbar da zumindest der Familienname als linker Anfangsteil verwendet werden kann Es k nnen alle Personen mit dem Namen Weiss ermittelt werden Die Datens tze k nnen ermittelt und dann kann in den Datens tzen gepr ft werden ob diese Personen in Hannover wohnen Existieren nicht zu viele Personen mit dem Namen Weiss kann dies durchaus noch effizient sein Der Index name ist dagegen f r die SOL Anweisung berhaupt nicht nutzbar da der zun chst links ben tigte Familienname aus der WHERE Klausel nicht bekannt ist Damit bleibt hier nur die vollst ndige Suche in der Tabelle Weitere berlegungen zum Einsatz von Indizes Entsprechende Vorsicht ist auch bei der Verwendung der Platzhalter in
164. 06 06 1960 15 Martens Melanie 29221 Celle Horstweg 258 17 02 1961 17 Schlachter Dieter 29227 Celle Mondhagen 43 02 02 1961 23 Peredy Helmut 29221 Celle Mauernstra e 2 23 02 1956 24 Ruppert Nicola 29301 Bergen Welfenallee 23 25 02 1962 25 Sander 29223 Celle Marxallee 12 05 02 1953 26 Cromberg J rg 38152 Braunschweig Nordring 13 07 06 1991 31 Schulze Tanja 29308 Winsen Berliner Ring 23 09 11 1992 32 Winter Petra 29320 Hermannsburg Immenhoop 51 30 12 1989 34 Plate Ulrich 30529 Hannover Gutenberggasse 5 02 12 1986 37 Magerkurth Melissa 29336 Nienhagen Am T mpel 3 04 09 1951 W rtlich bersetzt hei t das LIES die Werte der FELDER Familienname Vorname und Geburtsdatum Listing 2 2 AUS der TABELLE tbPerson Deutsche Umschreibung aller Datens tze F R die gilt dass die PLZ den Wert 29221 hat des Listings 2 1 Die Grundstruktur der SELECT Anweisung wird durch die sogenannten Schl sselw rter KEYWORDS bestimmt hier also SELECT FROM WHERE In dieses Ger st sind anstelle der Punkte die ben tigten Angaben einzuf gen Am Beispiel dieser SOL Anweisung k nnen Sie auch den Zusammenhang MS Access zwischen der eigentlichen SOL Anweisung und der MS Access Oberfl che erkennen Abbildung 2 4 zeigt die Eingabe die in MS Access f r die Formu lierung der obigen SQL Anweisung notwendig ist Im oberen Teil ist die Tabelle tbPerson dargestellt die als Basis f r die Informationen dienen wird Der Name dieser Datenquelle
165. 1 WM karitea Sortierung und Datentyp Listing 4 15 Fiktive Abfrage zur Sortierreihenfolge bei alphanumerischen Werten Abbildung 4 10 Beispiel f r die Sortierreihenfolge alphanumerischer Werte 102 Mit SQL Daten abfragen SELECT Die Sortierreihenfolge h ngt von dem Datentyp eines Datenfeldes ab So gilt f r numerische Typen einschlie lich der Prozentangaben und W hrungsfor mate die gewohnte Reihenfolge der Zahlenmengen Bei aufsteigender Sor tierung werden kleinere Zahlen nach vorn gr ere Zahlen nach hinten sor tiert Entsprechend wird bei Datums und Zeitangaben vom fr heren Datum beziehungsweise der fr heren Zeit aufsteigend zu neueren Datums respek tive neueren Zeitangaben sortiert Bei alphanumerischen Angaben liegen die Dinge komplizierter Hier bestimmt der zugrunde liegende ASCII oder ANSI Code und die entspre chende COLLATE Angabe zur Auswahl des Zeichensatzes die Reihenfolge der Sortierung Betrachten Sie dazu das Ergebnis der Testabfrage in Listing 4 15 auf einer fiktiven Tabelle tbTest SELECT Test FROM tbTest ORDER BY Test ASC Das Ergebnis k nnte wie in Abbildung 4 10 dargestellt aussehen Hannover _Hannover 19 190 hannover Hannover Es wird stets zun chst das erste Zeichen der Inhalte verglichen sind diese gleich das zweite Zeichen sind diese gleich das dritte Zeichen bis zum Ende der Zeichenketten Sind beide Zeichenketten bis zum Ende gleich wird die k rzere vor die l
166. 113 115 133 CREATE TABLE 268 Erstellung 264 Fremdschl sseltabelle 270 FROM 99 117 136 147 FULL OUTER JOIN 130 Funktion 136 153 Aggregatfunktion 138 168 193 alphanumerisch 169 180 Casting 169 187 Datum 169 Datum Uhrzeit 183 MS Access 172 NULL 168 numerisch 169 175 Skalarfunktion 168 sonstige 169 VBA 172 Funktionale Abh ngigkeit 244 G Gleitkommazahl 158 GMT 161 GRANT 254 342 343 353 GREATEST 176 Gro schreibung 95 GROUP BY 134 147 Syntax 136 VIEW 295 Gruppendatensatz 136 145 Gruppierung 136 einstufig 134 mehrstufig 136 MS Access 139 openBase 139 totale 140 Gruppierungsfeld 134 gsec 350 425 5 Stichwortverzeichnis H HAVING 144 147 203 Syntax 145 VIEW 295 HSQL 83 l IDENTIFIED BY 341 Identifikation 342 IF 150 190 Implementierung 224 IN 108 309 Index 369 378 INNER JOIN 116 InnoDB 46 360 INSERT 199 mit Unterabfrage 202 321 Syntax 201 203 205 Installation Firebird 75 MySQL 41 openBase 83 Oracle 69 Installation Beispiel Firebird 79 MS Access 66 MySQL 58 openBase 84 Oracle 72 INT 157 INTEGER 151 156 157 Integrit tsbedingung 266 INTERSECT 333 INTERVAL DAY 151 INTERVAL HOUR 151 Intervall 151 IS NULL 110 164 Isolation 361 Isolationslevel 364 J Jahrtausendwechsel 160 JOIN 114 126 130 225 alte Syntax 117 Condition JOIN 123 CROSS JOIN 131 Equi JOIN 125 INNER JOIN 116 mehrere Tabellen 119 426 NATURAL JOIN 124 134 Non Equi JOIN 125 OUTER JOIN 127 re
167. 154 200 ndern 210 Begrenzung 104 einf gen 199 identischer 98 l schen 215 216 Datensatzmenge 90 Datenschutz 340 Datensicht siehe VIEW Datentyp 31 149 258 297 alphanumerisch 153 156 165 bin re und sonstige 162 Datum Uhrzeit 160 165 Dezimalzahl 159 ganzzahlig 156 Gleitkommazahl 159 numerisch 165 Datentypcode 152 DATETIME 162 Datum Uhrzeit 165 Datum Zeit 151 Datumsdarstellung 105 Dauerhaftigkeit 361 DCL 21 339 DDL 21 249 DECIMAL 151 159 DEFAULT 200 259 DELETE 215 mit Unterabfrage 323 Syntax 216 TRUNCATE 217 Denormalisierung 247 DESC 101 147 DESCENDING 101 Detailtabelle 270 Dezimalzahl 159 DIN 5007 252 DISTINCT 98 147 295 330 DML 21 26 Dom ne 227 297 DOUBLE 151 159 DROP DATABASE 253 DROP DOMAIN 300 DROP INDEX 375 DROP ROLE 342 349 351 DROP SCHEMA 253 DROP TABLE 284 DROP USER 342 DROP VIEW 294 E Eigenschaft siehe Attribut Einf geanomalie 241 Entit t 225 226 232 Kandidat 234 Umsetzung ERM in Tabelle 238 Entity Relationship Modell siehe ERM Entwurf konzeptioneller 223 logischer 223 Entwurfssicht 98 Equi JOIN 125 ERM 224 232 Ersatzname 94 99 Escape Zeichen 165 EXCEPT 335 EXISTS 111 310 EXP 175 EXTRACT 183 F Fehlbedienung 340 Feld Datentyp 149 Name 95 167 NULL 163 Stichwortverzeichnis ae E m Feld siehe Datenfeld Felddefinition 258 264 Feldname 258 Feldnamensliste 92 Firebird 74 FIRST 143 194 FLOAT 151 159 FLOOR 175 FOREIGN KEY 269 Fremdschl ssel 34
168. 2 E 7 Weiss Peter 38134 Braunschweig Glanweg 4 02 03 1974 A Meier Kathrin R154 Rrannerhwein Welfenallee 73 NA NA 1981 Datensatz Tupel Datentyp Beziehung Abbildung 2 7 Ausschnitt aus der Tabelle tbPerson 31 W karitez 32 Prim rschl ssel Sprechende Schl ssel K nstliche Schl ssel SQL der Standard relationaler Datenbanken 2 5 2 Prim rschl ssel Jeder Datensatz einer Tabelle muss eindeutig identifizierbar sein So muss beispielsweise jede Person in der Tabelle tbPerson eindeutig erkennbar sein Da Namen und auch Vornamen mehrfach auftreten k nnen sind diese nicht eindeutig Es wird ein zus tzliches Feld eingef hrt dessen Wert f r jeden Datensatz in der Tabelle eindeutig ist die Personen Identifikationsnummer PID In Abbildung 2 7 ist der Feldwert 1 des Feldes PID in der Tabelle tbPerson eindeutig Mithilfe dieses Wertes kann der Datensatz des Dozenten Weiss eindeutig gefunden werden Wir haben uns in vielen F llen im t glichen Leben bereits daran gew hnt dass alles eine Nummer bekommt Personalausweise Artikel Rechnungen Fahrgestelle Fl ge und Versicherungspolicen sind nur einige Beispiele Diese Nummern werden vergeben weil die Unternehmen ihre Informationen in Datenbanken abspeichern In diesen Datenbanken m ssen die einzelnen Datens tze eindeutig identifizierbar und unterscheidbar sein Dies geschieht mit sogenannten Schl sseln oder genauer Prim rschl sseln manchmal auch
169. 2007 32 Winter Petra 18 08 2007 22 12 21 CE23 Access Celle23 Access 06 08 2007 10 08 2007 24 Ruppert Nicola 18 08 2007 22 12 21 CE23 Access Celle23 Access 06 08 2007 10 08 2007 37 Magerkurth Melissa 18 08 2007 22 12 21 Neue Datens tze einf gen INSERT 6 1 3 INSERT mit SET Eine Alternative zu der INSERT Anweisung mit Feldnamenliste und Werte liste ist die SET Syntax Dabei werden die einzelnen Felder namentlich erw hnt und ihnen werden wie sonst auch Werte ber Ausdr cke zugewie sen Allerdings erfolgt die Zuordnung von Feldname und Wert nicht ber die Reihenfolge in einer Liste sondern ber eine ausdr ckliche Zuordnung von Feldname und Wert INSERT INTO tbKurs SET KID 894 Kurskennung CONCATC CE24 Access KTHID 3 KursdauerStunden 40 Kursbeginn ADDDATE CURRENT_DATE 14 Kursende ADDDATE Kursbeginn 4 Zertifikat N Gebuehr 400 00 Ustpflichtig J DID NULL Diese Schreibweise hnelt der Syntax wie wir sie bei der nderung einzelner Werte in Datens tzen UPDATE sehen werden Alle in einem SET nicht erw hnten Felder werden mit den Standardwerten DEFAULT belegt Alle Fel der die nicht erw hnt sind und f r die auch kein DEFAULT Wert vorliegt wer den Sie ahnen es schon mit NULL belegt Sind Felder in der Tabellendefi nition mit NOT NULL definiert sind NULL Werte also nicht erlaubt wird die INSERT Anweisung abgewiesen und der komplette Datensatz wird nicht geschrieben
170. 29313 Hamb hren 03 04 61 1 45 Herr Leu Walter Birkenweg 9 29320 Hermannsbur 01 08 62 1 46 Herr Guhr Bernd Heidberg 3 29320 Hermannsbur 23 05 48 1 47 Herr _Gertendorf Rainer Lotharstra e 49 29320 Hermannsbut 03 01 89 1 48 Herr B ger Werner Willighausen 34 29320 Hermannsbut 22 02 61 1 49 Fabian Bullerich Herr Behn Heinrich S genf rth 13 29320 Hermannsbut 23 02 68 150 Frau Bauer Tatjana Dicksbarg 1 29320 Hermannsbut 24 09 87 Abbi Idung C7 1 51 Frau Suchy Jessica Unter den Eichen 7 29320 Hermannsbur 12 12 51 P 1 52 Herr Siegmann Rudolf Ericaweg 17 29320 Hermannsbut 10 05 79 Tabelle Kunde Teil2 1 __53 Rein amp Sohn Her Schitzke Michael Alte Gasse 15 29320 Hermannsbut 31 12 83 A h itt 254 Herr Skraole Dietmar Georg Haccius Stra e 12 29320 Hermannsbuu 03 07 61 Ausschnitt 1 55 Herr Tasasche Gunter Olendorp 6 29320 Hermannsbur 08 02 41 1 56 Herr Grambow Siegfried Lange Str 15 29331 Lachendorf 06 08 42 157 Her Mitzke Anton Kurze Str 12 29331 Lachendorf 23 11 54 1 58 Frau Dricksen Anja Alte Grenze 7 29364 Langlingen 08 05 72 159 Frau M ller Anna Alte Grenze 7 29225 Celle 17 03 29 3 60 Frau Kluge Jacqueline Hauptstr 19 29364 Langlingen 23 08 91 1 61 Herr Jahnke Peter Hauptstra e 22 29364 Langlingen 15 08 65 2 62 Herr Franck Bruno Schwarzer Weg 19 29336 Nienhagen 09 03 46 3 63 Herr Lahn Wilhelm Dorfstra e 9 29336 Nienhagen 09 05 30 1 64 Herr Reisinger Thomas Drosselweg 23 29336 Nienhagen 16 09 81 1 65 Her T lke Wim Am Fleitgraben 41 29336 Nie
171. 3 muss aber im SQL Fenster ROUND C eingeben Daher ist in den folgenden Tabellen bei der Angabe der Abbildung 5 7 Auswahl nach Klick mit rechter Maustaste auf eine Spalte Abbildung 5 8 Ausdrucks Generator f r die Nutzung von Funktionen 173 WM kaites Beispiel Listing 5 9 Mathematische Operatoren 174 zur Berechnung von Ausdr cken Abbildung 5 9 Ergebnis der SELECT Anweisung mk Umsatzsteuer Operatoren DIV MOD Datentypen Ausdr cke und Funktionen Funktionsnamen f r MS Access immer zun chst der englische Name wie wir ihn in SQL ben tigen und danach der deutsche Name des Ausdrucks Gene rators angegeben Die Handhabung des Ausdrucks Generators k nnen Sie der MS Access Hilfe entnehmen Hier soll SQL im Vordergrund stehen daher wird im Folgenden auch bei MS Access immer nur das Beispiel im SQL Fenster angegeben Hier verh lt sich MS Access dann gl cklicherweise wieder recht standardkon form 5 6 2 Numerische Funktionen Die einfachsten und zugleich auch oft die wichtigsten Funktionen stellen die mathematischen Funktionen dar In der Tabelle tbKurs sind die Kursgeb hren f r die einzelnen Kurse aufge f hrt Dabei handelt es sich um Nettopreise Jetzt sollen f r alle Kurse die umsatzsteuerpflichtig sind neben den Nettopreisen auch die Umsatzsteuer 19 und der sich dann ergebende Bruttopreis in der SELECT Anweisung angegeben werden Die SELECT Anweisung hierzu lautet dann
172. 3 1 Gr nde f r die Nutzung MySQL ist ein Datenbankmanagementsystem das von der MySQL AB ent wickelt wurde und neben einer kommerziellen Variante auch unter der Gene ral Public License GPL verf gbar ist Es darf damit f r unsere bungszwe cke frei eingesetzt werden Die breite Verf gbarkeit und die Lauff higkeit unter Linux wie unter Windows haben es insbesondere f r Internetserver aber auch f r viele mittelgro e Betriebe oder Abteilungen popul r gemacht Kurz vor der Fertigstellung dieses Buches wurde MySQL von Sun bernom men Was dies f r die Zukunft der Datenbank bedeutet bleibt abzuwarten Hinzu kommt dass MySQL sowohl ber eine klassische zeilenorientierte SQL Befehlseingabe als auch ber zahlreiche grafische Front Ends verf gt mit denen komfortabel SQL Befehle direkt eingegeben werden k nnen Man kann also sehr dicht am System sein aber auch sehr komfortable Oberfl chen nutzen F r MySQL spricht also Gro e Popularit t und weite Verbreitung E Freie Verf gbarkeit f r die Leser m Klassische SQL Eingabem glichkeiten verbunden mit einer grafischen Benutzeroberfl che Die Beispiele beruhen auf der Version 5 0 41 f r den Server und 5 0 11 f r den Client Nat rlich gibt es laufend neuere Versionen auf denen die Bei spiele ebenfalls funktionieren sollten Als Oberfl che wird MySQL Adminis trator 1 2 12 gew hlt eine ebenfalls weitverbreitete grafische Oberfl che 3 3 2 Den Server installieren und
173. 3 Gleitkommazahlen Die Zahlen mit Nachkommastellen lassen sich grunds tzlich in die Gleit kommazahlen mit einer variablen von der Byte Anzahl abh ngigen oder einer festgelegten Genauigkeit und in Dezimalzahlen manchmal auch Fest kommazahlen mit einer festen Anzahl Nachkommastellen einteilen Die erstere Gruppe entspricht den aus anderen Programmiersprachen wie C oder Pascal bekannten Implementierungen von Gleitkommazahlen Es wird im Wesentlichen zwischen der Rechnung mit einfacher Genauigkeit FLOAT und mit doppelter Genauigkeit DOUBLE PRECISION unterschieden Eine Besonderheit ist die M glichkeit die Nachkommastellen vorzugeben FLOAT n Eine Gleitkommazahl oder Festkommazahl wird in der Form 1jVorzeichen Mantisse Basis Exponent dargestellt Der wesentliche Unterschied zwischen der Gleitkommazahl und der Festkommazahl ist nur der dass bei einer Gleitkommazahl bin r gerech net wird die Basis also 2 ist w hrend bei einer Festkommazahl Dezimal zahl zur Basis 10 gerechnet wird In beiden F llen k nnte mit einer flexiblen oder mit einer festen Anzahl von Nachkommastellen gearbeitet werden Die bin re Logik ist aber schneller erlaubt bei komplexen Berechnungen eine h here Anzahl von Nachkommastellen und wird zumeist bei mathemati schen Berechnungen bevorzugt wo man dann zumeist auch die gr tm g liche Genauigkeit nutzt Es gibt sie aber mit variabler und seltener genutzt fester Anzahl von Nachkommastelle
174. 4 Die erste Excel Zeile Microsoft Access kann Ihre Spalten berschriften als Feldnamen verwenden Enth lt die erste definiert die Attributnamen angegebene Zeile Spalten berschriften 8 Behalten Sie im n chsten Schritt die Option IN EINER NEUEN TABELLE bei siehe Abbildung A 35 Damit wird das SQL f r die Erstellung einer neu en Tabelle generiert und diese anschlie end mit Daten gef llt Der Import in eine bestehende Tabelle kann in vielen F llen an ver nderten Struk turen doppelten Schl sseln und anderen Problemen scheitern Daher sollte sp ter bei Reparaturen und weiteren Importen stets gepr ft wer den ob die Strukturen wirklich identisch sind Abbildung A 35 Daten sollten in eine neue Wo m chten Sie Ihre Daten speichern Tabelle importiert werden Oi m O In einer bestehenden Tabelle v 404 MS Access 9 Im n chsten Schritt hat MS Access die Daten ab Zeile 2 analysiert und daraus Folgerungen zum Datentyp gezogen siehe Abbildung 1 36 Ty pische Werte sind Double f r Zahlen Text f r alphanumerische Fel der und Datum Uhrzeit wenn Access charakteristische Formate f r eine Datums und oder Uhrzeitangabe erkannt hat Sie k nnen durch Markieren der Spalten die erkannten Werte pr fen Sie k nnen auch eine Spalte nach der Markierung vom Import ausschlie en und so eine Aus wahl der gew nschten Felder treffen Das macht immer dann Sinn wenn Sie es mit denormalisierten
175. 45 oder allgemein t gt S In der Sprache der relationalen Datenbanken hei t das Aus den Werten des Datenfeldes t kann in jedem Datensatz eindeutig der Wert des Datenfeldes s bestimmt werden Anders ausgedr ckt s ist von t funktional abh ngig Beispiele Kundennummer gt Kundenname Der Kundenname ist funktional von der Kundennummer abh ngig Wenn die Kundennummer bekannt ist ist der Kundenname eindeutig ermittelbar Wenn die Nummer 2 ist ist der Name Ewald Kuhn KG In einer Tabelle f r Bestellungen muss nat rlich die Kundennummer gespeichert werden Es w re aber falsch dort auch den Kundennamen zu speichern dieser sollte vielmehr aus ei ner Kundentabelle mit der Kundennummer ermittelt werden PID gt Geburtsdatum Das Geburtsdatum ist von der Personen Iden tifikationsnummer funktional abh ngig Ist die PID 5 bekannt kann daraus das Geburtsdatum 5 10 1962 eindeutig bestimmt werden Das Geburtsdatum geh rt aber in die Personentabelle da es zu einer Person geh rt Die funktionale Abh ngigkeit von der PID ist gewollt und muss sogar gelten schlie lich sollen mithilfe der PID als Prim rschl ssel der gesamte Datensatz und damit auch alle Werte im Datensatz ermittelt werden k nnen Ort Stra e Hausnummer gt PLZ Sind Ort Stra e und Hausnummer bekannt kann in Deutschland die Postleitzahl eindeutig bestimmt wer den Sie sehen es k nnen auch mehrere Datenfelder beteiligt
176. 56 8 1 6 bungen er 257 E 10 Inhaltsverzeichnis Kapitel 9 8 2 8 3 8 4 8 5 8 6 8 7 Tabellen erstellen CREATE TABLE 8 2 1 Standardangaben f r Felder 8 2 2 Fremdschl sselbeziehungen Integrit tsbedingung 2 22220200 8 3 1 Prim rschl ssel PRIMARY KEY 8 3 2 _ Fremdschl ssel erstellen FOREIGN KEY 8 3 3 Allgemeine Integrit tsbedingung 8 3 4 UNIQUE Bedingung 8 3 5 bungen zu Integrit tsbedingungen 8 3 6 MS Access 222cceeeeeeeeeeeeeeennn Die Tabellen ndern ALTER TABLE Tabellen l schen DROP TABLE Benutzer und Programmsichten CREATE VIEW 2222222 222 8 6 1 Spaltenselektion 8 6 2 Zeilenselektion 8 6 3 Tabellen kombinieren 8 6 4 Der VIEW in MySQL 8 6 5 Der VIEW in MS Access 8 6 6 Einen VIEW ndern ALTER VIEW DROP VIEW 8 6 7 _ nderbarkeit eines VIEW 8 6 8 bungen nncen Doman essensen EAN ENE EE 8 7 1 Dom nen erstellen 8 7 2 Dom nen ndern ALTER DOMAIN 8 7 3 Dom nen l schen DROP DOMAIN 8 7 4 ben Unterabfragen Sub SELECT 9 1 9 2 9 3 9 4 9 5 9 6 9 7 9 8 Nutzung von Unterabfragen Unterabfragen mit Vergleichsoperatoren Unt
177. 8 2007 07 16 2007 07 18 kein 120 J 834 H91 Hannoverg1 windows 2 18 2007 07 23 2007 07 25 kein 120 J 834 Sie k nnen die Eingabe einer SQL Anweisung jetzt noch mit der ebenfalls bereits aus der zeilenorientierten Oberfl che bekannten Anweisung SELECT FROM tbKurs ben was hoffentlich in MySQL Query Browser im Ergebnis zur Anzeige aller Datens tze der Tabelle tbKurs f hrt siehe Abbildung 3 27 Denken Sie an das Ausf hren der Anweisung und daran dass die auszuf hrende Anwei sung markiert sein muss sonst erhalten Sie die Fehlermeldung Sie haben versucht einen leeren String auszuf hren Bitte geben Sie eine SQL Anweisung in das Bearbeitungsfeld ein nd f hren Sie sie dann aus Damit wird die Beschreibung der grunds tzlichen Logik von MySQL hier zun chst abgeschlossen Sie sollten jetzt den grunds tzlichen Umgang beherrschen und mit Details wollen wir uns im Zusammenhang mit den SQL Anweisungen besch ftigen Wir wollen jetzt die restlichen bungsta bellen aufbauen soweit nicht schon geschehen Nachdem Sie die Daten f r die erste Tabelle erfolgreich importiert haben k nnen Sie mit allen weiteren Tabellen genauso verfahren mysql exe uroot pmasterkey kurse lt person txt mysql exe uroot pmasterkey kurse lt kursbesuche txt mysql exe uroot pmasterkey kurse lt dozent txt mysql exe uroot pmasterkey kurse lt kursthema txt MS Access ae 3 m Damit haben Sie die komplette bungsdatenbank kurse in Ihre
178. AEVEW W WM o B i sri Der a ist b tbdazent in das Schema kurse gt m tbkurs aufgenommen worden 7 tbkursbesuche gt m tbkursthema 7 tbperson b kursce23 m Wichtig f r die Eindeutigkeit des VIEw und die Vermeidung von kartesischen Produkten CROSS JOIN ist die Angabe des JOIN also beispielsweise p PID kb KTID der sicherstellt dass die beiden Tabellen tbPerson und tbKursbe suche ber den Schl ssel beziehungsweise Fremdschl ssel auch im VIEW wirklich miteinander verbunden werden Neben den Spalten die Teil des VIEW sind m ssen auch die nur ber die WHERE Klausel oder anderen Teile der SELECT Anweisung beteiligten Tabellen angegeben werden Probleme ergeben sich regelm ig wenn Spalten mit identischen Namen existieren Diese Spalten m ssen daher insbesondere in einem VIEw durch Qualifikation mit dem Tabellennamen unterschieden werden um eine Ein deutigkeit herzustellen Das Konzept die Tabellen daf r mit Variablen p kb oder anderen sinnvollen Namen innerhalb der SQL Anweisung zu benen nen kennen Sie bereits aus Kapitel 4 Sie sollten es hier konsequent verwen den Zum einen erh ht es die Lesbarkeit des VIEW zum anderen sichert es auch bei sp teren Datenbank nderungen die Eindeutigkeit des VIEW 8 6 4 Der VIEW in MySQL Das Konzept der Datensichten VIEw ist in relationalen Datenbankmanage mentsystemen f r den unternehmensweiten Einsatz wie Oracle oder DB2 seit Langem verf gbar MySQL
179. AL 6 2 CHECK Ceinstandspreis gt 0 Tistenpreis DECIMAL 6 2 CHECKCIistenpreis gt 0 mwst_art CHAR 9 DEFAULT voll NOT NULL REFERENCES mwst mwst_art ON DELETE SET DEFAULT ON UPDATE CASCADE mindestbestand INT DEFAULT O NOT NULL CHECK mindestbestand gt 0 letzte_aenderung timestamp DEFAULT current_timestamp CHECK Clistenpreis gt einstandspreis 1 5 Sie sehen mehrere Eins tze der CHECK Option Mit der Angabe einstandspreis decimal 6 2 NULL CHECK Ceinstandspreis gt 0 wird sichergestellt dass keine Einstandspreise eingetragen werden k nnen die kleiner als O sind Derartige Preise machen auch in der Praxis keinen Sinn Zus tzlich wird als Integrit tsbedingung CHECK Clistenpreis gt einstandspreis 1 5 angegeben Diese CHECK Bedingung greift auf den Kalkulationsfaktor zur ck Dieser wird zur Bestimmung des Listenpreises aus dem Einstandspreis ver wendet und betr gt hier 1 5 Damit kann kein Artikel billiger als 50 ber Integrit tsbedingung dem Einstandspreis gelistet werden Bei der Formulierung der Bedingung werden zwei Felder der Tabelle verwendet und neben dem Vergleichsopera tor auch noch eine Rechenoperation eingesetzt Derartige Operationen wer den nicht von allen Datenbanken unterst tzt Auf Indizes wird sp ter ausf hrlich eingegangen weil sie keinen Einfluss auf die logische Struktur haben sondern der Optimierung von Zugriffszeiten dienen Oracle kennt in der hier genutzten Vers
180. ASCII4 Z5 ASCIIS Weiss wW 7 e 101 i 105 s 115 s 115 Bucz B 66 u iie 2 az 122 0 Karmann K 75 a 97 r 114 m 109 a 97 Kl tzer K 75 108 6 246 t 116 2 122 weiss wW 97 e 101 i 105 s 115 115 weiss W 97 e mpi 105 s 1158 s 115 Meier M 7 e 101 i 105 e 101 r 114 Schmidt 5 sspe zel 104 m 109 i 105 M 7 252 108 108 e 101 M ller Problematisch sind Texte in der Praxis durch ihren Speicherbedarf insbe sondere bei sehr unterschiedlich langen Texten durch den Zeichensatz der festgelegt werden muss durch die Unterscheidung in Gro Kleinschreibung und durch die oft schlechte Performance bei Textrecherchen Beginnen wir mit dem Speicherbedarf In einer Datenbanktabelle hat ein bestimmtes Feld f r jeden Datensatz eine festgelegte L nge Soll in einem Feld ein Text gespeichert werden muss der l ngste in allen Datens tzen zu erwartende Text auch noch gespeichert werden k nnen Entsprechend muss das Textfeld f r diesen gr ten Wert dimensioniert werden Dies kann zu sehr gro en Feldern f hren die noch dazu in vielen Datens tzen nur sehr wenige Zeichen beinhalten nur um im ung nstigsten Fall noch ausreichend Speicherplatz zu bieten Daher hat man bereits fr hzeitig im Standard eine Unterscheidung zwischen Textfeldern mit fester L nge CHAR und solchen mit variabler L nge VARCHAR getroffen Bei CHAR Feldern wird stets die volle Anzahl der Bytes belegt die bei der Definition angegeben ist ob sie nun ben tigt wird oder nicht Ni
181. AT n SINGLE FLOAT n FLOAT n DOUBLE Zahl Bei den Gleitkommazahlen steht zwar NUMERIC zur Verf gung ist aber wie DECIMAL also mit variabler L nge implementiert Eine Besonderheit von Oracle ist der Typ NUMBER m n der in Oracle Daten banken der numerische Typ schlechthin ist und f r fast alle Zwecke verwen det werden kann Er hnelt am meisten dem DECIMAL m n aber durch das Weglassen der Nachkommastellen kann er auch f r andere Zahlen beispiels weise INTEGER verwendet werden Dezimalzahl Tabelle 5 5 Gleitkommazahlen und Festkommazahlen MySQL Oracle 159 WM kaites MS Access Datum Uhrzeit DATE TIME DATETIME 160 Datentypen Ausdr cke und Funktionen Bei Access erfolgt die Einstellung des Typs ber die Auswahl Zahl und die anschlie ende Auswahl der FELDGR SSE die dann wiederum je nach Einstel lung noch eine Auswahl der GENAUIGKEIT m und der DEZIMALSTELLEN n erlaubt Der Datentyp W HRUNG wird direkt ausgew hlt und erlaubt nur eine Angabe der Nachkommastellen Durch seine Bindung an das W hrungssym bol entspricht er nicht wirklich dem Typ NUMERIC zeigt aber ein entsprechen des Verhalten 5 1 4 Datum Uhrzeit Es gibt eine Reihe von Formaten die speziell f r die Speicherung von Datums und Zeitangaben vorgesehen sind Nat rlich k nnten diese Anga ben auch in normalen alphanumerischen Feldern gespeichert werden Die speziellen Datentypen wie DATE TIME
182. AULT Ganz analog kann die CHECK Bedingung ge ndert werden Dabei ist vor einer nderung jeweils das Entfernen der bisherigen Bedingungen notwendig ALTER DOMAIN mehrwertsteuerart DROP CONSTRAINT Die neue Bedingung kann dann mit einem ADD hinzugef gt werden ALTER DOMAIN mehrwertsteuerart ADD CHECK VALUE IN C voll teil kein Damit ergibt sich als Syntax f r die ALTER DOMAIN Anweisung ALTER DOMAIN ALTER DOMAIN dom nenname DROP DEFAULT DROP CONSTRAINT SET DEFAULT ausdruck ADD CHECK VALUE IN bedingung AND OR VALUE IN bedingung Beachten Sie dass die vorhandenen Werte in den existierenden Daten eines Feldes die neuen Bedingungen nicht erf llen m ssen Schlie lich wurden sie unter anderen Voraussetzungen in die Tabellen eingef gt Je nach Daten banksystem wird eine solche nderung mit oder ohne L schung vorhande ner Werte bernommen Standardwerte k nnen problemlos bernommen werden da sie nur neue INSERT oder neu zu ndernde Datens tze UPDATE betreffen 8 7 3 Dom nen l schen DROP DOMAIN Das L schen von Dom nen geschieht wiederum mit einer DROP Anweisung DROP DOMAIN mehrwertsteuerart 299 W kaites 300 DROP DOMAIN bungen Datenbanken erstellen SQL DDL Beachten Sie aber dass eine Dom ne in Tabellen verwendet wird Solange diese Tabellen existieren k nnen Sie eine Dom ne nicht l schen Das Daten bankmanagementsystem quittiert dies mit einer Fehl
183. Anweisung bungen 1 Erstellen Sie eine neue Spalte Tieblingsspeise mit maximal 50 Zeichen f r die Kinder in der Tabelle kind aus U8 3 2 die freiwillig angegeben werden kann 8 4 1 2 L schen Sie das Feld lieblingsspeise wieder aus der Tabelle kind 08 4 2 L schen Sie den Fremdschl ssel auf den Kunden 08 4 3 4 L schen Sie die Integrit tsbedingung die beim Geschlecht eine Eingabe von M oder W erfordert U8 4 4 5 F gen Sie eine neue Integrit tsbedingung ein die beim Geschlecht eine Eingabe von M oder F erfordert 8 4 5 283 W kaites DROP TABLE Beispiel f r referenzielle 284 Integrit t Datenbanken erstellen SQL DDL 8 5 Tabellen l schen DROP TABLE Sie k nnen Tabellen vollst ndig sowohl mit Struktur als auch mit allen Daten aus der Datenbank entfernen Soll beispielsweise die Tabelle artikel komplett entfernt werden so reicht dazu DROP TABLE artikel Nachdem Sie diesen Befehl eingegeben haben ist die komplette Tabelle gel scht Dabei werden neben der Struktur nat rlich auch s mtliche Daten in der Tabelle gel scht Sie sind damit vollst ndig verloren Die Syntax lautet also DROP TABLE tabellenname Das Datenbankmanagementsystem pr ft allerdings vor der L schung ob einer L schung referenzielle Integrit ten entgegenstehen Referenzielle Inte grit ten werden bekanntlich durch den CONSTRAINT FOREIGN KEY fremdschl sselfeld REFERENCES tabell
184. Anweisung um diesen Datensatz abzufragen funktioniert aber wie in Lis ting 5 7 zu sehen in englischer Notation Dieselbe Abfrage mit 23 45 f hrt zu einer Fehlermeldung SELECT FROM tbDozent WHERE Stundensatz 23 45 Intern greift der SQL Interpreter also auf die englische Schreibweise zur ck Gehen Sie davon aus dass das praktisch immer der Fall ist und schreiben Sie Ihre SOL Anweisungen unbeeinflusst von der deutschen Oberfl che auch hier mit der englischen Syntax Vorzeichen k nnen angegeben werden also 123 45 oder 123 45 Zahlen mit fehlendem Vorzeichen werden als positive Zahlen interpretiert Die Verwendung der wissenschaftlichen Schreibweise mit Zehnerexponent also 123 12E 2 oder 123 12e 2 f r 123 12 10 12312 ist ebenso erlaubt wie blich Im brigen sind diverse datenbankspezifische Erweiterungen vorhanden die Sie aber der Dokumentation Ihres Datenbanksystems entneh men sollten Datum Zeit Literale Die meisten Probleme ergeben sich erfahrungsgem bei den Datums und Zeitliteralen Der SOL Standard ist hier recht eindeutig DATE jjjj mm tt TIME hh mm ss hh mm TIMESTAMP jjjj mm tt hh mm ss ddddddddd hh mm Ausdr cke Das Datum DATE wird also mit vierstelliger Jahresangabe und jeweils zwei stelliger Monats und Tagesangabe getrennt mit Bindestrichen angegeben Dieses Format ist sehr sortierfreundlich da es sich direkt f r jede Sortierung nach auf oder a
185. Arbeit mit den Beispielen dieses Buches bereitzustel len Es soll Ihnen zum anderen aber auch ein wenig Hintergrund zu den Bei spielen und der Handhabung der Umgebungen liefern F r diejenigen die sich nur f r die Beispiele interessieren und die Datenbank installation bereits kennen reicht es die Abschnitte 3 1 und 3 2 zu lesen F r die anderen Leser empfehlen sich auch die weiteren Kapitel insbeson dere diejenigen Abschnitte die die Sie interessierenden Datenbanken beschreiben 3 1 Die Kursdatenbank Die wichtigste Beispieldatenbank ist die sogenannte Kursdatenbank Sie Kursdatenbank beschreibt die Sicht eines Schulungsunternehmens auf seine Kurse Dabei steht hier der Beispielgedanke im Vordergrund viele Details sind daher nicht enthalten die in der Praxis sicherlich eine zentrale Rolle spielen Das Ziel der Datenbank soll aber auch nicht die reale Abbildung des Schulungsunterneh mens sein sondern ein m glichst verst ndliches Beispiel f r die SOL Anwei sungen 35 5S Kapitel 3 Datenmodell Kursdatenbank Abbildung 3 1 Datenbankschema der Kursdatenbank tbPerson 36 Die Beispieldatenbanken Zun chst wollen wir uns daher das Modell mit seinen Tabellen und Feldern sowie den m glichen Beziehungen ansehen tbKursbesuche Selbstzahler Zahlweise Rabatt tbPerson GezahlterBetrag tbKurs KID Kurskennung KTHID KursdauerStunden Kursbeginn Kursende Zertifikat tbKursthema
186. B wahr hell Sonne scheint Licht aus A ist wahr B ist falsch also ist A ODER B wahr hell Sonne scheint nicht Licht aus A ist falsch B ist falsch also ist A ODER B falsch nicht hell Die dritte Kombination f r zwei Aussagen A und B ist dass die Gesamtaus sage A ODER B wahr ist wenn genau eine nicht beide Aussage wahr ist Da nur eine der beiden Aussagen wahr sein darf spricht man von einem Exklusive ODER A Die Zahl X ist negativ B Die Zahl Y ist negativ C Das Produkt X Y ist negativ A XOR B Wenn A XOR B wahr ist dann gilt auch C dass das Produkt negativ ist X 2 Y 3 A ist wahr B ist wahr A XOR B ist falsch das Produkt ist positiv X 2 Y 3 A ist falsch B ist wahr A XOR B ist wahr das Produkt ist negativ X 2 Y 3 A ist wahr B ist falsch A XOR B ist wahr das Produkt ist negativ X 2 Y 3 A ist falsch B ist falsch A XOR B ist falsch das Produkt ist positiv Die Tabelle B 1 zeigt die Zusammenh nge Anhang Boolesche Algebra B m A A UND B A ODER B A XOR B a w w w u f w f f w f w f w w f f f f f Neben diesen Zusammenh ngen gibt es noch die Negation NICHT NICHT ver ndert ein wahr in ein falsch und umgekehrt 415 E E O E Anhang Daten C 1 Datenbank Kurse PID Familienname Vorname PLZ Ort Strasse Geburtsdatum Abbildung C 1 1 Weiss Peter 30529 Hannover Palmstra e 6 07 11 1963 Tabelle toPerson
187. Base ist hier einmal mehr recht sensibel Tabellennamen und Feldnamen ohne Anf hrungsstriche werden in Gro schreibung umge setzt wie es dem SQL Standard entspricht Wenn Sie in Ihrer Datenbank aber die Tabellen oder Felder in gemischter Schreibweise benannt haben erkennt openBase diese nicht mehr Sie m ssen also Anf hrungsstriche ver wenden wie im Beispiel in Listing 1 1 zu sehen Wenn Sie ganz sichergehen wollen setzen Sie alles in Anf hrungsstriche und achten auf eine korrekte Schreibweise auch hinsichtlich der Gro und Kleinschreibung INSERT INTO tbKursthema KTHID Kursthema Kursbeschreibung Kursdemo DauerPlan Voraussetzung VALUES 12 MySQL MySQL Einsteigerkurs NULL 40 2 Abbildung 1 46 Direkte SQL Eingabe in openOffice base Listing 1 1 Beispiel eines SQL Befehls in openBase 411 5 Anhang A 412 Anhang Benutzung der Datenbanksysteme Zum Abschluss noch ein Hinweis openBase verwendet normalerweise die Datenbankmaschine HSQL zur Speicherung der Daten und Ausf hrung der SQL Anweisungen openBase verfolgt aber einen breiteren Ansatz als andere Systeme und stellt seine Oberfl che auch anderen Datenbanksystemen wie MySQL zur Verf gung oder anders ausgedr ckt openBase kann auf Daten in diesen Systemen zugreifen und SQL Befehle ausf hren Bereits beim Start der Oberfl che fragt Sie der Assistent ob Sie eine neue Datenbank erstellen eine bestehende Datenbankdatei ffnen oder
188. Bei Problemen gibt es eine andere M glichkeit Geben Sie die SQL Anweisung im Fenster EXTRAS SQL ein Hier werden alle drei Ope ratoren ausgef hrt Das Problem ist jetzt allerdings dass in diesem Fenster keine Ergebnisse angezeigt werden F gen Sie daher ein CREATE VIEW an also beispielsweise wie in Listing 11 7 CREATE VIEW keineDozenten AS SELECT p PID p Geburtsdatum Person FROM tbPerson p UNION SELECT d PID CURRENT_DATE Dozent FROM tbDozent d Aktualisieren Sie danach in der Ansicht die Tabellen Das Ergebnis k nnen Sie sich dann wiederum im Abfragefenster mit einem einfachen SELECT FROM keineDozenten ansehen openBase kennt immer nur ein Schema sodass eine Abfrage ber Schemata hinweg so nicht m glich ist bungen 11 6 Zusammenfassung Mit den Mengenoperationen k nnen Ergebnisse verschiedener SELECT Anweisungen miteinander in Beziehung gesetzt werden Sie k nnen in beliebiger Menge miteinander kombiniert werden Die Unterst tzung ist in den meisten Datenbanksystemen eher sp rlich Dies entspricht auch der Bedeutung in der Praxis die eher gering ist Die Reihenfolge der Abarbeitung der UNION INTERSECT und MINUS Anwei sungen richtet sich im Normalfall nach der angegebenen Reihenfolge von links nach rechts beziehungsweise von oben nach unten Es gibt allerdings Optimierungen die versuchen zun chst kleinere Mengen zu ermitteln und zu verarbeiten Daher hat dann INTERSECT Vorrang vor
189. Bereich des INNER JOIN verallgemeinern diesen aber hinsichtlich des Vergleichsoperators f r die beteiligten Felder Bisher hat jeder JOIN immer auf der Gleichheit der Werte in zwei Feldern beruht Auf grund der Gleichsetzung der Werte zweier Felder spricht man auch von einem Equi JOIN also einem JOIN der auf quivalenz also Gleichheit der Werte zweier Datenfelder beruht Dies ist die bei Weitem blichste Art einen JOIN zu bilden Es gibt allerdings auch F lle in denen es nicht darauf ankommt die Werte zweier Felder mit dem Gleichheitsoperator zu verbin den sondern beispielsweise mit einem lt oder gt Man spricht auch von einem Non Equi JOIN Wir formulieren jetzt also JOIN Anweisungen die nicht auf dem Gleichheits operator beruhen und vergleichen damit Daten aus verschiedenen Tabellen ber einen JOIN Sollen beispielsweise alle Kurse ermittelt werden deren tats chliche Kurs dauer kleiner ist als die im Rahmen der Beschreibung des Kursthemas geplante Dauer so kann dies mit folgender SELECT Anweisung geschehen SELECT k KID k Kurskennung k KursdauerStunden kt Kursthema kt DauerPlan FROM tbKursthema kt INNER JOIN tbKurs k ONCk KTHID kt KTHID AND k KursdauerStunden lt kt DauerPlan Das Ergebnis ist in Abbildung 4 29 dargestellt KID Kurskennu Kursdauer Stunden Kursthema DauerPlan H90 Hannover90 Windows IE Einstieg mit Windows 20 H91 Hannover91 Windows 18 Windows f r Fortgeschrittene 20 CE23 Celle23
190. D WHERE KID CE23 Beachten Sie dass Sie nach der Ausf hrung des Befehls gegebenenfalls in Ihrer Oberfl che eine Aktualisierung der dargestellten Tabellen durchf hren m ssen Dann sollten Sie eine neue Tabelle tbce23 sehen siehe Abbildung 10 1 kurse 7 tbce23 7 tbdozent b M thka rs Danach k nnen Sie den Inhalt der neuen Tabelle mit einem SELECT FROM tbce23 abfragen und sollten etwa das Bild aus Abbildung 10 2 erhalten Sie sehen dass mit der Tabellenstruktur auch die Inhalte direkt bernommen worden sind Diese Inhalte sind vollst ndige Kopien der Originaldaten und von die sen unabh ngig Damit ist jetzt in der Datenbank nat rlich eine Redundanz entstanden Familienname Vorname KID Fehltage Zeugnis Karmann NOMaS CE23 2 N Kl tzer Karl CE23 ON Martens Melanie CE23 5 N M ller Claudia CE23 ON Schulze Tanja CE23 1 N winter Petra CE23 ON Ruppert Nicola CE23 2 N Magerkurth Melissa CE23 8 N Weiss Peter CE23 ON Eine solche Tabelle ist aber beispielsweise sinnvoll wenn Sie einen Schnapp schuss des aktuellen Standes zu einem bestimmten Stichtag ben tigen um ihn zu archivieren an eine Au enstelle ein Zulieferunternehmen oder andere Adressaten zu liefern In solchen F llen k nnen Sie auch das aktuelle Datum leicht erg nzen indem Sie mit CURRENT_DATE oder NOWO eine ent sprechende Erg nzung vornehmen CREATE TABLE tbce23 SELECT p Familienname p Vorname kb KID kb Fehltage kb Zeu
191. D oder OR miteinander verbunden bungen zur SELECT Anweisung mit WHERE Klausel Erstellen Sie f r die folgenden Aufgaben jeweils eine SELECT Anweisung 1 Erstellen Sie eine Liste aller Personen mit Familienname Vorname PLZ Ort und Geburtsdatum die in Braunschweig wohnen U4 4 1 Ermitteln Sie alle Personen mit Familienname Vorname PLZ Ort und Ge burtsdatum die aus einem Ort kommen der mit einem B beginnt Sor tieren Sie die Orte alphabetisch und verwenden Sie dabei die Positionsnummer der Sortierspalte 4 4 2 Ermitteln Sie alle Personen mit Familienname Vorname PLZ Ort und Strasse die aus einem Ort kommen dessen Postleitzahl kleiner als 30000 ist und die in einer Stra e wohnen die allee enth lt Sortieren Sie die Postleitzahlen aufsteigend Geben Sie als Alias f r das PLZ Feld kleiner 30000 an Qualifizieren Sie alle Angaben 4 4 3 Ermitteln Sie in der Tabelle tbKursthema alle Kursthemen in deren Kurs beschreibung die Begriffe Access Excel oder Datenbank vorkom men und die 40 oder 80 Stunden dauern Zeigen Sie nur die Themen an 4 4 4 Ermitteln Sie aus der Tabelle tbKursbesuche alle Teilnehmer des Kurses CE23 mit KID Zahlweise Rabatt und dem gezahlten Betrag die entwe der mit Gutschein bezahlen oder nicht mit Gutschein bezahlen und min destens 250 bezahlt haben Sortieren Sie die Liste absteigend nach dem gezahlten Betrag U4 4 5 Tabellen m
192. DATETIME oder TIMESTAMP bieten aber den gro en Vorteil dass f r sie spezielle Sortierungen und Berechnungen mit Funktionen in Datumslogik nutzbar sind Damit dies m glich ist m ssen alle Datumsangaben immer in demselben Format gespeichert werden Normalerweise ist dies die Reihenfolge Jahr Monat Tag f r Datumsangaben mit zwei oder vorzugsweise vierstelligen Jahresangaben und Bindestrichen als Trennzeichen Die Angabe f r Weih nachten 2008 w re dann 2008 12 24 Zweistellige Jahresangaben sind ebenfalls erlaubt also 08 12 24 und werden gleichbedeutend interpre tiert Bei zweistelligen Jahresangaben ist allerdings der Jahrtausendwechsel zu beachten So kann 70 als Jahresangabe sowohl 1970 als auch 2070 bedeu ten Ab welchem Wert eine zweistellige Jahresangabe als 19xx interpretiert wird und bis wohin sie als 20xx gilt ist einstellungsabh ngig MySQL hat zur Zeit als Standardeinstellung festgelegt dass der Zeitraum 1970 2069 als g ltig angesehen wird also bedeutet 70 noch 1970 w hrend 69 schon f r 2069 steht Testen Sie dies f r Ihre Datenbank wenn Sie mit zweistel ligen Jahresangaben arbeiten sonst kann es bei der Sortierung zu berra schenden Ergebnissen kommen Generell sind vierstellige Jahresangaben vorzuziehen F r die Uhrzeit gilt normalerweise das Format HH MM SS also jeweils zweistellige Angaben f r Stunden Minuten und Sekunden Die Stunden werden im 24 Stunden Syste
193. DID SELECT 894 AS Ausdr1 CE25 MySQL AS Ausdr2 3 AS Ausdr3 40 AS Ausdr4 NowC AS Ausdr5 Ausdr5 18 AS Ausdr6 0 AS Ausdr7 400 AS Ausdr8 1 AS Ausdr9 812 AS Ausdr10 Neue Datens tze einf gen INSERT Sie sehen dass MS Access wiederum eine Anweisung mit SELECT erzeugt hat obwohl in der Abfrage auf keine andere Tabelle Bezug genommen wurde Daher besteht das SELECT aus der einfachen Form ohne FROM Klausel Die Angaben Ausdri Ausdr2 und die weiteren Angaben werden von MS Access wieder automatisch als Alias generiert Sie k nnen sie verwenden um sich in Ihren Wertbestimmungen auf andere Ausdr cke zu beziehen wie Sie am Ausdruck Ausdr5 18 AS Ausdr6 f r das Kursende erkennen k nnen Nat rlich k nnen Sie die Alias umbe nennen und eigene Ausdr cke verwenden Wenn Sie diese Abfrage in MS Access ausf hren fragt MS Access Sie wie derum in einer Kontrollabfrage ob Sie den neuen Datensatz wirklich einf gen wollen Sie haben also ber die Oberfl che die INSERT Anweisung richtig erzeugt und k nnen Sie ausf hren Die Abfrage mit dem SELECT als Datenquelle sieht relativ kompliziert aus Viel einfacher k nnte MS Access auch mit einer Feldnamenliste und einer Werteliste arbeiten und dann etwa folgende INSERT Anweisung generieren INSERT INTO tbKurs KID Kurskennung KTHID KursdauerStunden Kursbeginn Kursende Zertifikat Gebuehr Ustpflichtig DID VALUES 894 CE25 MySQL 3 40 Now C AS a a 18 0 400 1 812
194. Datens tzen Zeilenselektion 3 Kombination von Tabellen JOIN 8 6 1 Spaltenselektion Wir wollen f r die weiteren Beispiele zun chst wieder auf die Kursdatenbank zur ckgreifen da Sie diese bereits von der Vorstellung der SELECT Anwei sung kennen Stellen Sie sich vor dass Sie einen Brief an die Kursteilnehmer und Dozenten schreiben wollen um eine Termin nderung mitzuteilen Sie wollen die Beteiligten einfach nur anschreiben Sie brauchen also den Namen und die Adresse Sie ben tigen nicht die Kundennummer das Geburtsdatum oder andere Informationen Erfahrene Datenbankanwender werden hier einwenden dass die Kunden nummer der einzige Schl ssel ist und daher f r einen Zugriff verwendet wer den sollte Unsere Sachbearbeiter bevorzugen aber sich nur Namen zu mer ken mit den Nummern hat es schon zu viele Zahlendreher gegeben Ist dieser einmal nicht eindeutig fragen sie lieber nach Die L sung mit einem SELECT kann dann wie folgt aussehen SELECT Familienname Vorname PLZ Ort Strasse FROM tbPerson iz mE OJ TI SELECT namel name Beispiel VIEW Zeilenselektion Listing 8 11 Namen und Adressen aus der Tabelle tbPerson Abbildung 8 15 VIEW als Auswahl von Feldern aus einer Tabelle Spaltenselektion 287 W kaites 288 Listing 8 12 Definition eines VIEW mithilfe einer SELECT Anweisung Beispiel VIEW Zeilenselektion Listing 8 13 Definition eines VIEW mit Selektion
195. Datentyps die Darstellungen ge ndert werden So k nnen diverse Datums und Zeitdarstellungen ineinander umgewandelt werden Aber auch Zahlen darstellungen lassen sich umrechnen so liefert SELECT CONV 15 10 16 in MySQL die hexadezimale Darstellung zur Basis 16 der Zahl 15 die in dezimaler Darstellung zur Basis 10 angegeben ist also einfach F Datensatzorientierte Funktionen Skalarfunktionen SQL Funktion Erl uterung Beispiel CAST wert AS Wandelt den Wert in eine Darstel CAST Datentyp C 12 0 AS lung des angegebenen Datentyps DECIMAL um Dies ist logisch nicht immer m glich Welche Datentypen in wel chen Datentyp umgewandelt werden k nnen ist in der jeweiligen Doku mentation der Datenbank beschrie ben CONVERT wert alter Zeichen satz neuer Zeichensatz Texte k nnen zwischen verschiede nen Zeichens tzen konvertiert wer den soweit diese die verwendeten Zeichen unterst tzen Die Zeichen satznamen sind unterschiedlich hier sind Oracle Zeichens tze verwen det worden SELECT CONVERT C M ller US7ASCII WE8ISO8859P1 FROM DUAL gt Muller Konvertierungen zwischen Zahlen Zahlen k nnen dezimal dual oder beispielsweise hexadezimal darge CONV 28 10 16 gt IC formaten stellt werden ANSI MySQL MS Access Oracle Firebird openBase CAST wert CASTO STRO CASTO CASTO CASTO as daten FORMAT CSTRO TO_CHAR typ Wert ZString TO
196. Diese Anweisung erf llt denselben Zweck und w rde normalerweise immer verwendet werden wenn die Anweisung manuell eingegeben wird F r eine automatisch generierte Anweisung stellt der zus tzliche Schreibaufwand aber kein Hindernis dar Ein weiterer Vorteil des SELECT ist die gr ere All gemeing ltigkeit der SELECT Anweisung als Datenquelle gegen ber der VALUES Syntax Wenn Sie Anf geabfragen in MS Access erstellen ist die gesamte Beschrei bung der Datenherkunft mit einer normalen Auswahlabfrage identisch Sie k nnen das Ergebnis in Ruhe testen indem Sie in die Datenblattansicht wech seln Symbol links in Symbolleiste Was Sie hier als Ergebnis der Abfrage sehen wird genau das sein was die Datenbank bei einer Anf geabfrage an das INSERT INTOals Daten schickt Sie ndern aber noch nichts in der Daten bank Haben Sie das gew nschte Ergebnis zusammengestellt f hren Sie die Anf geabfrage tats chlich aus ABFRAGE AUSF HREN 6 1 5 INSERT bungen Erstellen Sie f r die folgenden Aufgaben jeweils eine INSERT Anweisung 1 F gen Sie ein neues Kursthema in die Tabelle tbKursthema ein Das neue Thema soll die KTHID 12 haben MySQL hei en und 40 Stunden um fassen Voraussetzung ist der Kurs Nummer 2 Die Kursbeschreibung bleibt Ihnen berlassen die Kursdemo ist unbekannt 6 1 1 Listing 6 11 Alternative vereinfachte Einf geabfrage Tipp bungen 209 W kaites 210 Datenbankinh
197. E DATE CURDATEC Date SYSDATE NOWO SYSDATEO Datum NOWO UTC_DATE CURRENT_ CURRENT_ Zeit CURRENT_ CURRENT_ TIME TIME TIME TIME CURTIMEC SYSTIME UTC_TIME CURRENT_ CURRENT_ NowO CURRENT_ CURRENT_ CURRENT_ TIMESTAMP TIMESTAMP Jetzt TIMESTAMP TIMESTAMP TIMESTAMP NOWO SYS TIME NOWO UTC_ TIME STAMP STAMP SYS_ EXTRACT_ UTC LOCAL TIMESTAMP Datensatzorientierte Funktionen Skalarfunktionen ANSI MySQL MS Access Oracle Firebird openBase EXTRACTC EXTRACT DatePart EXTRACT EXTRACT DAYNAME Einheit Einheit Einheit Einheit Einheit DAYOF FROM FROM Feld FROM FROM MONTHO Datums Datums DatTeilc Datums Datums DAYOF Zeitan Zeitan f Zeitan Zeitan Einheiten WEEK gabe gabe f nn gabe gabe DAYOF WEEKDAYC SING Yyyy YEARO DAYNAMEC q m d y w DAY YEAR ER ww h m s QUARTER C MONTHO jeweils MONTH YEARO als Text in MONTHNAME HOUR ke WEEKO MINUTEC Jahr HOUR SECONDO Monat O MINUTE C DAY_ Monats SECONDO HOUR O DAY name MINUTEO 1290 DAY_ Stunde SECONDO MinuteO Sekunde Wochen tag Wochen tags name Zeitinter DATE IntDat TO_DS DATEDIFF valle DIFFO Diff CEin INTERVAL Einheit TIME heit TO_YM Datuml DIFFO Datum1 INTERVAL Datum2 TIMESTAMP Datum2 Einheiten DIFFO DatDiffO sind yy mm dd hh mi ss ms jeweils in also bei spielsweise dd f r Tage Funk ADDDATE DateAdd Durch f Datum Ein
198. E Geburtsdatum IS NOT NULL ORDER BY 3 ASC 4 ASC Abbildung 5 14 Ergebnis der Familienname Vorname Monat Tag Geburtstagsli te Schlachter Dieter 2 2 Sander E 2 5 Martens Melanie 2 17 Peredy Helmut 2 23 Ruppert Nicola 2 25 weiss Peter 3 2 Kl tzer Karl 3 13 Bucz Susanne 4 6 Meier Kathrin 5 3 Lisewski Bermd 6 Cromberg J rg 6 7 Schmidt Karl 6 25 Karmann Thomas 8 4 Magerkurth Melissa J 4 weiss Karin 10 5 Weiss Peter 11 7 Schulze Tanja 11 9 Plate Ulrich 12 2 winter Petra 12 30 186 Datensatzorientierte Funktionen Skalarfunktionen Fax 5 m bungen zu den datumsorientierten Funktionen bungen Erstellen Sie f r die folgenden Aufgaben jeweils eine SELECT Anweisung 1 Bestimmen Sie f r alle Personen mit Geburtsdatum den Familiennamen den Vornamen das aktuelle Datum sowie jeweils die Monate und die Tage zu beiden Daten 5 6 4 1 2 Bestimmen Sie f r alle Personen den Familiennamen den Vornamen das aktuelle Datum das Geburtsdatum und ermitteln Sie mithilfe des aktuel len Datums und des Geburtsdatums f r alle Personen deren Geburts datum bekannt ist und die noch diesen Monat Geburtstag haben wie viele Tage es noch bis zu ihrem Geburtstag sind Hinweis Sollten in dem aktuellen Monat keine Personen mehr Geburtstag haben addieren oder subtrahieren Sie eine Zahl vom aktuellen Monat 5 6 4 2 3 Ermitteln Sie f r alle Kurse in tbKurs die Kursl nge in Tagen 5 6 4 3 4 Erstellen Sie eine Liste neuer
199. Ergebnis mit Zeichen satzumwandlung Tabelle 5 2 Alphanumerische Datentypen 156 Datentypen Ausdr cke und Funktionen Funktion BINARY eine bin re Speicherung simuliert und das Ergebnis dann in UTF8 umgewandelt Sie sehen dass das bei der bin ren Speicherung im Gegensatz zu der ersten zeichensatzbasierten Umwandlung jetzt nicht mehr umgesetzt werden kann Familienname 23 ASCII ASCII2 weiss i 105 i Bucz c Sel de Karmann r 114 r Kl tzer 246 weiss i 105 i Familienname 23 ASCII ASCII2 weiss i 105 i Bucz c ze a Karmann j 114 r Kl tzer 246 IM weiss i 105 i Die Tabelle 5 2 bietet eine bersicht ber die Namen der beiden wichtigsten alphanumerischen Datentypen in den verschiedenen Systemen ANSI MySQL MS Access Oracle Firebird openBase CHARACTER n CHAR n CHAR n CHAR n CHAR n CHAR n max n 255 Text 4000 32 767 255 VARYING VARCHAR VARCHAR n VARCHAR2 VARCHAR VARCHAR CHARACTER n n Memo n n n max n 65 532 64 000 4 000 32 765 Viele Datenbanken bieten zus tzliche Typen um die national relevanten Zeichens tze direkt zu verwenden Diese hei en dann beispielsweise NCHAR oder NVARCHAR Im Normalfall werden sie aber nur aus Kompatibilit tsgr n den mit Oracle zugelassen und haben kein besonderes Verhalten sodass auf sie oft verzichtet werden kann 5 1 2 Ganze Zahlen Eigentlich sollte man erwarten dass f r ganze Zahlen ein Datentyp aus rei
200. Harald 16 07 08 Artikel Elsner Rudolf 16 07 08 Artikel Falk Hermann 16 07 08 Artikel F rster Ernst J rgen 16 07 08 Artikel F rster Iris 16 07 08 Artikel Franck Bruno 16 07 08 Artikel Gertendorf Rainer 16 07 08 Artikel Grambow Siegfried 16 07 08 Artikel Guhr Bernd 16 07 08 Artikel Hauenstein Katrin ARNT NR Artikel UNION Es wird Zeit dass wir das Beispiel verallgemeinern Die komplette Syntax f r die UNION Anweisung lautet SELECT UNION ALLIDISTINCT SELECT 330 Die Vereinigungsmenge UNION UNION ALL DISTINCT SELECT ORDER BY Spaltennummer Spaltennummer Es k nnen also mehrere UNION Anweisungen kombiniert werden Mit der zus tzlichen Angabe ALL oder DISTINCT kann entschieden werden ob dop pelte Datens tze angezeigt werden sollen oder nicht Dazu folgt noch einmal ein Beispiel das au erdem eine Sortierung beinhaltet Petra Winter ist sowohl Kundin in unserer Artikeldatenbank als auch Kursteilnehmerin und somit in der Tabelle tbPerson enthalten Daher liefert SELECT p Familienname p Vorname p Geburtsdatum Kurse FROM kurse tbPerson p WHERE p Familienname LIKE W UNION ALL SELECT k Nachname k Vorname CURRENT_DATE Artikel FROM artikel kunden k WHERE k nachname LIKE W ORDER BY 1 zwei Datens tze f r Petra Winter Die Einschr nkung auf alle Personen die mit W beginnen ist brigens nur der bersichtlichkeit wegen erfolgt bereits das Listing 11 1 erzeugt die doppelten Dat
201. IEW mit JOIN ber zwei Tabellen Abbildung 8 18 Ergebnis des SELECT auf 290 den VIEW KursCE23 Datenbanken erstellen SQL DDL VIEW Schl ssel Schl ssel Fremdschl ssel Sollen beispielsweise die Adressen aller Kursteilnehmer des Kurses CE23 angegeben werden k nnen die Namen und Adressdaten der Personentabelle ber einen JOIN gefiltert mit der Tabelle der Kursbesuche als VIEw bereitge stellt werden siehe Listing 8 14 CREATE VIEW KursCE23 AS SELECT p Familienname p Vorname p PLZ p Ort p Strasse FROM tbPerson p INNER JOIN tbKursbesuche kb ON p PID kb KTID WHERE kb KID CE23 ORDER BY p Familienname ASC Auf diesen VIEw kann dann zugegriffen werden SELECT FROM KursCE23 Das Ergebnis kann wie in Abbildung 8 18 angegeben aussehen Familienname Womame PLZ Ort Strasse Karmann Thomas 29227 Celle Trift 28 Kl tzer Karl 29221 Celle Bahnhofstra e 2 Magerkurth Melissa 29336 Nienhagen Am T mpel 3 Martens Melanie 29221 Celle Horstweg 258 Miiller Claudia 29596 Breitenhees In den Fuhren 12 Ruppert Nicola 29301 Bergen WWelfenallee 23 Schulze Tanja 29308 Winsen Berliner Ring 23 Winter Petra 29320 Hermannsburg Immenhoop 51 Der VIEW selbst wird zu einem eigenen Objekt in der Datenbank In den ein zelnen Systemen wird er unterschiedlich dargestellt Die Abbildung 8 19 zeigt die Darstellung in MySQL Denken Sie an die rechte Maustaste und die Aktualisierung Benutzer und Programmsichten CRE
202. IN 129 P Parameter 169 Parser 24 Partitionierung 380 Passwort 47 Performance 104 122 146 154 247 PHP 382 PI 176 Platzhalter 106 375 111 92 _ 111 POSITION 180 POWER 175 Pr fix 30 Pr fixl nge 371 Prim rschl ssel 32 113 115 227 234 260 CREATE TABLE 266 k nstliche 33 mehrere 34 133 sprechend 32 Prim rschl sseltabelle 269 PRIMARY KEY 267 Primary key siehe Prim rschl ssel Privileg 340 Programmierschnittstelle 24 152 Programmiersprache 143 Programmierung 305 Projektion 106 Prozedur 380 Q Qualifikation 291 Qualifizierung 93 120 R RANDOM 176 READ COMMITED 365 READ UNCOMMITTED 364 REAL 151 159 Rechte 343 Recoverymanager 25 357 Redundanz 240 REFERENCES 264 427 wi Stichwortverzeichnis Referenzielle Integrit t 270 272 273 284 Regul re Ausdr cke 111 Reihenfolge 91 100 INSERT 199 JOIN 121 Sortierung Feldnamen 103 Relation 19 RENAME USER 342 REPEATABLE READ 366 REPLACE 180 Reportgenerator 143 REVOKE 344 RIGHT OUTER JOIN 129 ROLE 341 ROLLBACK 359 ROLLBACK TRANSACTION 360 ROLLBACK WORK 360 Rollenkonzept 347 root 47 ROUND 176 RTRIM 181 R ckgabewert 169 R ckg ngig 211 S Schema externes 221 285 internes 221 logisches 221 Schl ssel 226 k nstlicher 227 Schl sselkandidat 227 Schl ssel siehe Prim rschl ssel Schl sselkandidat 227 Schmutziges Lesen 364 Schnappschuss 318 Schnelleinstieg Firebird 39 MS Access 40 MySQL 38 openBase 40 Oracle 38 Schreibweis
203. JOIN tabellenname2 USING feldname Soll beispielsweise eine Liste der Kurse mit ihren Dozenten erstellt werden so kann der JOIN ber das Feld DID erfolgen das in den beiden Tabellen tbKurs und tbDozent vorhanden ist W rden Sie dies als Condition JoIN for mulieren erhalten Sie etwa das Ergebnis in Listing 4 30 SELECT d PID d Stundensatz k KID k Kurskennung k Kursbeginn k Kursende FROM tbDozent d INNER JOIN tbKurs k ON d DID k DID Formulieren Sie dasselbe Problem als USING JOIN erhalten Sie das Ergebnis in Listing 4 31 SELECT d PID d Stundensatz k KID k Kurskennung k Kursbeginn k Kursende FROM tbDozent d INNER JOIN tbKurs k USING DID Das Ergebnis w re in beiden F llen die in Abbildung 4 28 gezeigte Tabelle Leider unterst tzen viele Systeme wie MS Access openBase oder Firebird diese Syntax aber zumindest zurzeit noch nicht JOIN mit USING Beispiel Listing 4 30 L sung mit Condition JOIN Listing 4 31 L sung mit USING JOIN 123 is Kapitel 4 Abbildung 4 28 Ergebnis des USING JOIN 124 NATURAL JOIN Listing 4 32 NATURAL JOIN Tipp bungen Mit SQL Daten abfragen SELECT PID Stundensatz Kurskennung Kursbeginn Kursende 2 17 00 CE20 Celle20 Word 09 07 2007 13 07 2007 2 17 00 CE23 Celle23 Access 06 08 2007 10 08 2007 2 17 00 H89 Hannover89 Access 09 07 2007 13 07 2007 2 17 00 CE24 Celle24 Access 13 08 2007 17 08 2007 26 14 00 CE17 Celle17 Word 23
204. John Harry Wieken MASTER CLASS Einstieg f r Anspruchsvolle inkl L sungen und Lerntest Beispiele y y ADDISON WESLEY teren SQL MASTER CLASS Hier eine Auswahl Wr ADoIson wesuer 1 Access VBA A a0oson wesuer i Excel VBA Michael Schwimmer 512 Seiten 29 95 D 30 80 A ISBN 978 3 8273 2525 9 In diesem Buch erfahren Sie die Dinge die den Einsteiger vom Profi un terscheiden Alle wichtigen Themen f r das professionelle Programmie ren mit Excel VBA werden ausf hrlich angesprochen Wichtige Codebe standteile werden farblich gekennzeichnet Auf Ubersichtlichkeit und didaktische F hrung wurde besonderer Wert gelegt Mithilfe des Test programms auf CD kann das erworbene Wissen zus tzlich berpr ft werden Access VBA Stefan Leibing Bernd Held 480 Seiten 29 95 D 30 80 A ISBN 978 3 8273 2264 7 Visual Basic f r Applikationen ist eine der bekanntesten prozeduralen Programmiersprachen Mit VBA lassen sich Office Anwendungen wie Access Word oder Excel programmieren Seine gro e Flexibilit t ver dankt es den zahlreichen Anwendungen die eigene Schnittstellen f r den Zugriff mit VBA bereitstellen Das Buch liefert dem Leser einen qualifizierten Einstieg in VBA mit Access und enth lt alle Beispieldaten zum Nachvollziehen und den Lerntest auf CD John Harry Wieken SQL Einstieg f r Anspruchsvolle A ADDISON WESLEY in rooor
205. Kursdatenbank die keine Kunden der B roFix sind 334 Es gibt auch die INTERSECT ALL Anweisung die Duplikate in der Ergebnis menge zul sst Beispiel WEISS WINTER WINTER INTERSECT ALL WINTER WINTER liefert WINTER WINTER im Gegensatz zu einem einfachen WINTER ohne ALL 11 4 Die Differenzmenge MINUS EXCEPT Die dritte Mengenoperation ist die Bildung der Differenzmenge Die Diffe renzmenge ist nicht symmetrisch Es werden vielmehr die Datens tze der ersten Menge erste SELECT Anweisung ermittelt und von diesen werden die Datens tze der zweiten Menge zweite SELECT Anweisung abgezogen Sie wollen nur die Kursteilnehmer ermitteln die nicht Kunden des B roarti kelversands sind SELECT p Familienname p Vorname p geburtsdatum FROM kurse tbPerson p MINUS SELECT k nachname k vorname k geburtsdatum FROM artikel kunden k Dies ergibt folgerichtig die Datens tze in Abbildung 11 7 Die Syntax f r Oracle lautet SELECT MINUS SELECT MINUS SELECT ORDER BY Spaltennummer Spaltennummer Besonderheiten der Datenbanksysteme 111 F Abbildung 11 7 geburtsdatum Alle Kursteilnehmer weiss Peter 1963 11 07 die nicht Kunden Bucz Susanne 1976 04 06 der B roFix sind Karmann Thomas 1954 08 04 Kl tzer Karl 1971 03 13 Weiss Karin 1962 10 05 Weiss Peter 1974 03 02 Meier Kathrin 1981 05 03 Schmidt Karl 1949 06 25 M ller Claudia Lisewski Bemd 1960 06 06 Peredy Hel
206. L Anweisung eingef gt werden INSERT INTO tbPerson Listing 6 1 PID Familienname Vorname PLZ Ort Strasse Geburtsdatum Einf gen eines x hause a 51 Gerhardt NULL 29221 DEFAULT Z llnerstra e 12 1955 02 24 Dabei werden nach der Angabe der Tabelle tbPerson zun chst die Feldnamen der Tabellenfelder aufgez hlt die im Folgenden eingef gt werden sollen Dabei wird eine Reihenfolge vorgegeben die nicht der Reihenfolge der Fel der in der Tabelle entsprechen muss Dann werden in einer zweiten Liste die Werte aufgez hlt die diesen Feldern zugeordnet werden sollen Dabei ist die Reihenfolge einzuhalten die zuvor durch die Liste der Feldnamen bestimmt worden ist Also wird die PID in dem neuen Datensatz auf den Wert 51 gesetzt der Familienname auf den Wert Gerhardt und so weiter bis zum Geburtsdatum 199 W kaites 200 Standardwerte Listing 6 2 Definition der Tabelle tbPerson Datenbankinhalte ndern INSERT UPDATE DELETE Bei der Angabe der Werte sind eine Reihe von Bedingungen einzuhalten E Es wird ein neuer eindeutiger und noch nicht vorhandener Wert f r den Prim rschl ssel angegeben Gleiches gilt f r andere Felder die als ein deutig definiert sind Die Werte haben f r die Felder passende Datentypen also Zahlen f r nu merische Felder Texte f r alphanumerische Felder Datumsangaben f r Felder mit dem Datentyp DATE und entsprechend f r die anderen Daten type
207. L ist allerdings recht gutm tig was den Datentyp angeht Zumeist reicht es hier die Kategorien alphanumerisch numerisch sowie die verschiedenen Datums und Uhrzeitformate beziehungsweise Intervalle und BOOLEAN Wahr heitswerte zu unterscheiden Bei der Anzahl der Parameter gibt es teilweise auch Freir ume insofern als dass teilweise weiter hinten stehende Parame ter optional sind und bei Fehlen einer Angabe diese Werte durch Standard werte ersetzt werden Die Parameter sind reine Eingangswerte sie k nnen nicht ge ndert werden Im Sinne der Programmierung handelt es sich also bei SQL immer um einen Call By Value Werte k nnen bergeben aber nicht ver ndert werden Jede Funktion liefert immer genau einen R ckgabewert der bei der Ausf hrung an die Stelle des Funktionsnamens tritt Daher ist der Datentyp des Ergeb nisses das eine Funktion liefert von zentraler Bedeutung f r ihre Verwen dung Sie darf nur dort verwendet werden wo der Datentyp den sie liefert verwendet werden darf Der Datentyp den eine Funktion als Ergebnis liefert ist oft derselbe den auch der zentrale Eingabeparameter hat Das ist aber nicht zwingend erfor derlich Daher lassen sich die Funktionen nur grob nach den drei wichtigsten Datentypklassen und in zwei weitere Gruppen einteilen E Numerische Funktionen die auf der Umformung und Berechnung von numerischen Werten beruhen also weitgehend mathematische Funk tionen mit denen sich beispielswe
208. LECT Anweisung WITH CASCADED LOCAL CHECK OPTION Ein vIEw kann mit dem Zusatz SQL SECRITY entweder unter dem Benutzer namen desjenigen Benutzers ablaufen der den VIEw definiert hat DEFINER oder unter dem Namen desjenigen der ihn verwendet also direkt oder indi rekt aufruft INVOKER Der Name des DEFINER ist ohne weitere Angabe der CURRENT_USER der dann als Standardwert verwendet wird Sie k nnen aber auch einen anderen Benutzernamen bei der Definition angeben sofern Sie dazu die Rechte haben 355 Transaktionen 13 1 Grundlagen Bisher sind wir immer davon ausgegangen dass eine SQL Anweisung wie ein Befehl komplett ausgef hrt wird Sie wird eingegeben und endet mit der Best tigung der Ausf hrung und der Anzeige des Ergebnisses Damit sind alle Aktionen abgeschlossen und lassen sich nicht mehr r ckg ngig machen Tats chlich haben wir schon in Abschnitt 2 3 die Verarbeitung einer SQL Anweisung etwas ausf hrlicher untersucht und gesehen dass sie intern in eine Folge von einzelnen Lese und oder Schreibbefehlen zerlegt wird Was passiert jetzt aber wenn die Datenbank w hrend diese Folge abgearbeitet wird feststellt dass eine einzelne Anweisung nicht ausgef hrt werden kann Bisher sind wir auch immer davon ausgegangen dass wir allein auf die Datenbank zugreifen wenn eine SQL Anweisung ausgef hrt wird Zumin dest wenn Sie eine der Beispieldatenbanken bei sich installiert haben war das auch tats chlich so
209. LLINT DEFAULT O NOT NULL Bei der Definition der Tabelle artikel kann dieselbe Dom ne verwendet wer den um die Fremdschl sselspalte zu erzeugen CREATE TABLE IF NOT EXISTS artikel mwst_art mehrwertsteuerart NOT NULL REFERENCES mwst mwst_art Interessant ist noch dass der Dom ne hier ein Standardwert kein zuge ordnet worden ist der somit Bestandteil des Datentyps ist und bei der Defi nition der einzelnen Felder dann nicht wiederholt werden muss Daher ent h lt die Fremdschl sselfelddefinition in der Tabelle artikel keine weitere DEFAULT Angabe Die allgemeine Syntax lautet CREATE DOMAIN dom nenname AS datenyp DEFAULT standardwert CHECK VALUE bedingung AND OR VALUE bedingung Dom nen 8 7 2 Dom nen ndern ALTER DOMAIN Analog der nderung von Tabellen gibt es auch die M glichkeit Dom nen zu ndern Dabei beschr nken sich die nderungen im Wesentlichen auf die nderung des Standardwertes sowie der CHECK Bedingung Der Standardwert kann durch eine Neubelegung des Wertes mit SET jederzeit nderung des beliebig ge ndert oder mit einem DROP komplett entfernt werden Soll beider Standardwertes Mehrwertsteuer als Standardwert der volle Mehrwertsteuersatz angenom men werden so kann dies mit ALTER DOMAIN mehrwertsteuerart SET DEFAULT voll geschehen Soll berhaupt kein Standardwert verwendet werden so lautet die SOL Anweisung ALTER DOMAIN mehrwertsteuerart DROP DEF
210. LTER VIEW entspricht in seiner Syntax weitgehend dem CREATE VIEW ALTER VIEW viewname feldname feldname AS Select Anweisung Ein VIEW speichert keine physischen Daten Somit k nnten Sie einwenden dass man den VIEW einfach l schen und neu erzeugen k nnte ein ALTER VIEW somit berfl ssig ist Der ALTER VIEW hat aber gegen ber dem ebenfalls m g lichen L schen eines VIEW mit DROP VIEW viewname und anschlie endem erneuten CREATE VIEW den Vorteil dass eventuelle Berechtigungen und andere Eigenschaften des VIEW erhalten bleiben Ein VIEW wird gezielt f r bestimmte Benutzer oder Benutzergruppen geschaffen Die damit verbundenen Einstellungen durch die Datenbankadministratoren k nnen einigen Aufwand erfordern Es ist auch rgerlich wenn Programme die auf einen VIEW zugreifen beispielsweise in einem Batch Lauf abbrechen weil der VIEW keine entsprechenden Berechtigungen mehr enth lt Der ALTER VIEW ist in dieser Form nur in MySQL vollst ndig implementiert Oracle bietet eine Reihe von anderen nderungsm glichkeiten 8 6 7 nderbarkeit eines VIEW Grunds tzlich gilt dass ein VIEW der einmal definiert ist berall verwendet werden kann wo in einer der folgenden bereits besprochenen SQL Anwei sungen eine Tabelle zul ssig ist SELECT DELETE INSERT UPDATE sowie einigen weiteren wie COMMENT oder LOCK Leider bringt die Verwendung eines VIEw auch Einschr nkungen mit sich Diese betreffen haupts chlich di
211. MySQL Befehlszeilen Client MySQL Infobereich Monitor Windows Befehlszeile Verbindungen verwalten Aktuelle Verbindung speichern Einstellungen 345 E Karite 12 Abbildung 12 2 berblick ber MySQL Administrator Abbildung 12 3 Benutzer in der Administrationsoberfl che 346 Benutzer Rechte und Zugriffsschutz Nach Eingabe der CREATE USER Anweisung denken Sie an das Semikolon und an eine anschlie ende Exit Anweisung k nnen Sie dann die Einrich tung des Benutzers in der Administrationsoberfl che pr fen Sie k nnen den Benutzer nat rlich auch ber die Oberfl che interaktiv einrichten aber wir wollten es direkt mit SQL tun Die Abbildung 12 2 zeigt die Administrations oberfl che von MySQL im berblick Oben links k nnen Sie die Benutzer verwaltung ausw hlen MySQL Administrator Connection Datei Bearbeiten View Extras Fenster MySQL Enterprise Hilfe Serverinformation reg E4 Benutzerinformation Schema Berechtigungen Ressourcen E Dienstverwaltung B meier 03 Startvariablen Login und weitere Informationen ber den Benutzer 83 Benutzerverwaltung z Aktive Verbindungen VB Serverstatus El Serverprotokolle Passwort Ei Tragen Sie in dieses Feld das Benutzerpasswort ein 3 Replikationsstatus amp Backup Login Informatiorr MySQL Benutzer meier Der Benutzer muss seinen MySQL Benutzernamen eingeben um sich mit dem Server zu verbinden Geben Sie zur Best tig
212. N k mnr b mnr AND k kdnr b kdnr Diese Abfrage ber cksichtigt beide Prim rschl sselfelder und ihre entspre chenden Fremdschl sselfelder Sie k nnen auch die anderen JOIN Arten im Zusammenhang mit Verbindun gen ber zwei oder mehr Feldpaare entsprechend verwenden So lassen sich in der USING Klausel mehrere Feldnamen aufz hlen USING mnr kdnr Der NATURAL JOIN der auf Feldnamengleichheit beruht w rde hier sogar automatisch beide Felder ber cksichtigen da beide jeweils passende gleiche Namen haben Weitere Beispiele und bungen finden Sie im Rahmen der Beispiele mit der Artikeldatenbank die f r komplexere Situationen genutzt wird siehe hierzu auch Kapitel 9 4 6 Die GROUP BY Klausel Datenbanken enthalten im Gegensatz zu unseren Testbeispielen zumeist gro e Mengen von Datens tzen Meistens ist man nur an wenigen Datens t zen interessiert und filtert die ben tigten Datens tze ber die WHERE Klausel heraus Oft m chte man aber auch den berblick ber Gruppen gleichartiger Datens tze haben beispielsweise Stammkunden alle Autos von VW oder alle Teilnehmer bestimmter Kurse In diesen F llen werden die Datens tze mit gleichen Eigenschaften ber eine GROUP BY Klausel vorsortiert Es geht also darum Daten zu verdichten um beispielsweise St ckzahlen Summen oder Durchschnittswerte zu erhalten Dazu gruppieren Sie die Datens tze einer SELECT Anweisung nach einem relevanten Gruppierungs feld und verdi
213. NIQUE anrede VARCHAR 10 NULL nachname VARCHAR 50 NOT NULL vorname VARCHAR 30 NULL rechnungsadresse VARCHAR 255 DEFAULT wie Anschrift NOT NULL strasse VARCHAR 50 NULL PLZ CHARC5 NULL ort VARCHAR 50 DEFAULT Celle NOT NULL land VARCHARC50 DEFAULT Deutschland NULL geworbenvon INT NULL geburtsdatum DATE NULL letzte_aenderung TIMESTAMP DEFAULT current_timestamp CONSTRAINT PKKD PRIMARY KEY mid kid J Dies entspricht der Entit t Kunde wie wir sie in Kapitel 7 modelliert haben Sie sehen dass nicht nur die Kunden ID kid als Prim rschl sselfeld mar kiert ist sondern auch die Mandanten ID mid das wird in Abschnitt 8 3 1 n her erl utert Dies ist die unmittelbare bernahme der berlegung aus der Tabellen erstellen CREATE TABLE Modellierung dass Kunden ber die verschiedenen Firmen der B roFix Mandanten hinweg eindeutig sein sollen Anderenfalls h tte das Feld mid nicht in den Prim rschl ssel aufgenommen werden d rfen Die kid ist im Gegensatz zur mid nicht als INT also als Ganzzahl sondern als VARCHAR 50 definiert Das bedeutet dass alphanumerische Bezeichnungen wie M ller Hannover Bothfeld erlaubt sind Maximal k nnen hier Eintr ge aus 50 Zei chen gespeichert werden Um Speicherplatz zu sparen ist das Feld als VAR CHAR also als variables Zeichenfeld Character definiert Dies ist eine eher ungew hnliche Modellierung da sie im Allgemeinen als Prim rschl ssel nicht
214. OIN mehr folgen 129 Kapitei4 mit SQL Daten abfragen SELECT 130 Tabelle 4 2 bersicht ber das Ergebnis eines OUTER JOIN bungen Der SQL Standard SQL99 sieht auch einen FULL OUTER JOIN vor der der Kombination des LEFT OUTER JOINmit dem RIGHT OUTER JOINentspricht also alle jeweiligen Datens tze ohne passenden Datensatz der anderen Tabelle beinhaltet Dies w rde dann in unserem Beispiel nicht nur die Dozenten ohne Kurse sondern auch die Kurse ohne Dozenten die es hoffentlich nicht gibt im Ergebnis liefern Zusammenfassung Mit einem OUTER JOIN werden bei einem JOIN auch Datens tze ausgegeben zu denen keine passenden Datens tze in der anderen Tabelle existieren JOIN Ergebnis tabelle1 LEFT OUTER JOIN tabelle2 Alle Datens tze aus tabelle1 tabelle1 RIGHT OUTER JOIN tabelle2 Alle Datens tze aus tabelle2 tabellel FULL OUTER JOIN tabelle2 Alle Datens tze aus tabelle1 und tabelle2 bungen zur SELECT Anweisung mit einem OUTER JOIN Erstellen Sie f r die folgenden Aufgaben jeweils eine SELECT Anweisung 1 Ermitteln Sie f r alle Kursthemen in tbKursthema welche Kurse dazu in tbKurs tats chlich angeboten werden Ber cksichtigen Sie auch alle Kursthemen die zurzeit nicht angeboten werden Es sollen jeweils das Kursthema die Kurskennung sowie Kursbeginn und Kursende angezeigt werden U4 5 5 1 2 Ermitteln Sie f r alle Personen ob und an welchen Kursen KID reicht sie t
215. Pen 4468 Druckbleistift 5342 Zettelklotz 5346 Notizbl cke 5349 Collegebock 6001 Standardordner 9056 USB Stick 9058 CD 9801 Kaffee mild 9810 Menthol wei 9814 Geb ck mid bnr kid 1 33 1 1 47112 1 47146 1 4856 2 1 4857 6 1 4858 6 1 4861 92 1 4862 10 1 49029 1 49056 1 4906 2 1 4907 25 1 4912 6 1 4913 25 1 4914 41 1 4915 30 1 4916 31 1 4918 68 1 49030 16 1 49032 9 2 12552 24 2 12554 4 2 12556 40 2 1255820 3 90940 27 gebinde Einheit 500 Blatt 1 Pack 1000 St ck 250 St ck 10 St ck 1 St ck 1 St ck 1 St ck 250 Blatt 10 St ck 1 Block 1 St ck 2 GB 10 St ck 1kg 24 Pack 2kg bestelldatum 20 11 2007 19 11 2007 19 11 2007 20 11 2007 20 11 2007 21 11 2007 21 11 2007 22 11 2007 21 11 2007 22 11 2007 22 11 2007 22 11 2007 23 11 2007 23 11 2007 23 11 2007 23 11 2007 23 11 2007 23 11 2007 21 11 2007 22 11 2007 19 11 2007 21 11 2007 21 11 2007 21 11 2007 22 11 2007 kennziffer einstands listenpreis mwst_art bestand 1 C EE SE SE E n 2 48 0 87 8 45 8 45 1 02 0 15 0 18 0 25 1 39 3 34 0 56 1 56 8 89 2 11 3 34 13 67 13 56 5 99 vo 1 39 vol 13 79 vol 13 99 vol 1 56 vol 0 23 vo 0 36 vo 0 39 vo 3 59 vo 5 44 vo 1 59 vo 2 49 vo 14 99 vol 5 49 vo 9 99 erm ssigt 26 99 erm ssigt 34 99 erm ssigt 2000 300 126 23 2 389 231 490 1230 340 145 1430 12 342 45 78 46 loan irn ln ing nr bnr pos n a ZAL aE E n a AL ian L a L AL n La
216. QL Server 5 8 hbin 15 36 15 36 11 88 11 88 11 88 11 88 11 88 11 88 11 88 11 88 11 88 11 88 11 88 11 88 11 88 11 88 11 88 11 88 11 88 11 88 11 88 11 88 11 88 18 34 11 88 11 88 11 88 11 88 11 88 11 88 11 88 11 88 11 88 11 88 32 2 lt DIR gt lt DIR gt 1 490 944 2 831 616 1 826 816 1 720 320 1 744 896 1 708 032 2 039 888 1 998 656 2 052 096 1 982 464 8 421 376 1 959 856 12 374 816 5 701 632 2 699 520 13 183 184 5 781 632 2 699 520 13 183 184 2 035 712 1 982 464 3 468 288 1 994 752 556 586 3 944 448 1 982 464 2 097 152 2 277 376 1 986 568 1 478 656 1 470 464 1 474 568 comp err exe libmySQL dil myisamchk exe myisamlog exe myisampack exe myisam_ftdump exe mysql exe mysqladmin exe mysqlbinlog exe mysqlcheck exe mysqld debug exe mysqld debug map mysqld debug pdh mysqld nt exe mysqld nt map mysqld nt pdb mysqld exe mysqld map mysqld pdh mysgqldump exe mysqlimport exe MySQLInstanceConfig exe mysqlmanager exe mysgqlmanager map mysgqlmanager pdh mysqlshow exe mysgqltest exe mysql_client_test exe mysql_upgrade exe my_print_defaults exe perror exe replace exe Dateicen gt 111 100 010 Bytes Verzeichnis se 11 148 677 128 Bytes frei G Programme MySQL MySQL Server 5 8 hbin gt Befehl cd verzeichnis cd laufwerk cd dir Bedeutung Wechsle in das angegebene Unterverzeichnis Wechsle auf das Basislaufwerk aus jedem beliebigen Unterverze
217. R FROM j Einheit FROM H j i 2008 08 20 20 27 39 DATE TIME einheit Zu ermitteln Einheit 2008 TIMESTAMP kann sein gt n YEAR MONTH DAY HOUR MINUTE SECOND teilweise zus tzlich mit TIMEZONE beispielsweise als TIMEZONE_HOUR Daneben existieren ltere Funk tionen wie YEAR MONTH und andere Aktuelle Angaben Listing 5 14 Typische Abfragen der aktuellen Rechnerzeit be ziehungsweise des Datums Ermittlung von Teilen Tabelle 5 15 G ngige Datums Zeitfunktionen 183 WM kaites Tabelle 5 15 Forts G ngige Datums Zeitfunktionen 184 Tabelle 5 16 Datumsorientierte Funktionen Datentypen Ausdr cke und Funktionen SQL Funktion Erl uterung Beispiel Zeitintervalle Es k nnen Differenzen zwischen Datums oder Uhrzeitangaben berechnet werden und in bestimmten Einheiten ausge dr ckt werden Diese Funktionen sind unterschiedlich gel st und k nnen teilweise durch das Rechnen mit den Einzelteilen des Datums ersetzt werden DATEDIFF 2008 07 20 2008 06 03 gt 47 TIMEDIFFC 20 08 40 18 07 42 gt 02 00 58 Funktionen um Auch diese Funktionen sind 2008 07 2006 50 04 Zeitintervalle zu datenbankabh ngig en addieren oder gt 2008 07 18 zu subtrahieren 10 50 04 datenbank abh ngig ANSI MySQL MS Access Oracle Firebird openBase CURRENT_ CURRENT_ NowO CURRENT_ CURRENT_ CURRENT_ DATE DATE Jetzt DATE DAT
218. RE KID CE23 Beachten Sie bitte auch dass in der VIEw Definition die Felder umbenannt worden sind Durch die Angabe der Feldnamen nach dem Namen des VIEW werden neue Feldnamen definiert denen die von der SELECT Anweisung gelieferten Felder in gleicher Reihenfolge zugeordnet werden Der VIEw kann bekanntlich wie jede Tabelle verwendet werden Sie k nnen daher darauf auch mit einem SELECT mit einer weiteren WHERE Klausel zugrei fen wie in Listing 8 16 zu sehen SELECT FROM TeilnehmerZahlungenCE23 WHERE Zahlung lt 350 Die Angabe der Option ALGORITHM MERGE bewirkt dass der SQL Interpreter von MySQL jetzt die beiden Anweisungen zu einer kombinierten Anweisung mischt SELECT KTID AS TeilnehmerID GezahlterBetrag AS Zahlung FROM tbKursbesuche WHERE KID CE23 AND GezahlterBetrag lt 350 Der in der SELECT Anweisung wird dabei zun chst in die Felder Teilneh merID und Zahlung im Sinne des VIEW umgesetzt Diesen beiden Feldnamen im VIEW entsprechen laut der Definition des VIEW die Feldnamen KTID und GezahlterBetrag der Tabelle tbKursbesuche Entsprechende Alias werden zus tzlich generiert um die gem VIEW definierten Feldnamen bereitzu stellen In der wHERE Klausel werden die Bedingung KID CE23 des VIEW und die Bedingung Zahlung lt 350 aus der SELECT Anweisung zusammengef gt In diesen Bedingungen werden die Feldnamen aus der Tabelle verwendet Der Feldname Zahlung aus dem SELECT des VIEW wird dabei noch
219. RSON 2 x Table Data Indexes Model Constraints Grants Statistics UlDefaults Triggers Dependencies SOL TBDOZENT Query CountRows Insert Row TBKURS MILIEN TBKURSBESUCHE PID FAMILIENNAME VORNAME PLZ STRASSE ORT GEBURTSDATUM TBKURSTHEMA 1 Weiss Peter 30529 Palmstrasse 6 Hannover 07 11 63 TBPERSON 2 Bucz Susanne 30531 Heinestrasse 23 Hannover 06 04 76 4 Karmann Thomas 29227 Trift 28 Celle 04 08 54 5 Kloetzer Karl 29221 Bahnhofstrasse2 Celle 13 03 71 6 Weiss Karin 30529 Palmstrasse 6 Hannover 05 10 62 7 Weiss Peter 38134 Glanweg 4 Braunschweig 02 03 74 8 Meier Kathrin 38154 Welfenallee 23 Braunschweig 03 05 81 9 Schmidt Karl 30529 Lavesallee 23 Hannover 25 06 49 10 Mueller Claudia 29596 Inden Fuhren 12 Breitenhees Die komplette Struktur der Tabellen mit ihren Beziehungen ist der Abbildung 3 1 zu entnehmen Import Utility F r den Import umfangreicher Daten kann in Oracle das Original Import Utility imp exe verwendet werden Oracle bietet seit der Version 10 auch die Daten pumpe impdp exe an Da aber eventuell ltere Oracle Versionen zum Einsatz kommen wird diese hier noch nicht verwendet F r unsere Zwecke reicht aber der Weg ber die konventionellen SQL Anweisungen aus wie er hier beschrie ben wurde Weitere Hinweise zur Benutzung der Oracle Oberfl che finden Sie in Anhang A Abfragen k nnen Sie in Oracle ausf hren indem Sie auf der HoME Seite das Auswahlmen zur SQL Schaltfl che aufklicken und den Befehl SQL Com
220. SUM Ausdruck gt n Es wird die Summe der Werte eines Datenfeldes ermittelt Nur auf numerische Werte anwendbar AVG Ausdruck gt n Arithmetisches Mittel der Werte des Feldes in einer Gruppe Durchschnittswert Nur auf numerische Werte anwendbar MAX Ausdruck gt Typ des Ausdrucks Gr ter Wert der in allen Datens tzen auftritt MINCAusdruck gt Typ des Ausdrucks Kleinster Wert der in allen Datens tzen auftritt FIRSTCAusdruck gt Typ des Ausdrucks LAST Ausdruck gt Typ des Ausdrucks Ermittelt den Wert des Feldes im ersten Datensatz einer Gruppe Ermittelt den Wert des Feldes im letzten Datensatz einer Gruppe Gruppenorientierte Funktionen Aggregatfunktionen SQL Funktion Erl uterung VAR_POP Ausdruck VAR_SAMP Ausdruck gt n Varianz der Werte W hrend die POP Version von einer Grundgesamtheit Population ausgeht inter pretiert die SAMP Version die Werte als Stichprobe Sample einer gr eren Grundgesamtheit STDDEV_POP Aus druck STDDEV_SAMP Ausdruck gt n Standardabweichung der Werte W hrend die POP Version von einer Grundgesamtheit Population ausgeht interpretiert die SAMP Version die Werte als Stichprobe Sample einer gr eren Grundgesamt heit COVAR_POPCAusdruckl Ausdruck2 COVAR_SAMP Ausdrucki Ausdruck2 gt n Kovarianz zweier Ausdr cke Felder als Zusam menhangsma W hrend POP von einer Grundge
221. Schema artikel Ist der Name der Warengruppe nicht bekannt soll er unbekannt sein Er soll aber in jedem Fall angegeben sein 8 2 1 1 Erstellen Sie ein neues Schema eine neue Datenbank mit dem Namen Kaps U8 2 1 2 Erstellen Sie in dem neuen Schema eine Tabelle fahrzeug in der das Kfz Kennzeichen die Fahrgestellnummer die Automarke die Farbe des Fahr zeugs Standard ist Silber die Anzahl der T ren der Hubraum der j hr liche Versicherungsbeitrag sowie Datum und Uhrzeit der letzten nderung angegeben werden Das Kennzeichen die Fahrgestellnummer die Automarke und der Versicherungsbeitrag sind Pflichtangaben Das Kennzeichen ist der Prim rschl ssel 8 2 1 3 Erstellen Sie eine Tabelle lieferung f r die Angaben in Abbildung 8 6 8 2 1 4 Welche Probleme sehen Sie in der Tabelle in Abbildung 8 6 8 2 1 5 Tabellen erstellen CREATE TABLE RNr Name 1 Timme Ulf Vorname PLZ Ort Strasse Telefon KNr Preis 29223 Celle Rosenstra e 117 342565 2 Petersen Annemarie 29221 Celle Neustadt 3 Datum Anz Lieferung Fahrer 2 Spinaci Salame Michael 3 Salame Quattro stagione Haw Christian 1 14 00 03 10 2006 897654 2 40 00 03 10 2006 3 Havenstein Katrin 29225 Celle Welfenallee 43 897643 3 7 00 04 10 2006 1 Salame Michael 4Timme Ulf 29223 Celle Rosenstra e 117 342565 1 9 00 04 10 2006 2 Spinaci Regina Michael 5Timme Ulf 29223 Celle Rosenstra e 117 342565 112 00 02 10 2006 2 Hawaii
222. Speicheroptimie rungen ein m glichst performanter und ressourcenschonender Code erzeugt Auf diesen Prozess haben Sie mit SQL nur indirekt Einfluss beispielsweise ber die Einrichtung von Indizes siehe Kapitel 14 Problematisch ist dass es sich nicht um einen sondern um eine ganze Folge Transaktionsmanager von Befehlen handelt Da die Datenbank davon ausgehen muss dass mehrere Benutzer gleichzeitig mit dem System arbeiten muss sichergestellt werden dass sich die Befehlsfolgen bei der Ausf hrung nicht gegenseitig beeinflussen Daher steuert der Transaktionsmanager durch die Kapselung dieser Folgen zu Transaktionen eine sich gegenseitig m glichst wenig beein tr chtigende Abarbeitung dieser Befehlsfolgen also letztlich der SQL Anweisungen verschiedener Benutzer Er liefert letztlich auch den Return code und die Ergebnisse an den Ausgabeprozessor Im Fehlerfall kann der Recoverymanager mithilfe des Logbuches den Zustand wiederherstellen als w re die SQL Anweisung nie ausgef hrt worden Wie die Transaktionen gehandhabt werden sollen kann in gewissem Umfang ber SQL gesteuert werden siehe Kapitel 13 Die unterste Ebene bildet die physische Speicherverwaltung die die Schreib Physische und Lesebefehle umsetzt und an der zumeist mehrere Komponenten beteiligt Speicherverwaltung sind die eine m glichst optimale Nutzung des Puffers im Festspeicher Hauptspeicher Cache sicherstellen sollen Hier m ssen m glichst viele ben tigt
223. Speicherplatzes beispiels weise auf einer Festplatte Hier geht es darum wie Speicherplatz reserviert wird ob beispielsweise aus Sicht des Betriebssystems eine gro e Datei ange legt wird deren Inhalt und Struktur nur das Datenbankmanagementsystem kennt und bearbeitet oder ob mehrere kleinere Dateien verwaltet werden Physisch k nnen die Daten auch ber mehrere Speicher verteilt werden bei gr eren Datenbanken ist das oft sogar performanter Die Daten k nnen auch auf verschiedene Rechner verteilt werden Dies ist Sache des Datenhal tungssystems Idealerweise sollte der Benutzer bei der Bearbeitung der Datenbank m g lichst wenig mit diesen internen Strukturen zu tun haben physische Daten unabh ngigkeit In der Realit t haben aber beispielsweise Indizes Table spaces und andere Zugriffsoptimierungen Einfluss auf die physikalische Organisation der Daten und damit insbesondere auf die Performance der Datenbank So trifft in den meisten Datenbanken der sogenannte Query Optimizer die Entscheidung ber die Art der Ausf hrung eines SQL SELECT Durch geeignete Bereitstellung von Indizes Zugriffspfaden und anderen Zugriffshilfen kann dies durch den Datenbankadministrator im Datenbank entwurf beeinflusst werden Diese Bereitstellung erfolgt ebenfalls durch SQL Befehle wie CREATE INDEX oder CREATE TABLESPACE auf die sp ter einzu gehen ist Leider sind viele Mechanismen bei den verschiedenen Datenbank managementsystemen recht unterschi
224. Trester Erika Am Hasenberg 2 29320 Hermannsbur 07 08 69 1 90 Herr Nussbaum Robert Ostsiedlung 21 29345 Unterl 24 01 48 1 9 Herr Mohnbaum Waldemar Fuchsweg 5 29345 Unterl 09 07 67 1 92 Frau Schilling Hildegard Hermannsbuger Stra e 3 29345 Unterl 03 10 37 1 93 Frau Schulz Ute S dsiedlung 12 29345 Unterl 19 08 56 1 94 Schmidt GmbH Frau Schmidt Stephanie Heidkamp 35 29331 Lachendorf 25 03 61 1 95 Herr Seidel Theo Zugbr ckenstra e 13 29221 Celle 06 09 39 1 96 Herr Ruczynski Manfred Neues Land 14 29229 Celle 23 11 61 1 97 Lutz Thomas Mauernstra e 32 29221 Celle 02 06 72 1 98 Herr Scharenberg Ulrich Welfenallee 36 29225 Celle 08 12 63 1 99 Herr Schilling Lutz Alte Grenze 37 29221 Celle 03 06 71 2 100 Frau _Nalihn Bettina M hlenstra e 4 29221 Celle 12 02 61 419 5 Anhang C Abbildung C 8 Tabelle mwst Abbildung C 9 Tabelle Warengruppe Abbildung C 10 Tabelle Artikel Abbildung C 11 Tabelle Bestellung ohne Timestamp 420 Anhang Daten mwst_art mwst_satz erm ssigt kein 0 voll 19 kennziffer warengruppe 1 Papier und Papier 2 Drucksachen produkte 3 Versandausstattung 4 Schreibmittel 5 Formulare Bl cke Klebe und Haftmittel 6 Ordnungsmittel B rom bel 8 Pr sentationsmittel 9 EDY und sonstige B roausstattung anr bezeichnung 1002 Universalpapier Standard 1123 Kassenrollen 2120 Briefumschl ge 2132 Versandtaschen 2231 Luftpolstertaschen 4323 Druck Kugelschreiber 4324 Fine
225. ULE Werte uusseneie see 5 3 Literalen ueesetnstieneneeeen Ena 5 4 Ausdr cke 22222escsneeeeeeeeeeeeeenn 55 Funktionen sen 5 6 Datensatzorientierte Funktionen Skalarfunktionen 2 2222222 5 6 1 Funktionen in MS Access 5 6 2 Numerische Funktionen 5 6 3 _Alphanumerische Funktionen 5 6 4 _Datumsorientierte Funktionen 5 6 5 Datentypumwandlungsfunktionen Casting uses eier 5 6 6 Logische und sonstige Funktionen 5 7 _ Gruppenorientierte Funktionen Aggregatfunktionen 2c2c2000 Datenbankinhalte ndern INSERT UPDATE DELETE 6 1 Neue Datens tze einf gen INSERT 6 1 1 INSERT mit Werten und Funktionen 6 1 2 INSERT mit Unterabfragen 6 1 3 INSERT mit SET 100 104 113 113 119 123 125 126 130 133 134 144 149 149 153 156 158 160 162 163 164 167 168 171 172 174 180 183 187 190 193 Kapitel 7 Kapitel 8 Inhaltsverzeichnis 6 1 4 Besonderheiten des INSERT mit MS Access ormsa trenekin kas 205 6 1 5 INSERT bungen 209 6 2 Vorhandene Datens tze ndern UPDATE 210 6 2 1 UPDATE Anweisungen 211 6 2 2 Besonderheiten von UPDATE bei MS Access u nen 213 6 2 3 Zusammenfassung 222222c 0 214 6 2 4 Update bungen 2 22220 215 6 3 Datens tze l schen DELETE
226. WHERE Klausel auf den Prim rschl ssel sinnvoll Testen Sie mit dieser Anweisung ob es sich um den gew nschten Datensatz handelt bungen Beispiel 215 W Karitei 6 DELETE Syntax Weiteres Beispiel L schen aller Datens tze 216 Datenbankinhalte ndern INSERT UPDATE DELETE SELECT FROM tbPerson WHERE PID 51 Im Ergebnis erhalten Sie hoffentlich den richtigen Datensatz Wir stellen die SELECT Anweisung dann auf die gew nschte DELETE Anweisung um DELETE FROM tbPerson WHERE PID 51 Sie sehen dass sich der Aufwand wie auch die Fehleranf lligkeit dabei in Grenzen h lt Die allgemeine Syntax f r die DELETE Anweisung lautet DELETE FROM tabellenname WHERE bedingungsliste Die Bedingungsliste mit der WHERE Klausel entspricht der Syntax der SELECT Anweisung Damit k nnen Sie gezielt einen Datensatz f r eine DELETE Anweisung ausw hlen aber nat rlich auch Bedingungen angeben die dazu f hren dass viele Datens tze gel scht werden Alle nach Auswertung der WHERE Klausel brig bleibenden Datens tze werden aus der Tabelle gel scht Angenommen Sie wollen alle Kursteilnehmer des Kurses CE24 aus der Tabelle der Kursteilnehmer tbKursbesuche l schen Dann lautet die Syntax DELETE FROM tbKursbesuche WHERE KID CE24 Es werden alle Datens tze gel scht die die WHERE Klausel erf llen 6 3 2 Alle Datens tze l schen TRUNCATE ber die wHERE Klausel steuern Sie welche Date
227. Z Ort Geburtsdatum Abbildung C 6 1 1 Frau Sibum Jutta Hannoversche Stra e 6 29223 Celle 02 04 65 12 EwaldKuhnKG Her Sch ler J rgen Windm hlenstra e 12 29233 Celle 04 07 43 Tabelle Kunde Teil 1 1 3 Bit Hans Joachim Lange Stra e 15 29320 Hermannsbut 30 06 68 H 2 4 Franz Koch Frau Lange Rosemarie Friedrichstra e 28 26203 Wardenburg 31 10 78 Aussch n itt 1 5 Herr Thole Eckhard Breslauer Stra e 15 26203 Wardenburg 23 11 69 1 6 Hobelix OHG Herr Falk Hermann Lange Laube 2 30230 Hannover 05 02 52 2 7 Frau Kurz Claudia Tulpenstra e 25 26169 Friesoythe 27 04 56 3 8 Herr Karl Oliver Lange Stra e 15 29331 Lachendorf 18 07 64 1 9 Sch tte amp Karlsen Frau Karlsen Manuela Hauptstra e 64 26132 Oldenburg 23 07 65 1 10 Wilhelm Kuhl KG Herr Kuhl Rolf Am Wasser 29 26683 Str cklingen 09 02 56 2 11 Herr Hoppe Heinz Am Lohbusch 2 29221 Celle 28 03 57 1 12 Frau Kohlmeier Gerda Goetheweg 5 29331 Lachendorf 22 03 39 2 13 K rber Margarete Am R benberg 19 29331 Lachendorf 02 08 52 2 14 Herr Maischeck Gunter Marktstra e 3 29331 Lachendorf 31 10 73 1 15 Frau Mathes Gundula Schillergasse 8 29331 Lachendorf 01 05 34 1 16 Kuhlmann amp Sohn Herr Meyer Helmut Sonnenweg 13 29223 Celle 11 09 56 1 17 Frau Michel Annette Apfelweg 8 29225 Celle 20 04 46 1 18 Herr Timme uf Geschwister Scholl Stra e 117 29223 Celle 23 12 71 1 19 Her Thiermann Peter Trinkhorstweg 3 29223 Celle 27 12 81 2 20 Herr Tiegs Andreas Oesterleystra e 1 29225 Celle 03 02 54 1 21 Buch
228. _DATE CURRENT_TIMESTAMP Transaktionen und Benutzervariablen es 113 Tabelle 13 3 Forts Transaktion mit dem Isolationslevel Eigene Transaktion T1 Fremde Transaktion T2 SELECT FROM bestellung WHERE KID 1 LOCK IN SHARE MODE REPEATABLE READ Sie sehen auch die neue Bestellung von KID 1 SELECT FROM bstellung WHERE KID 1 Sie sehen nach wie vor nur die erste Bestellung des Kunden mit der KID 1 COMMIT SELECT FROM bstellung WHERE KID d Sie sehen nach wie vor nur die erste Bestellung des Kunden mit der KID 1 COMMIT SELECT FROM be tellung WHERE KID erde Sie sehen auch die neue Bestellung von KID 1 Die vierte und letzte definierte Stufe ist SERIALIZABLE Bei SERIALIZABLE wird die Einstellung des READ COMMITTED mit dem Unterschied verwendet dass jedes SELECT automatisch eine SHARED MODE Sperre setzt und so sicherstellt dass tats chlich keine nderungen an den Daten mehr vorgenommen wer den k nnen Dies stellt sicher dass Daten die einmal abgefragt wurden bei einer folgenden nderung in derselben Transaktion mit Sicherheit in unver ndertem Zustand vorliegen 13 5 Transaktionen und Benutzervariablen Eine weitere Nutzungsm glichkeit von Transaktionen ergibt sich im Zusam menhang mit Benutzervariablen Sollen Zwischenergebnisse gespeichert werden so k nnen diese in Variablen abgelegt und dann innerhalb einer Transaktion weiterverwendet werden Es so
229. _DATE Datentyp Cdate TO_ ZDate TIMSTAMP und hn sowie eine lich ganze CceurO Reihe wei Cdb1O terer spezi CintO eller CIngO Funktionen Csng Cvdate CONVERT CURRENT_ StrConv CONVERTO CONVERTC wert TIME nur f r alter Zei CURTIMEO gt chensatz UTC_TIME bestimmte neuer Zei Zeichen chensatz s tze nicht vergleich bar Konvertie CONV Hex verschie rungen wert 0ctO dene Funk Startba j 5 zwischen sis Ziel tionen ber Zahlenfor basis BIN und maten RAW For mate Tabelle 5 17 G ngige Umwandlungsfunktionen Tabelle 5 18 Konvertierungsfunktionen 189 WM kaites Tabelle 5 19 G ngige sonstige Funktionen 190 Datentypen Ausdr cke und Funktionen Oracle verwendet durchg ngig die Funktionen TO_Zieltyp also etwa TO_NUMBERC TO_CHARC TO_DATEC f r die Typumwandlungen 5 6 6 Logische und sonstige Funktionen Es gibt nat rlich noch eine ganze Reihe weiterer Funktionen die in SQL Anweisungen genutzt werden k nnen In der Praxis wichtig sind insbeson dere E die Generierung eines Schl ssels E die Bedingungen und die Informationsabfragen Der Prim rschl ssel einer Tabelle ist h ufig eine Nummer ohne inhaltliche Bedeutung Diese kann prinzipiell von der Datenbank erzeugt werden wobei die Datenbank dann auch die Eindeutigkeit innerhalb der Tabelle garantiert Manche Datenbanken bieten dazu einen Datentyp an der bereits bei der Anlage d
230. a ist er bei aktivierter Anweisung wei Anderenfalls erhalten Sie eine Fehlermeldung der Art Sie haben versucht einen leeren String auszuf hren Bitte geben Sie eine SQL Anweisung in das Bearbeitungsfeld ein und f hren sie dann aus Hilfreich ist auch dass Sie richtige Schl sselw rter daran erkennen k nnen dass sie immer sofort farbig hervorgehoben werden Das Ergebnis der SQL Anweisung ist in Abbildung 1 5 zu sehen Q E gebnismenge 1 PID Familienname Vorname PLZ Strasse Ort Geburtsdatum gt Weiss Peter 30529 Palmstra e 6 Hannover 1963 11 07 2 Bucz Susanne 30531 Heinestra e 23 Hannover 1976 04 06 4 Karmann Thomas 29227 Trift 28 Celle 1954 08 04 5 Kl tzer Karl 29221 Bahnhofstra e 2 Celle 1971 03 13 6 Weiss Karin 30529 Palmstra e 6 Hannover 1962 10 05 7 Weiss Peter 38134 Glanweg 4 Braunschweig 1974 03 02 8 Meier Kathrin 38154 welfenallee 23 Braunschweig 1981 05 03 9 Schmidt Karl 30529 Lavesallee 23 Hannover 1949 06 25 10 M ller Claudia 29596 Inden Fuhren 12 Breitenhees mm 11 Lisewski Bemd 30890 Roggenkamp 10 Barsinghausen 1960 06 06 15 Martens Melanie 29221 Horstweg 258 Celle 1911 02 17 17 Schlachter Dieter 29227 Mondhagen 43 Celle 1961 02 02 23 Peredy Helmut 29221 Mauernstra e 2 Celle 1956 02 23 24 Ruppert Nicola 29301 Welfenallee 23 Bergen 1962 02 25 25 Sander zus 29223 Marxallee 12 Celle 1953 02 05 26 Cromberg J rg 38152 Nordring 13 Braunschweig 1991 06 07 31 Schulze Tanja 29308 Berliner Ring 23 Wi
231. abelle Abfrage Verwandte Tabelle bfrage Verkn pfungstyp _ ktualisierungsweitergabe an verwandte Felder _ L schweitergabe an verwandte Datens tze In der Datenbank sind die Beziehungen bereits eingetragen Sie sollten Sie jetzt nicht inhaltlich ver ndern Schlie en Sie das Beziehungsfenster wieder und speichern Ihre eventuellen grafischen Ver nderungen dabei ab Damit haben Sie die Kursdatenbank als Musterdatenbank kurse vorerst kom plett angelegt een Eense rm X ia Em ee Oracle 3 5 Oracle 3 5 1 Gr nde f r die Nutzung Oracle ist eines der gro en Datenbankmanagementsysteme und neben DB2 das Datenbanksystem das gerade in Gro unternehmen oft das R ckgrat der IT bildet Oracle ist inzwischen in verschiedenen Versionen in jeder Gr en ordnung der IT bis hinunter zur Einzelplatzversion f r Windows verf gbar und hier auch f r nicht kommerzielle Zwecke testweise kostenlos nutzbar Daher ist es auch hier interessant es zu nutzen Oracle war immer wieder Vorreiter bei der Umsetzung komplexer SQL Erweiterungen was einerseits f r umfangreiche Anwendungen sehr interessant ist andererseits nat rlich umgekehrt aber auch mit dem Nachteil verbunden ist dass vieles was in Ora cle geht in anderen Systemen nicht m glich ist Wer Oracle bereits kennt oder entscheidet dass ihn gerade wegen seiner Bedeutung f r gr ere Unter nehmen Oracle besonders interessiert kann die Bei
232. agen Sub SELECT Da es sich bei der Unterabfrage also prinzipiell um eine eigene SELECT Anweisung handelt spricht man h ufig auch von einem Sub SELECT oder einer Sub Query ohne dass dies allerdings eigene SQL Schl sselw rter oder Anweisungen sind Es soll jetzt beispielsweise die Liste aller Dozenten erstellt werden deren Stundensatz mindestens genauso hoch ist wie der durchschnittliche Stun densatz aller Dozenten Das Problem besteht dann darin dass zun chst der durchschnittliche Stundensatz bekannt sein muss um dann im zweiten Schritt zu ermitteln ob der Stundensatz eines bestimmten Dozenten ber diesem durchschnittlichen Stundensatz liegt Bei Abfragen mit Unterabfragen sind also mindestens zwei Schritte notwen dig Im ersten Schritt wird eine Menge von Datens tzen ermittelt die im zweiten Schritt genutzt wird Dabei kann es sich um einen oder mehrere Datens tze handeln Hier kann mit SELECT AVG t Stundensatz FROM tbDozent t zun chst der durchschnittliche Stundensatz ermittelt werden Das Ergebnis ist in Abbildung 9 2 dargestellt Es handelt sich hier also um eine sehr kleine virtuelle Tabelle mit einer einzigen Spalte und einem einzelnen Datensatz avgit Stundensatz Das Prinzip ist jetzt immer dasselbe egal wie klein oder gro die Ergebnis menge des ersten Schrittes ist Im zweiten Schritt wird die eigentliche Hauptabfrage erstellt Dabei handelt es sich zun chst um eine normale SELECT Anweisung die all
233. al ein Feld suchen und berhaupt nicht mehr wissen wo sich dieses versteckt Wenn Sie Hilfe insbesondere f r komplexere Anweisungen und Funktionen ben tigen steht Ihnen schlie lich unten rechts noch ein Fenster zur Verf gung Sie k nnen mehrere Tabs ffnen um mehrere Anweisungen parallel verwen den zu k nnen Sie k nnen Ihre Anweisungen als Query speichern und sp ter wieder laden und ausf hren A 2 Oracle Um die SQL Anweisungen in Oracle einzugeben steht neben den zeilenori entierten Oberfl chen wie SQLplus oder PL SQL insbesondere die browsero rientierte Oberfl che zur Verf gung Hierzu ffnen Sie in Windows ber START die Programmgruppe ORACLE DATABASE 10G EXPRESS EDITION Sie fin den die in Abbildung 1 8 angegebenen Elemente Mm Hilfe aufrufen gt g Backup der Datenbank E Datenbank starten amp Datenbank stoppen g Datenbank zur ckschreiben E Erste Schritte a Gehe zu Datenbank Homepage E sQL Befehlszeile ausf hren Interessant ist jetzt der Punkt GEHE ZU DATENBANK HOMEPAGE mit dem Sie Ihren Browser mit der lokalen Startseite Ihrer Oracle Datenbank starten In der Startseite finden Sie die M glichkeit sich bei Ihrer Datenbank anzumel den Daf r stehen sowohl die Superuser SYS und SYSTEM als auch der bereits im Rahmen der Einrichtung der Beispieldatenbanken erzeugte Benut zer kurse zur Verf gung Geben Sie den Benutzer zusammen mit dem von Ihnen festgelegten Passwort ein und melden S
234. alte ndern INSERT UPDATE DELETE 2 Richten Sie einen neuen Kurs CE25 zu dem eben angegebenen Thema ein Der Kurs soll am Montag dem 27 8 2009 beginnen und bis Freitag ge hen Der Kurs soll 40 Stunden umfassen und mit einem eigenen Zertifikat abschlie en Als Kursleiter soll Peter Weiss aus Hannover eingesetzt wer den Der Kurs ist umsatzsteuerpflichtig und die Geb hr betr gt 400 6 1 2 3 Zu dem eben eingerichteten Kurs hat sich Ulrich Plate angemeldet Er er h lt die KBID 443 Er bezahlt selbst per berweisung und hat noch nichts eingezahlt Rabatt und Fehltage sind die Standardwerte Ein Zeug nis wird nicht erstellt U6 1 3 4 Es hat sich noch ein neuer Teilnehmer angemeldet Frau Martina Kasten aus 30514 Hannover Am S gewerk 12 Das Geburtsdatum ist unbekannt Erstellen Sie alle notwendigen Eintr ge Sie hat sich zu denselben Kon ditionen wie Ulrich Plate angemeldet 6 1 4 5 Was bewirkt die folgende SOL Anweisung theoretisch Welche Fehler werden wahrscheinlich bei der Ausf hrung auftreten INSERT INTO tbKurs KID Kurskennung KTHID KursdauerStunden Kursbeginn Kursende Zertifikat Gebuehr Ustpflichtig DID SELECT KID Kurskennung KTHID KursdauerStunden Kursbeginn 7 Kursende 7 DEFAULT Gebuehr Ustpflichtig NULL FROM tbKurs 6 Zum 1 1 2009 ist die Person mit der PID 34 zum Dozententeam gesto en Er arbeitet selbstst ndig zum Stundensatz von 15 Titel und Qualifika tio
235. ame Alle Personen Description Tabelle tbPerson aus der A Kursdatenbank komplett v Cancel 392 Oracle Sie k nnen jederzeit auf einmal gespeicherte Abfragen zur ckgreifen indem Sie im bersichtsfenster die Option SAVED SQL w hlen Wie in Abbildung 1 15 dargestellt k nnen Sie aus allen gespeicherten Abfragen w hlen ber den OWNER k nnen Sie das Schema einschr nken beispielsweise auf die Bei spieldatenbank KURSE Abbildung 1 15 Results Explain Describe SavedSQL History bersicht ber die Owner All Users M Find Display 10 M Go Delete Checked gespeicherten SQL Anweisungen Owner Name Description soL Updated By Last Updated Tabelle tbPerson aus der SELECT Familienname Vorname Maina nen Kursdatenbank komplett FROM tbPerson KESE ee row s 1 1 0f1 Interessant ist auch noch die Option DESCRIBE im bersichtsfenster Nachdem Sie die SOL Anweisung DESCRIBE mit dem Namen einer Tabelle im oberen Fenster ausgef hrt haben k nnen Sie sich im bersichtsfenster den Aufbau der kompletten Tabelle ansehen und dann bei der Erstellung der eigentlichen SQL Anweisung jeweils unten auf den Namen der Tabelle und der Spalten Columns klicken die Sie ben tigen Dies erspart das Tippen der Namen und verhindert Schreibfehler Abbildung 1 16 Beschreibung einer Tabelle mit DESCRIBE E SQL Commands Microsoft Internet Explorer Datei Bearbeiten Ansicht Favoriten Extras Q aix
236. an AL LIE SEL n L A a AL Aan and ad eZ AIE SE ILN A ind and and L ALN Ain LLIE SEL Sand and LAL Aian ban La Aian and Ke ALA A and LAS Ban anr anzahl 1 onono onan Datenbank Artikel u Abbildung C 12 Tabelle Bestellposition ohne Timestamp 421 Stichwortverzeichnis Symbols l 110 126 106 110 176 92 106 110 lt 110 126 lt 110 126 lt gt 110 gt 110 126 gt 110 126 110 _ 110 180 Numerics 3 Ebenen Modell 220 A ABSOLUTE 175 ACID 361 ADD INDEX 371 nderungsanomalie 242 Aggregatfunktion 138 168 193 203 295 Aktualisierungsabfrage 213 ALIAS 147 Alias 94 96 98 303 MS Access 96 MySQL 97 Syntax 99 Tabellenname 97 118 ALL 98 111 147 307 330 Alphanumerisch 151 153 165 ALTER DOMAIN 299 ALTER ROLE 349 ALTER TABLE 281 371 MySQL Syntax 283 Syntax 282 ALTER VIEW 294 AND 108 147 Anforderungsanalyse 223 Anf hrungszeichen openBase 98 Anomalie 241 271 ANSI 20 95 152 ANY 111 307 API 381 Archiv 204 ARRAY 152 Artikeldatenbank 37 AS 94 147 ASC 101 147 153 ASCENDING 101 ASCI 180 Assoziation siehe Beziehung Atomarit t 361 Attribut 225 226 Umsetzung ERM in Tabelle 239 Attribut siehe Datenfeld Ausdruck 167 Ausgangszustand 38 Authentifikation 341 342 AUTOCOMMIT 359 AUTOWERT 190 AVG 139 143 194 B B Baum 375 Bedingung 106 145 Klammerung 108 Syntax 110 Bedingungsliste 109 BEGIN TRANSACTION 360 Benutzer 340 Benutzer
237. anagementsystems f hren Bevor wir weitere berlegungen zum Einsatz von Indizes machen soll jetzt auf die konkrete SQL Syntax f r die Verwaltung von Indizes eingegangen werden 14 1 2 Einen Index anlegen CREATE INDEX In der Kursdatenbank besteht beispielsweise der Prim rschl ssel der Tabelle tbPerson aus der PID Wer kennt aber immer die PID So wird man beim Zugriff zwar seinen Namen aber nicht seine PID wissen Daher ist es nahe liegend dass in der Kursdatenbank eine Person oft mit dem Namen gesucht werden muss Der passende Index k nnte in MySQL wie folgt erzeugt wer den CREATE INDEX name ON tbPerson Familienname Ein Index hat immer einen eigenen Namen wie hier name und bezieht sich immer auf eine Tabelle Er kann ein oder mehrere Datenfelder der Tabelle umfassen Hier wird ein Index auf dem Feld Familienname der Tabelle tbPer son definiert F r jede Tabelle k nnen kein ein oder mehrere Indizes defi niert werden Da sich ein Index immer auf eine Tabelle bezieht kann er auch direkt mit der Erstellung der Tabelle definiert werden also im Zusammen hang mit der CREATE TABLE Anweisung Optimierter Zugriff der NDES WW WM O U CREATE TABLE Index Erstellung mit CREATE TABLE Felddefinition Integrit tsbedingung Felddefinition Integrit tsbedin gung Als Integrit tsbedingung kann dabei auch ein INDEX indername feldname Pr fixl nge feldname Pr fixl nge verwendet werden D
238. ander in Beziehung gebracht wer den k nnen Erst diese Beziehungen erm glichen bergreifende Auswertun gen mit den entsprechenden Informationen Eine Beziehung Relation ist eine m gliche Kombination von Datens tzen aus zwei Tabellen Ein Sonderfall sind rekursive Beziehungen die eine Tabelle mit sich selbst in Beziehung setzen Bei einer Beziehung werden aus den beiden Tabellen diejenigen Datens tze als zusammenpassend angesehen die in zwei bestimmten Feldern denselben Beziehung 33 W karite 34 Fremdschl ssel Abbildung 2 8 Beziehung zwischen tbDozent und tbPerson ber den Fremd schl ssel PID SQL der Standard relationaler Datenbanken Wert haben In einer der beiden Tabellen wird dazu zumeist der Prim r schl ssel ausgew hlt In der zweiten Tabelle wird ein Feld bestimmt dessen Werte mit den Werten des Prim rschl ssels der anderen Tabelle bereinstim men m ssen Dieses Feld wird als Fremdschl ssel bezeichnet Ein Fremdschl ssel ist ein Feld dessen Werte mit den Werten des Prim r schl ssels einer anderen Tabelle bereinstimmen Dadurch werden diejeni gen Datens tze beider Tabellen in Beziehung zueinander gesetzt deren Werte im Prim rschl sselfeld und im Fremdschl sselfeld bereinstimmen Aus jeweils einem Datensatz beider Tabellen entsteht so virtuell ein gemein samer Datensatz mit allen Feldwerten aus beiden Tabellen Abbildung 2 8 zeigt den Zusammenhang am Beispiel der beiden Tabel
239. andere Mitarbeiter lassen sich hier nat rlich erg nzen sollen aber im Sinne einer besseren bersichtlichkeit zun chst nicht betrachtet werden F r jede Person sind au er ihrem Familiennamen und Vornamen noch die Postleitzahl der Ort und die Stra e sowie ihr Geburtsdatum hinterlegt Schnelleinstieg und Neustart Jar E m Die Tabelle tbDozent beinhaltet zus tzliche Felder f r alle Personen die in tbDozent dem Unternehmen als Dozenten t tig sind So wird festgehalten seit wann sie als Dozent besch ftigt sind wie hoch ihr Stundensatz ist und welche Titel und Qualifikationen sie mitbringen Da viele der Dozenten nebenberuflich t tig sind wird au erdem der Name der Firma gespeichert in der sie haupt beruflich besch ftigt sind ber die durch eine Linie symbolisierte Beziehung zur Tabelle tbPerson kann ermittelt werden welche Stammdaten also Adresse und Geburtsdatum die einzelnen Dozenten haben Die Tabelle tbKursbesuche beinhaltet alle Teilnehmer an den Kursen Sie ist tbKursbesuche wie die Dozententabelle ber eine Beziehung mit der Tabelle tbPerson ver bunden in der sich die Basisdaten der Kursteilnehmer insbesondere die Adressdaten befinden In diesem Sinne bedeutet die Modellierung dass es sich bei den Kursbesuchern immer um Personen handelt tbPerson die f r einen Kurs die Rolle eines Kursteilnehmers tbKursbesuche annehmen k n nen Auf der anderen Seite der Grafik finden Sie die Tabelle tbKursthema
240. ank eines Unternehmens sind Artikel Kunde Auf trag Rechnung In unserem Beispiel zur Kursverwaltung das wir im n chsten Kapitel installieren wollen finden Sie Tabellen wie tbPerson tbDo zent oder tbKurs Tabelle 29 si Kapitel2 SQL der Standard relationaler Datenbanken 30 Beispiel Abbildung 2 6 Beispiel mit den ersten Datens tzen in einer Tabelle tbDozent Namen Die Wahl von Namen f r Tabellen wird von den meisten Unternehmen stan dardisiert Um stets zu erkennen um was es sich handelt etwa um eine Tabelle ein Feld oder andere Objekte wie einen VIEW oder eine Prozedur ist es sinnvoll ein Pr fix zur Kennzeichnung der verschiedenen Datenbank objekte zu verwenden Hier wird das Pr fix tb f r Tabellen verwendet Besteht ein Name aus mehreren Begriffen k nnen diese mit Unterstrichen getrennt werden also etwa tbauftrag_position Ferner wird auch die soge nannte CamelCase Schreibweise von Namen genutzt bei der Namen die logisch aus mehreren W rtern bestehen ohne Trennzeichen mit f hrendem Gro buchstaben direkt aneinandergesetzt werden also etwa tbAuftragPo sition Dies hat den Vorteil dass keine Konflikte mit den jeweiligen Namens konventionen der verschiedenen Datenbankmanagementsysteme auftreten Die Problematik der Gro Kleinschreibung muss in Abh ngigkeit vom ver wendeten Betriebssystem und Datenbanksystem ber cksichtigt werden Jede Tabelle gruppie
241. ankschema lt Inputskript Das Inputskript enth lt wie alle hier verwendeten Skripte Toolaufrufe und SQL Anweisungen die ausgef hrt werden sollen Sie k nnen die Skripte mit einem normalen Editor wie dem Notepad bearbeiten Seien Sie aber vorsich tig mit Textverarbeitungsprogrammen wie Word da Skripte keine Formatie rungsanweisungen enthalten d rfen Pr fen Sie die Skripte und passen Sie Pfade oder Passw rter gegebenenfalls an Ihre Umgebung an Jetzt kann es losgehen Zun chst werden die Tabellen angelegt Dazu k n nen Sie das vorbereitete Skript CreateKurse txt nutzen Alle Dateien die jetzt angesprochen werden finden Sie auf der CD im Verzeichnis datenban ken MySQL kurse Aufruf mysqladmin exe Aufruf mysql exe Bearbeitung der Skripte Tabellen anlegen 59 W kaites Listing 3 1 CREATE TABLE tbPerson 60 Ergebniskontrolle I Die Beispieldatenbanken Die Datei CreateKurse txt beginnt mit folgendem Inhalt DROP TABLE IF EXISTS tbPerson CREATE TABLE IF NOT EXISTS tbPerson PID int NOT NULL PRIMARY KEY Familienname varchar 50 NOT NULL Vorname varchar 50 NULL PLZ char 5 NULL Strasse varchar 50 NULL Ort varchar 50 NULL DEFAULT Celle Geburtsdatum date Im Prinzip handelt es sich dabei um zwei SQL Anweisungen Zun chst wird gepr ft ob die Tabelle schon existiert und diese gegebenenfalls gel scht Dann wird eine neue Tabelle tbPerson erzeugt F r diese Befehle ben tigen wi
242. ar eingetragen siehe Abbildung 4 17 Beachten Sie die Spracheinstellung Aus den Eintr gen in diesen Zeilen generiert MS Access dann die WHERE Klausel Dabei erzeugt MS Access aus jeder Zeile eine Reihe von Bedingun gen die mit einem AND verbunden werden Eine Zeile beschreibt also eine Reihe von Bedingungen die alle erf llt sein m ssen Anschlie end werden die einzelnen Zeilen mit einem OR verbunden Somit ergibt sich genau die Struktur die wir oben im Zusammenhang mit der Klammerung angespro chen haben Die WHERE Klausel besteht also aus dem Schl sselwort WHERE und einer dar auffolgenden Bedingungsliste Der Aufbau der Bedingungsliste selbst ist zun chst relativ einfach Jede Bedingungsliste folgt der Struktur bedingung AND OR bedingung mit mindestens einer und theoretisch beliebig vielen Bedingungen die durch AND und OR Operatoren miteinander verbunden werden Die einzelnen Bedingungen m ssen entgegen obiger Darstellung nicht zwingend in Klammern gesetzt werden dies erh ht aber die Lesbarkeit in vielen F llen und verhindert Mehrdeutigkeiten Daher sind die obigen Klam mern als dringende Empfehlung f r die zu verwendende Syntax zu verste hen Generell gilt dass AND st rker bindet als OR Bedingungen in MS Access und openBase Abbildung 4 17 MS Access Eingabe f r obige Werte Bedingungsliste 109 WM karitea Bedingung Tabelle 4 1 Operatoren Pr dikate der WHERE Klausel 110
243. aronm Be vr Studium Bibliografische Information Der Deutschen Nationalbibliothek Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie detaillierte bibliografische Daten sind im Internet ber http dnb d nb de abrufbar Die Informationen in diesem Buch werden ohne R cksicht auf einen eventuellen Patentschutz ver ffentlicht Warennamen werden ohne Gew hrleistung der freien Verwendbarkeit benutzt Bei der Zusammenstellung von Texten und Abbildungen wurde mit gr ter Sorgfalt vorgegangen Trotzdem k nnen Fehler nicht ausgeschlossen werden Verlag Herausgeber und Autoren k nnen f r fehlerhafte Angaben und deren Folgen weder eine juristische Verantwortung noch irgendeine Haftung bernehmen F r Verbesserungsvorschl ge und Hinweise auf Fehler sind Verlag und Herausgeber dankbar Alle Rechte vorbehalten auch die der fotomechanischen Wiedergabe und der Speicherung in elektronischen Medien Die gewerbliche Nutzung der in diesem Produkt gezeigten Modelle und Arbeiten ist nicht zul ssig Fast alle Hardware und Softwarebezeichnungen und weitere Stichworte und sonstige Angaben die in diesem Buch verwendet werden sind als eingetragene Marken gesch tzt Da es nicht m glich ist in allen F llen zeitnah zu ermitteln ob ein Markenschutz besteht wird das Symbol in diesem Buch nicht verwendet Umwelthinweis Dieses Produkt wurde auf chlorfrei gebleichtem Papier gedruckt Um Rohs
244. arstellung einer Tabelle als Spalte erscheint Auch der Begriff Attribut wird gelegentlich verwendet wenn auch zumeist mehr im Zusammenhang mit der Modellierung einer Datenbank und weniger im Zusammenhang mit SQL Relationale Datenbanken F r jeden einzelnen Dozenten wird f r jedes einzelne Feld festgelegt welche Information tats chlich gespeichert wird also der konkrete Wert So wird beispielsweise im Attribut DID Dozenten Identifikationsnummer eine ein deutige Nummer f r den Dozenten festgelegt im Attribut Stundensatz fin den Sie seinen Bruttoverdienst in Euro Jede Zeile einer Tabelle beschreibt einen Datensatz hier einen Dozenten Jeder Datensatz hat strukturell dieselben Felder die aber nat rlich f r jeden Datensatz einen unterschiedlichen Wert haben k nnen und im Normalfall auch haben Datens tze beschreiben also jeweils einen kompletten Satz von Daten der eine Person einen Gegenstand ein Konzept oder einen Prozess charakterisiert Die Tabelle ist die Sammlung dieser gleich strukturierten S tze Aus dem mathematischen Konzept das dem relationalen Modell zugrunde liegt wird f r den Datensatz auch der Begriff des Tupel abgeleitet und synonym zum Datensatz verwendet Jedes Feld einer Tabelle hat einen festgelegten Datentyp Ein Datentyp f r Texte ist beispielsweise CHARACTER f r Zahlen INTEGER FLOAT oder DECIMAL Daneben existieren spezielle Datentypen wie DATE TIME oder TIMESTAMP Die Grundtypen sind in den einze
245. aten feldnamen Alias zu verwenden um sie in der Ausgabe besser unterscheiden zu k nnen Beachten Sie dass die Liste nur Kurse enth lt die tats chlich einen anderen Kurs als Voraussetzung haben Sollen alle Kurse angegeben werden also auch die Kurse ohne Voraussetzung muss ein OUTER JOIN verwendet werden worauf wir noch zur ckkommen werden ID Thema T Voraussetzung ID Voraussetzung Thema 2 Windows f r Fortgeschrittene 1 Einstieg mit Windows 3 Ordnung im Dateisystem 2 Windows f r Fortgeschrittene 4 Wodi 2 windows f r Fortgeschrittene 5 Accessi 2 Windows f r Fortgeschrittene 6 Esxcell 2 Windows f r Fortgeschrittene 7 Access 5 Access 8 Datenbankentwurf 7 Access 9 YBA Datenbankprogrammierung 7 Access 10 Word Il 4 word 11 Excelll 6 Excell bungen zur SELECT Anweisung mit INNER JOIN ber zwei Tabellen Erstellen Sie f r die folgenden Aufgaben jeweils eine SELECT Anweisung 1 Ermitteln Sie f r alle Kurse die Kennung das Kursthema sowie die ge plante und die tats chliche Kursdauer Verwenden Sie sinnvolle Alias f r die Datenfelder und sortieren Sie das Ergebnis alphabetisch nach der Kurskennung 4 5 1 1 2 Erstellen Sie eine alphabetische Liste aller Dozenten mit Familienname Vorname PLZ Ort und Stundensatz 4 5 1 2 Tabellen miteinander verbinden JOIN 3 Ermitteln Sie f r alle Dozenten eine Liste mit DID Stundensatz sowie Kurskennung Kursbeginn und Kursende der Kurse die sie leiten
246. atenbank erm glichen Wichtig ist dass sowohl die Programme als auch die Oberfl chen aus Sicht der Datenbank einen Benut zer darstellen der SOQL Anweisungen an die Datenbank schickt und daf r einen Returncode und eventuell eine Datenmenge zur ckgeliefert bekommt Das ist die Aufgabe von SQL Nimmt die Datenbank eine SQL Anweisung entgegen wird diese zun chst auf formale Richtigkeit hinsichtlich der SQL Syntax gepr ft Dies ist die Aufgabe des Parsers Aufgabe dieses Buches ist es dass Sie m glichst wenig mit dessen Fehlermeldungen zu tun bekommen indem wir richtiges f r den Parser verst ndliches SQL verwenden Dies bildet den Schwerpunkt dieses Buches Verglichen mit der deutschen Sprache w rde der Parser den Satz Es heute regnen als syntaktisch falsch abweisen Die Kontrolle durch den Par ser ist aber noch keine Garantie f r eine sinnvolle SQL Anweisung Der Satz Ich regne heute ist in der deutschen Sprache syntaktisch richtig Der Par ser beurteilt also nicht den Inhalt der Anweisung Ob eine Anweisung auch semantisch sinnvoll ist sehen wir erst wenn der Ausgabeprozessor die ermittelte Datenmenge und den Returncode aufbereitet hat Eine vom Parser akzeptierte SQL Anweisung muss darauf gepr ft werden ob der Anwender berechtigt ist diese Anweisung f r die angesprochenen Daten in der Datenbank berhaupt auszuf hren Diese Berechtigungen wer den mithilfe spezieller SOL Anweisungen eingerichtet siehe Kapitel 12
247. atoren mit denen Aussagen verkn pft werden k nnen Die bekanntesten Operatoren sind UND Konjunktion und ODER Disjunktion So gilt f r zwei Aussagen A und B dass die Gesamtaussage A UND B nur UND wahr ist wenn beide Aussagen wahr sind A Die Zahl X ist durch 2 teilbar B Die Zahl X ist durch 5 teilbar C Die Zahl X ist durch 10 teilbar A UND B Wenn A UNDB f r eine Zahl X gilt dann gilt auch dass X durch 10 teilbar ist Beispiele X 30 A ist wahr B ist wahr also ist A UND B wahr 30 ist durch 10 teilbar X 15 A ist falsch B ist wahr also ist A UND B falsch 15 ist nicht durch 10 teilbar 413 5 Anhang B 414 Inklusive ODER Exklusive ODER Beispiel Anhang Boolesche Algebra X 12 A ist wahr B ist falsch also ist A UND B falsch 12 ist nicht durch 10 teilbar X 11 A ist falsch B ist falsch also ist A UND B falsch 11 ist nicht durch 10 teilbar Entsprechend gilt f r zwei Aussagen A und B dass die Gesamtaussage A ODER B wahr ist wenn eine oder beide Aussagen wahr sind Da auch beide Aussagen wahr sein k nnen spricht man von einem Inklusive ODER ein schlie lich zweier richtiger Aussagen A Die Sonne scheint B Das Licht ist an C Es ist hell A ODER B Wenn A ODER B wahr ist dann gilt auch C dass es hell ist Sonne scheint Licht an A ist wahr B ist wahr also ist A ODER B wahr hell Sonne scheint nicht Licht an A ist falsch B ist wahr also ist A ODER
248. auben Datens tze von Bestellungen l schen die er f r irrelevant h lt weil ihm Informationen fehlen Er kann Kundendaten erfassen die bereits vorhanden sind und so ungewollt Duplikate erzeugen Er kann aber auch durch Bedienfehler Rabatte ver ndern oder eine Liefera dresse falsch bestimmen Alles dies geschieht schlicht aus Unwissenheit um gesch ftliche Regeln und Prozesse Der Zugang zur Datenbank muss daher genau auf die Bed rfnisse Rechte und F higkeiten der Benutzer abgestimmt werden Den Benutzern m ssen Rechte einger umt werden damit sie ihre Arbeit sinnvoll erledigen k nnen und ihnen m ssen Rechte genommen werden um Vertraulichkeit und Qua lit t der Daten zu sch tzen Diese Rechte oder Berechtigungen werden manchmal auch in der bersetzung des englischen Wortes privileges als Privilegien bezeichnet Privileg klingt so herrschaftlich und machtherrlich Das Einr umen von Privilegien hat aber nichts mit Vergabe von Macht son dern ausschlie lich mit der Abstimmung der Zugriffsrechte auf Informa tionen mit den betrieblichen privaten oder sonstigen Notwendigkeiten zu tun Die technische Organisation der Vergabe von Rechten beginnt stets mit dem Datenbankadministrator Bei Einrichtung des Datenbankmanagementsys tems wird ein erster Benutzer eingerichtet der Superuser der alle Rechte erh lt Ausgehend von diesem Superuser werden dann weitere Benutzer und Benutzergruppen eingerichtet und ihnen werden die ben tigten
249. auf seine Eigenintelligenz legt Wenn Sie also ein Datenfeld ohne NULL Werte erzeugen wollen m ssen Sie dies mit NOT NULL angeben Anderenfalls denkt sich Fire bird dass Sie NULL Werte zulassen und m chte nicht dass Sie ihm dies durch ein gesondertes NULL noch einmal best tigen Also wenn Sie NULL Werte zulassen wollen einfach nichts angeben Bei openBase sollte kein UNIQUE angegeben werden Au erdem ist bei open Base das Thema der Gro Kleinschreibung zu beachten Wird der Name der Tabelle oder eines Datenfeldes nicht in Anf hrungszeichen gesetzt wird er in Gro buchstaben umgewandelt Insofern verh lt sich openBase standard konform Andererseits erlaubt es die Verwendung von Anf hrungszeichen um eine Gro Kleinschreibung zu erzwingen Hier m ssen Sie entscheiden was Ihnen lieber ist Die Beispiele der Artikeldatenbank sind ohne Anf h rungszeichen angegeben Wenn Sie die Gro Kleinschreibung verwenden m ssen Sie bei allen anderen Angaben in dem Fenster SQL STATEMENT AUS F HREN die Anf hrungszeichen ebenfalls verwenden Weitere Felder Timestamp Firebird openBase 261 si Kapitel8 Datenbanken erstellen SQL DDL 262 bungen Tabellenerstellungsabfrage in MS Access MS Access kennt das Mittel der Tabellenerstellungsabfrage Dabei kann eine normale Abfrage erstellt werden die dann in der Entwurfsansicht ber den Men punkt ABFRAGE TABELLENERSTELLUNGSABFRAGE in eine Tabellenerstel lungsabfrage
250. ausf hrenden Anwender oder dem entsprechenden Programm getroffen werden Ergibt sich die L sch und nderungslogik bereits aus der Logik der Datenbankstruktur kann aber auch bereits bei der Definition der Tabelle festgelegt werden wie die Datens tze der Fremdschl sseltabelle zu behan deln sind wenn der zugeh rige Datensatz der Prim rschl sseltabelle gel scht oder ge ndert wird Grunds tzlich k nnen vier M glichkeiten angegeben werden wie beim L schen oder ndern eines Datensatzes der Prim rschl sseltabelle also hier eines Kunden vorzugehen ist Aktion DELETE UPDATE NO ACTION Der Datensatz in der Prim r Der Datensatz in der Prim r Standard schl sseltabelle wird nicht schl sseltabelle wird nicht gel scht stattdessen wird eine ge ndert stattdessen wird eine Fehlermeldung erzeugt Fehlermeldung erzeugt Damit wird verhindert dass in Damit wird verhindert dass in der Fremdschl sseltabelle der Fremdschl sseltabelle unkontrolliert Datens tze ent unkontrolliert Datens tze ent stehen deren Fremdschl ssel stehen deren Fremdschl ssel zu keinem Datensatz in der Pri zu keinem Datensatz in der Pri m rschl sseltabelle geh ren m rschl sseltabelle geh ren CASCADE Die L schung erfolgt mit Die nderung des Prim r schl ssels in der Prim rschl s seltabelle wird durchgef hrt sofern diese erlaubt ist Zus tzlich werden auch die Fremdschl ssel in der Fremd schl sseltab
251. austaste finden Sie die Option zur Auswahl als Standardschema 385 5 Anhang A Abbildung A 2 Anmeldung beim MySQL Query Browser Abbildung A 3 Grundstruktur des Bildschirms des MySQL Query Browsers 386 Anhang Benutzung der Datenbanksysteme MySQL Query Browser 1 2 12 A MySQL Query Browser Mit MySOL Serverinstanz verbinden Gesp Verbindungen admin y la Server Host localhost Pott 13306 Nutzername root XXxxx Passwort Standardschema kurse Nach der Anmeldung sehen Sie den Standardbildschirm des Query Browsers wie in Abbildung A 3 dargestellt MYSCH Query Browser Connection ad n Qum gomisien aae Atiega Bepe Dach Die DOR tpe fe T O irgetaimenge 1 Schemata Der Bildschirm besteht aus mehreren Teilfenstern die Sie nat rlich ver n dern k nnen Die Logik ist aber immer gleich Sie geben im oberen Fenster eine SQL Anweisung ein wie in Abbildung 1 4 zu sehen MySQL SELECT FROH tbperson Zur Ausf hrung der eingegebenen SQL Anweisung m ssen Sie in jedem Fall die Schaltfl che AUSF HREN dr cken Dann wird die eingegebene SQL Anweisung auf richtige Syntax analysiert und gegebenenfalls ausgef hrt Achten Sie darauf dass die Anweisung markiert ist Im oberen Fenster k n nen mehrere SQL Anweisungen eingegeben werden Die aktivierte Anwei sung erkennen Sie an einem leichten Farbwechsel des Hintergrundes Im normalen Farbschem
252. banken Wenn Sie eine SQL Abfrage durchf hren wollen w hlen Sie TOOLS INTERAC TIVE SQL aus Geben Sie im oberen Fenster einfach die SQL Anweisung ein beispielsweise SELECT from tbPerson und bet tigen Sie die Schaltfl che mit dem gelben Blitz oder w hlen Sie im Menu QUERY EXECUTE Sie sehen das Ergebnis der Abfrage im unteren Fens ter Es sollte etwa wie in Abbildung 3 49 aussehen Interactive SQL EEE File Edit Query Database Help nn Re eaoh Z O Z e SELECT from tbPerson Cientdilet3 Aut Data Plan Statistics FAMILIENNAME VORNAME PLZ strasse ort GEBURTSDATU A Weiss Peter 30529 Palmstra e 6 Hannover 07 11 1963 2 Bucz Susanne 30531 Heinestra e 23 Hannover 06 04 1976 4 Karmann Thomas 29227 Trift 28 Celle 04 08 1954 5 Kl tzer Karl 29221 Bahnhofstra e 2 Celle 13 03 1971 IV Use Table Alias 6 Weiss Karin 30529 Palmstra e 6 Hannover 05 10 1962 F 7 7 Weiss Peter 39134 Glanweg 4 Braunschweig 02 03 1974 8 Meier Kathrin 39154 Welfenallee 23 Braunschweig 03 05 1981 9 Schmidt Karl 30529 Lavesallee 23 Hannover 25 06 1949 10 M ller Claudia 29596 In den Fuhren 12 Breitenhees lt null gt 11 Lisewski Bemd 30890 Roggenkamp 10 Barsinghausen 06 06 1960 23 Peredy Helmut 29221 Mauernstra e2 Celle 23 02 1956 17 Schlachter Dieter 29227 Mondhagen 43 Celle 02 02 1961 15 Martens Melanie 29221 Horstweg 258 Celle 17 02 1911 24 Ruppert Nicola 29301 Welfenallee 23 Bergen 25 02 1962 25 Sander Knull gt
253. bbrechen A Microsoft Office Access mdb adp mda mde ade a 5 W hlen Sie die zu importierende Datei beim ersten Aufbau der Kurs datenbank ist das Person und best tigen Sie Ihre Auswahl mit der Schaltfl che IMPORTIEREN Sie gelangen in den sogenannten Import As sistenten 6 Best tigen Sie die Option TABELLENBL TTER ANZEIGEN siehe Abbildung A 33 Alternativ k nnten Sie hier weitere Tabellenbl tter oder benannte Bereiche aus Excel als Datenquelle w hlen Damit k nnen gezielt be stimmte Daten in MS Access berf hrt werden 403 Ss Anhang A Anhang Benutzung der Datenbanksysteme Abbildung A 33 Import Assistent Schritt 1 E Import Assistent f r Kalkulationstabellen Ihre Tabellenkalkulationsdatei enth lt mehr als ein Tabellenblatt oder mehr als einen Bereich Welches Blatt bzw welchen Bereich m chten Sie anzeigen Tabellenbl tter anzeigen Benannte Bereiche anzeigen Beispieldaten f r Tabellenblatt tbPerson Abbrechen Fertig stellen 7 Best tigen Sie im n chsten Schritt dass die erste Zeile die Spalten ber schriften bestimmen soll siehe Abbildung A 34 Damit wird die erste Zeile der Excel Datei genutzt um die Namen der Daten in den darauffol genden Zeilen f r die neue MS Access Tabelle festzulegen Die erste Zeile bestimmt die Tabellenstruktur die weiteren Zeilen liefern die eigentli chen Daten Damit ersparen Sie sich zun chst viel Tipparbeit Abbildung A 3
254. beherrschen Wir wollen uns in diesem Buch ausf hrlich mit der Sprache besch ftigen denn wie bei jeder Programmier Sprache kommt es auf die Syntax an Die W rter m ssen sinnvoll und syntaktisch richtig kombiniert werden SQL ist keine Windows orientierte Sprache oder Anwen dung Helfen k nnen bei der Erstellung von SQL Anweisungen Programme mit grafischer Oberfl che in denen SQL Anweisungen per Mausklick erstellt und generiert werden Doch auch wenn Sie diese Programme nutzen sollten Sie in der Lage sein die erzeugten SQL Anweisungen zu lesen und zu verstehen sei es zum Zweck der Fehlersuche der Einbindung in Pro gramme oder der Performanceanalyse MS Access ist nur ein Beispiel f r eine solche Oberfl che MS Access wurde in diesem Buch unter anderem deswegen ber cksichtigt um eine derartige Oberfl che beispielhaft zeigen und den Zusammenhang zwischen der Ober fl che und dem eigentlichen SQL demonstrieren zu k nnen Schlie lich haben viele Hersteller von Datenbanken zus tzliche Oberfl chen zur Gene rierung von SQL entwickelt um dem Anwender entgegenzukommen der nicht programmieren m chte Diese Oberfl chen haben alle gemeinsam dass 21 S Kapitel2 SQL der Standard relationaler Datenbanken in einer Windows typischen grafischen Umgebung die gew nschte Abfrage von Informationen aus der Datenbank zusammengestellt wird Der Anwen der beschreibt dabei die Eigenschaften der gew nschten Informationen in einem Fo
255. bei der Definition von Tabellen eingesetzt werden Beispielsweise kann ein Punkt im zweidimen sionalen Raum mit CREATE TYPE Punkt x FLOAT y FLOAT definiert und dann in Tabellen als Datentyp f r geometrische Informationen genutzt werden Die sogenannten BIT Typen f r bin re Daten in sind mit Erscheinen des SQL Standards in der Version SQL2003 nicht mehr Teil des Standards aber nat r lich noch in vielen Datenbanksystemen implementiert Die Vielfalt der Erweiterungen und unterschiedlichen Implementierungen der Datentypen die die heutigen Datenbanksysteme bieten stellen die Anwender vor einige Probleme Diese Probleme sind relativ gering solange Sie sich innerhalb eines Systems mit SQL bewegen da der SQL Interpreter auf die Datentypen abgestimmt ist Soll aber ber eine Programmierschnitt stelle auf eine oder gar mehrere unterschiedliche Systeme zugegriffen wer den m ssen die entsprechenden Beschreibungen der technischen Dokumen tation genau beachtet werden Urspr nglich sollten die Datentypen durch einen Datentypcode standardisiert werden Der ANSI Standard ordnet den Datentypen sogenannte Datentypcodes DATATYPE CODE zu Beginnend mit CHARACTER 1 NUMERIC 2 DECIMAL 3 wird dabei den einzelnen Datentypen ein eindeutiger Code zugeordnet Sp ter kamen auch Untertypen hinzu Datentypen sodass die Codes allein nicht mehr eindeutig sind So hat beispielsweise bei den Zeitintervallen INTERVAL DAY den Code 10 und den Unterty
256. belle tbPerson Beispiel Listing 5 22 Einfache Gruppierung mit Z hlung der Datens tze COUNT Beispiele COUNT 193 W kaites Tabelle 5 21 Drei unterschiedliche Z hlweisen in einer Tabelle Tabelle 5 22 G ngige Aggregatfunktionen 194 Datentypen Ausdr cke und Funktionen SELECT Anweisung Ergebnis Erl uterung SELECT Count 20 Alle Datens tze werden ber cksichtigt FROM tbPerson Kein Datensatz kann den Wert NULL aufweisen SELECT Count Vorname 19 Ein Vorname ist ein NULL Wert Daher FROM tbPerson werden nur die brigen Vornamen ber cksichtigt SELECT 17 Zus tzlich zu dem NULL Wert treten die a Vornamen Karl und Peter jeweils orname Fi 5 FROM tbPerson a auf Daher z hlen sie nur ein Neben der Aggregatfunktion COUNTO gibt es eine ganze Reihe weiterer Aggregatfunktionen Die Syntax ist immer FUNKTIONSNAME ALL DISTINCT ausdruck Der Ausdruck sollte dabei nicht selbst eine Aggregatfunktion sein sondern ein Datenfeld oder eine einfache Berechnung mit Operatoren und Skalar funktionen SQL Funktion Erl uterung COUNT Ausdruck gt n Es wird die Anzahl der Werte in den Datens tzen gez hlt NULL Werte werden nicht gez hlt Oracle erlaubt auch ein COUNT CALL a1 womit nicht nur die unterschiedlichen Werte gez hlt werden COUNT z hlt alle Datens tze NULL Werte in irgendwelchen Feldern verringern die Anzahl nicht
257. bellen joinliste WHERE bedingungsliste GROUP BY feldname feldname ORDER BY feldname ASC DESC feldname ASC IDESC Y bungen zur SELECT Anweisung mit GROUP BY Klausel Erstellen Sie f r die folgenden Aufgaben jeweils eine SELECT Anweisung 1 Ermitteln Sie aus allen Datens tzen in tbKursbesuche wie viele Kursteil nehmer ohne Ber cksichtigung des Kurses per Gutschein bar bezie hungsweise mit berweisung bezahlen Geben Sie die Zahlweise als eigenes Feld ebenfalls an U4 6 1 2 Ermitteln Sie f r alle Kursbesucher gruppiert nach Kursen wie viele Selbstzahler dabei sind Die anderen Datens tze sollen nicht interessie ren 4 6 2 3 Ermitteln Sie die Liste aus 4 6 1 aber sortieren Sie sie absteigend nach der Anzahl der Teilnehmer und beziehen Sie sich nur auf die Kurse CE17 und CE23 4 6 3 4 Ermitteln Sie die Anzahl der Datens tze in der Tabelle tbKursbesuche ins gesamt 4 6 4 5 Ermitteln Sie je Kurs die Summe der Fehltage Geben Sie die KID das Kursthema und die Anzahl der Fehltage aus 4 6 5 4 7 Die HAVING Klausel Stellen Sie sich vor Sie wollen die Anzahl der Personen in Ihrer Datenbank ermitteln die in einer bestimmten Stadt wohnen Dann k nnen Sie das mit einer GROUP BY Klausel erreichen Stellen Sie sich weiter vor Sie wollen nur die St dte in Ihrer Ergebnismenge haben in denen mindestens drei Personen wohnen Dann m ssen Sie alle Datens tze herausfiltern d
258. ben wir uns mit der nderung der Daten in der Datenbank mit den INSERT UPDATE und DELETE Anweisungen besch ftigt und schlie lich in den letzten Kapiteln mit dem Aufbau der eigentlichen Datenbankstruktur Jetzt sollen weitere M glichkeiten von Abfragen und nderungen aufge zeigt werden um komplexere Probleme zu l sen Daf r sind sogenannte Unterabfragen in SQL vorgesehen Eine Unterabfrage besteht aus einer eige nen SELECT Anweisung die wie blich eine Menge von Datens tzen liefert Das Besondere besteht dann darin dass die so ermittelte Datensatzmenge unmittelbar in der eigentlichen SELECT Anweisung weiterverwendet wird Es werden also mithilfe einer SELECT Anweisung ein oder mehrere virtuelle Datens tze erstellt die dann zumeist als Basis f r Vergleiche oder Auswahl entscheidungen in der WHERE Klausel der bergeordneten eigentlichen SELECT Anweisung genutzt werden siehe Abbildung 9 1 SE Han SELECT ss Ergebnis gt FROM mE Unterabfrage Unterabfrage Abbildung 9 1 Das Ergebnis der Unterabfrage wird als virtuelle Tabelle unmittelbar verwendet 301 W kaites Sub SELECT Beispiel 1 Schritt Abbildung 9 2 Ergebnismenge der geplanten Unterabfrage 2 Schritt Listing 9 1 Hauptabfrage noch ohne Unterabfrage Abbildung 9 3 Alle Dozenten mit ihren 302 Stundens tzen Unterabfr
259. bildung 4 42 Mit eingeschalteter Funktion Zeile erfolgt eine vollst ndige Gruppierung Listing 4 47 Totale Gruppierung in MS Access 141 5 Kapitel 4 Abbildung 4 43 Aggregatfunktion direkt in 142 der Feldbeschreibung Beispiel mit WHERE Listing 4 48 Gruppierung mit Filter Abbildung 4 44 Ergebnis nach dem WHERE GROUP BY und ORDER BY Mit SQL Daten abfragen SELECT EET Auswahlabfrage tbKursbes Ts Anzahl Datens tze Anzahl v Tabelle tbKursbesuche Funktion Gruppierung Ausdruck Sortierung _ Anzeigen Kriterien Der Einfluss der WHERE Klausel Die wHERE Klausel wird vor der GROUP BY Klausel abgearbeitet die Datens tze werden also eingeschr nkt bevor sie gruppiert werden Damit k nnen Sie beispielsweise bestimmen welche Gruppen berhaupt betrachtet werden indem Sie nur auf die gew nschten Feldwerte des Gruppierungsfeldes mit der WHERE Klausel filtern Wir wollen das in einem weiteren Beispiel betrach ten Dabei wollen wir wissen wie viele Personen in unserer Tabelle tbPerson in welcher Stadt wohnen also nach dem Ort gruppieren Dies soll aber nur f r die Orte Hannover Braunschweig und Celle geschehen Zus tzlich wollen wir die Orte nach der Anzahl der Personen absteigend sortieren Dazu k nnen wir die folgende SELECT Anweisung verwenden SELECT p Ort COUNT AS Personen in der Datenbank FROM tbPerson AS p WHERE p Ort IN C Hannover Bra
260. bler weil hier beispielsweise durch GRANT vertriebsleiter TO meier der Vertriebsleiter einen Stellvertreter meier mit denselben Rechten erh lt Auch im Falle eines Wechsels ist das Rollenkonzept sehr flexibel wie die Ersetzung von stolze durch altmann beweist Das Passwort eines Benutzers kann in Oracle mit der ALTER USER Anweisung ge ndert werden Die Syntax entspricht der CREATE USER Anweisung ALTER USER benutzername IDENTIFIED BY PASSWORD passwort 12 8 3 Benutzerkonzept in Firebird Firebird wurde zun chst als Datenbank f r Programme entwickelt Daher hat man sich hier f r eine eigene Sicherheitsdatenbank entschieden die als security2 fdb im Firebird Verzeichnis liegt Sie enth lt nur die beiden Tabel len host_info und users ist aber ber die Oberfl che nicht zug nglich Der transparenteste wenn auch nicht der einfachste Zugangsweg ist ein Tool das zusammen mit anderen im Firebird Verzeichnis bin gespeichert wird Das ist bei Ihnen normalerweise C Programme Firebird Firebird_2_0 bin Sie k nnen auf Kommandozeilenebene darauf zugreifen Geben Sie ein gsec user SYSDBA password masterkey Benutzerkonzepte verschiedener Datenbanken ae 112 m Das Tool meldet sich mit GSEC gt Sie k nnen jetzt einen neuen Benutzer meier mit dem Passwort hase einf gen Zus tzlich k nnen Sie noch seinen Vornamen Horst und den Nach namen Meier angeben GSEC gt add meier pw hase fname Horst Iname Meier
261. bsteigendem Datum eignet Eine g ltige Datumsangabe ist also beispielsweise 2008 05 17 Die Uhrzeit wird jeweils zweistellig wie bereits von dem entsprechenden Datentyp bekannt eingegeben Der TIMESTAMP kann zus tzlich Bruchteile von Sekunden und eine Angabe der Zeitzone beinhalten also etwa 2008 07 19 20 12 45 123 01 00 f r eine Angabe einer Zeit in Deutschland Das funktioniert in allen Daten banksystemen Probieren Sie einfach mal SELECT 2008 07 19 20 12 45 123 01 00 FROM tbDozent aus Alle anderen Formate sind zumeist nur Darstellungsformate die aber bei Eingaben durchaus zu verwenden sind 5 4 Ausdr cke Bisher haben wir immer direkt mit Datenfeldern oder mit Literalen gearbei tet wenn es darum ging welche Werte als Ergebnis einer SELECT Anweisung angezeigt werden wie Tabellen miteinander verbunden wurden welche Datens tze gefiltert werden und wonach sortiert wird Betrachten Sie die Syntax der SELECT Anweisung haben wir also bisher die folgende Form ver wendet SELECT DISTINCTJALL feldnamenliste FROM tabelle joinliste WHERE bedingungsliste GROUP BY feldnamenliste HAVING bedingungsliste ORDER BY feldnamenliste ASCIDESCIY Tats chlich kann an fast jeder Stelle an der ein Feldname steht auch ein Literal stehen Werden Literale mit Feldnamen oder Literale mit Literalen oder Feldnamen mit Feldnamen ber Operatoren wie beispielsweise oder miteinander verbunden entsteh
262. bung in Abbildung 2 4 f hrt zu der SQL Anwei sung aus Listing 2 1 das bei seiner Ausf hrung dann die Daten aus Abbil dung 2 5 liefern k nnte _ Familienname Worname PLZ Kl tzer Karl 29221 o Martens Melanie 29221 o Peredy Helmut 29221 Somit haben wir jetzt eine erste SOL Anweisung formuliert und auch den Bezug zu einer grafischen Oberfl che f r deren Erstellung hergestellt Es gibt einige Grundregeln f r die Syntax von SQL Anweisungen die immer gelten E Eine SQOL Anweisung kann sich ber mehrere Zeilen erstrecken sie endet in der Regel mit einem Semikolon Relationale Datenbanken m SQL ist nicht case sensitiv Gro Kleinschreibung spielt also keine Rolle Das gilt f r die SOL Schl sselw rter wie SELECT FROM INSERT ge nauso wie f r die Datenbankobjekte Tabellen Felder Ausnahmen bilden hier Datenbanken wie openBase die aber sp ter noch zu bespre chen sind E Bei den Datenbankinhalten also den eigentlichen Daten ist aber in den meisten F llen auf Gro Kleinschreibung zu achten SQL ist f r die Verwaltung und Nutzung relationaler Datenbanken optimiert Entsprechend ist SQL keine allgemeine Programmiersprache zur L sung beliebiger Problemklassen Wenn Sie Verzweigungen IF SWITCH CASE Schleifen WHILE REPEAT DO Unterprogramme und Prozeduren vermissen so ist die Antwort Das ist so und l sst sich nur teilweise durch erweiterte Funktionen ndern Das gibt e
263. ccess generiert aus diesen Angaben eine SQL Anweisung die wie in Listing 6 14 aussieht UPDATE tbKursthema SET tbKursthema Kursthema EDV amp Kursthema Beachten Sie die Syntax Das amp Zeichen repr sentiert hier die Funktion CON CAT wie sie andere Datenbanksysteme verwenden w rden Sie k nnen diese Anweisung testen indem Sie mit dem nebenstehenden Icon auf die Daten ansicht umschalten Allerdings k nnen Sie damit nur die ausgew hlten Datens tze berpr fen nicht aber die Funktionsf higkeit der Ausdr cke f r die Aktualisierung Sind Sie hier unsicher m ssen Sie zun chst eine Aus wahlabfrage erstellen und die Ausdr cke in der obersten Zeile FELD als berechnete Felder testen Sie k nnen dort die Ausdr cke identisch verwen den Dies ist zwar etwas umst ndlich sch tzt aber vor unliebsamen berra schungen Sobald Sie die Aktualisierungsabfrage tats chlich ausf hren entweder mit ABFRAGE AUSF HREN oder mit dem entsprechenden nebenstehenden Symbol wird die nderung tats chlich vorgenommen Zur Sicherheit erscheint noch eine Kontrollabfrage Abbildung 6 11 die noch einmal zumindest eine Plausibilit tspr fung der Anzahl der Datens tze erlaubt Gerade wenn Sie gezielt einzelne Datens tze ndern wollen und dann hier eine unerwartet gro e Zahl sehen wird deutlich dass Sie die Kriterien f r die WHERE Bedin gung vergessen haben Wenn Sie diese Abfrage best tigen sind die nderungen unwiderruflich
264. chaffen die dann ihrerseits als Datenquelle f r den Rest der SELECT Anweisung nutzbar ist Sie wollen beispielsweise den gr ten Durchschnittsbetrag aller gezahlten Betr ge je Kurs bestimmen Daf r muss zun chst in der Tabelle tbKursbesu che eine Gruppierung nach der KID vorgenommen werden um alle Daten s tze eines Kurses zusammenfassen zu k nnen Dann muss mit der Aggre gatfunktion AVGO der Durchschnitt je Kurs bestimmt werden Danach muss wiederum f r diese Durchschnitte mit einer weiteren Aggregatfunktion das Maximum bestimmt werden Das Problem liegt also im Kern in einer zwei fachen Aggregation Die naheliegende L sung SELECT MAX CAVG GezahlterBetrag FROM tbKursbesuche kb GROUP BY kb KID funktioniert leider nicht weil die Gruppierungsfunktion nur einstufig anwendbar ist Mit ANY oder ALL lie e sich hier eine L sung schaffen wie wir bereits in einer hnlichen Fragestellung gesehen haben Unterabfragen in der FROM Klausel Beispiel 313 W kaites Listing 9 20 Die Unterabfrage in der FROM Klausel erzeugt eine virtuelle Tabelle Listing 9 21 Klassifizierung der gezahlten Betr ge der Kursteilnehmer Oracle 314 Unterabfragen Sub SELECT N herliegend und verst ndlicher ist aber oft eine L sung in einer zweistufi gen Vorgehensweise bei der zun chst nach der KID gruppiert und der Mit telwert ermittelt wird Das Ergebnis wird dann als eigene Tabelle mit einer neuen Spalte durchschni
265. che Benutzeroberfl che bietet hier keine besondere Unterst tzung an MS Access kennt immer nur ein Schema sodass eine Aus wertung ber Schemata hinweg nicht m glich ist Oracle kennt alle drei Operatoren UNION INTERSECT und MINUS also nicht EXCEPT UNION entspricht UNION DISTINCT wobei es das Schl sselwort DIS TINCT nicht gibt Zus tzlich steht UNION ALL zur Verf gung Wenn Sie in Ora cle ber mehrere Schemata hinweg auswerten wollen m ssen Sie die ent sprechenden Rechte haben Hier k nnen Sie sich als SYSTEM anmelden m ssen dann aber immer mit dem Schemanamen qualifizieren also kurse tbPerson PID statt nur tbPerson PID In Firebird steht ebenfalls nur der Operator UNION beziehungsweise UNION ALL zur Verf gung Die Eingabe muss direkt in das SQL Fenster der Abfrage erfolgen Firebird kennt zwar verschiedene Schemata die hier verwendete Oberfl che l sst aber keine Auswertung ber Schemata hinweg zu openBase kennt alle drei Operatoren also UNION INTERSECT und EXCEPT Pro blematisch ist nur deren Verwendung im Abfragefenster Eigentlich handelt es sich bei den mit UNION oder einem der anderen Operatoren zusammenge setzten SELECT Anweisungen ebenfalls um Abfragen wie sie im Abfrage fenster abgearbeitet werden k nnen Diese Anweisungen liefern schlie lich auch ein Ergebnis in Form einer Menge von Datens tzen Das sieht openBase aber keineswegs genauso die Abfragen im Abfragefenster funktionieren in der Regel nicht
266. chen rechner nutzen Der SQL Standard erfordert eigentlich eine FROM Klausel die hier komplett fehlt aber sie wird inhaltlich auch nicht ben tigt sodass MySQL beispielsweise komplett darauf verzichten kann Andere Datenban ken wie Oracle behelfen sich hier mit einzeiligen Hilfstabellen wie dual sodass man dann SELECT 5 7 FROM dual einzugeben hat Die wichtigsten numerischen Funktionen sind in Tabelle 5 11 zusammen gestellt SQL Funktion Erl uterung Beispiel ABSOLUTE n gt n ABS 123 gt 123 ABS 123 gt 123 Bestimmung des absoluten Wertes von n also Entfernung des Vorzeichens CEILING n gt n CEIL n gt n CEILING 12 45 gt 13 CEIL 12 45 gt 12 CEIL 12 gt 12 Zwangsaufrunden der Nach kommastellen Es wird die kleinste ganze Zahl gr er oder gleich der Eingabe ermittelt FLOOR n gt n FLOOR 12 45 gt 12 FLOOR 12 45 gt 13 FLOOR 12 gt 12 Zwangsabrunden der Nach kommastellen Es wird die gr te ganze Zahl kleiner oder gleich der Eingabe ermittelt EXP n gt n Ermittelt e also die Eulersche EXP 1 gt 2 71828 Zahl hoch dem angegebenen Wert POWER n n2 gt n Ermittelt n also die normale POWER 2 5 gt 32 Potenzfunktion LEAST n n1 Kleinster Wert einer Reihe von LEAST 2 3 5 gt 2 gt i Werten die einzeln aufgez hlt als Parameter angegeben wer den LN n gt n Nat rlicher Logarithmus zur LN 2
267. chl s sel E Die Namen werden soweit m glich bernommen sonst gem den SQL Regeln umgeformt Regeln f r die Transformation von Beziehungstypen Bei der Umsetzung der Beziehungen ist in Abh ngigkeit der verwendeten Kardinalit ten ein unterschiedliches Vorgehen notwendig Insbesondere die n n Beziehungen erfordern dabei besondere Aufmerksamkeit Standardfall 1 1 und 1 n Der erste Fall betrifft alle Beziehungstypen die bin r sind also nur zwei Entit ten beinhalten 1 1 oder 1 n als Kardinalit t haben und ohne eigene Attribute sind Dies sollten normalerweise etwa 70 80 aller Beziehungen sein In diesen F llen muss nur die Prim r Fremdschl sselbeziehung vorbe reitet werden F r jede 1 n Beziehung wird der Prim rschl ssel der Tabelle auf der n Seite als Fremdschl ssel in die Tabelle der 1 Seite bernommen F r jede 1 1 Beziehung wird auf einer Seite der Prim rschl ssel der an deren Tabelle als Fremdschl ssel bernommen Dabei wird der Fremd schl ssel f r die Seite gew hlt die tendenziell die abh ngigere Entit t darstellt Spezialfall n n Beziehungen und Beziehungen mit eigenem Attribut Diese Beziehungen sollten die weiteren 15 25 ausmachen F r jede n n Beziehung wird eine eigene Tabelle erstellt Diese enth lt die Prim rschl ssel der beiden beteiligten Entit ten als Fremdschl ssel Alle Attribute der Beziehung bilden den Prim rschl ssel Jede Beziehung mit
268. cht Unterscheidet aber bereits der Standard verschiedene INTEGER so k nnen Sie am Beispiel MySQL das eine gro e Vielfalt von ganzzahligen Datentypen bietet sehen wo der Unterschied im Einzelnen liegt Bei den Datentypen f r ganze Zahlen fallen insbesondere die zus tzlichen Typen TINYINT und MEDIUMINT auf siehe Tabelle 5 3 Datentypen Datentyp Byte Unsigned kleinster Wert gr ter Wert TINYINT 1 Nein 128 127 Ja 0 255 SMALLINT 2 Nein 32 768 32 767 Ja 0 65 535 MEDIUMINT 3 Nein 8 388 608 8 388 607 Ja 0 16 777 215 INT 4 Nein 2 147 483 648 2 147 483 647 CINTEGER Ja 0 4 294 967 295 BIGINT 8 Nein 9 223 372 036 9 223 372 036 854 854 775 807 775 808 Ja 0 18 446 744 073 709 551 615 Die wesentlichen Unterschiede liegen in der Gr e der speicherbaren Zahlen und in dem daf r ben tigten Speicherplatz in Byte Bedenken Sie gerade bei Tabellen die viele Datens tze beinhalten werden dass der Speicherbedarf sehr gro werden kann Sie sehen dass die Unterschiede erheblich sind Ganze Zahlen k nnen in MySQL zus tzliche Angaben enthalten INTEGER Stellenanzahl UNSIGNED ZEROFILL Die Unterscheidung zwischen SIGNED Standard f r Zahlen mit Vorzeichen und UNSIGNED f r Zahlen ohne Vorzeichen die dann dank des eingesparten Bits f r das Vorzeichen zumeist doppelt so gro e positive Zahlen erlauben ist in IT Sprachen weitverbreitet Die optionale Angabe der S
269. cht ben tigte Zeichen werden zumeist mit dem Code O belegt siehe Abbildung 5 2 zweiter Datensatz Bei VARCHAR Feldern wird die tats chlich ben tigte L nge in einem oder mehreren zus tzlichen Bytes gespeichert und nur die tats chlich ben tigte Speicherplatzgr e belegt CHAR Felder sind auf eine maximale Zeichenanzahl begrenzt die Anzahl liegt je nach Datenbank zumeist zwischen 255 und 65 535 Zeichen VARCHAR erlaubt auch wieder zumeist mehr Zeichen je nach Datenbank zwi schen 65 535 Zeichen und 2 GB Nun b te es sich an stets VARCHAR zu verwenden da dies mit Ausnahme sehr kleiner Datenfelder doch wesentlich speicherplatzeffizienter ist Der Nachteil liegt allerdings f r die Datenbank in der unterschiedlichen L nge von Daten s tzen die so entstehen und den zus tzlichen Zugriffen auf die L ngen bytes Daher werden diese Felder oft datenbankintern getrennt gespeichert und haben Einschr nkungen und Performance Nachteile bei der Suche mit SELECT Anweisungen Letztlich ist hier also immer zwischen Speicherplatz und Performance abzuw gen was in der Informatik keine wirklich neue Erkenntnis ist Im Zweifelsfall sollten Sie sich bei kleinen und mittleren Datenbanken f r die feste L nge entscheiden Datentypen u 5 m Bieten VARCHAR Felder bereits komfortablen Speicherplatz so kann dieserin TEXT CLOB F llen in denen Sie komplette Texte in der Datenbank ablegen wollen eben falls noch nicht ausreichend sein F r be
270. chten die Daten in anderen Feldern bei denen die Werte in dem Gruppierungsfeld gleich sind Sie m chten beispielsweise die Teilnehmer unserer Kurse nach den Kursen gruppieren an denen sie teilnehmen und zus tzlich die Anzahl der Teilneh mer an den verschiedenen Kursen ermitteln Beginnen wir dazu mit der SQL Anweisung in Listing 4 42 SELECT kb KID AS Anzahl Kursteilnehmer FROM tbKursbesuche kb ORDER BY kb KID Die GROUP BY Klausel Das Ergebnis ist in der Abbildung 4 35 zu sehen Jetzt k nnen Sie nat rlich in der Tabelle selbst z hlen wie viele Teilnehmer die einzelnen Kurse haben Dank der Sortierung geht das sogar relativ einfach Man kommt schnell auf drei Teilnehmer am Kurs CE17 und die acht Teilnehmer des Kurses CE23 sind im Normalfall auch noch an den Fingern zweier H nde abzuz hlen Anzahl Kursteilnehmer CE17 CE17 CE17 CE23 CE23 CE23 CE23 CE23 CE23 CE23 CE23 CE24 CE24 CE24 CE24 CE24 H30 H30 Bei gr eren Datenmengen wird dies aber schnell schwierig und die Frage nach einer Unterst tzung durch die Datenbank ist sicher nicht als unver sch mt abzutun Hier kann die folgende SOL Anweisung Abhilfe schaffen SELECT kb KID COUNTC AS Anzahl Kursteilnehmer FROM tbKursbesuche AS kb GROUP BY kb KID KID Anzahl Kursteilnehmer Die SELECT Anweisung ermittelt das Ergebnis das Sie in Abbildung 4 36 sehen Schauen wir uns die neuen Teile in der Anweisung an Zun chst haben wird die
271. cksichtigt werden wird dies jetzt gezielt konstruiert Zun chst werden alle Datens tze der Tabelle ber cksich tigt und es wird f r jeden Ort eine Gruppe ein Gruppendatensatz gebildet Dann wird f r jeden Gruppendatensatz mit der HAVING Klausel berpr ft ob er die Bedingung erf llt dass er aus mindestens drei Einzeldatens tzen gebildet wurde Ist dies nicht der Fall wird der entsprechende Gruppen datensatz aus der Ergebnisdatenmenge entfernt Schlie lich werden die ver bleibenden Gruppen nach ihrer Gr e absteigend sortiert HAVING bedingung AND OR bedingung HAVING Syntax Die Bedingung der HAVING Klausel wird auf jede Gruppe der GROUP BY Klausel angewendet es wird also jede Gruppe berpr ft Stellen Sie sich das als Schleife ber die einzelnen Gruppendatens tze vor Nur die Gruppen die die HAVING Bedingung erf llen bleiben Teil der Ergebnismenge Die wHERE Klausel und die HAVING Klausel haben also viele Gemeinsamkei ten Eigentlich verhalten sich beide Klauseln fast gleich Der Unterschied besteht nur darin dass sich die WHERE Klausel auf einzelne Datens tze die HAVING Klausel auf Gruppendatens tze bezieht Wann sollte jetzt eine Filterbedingung wo platziert werden WHERE oder HAVING Eine Filterbedingung die sich auf das Datenfeld der untersten Grup pierungsebene also die Einzelsatzebene bezieht l sst sich immer in einer WHERE Klausel unterbringen wie bereits an obiger SELECT Anweisung zu sehen wa
272. ctured Query Language also auf Deutsch etwa struktu Mathematisches Modell rierte Abfragesprache Zum Zeitpunkt ihrer Entstehung war SQL eine von mehreren Sprachen mit denen man versuchte einen m glichst komforta blen Zugang zu den damals ebenfalls neuen relationalen Datenbanksystemen zu schaffen E F Codd hatte 1970 das relationale Datenbankmodell vorge stellt Seiner extrem einfachen auf wenigen aber klaren mathematischen Regeln beruhenden Struktur verdankt es seinen Siegeszug den es seitdem in der Informatik angetreten hat Umgangssprachlich ausgedr ckt beruht das relationale Modell im Wesentlichen auf der Mengenlehre Alle Informationen werden entsprechend ihrem Inhalt in Tabellen aufgeteilt und dort strukturiert in Datens tzen auch Tupel genannt gespeichert Die Tabellen sind untereinander ber Beziehungen auch Relationen genannt verbunden die die einfache Kombination von Informationen aus verschie denen Tabellen erlauben also beispielsweise welcher Kunde welche Bestel lung abgegeben hat Das System hat sich als extrem flexibel und zugleich einfach zu verwalten herausgestellt sodass im Lauf der letzten 30 Jahre immer mehr Unternehmen ihre Datenspeicherung auf relationale Datenban ken umgestellt haben 19 WM karite 20 Abfragesprachen ANSI Standard SQL der Standard relationaler Datenbanken Mit der Entwicklung der relationalen Datenbanken als Speicherform f r praktisch jede Art strukturie
273. d Sie l schen Tabellen mit DROP TABLE tabellenname Integrit tsbedingung E 8 m 1 Erstellen Sie alle Tabellen des Schemas artikel sofern noch nicht ge bungen schehen Sie k nnen dabei auf die Listings des Buches zur ckgreifen oder diese erg nzen wenn Sie bereits erstellte Tabellen noch einmal l schen und mit zus tzlichen Eigenschaften neu erzeugen wollen 8 3 1 2 Erstellen Sie eine Tabelle kind die der Speicherung der Kinder der Kun den dient Die Tabelle soll einen 25 stelligen Vornamen das Alter in Jah ren und das Geschlecht des Kindes beinhalten Das Alter soll nicht negativ sein Das Geschlecht soll als W oder M angegeben werden Andere Angaben sind verboten Es soll eine Beziehung zur Tabelle kunden aufgebaut werden um das Kind dem Kunden zuordnen zu k nnen Au Berdem sollen das Datum und die Uhrzeit der letzten nderung gespei chert werden k nnen U8 3 2 8 3 6 MS Access MS Access bietet nat rlich ebenfalls die M glichkeit neue Tabellen anzule Prim rschl ssel in gen Dabei steht aber nur die grafische Oberfl che zur Verf gung Sie w hlen MS Access dazu zun chst TABELLEN und dann NEU und schlie lich ENTWURFSANSICHT aus Die Oberfl che sollte dann etwa der in Abbildung 8 14 entsprechen Sie k nnen jetzt die einzelnen Felder angeben Dies entspricht der Felddefi nition des CREATE TABLE Zu jedem Feld wird neben dem Namen ein Datentyp angegeben der den speziellen MS Access Ty
274. d beider Gruppen Um eine echte Anmeldung zu erzwingen m ssen Sie dem Benutzer Admi nistrator ein Passwort zuordnen W hlen Sie dazu ADMINISTRATIONSKENN WORT NDERN fr her Anmeldungskennwort ndern Das bisherige Passwort ist leer Sie k nnen ein neues Passwort eingeben und dieses best tigen Ver lassen Sie danach MS Access komplett Nach dem erneuten Aufruf und der Anmeldung bei Ihrer Datenbank wird das Passwort abgefragt Sie k nnen diesen Mechanismus wieder abstellen indem Sie wiederum SICHERHEIT BENUTZER UND GRUPPENKONTEN w hlen dann BENUTZER und dann f r den Benutzer Administrator die Option KENNWORT L SCHEN ausw hlen MS Access kennt sowohl Benutzer als auch Benutzergruppen wie bereits aus der Oberfl che deutlich wird Beiden k nnen wiederum ber die Oberfl che Berechtigungen zugewiesen werden sodass die Gruppen mit den Rollen teil weise vergleichbar sind Die Anweisungen lassen sich allerdings nur ber die Engine also in programmierter Form nicht ber die Oberfl che verwenden Benutzerkonzepte verschiedener Datenbanken 12 8 5 Benutzerkonzept in openBase openBase verf gt ber ein dem Standard sehr nahes Benutzerkonzept mit Benutzern Rollen und Berechtigungen Alle Befehle k nnen im Fenster unter EXTRAS SQL eingegeben werden Bei der Einrichtung des Systems wird als Superuser der Benutzer sa ohne Passwort eingerichtet openBase bietet in seinem SQL Fenster die M glichkeit weitere Benutzer direkt
275. d es bei 1 000 Datens tzen nur noch 1 bei 1 000 000 Datens tzen gar nur noch 0 002 Ein Index kann also Zugriffszeit sparen Indizes haben aber nicht nur Vor teile sonst w rde man stets alle Spalten und Spaltenkombinationen indizie ren Sie haben auch Nachteile Diese Nachteile sind im Wesentlichen E der zus tzliche Speicherplatz f r die Indextabelle der zus tzliche Verwaltungsaufwand f r den Aufbau und die Pflege des Index Der B Baum muss gespeichert und verwaltet werden F r jeden Datensatz muss ein Eintrag im B Baum mit allen Werten der indizierten Spalten erfol gen Das bedeutet dass bei einem Index der Breite b also b Bytes je Datensatz ben tigt werden Hinzu kommen der Speicher f r die Verzweigung des Baums und die generelle Verwaltung Au erdem vergeben die meisten Sys teme den Speicher nur in bestimmten Gr en um eine zu starke Fragmen tierung zu vermeiden Dies kann schnell dazu f hren dass bei kleinen Tabellen die Indextabelle gr er ist als die eigentlichen Daten Sie sehen es auch an den Indizes f r den Prim rschl ssel die standardm ig bei der Anlage einer Tabelle erzeugt werden Diese sind bei unseren kleinen Beispieltabellen durchaus schon ein mal gr er als die Originaltabellen Daher lohnt sich die Verwendung von Indizes nur bei gr eren Tabellen als Faustregel sollte die Anzahl der Indexzugriffe also bei log n unter 1 lie gen Dies bedeutet dass man bei Tabellen mit 1 000 Zei
276. de in obigem Beispiel auch die folgende SQL Anweisung zu dem Resultat in Abbildung 9 4 f hren sie w re allerdings umst ndlicher und in dieser Form nicht notwendig SELECT p Familienname p Vorname t DID t Stundensatz FROM tbDozent t INNER JOIN tbPerson p ON t PID p PID GROUP BY t DID HAVING t Stundensatz gt SELECT AVGC t2 Stundensatz FROM tbDozent t2 Programmierung Unterabfragen k nnen f r eine Datenbank aufwendige Operationen sein Besteht die M glichkeit das Ergebnis der Unterabfrage mit einem eigenen SELECT zu ermitteln und zwischenzuspeichern beispielsweise im Rahmen der Programmierung kann dies einfacher und performanter sein Unter Umst n den kann das Ergebnis auch mehrfach wiederverwendet werden Eine Unterabfrage ist oft nur ein Weg eine Ergebnismenge zu erzeugen und unmittelbar weiterzuverwenden Stehen alternative Wege zur Erreichung des selben Ergebnisses zur Verf gung sollten diese stets gepr ft werden 9 2 Unterabfragen mit Vergleichsoperatoren Unterabfragen werden wie in unserem ersten Beispiel gern verwendet um Vergleichswerte f r die WHERE oder HAVING Klausel zu ermitteln Die Logik beruht dann darauf dass die Unterabfrage eine Zeile mit einem Datenfeld liefert Dieses Feld stellt letztlich einen einzigen Wert dar der als Vergleichs wert verwendet werden kann und dann zumeist mit den Vergleichsoperato ren gt lt gt oder lt mit den Werten in anderen Datenfeldern verglichen
277. den rt WW E a B Abbildung 3 43 1 i_IBOConsole Nach der Anmeldung beim Server Console View Server Database Tools Windows Help SY re 3 BED EE Servers _Name Path 3 Local Server D Databases ga Backup Server Log Ag Users Server Local Server Jetzt k nnen Sie eine Datenbank anlegen Dazu finden Sie auf der CD unter Datenbanken Firebird kurse die Datei FireKurse bat Diese Datei l dt die in CreateKurse sql niedergeschriebenen SQL Anweisungen in Firebird um die Datenbank kurse zu erzeugen Dabei wird eine Datei Kurse fdb Firebird Database angelegt In der ersten Zeile finden Sie eine Pfadangabe f r die Ablage der Datei Diese entspricht der Standardinstallation Pr fen Sie ob der Pfad in der ersten Zeile f r Ihr System g ltig ist CREATE DATABASE C Programme Firebird Firebird_2_0 KURSE fdb Diese Datei m ssen Sie noch beim Server registrieren damit er sie in seine Dateiverwaltung aufnimmt Rufen Sie dazu den Menupunkt DATABASE REGISTER in der Konsole auf 79 5 Kapitel3 Die Beispieldatenbanken Abbildung 3 44 Registrierung der Firebird Windows Datenbankdatei E Disconnect w Create Database u Drop Database Maintenance gt de view Metadata onnected Users BE Propertie Klicken Sie auf die Schaltfl che und folgen Sie im SELECT DATABASE Dia log dem Pfad zu der oben angegebenen Datei im Normalfall also C Programme Firebird Firebird_2_0O und w
278. den bungsaufgaben Abbildung 8 7 Die Entit t Artikel mit ihren Attributen und Beziehungen Listing 8 4 Erstellen der Tabelle artikel mit zwei Fremdschl ssel beziehungen 263 W kaites Listing 8 4 Forts Erstellen der Tabelle artikel mit zwei Fremdschl ssel 264 beziehungen Umsetzung der Beziehung Datenbanken erstellen SQL DDL einstandspreis DECIMAL 6 2 listenpreis DECIMAL 6 2 mwst_art CHAR 9 DEFAULT voll NOT NULL REFERENCES mwst mwst_art bestand INT DEFAULT O NOT NULL letzte_aenderung timestamp DEFAULT current_timestamp Beachten Sie insbesondere die Zeilen wgknz INT DEFAULT O NOT NULL REFERENCES warengruppe kennziffer und mwst_art CHAR 9 DEFAULT voll NOT NULL REFERENCES mwst mwst_art in denen die Fremdschl sselbeziehungen aufgebaut werden die die beiden Beziehungen in Abbildung 8 7 umsetzen In der ersten REFERENCES Zeile wird das Feld wgknz erzeugt also die Waren gruppenkennziffer Dabei wird mit dem Schl sselwort REFERENCES gleichzei tig eine Fremdschl sselbeziehung zum Feld kennziffer der Tabelle waren gruppe aufgebaut Nach dem Schl sselwort REFERENCES wird dabei zun chst der Tabellenname der zweiten Tabelle angegeben danach in Klammern das Feld das mit wgknz in Beziehung gesetzt werden soll Die Zeile bewirkt damit dass die Datenbank wei dass Werte dieser beiden Felder berein stimmen sollen und wahrscheinlich fter in SELECT Abfragen verwendet werden Di
279. den stellen die numerischen Datentypen eine sinnvolle Option dar kommt es mehr auf eine einfache und schnelle Formatierung an kann ein alphanumerischer Datentyp sinnvoll sein 5 1 1 Alphanumerische Angaben Text Die auf den ersten Blick einfachsten Datentypen sind die alphanumerischen Angaben also die Texte Im einfachsten Fall werden dabei die Codes der ein zelnen Zeichen eines Textes gespeichert Wie ein Datenbanksystem dabei vorgeht l sst sich an Listing 5 2 erkennen Hier wird mithilfe der Funktion ASC der Code der ersten f nf Zeichen gem dem verwendeten Zeichensatz ermittelt und als Zahl dargestellt Das Prinzip besteht also darin einen Zei chensatz festzulegen und die einzelnen Zeichen dann jeweils numerisch als 2 Byte oder 4 Byte Unicode zu codieren SELECT Familienname Listing 5 2 SUBSTR Familienname 1 1 AS Z1 ASCIICSUBSTR Familienname 1 1 Auswahl der ersten f nf AS ASCIIl n Zeichen und deren SUBSTR Familienname 2 1 AS Z2 ASCII CSUBSTR Familienname 2 1 ASCII Codes AS ASCII2 SUBSTR Familienname 3 1 AS Z3 ASCII SUBSTR Familienname 3 1 AS ASCII3 SUBSTR Familienname 4 1 AS Z4 ASCII CSUBSTR Familienname 4 1 AS ASCIIA SUBSTR Familienname 5 1 AS Z5 ASCII SUBSTR Familienname 5 1 AS ASCIIS FROM tbPerson t 153 W kaites 154 Abbildung 5 2 ASCII Codes der einzelnen Zeichen Probleme CHAR vs VARCHAR Datentypen Ausdr cke und Funktionen Familienname 21 Asch Z2 ASCII2 Z3 ASCIIS Z4
280. den SQL Kommandos finden Sie in Abschnitt 8 6 E E u E Internes Schema Optimierung Konzeptionelle Ebene Externe Datenschemata 221 WM karitez 222 Datenbanken modellieren 7 1 3 Der Weg zum Datenbankmodell Den zentralen Punkt f r die Erstellung der Datenbank und letztlich den Ein satz von SQL stellt das logische Modell der konzeptionellen Ebene dar auf das unmittelbar in Form von Tabellen oder mittelbar ber einen VIEW zuge griffen wird Das logische Modell selbst ist das Endergebnis eines Erstel lungsprozesses Wird festgestellt dass f r die Verwaltung der Daten eines bestimmten Pro blembereiches eine Datenbank ben tigt wird beginnt der Planungsprozess der Datenbank der sogenannte Datenbankentwurf Dabei handelt es sich um einen Prozess bei dem festgestellt wird welche Daten von welchen Anwen dern ben tigt werden Der Datenentwurfsprozess ist wiederum Bestandteil eines gr eren Ganzen bei dem neben den Daten auch die ben tigte Funktionalit t ber cksichtigt wird Dieser heute weitgehend objektorientierte Software Entwicklungspro zess beginnt zumeist mit einer Anforderungsanalyse Die eigentliche Anfor derungsanalyse ist dabei bereits im Vorfeld der Datenanalyse anzusiedeln Sie kann mithilfe der UML Unified Modeling Language mit Ereignis Pro zess Ketten EPK oder klassisch in Form von schriftlichen Pflichten Las tenheften erfolgen Danach werden je nach Methode in einem phasenorien tierten Vo
281. denkbar die eine eigene Entit t mit der Art des Mehrwertsteuersatzes voll erm igt keiner als Prim rschl ssel und einem zus tzlichen Attribut mit dem konkreten Prozentsatz erlaubt siehe Abbildung 7 8 Es bleiben dann letztlich als Kandidaten f r Entit ten Kunde Artikel Firma Bestellung E E E E Warengruppe E E Bestellposition E Mehrwertsteuersatz F r das angesprochene Beispiel der B roFix kann die Modellierung der Enti t t Kunde wie in Abbildung 7 6 geschehen Neben der Entit t selbst im Zentrum der Darstellung sind alle Attribute um die Entit t gruppiert Als Pri m rschl ssel ist die Kunden ID durch Unterstreichung markiert Wichtig ist die Wahl dieses Schl ssels H tten bei der B roFix die einzelnen Teilunter nehmen eigene Kundenstammdaten und w rden sie eigene Kundennum mern vergeben so w rde die Kunden ID nur im Zusammenhang mit der Mandanten ID einen Prim rschl ssel ergeben Mandanten ID Rechnungsadresse Postleitzahl Bundesland Ca gt Die Auswahl der Attribute f r die Entit t Kunde ergibt sich hier nicht nur aus der obigen Beschreibung sondern auch aus einer Analyse des inhaltli chen Umfeldes Ein beschreibender Text zumal ein so kurzer Text wie oben kann nie alle notwendigen Attribute beinhalten In der Praxis sind daher stets zus tzliches Expertenwissen und ein gezielter Informationssammlungs prozess notwendig Beispiel B roFi
282. densatz und Kursthemen wenn theoretisch jeder Dozent jeden Kurs halten kann Interpretieren Sie das Ergebnis in der Praxis 4 5 6 1 Tabellen miteinander verbinden JOIN 2 Erweitern Sie die Abfrage aus U4 5 6 1 so dass neben der DID auch der richtige Familienname und Vorname des Dozenten angezeigt werden Da bei werden ein INNER JOIN und ein CROSS JOIN kombiniert 4 5 6 2 4 5 7 JOIN ber mehrere Felder Normalerweise hat jede Tabelle in einer Datenbank nur ein Prim rschl ssel feld Dies ist aber nicht zwingend Eine Tabelle kann auch ber zwei oder mehr Felder verf gen die zusammen ihren Prim rschl ssel bilden In bestimmten F llen ist die Verwendung mehrerer Prim rschl sselfelder durchaus sinnvoll beispielsweise in Warenwirtschaftssystemen oder ERP Systemen die mandantenf hig sein sollen Die Mandantenf higkeit beschreibt die M glichkeit in einer Datenbank die Daten von mehr als einem Unternehmen zu verwenden Dazu wird eine sogenannte Mandantennum mer verwendet die zu allen Tabellen hinzugef gt wird die mandantenf hig sein sollen Der Vorteil ist dass verbundene oder eng kooperierende Unter nehmen die rechtlich selbstst ndig sind ihre Daten in derselben Datenbank f hren k nnen Die Datens tze werden mithilfe der Mandantennummer unterschieden indem jedes Unternehmen seine eigene Mandantennummer erh lt Sollen beispielsweise die Kunden nach den Mandanten getrennt werden wird in einer Tabelle tbK
283. der Artikeltabelle vorhanden ist Erst wenn dies der Fall ist wird die zugeh rige Bestellung eingef gt Da die Tabelle artikel nicht ge ndert werden soll besteht auch kein Grund andere Trans aktionen am Lesen zu hindern Der Eintrag in der Artikeltabelle soll nur nicht w hrend der Eintragung der Bestellung ge ndert oder gel scht werden k nnen START TRANSACTION SELECT FROM artikel WHERE anr 6001 LOCK IN SHARE MODE INSERT INTO bestellung VALUES 1 4919 6 2007 11 22 CURRENT_TIMESTAMP INSERT INTO bestell_position VALUES 1 4919 1 6001 10 CURRENT_TIMESTAMP COMMIT Wir haben bereits gesehen dass sich hnliche Konsistenzpr fungen ber die referenzielle Integrit t sicherstellen lassen Die Datenbank wei um den Zusammenhang und f hrt die entsprechenden Sperren selbstst ndig durch Soll dies nicht erfolgen kann die referenzielle Integrit t also auch ber eine entsprechende Transaktion wie in Listing 13 3 zu sehen sichergestellt wer den Der Vorteil dieser Sperre ist dass w hrend der Transaktion jederzeit andere Transaktionen ebenfalls SHARED READ Sperren errichten k nnen Damit k n nen mehrere Transaktionen parallel sicherstellen dass die mit LOCK IN SHARE MODE abgefragten Daten nicht von anderen Transaktionen ge ndert oder gel scht werden k nnen Nat rlich kann keine Transaktion auf einem sol chen Bereich eine exklusive Sperre zum ndern oder L schen errichten Diese Transaktion muss warten bis
284. der Ein gabe von SQL Anweisungen dient und eine zentrale Rolle spielen wird Die weiteren UTILITIES sollen uns hier nicht interessieren Die einzelnen Bereiche sollen beschrieben werden wenn wir sie nutzen was mit der Installation der Beispieldatenbank kurse beginnt Zum Thema Oracle finden Sie im bri gen in Anhang A eine kurze Beschreibung der Funktionsweise 71 S Kapitel 3 Object Browser Abbildung 3 34 Der Object Browser erlaubt die Kontrolle des Inhaltes 72 Die Beispieldatenbanken 3 5 3 Die Testdatenbanken importieren Oracle bietet eine F lle von M glichkeiten um Daten in die Datenbank zu laden Flexibilit t Performance Zeichensatzprobleme und hnliches bieten hier ein breites Spektrum f r Vergleiche In unserem Rahmen soll nur der einfache Import einer vergleichsweise kleinen Datenmenge im Mittelpunkt stehen wozu einfache Skripte genutzt werden die mit dem mitgelieferten SQLPlus importiert werden Im ersten Schritt soll das Schema f r die Kurs Beispieldatenbank erzeugt werden Dazu ist es ausreichend wenn Sie aus dem CD Verzeichnis Daten banken Oracle kurse das Skript OraKurse bat durch einen Doppelklick star ten Es wird das ORACLE Werkzeug SQLPlus gestartet Haben Sie nicht mas terkey als Passwort verwendet m ssen Sie das Skript kopieren und entsprechend anpassen Danach l uft das Skript automatisch ab und schlie t das Fenster wieder Testen Sie den erfolgreichen Ablauf indem Sie s
285. der Jahre wurden verschiedene Standards f r SQL verabschiedet die entsprechend des jeweiligen Jahres mit SQL86 SQL89 SQL92 SQL99 SQL2003 und SQL2006 bezeichnet werden SQL92 wurde auch als SQL2 und SQL99 als SQL3 bezeichnet Die meisten verf gbaren realen Datenbanken st tzen sich immer noch auf SQL92 und haben die nachfolgenden Standards in unterschiedlichem Umfang in ihrem Dialekt implementiert 2 2 Die Bestandteile Die Gr nde f r den Erfolg von SQL sind neben der Unterst tzung durch namhafte Anbieter und der Standardisierung auch in der Sprache SQL selbst zu suchen SQL bietet eine sehr einfache Syntax die konsequent an der Idee der relationalen Datenbanken orientiert ist SQL Anweisungen sind ver gleichsweise leicht zu schreiben zu lesen oder mit Programmgeneratoren zu erzeugen Gerade der letzte Umstand ist nicht zu vernachl ssigen werden doch sehr viele SQL Anweisungen nicht manuell sondern maschinell erstellt Doch auch maschinell erstellte Anweisungen m ssen unter Umst n den durch Menschen analysiert werden sei es um Fehler zu finden sei es um die Performance der Abfragen zu erh hen oder auch um die Datenbank struktur f r bestimmte SQL Abfragen zu optimieren Die Bestandteile u A u SQL bietet einen kompletten Satz von Anweisungen um mit relationalen SQL Bestandteile Datenbanken umgehen zu k nnen Insbesondere sind hier zu erw hnen m SQL DDL Data Definition Language Die DDL dient der Erstellung n
286. der Teilnehmer an den Kur sen ermittelt Jetzt wird die Betrachtung aber auf den Kurs CE23 einge schr nkt Hier gibt es zwei Varianten E Variante 1 SELECT kb KID COUNTC AS Anzahl Kursteilnehmer FROM tbKursbesuche AS kb GROUP BY kb KID HAVING kb KID CE23 E Variante 2 SELECT kb KID COUNTC AS Anzahl Kursteilnehmer FROM tbKursbesuche AS kb WHERE kb KID CE23 GROUP BY kb KID Das Ergebnis beider Abfragen ist in Abbildung 4 45 zu sehen Normalerweise ist die Variante 2 vorzuziehen KID Anzahl Kursteilnehmer a Nutzen Sie bei gr eren Datenbest nden wann immer m glich die WHERE Klausel statt der HAVING Klausel Die WHERE Klausel reduziert die Datenmenge fr hzeitig Damit sind bei der Gruppierung weniger Sortieroperationen not wendig und die Performance verbessert sich im Allgemeinen deutlich Zusammenfassung Die HAVING Klausel erlaubt die Formulierung von Filterbedingungen f r die durch die GROUP BY Klausel definierten Gruppendatens tze F r jede Gruppe existiert ein Gruppendatensatz dessen mit Aggregatfunktionen berechnete Felder die Anforderungen der HAVInG Klausel erf llen m ssen damit der Gruppendatensatz Bestandteil der Ergebnismenge wird Fehlt die HAVING Klausel werden alle Gruppendatens tze ermittelt Die HAVING Kaus W WM O B Damit haben wir jetzt die zun chst vollst ndige Syntax der SELECT Anwei sung erarbeitet SELECT DISTINCTIALL feldname AS ALIAS
287. dert Die Anzahl der Kurse kann ber eine Z hlung des Prim rschl s selfeldes hier also der KBID erfolgen die eindeutig sein muss und keine NULL Werte enthalten kann Die anderen Funktionen SUM und AVG sind auf das Feld GezahlterBetrag anzuwenden denn schlie lich interessiert dessen Summe und Durchschnitt Insgesamt ergibt sich die SELECT Anweisung in Listing 5 23 SELECT MAX p Familienname AS Familienname MAX p Vorname AS Vorname COUNT kb KBID AS Anzahl Kursbesuche SUM GezahlterBetrag AS Gesamtsumme AVG GezahlterBetrag AS Durchschnitt pro Kurs FROM tbPerson p INNER JOIN tbKursbesuche kb ON p PID kb KTID GROUP BY kb KTID ORDER BY 4 DESC Gruppenorientierte Funktionen Aggregatfunktionen m E 5 Das Ergebnis der Anweisung ist in Abbildung 5 17 zu sehen Es sind wegen des INNER JOIN nur die Personen enthalten die tats chlich einen Kurs belegt haben Familienname Vorname Anzahl Kursbesuche Gesamtsumme Durchschnitt pro Kurs Abbildung alt Ergebnis der Anweisung Karmann Thomas 3 850 293 33333333333 aus Listing 5 23 Schulze Tanja 1 350 350 Ruppert Nicola 1 350 350 Lisewski Bernd 1 350 350 M ller Claudia 2 350 175 Kl tzer Karl 2 330 165 Peredy Helmut 1 300 300 Winter Petra 1 300 300 Sander an 1 260 260 Martens Melanie 2 250 125 Schmidt Karl 1 120 120 Plate Ulrich 1 80 80 Magerkurth Melissa 1 50 50 bungen zur SELECT Anweisung mit GROUP BY Klausel Erstellen Sie f r die folgenden Auf
288. die Stunden Minuten und Sekunden angegeben Um eine welt weite Verarbeitung zu erleichtern kann zus tzlich die Zeitzone angegeben werden Mit dieser Korrektur kann die lokale Zeitangabe auf die Greenwich Mean Time GMT umgerechnet werden Damit k nnen alle Angaben ent sprechend der lokalen Zeitzone gemacht werden F r die deutsche Zeit w re also jeweils eine Angabe wie 01 00 oder 1 00 anzuf gen Inzwischen ist es blich geworden statt von der fr her vertrauten GMT von UTC der UTC Universal Time Coordinate zu sprechen was derselben Zeitzone entspricht Die Zeitangabe 2008 05 17 14 02 04 1 00 w re also eine Angabe nach deutscher Standardzeit und entspr che 2008 05 17 13 02 04 UTC Die Sommerzeit Daylight Saving Time wird ber individuelle Einstellungen ber cksichtigt Es gibt zu dem Datentyp TIMESTAMP noch die Erweiterung TIMESTAMP WITH WITH TIMEZONE TIMEZONE die die Zeitdifferenz zwischen der lokalen Zeit und der UTC ber cksichtigt sodass alle Angaben weltweit vergleichbar werden In diesem Fall wird die Zeit wie oben beschrieben abgespeichert letztlich in UTC Damit sind weltweit Daten unmittelbar vergleichbar Oracle bietet dar ber hinaus noch TIMESTAMP WITH LOCAL TIMEZONE wobei ebenfalls der Unterschied zwischen der lokalen Zeit und der UTC ber cksich tigt wird aber alle Angaben bei einer Abfrage jeweils in die lokale Zeit umgerechnet angezeigt werden Der Zeitstempel TIMESTAMP ist als inte
289. dingung THEN Wert ELSE Wert END Tabelle 5 20 Sonstige Funktionen Listing 5 19 Bedingung in einer SELECT Anweisung MySQL 191 si Kapitel 5 Listing 5 20 Einfache CASE WHEN Bedingung Listing 5 21 CASE WHEN mit Einzelbedingungen Abbildung 5 16 Ergebnis der bedingten 192 Abfrage bungen Datentypen Ausdr cke und Funktionen SELECT p Familienname p Vorname CASE kb Zeugnis WHEN J THEN CONCATC Ja am k Kursende WHEN N THEN Nein END AS Zeugnis FROM tbKursbesuche kb INNER JOIN tbKurs k ON kb KID k KID INNER JOIN tbPerson p ON kb KTID p PID SELECT p Familienname p Vorname CASE WHEN kb Zeugnis J THEN CONCATC Ja am k Kursende WHEN kb Zeugnis N THEN Nein END AS Zeugnis FROM tbKursbesuche kb INNER JOIN tbKurs k ON kb KID k KID INNER JOIN tbPerson p ON kb KTID p PID Sowohl Listing 5 19 als auch Listing 5 20 und Listing 5 21 liefern alle das selbe Ergebnis MySQL wie es in Abbildung 0 16 angegeben ist Familienname Vorname Zeugnis Sander vo Ja am 2007 04 27 Karmann Thomas Nein Karmann Thomas Ja am 2007 04 27 Kl tzer Karl Ja am 2007 04 27 Plate Ulrich Nein Schmidt Karl Nein Karmann Thomas Nein Kl tzer Karl Nein Martens Melanie Nein M ller Claudia Nein Schulze Tanja Nein winter Petra Nein Ruppert Nicola Nein Magerkurth Melissa Nein M ller Claudia Nein Martens Melanie Nein Lisewski Bemd Nein Peredy Helmut Nein Beachten Sie dass O
290. dung 4 42 gezeigten Einstellung die zu einer vollst ndigen Gruppierung aller beteiligten Felder f hrt E Abfrage1 Auswahlabfrage tbKursbes Zeugnis Selbstzahler Zahlweise Rabatt GezahlterBetr 7 Feld KBID Tabelle tbKursbesuche tbKursbesuche Funktion Gruppierung DEREN EEE Sortierung Anzeigen Kriterien MS Access erzeugt daraus die SELECT Anweisung SELECT tbKursbesuche KID tbKursbesuche Zahlweise FROM tbKursbesuche GROUP BY tbKursbesuche KID tbKursbesuche Zahlweise Diese SOQL Anweisung erzeugt folgerichtig zehn Datens tze die den bespro chenen zehn Gruppen entsprechen wie sie in Abbildung 4 38 und Abbil dung 4 39 dargestellt sind Noch ein Hinweis zu der speziellen COUNT C Funktion wie sie im Folgenden abgebildet ist SELECT kb KID Count AS Anzahl Kursteilnehmer FROM tbKursbesuche AS kb GROUP BY kb KID Diese Funktion l sst sich nicht in der gewohnten Weise eingeben Hier muss auf die direkte Eingabe der Funktion in der obersten Zeile FELD zur ckge griffen werden Die Syntax zeigt Abbildung 4 43 In gleicher Weise lassen sich alle Aggregatfunktionen verwenden Beachten Sie die Einstellung Aus druck in der Zeile FUNKTION wenn Sie Aggregatfunktionen in dieser Form direkt eingeben Wird die Aggregatfunktion bereits oben eingegeben darf nicht noch einmal in der Funktionszeile aggregiert werden Dies w rde zu einer doppelten Aggregation f hren was verboten ist Ab
291. dung 5 7 ange geben Datensatzorientierte Funktionen Skalarfunktionen 2 Funktionen Tabellennamen Ausschneiden 3 Kopieren G Einf gen Eigenschaften W hlen Sie jetzt die Option AUFBAUEN um in den Ausdrucks Generator zu kommen siehe Abbildung 5 8 Der Ausdrucks Generator bietet unter FUNK TIONEN EINGEBAUTE FUNKTIONEN alle VBA Funktionen an die zur Verf gung stehen Diese sind in der Oberfl che thematisch geordnet Bei Auswahl einer Funktion wird au erdem unten im Fenster angezeigt wie viele Parameter die Funktion ben tigt und welchen Datentyp diese haben m ssen hier Abs Zahl Ausdrucks Generator Abs Zahl Abbrechen R ckg ngig Hilfe p al gt lt lt Und Oder Nicht wie ol Einf gen CE TEE A Datenfelder AktuellerBenutzer Konvertierung Anzahl Datenbank ArcTan Datum Uhrzeit a Asc Dom nenaggregat Auswerten Fehlerbehandlung Bereich Finanz mathematisc BW Allgemein Cos Inspektion CYErr Mathematisch DatAdd Abfragel Tabellen Abfragen Formulare Berichte amp Funktionen afengebaute Funk lKurse2003 v lt E Abs Zahl Um die Sache jetzt nicht zu einfach zu machen sind diese Funktionen ins Deutsche bersetzt worden w hrend im SQL Fenster die englischen Bezeichnungen einzugeben sind So finden Sie beispielsweise im Ausdrucks Generator die Funktion RUNDEN ab Access200
292. durch den ent sprechenden Feldnamen GezahlterBetrag der Tabelle tbKursbesuche ersetzt Beide Bedingungen m ssen erf llt werden sodass sie durch ein AND mitein ander verbunden werden Benutzer und Programmsichten CREAEVEW MW WM o B Dieser MERGE ist zumeist die performanteste Art einen VIEW zu realisieren da TEMPTABLE der SQL Interpreter eine gemeinsame Optimierung der Abfrage vornehmen kann Die Alternative zu einem MERGE ist die sequenzielle Ausf hrung beider Anweisungen die mit der Angabe ALGORITHM TEMPTABLE veranlasst wird Zun chst wird dabei die SELECT Anweisung des VIEW ausgef hrt und das Ergebnis in einer tempor ren Tabelle TEMPTABLE gespeichert In diesem Fall w rde eine Tabelle mit zwei Spalten und den Datens tzen des Kurses CE23 erzeugt Basierend auf dieser Tabelle wird dann die eigentliche SELECT Anweisung ausgef hrt und das endg ltige Ergebnis erzeugt Die dritte m gliche Angabe f r die Option ALGORITHM ist UNDEFINED Dabei UNDEFINED wird MySQL die Entscheidung dar ber berlassen wie die Ausf hrung erfol gen soll Dies ist zugleich der Standardwert der immer dann genommen wird wenn keine andere Angabe erfolgt In den meisten F llen wird MySQL dann einen MERGE erzeugen Es gibt allerdings auch eine Reihe von F llen in denen dies nicht m glich ist insbesondere immer dann wenn der VIEW die Anzahl der Datens tze ndert beispielsweise durch ein DISTINCT ein UNION siehe hierzu Kapitel 11
293. e Abbildung 4 2 Ergebnis bei Vertau Vorname Familienname schung der beiden Felder Peter Weiss Susanne Bucz Thomas Karmann Karl Kl tzer Karin Weiss Peter Weiss Kathrin Meier Karl Schmidt Claudia M ller Bernd Lisewski Melanie Martens Dieter Schlachter Helmut Peredy Nicola Ruppert Sander J rg Cromberg Tanja Schulze Petra Winter Ulrich Plate Melissa Magerkurth Listing 4 3 Komplette Adresse Platzhalter Listing 4 4 Komplette Tabellenansicht 92 Die Feldnamensliste l sst sich jetzt leicht erweitern Sollen die Postleitzahl und der Wohnort erg nzt werden wird die SOL Anweisung wie folgt erwei tert SELECT Vorname Familienname PLZ Ort FROM tbPerson M chten Sie alle Spalten einer Tabelle anzeigen so erg be dies eine ziemlich lange Liste die au erdem bei eventuellen nderungen der Tabelle wieder zu erg nzen w re Dies ist besonders bei SELECT Anweisungen deren Ergebnis unmittelbar dem Anwender angezeigt werden soll oder die Testzwecken die nen recht umst ndlich Daher gibt es hier die aus Windows gewohnte Kurz form mit als Platzhalter der f r alle Felder steht Sollen also alle Felder der Tabelle tbPerson angezeigt werden k nnen Sie kurz schreiben SELECT FROM tbPerson Sie erhalten das Ergebnis in Abbildung 4 3 Einfache Abran W MW EG B PiD Familienname Vorname PLZ Orn Strasse Geburtsdatum ApPrdung A3 Alle Felder der Tabelle 1 Weiss Peter 30529 Hannover Pal
294. e nderung von Daten in der Datenbank also insbesondere die SQL Befehle INSERT UPDATE und DELETE Je nachdem ob die Daten eines VIEW mit diesen Anweisungen nderbar sind oder nicht spricht man von einem nderbaren updateable oder einem nicht nderba ren non updateable VIEw Nur zur Klarstellung Es geht nicht um die nder barkeit des VIEw sondern um die nderbarkeit der Daten in der Datenbank ber den VIEW also beispielsweise ein UPDATE viewname Ein VIEW der nicht updateable ist wird h ufig auch als Read only VIEw bezeichnet Benutzer und Programmsichten CREATE VIEW Grunds tzlich entstehen immer dann Probleme bei der nderbarkeit von Daten ber einen VIEW wenn sich aus den Datens tzen eines VIEW nicht ein deutig die Datens tze der dem VIEW zugrunde liegenden Tabellen ableiten lassen Schlie lich m ssen die richtigen Datens tze in den Tabellen gefun den werden k nnen um sie ndern oder l schen zu k nnen Sind die Daten s tze nicht eindeutig identifizierbar so kann in einem VIEW kein DELETE oder UPDATE durchgef hrt werden Abh ngig von der Anzahl der dem VIEw zugrunde liegenden Tabellen gibt es verschiedene m gliche Gr nde warum ein VIEW nicht nderbar ist E Der VIEW bezieht sich auf mehrere Tabellen insbesondere auf Tabellen mit einer 1 n Beziehung E Der VIEW enth lt nur Literale und bezieht sich somit auf berhaupt keine Tabelle E Der VIEW bezieht sich auf nur eine Tabelle aber ein
295. e Abfrage erstellen Dazu k nnen Sie im Datenbankfenster entweder die Schaltfl che NEU w hlen oder einen der Assistenten aufrufen Neue Abfrage lentwurfsansicht __UUUUUOU O OUO Auswahlabfrage Assistent Kreuztabellenabfrage Assistent Abfrage Assistent zur Duplikatsuche Abfrage Assistent zur Inkonsistenzsuche Erstellt eine neue Abfrage ohne einen Assistenten zu verwenden Die Assistenten sollen uns hier nicht so sehr interessieren da wir ohnehin mehr am puren SQL interessiert sind Daher sollte der Einstieg im Rahmen dieses Buches stets ber die Schaltfl che NEU mit der Entwurfsansicht erfol gen Sie gelangen zu einem Dialog wie in Abbildung 1 21 W hlen Sie die ENTWURFSANSICHT Sie kommen jetzt in Abbildung 1 22 Tabelle anzeigen Tabellen Abfragen Beide Hinzuf gen tbDozent oo Schlie en tbKurs tbKursbesuche tbKursthema tbPerson P Ney Abbildung 1 21 Auswahl f r die Erstellung einer neuen Abfrage Abbildung 1 22 Auswahl der Datenquellen f r die Abfrage 397 5 Anhang A Anhang Benutzung der Datenbanksysteme Hier w hlen Sie die Datenquelle f r Ihre Abfrage Datenquellen sind zun chst die Tabellen der Datenbank Sie legen also fest aus welcher Tabelle oder aus welchen Tabellen Daten ausgew hlt werden sollen Sie sehen brigens dass Sie Daten nicht nur aus Tabellen sondern auch aus anderen Abfragen gewinnen k nnen Dies sind aber keine origin ren Date
296. e die Sie auch bei Bedarf sp ter noch erg nzen k nnen Sie sollten Ihren Import noch kurz pr fen bevor Sie die weiteren Schritte durchf hren Markieren Sie nacheinander jeweils eine Tabelle und ffnen Sie sie im Datenbankfenster mit Doppelklick oder ber die Schaltfl che FFNEN Pr fen Sie den Inhalt Sie sollten in tbDozent 5 Datens tze in tbKurs 7 Datens tze in tbKursbesuche 18 Datens tze in tbKursthema 11 Datens tze openBase und in tbPerson 20 Datens tze finden Wenn Sie den Inhalt genau berpr fen wollen sollten Sie Ihre Datenbankinhalte mit den im Anhang abge druckten Tabellen vergleichen A 5 openBase A 5 1 SQL Anweisungen eingeben openBase bietet als zweite Datenbank eine grafische Oberfl che mit einer hnlichen Struktur wie MS Access Im linken Bereich des Datenbankfensters befinden sich die Datenbankobjekte Wieder beginnt die Aufz hlung mit den Tabellen die das Kernst ck der Datenbank bilden und der Speicherung der Daten dienen Dann folgen die Abfragen Wird die Schaltfl che ABFRAGEN gew hlt werden im rechten Teil des Datenbankfensters die m glichen Akti onen wie in Abbildung 1 39 wiedergegeben dargestellt Ei Abfrage in der Entwurfsansicht erstellen X Abfrage unter Verwendung des Assistenten erstellen sul Abfrage in SQL Ansicht erstellen Alle drei M glichkeiten f hren im Ergebnis zu einer SOQL Anweisung nur die Wege sind unterschiedlich Die Entwurfsansicht ist eine g
297. e gemischte 94 97 SELECT 89 288 ALL 98 DISTINCT 98 einfache 91 GROUP BY 134 428 HAVING 144 JOIN 115 ORDER BY 103 Sortierung 100 Syntax 147 WHERE 105 142 Selektion 106 Self JOIN 118 SERIALIZABLE 367 SET 205 213 SET DEFAULT 272 SET NULL 272 SET PASSWORD 347 SET TRANSACTION 364 SIGN 176 SIGNED 157 SINGLE 159 Skalarfunktion 168 SMALLINT 151 157 Sommerzeit 161 Sonderzeichen 94 Sortierung 100 252 alphanumerisch 102 NULL 103 Position 103 Test 104 Speicherplatz 153 154 157 Speicherverwaltung 25 Sperre 361 auf Satzebene 362 auf Tabellenebene 362 Sperren 213 Sperrstrategie 362 SQL DCL 21 339 DDL 21 249 Definition 15 Dialekt 13 DML 21 26 Geschichte 19 Grundregeln 28 Grundstruktur 27 SQRT 176 Standardisierung 20 Standardwert siehe DEFAULT START TRANSACTION 358 STDDEV 143 STDDEV_POP 195 STDDEV_SAMP 195 Strich senkrechter 98 Sub Query siehe Unterabfrage Sub SELECT siehe Unterabfrage SUBSTRING 180 SUM 139 143 194 Superuser 47 340 345 SYSTEM 70 347 System mdw 352 T Tabelle 29 mandantenf hige 133 Name 30 97 Sicht auf 285 virtuelle 90 Tabellenerstellungsabfrage 262 Tablespace 379 TEXT 155 TIME 151 162 TIMESTAMP 151 161 167 261 TIMEZONE 161 TINYINT 157 Transaktion 255 358 360 Transaktionsmanager 25 357 Trigger 380 TRIM 180 TRUNCATE 176 217 Tupel siehe Datensatz U UDF 171 Unicode 153 UNION 295 328 330 UNIQUE 99 260 278 UNSIGNED 157 Unterabfrage 202 301 CREATE
298. e Beziehung daher fehlt die Fremdschl sselinformation Demgegen ber ist der DEFAULT Wert dann vorzuziehen wenn ausgedr ckt werden soll dass diese Datens tze ohne Bezug zur Prim rschl sseltabelle in einer Art Container f r Sonstige gesammelt werden sollen Der Standardwert NO ACTION der auch beim kompletten Fehlen einer Angabe NO ACTION verwendet wird bertr gt die Verantwortung f r die referenzielle Integrit t und die Behandlung der Datens tze schlie lich vollkommen dem Anwender beziehungsweise dem Programm das die Datenbank ndert Dies ist immer dann sinnvoll wenn eine solche Behandlung des Problems auch tats chlich erfolgt In diesem Fall behindert die Datenbank die Problembehandlung am wenigsten da keinerlei Automatismen greifen und keinerlei Information ungewollt verloren geht Eine Besonderheit von MS Access ist die M glichkeit die Optionen zur refe Referenzielle Integrit t renziellen Integrit t wiederum ber die Oberfl che bearbeiten zu k nnen inMS Access Dazu wird hier von einer Beziehung ohne referenzielle Integrit t ausgegan gen wie in Abbildung 8 12 dargestellt Jetzt wird die entsprechende Beziehung zun chst mit der Maus markiert Dann kann sie entweder ber die rechte Maustaste oder ber BEZIEHUNGEN BEZIEHUNGEN BEARBEITEN bearbeitet werden Dabei wird ein Fenster wie in Abbildung 8 12 verwendet Im oberen Teil sind die Tabellennamen kunden f r die Mastertabelle und bestellung f r di
299. e Beziehung zwischen den Entit ten Artikel und Warengruppe ist implementiert In der zweiten dieser beiden Zeilen wird das Feld mwst_art erzeugt Mit dem Zusatz REFERENCES wird wieder eine Fremdschl sselbeziehung aufgebaut Das Feld mwst_art wird in Beziehung zu dem entsprechenden Feld in der Tabelle mwst hergestellt Die Beziehung zwischen den Entit ten Artikel und Mehrwertsteuer ist damit ebenfalls implementiert Die bisherige Syntax der Felddefinition erweitert sich mit der M glichkeit Fremdschl sselbeziehungen zu anderen Tabellen aufzubauen somit zu Felddefinition feldname datentyp DEFAULT standardwert NULL NOT NULL UNIQUE PRIMARY KEY REFERENCES tabellenname feldname Wir haben zuvor die Beziehungen zwischen den Entit ten Artikel und Warengruppe sowie Artikel und Mehrwertsteuer erzeugt Die Kennziffer ist als Prim rschl ssel der Entit t Warengruppe modelliert Sie ist bez glich aller Datens tze der Tabelle eindeutig Dieses Feld wird als Fremdschl ssel in die Tabelle artikel bernommen die ber eine Beziehung verbunden werden ber die Gleichsetzung Prim rschl ssel einer Tabelle Fremdschl ssel der anderen Tabelle Tabellen erstellen CREATE TABLE oder konkret warengruppe kennziffer artikel wgknz kann daher durch die Aufnahme des Fremdschl sselfeldes wkgnz mit den passenden Werten in die Tabelle artikel die Beziehung ber SQL in die Datenbank umgesetzt werden Die Angabe derartige
300. e Daten in schnellen Speichermedien zugreifbar sein Die eigentliche physische Speicherung erfolgt zumeist seitenweise also in gr eren Bl cken die vom Ger temanager gelesen und geschrieben werden Manche Datenbanken greifen hierzu ihrerseits auf Dateiverwaltungssysteme wie InnoDB oder andere Systeme zur ck die letztlich die physische Speicherver waltung umsetzen Diese k nnen ber eine eigene Transaktionssteuerung verf gen sodass letztlich die Lese und Schreibbefehle bereits f r das Datei verwaltungssystem erzeugt werden ber SQL haben Sie hier nur ber daten bankspezifische SQL Erweiterungen und auch nur bedingt Einfluss 2 4 Die Struktur von SQL Anweisungen SQL ist eine Programmiersprache und hat daher die blichen syntaktischen Regeln die ausf hrlich in den Standards und Handb chern beschrieben wer den Mit vielen Teilaspekten wollen wir uns in den folgenden Kapiteln besch ftigen Vorab an dieser Stelle aber ein paar wenige Grundregeln SQL Anweisungen stehen immer allein f r sich Jede Anweisung bewirkt entweder die Bereitstellung einer Menge von Datens tzen aus der Datenbank oder die nderung des Datenbankinhaltes 25 W karite 26 Tabelle 2 1 Die Befehle der SQL DML am Beispiel der Tabelle tbPerson Listing 2 1 Personen mit der Postleitzahl 29221 SQL der Standard relationaler Datenbanken Aufeinanderfolgende SQL Anweisungen k nnen normalerweise keine Informationen untereinander a
301. e Datenfelder und alle Tabellen beinhaltet die f r das fertige Ergebnis ben tigt werden In unserem Beispiel sollen der Famili enname der Vorname die Dozenten Identifikation DID sowie der Stunden satz f r jeden Dozenten angegeben werden SELECT p Familienname p Vorname t DID t Stundensatz FROM tbDozent t INNER JOIN tbPerson p ON p PID t PID Das Ergebnis der SELECT Anweisung sind alle Dozenten mit ihrer DID und ihrem Stundensatz ber den INNER JOIN wird zus tzlich aus der Tabelle tbPerson auf den Familiennamen und den Vornamen der Dozenten zugegrif fen siehe Abbildung 9 3 Famiienname Vomame DD Stundensatz WESS nmani Peter 812 17 Schlachter Dieter 815 15 Weiss Karin 821 13 Cromberg J rg 833 14 Bucz Susanne 834 15 Nutzung von Unterabfragen Soweit lassen sich die beiden SELECT Anweisungen einzeln jede f r sich vor bereiten Jetzt werden sie so zusammengebaut dass der erste Schritt als WHERE Klausel in die zweite Anweisung eingesetzt wird Die Ergebnisse der Unterabfrage hier der durchschnittliche Stundensatz werden dabei verwen det um mit den Ergebnissen der Hauptabfrage in Beziehung gesetzt zu wer den Hier werden alle Datens tze dahin gehend berpr ft ob der Stunden satz gr er ist als der in der Unterabfrage in der ersten und einzigen Spalte stehende Wert SELECT p Familienname p Vorname t DID t Stundensatz FROM tbDozent t INNER JOIN tbPerson p ON t PID p PID WHERE t Stundensat
302. e Detailtabelle angegeben In der Mastertabelle sind die Prim rschl sselfelder mid und kid angegeben denen in der Detailtabelle bestellung die gleichnamigen Fremdschl sselfelder ent sprechen Im unteren Fenster ist die Zuordnung der Felder in der Beziehung angegeben Sie sehen in dieser Darstellung gut die paarweise Zuordnung von Prim rschl sselfeld und Fremdschl sselfeld Die Tabellendarstellung veran schaulicht au erdem dass mehrere Felder paarweise in die Beziehung ein bezogen werden k nnen was den jeweiligen Feldlisten in der SOL Anwei sung entspricht 273 5 Kapitel8 Datenbanken erstellen SQL DDL Abbildung 8 12 Beziehung mit referenzieller Integrit t firma anrede bestellung nachname mid bnr kid bestelldatum letzte_aenderunc Beziehungen bearbeiten Tabelle bfrage Verwandte Tabellef bfrage ol bestellung w kunden Abbrechen Verkn pfungstyp N tellen Mit referentieller Integrit t aaa Akkualisierungsweitergabe an verwandte Felder L schweitergabe an verwandte Datens tze Beziehungstyp Undefiniert Im unteren Teil des Fensters kann die referenzielle Integrit t aktiviert wer den Wird die referenzielle Integrit t nicht aktiviert entspricht dies der Angabe SET DEFAULT MS Access erlaubt also das L schen und ndern ohne Kontrolle der Beziehungen und ersetzt die Eintr ge im Fremdschl sselfeld durch einen datentypabh ngigen Standardwert beispielsweise 0 Wi
303. e Funktionen Skalarfunktionen 5 Firebird verfolgt ein etwas anderes Konzept als andere Datenbanken Hier Firebird UDF wird nur ein relativ kleiner Befehlssatz im Standard angeboten Daf r wird die M glichkeit angeboten sogenannte UDF User Defined Functions in einer Programmiersprache zu erstellen und dann einzubinden Derartige Bibliotheken sind verf gbar die Einbindung soll aber den Spezialisten f r Firebird berlassen werden Hier wird nur der Standard verwendet Informa tionen finden Sie im Internet am besten unter IBPhoenix com oder ber eine entsprechende Suche Die Interbase Dokumentation ist auch noch hilfreich Die Access Funktionen k nnen Sie nat rlich in der Hilfe nachschlagen MS Access allerdings kann das etwas un bersichtlich werden wenn Sie nicht wissen wie die Funktion hei t Online finden Sie Hilfe bei Microsoft unter office microsoft com de ch access HA101316761031 aspx F r openBase finden Sie neben der Hilfe ebenfalls im Internet einige Hin openBase weise so beispielsweise unter www hsqldb org doc guide ch09 html zum Thema SQL Syntax und SQL Funktionen Wie immer sind die Informationen Momentaufnahmen der jeweiligen Ver sionen und Releases Jetzt werden einige wichtige Funktionen besprochen 5 6 Datensatzorientierte Funktionen Skalarfunktionen Im Folgenden werden immer zun chst die Funktionen mit ihrer Funktions weise aufgelistet Dann werden die Namen in den einzelnen Systemen ange geb
304. e Konfiguration der Datenbank Bei der Konfiguration haben Sie zun chst die Wahl zwischen der DETAILED CON FIGURATION und der STANDARD CONFIGURATION Den allergr ten Teil der Bei spiele dieses Buches k nnen Sie mit der Standardkonfiguration bearbeiten Gleichwohl gibt es gerade am Ende des Buches im Rahmen der technischen Beschreibungen einige Beispiele f r die bestimmte Datenhaltungssysteme notwendig sind Das und das bessere Verst ndnis der Funktionsweise von MySQL sprechen daher f r die Wahl der detaillierten Konfiguration die dann einige weitere Angaben zu Ihrer Installation erfordert MySQL Server Instance Configuration Wizard MySQL Server Instance Configuration Configure the MySQL Server 5 0 server instance Please select a server type This will influence memory disk and CPU usage Developer Machine E This is a development machine and many other applications will be run on ik MySQL Server should only use a minimal amount of memory Server Machine Several server applications will be running on this machine Choose I this option for web application servers MySQL will have medium memory usage Dedicated MySQL Server Machine This machine is dedicated to run the MySQL Database Server No other servers such as a web or mail server will be run MySQL will utilize up to all available memory va MO M Sie sehen drei typische Konfigurationen f r die verschiedenen Nutzungs Developer Machine m gl
305. e Person Das gesamte Ergebnis ist eine Menge von Datens tzen Die Reihenfolge ist dabei zun chst willk rlich Die Spalten entsprechen den Datenfeldern in der Tabelle F r jeden Datensatz existieren stets die gleichen Datenfelder Sollen nicht alle Informationen ber eine Person ermittelt werden sondern beispielsweise nur der Familienname der Vorname und die Postleitzahl des Wohnortes so l sst sich das Ergebnis auch sehr einfach auf die gew nschten Spalten beschr nken Zus tzlich k nnen die Zeilen eingeschr nkt werden indem z B nur die Datens tze der Personen ermittelt werden deren Postleit zahl 29221 ist Es ergibt sich die SOL Anweisung aus Listing 2 1 SELECT Familienname Vorname Geburtsdatum FROM tbPerson WHERE PLZ 29221 Die Struktur von SQL Anweisungen u A m PID Familienname Vomame PLZ On Strasse Geburtsdatum Abbildung 2 3 Alle Informationen weiss Peter 30529 Hannover Palmstra e 6 07 11 1963 ber Personen 2 Bucz Susanne 30531 Hannover Heinestra e 23 06 04 1976 4 Karmann Thomas 29227 Celle Trift 28 04 08 1954 5 Kl tzer Karl 29221 Celle Bahnhofstra e 2 13 03 1971 6 Weiss Karin 30529 Hannover Palmstra e 6 05 10 1962 7 Weiss Peter 38134 Braunschweig Glanweg 4 02 03 1974 Meier Kathrin 38154 Braunschweig Welfenallee 23 03 05 1981 9 Schmidt Karl 30529 Hannover Lavesallee 32 25 06 1949 10 M ller Claudia 29596 Breitenhees In den Fuhren 12 11 Lisewski Bernd 30890 Barsinghausen Roggenkamp 10
306. e dass ein Bezug zu einer Spalte der berge ordneten Abfrage entsteht wie in Listing 9 11 zu sehen SELECT KID FROM tbKursbesuche t WHERE SELECT COUNTC FROM tbKursbesuche t2 SELECT SUMCt3 Fehltage FROM tbKursbesuche t3 Unterabfragen mit ALL und ANY Es werden in diesem Fall zun chst die Kursbesuche insgesamt gez hlt und danach die Fehltage aller Kursbesuche ermittelt Sind diese identisch erfolgt eine Ausgabe der KID sonst ist der Kurs nicht relevant Weil die Ermittlung der Werte in den Unterabfragen aber in keinem Zusam menhang mit den Werten in der Gesamtabfrage steht erfolgt auch deren Ausgabe der KID unabh ngig von dem Ergebnis der Unterabfragen Der ein zige Zweck der Unterabfragen besteht hier darin zu ermitteln ob die beiden Anzahlen gleich sind nicht aber darin dies in irgendeinen Zusammenhang mit dem Endergebnis zu setzen Der Zweck dieser Abfrage ist hier fragw r dig Es gibt aber auch viele sinnvolle Beispiele derartiger Abfragen die dann aber zumeist mehrere Datens tze und andere Operatoren beinhalten Darauf soll im n chsten Abschnitt eingegangen werden bungen zu Unterabfragen mit Vergleichsoperator Erstellen Sie f r die folgenden Aufgaben jeweils eine SELECT Anweisung 1 Ermitteln Sie den Vornamen und Familiennamen der j ngsten Person aus tbPerson 9 2 1 2 Ermitteln Sie die KID und den durchschnittlichen Rabattsatz aller Kurse deren durchschnittlicher Rabattsatz mindestens so hoch is
307. e die Schaltfl che Run anklicken Das Ergebnis sollte etwa der in Abbildung A 13 dargestellten Tabelle ent sprechen Beachten Sie dass die angezeigte Zeilenanzahl von der in DISPLAY angegebenen Maximalzahl abh ngt Gegebenenfalls m ssen Sie diese erh hen oder bl ttern Abbildung 1 11 Aufruf der SQL Eingabeoberfl che Abbildung 1 12 SQL Anweisung in Oracle 391 Anhang A Anhang Benutzung der Datenbanksysteme Abbildung A 13 Ergebnis der SQL Results Explain Describe Saved SQL History Anweisung FAMILIENNAME VORNAME Weiss Peter Bucz Susanne Karmann Thomas Kloetzer Karl Weiss Karin Weiss Peter Meier Kathrin Schmidt Karl Mueller Claudia Lisewski Bernd Peredy Helmut Schlachter Dieter Martens Melanie Ruppert Nicola Sander Cromberg Joerg Schulze Tanja Magerkurth Melissa Winter Petra Plate Ulrich 20 rows returned in 0 00 seconds Sie k nnen einmal eingegebene SQL Anweisungen speichern Verwenden Sie dazu die Schaltfl che SAVE Damit speichern Sie die eingegebene SQL Anweisung ohne Daten Oracle fragt Sie nach einem Namen und einer Beschreibung also nach Metadaten zu der erstellten Anweisung siehe Abbildung A 14 Geben Sie eine Information ein die Ihnen sp ter hilft die Anweisung wiederzufinden Im Fall der Buchbeispiele kann dies eine inhalt liche Angabe wie im Beispiel oder einfach auch die Seitennummer sein Abbildung A 14 Save Sal Metadaten zu einer SQL Anweisung N
308. e hinzunehmen Dies ist besonders w hrend der Testphase sinnvoll wenn Sie pr fen wollen ob Sie wirklich die gew nschten Daten s tze erhalten F r die eigentliche L schabfrage ben tigen Sie nur die Felder die Teil der WHERE Klausel werden sollen Sie k nnen jetzt einfach ber den Men punkt ABFRAGE L SCHABFRAGE auf eine L schabfrage umschalten MS Access generiert dann daraus eine DELETE Anweisung DELETE tbKursbesuche KID FROM tbKursbesuche WHERE tbKursbesuche KID CE24 Sie sehen dass MS Access die ausgew hlten Felder zus tzlich in die DELETE Anweisung aufnimmt Das ist zwar nicht notwendig und eigentlich auch nicht vorgesehen funktioniert aber Wenn Sie die Abfrage dann ausf hren 217 W kaites 218 bungen Datenbankinhalte ndern INSERT UPDATE DELETE werden die f nf Datens tze die wir bereits mit der Auswahlabfrage ermittelt hatten nach einer Sicherheitsabfrage tats chlich gel scht Die MS Access L schabfrage ist also die grafische Umsetzung der DELETE Anweisung 6 3 4 bungen zur DELETE Anweisung Erstellen Sie f r die folgenden Aufgaben jeweils eine DELETE Anweisung Hinweis Nutzen Sie in der Datenbank gegebenenfalls eine Kopie der Tabellen damit Sie die urspr nglichen Tabellen nicht zerst ren In MS Access k nnen Sie die Tabellen daf r im Datenbankfenster kopieren in den anderen Syste men k nnen Sie die urspr nglichen Tabellen neu laden siehe Kapitel 3 1 L schen S
309. ed pipes are allowed Port Number Please set the server SQL mode Enable Strict Mode This option Forces the server to behave more like a traditional database server It is recommended to enable this option Die Option INCLUDE BIN DIRECTORY IN WINDOWS PATH ist dann von Vorteil wenn Sie die Kommandozeilenwerkzeuge von MySQL nutzen wollen Fens ter EINGABEAUFFORDERUNG In diesem Fall macht es Sinn dass das BIN Ver zeichnis im Pfad liegt weil Sie dann den Pfad beim Aufruf der einzelnen Kommandozeilenwerkzeuge nicht immer neu eingeben m ssen Nach der Definition des Servernamens und des Pfades sind alle wesentlichen Superuser root Parameter f r MySQL festgelegt Damit Sie sich gleich erstmalig bei MySQL anmelden k nnen muss in der Datenbank noch mindestens ein Benutzer konto eingerichtet werden also ein Benutzer mit dessen Namen Sie sich bei MySQL identifizieren k nnen Wie jedes Datenbankmanagementsystem hat auch MySQL mindestens einen sogenannten Superuser Er hei t hier root Sie m ssen jetzt das Passwort festlegen mit dem sich root anmelden kann In diesem Buch wird als Passwort f r den Superuser immer masterkey ver wendet Sie k nnen nat rlich ein anderes Passwort verwenden Ersetzen Sie dann einfach an den entsprechenden Stellen der Listings und Skripte mas terkey durch das entsprechende Passwort Tragen Sie ein Passwort ein und best tigen Sie es siehe Abbildung 3 9 Mer ken Sie sich das Passwort oder
310. edene Auswahlm glichkeiten im Sinne eines entweder oder Wird kein Wert angegeben also SELECT vorname familienname FROM tbPerson geschrieben ist das gleichbedeutend mit der Angabe des ALL ALL ist der Standard oder Default Wert SELECT ALL vorname familienname FROM tbPerson Dabei kann es vorkommen dass die Ergebnismenge mehrere identische Datens tze enth lt also Datens tze bei denen alle Felder den gleichen Wert aufweisen In unserem Beispiel w re das bei dem Herrn Peter Wei der Fall siehe Abbildung 4 1 Sollen diese Duplikate unterdr ckt werden kann dies mit der Angabe DISTINCT geschehen Einfache Abragen W WM GE B SELECT DISTINCT Listing 4 10 vorname familienname Elimination von FROM tbPerson Duplikaten mit DISTINCT Hier wird die Ergebnismenge vor der Ausgabe auf Duplikate gepr ft und diese werden eliminiert E Oracle verwendet UNIQUE synonym zu DISTINCT E Einige Datenbankmanagementsysteme erlauben es das AS vor dem Alias wegzulassen also SELECT Familienname Namestatt SELECT Familienname AS Name zu schreiben Diese Schreibweise wird hier nicht verwendet da sie E weder von allen Systemen unterst tzt wird E noch der bersichtlichkeit dient E noch Einheitlichkeit bez glich Alias f r Felder und Alias f r Tabellen exis tiert E openBase bietet sowohl f r ALIAS als auch f r DISTINCT eine Unterst t zung in der Entwurfsansicht siehe Anhang A 5 Zusammenfassung Sie hab
311. edingt notwendig eingeschr nkt werden Dies wird durch die Sperrstra tegie bestimmt Sperrstrategie Bei der Sperrstrategie wird zun chst nach Sperren auf Satzebene und Sper ren von gr eren Einheiten zumeist ganzen Tabellen oder Teilen beispiels weise Seiten im Sinne der physischen Datenspeicherung unterschieden Sperren auf Satzebene blockieren nur einen kleinen Bereich da nur die von nderungen unmittelbar betroffenen Datens tze gesperrt werden Anderer seits entsteht ein erheblicher Verwaltungsaufwand und gerade SELECT Anweisungen die gr ere Bereiche einer Tabelle durchsuchen m ssen k n nen trotzdem behindert werden Generell ist diese Strategie vorteilhaft wenn verglichen mit den SELECT Abfragen sehr viele nderungen an einer Daten bank passieren da sich verschiedene INSERT UPDATE und DELETE Anwei sungen die auf Satzebene ablaufen vergleichsweise wenig behindern Die entgegengesetzte Strategie Sperren auf Tabellenebene beruht darauf dass bereits die nderung eines Datensatzes zum Sperren der gesamten Tabelle f hrt Dies scheint einerseits bertrieben erfordert aber andererseits wenig Verwaltungsaufwand Werden Tabellen nur selten ge ndert wie bei spielsweise bei den meisten Internetanwendungen ist dies eine sehr effek tive Vorgehensweise Unterschiedliche Typen von Sperren Eine weitere M glichkeit die Behinderungen anderer Anwender einzu schr nken besteht darin unterschiedliche Sperrty
312. edlich realisiert sodass eine allge meine Beschreibung hier den Rahmen sprengen w rde Die entsprechenden Mechanismen sind den Handb chern der Datenbanksysteme zu entnehmen Das logische Schema der konzeptionellen Ebene beinhaltet die Sicht auf die Tabellen Felder und Schl ssel also im Wesentlichen die bisher im Zusam menhang mit der SQOL Syntax betrachteten Elemente Es stellt die wesentli che Basis f r den Zugriff mit SQL auf die Datenbank dar Jeder SELECT Befehl jedes INSERT UPDATE DELETE und alle weiteren hier bisher vorgestell ten Begriffe greifen im Wesentlichen auf diese Strukturen zur ck Jeder professionelle Datenbankanwender wird allerdings nicht unmittelbar auf Tabellen zugreifen wie wir dies bisher getan haben Vielmehr wird er einen indirekten Zugriff auf die Datenbank bevorzugen bei dem sogenannte VIEWs verwendet werden siehe hierzu Kapitel 8 die das externe Schema bilden Ein VIEW stellte dabei eine Art virtuelle Tabelle dar Aus Sicht einer SELECT Anweisung verh lt sich ein VIEw grunds tzlich wie eine Tabelle es kann also normal mit einem SELECT auf ein VIEW zugegriffen werden SELECT FROM viewname WHERE Seine Daten erh lt der VIEW allerdings nicht direkt aus einer Tabelle sondern er greift seinerseits durch einen eigenen SELECT Befehl auf Tabellen oder andere VIEWs zu um die so gewonnenen Daten dann selbst wieder wie eine Tabelle pr sentieren zu k nnen Die genaue Beschreibung der entsprechen
313. ehen die das Problem verursacht haben Analysieren Sie sie insbeson dere im Hinblick auf Benutzer Passwort und eventuell Verzeichnisse und versuchen Sie es erneut Wahrscheinlich haben Sie ein falsches Verzeichnis oder ein falsches Passwort verwendet Neben der Erzeugung der Struktur sind durch den Aufruf des Skriptes auch die eigentlichen Daten importiert worden Dazu dienen die weiteren Zeilen in OraKurse bat die einen Aufruf und eine Ausf hrung der SQL Anweisun gen in den Dateien person sql kursthema sql dozent sql kurse sql und kurs besuche sql bewirken Den Erfolg k nnen Sie wieder im Objekt Browser berpr fen Nach Auswahl einer Tabelle im linken Teil des Fensters siehe Abbildung 3 36 k nnen Sie rechts zwischen verschiedenen Darstellungen w hlen Die Basisdarstellung TABLE die die Struktur der Tabelle zeigt kennen Sie bereits Die zweite Dar stellung DATA unmittelbar daneben gibt die in die Tabelle geladenen Daten wieder Die weiteren Darstellungen geben Strukturen an die erst sp ter besprochen werden Interessant ist noch die letzte Darstellung SQL die die SQL Anweisung wiedergibt mit der die Tabelle erzeugt wurde Sie k nnen dies jeweils mit der Angabe in der Datei CreateKurse sql vergleichen die wir zum Aufbau der Struktur verwendet haben Abbildung 3 35 Tabellen des Schemas kurse Fehlerfall Datenimport 73 W kaites 74 Abbildung 3 36 Tabelle Person Die Beispieldatenbanken Tables J TBPE
314. ei letzten Bedingungen Dadurch steht das OR zwischen drei jeweils mit AND verbundenen Bedingungen Bei der Auswertung des Gesamtausdrucks kann durch die Klammerung die Reihen folge der Auswertung f r den Leser der SQL Anweisung transparent gemacht werden Grunds tzlich ist die Reihenfolge der Auswertung durch eine Gewichtung der Operatoren festgelegt und w re damit eindeutig Da das AND st rker bindet als das OR w ren diese Klammern hier nicht unbedingt erforderlich gewesen die Anweisung w rde ohne sie genauso funktionieren Zur besseren bersicht und Sicherheit ist es aber sinnvoll in der gegebenen Weise zu klammern F r die Benutzer der MS Access Oberfl che sowie der openBase Oberfl che gibt es f r die Eingabe der AND und OR Verkn pfungen neben der M glich keit diese direkt einzugeben die Besonderheit dies durch geschickte Vertei lung der Zeilen f r die Auswertungskriterien zu erreichen Feld Tabelle GezahlterBetrag tbKursbesuche _ tbKursbesuche tbKursbesuche _ tbKursbesuche TtbKursbesuche KTID tbKursbesuche Sortierung Anzeigen C m C m m Kriterien CE23 In Bar Gutschein Nicht Zwischen 250 Und 350 oder CE23 Gutschein Die Eingabe der Bedingungen f r die WHERE Klausel erfolgt in MS Access und hnlich in openBase ber die Zeile KRITERIEN und die folgenden Zeilen In die Spalte des jeweiligen Feldes wird dabei die Bedingung unmittelb
315. eil der Prim rschl ssel jeden Datensatz einer Tabelle eindeutig identifi ziert kann f r jeden Wert des Prim rschl ssels stets nur ein Datensatz in der Prim rschl sseltabelle existieren Demgegen ber kann dieser Wert in meh reren Datens tzen der Fremdschl sseltabelle auftreten da deren Datens tze nicht ber den Fremdschl ssel identifiziert werden Es handelt sich also im Normalfall um eine 1 n Beziehung Einem Datensatz in der Prim rschl ssel tabelle k nnen mehrere Datens tze in der Fremdschl sseltabelle ent sprechen Wohlgemerkt k nnen Es kann zu einem Datensatz in der Prim rschl sseltabelle auch kein oder nur ein Datensatz in der Fremd Integrit tsbedingung schl sseltabelle vorhanden sein In Abbildung 8 11 sehen Sie zwei Bestellun gen der Ewald Kuhn KG Beziehungen k nnen bei der Bearbeitung von Datenbanken zu den bekann ten Problemen von Anomalien f hren So w rde das L schen des Datensat zes f r die Ewald Kuhn KG in der Tabelle kunden in Abbildung 8 11 zu Pro blemen mit den Datens tzen in der Tabelle bestellung f hren Bestellungen ohne einen zugeh rigen Kunden sind nicht sinnvoll und m ssten eigentlich entfernt werden Andererseits kann ihre vollst ndige L schung aber auch zu einem unerw nschten Informationsverlust f hren Die Entscheidung wie in einem solchen Fall vorzugehen ist kann nicht das Datenbankmanagement system treffen Diese Entscheidung muss vielmehr von dem die L schung
316. eilgenommen haben Die Personen sollen nach Familienname und Vor name alphabetisch sortiert werden Die PID soll f r jede Person angege ben werden F r die Kursteilnehmer sollen die KID und die Zahlweise angegeben werden Es sollen auch alle Personen aufgelistet werden die zurzeit keine Kursteilnehmer sind 4 5 5 2 3 Ermitteln Sie f r alle Personen ob und an welchen Kursen KID reicht sie teilnehmen oder ob sie als Dozent t tig sind Die PID soll mit angezeigt werden F r die Kursteilnehmer sollen die KID und die Zahlweise ange geben werden F r die Dozenten sollen die DID und die Qualifikation an gezeigt werden Es sollen auch alle Personen aufgelistet werden die zurzeit weder Kursteilnehmer noch Dozent sind 4 5 5 3 4 5 6 CROSS JOIN Ein JOIN stellt grunds tzlich die Verbindung zweier Tabellen dar Wir haben jetzt verschiedene Formen von Bedingungen gesehen mit denen festgelegt wird welche Datens tze der beiden Tabellen miteinander zu verbinden sind Der INNER JOIN erforderte zumeist die Gleichheit zumindest aber die Ver Tabellen miteinander verbinden JOIN E 4 m gleichbarkeit eines oder mehrerer Felder Der OUTER JOIN akzeptiert auch das Fehlen eines passenden Datensatzes auf einer oder beiden Seiten Was passiert aber wenn zwei Tabellen miteinander verbunden werden ohne Kartesisches Produkt berhaupt irgendeine Bedingung f r die Kombination zweier Datens tze anzugeben Da ist der SQL Interpreter rigoros
317. einzurichten Mit der Angabe CREATE USER meier PASSWORD hase ADMIN l sst sich ein Benutzer meier einrichten Die Administratorrechte k nnen bei der Erstellung des Benutzers direkt mit der Option ADMIN eingerichtet werden was hier aber gar nicht notwendig ist F r einen einmal erzeugten Benutzer kann das Passwort jederzeit ge ndert werden ALTER USER meier SET PASSWORD loeffel Damit ist ein Benutzer erzeugt Jetzt k nnen auch Rollen in hnlicher Weise generiert werden Dazu gen gt ein CREATE ROLE vertrieb Damit ist die Rolle vertrieb erzeugt Die Zuordnung von Benutzern zu Rol len erfolgt wie in Firebird mit einer besonderen Form der GRANT Anweisung GRANT vertrieb TO meier Diese SQL Anweisung f hrt dazu dass dem Benutzer meier die Rolle ver trieb zugeordnet wird Dann k nnen der Rolle die ben tigten Privilegien zugeordnet werden beispielsweise das Recht ein SELECT auf der Tabelle tbPerson durchzuf hren GRANT SELECT ON tbPerson TO vertrieb Damit m sste auch der Benutzer meier eine SELECT Anweisung auf der Tabelle tbPerson ausf hren k nnen Der Test ist einfach Im laufenden Betrieb kann mit CONNECT USER meier PASSWORD loeffel die Anmeldung mit einem neuen Benutzer erfolgen Die Nutzung der Anf h rungsstriche f r das Passwort ist wegen der Problematik mit der Gro Kleinschreibung ratsam Testen Sie es Melden Sie sich an und f hren Sie im Abfragefenster den SELECT aus Versuchen Sie auc
318. eiratet mit 0 1 PERSON2 Eine PERSON1 kann mit maximal einer PERSON2 verheiratet sein muss es aber nicht und umgekehrt LIEFERANT 1 1 liefert 0 n ARTIKEL Lieferant i Artikel Ein Lieferant liefert mindestens keinen Artikel und h chstens viele Artikel Dies macht Sinn wenn wir auch m gliche Lieferanten mit in die Datenbank aufnehmen von denen wir noch keine Ware bezogen haben Die 0 bedeu tet dass es sp ter Datens tze in der Lieferantentabelle geben kann die kei nen passenden Satz in der Artikeltabelle besitzen In bestimmten F llen wird dann ein OUTER JOIN notwendig um beispielsweise festzustellen welche Lie feranten im Moment noch keine Artikel liefern Umgekehrt bedeuten die Kardinalit ten in obigem Beispiel dass ein Artikel von mindestens einem und h chstens einem Lieferanten geliefert wird Wir haben also f r alle Artikel Lieferanten und beziehen die Ware immer nur von einem bestimmten Lieferanten Sie haben sich vielleicht etwas ber die Zuordnung der Kardinalit ten gewundert Man geht immer von einer Entit t aus geht ber die Beziehung und liest dann an dem gegen berliegenden Eintrag Minimum Maximum ab wie viele Auspr gungen der anderen Entit t zu einer Auspr gung unserer Das Entity Relationship Modell ERM Ausgangsentit t kombiniert werden k nnen Bei der Betrachtung aus Sicht einer Entit t wird immer genau eine Auspr gung dieser Entit t betrachtet Die Zuordnungsm glichkeiten
319. eise im SQL Standard noch eine Autorisierung vorgesehen oder die Definition mehrere Schemata in einer Anweisung In der Praxis wird allerdings zumeist nur ein Schema mit einer Anweisung erzeugt und die Definition der Tabellen und anderer Struk turen erfolgt mit getrennten SQL Anweisungen 8 1 1 MySQL Sie haben bereits in Kapitel 3 gesehen wie ein Datenbankschema von der Kommandooberfl che aus angelegt wird Jetzt wollen wir den offiziellen Weg mit SQL gehen Starten Sie dazu Ihren MySQL Query Browser Melden Sie sich mit root und masterkey an Sie ben tigen kein Standardschema Dieses wollen wir neu anlegen Nach der Anmeldung geben Sie als SQL Anweisung CREATE DATABASE artikel an Statt des Schl sselwortes DATABASE kann in MySQL synonym wie bereits erw hnt auch das Schl sselwort SCHEMA verwendet werden Testen Sie es mit CREATE SCHEMA artikel2 Um den Erfolg der SQL Anweisungen zu sehen m ssen Sie in der Oberfl che noch einen Refresh ausf hren Klicken Sie dazu mit der rechten Maustaste in das SCHEMATA Fenster auf der rechten Seite und w hlen Sie die Option AKTUALISIEREN Sie sollten in etwa die Darstellung wie in Abbildung 8 1 erhalten Schemata Bookmarks History a artikel artikel b B tiii Das Datenbankschema erstellen CREATE SCHEMA MW WM A B Ein Schema beinhaltet alle zu einem bestimmten Thema geh renden Zeichensatz eines Informationen Man geht daher davon aus
320. eisten Daten bankmanagementsysteme eine eigene SQL Anweisung zur Erstellung von Indizes entwickelt haben Diese bereits im anf nglichen Beispiel verwendete SQL Anweisung CREATE INDEX besitzt eine gro e Bedeutung CREATE INDEX indername ON tabellenname feldname Pr fixl nge CREATE INDEX feldname Pr fixl nge Die Syntax entspricht im Wesentlichen der Syntax der ALTER TABLE Anwei sung und die meisten Datenbankmanagementsysteme so auch MySQL bil den die CREATE INDEX Anweisung intern auf einer ALTER TABLE Anweisung ab und f hren diese aus 371 E Karite 14 Listing 14 1 Abfrage mit Nutzung eines Index Tabelle 14 1 Zugriffszeiten Beispiel Listing 14 2 Beispielabfrage f r die Indexverwendung Listing 14 3 Drei verschiedene Indizes f r die Tabelle tbPerson 372 Mit SQL Datenbanken betreiben und optimieren Generell ist es ratsam den Index mit einer ALTER TABLE oder CREATE INDEX Anweisung zu erstellen Hier werden Sie gezwungen einen Namen f r den Index zu vergeben der f r die sp tere Analyse oder das L schen des Index hilfreich ist Kommen wir auf das obige Beispiel zur ck CREATE INDEX name ON tbPerson Familienname SELECT FROM tbPerson p WHERE p Familienname Weiss Im Listing 14 1 werden zwei SQL Anweisungen verwendet Die SELECT Anweisung sollte theoretisch nach der Einrichtung eines Index schneller ablaufen Die tats chlichen Ausf hrungszeiten h ngen nat rlich vo
321. el kunden k ORDER BY 1 Datenbankschemata Mit der UNION Anweisung werden hier die Kunden und Personennamen aus zwei vollkommen unterschiedlichen Datenbankschemata zusammengef hrt Daher werden die beiden Tabellen auch mit den Schemanamen kurse bezie hungsweise artikel qualifiziert Das funktioniert nur wenn Sie mit einem Benutzer angemeldet sind der die Berechtigungen f r beide Schemata besitzt In MySQL ist das der Standardbenutzer f r kurse in Oracle SYSTEM Die anderen Systeme erlauben in der hier verwendeten Oberfl che jeweils nur den Zugriff auf ein Schema um das Beispiel nachzustellen m ssten Sie also beispielsweise jeweils die Tabelle kunden noch zus tzlich in das Schema kurse importieren siehe Kapitel 3 und Anhang A Beispielhaft ist hier nicht die Spalte geburtsdatum aus der Artikeldatenbank Fehlende Spalten verwendet worden was inhaltlich sinnvoll gewesen w re Die Spalte ist mit CURRENT_DATE belegt worden um zu zeigen wie man mit einer Spalte umge hen w rde die in einer der beteiligten SELECT Anweisungen fehlt wenn man gern das entsprechende Feld aus der anderen SELECT Anweisung h tte Grunds tzlich besteht immer die M glichkeit fehlende Spalten durch ent sprechende Literale oder Funktionen in einer SELECT Anweisung zu erg n zen So lassen sich L cken in der Struktur ausgleichen Auch ein Casting siehe Kapitel 5 um den Datentyp in einer SELECT Anweisung an die andere anzupassen kann hilfreich
322. el mit Integrit tsbedingungen 276 Datenbanken erstellen SQL DDL Der Aufbau der CHECK Bedingung entspricht im Wesentlichen dem aus der WHERE Klausel und der HAVING Klausel der SELECT Anweisung bekannten Konstrukt Es k nnen f r die Formulierung der Bedingungen alle Literale sowie die Feldnamen der Tabelle verwendet werden Diese k nnen mit den ebenfalls aus der WHERE Klausel bekannten Operatoren wie lt gt LIKE und anderen zu Bedingungen verkn pft werden Die Bedingungen lassen sich wiederum mit AND und OR zu komplexen Ausdr cken kombinieren CHECK Bedingung eines Feldes Die CHECK Bedingung kann auch direkt an eine Felddefinition angeh ngt wer den feldname datentyp CHECK bedingung Obwohl beides solange nur ein Feld betroffen ist prinzipiell gleichwertig ist macht es die Analyse einfacher wenn Bedingungen die sich nur auf ein Feld beziehen direkt an die Definition dieses Feldes angeh ngt werden w hrend bergreifende Bedingungen als eigene Integrit tsbedingungen an das Ende der CREATE TABLE Anweisung angef gt werden Die erweiterte Definition f r die Erzeugung der Artikeltabelle zeigt beispiel haft wie die CHECK Option sinnvoll genutzt werden kann CREATE TABLE artikel anr int NOT NULL PRIMARY KEY bezeichnung VARCHAR 255 NOT NULL gebinde FLOAT einheit VARCHAR 30 wgknz INT DEFAULT O NOT NULL REFERENCES warengruppe kennziffer ON DELETE CASCADE ON UPDATE CASCADE einstandspreis DECIM
323. eldatenbank aufbauen 58 3 4 MS Access 65 3 4 1 Gr nde f r die Nutzung 65 3 4 2 Eine Beispieldatenbank aufbauen 66 35 Oracle area eier 69 3 5 1 Gr nde f r die Nutzung 69 3 5 2 Oracle installieren 69 3 5 3 Die Testdatenbanken importieren 72 3 6 Firebird ie 74 3 7 OpenOffice orgBase 2222c2cseenen 82 E Inhaltsverzeichnis Kapitel 4 Kapitel 5 Kapitel 6 Mit SQL Daten abfragen SELECT 4 1 SELECT die Syntax 222ecececnesecn 4 2 Einfache Abfragen 222c2ecscneenen 4 3 Daten sortieren mit der ORDER BY Klausel 4 4 Die Daten mit der WHERE Klausel ausw hlen 4 5 Tabellen miteinander verbinden JOIN 4 5 1 Der Klassiker INNER JOIN 4 5 2 JOIN ber mehrere Tabellen 4 5 3 Varianten des INNER JOIN 4 5 4 Non Equi JOIN 222220 4 5 5 OUTER JOIN 2 22c 22 4 5 6 CROSS JOIN 22222222cc cc 4 5 7 JOIN ber mehrere Felder 4 6 Die GROUP BY Klausel 4 7 Die HAVING Klausel Datentypen Ausdr cke und Funktionen 51 Datentypen sen an 5 1 1 Alphanumerische Angaben Text 5 1 2 Ganze Zahlen 222 2220 amp 5 1 3 Gleitkommazahlen 5 1 4 Datum Uhrzeit 2222cccccaen 5 1 5 BITs BLOBs und andere Datentypen 5 2 N
324. elle kombiniert was 1 000 Datens tze ergibt Diese 1 000 Datens tze werden dann mit den zehn Datens tzen der Stra en tabelle kombiniert woraus immerhin 10 000 Datens tze resultieren Mit der neuen CROSS JOIN Syntax lautet die SELECT Anweisung entspre chend SELECT CJVorname Vorname CJFami lienname Familienname CJOrt Ort CJStrasse Strasse FROM CJFamilienname CROSS JOIN CJOrt CROSS JOIN CJStrasse CROSS JOIN CJVorname Der CROSS JOIN ist in openBase und MS Access nicht definiert und daher nur in der alten Syntax einsetzbar Mit einer CREATE Anweisung die das SELECT als Unterabfrage verwendet siehe Kapitel 10 kann daraus auch schnell eine neue Tabelle erzeugt wer den brigens bevor Sie dies als MS Access Nutzer probieren oder gar die Anzahl noch einmal mit 10 multiplizieren wollen sollten Sie dringend eine Sicherheitskopie Ihrer Datenbank anlegen wenn Sie noch Freude an der Datenbank haben wollen CREATE TABLE CJAdresse SELECT CJVorname Vorname CJFamilienname Familienname CJOrt Ort CJStrasse Strasse FROM CJFamilienname CJOrt CJStrasse CJVorname J Das Ergebnis ist hier eine neue Tabelle mit 10 000 Datens tzen die alle m g lichen Kombinationen von Vorname Familienname Ort und Stra e beinhal ten bungen zur SELECT Anweisung mit einem CROSS JOIN Erstellen Sie f r die folgenden Aufgaben jeweils eine SELECT Anweisung 1 Ermitteln Sie alle m glichen Kombinationen von Dozenten mit DID und Stun
325. elle entsprechend ge ndert Die Datens tze pas sen somit wieder zusammen Dominoeffekt Der Datensatz in der Prim rschl sseltabelle wird gel scht Zus tzlich wer den die Datens tze mit dem entsprechenden Fremdschl s sel in der Fremdschl sselta belle ebenfalls gel scht Anomalien Tabelle 8 1 Aktionen bei der Definition von Fremdschl sseln 271 Datenbanken erstellen SQL DDL W kaites Tabelle 8 1 Forts Aktionen bei der B Aktion DELETE UPDATE von Fremdschl sseln SET NULL Der Datensatz in der Prim r Der Datensatz in der Prim r schl sseltabelle wird gel scht schl sseltabelle wird ge ndert In den dazugeh rigen Daten In den dazugeh rigen Datens t s tzen der Fremdschl sselta zen der Fremdschl sseltabelle belle werden die werden die Fremdschl ssel Fremdschl sselwerte auf NULL werte auf NULL gesetzt sofern gesetzt sofern erlaubt erlaubt SET Der Datensatz in der Prim r Der Datensatz in der Prim r DEFAULT schl sseltabelle wird gel scht schl sseltabelle wird ge ndert In den dazugeh rigen Daten In den dazugeh rigen Datens t s tzen der Fremdschl sselta zen der Fremdschl sseltabelle belle werden die werden die Fremdschl ssel Fremdschl sselwerte auf den werte auf den Standardwert Standardwert gesetzt gesetzt In obigem Beispiel w rde jetzt das ndern des Prim rschl ssels des Daten satzes mit mid 1 bnr 4711 und kid 2 al
326. ellen kombinieren Eine zentrale Bedeutung besitzt der VIEW auch um die Informationen aus mehreren Tabellen zusammenzufassen und dem SQL Anwender als eine Tabelle zu pr sentieren Dabei k nnen aus zwei oder mehr Tabellen die gew nschten Spalten und Zeilen gew hlt werden F r den Anwender hat dies den Vorteil dass er sich keine Gedanken ber die Struktur der Daten bank machen muss also dar ber welche Information in welcher Tabelle steht Die Fremdschl sselbeziehungen verschiedene Arten des JOIN und die richtige Kombination entsprechender Anweisungen m ssen nicht immer wieder neu konzipiert werden Die Entwicklung erfolgt einmalig und anschlie end kann auf den VIEW statt auf die einzelnen Tabellen zugegriffen werden Nat rlich muss die Datenbank wissen wie die Daten aus den verschiede nen Tabellen kombiniert werden sollen Daher muss in dem VIEW ber ent sprechende Fremdschl ssel also einen JOIN beispielsweise mit WHERE Tabelle1 Schl ssel Tabelle2 Fremdschl ssel angegeben werden wie die Zeilen der Tabellen kombiniert werden sollen Sie erinnern sich das ist die alte SQL Syntax Nat rlich k nnen Sie auch mit dem neuen INNER JOIN OUTER JOIN oder einem NATURAL JOIN arbeiten Abbildung 8 16 In dem VIEW sind nur noch die angegrauten Datens tze sichtbar 289 5 Kapitel 8 Abbildung 8 17 Kombination zweier Tabellen in einem VIEW Beispiel VIEW Tabellenkombination Listing 8 14 V
327. en die nur Kurse mit Geb hren von h chstens 200 ha ben 10 4 1 2 L schen Sie aus der Tabelle eingesetzterDozent 10 1 5 alle Dozenten die nur Kurse mit Geb hren von h chstens 200 haben 10 4 2 3 L schen Sie in der Tabelle unbearbeiteteThemen 10 1 4 alle die Kursthemen die das Kursthema 7 zur Voraussetzung haben 10 4 3 325 E E 0 E Mengenoperationen UNION INTERSECT EXCEPT MINUS 11 1 berblick Sie erinnern sich dass alle Ergebnisse von SELECT Anweisungen Mengen sind Das gilt f r die Hauptabfragen eines einfachen SELECT genauso wie f r Unterabfragen in zusammengesetzten Abfragen Vielleicht erinnern Sie sich auch noch an die Mengenlehre in der Mathematik mit ihren typischen Men genoperationen Genau diese Mengenoperationen sind auch in SQL definiert Operation Grafik SQL Operator Abbildung 11 1 Mengenoperationen Vereinigungsmenge UNION in SQL AuB Schnittmenge INTERSECT AnB Differenzmenge EXCEPT MINUS AB Die Abbildung 11 1 zeigt die drei Grundoperationen UNION INTERSECT und EXCEPT MINUS was der Bildung der Vereinigungsmenge der Schnittmenge und der Differenzmenge entspricht In SQL bedeutet das dass Mengen von Datens tzen die normalerweise mit SELECT Abfragen gewonnen werden anschlie end miteinander vereinigt geschnitten oder voneinander abgezo gen werden 327 karite 11 Gleichartige Datens tze 328 UNION Beispiel M
328. en Ausgangstabellen zu einem neuen Datensatz kombiniert deren Fremdschl ssel beziehungsweise Prim rschl s sel denselben Wert haben Stellen Sie sich einfach eine neue Tabelle vor mit der Sie weiterarbeiten k nnen als ob sie wirklich vorhanden w re Dieses Denkmodell wird in Abbildung 4 21 visualisiert Es gilt E Wenn der Fremdschl sselwert einer Tabelle mit dem Prim rschl sselwert der anderen Tabelle bereinstimmt entsteht ein neuer gemeinsamer Da tensatz E Wenn zu einem Fremdschl sselwert kein Prim rschl sselwert in der an deren Tabelle existiert bleibt der Datensatz unber cksichtigt E Wenn umgekehrt zu einem Prim rschl sselwert kein Fremdschl sselwert existiert bleibt auch dieser Datensatz unber cksichtigt E Es entstehen also genauso viele Datens tze wie es passende Kombina tionen beider Tabellen gibt Fremdschl ssel Prim rschl ssel Dieses Denkmodell ist bei der Definition eines JOIN hilfreich Stellen Sie sich jeden JOIN als materialisierte virtuelle Tabelle vor Auch wenn der SQL Interpreter in Wirklichkeit wegen verschiedener Optimierungen selten wahrscheinlich nie diese Tabelle komplett erstellt sind dies nur technische Optimierungen Aus logischer Sicht aus unserer SQL Sicht verh lt sich der JOIN wie eine solche tempor r erzeugte Tabelle auf der dann weiter gear beitet wird Wenn Sie mit Ihrer SELECT Anweisung das gew nschte Ergebnis erreicht haben k
329. en Celle20 Word Listing 4 35 INNER JOIN zwischen Dozent und Kurs Abbildung 4 30 Ergebnis mit dem INNER JOIN eingesetzte Dozenten Beispiel Listing 4 36 OUTER JOIN zwischen Dozent und Kurs LEFT OUTER JOIN Abbildung 4 31 Ergebnis des OUTER JOIN 127 S Kapitel4 Mit SQL Daten abfragen SELECT 128 Abbildung 4 32 LEFT OUTER JOIN zwischen tbDozent und tbKurs Der OUTER JOIN in MS Access In MS Access ist ein OUTER JOIN m glich MS Access erforderte in der Syntax bis Access 2000 nur dass die Angabe OUTER weggelassen wird Es muss hier also LEFT JOIN statt LEFT OUTER JOIN hei en Entsprechendes gilt f r den RIGHT OUTER JOIN der in MS Access zum RIGHT JOIN wird Ab MS Access 2003 funktioniert die Standardsyntax Au erdem bietet MS Access die M glichkeit einen OUTER JOIN direkt ber die grafische Oberfl che zu bestimmen und anzuzeigen Die zeigt dass man einen OUTER JOIN als gerichteten JOIN auffassen kann Bei einem LEFT OUTER JoIN wird von der linken Tabelle ausgegangen aus der alle Datens tze genommen werden Aus der rechten Tabelle werden dann wie gewohnt pas sende Datens tze erg nzt Fehlen diese Datens tze bleiben die entspre chenden Feldwerte in der Ergebnismenge leer Die Datens tze der linken Tabelle werden aber vollst ndig in die Ergebnismenge bernommen tbPerson tbDozent kD o oo Kurskennung PID KTHID Familienname KursdauerStunden Kursbeginn Beschaeftigungsbeginn Stundensat
330. en SQL Eingabem glichkeit eine grafische Oberfl che f r die Erstellung einer Abfrage Dabei wird die Abfrage in einer Oberfl che zusammengestellt Anschlie end generiert MS Access aus diesen Angaben eine SQL Anweisung Diese SQL Anweisung kann dann wie bei allen anderen Datenbanksystemen ausgef hrt werden und liefert die Ergeb nisdatens tze Dieses Vorgehen hat den Vorteil dass der Anwender nicht unbedingt SQL beherrschen muss um eine SQL Anweisung zu erstellen Dies macht MS Access attraktiv f r kleine Datenbankanwendungen die auch in Fachabtei lungen oder im privaten Umfeld nutzbar sind Kurse2003 Datenbank Access 2002 2003 Dateiformat 5 ffnen L Entwurf Neu X 22 2E Objekte J Tabellen Formulare Berichte Seiten Makros Module Gruppen Ga Favoriten MS Access Abfragen sind in MS Access eigene Datenbankobjekte Im Datenbankfenster sind nach den Tabellen die brigen Datenbankobjekte aufgelistet Abfragen Formulare Berichte Seiten Makros Module sowie die Gruppen sind im Gegensatz zu den Tabellen Objekte die nicht selbst Daten speichern sondern auf den Daten in den Tabellen beruhen diese also anzeigen kombinieren und sp ter auch ndern und l schen Abfragen bilden dabei die wichtigsten Objekte Wenn Sie im Datenbankfens ter links die ABFRAGEN ausw hlen wird rechts die komplette Liste dargestellt Sie k nnen jetzt eine neue SQL Anweisung eingeben indem Sie eine neu
331. en Zweck Autofahrt wesentlichen Anga ben Insbesondere werden Sie alle Stra en Hinweise auf Orientierungshilfen wie Bahnlinien Fl sse und hnliches finden Dagegen beinhaltet die Karte keine Hinweise auf Bodensch tze j hrliche Niederschlagsmengen Durch schnittstemperaturen oder Bev lkerungsdichten Hiervon wird abstrahiert da diese Informationen f r den Zweck nicht notwendig sind Wollen Sie eine Fernreise mit dem Auto unternehmen ist dagegen eine Karte mit dem Auto bahn und Fernstra ennetz Europas hilfreich f r eine Radtour in der L ne burger Heide die entsprechende Fahrradkarte Politische Karten geografi sche Erdkarten und andere Karten k nnen f r andere Zwecke wiederum n tzlich sein Wir kennen viele andere Modelle von Modelleisenbahnen ber Auto und Flugzeugmodelle bis zu makro konomischen Modellen wie beispielsweise von John Maynard Keynes die bestimmte Aspekte des wirtschaftlichen Han delns beschreiben Das Entity Relationship Modell ERM ist das bekannteste und meistverwen dete grafische Hilfsmittel um ein Modell des Datenhaushaltes f r einen bestimmten Zweck zu schaffen Es wird dar ber hinaus auch in anderen Bereichen der Informatik eingesetzt in denen Ausschnitte der realen Welt modelliert werden Es ist unabh ngig von einem bestimmten Datenbanksys tem und unterliegt nicht den Einschr nkungen die sich durch die Implemen tierung in einer Datenbank wie MS Access MySQL oder Oracle ergeben k n nen
332. en bestimmten physischen Datentyp festlegen da man eine fr hzeitige Festlegung auf ein bestimmtes Datenbanksystem vermeiden m chte Ande rerseits kann es m hsam werden k nstlich Dom nen zu beschreiben von denen man schon genau wei was daraus werden soll In gr eren Zusam menh ngen ist die M he hier eine genaue fachliche Festlegung zu treffen trotzdem sinnvoll Hier wollen wir aber aus Vereinfachungsgr nden schnell auf die bekannten Datentypen zur ckgreifen 7 2 4 Beziehungen Durch Beziehungen werden die Abh ngigkeiten und Zusammenh nge zwi schen Entit ten ausgedr ckt Eine Beziehung wird grafisch durch eine Raute dargestellt die durch im Normalfall zwei Kanten mit den Entit ten verbun den ist die assoziiert werden sollen In der Raute kann der Name der Bezie hung stehen Beziehungen k nnen zus tzlich durch Attribute beschrieben werden beispielsweise kann die Beziehung arbeitet an zwischen den Enti t ten Mitarbeiter und Projekt um zwei Attribute erg nzt werden die angeben in welcher T tigkeit ein Mitarbeiter an einem Projekt mitarbeitet und zu wie viel Prozent In der Regel geh ren zu einer Beziehung zwei Entit ten Es k nnen aber auch mehrere Entit ten assoziiert werden Die Anzahl der an einer Bezie hung beteiligten Entit ten wird als Grad der Beziehung bezeichnet Wird beispielsweise ein Produkt aus mehreren Bauteilen verschiedener Lieferan ten zusammengesetzt hat die Beziehung d
333. en eines bestimmten Postleitzahlgebietes oder Auftr ge bestimmter Kundengruppen bearbeitet werden k nnen 8 6 8 bungen 1 Erstellen Sie einen VIEW Geburtstagsliste der alle Informationen ber Personen enth lt die f r eine Geburtstagsliste notwendig sind Achten Sie auf die Sortierung Testen Sie Ihren VIEW mit einer SELECT Anwei sung 8 6 1 2 Erstellen Sie einen VIEW Cellerkurse der die KID die Kurskennung sowie Kursbeginn und Kursende aller Kurse beinhaltet die in Celle stattfinden 8 6 2 3 Erstellen Sie einen VIEW AccessKurse der das Kursthema die Kursbe schreibung sowie die Kurskennung und den Kursbeginn das Kursende und den Kursleiter mit ID angibt Sortieren Sie die Liste nach Anfangs datum und lassen Sie in allen Feldern die Kurs enthalten den Teil Kurs im Namen des Feldes weg 8 6 3 4 ndern Sie den VIEW AccessKurse so dass statt der ID des Kursleiters des sen Name mit in dem VIEW enthalten ist 8 6 4 Entfernen Sie alle angelegten vIEws 8 6 5 Warum f hrt ein DROP VIEwW Befehl nicht zum L schen der Daten in dem VIEW 8 6 6 Dom nen 87 Dom nen 8 7 1 Dom nen erstellen SQL kennt Standarddatentypen f r ganze Zahlen Gleitkommazahlen alpha numerische Werte Datums und Zeitangaben In Kapitel 5 haben wir gese hen wie die verschiedenen Datenbanksysteme diese umgesetzt und mit ver schiedenen Varianten erweitert haben Trotzdem treten Situationen auf bei dene
334. en jetzt die grundlegenden Elemente f r eine Datenbankabfrage mit einer SELECT Anweisung kennengelernt Sie k nnen die gew nschten Felder einschlie lich der Tabelle angeben und mit der Syntax tabelle feldname qua lifizieren Sie k nnen Felder und Tabellen mit einem Alias versehen Sie ken nen die Schreibweise feldname AS Ersatzname f r ein Alias Damit haben wir jetzt die Syntax einer SELECT Anweisung bis hierher zusammengestellt SELECT DISTINCTIALL feldname AS alias feldname AS alias Syntax Alias FROM tabelle AS alias Sie wissen dass man den stellvertretend f r alle Felder angeben kann Durch den Zusatz von DISTINCT k nnen Sie Duplikate in der Ergebnismenge verhindern bungen zum einfachen SELECT mit und ohne Alias bungen Erstellen Sie f r die folgenden Aufgaben jeweils eine SELECT Anweisung 1 Ermitteln Sie aus der Tabelle tbKursthema alle Felder f r alle Themen 04 2 1 2 Ermitteln Sie aus der Tabelle tbKursthema das Thema die Kursbeschrei bung und die geplante Dauer des Kurses Verwenden Sie f r den Tabel lennamen das Alias kt und qualifizieren Sie die Feldnamen mit dem Alias U4 2 2 3 Ermitteln Sie aus der Tabelle tbKursthema die Kursthemen Identifika tionsnummer KTHID unter dem Alias KThID also mit kleinem h das ei gentliche Kursthema unter dem Ersatznamen KURSTHEMA und die Dauer unter dem Alias geplante Kursdauer U4 2 3 4 Ermitteln Sie alle in der Tabelle tbKursthema
335. en und einige Beispiele erg nzt Die Beschreibung entspricht der folgenden Legende Legende Die Eingabeparameter werden entsprechend des Datentyps angegeben n n2 nanumerische Angaben a a2 a3alphanumerische Angaben d d2 daDatumsangaben u u2 u3Uhrzeitangaben t t2 t3Timestamp Angaben i i2 i3Zeitintervall Angaben Parameter optionaler Parameter Das Ergebnis wird mit einem Pfeil angegeben beispielsweise eine Funktion die einen numerischen Wert liefert Funktion gt n 171 WM kaites Jet Engine ODBC Tabelle 5 10 ODBC Skalarfunktionen der MS Access Jet Engine 172 ADP VBA Datentypen Ausdr cke und Funktionen 5 6 1 Funktionen in MS Access In MS Access stellen die Funktionen ein besonderes Kapitel dar Um f r die MS Access Anwender die bersicht etwas zu vereinfachen soll hier vor der eigentlichen Funktionsbeschreibung auf die Besonderheiten hingewiesen werden Sie m ssen hier zwischen den Funktionen der Jet Engine und den Funk tionen der MS Access Oberfl che unterscheiden Die Jet Engine verf gt weitgehend ber die beispielsweise auch in MySQL bekannten Funktionen wie sie sp ter ausf hrlich beschrieben werden Je nach Betriebsart muss aber unterschieden werden ob im ODBC Modus oder im DAO Modus dann zumeist mit dem SQL Server als sogenanntes Access Projekt ADP gearbei tet wird Im ODBC Modus stehen die Funktionen in Tabelle 5 10 zur Verf gung Wenn Sie diese nutzen k nne
336. en wir das richtige Datenbankschema w hlen dazu gibt es die use Option siehe Abbildung 3 16 mysql gt use kurse MySQL Gedanklich befinden wir uns jetzt innerhalb von MySQL und hier wiederum innerhalb der Datenbank kurse Damit haben wir auf alle Tabellen dieser Datenbank Zugriff Wir wollen dies beispielhaft berpr fen indem wir uns den Aufbau der Tabelle tbPerson anzeigen lassen mysql gt describe tbPerson Das Ergebnis sollte bei Ihnen etwa wie in Abbildung 3 23 aussehen Verglei chen Sie das Ergebnis einmal in Ruhe mit der Anweisung CREATE TABLE tbPerson die wir oben als Auszug der Datei CreateKurse txt in Listing 3 1 gesehen haben Sie sehen das unmittelbare Ergebnis dieser SOL Anweisung x Eingabeaufforderung mysql uroot pmasterkey of x IC Programme MySQL MySQL Server 5 8 bin gt mysql uroot pmasterkey Nelcome to the MySQL monitor Commands end with or g Your MySQL connection id is 25 Server version 5 8 41 community nt MySQL Community Edition GPL Type help or h for help Type c to clear the buffer mysql gt use kurse e changed gt describe tbPerson 1265 ETEBERTTTET UT varchar 58 i Vorname i varchar 5B i char 5 varchar 58 i varchar 5B i Wenn Sie das kleine Beispiel mit der zeilenorientierten Oberfl che durchge arbeitet haben finden Sie jetzt das Datenbankschema kurse das bereits f nf Tabellen enth lt auch in der Oberfl che der MySQL Tools R
337. endenden SQL soll dies hier aber nicht geschehen Wenn Sie sich mit openBase und dem anderen Datenbanksystem aber schon ein wenig auskennen k nnen Sie diesen Weg aber probeweise nutzen verbindung zu einer bestehenden Datenbank herstellen Mozila Adressbuch Thunderbird Adressbuch LDAF Adressbuch Abschlie end soll eine erste Abfrage in openBase erstellt werden um den Mechanismus zu verstehen W hlen Sie dazu links ABFRAGEN Sie haben nun unter AUFGABEN die M glichkeit eine Abfrage in der Entwurfsansicht mit hilfe eines Assistenten oder in der SQL Ansicht zu erstellen Der Assistent soll uns hier nicht interessieren Die Entwurfsansicht ent spricht der grafischen Oberfl che die SQL Ansicht einem reinen Eingabe fenster W hlen Sie die SQL Ansicht Sie erhalten ein leeres Fenster Geben Sie ein SELECT FROM tbPerson F hren Sie die Abfrage anschlie end aus indem Sie entweder das Symbol mit dem gr nen Haken oder den Men befehl BEARBEITEN ABFRAGE AUSF H REN ausw hlen Sie sollten eine Tabelle wie in Abbildung 3 55 erhalten Sie k nnen dieselbe Abfrage auch in der grafischen Oberfl che von open Base darstellen Daf r m ssen Sie entweder die Schaltfl che mit dem gelben Konstruktionsdreieck oder im Men ANSICHT DESIGN ANSICHT AN AUSSCHAL TEN ausw hlen Das Ergebnis ist die SQL Anweisung in der Design Ansicht und sollte etwa wie in Abbildung 3 56 aussehen OpenOffice orgBase E u PID Familienna
338. endet werden Sind in mehreren Tabellen Felder gleichen Namens vor handen beispielsweise die PID in den Tabellen tbPerson und tbDozent so ist f r den SQL Interpreter nicht mehr eindeutig erkennbar welches Feld gemeint ist In diesen F llen helfen Sie ihm mit einer sogenannten Qualifi zierung Dabei wird dem Spaltennamen der Name der Tabelle getrennt durch einen Punkt vorangestellt F r den SQL Interpreter ist tbPerson PID eindeutig von tbDozent PID zu unterscheiden Nachdem wir im Moment noch mit einer Tabelle arbeiten ist eine Qualifizierung nicht zwingend erforderlich aber gew hnen Sie sich die Schreibweise fr hzeitig an lassen sich sp ter mancherlei Probleme leicht erkennen oder gleich vermeiden Bei gro en Datenbankanwendungen reicht auch der Tabellenname unter Umst nden nicht f r eine eindeutige Bezeichnung aus Daher werden nach demselben Schema weitere Qualifizierer vorangestellt etwa das Datenbank schema oder der Name der Datenbank sodass man dann beispielsweise Kurse tbPerson PID erh lt Man spricht auch von vollst ndiger Qualifizierung Bis auf die Qualifi zierung mit dem Tabellennamen wird dies aber im weiteren Verlauf dieses Buches nicht weiter ber cksichtigt Sie sollten dies bei Bedarf in der Doku mentation Ihres Datenbanksystems nachlesen oder die Richtlinien der Daten bankadministratoren erfragen 93 si Kapitel 4 94 Listing 4 5 Qualifizierte Feldnamen Listing 4 6 Qualifikation f
339. endet wird Sie k nnen die Begriffe Schale und sch len verwenden 8 1 1 2 Ermitteln Sie in Ihrem Telefonbuch die Sortierreihenfolge Verwenden Sie beispielsweise die Namen M ller und Mull 8 1 2 8 2 Tabellen erstellen CREATE TABLE 8 2 1 Standardangaben f r Felder Nachdem das Datenbankschema erstellt ist muss es mit Tabellen gef llt wer den um dann darin die Daten ablegen zu k nnen MS Access unterst tzt die folgenden Anweisungen nicht Stattdessen wird eine grafische Oberfl che f r die Tabellenerstellung sowie das Mittel der Aktu alisierungsabfragen angeboten openBase unterst tzt die Anweisungen und bietet zus tzlich ebenfalls eine grafische Oberfl che F r die ausschlie lichen Nutzer dieser Oberfl chen sind die entsprechenden Hinweise am Ende die ses Kapitels zusammengefasst Trotzdem lohnt sich auch f r diese Benutzer hoffentlich das Lesen des Kapi tels da an der einen oder anderen Stelle darauf hingewiesen wird wie die ent sprechenden Anweisungen mit der grafischen Oberfl che zusammenh ngen und so hoffentlich deren Funktionsweise etwas deutlicher wird Wir wollen zun chst eine kleine Tabelle f r die Umsatzsteuer anlegen die wir in Kapitel 7 bereits modelliert haben Zur Erinnerung ist der entspre chende Ausschnitt des Entity Relationship Modells in Abbildung 8 5 wie dergegeben Daraus ist als Tabellenbeschreibung dann mwst mwst_art ENUMC voll erm ssigt kein
340. ener Wert in SQL er entspricht NICHT dem leeren Text nicht der 0 oder 0 0 oder einem Datum 0000 00 00 Die Abfrage auf NULL Werte erfolgt mit dem eigenen Operator IS NULL beziehungsweise IS NOT NULL Durch wahlweise Nutzung und Abfrage von NULL Werten k nnen Sie zwi schen dem Fehlen einer Information und der Information dass etwas leer oder O ist unterscheiden Haben Sie beispielsweise Dozenten die nicht auf Stundenbasis sondern mit einem Festgehalt bezahlt werden kann es Sinn machen dass Sie in diesen F llen als Stundensatz 0 00 eingeben Sie doku mentieren damit dass Sie wissen dass kein Stundensatz existiert Dem gegen ber bedeutet dann die Eingabe NULL dass zurzeit keine Informa tionen ber den Stundensatz vorliegen 5 3 Literale Wir haben bisher schon oft Werte von Datenfeldern mit festen Werten ver glichen So haben wir Ausdr cke wie k KID CE23 oder k GezahlterBetrag lt 250 formuliert ohne dies weiter zu kommentieren Ausdr cke die lediglich feste Werte und keine Datenbankfelder beinhalten beispielsweise Celle 25 4 5 oder 12 4 2008 hei en in SQL Literale In der Tabelle 5 8 sind beispielhaft Literale f r die grundlegenden Daten typen angegeben Literale 5 m Datentyp Beispiele Erl uterung alpha Gauss Die Doppelung des einfachen Anf hrungs numerisch Gauss sche zeichens f hrt dazu dass es einfach in das Gleichung Ergebnis aufgenommen wird n
341. engenoperationen UNION INTERSECT EXCEPT MINUS Es geht also um die Kombination der Ergebnisse verschiedener SELECT Anweisungen nachdem diese ausgef hrt worden sind Diese Kombination erfolgt stets in horizontaler Richtung also als Kombination kompletter Datens tze Mit UNION INTERSECT oder EXCEPT MINUS werden also keine neuen Datens tze aus vorhandenen Datens tzen kombiniert sondern es werden bereits vorhandene Datens tze verwendet Stellen Sie sich einfach vor dass jede SELECT Anweisung eine Liste von Datens tzen erzeugt Diese Listen werden jetzt beispielsweise untereinandergeschrieben UNION Die Listen k nnen auch miteinander verglichen werden und nur die Datens tze die in allen Listen vorhanden sind werden verwendet INTERSECT Schlie lich k n nen aus einer Liste auch diejenigen Datens tze gestrichen werden die in einer anderen Liste vorhanden sind EXCEPT MINUS Voraussetzung f r eine Kombination der Datens tze in dieser Form ist jeweils dass die Datens tze einen identischen Aufbau haben Listen in denen schon die Spalten unterschiedlich sind lassen sich schwer miteinan der vergleichen Im Normalfall werden die Datensatzmengen in den Listen jeweils durch eine SELECT Anweisung erzeugt sodass darauf zu achten ist dass die SELECT Anweisungen Datens tze desselben Formats liefern also eine gleiche Anzahl Datenfelder mit einer gleichen Reihenfolge in Datentyp und Bedeu tung aber nicht unbedingt gleicher Herku
342. enname prim r schl sselfeld im Rahmen der CREATE TABLE oder ALTER TABLE Anweisung erzeugt Eine solche Integrit tsbedingung definiert das mit fremdschl sselfeld angegebene Feld als Fremdschl ssel in der aktuellen Tabelle Dass bedeutet f r die refe renzierte Tabelle tabellenname dass sie von unserer Tabelle ben tigt wird Wird beispielsweise in der Tabelle bestellung ein Fremdschl ssel auf die Tabelle der Kunden definiert bedeutet das dass die Kundentabelle ben tigt wird um bei den Bestellungen auf einen Kunden verweisen zu k nnen Das bedeutet aber auch dass die Kundentabelle nicht einfach gel scht werden darf da dann die Bestellungen sozusagen in der Luft h ngen w rden Es w re nicht mehr m glich die Bestellungen einem Kunden zuzuordnen Dies muss die Datenbank verhindern Sie verbietet daher das L schen der Kun dentabelle solange in einer anderen Tabelle ein Fremdschl ssel definiert ist der auf diese Tabelle verweist Es muss dann entweder zun chst die Bestel lungstabelle gel scht werden oder es muss zumindest mit einer ALTER TABLE Anweisung die Fremdschl sselbeziehung gel scht werden In unserer Arti keldatenbank m sste also ein ALTER TABLE bestellung DROP FOREIGN KEY FKBESTKUND f r MySQL beziehungsweise ein ALTER TABLE bestellung DROP CONSTRAINT FKBESTKUND f r andere Datenbanksysteme erfolgen Sind f r die Tabelle in keiner anderen Tabelle Fremdschl ssel definiert so existieren auch keine
343. ens tze Die Abbildung 11 3 zeigt das Ergebnis der neuen UNION Anweisung FAMILIENNAME VORNAME GEBURTSDATUM KURSE Weiss Peter 07 11 63 Kurse Weiss Karin 05 10 62 Kurse Weiss Peter 02 03 74 Kurse Wieckenberg Peter 16 07 08 Artikel Winter Petra 30 12 89 Kurse Winter Petra 16 07 08 Artikel m 6 rows returned in 0 00 seconds Jetzt sind die beiden Datens tze f r Petra Winter aus Sicht des SQL Inter preters noch keine doppelten Datens tze da nur der Name und der Vorname gleich sind die beiden anderen Spalten aber unterschiedliche Werte beinhal ten Reduzieren Sie die Abfrage auf die beiden Namensfelder sehen Sie den Unterschied SELECT p Familienname p Vorname FROM kurse tbPerson p WHERE p Familienname LIKE W UNION ALL SELECT k Nachname k Vorname FROM artikel kunden k WHERE k nachname LIKE w ORDER BY 1 Listing 11 2 Alle Personen aus beiden Datenbanken die mit W beginnen Abbildung 11 3 Vereinigungsmenge mit Duplikaten Listing 11 3 UNION mit doppelten Datens tzen 331 W karite 11 Listing 11 4 UNION ohne doppelte Datens tze Abbildung 11 4 Vereinigungsmenge mit Duplikaten UNION ALL Abbildung 11 5 Vereinigungsmenge ohne 332 Duplikate UNION DISTINCT Standard DISTINCT Mengenoperationen UNION INTERSECT EXCEPT MINUS SELECT p Familienname p Vorname FROM kurse tbPerson p WHERE p Familienname LIKE wW UNION DISTINCT SELECT k Nachname k Vorname
344. ens f r den Schreibschutz ffnen Sie jetzt die Datenbank indem Sie in MS Access entweder beim Start eine bestehende Datenbank ausw hlen oder nach dem Start mit DATEI FF NEN eine Datenbank ausw hlen In beiden F llen m ssen Sie zu der Stelle Ihrer kopierten Datei Kurse2003 mdb navigieren und diese dann ausw hlen Alternativ k nnen Sie nat rlich auch im Windows Explorer auf die Datei navigieren und sie mit einem Doppelklick starten Bei der Installation von MS Access wurde die Erweiterung mdb mit MS Access verbunden und f hrt zum Start des Datenbanksystems Sollten Sie beim Start eine Sicherheitswarnung erhalten k nnen Sie diese ignorieren und die Datenbank ffnen Sie k nnen dann links TABELLEN w hlen und sollten die f nf Tabellen der Kursdatenbank sehen Mit einem Doppelklick k nnen Sie deren Inhalt jeweils direkt betrachten In der Datenbank stehen die Tabellen nicht nur f r sich allein sondern sind durch Beziehungen miteinander verkn pft Das ist nicht zwingend erforder lich erleichtert aber oft die sp tere Arbeit W hlen Sie zur Ansicht der Bezie hungen entweder im Hauptmen EXTRAS BEZIEHUNGEN oder das entspre chende Symbol in der Titelleiste Sie bekommen alle Tabellen angezeigt Verschieben Sie sie und vergr ern Sie sie bei Bedarf so dass Sie beispielsweise das Ergebnis aus Abbildung 3 1 erreichen Sie sehen in der Abbildung dass jeweils zwei Tabellen durch eine Beziehung verbunden sind Diese Bezieh
345. enutzeroberfl che Dazu wird wiederum zun chst eine neue Abfrage ge ffnet und im Entwurfsmodus ber ABFRAGE AKTUALISIERUNGSABFRAGE auf die sogenannte Aktualisierungs abfrage umgeschaltet Wie gewohnt kann jetzt die Datenquelle f r die Abfrage gew hlt werden Neu ist allerdings dass Datenquellen zugleich das Ziel der nderung also des Updates bilden k nnen Dazu wird wiederum im unteren Teil des Ent wurfsfensters die neue Zeile AKTUALISIEREN eingeblendet Jetzt ist jede Spalte so zu lesen dass der Feldname in der Zeile FELD das Ziel der Aktualisierung angibt w hrend der in derselben Spalte unter AKTUALI SIEREN stehende Ausdruck den Wert bestimmt der in dem Feld gespeichert werden soll Die Abbildung 6 10 zeigt eine solche Situation bei der das Feld Kursthema aktualisiert wird Es k nnen weitere Felder in die Abfrage aufge nommen werden die als Filter oder f r andere Zwecke dienen Auch zu aktu alisierende Felder k nnen ein weiteres Mal aufgenommen werden tbKursthema KTHID Kursthema Kursbeschreit Kursdemo v A Ts N Feld Tabelle Aktualisieren EDY amp Kursthema Kriterien oder Abbildung 6 10 Aktualisieren des Kursthemas 213 WM Kapitei 6 Listing 6 14 UPDATE Anweisung in MS Access me Abbildung 6 11 Kontrollabfrage Aktualisier ung Sind wirklich so viele 214 Datens tze betroffen UPDATE Syntax Datenbankinhalte ndern INSERT UPDATE DELETE MS A
346. enutzt werden soll Ist der Benutzer so akzeptiert werden dann aufgrund der dem Benutzer zuge ordneten Rolle seine Berechtigungen bestimmt Um eine Rolle zu definieren gen gt zumeist ein CREATE ROLE rollenname Die Zuordnung der Benutzer zu den Rollen geschieht dann mit einer speziel len Version der GRANT Anweisung GRANT rollenname TO benutzername benutzername Womit die angegebenen Benutzer der Rolle zugeordnet werden Damit kann ein Benutzer durch mehrfache Angabe der Anweisung auch mehreren Rollen zugeordnet werden Die Rechte eines Benutzers ergeben sich dann aus der Summe der einzelnen Rechte der Rollen 12 5 Rollen l schen Rollen k nnen wie die anderen Datenbankobjekte mit einer DROP Anweisung gel scht werden DROP ROLE rollenname Rechte einrichten GRANT Bei der L schung einer Rolle werden alle damit verbundenen Berechtigun gen ebenfalls gel scht Die Benutzer die den Rollen zugeordnet sind bleiben erhalten 12 6 Rechte einrichten GRANT Benutzer einzurichten und zu entfernen ist die eine Sache Die andere Sache ist ihnen auch tats chlich Rechte zuzuordnen Der zentrale Befehl zur Ein richtung von Berechtigungen ist die GRANT Anweisung Die Grundidee ist Was darf womit durch wen gemacht werden und unter welchen Bedin gungen In die Welt von SQL bersetzt bedeutet das GRANT rechte ON datenbankobjekte TO benutzerliste WITH optionen Soll beispielsweise dem Benutzer meier
347. er Index erh lt dabei wiederum einen eigenen Namen da es sich um ein eigenst ndiges Datenbankobjekt handelt Im Anschluss an den Indexnamen wird eine Liste der Feldnamen angegeben auf die sich der Index beziehen soll Je Datensatz werden die Werte dieser Felder ber cksich tigt Da ein Index umso effektiver funktioniert und umso weniger Speicher platz ben tigt je kleiner er ist ist es bei langen Textfeldern sinnvoll die Anzahl der Zeichen je Feld zu begrenzen So kann beispielsweise bei einem Namensfeld das 50 Zeichen lang ist der Index auf die ersten 10 Zeichen Pr fixl nge beschr nkt werden Dies ist im Normalfall vollkommen ausrei chend um mit einem SELECT eine so kleine Menge infrage kommender Datens tze zu ermitteln dass diese anschlie end sequenziell durchsucht werden k nnen Ein Index kann nicht nur im Zusammenhang mit der Erstellung einer neuen Index Erstellung mit Tabelle angelegt werden sondern er kann jederzeit auch nachtr glich einge ALTER TABLE f gt werden Nachdem er wie eine Integrit tsbedingung behandelt wird kann dies auch mit der bereits bekannten ALTER TABLE Anweisung gesche hen die f r jede Art von nderung der Tabellendefinition genutzt werden kann ALTER TABLE tabellenname ADD INDEX indername feldname Pr fix l nge feldname Pr fixl nge Oder konkret ALTER TABLE tbPerson ADD INDEX name Familienname 10 Die Bedeutung der Indizes erkennen Sie auch daran dass die m
348. er Tabelle verwendet werden kann Manche bieten eine eigene Funktion an wobei noch zwischen Eindeutigkeit bez glich der Tabelle und globaler Eindeutigkeit zu unterscheiden ist Die Tabelle 5 20 bietet einen berblick SQL Funktion Erl uterung Beispiel Wandelt den Wert in eine GEN_IDO Darstellung des angegebe nen Datentyps um Dies ist logisch nicht immer m glich Welche Datentypen in wel chen Datentyp umgewan delt werden k nnen ist in der jeweiligen Dokumenta tion der Datenbank beschrie ben Generierung einer ID AUTOWERT Texte k nnen zwischen ver IF 1 gt 2 ja nein schiedenen Zeichens tzen konvertiert werden soweit diese die verwendeten Zei chen unterst tzen Die Zei chensatznamen sind unterschiedlich hier sind Oracle Zeichens tze ver wendet worden Bedingung IF Systemvariable SYSTEM_USERC abfragen Abfrage aktueller Werte wie des Systemdatums oder des aktuellen Benutzers Datensatzorientierte Funktionen Skalarfunktionen ANSI MySQL MS Access Oracle Firebird openBase Generie ULUIDC Autowert in ber Tabel GEN_IDC ber AUTO_ rung einer der Tabelle len INCREMENT ID beschrei in der bung Tabelle Bedingung CASE IF Bedin CASE CASE CASE IF WHEN gung WHEN WHEN WHEN THEN THEN 5 THEN THEN END Ausdruck1 END END und ver IF Bedin Ausdruck2 gleichbare gung Aus Switch druck bedi
349. er Unterabfragen Komplexe Abfragen Sub Query im Zusammenhang mit der SELECT Anweisung Die Unterabfra gen werden anschlie end in Kapitel 10 auch auf die INSERT UPDATE DELETE und CREATE Anweisungen bertragen Abschlie end wird in Kapitel 11 auf die Mengenoperationen zur Kombination mehrerer SELECT Anweisun gen eingegangen Abschlie end werden im letzten Abschnitt verschiedene Aspekte des Abschnitt V Betriebs von Datenbanken angesprochen Kapitel 12 geht auf die Verwaltung Kapitel 12 14 von Benutzern und Benutzergruppen sowie das Berechtigungskonzept ein ASPekte des Betriebs Kapitel 13 beschreibt die Sicherung der Datenkonsistenz eines und mehrerer paralleler Benutzer ber das Konzept der Transaktionen Kapitel 14 geht abschlie end auf einige Aspekte von SQL ein die die physische Datenspei cherung betreffen 17 SQL der Standard relationaler Datenbanken 2 1 Die Geschichte Die Grundlagen der Datenbanksprache SQL gehen bereits auf den Anfang der Siebzigerjahre des vorigen Jahrhunderts zur ck Im Jahr 1974 stellte IBM erstmals eine Sprache mit dem Namen SEQUEL Structured English Query Language vor den Urahnen unseres heutigen SQL Wenn man in den USA ber SQL spricht wird man immer wieder feststellen dass viele Ame rikaner bis heute SQL als Siquel aussprechen wenn auch nat rlich die direkte Aussprache der Abk rzung SQL Es Kju El ebenfalls h ufig zu h ren ist SQL steht f r Stru
350. erabfragen mit ALL und ANY Unterabfragen mit IN und EXISTS Synchronisierte und korrelierte Unterabfragen Regeln f r Unterabfragen in der WHERE Klausel 2222222222cseenen Erweiterungen der Unterabfragen Unterabfragen mit MS Access 281 284 285 287 288 289 291 293 294 294 296 297 297 299 299 300 Inhaltsverzeichnis Kapitel 10 Unterabfragen in der DDL und DML 317 10 1 CREATE mit Unterabfragen 317 10 2 UPDATE mit Unterabfragen 320 10 3 INSERT mit Unterabfragen 321 10 4 DELETE mit Unterabfragen 323 Kapitel 11 Mengenoperationen UNION INTERSECT EXCEPT MINUS 327 11 1 berblick n n 327 11 2 Die Vereinigungsmenge UNION 328 11 3 Die Schnittmenge INTERSECT 333 11 4 Die Differenzmenge MINUS EXCEPT 334 11 5 Besonderheiten der Datenbanksysteme 335 11 6 Zusammenfassung 22222cseeeeeennenn 337 11 7 bungen ae en 337 Kapitel 12 Benutzer Rechte und Zugriffsschutz 339 12 1 Schutz der Informationen 222220 339 12 2 Benutzer und Benutzergruppen 340 12 3 Benutzer entfernen DROP USER 342 12 4 Rollen einrichten 222c2ecseseenenn 342 12 5 Rollen l schen 2222222erse nn 342 12 6 Rechte einrichten GRANT
351. erden sollen Die Stelle beschreibt alle T tigkeiten Rechte und Pflichten innerhalb der Organisation Sie ist im Sinne der Organisation die eigentliche Basis f r die Aufbau und Ablauforganisation Sie kann auch die Basis f r Stellenausschreibungen bilden Der konkrete Mitarbeiter oder die konkrete Mitarbeiterin besetzt dann die Stelle und f llt sie mit allen Rechten und Pflichten aus In SQL bernimmt die Rolle die Funktion der Stelle mit allen Rechten und Benutzergruppen Pflichten Dementsprechend werden die Rechte an die Rolle gebunden die somit aus Sicht der Datenbank den eigentlichen Benutzer darstellt Dann werden den konkreten Mitarbeitern Identifikations IDs zugeordnet mit denen sie sich anmelden k nnen und diese IDs den Rollen zugeordnet Somit k nnen einer Rolle mehrere Mitarbeiter zugeordnet werden Damit kann einer Rolle ein Mitarbeiter aber beispielsweise auch sein Stellvertreter zugewiesen werden Auch f r gr ere Organisationseinheiten wie Gruppen Abteilungen oder Projektteams kann eine Rolle definiert werden der dann die IDs der Mitglieder zugeordnet werden Dies erkl rt auch die Bezeichnung einer Rolle als Benutzergruppe Erg nzend zu diesem Konzept k nnen auch teilweise schon Rollen oder Gruppenhierarchien mit entsprechender Verer bung der Rechte definiert werden Aber Vorsicht diese Konzepte werden typischerweise in Datenbanksystemen ben tigt die von gr eren Organisationen genutzt werden In kleineren
352. erden von links nach rechts angewendet Gibt es mehrere Sortierungen m ssen Sie also gegebenenfalls die Spalten tauschen um die gew nschte Sortierreihen folge herzustellen Abbildung A 23 i Entwurfsansicht Fenster PEA GES POSTEN aok f r die Zusammenstellung o S R E der SQL Anweisung Familienname Vorname PLZ E EB PD Familienname Vorname Tabelle tbPerson tbPerson tbPerson Sortierung Anzeigen Kriterien oder 398 MS Access Die Entwurfsansicht ist nur eine von verschiedenen Sichten auf dieselbe Information Die drei wesentlichen Sichten sind neben der Entwurfsansicht die Datenblattansicht und die SQL Ansicht Die Umschaltung zwischen den verschiedenen Sichten erfolgt mit dem Symbol oben links das in der Ent wurfsansicht ein tabellen hnliches Bild enth lt Wenn Sie auf den Pfeil rechts neben dem Symbol klicken werden Ihnen die verschiedenen Ansich ten zur Auswahl angeboten siehe Abbildung 1 24 EEN RUE Entwurfsansicht Datenblattansicht SQL Ansicht PiyotTable Ansicht PivotChart Ansicht W hlen Sie die SQL Ansicht so sehen Sie die SOL Anweisung die der in der Entwurfsansicht getroffenen Auswahl entspricht siehe Abbildung 1 25 es mef A SELECT tbPerson PID tbPerson Familienname tbPerson Vorname FROM tbPerson Sie k nnen also in MS Access unmittelbar sehen welche SQL Anweisung Sie ber die grafische Oberfl che erzeugt haben Das Ganze fu
353. ergabe Zun chst wird der Benutzer mit einer Authentifikation ber ein Passwort erzeugt Dann werden ihm Abfrage Einf ge und nderungsrechte an der Tabelle tbDozent gew hrt Anschlie end erh lt er alle Rechte an der Tabelle tbPerson Diese Rechte werden ihm dann jeweils wieder genommen und schlie lich wird der Benutzer komplett entfernt 12 8 Benutzerkonzepte verschiedener Datenbanken 12 8 1 Benutzerkonzept in MySQL Mit der Einrichtung einer MySQL Datenbank wird ein Superuser angelegt der als root bezeichnet wird Es muss zwar kein Passwort vergeben werden das sollte aber nat rlich im Normalfall immer erfolgen da die Datenbank sonst f r alle Anwender total offen ist Alle weiteren Benutzer werden dann auf Basis dieses ersten Benutzers eingerichtet der alle dazu notwendigen Rechte hat Sie k nnen den Befehl CREATE USER meier unmittelbar in die gewohnte MS Query Oberfl che eingeben um einen neuen Benutzer meier zu erzeugen Sie k nnen die Eingabe in MySQL auch ber die Kommandooberfl che durchf hren Wichtig ist nur dass Sie die entsprechenden Rechte besitzen die Sie als Benutzer root immer haben soll ten Die Kommandooberfl che k nnen Sie unmittelbar oder ber das Admi nistrationswerkzeug MYSQL ADMINISTRATOR starten Sie finden den Befehls zeilen Client ber die Men leiste siehe Abbildung 12 1 Abbildung 12 1 Fenster MySQL Enterprise F Auswahl innerhalb von MySQL Query Browser MySQL Administrator
354. ergeben sich aus den Kardinalit ten der Beziehung auf der Seite der anderen Entit t Wie im obigen Beispiel PERSON ist verheiratet mit PERSON schon gesehen ist es auch m glich eine Beziehung zu definieren die eine Entit t mit sich selbst verbindet Dies nennt man rekursive Beziehungen Dabei stehen im Allgemeinen nicht dieselben Datens tze miteinander in Verbindung obwohl auch das m glich ist Im Fall der verheiratet Beziehung muss man von zwei verschiedenen Datens tzen ausgehen wer heiratet schon sich selbst 0 1 Eine andere h ufig auftretende rekursive Beziehung ist die zwischen Bautei len Ein Bauteil besteht aus anderen Bauteilen So lassen sich beispielsweise St cklisten f r die Konstruktion oder Produktion speichern Normalerweise besteht ein Bauteil aus mehreren anderen Bauteilen Auf der untersten Ebene gibt es dann Bauteile die aus keinem anderen Bauteil mehr zusammenge setzt werden Dies erkl rt die eine Kardinalit t Umgekehrt wird ein Bauteil beim Zusammenbau in mehreren anderen Bauteilen verwendet und wie derum existieren auf der obersten Ebene Bauteile die in keinem anderen Bauteil verwendet werden Dabei erkennen Sie hier noch die zus tzliche Konstruktion dass die Bezie hung selbst ein Attribut Anzahl besitzt Dies erm glicht die Modellierung der Situation dass eine bestimmte Anzahl Bauteile in ein anderes Bauteil einge baut werden Rekursive Beziehungen Abbildung 7 4 Rekursi
355. erkurth Melissa 29336 Am T mpel 3 Nienhagen 1951 09 04 32 Winter Petra 29320 Immenhoop 51 Hermannsburg 1989 12 30 34 Plate Ulrich 30529 Gutenberggasse 5 Hannover 1986 12 02 Mit NULL wird zwischen einem leeren Wert beispielsweise dem leeren Text und dem Fehlen eines Wertes unterschieden NULL bedeutet bei einem Vor namen dass der Name nicht bekannt ist dass die Information fehlt Ein lee rer Text w rde dagegen bedeuten dass bekannt ist dass kein Vorname exis tiert Beispiel Abbildung 5 5 Tabelle mit NULL Werten 163 W kaites Listing 5 5 Abfrage auf Personen mit einem leeren Text als Vorname Listing 5 6 Abfrage auf alle Personen mit fehlendem Vornamen Abbildung 5 6 Ergebnis der SELECT Anweisung mit Vorname 164 IS NULL IS NOT NULL Beispiele Datentypen Ausdr cke und Funktionen SELECT p PID p Familienname p Vorname FROM tbPerson p WHERE p Vorname Das Ergebnis der SQL Anweisung in Listing 5 5 ist eine leere Menge es gibt keinen Datensatz bei dem der Vorname ein leerer Text ist Der nuLL Wert des Vornamens des Datensatzes mit der PID 25 entspricht also auch im Verst ndnis des SQL Interpreters nicht dem leeren Text SELECT p PID p Familienname p Vorname FROM tbPerson p WHERE p Vorname IS NULL Dagegen liefert die Anweisung in Listing 5 6 den erwarteten Datensatz wie Sie ihn in Abbildung 5 6 sehen pid familienname vomame 25 Sander por NULL ist ein eig
356. ermeldung des SQL Interpreters Vielmehr m ssen Sie alle Tabellen die eine Dom ne verwenden l schen bevor Sie die Dom ne l schen Das L schen der Tabelle bedeutet dabei ein wirkliches Entfernen mit einem DROP TABLE Ein blo es L schen der Daten DELETE TRUNCATE ist nicht ausrei chend da die Struktur der Tabelle die letztlich die Dom ne beinhaltet von einem blo en DELETE oder TRUNCATE nicht ber hrt wird Die Syntax zum L schen einer Dom ne lautet DROP DOMAIN dom nenname 8 7 4 bungen Die bungen hier k nnen nur mit einem Datenbanksystem durchgef hrt werden das das Konzept der Dom nen wie beschrieben unterst tzt Daher sind die L sungen hier nur f r Firebird erstellt 1 Die Dom ne mehrwertsteuer soll nicht durch Texte sondern durch die Werte 1 2 und O codiert werden Der Standardwert ist 0 Erstellen Sie eine entsprechende Dom ne 8 7 1 2 Wir haben bereits verschiedene Felder verwendet die Mengen beinhal ten Diese sollen in der Regel nicht negativ werden Definieren Sie eine Dom ne menge die nur ganzzahlige positive Werte erlaubt 8 7 2 3 Das Geschlecht soll nur die Werte M oder W enthalten d rfen Defi nieren Sie eine entsprechende Dom ne geschlecht U8 7 3 4 L schen Sie die definierten Dom nen wieder 8 7 4 Unterabfragen Sub SELECT 9 1 Nutzung von Unterabfragen Der grunds tzliche Aufbau einer Abfrage mit SELECT war Thema des Kapitels 4 Danach ha
357. ers und das Passwort bermittelt Es wird ein Zeiger verbindung bereitgestellt der alle relevanten Informationen ber die Datenbankverbindung beinhaltet Anschlie end muss ein Schema ausgew hlt werden wobei dieser Zeiger ben tigt wird mysql_select_db kurse verbindung Ist das Schema ausgew hlt gilt es als Standardschema Damit k nnen alle folgenden SQL Anweisungen auf dieses Standardschema zugreifen Dies wird vorbereitet indem eine SQL Anweisung erstellt wird sql SELECT FROM tbPerson Diese SQL Anweisung wird dann mithilfe des in PHP bereits integrierten Funktionsaufrufs mysql_query ausgef hrt In result wird ein Zeiger auf ein assoziatives Feld mit dem kompletten Ergebnis gespeichert result mysql_query sql Abschluss Dann wird die Anzahl der Datenfelder im Ergebnis ermittelt Diese Anzahl wird dann genutzt um die Feldnamen als berschriften ausgeben zu k n nen for i 0 i lt anzahl_felder i feldname mysql_field_name result i echo lt th gt feldname lt th gt Nach der Ausgabe der Feldnamen als berschrift in einer Tabelle werden die eigentlichen Datens tze ausgegeben Dazu wird mithilfe der Funktion mysql_fetch_assoc jeweils ein Datensatz in die Variable row gelesen Dieser Datensatz wird hier in einer Schleife in PHP in eine HTML Tabelle eingef gt while row mysql_fetch_assoc result echo lt tr gt foreach row as key gt wert echo lt td
358. ert Celle steht Zus tzlich soll der Geburtstag im Februar liegen Ausgehend von einer Datumsdarstellung im Format Tag Monat Jahr also tt mm jjjj wird der Stern als Platzhalter verwendet um hinsichtlich des Tages und des Jahres keine Einschr nkung zu machen Familienname Vorname PLZ Ort Strasse Geburtsdatum Martens Melanie 29221 Celle Horstweg 258 17 02 1961 Peredy Helmut 29221 Celle Mauernstra e 2 23 02 1956 Sander 29223 Celle Marxallee 12 05 02 1953 Schlachter Dieter 29227 Celle Mondhagen 43 02 02 1961 In diesem ersten Beispiel wird bewusst schon ein Problem angesprochen das oft im Zusammenhang mit der WHERE Klausel auftritt kleine Abweichungen vom Standard Erweiterungen und sprachspezifische Einstellungen Das Bei spiel funktioniert in dieser Form nur in MS Access Wollen Sie dasselbe Ergebnis mit MySQL oder einer der anderen Datenbanken mit den dortigen Platzhaltern und dem englischen Datumsformat erreichen lautet die ent sprechende SELECT Anweisung SELECT p Familienname p Vorname p PLZ p Ort p Strasse p Geburtsdatum FROM tbPerson p WHERE p Ort Celle and p Geburtsdatum LIKE 02 ORDER BY p Familienname p Vorname Das Ergebnis ist in Abbildung 4 12 zu sehen Sind Sie brigens bez glich des eingestellten Datumsformats unsicher kann ein Blick auf eine solche Ergeb nistabelle weiterhelfen Hier sehen Sie unmittelbar die Form jjjj mm tt also vierstelliges Jahr Bindest
359. erundet abgerundet 280 40 7 7 00 7 7 280 40 7 7 00 7 7 350 36 9 7222222222 9 72 10 g 400 40 10 10 00 10 10 350 32 10 9375 10 94 11 10 120 18 6 6666666666 6 67 7 6 120 18 6 66666666686 6 67 7 6 Sollen beispielsweise die Kursstunden pro Tag auf 7 Stunden reduziert wer den so stellt sich die Frage wie viele Tage dann ein Kurs ben tigt und wie viele Stunden brig bleiben die keinen kompletten Tag f llen Diese m ssen entweder entfallen oder es m ssen zus tzliche Stunden eingeplant werden damit ein weiterer Tag gef llt werden kann Einen berblick k nnen Sie sich mit einem Befehl wie in Listing 5 11 MySQL verschaffen SELECT DauerPlan DauerPlan DIV 7 AS Ganze Tage MOD DauerPlan 7 AS Reststunden 7 MOD DauerPlan 7 AS Aufzuf llende Stunden FROM tbKursthema Das Ergebnis ist in Abbildung 5 11 zu sehen DauerPlan Ganze Tage Reststunden Aufzuf llende Stunden 20 2 6 1 20 2 6 1 8 1 1 6 40 5 5 2 40 5 5 2 40 5 5 2 40 5 5 2 80 11 3 4 80 11 3 4 40 5 5 2 40 5 5 2 Datensatzorientierte Funktionen Skalarfunktionen u 5 i Mit SQL2003 wurde eine Reihe von Funktionen neu in den Standard ber nommen Dazu geh ren der nat rliche Logarithmus LNO sowie die e Funk tion EXPO die normale Potenzfunktion POWERC die Quadratwurzel SORTO das Abschneiden von Nachkommastellen FLOORO die Bestimmung der n chstgr eren ganzen Zahl CEIL ING sowie WIDTH_BUCKET um Daten zu gruppieren Diese Funkt
360. erweise pro Datenbank Gr ere Systeme erlauben aber auch die Einrichtung eigener Tablespaces also die gezielte Einrichtung von mehreren Speicherbereichen f r Tabellen und Indizes Dann kann bei der Erzeugung von Tabellen und Indizes angegeben werden in welchem Tablespace diese angelegt werden sollen In Oracle existiert daf r eine eigene Anweisung CREATE TABLESPACE in ande ren Systemen wie MySQL h ngt die Verwaltung vom verwendeten Dateiver waltungssystem ab Neben der Verwaltung von Tablespaces mit der M glichkeit innerhalb eines Tablespaces verschiedene Tabellen abzuspeichern gibt es auch die M glich keit eine Tabelle auf mehrere Tablespaces zu verteilen Dazu dient die soge TABLESPACE Partitionierung 379 E arite 14 Prozeduren Listing 14 6 Definition einer Prozedur 380 Listing 14 7 Aufruf der Prozedur Trigger Mit SQL Datenbanken betreiben und optimieren nannte Partitionierung bei der eine Tabelle auf mehrere Tablespaces und somit eventuell mehrere physische Speichermedien verteilt werden kann Die Verteilung kann nach verschiedenen Kriterien erfolgen im Allgemeinen wird mithilfe bestimmter Wertebereiche des Schl ssels oder anderer Attri bute f r die Datens tze entschieden in welcher Partition sie gespeichert wer den sollen Gerade bei sehr gro en Tabellen kann eine Partitionierung sinn voll sein um beispielsweise in mehreren Partitionen parallel suchen zu k nnen oder Zugriffe im Netz
361. erwenden Im folgenden Beispiel wird mithilfe einer Unterabfrage zun chst ermittelt welche Kursthemen Identifikation KTHID der Kurs CE23 hat siehe Listing 9 9 SELECT th Kursthema FROM tbKursthema th WHERE th KTHID SELECT t KTHID FROM tbKurs t WHERE t KID CE23 Dann wird der so ermittelte Wert genutzt um ihn mit den KTHID in der Tabelle tbKursthema zu vergleichen und das eigentliche Kursthema des Kur ses CE23 auszugeben Sie sehen dass hier eigentlich ein JOIN ausgef hrt wird Sie k nnten dasselbe Ergebnis auch mit der Anweisung in Listing 9 10 erreichen SELECT th Kursthema FROM tbKursthema th INNER JOIN tbKurs t ON th KTHID t KTHID WHERE t KID CE23 Ein wenig sieht die Nutzung der Unterabfrage hier aus wie die Nutzung eines Werkzeugs f r jedes Problem getreu dem Motto Wenn man einen Hammer hat sieht jedes Problem wie ein Nagel aus Tats chlich ist in vielen F llen die Performance beider Varianten gegeneinander abzuw gen und dann zu entscheiden welche zu bevorzugen ist auch wenn in der Regel der JOIN zumindest bei einem EQUI JOIN zu bevorzugen ist Bei Unterabfragen mit Vergleichsoperatoren wird in den allermeisten F llen ein Bezug zwischen einem Datenfeld der bergeordneten Abfrage und dem mit der Unterabfrage ermittelten Wert hergestellt Das ist gerade der Zweck des Vergleichs Grunds tzlich lassen sich aber auch beide Seiten eines Vergleichs ber Unterabfragen bestimmen ohn
362. erzeichen als Namen der Tabellen und Datenfelder zu ver wenden Jeder Programmierer oder Datenbankadministrator bekommt bei Feldnamen wie Stundensatz in EURO gesch tzter Aufwand oder Frist beachten sofort mehr als nur etwas steife Nackenhaare Generell sollten Sie versuchen ausschlie lich Folgendes zu verwenden E Buchstaben denken Sie daran dass die meisten SQL Interpreter Gro und Kleinschreibung nicht unterscheiden vermeiden Sie auch Umlaute und das E Ziffern aber nicht als erstes Zeichen eines Namens Den Unterstrich _ wenn es nicht anders geht E Keine SQL Schl sselw rter wie SELECT INSERT UPDATE oder DELETE Die sogenannte CamelCase Schreibweise bei der in zusammengesetzten W rtern jedes neue Wort mit einem Gro buchstaben beginnt w re f r Datenbankfelder sinnvoll Der Feldname StundensatzInEuro ist grunds tz lich ein vern nftiger Name Leider gibt es hier aber eine Einschr nkung Die meisten Datenbanksysteme im Gro rechnerumfeld wie auch SQL Interpre ter die aus diesem Umfeld kommen kennen wie Sie wissen nur Gro schrei bung Dies ist auch im SQL Standard so definiert und wird bei unseren Bei spielsystemen von MySQL Oracle und Firebird konsequent umgesetzt Es ist also konform zum ANSI SQL Standard Im Umfeld von Betriebssystemen sei es Windows sei es Linux wird dagegen bei einigen Datenbanksystemen sorgf ltig zwischen Gro und Kleinschreibung unterschieden
363. eser Wert bei fehlender Eingabe als Standardwert verwendet Damit erfolgt automatisch eine Eingabe und die NOT NULL Bedingung ist in jedem Fall erf llt F r die DEFAULT Angabe sind laut Standard erlaubt E ein beliebiges Literal also ein Wert wie O nicht vorhanden oder un bekannt eine Funktion zur Datumsermittlung USER CURRENT_USER SESSION_USER SYSTEM_USER NULL Die Datums und USER Angaben erlauben einen dynamischen Eintrag g n giger Werte also hier je nach Datenbank verschiedene Formate des aktuellen Datums der Uhrzeit sowie des angemeldeten Benutzers ohne dass sich der Anwender oder ein Programm darum k mmern muss Die Angabe von NULL stellt eine Besonderheit dar Beachten Sie m gliche Konflikte mit der NOT NULL Bedingung Die meisten Implementierungen lassen aber bei Weitem nicht alle Optionen zu So k nnen Sie bei MySQL au er Literalen nur f r TIMESTAMP Felder die Funktion CURRENT_TIMESTAMP nutzen um das aktuelle Datum f r alle Daten s tze einzutragen Listing 8 2 Erzeugen der Tabelle mwst mit einem Aufz hlungstyp f r das Feld mwst_art NOT EXISTS NULL DEFAULT 259 W kaites 260 PRIMARY KEY UNIQUE Beispiel Listing 8 3 Erstellen der Kundentabelle Prim rschl ssel Datenbanken erstellen SQL DDL Beachten Sie auch dass die Reihenfolge der Angabe von NULL oder NOT NULL einerseits und DEFAULT andererseits bei einigen Datenbanksystemen eine Rolle spielt
364. eut lich performanter als eine DELETE Anweisung f r die gesamte Tabelle Wenn Sie alle Datens tze in einer Tabelle l schen wollen kann die DELETE Anweisung sehr zeitaufwendig sein da die Datens tze alle einzeln gel scht werden Eine Alternative stellt hier die TRUNCATE Anweisung dar die alle Datens tze ohne aufwendige Protokollierung am St ck l scht TRUNCATE FROM tabellenname Viele Datenbanken so auch MySQL und Oracle unterst tzen diese Anwei sung MS Access h lt sich hier leider zur ck 6 3 3 Besonderheiten des DELETE bei MS Acess MS Access bietet in der grafischen Oberfl che eine M glichkeit auch MS Access L schabfragen zu stellen Das Vorgehen entspricht dabei weitgehend dem beim INSERT und UPDATE beschriebenen Verfahren Sie sollten hier allerdings noch einmal besondere Vorsicht walten lassen Am besten legen Sie zun chst eine normale SELECT Abfrage in MS Access Auswahlabfrage genannt an Mit dieser Abfrage k nnen Sie dann testen ob Sie mit Ihren Kriterien wirklich die gew nschten Datens tze ermitteln k nnen die mit einer L schabfrage entfernt werden sollen Wenn Sie beispielsweise alle Teilnehmer des Kurses CE24 l schen wollen w hlen Sie nur das Feld KID aus der Tabelle tbKursbesuche aus Als Kriterium tragen Sie CE24 ein Diese Abfrage k nnen Sie jetzt wie gewohnt ausf h ren und erhalten die gew nschten f nf Datens tze Bei Bedarf k nnen Sie weitere Attribut
365. f r Tabellen 343 arite 12 344 Andere Datenbankobjekte GRANT OPTION REVOKE Beispiel Benutzer Rechte und Zugriffsschutz zung um eine Spalte nicht auf die neue Spalte der Tabelle bezieht Generell sollten Sie die Rechte nach Datenbankstruktur nderungen CREATE ALTER DROP erneut vergeben was angesichts des Aufwandes bei gr eren Syste men f r ein automatisiertes Vorgehen spricht F r andere Datenbankobjekte als Tabellen sind auch andere Rechte sinnvol ler So erlaubt das Recht EXECUTE das Ausf hren von Prozeduren und Funk tionen TRIGGER erlaubt den Triggereinsatz und USAGE erlaubt die Aktivierung von Zeichens tzen Daneben k nnen spezielle Rechte aber letztlich f r fast alle Datenbankobjekte gew hrt werden Die TO Liste gibt die Liste der Rollen und oft alternativ der Benutzer an denen die Rechte gew hrt werden sollen Der Zusatz WITH erlaubt die Angabe weiterer Optionen Die bekannteste ist die GRANT OPTION Der Zusatz WITH GRANT OPTION bewirkt dass ein Benutzer die bertragenen Rechte selbst wieder an andere Datenbankbenutzer weiter geben darf Andere Optionen k nnen sich auf die Verwendung von Ressourcen beziehen und beispielsweise die Anzahl der Anmeldungen der Befehle pro Stunde der nderungsbefehle pro Stunde oder der Ergebniszeilen pro SELECT betreffen Rechte f r Rechtevergabe Die Vergabe von Rechten erfordert oft bestimmte eigene Rechte So k nnen in Oracle beispielsweise nur Rec
366. feldname AS ALIAS Syntax FROM tabelle joinliste WHERE bedingung AND OR bedingung GROUP BY feldname feldname HAVING bedingung AND OR bedingung ORDER BY feldname ASCIDESC feldname ASC DESC Diese Syntax entspricht dem Standardumfang aller relationalen Datenbank managementsysteme Kleinere Abweichungen bei einzelnen der hier ver wendeten Beispielsysteme haben wir bereits gesehen ber den bis hierher definierten Umfang hinaus gibt es eine Reihe von Erweiterungen die mehr oder weniger weitverbreitet sind und oft eigenen syntaktischen Regeln fol gen Die meisten Erweiterungen beziehen sich auf physische Eigenschaften der Datenbank und dienen der Steuerung der Datenabfrage sowie der Perfor mance Auf einige Punkte kommen wir an einigen Stellen noch zu sprechen ohne auf den gesamten Umfang der einzelnen Systeme eingehen zu k nnen Zwei wesentliche standardisierte Erweiterungen fehlen aber noch Zum einen muss auf die Verwendung von Funktionen zur Berechnung oder Erstellung komplexerer Ausdr cke eingegangen werden zum anderen feh len die Unterabfragen Die Funktionen sollen in folgenden Kapitel 5 im Zusammenhang mit den Datentypen behandelt werden Unterabfragen bei denen SELECT Anweisungen geschachtelt oder als Teil anderer SOQL Anwei sungen verwendet werden werden ab Kapitel 9 behandelt bungen zur SELECT Anweisung mit HAVING Klausel bungen Erstellen Sie f r die folgenden Aufgabe
367. feldnamen sor tieren kann Dabei wird die Reihenfolge der Sortierung durch die Reihen folge der Feldnamen in der SELECT Anweisung von links nach rechts bestimmt Je weiter links ein Feld steht desto entscheidender ist es f r die Sortierung Weiter rechts stehende Felder werden nur bei Gleichheit der lin ken Felder ber cksichtigt Feldname oder Position Listing 4 16 Sortierung mit Feldpositionen Listing 4 17 Ber cksichtigung leerer Felder bei der Sortierung Zusammenfassung 103 WM Kapitei4 Mit SQL Daten abfragen SELECT 104 bungen Sortierung und Performance Die ORDER BY Klausel hat nicht unbetr chtliche Auswirkungen auf die Perfor mance Bei gro en Datenmengen wirken sich zwei Faktoren negativ aus Zum einen ist die Sortierung selbst eine aufwendige Operation Zum anderen bie ten viele Datenbanken an zun chst eine begrenzte Anzahl von Datens tzen als Ergebnis der Auswertungen zu liefern beispielsweise die ersten 100 gefundenen Datens tze Dies geht unter Umst nden sehr schnell wenn keine Sortierung vorgenommen werden soll da dann einfach die ersten 100 Daten s tze gelesen werden Soll das Ergebnis aber sortiert werden m ssen alle Datens tze zun chst gelesen werden um festzustellen welches die 100 ers ten Datens tze gem der gew nschten Sortierreihenfolge sind Das kann einen erheblichen Unterschied bei den Antwortzeiten bedeuten M ssen Sie daher mit gro en Datenmengen arbeiten sollten
368. fert Daher werden die Datens tze mit den KTID 5 und 37 ber cksichtigt Sie w ren in dem Ausdruck GezahlterBetrag BETWEEN 250 AND 350 nicht enthalten gewesen und werden dann durch das NOT wieder aufgenommen Nat rlich w re hier bei den gegebenen Daten statt des BETWEEN Ausdrucks auch einfach ein k GezahlterBetrag lt 250 m glich und wahrscheinlich sinnvoller gewesen aber so sehen Sie sowohl einen weiteren Operator als auch den Einsatz der Verneinung im Beispiel Die SOL Anweisung enth lt noch einen weiteren neuen Operator Mit dem In Operator wird die Aufz hlung f r die beiden Zahlungsarten ber cksich tigt Bei diesem Kurs w re sicherlich auch ein Zahlungsart lt gt Gutschein beziehungsweise Zahlungsart Gutschein m glich gewesen Kommen sp ter weitere Zahlungsarten hinzu w rde dies aber nicht mehr funktionie ren Mit dem In Operator kann dagegen gezielt eine Liste erlaubter Werte definiert werden Die einzelnen Werte in der Liste des IN Operators werden jeweils durch ein Komma voneinander getrennt Beachten Sie dass MS Access in Aufz hlungen wie dieser abweichend vom SQL Standard das Semikolon verwendet Interessant ist auch die Klammerung der Bedingungen die mit AND und OR verbunden werden Jede Bedingung wird zun chst f r sich geklammert Dann werden die ersten drei mit AND verbundenen Bedingungen zus tzlich Die Daten mit der WHERE Klausel ausw hlen noch einmal geklammert ebenso die dr
369. fert und k nnen wieder zur ckgeholt werden Stehen weitere Abfragen zur Verf gung kann auch wieder nach vorn gebl ttert werden Neben dieser automatischen Speicherung k nnen SQL Anweisungen auch als SQL gespeichert werden und anschlie end wieder als SQL Script geladen werden Es steht ber die Men option HELP eine komplette SQL Hilfe zur Verf gung Die weiteren Optionen dienen weitgehend der Einbindung der SOL Anwei sungen beziehungsweise sind hier zu speziell Neben dem Aufruf der SQL Eingabe ber Toots bietet IBOConsole eine Reihe von Informationsm glichkeiten ber eine Datenbank die sich durch eine Aktivierung der Datenbank hier KURSE FDB sichtbar machen lassen Inter essant sind dabei zun chst vor allem die TABLES die sich durch einen Klick im linken Bereich wie alle anderen Elemente auch sichtbar machen lassen Auch die in diesem Buch angelegten Dom nen Views und weitere Elemente k nnen hier sichtbar gemacht werden t IBOConsole DER Console View Server Database Tools Help FP w i er Servers Name Owner Description MH Local Server TBDOZENT SYSDBA Databases Es TEKURS SYSDBA X KURSE FDB Eu TBKURSBESUCHE SYSDBA Kal Domains TBKURSTHEMA SYSDBA Es TBPERSON SYSDBA a Views Ma Stored Procedures PR Extemal Functions P Generators Exceptions amp BlobFiters Server Local Server Database KURSE FDB User SYSDBA 5 objects listed Ein Doppelklick auf eine Tabelle be
370. fferiert aber beim L schen der Integrit tsbedingungen Die Tabellen ndern ALTER TABLE So gibt es kein ALTER TABLE tabelle DROP CONSTRAINT sondern stattdes sen ALTER TABLE tabelle DROP PRIMARY KEY ALTER TABLE tabelle DROP FOREIGN KEY name ALTER TABLE tabelle DROP INDEX name Allgemeine CHECK Bedingungen lassen sich so leider nicht entfernen Daf r gibt es eine Reihe von Erweiterungen die beispielhaft in der Tabelle 8 2 zusammengestellt sind z x Tabelle 8 2 Anweisung Wirkung Einige Erweiterungen der ALTER TABLE tabelle ADD COLUMN F gt die neue Spalte am Anfang der Alai nn name FIRST Tabelle ein IiMYySQ ALTER TABLE tabelle ADD COLUMN F gt die neue Spalte hinter der Spalte name AFTER name2 mit dem Namen name2 ein ALTER TABLE tabelle ALTER COLUMN Setzt einen Standardwert f r die name SET DEFAULT wert angegebene Spalte ALTER TABLE tabelle ALTER COLUMN Entfernt den Standardwert f r die name DROP DEFAULT angegebene Spalte ALTER TABLE tabelle MODIFY COLUMN Damit kann die Felddefinition ge n name weitere Angaben dert werden Der Datentyp NULL NOT NULL und andere Angaben lassen sich so ver ndern funktioniert auch in Oracle ATER TABLE tabelle CHANGE Damit k nnen Felder umbenannt wer alter_name neuer_name weitere den Die weiteren Angaben entspre Angaben chen dem MODIFY ALTER TABLE tabelle RENAME TO Die Tabelle wird umbenannt neuer_tabellenname bungen zur ALTER TABLE
371. formation ist NULL kann bei allen Datentypen vorkommen Sie wollen die Personentabelle tbPerson auf Vollst ndigkeit der Angaben berpr fen Sicher haben Sie schon bemerkt dass zum Familiennamen Sander der Vorname fehlt Vielleicht ist Ihnen in Abbildung 5 5 auch schon aufgefallen dass anstelle des Vornamens nicht einfach ein leerer Ein trag zu sehen ist sondern klein in der Ecke NULL eingeblendet ist MySQL PID Familienname Vorname PLZ Strasse Ort Geburtsdatum 1 Weiss Peter 30529 Palmstra e 6 Hannover 1963 11 07 2 Bucz Susanne 30531 Heinestra e 23 Hannover 1976 04 06 4 Karmann Thomas 29227 Trift 28 Celle 1954 08 04 5 Kl tzer Karl 29221 Bahnhofstra e 2 Celle 1971 03 13 6 Weiss Karin 30529 Palmstra e 6 Hannover 1962 10 05 7 Weiss Peter 39134 Glanweg 4 Braunschweig 1974 03 02 8 Meier Kathrin 38154 Welfenallee 23 Braunschweig 1981 05 03 9 Schmidt Karl 30529 Lavesallee 23 Hannover 1949 06 25 10 M ller Claudia 29596 In den Fuhren 12 Breitenhees mau 11 Lisewski Bemd 30890 Roggenkamp 10 Barsinghausen 1960 06 06 23 Peredy Helmut 29221 Mauerstra e 2 Celle 1956 02 23 17 Schlachter Dieter 29227 Mondhagen 43 Celle 1961 02 02 15 Martens Melanie 29221 Horstweg 258 Celle 1911 02 17 24 Ruppert Nicola 29301 welfenallee 23 Bergen 1962 02 25 25 Sander Ba 29223 Marzallee 12 Celle 1953 02 05 26 Cromberg J rg 38152 Nordring 13 Braunschweig 1991 06 07 31 Schulze Tania 29308 Berliner Ring 23 Winsen 1992 11 09 37 Mag
372. g ber die GROUP BY Klausel definiert ist k nnen jetzt weitere Felder erg nzt werden Dabei muss f r jedes einzelne Feld fest gelegt werden wie die Werte der einzelnen Datens tze zu einem Wert des neuen Gruppendatensatzes zusammengefasst werden Die einfachste Form ist dabei ein neues Feld das einfach die Anzahl der Datens tze pro Gruppe z hlt Daf r wird die Funktion COUNTCfeldname verwendet COUNTC steht f r alle Datens tze der Tabelle Wie gesagt darf das Gruppierungsfeld in der Ergebnismenge fehlen sodass Sie mit SELECT COUNT C AS Anzahl Kursteilnehmer FROM tbKursbesuche AS kb GROUP BY kb KID beispielsweise eine Liste mit der Anzahl der Teilnehmer aller Kurse erhalten ohne dass die Kursnummer in der Ausgabe dabeisteht der Sinn sei f r den Moment dahingestellt Durch die Gruppierung wird die Menge der Ergebnisdatens tze immer in eine Teilmenge von Datens tzen zerlegt In jeder Teilmenge sind die Werte des Gruppierungsfeldes identisch und die Gesamtmenge zerf llt entspre chend der Abbildung 4 37 Die Gruppierung kann grunds tzlich nach beliebig vielen Feldern erfolgen wobei die Reihenfolge der Gruppierung entsprechend der Angabe der Feldna men von links nach rechts durchgef hrt wird Der am weitesten links ste hende Feldname legt die erste Aufteilung in Gruppen fest der n chste Feld name gruppiert innerhalb der Gruppen die schon gebildet sind Der dritte dann wiederum innerhalb dieser Gruppen Bei mehre
373. g der Datenbank zus tzlich zu erw gen sind Eine gezielte und dokumentierte Denormalisierung also eine teilweise Aufhebung der Normalisierung ist aber ein probates und vielfach verwendetes Mittel zur gezielten Leistungs steigerung einer Datenbank bei SELECT Anweisungen Weitere Mittel bieten die einzelnen Datenbanken dann im Rahmen ihrer physischen Speicher strukturen auf die sp ter in Kapitel 14 noch einzugehen ist Pflege ber Programme 247 Datenbanken erstellen SQL DDL 8 1 Das Datenbankschema erstellen CREATE SCHEMA Im vorangegangenen Kapitel ist eine Datenbankstruktur neu entwickelt wor den Diese existiert bisher nur auf dem Papier Jetzt soll diese Struktur real in ein Datenbankschema umgesetzt werden Dies geschieht nat rlich wie derum mit SQL Dabei benutzen wir einen bisher nicht betrachteten Teil von SQL die sogenannte SQL DDL Data Definition Language Im Gegensatz zur SQL DML Data Manipulation Language die die Basis bis Kapitel 6 bildete ndert die DDL die Datenbank als solches nicht nur deren Inhalte Sie wollen die im letzten Kapitel definierte Artikeldatenbank in einem realen Beispiel Datenbankmanagementsystem umsetzen Dazu wollen Sie eine komplett neue Datenbank in Form eines Datenbankschemas anlegen Die Begriffe Datenbank und Datenbankschema werden oft synonym ver Datenbankschema wendet Tats chlich ist das Datenbankschema die Summe aller Strukturin formationen also aller Tabel
374. g wohnen Sie wollen ihnen besondere Angebote Specials oder ein Gewinnspiel anbieten Sie wollen sie gezielt anschreiben Dann wollen Sie vielleicht nicht immer wie der das WHERE Ort Braunschweig in Ihre SOL Anweisungen einf gen Sie wollen auch sicher sein dass nur die in Braunschweig wohnenden Personen angeschrieben werden In diesem Fall erstellen Sie einen VIEW CREATE VIEW braunschweig AS SELECT FROM tbPerson WHERE Ort Braunschweig Mit diesem Befehl erzeugen Sie eine Sicht mit dem Namen braunschweig die ausschlie lich die Datens tze beinhaltet bei denen das Feld Ort den Wert Braunschweig aufweist Es wird nat rlich keine echte Kopie erstellt son dern beim Zugriff auf den VIEW werden die betreffenden Datens tze aus der Benutzer und Programmsichten CREATE VIEW zugrunde liegenden Tabelle tbPerson mit der angegebenen WHERE Klausel herausgefiltert Der Unterschied zu der Verwendung einer WHERE Klausel im SELECT liegt lediglich darin dass Sie sicher sein k nnen dass sie immer und in jeder SELECT Anweisung ausgef hrt wird die auf dem VIEW braunschweig beruht WHERE namel xyz Jetzt k nnen Sie mit einem einfachen SELECT from braunschweig alle Datens tze der Personen aus Braunschweig also alle in Abbildung 8 16 angegrauten Zeilen und nur diese erhalten Nat rlich k nnen Sie den SELECT Befehl zur Definition des VIEW mit allen in Kapitel 4 beschriebenen Optionen erweitern 8 6 3 Tab
375. gaben jeweils eine SELECT Anweisung 1 Ermitteln Sie wie viele Kursteilnehmer mit Gutschein bar oder mit ber weisung bezahlen und sortieren Sie die Zahlweise absteigend nach H u figkeit 5 7 1 2 Ermitteln Sie f r das Feld Stundenzahl ber alle Datens tze zumindest die Anzahl die Summe der Kursstunden die kleinste und die gr te Stun denzahl sowie die durchschnittliche Stundenzahl Verwenden Sie sinn volle Alias 5 7 2 3 Gruppieren Sie alle Kurse nach der KID und geben Sie die Kurskennung die KID die Summe der Zahlungen sowie die durchschnittliche Zahlungs h he und wenn m glich die Standardabweichung der Zahlungen an 05 7 3 4 Ermitteln Sie den Zusammenhang Korrelationskoeffizienten zwischen Rabatt und dem gezahlten Betrag U5 7 4 nur Oracle 197 Datenbankinhalte ndern INSERT UPDATE DELETE 6 1 Neue Datens tze einf gen INSERT Daten die abgefragt werden sollen m ssen in der Datenbank vorhanden sein Neue Datens tze in eine Datenbank einzuf gen ist daher eine elemen tare Aufgabe jeder Datenbank SQL sieht daf r eine eigene Anweisung vor die INSERT INTO Anweisung 6 1 1 INSERT mit Werten und Funktionen Es soll zun chst in die Tabelle tbPerson ein neuer Datensatz f r einen neuen Beispiel Kursteilnehmer mit dem Nachnamen Gerhardt eingef gt werden Adresse und Geburtsdatum sind gegeben Leider ist der Vorname nicht bekannt Der Datensatz kann dann mit folgender SQ
376. ganzzahlig INTEGER INT solche mit Dezimaltrennzeichen als Gleitkommazahlen FLOAT DOUBLE interpre tiert Tabelle 5 8 Beispiel f r Literale Alphanumerisch Tabelle 5 9 Escape Zeichen k nnen in MySQL in Literalen verwendet werden Numerisch 165 WM kaites 166 Listing 5 7 Test auf die Schreibweise der Zahl Datum Zeit Datentypen Ausdr cke und Funktionen Das Dezimaltrennzeichen folgt der allgemeinen Logik einer englischen Umgebung Hier ist das Dezimaltrennzeichen der Punkt und das Tausen dertrennzeichen das Komma In einer deutschen Umgebung ist es genau umgekehrt also Komma als Dezimaltrennzeichen und Punkt als Tausender trennzeichen Normalerweise gilt bei allen SQL Interpretern die englische Logik Eine Ausnahme bildet MS Access das f r interessante Verwirrungen sor gen kann wenn teilweise auf die Betriebssystemumgebung hier Windows zur ckgegriffen wird ndern Sie in der Datenbank tbDozent einmal test weise den Wert f r einen Stundensatz und notieren sich vorher den alten Wert Geben Sie 23 45 ein dann finden Sie anschlie end in der Anzeige die Ein gabe 23 45 also deutsche Schreibweise Diese Vermutung wird best tigt wenn Sie testweise 23 45 eingeben was direkt in 2345 00 umgesetzt wird Hier scheint Access das deutsche Format zu verwenden Geben Sie wieder 23 45 ein und testen Sie den Wert mit einer Abfrage Die SELECT
377. ge f gt werden Die Philosophien gehen hier in der Praxis auseinander Administratoren gro Ber Datenbanken bevorzugen h ufig das Entladen L schen ndern der Tabellenstruktur und das anschlie ende Laden der Daten Die Entlade und Lademechanismen sind zumeist bereits implementiert und der frische Daten bestand erlaubt eine performantere Speicherung Bei kleineren Systemen stehen diese Mechanismen aber nicht immer zur Verf gung sodass das beschriebene Vorgehen eher umst ndlich und fehleranf llig ist In einem laufenden Betrieb kann dann auch ein Zeitproblem hinzukommen Daher hat die ALTER TABLE Anweisung durchaus eine erhebliche Bedeutung im Umgang mit relationalen Datenbanken Die ALTER TABLE Anweisung erlaubt grunds tzlich die in der folgenden Syn tax angegebenen nderungen ALTER TABLE tabellenname ADD felddefinition ALTER felddefinition DROP felddefinition ADD Integrit tsbedingung DROP Integrit tsbedingung k Tats chlich haben die Datenbankhersteller wegen der hohen Bedeutung einer komfortablen Anderbarkeit der Datenbank hier vergleichsweise viel Aufwand betrieben und zahlreiche Erweiterungen implementiert die eine Vielzahl von Steuerm glichkeiten bei der Nutzung von ALTER TABLE bereit stellen An dieser Stelle soll insbesondere auf MySQL eingegangen werden da es hier einige Besonderheiten gibt MySQL erlaubt zwar das standardkonforme Einf gen beliebiger Felder und Integrit tsbedingungen di
378. gen wollen 39 W kaites 40 kurse artikel kurse artikel Die Beispieldatenbanken 3 2 4 MS Access Alle Daten sind f r MS Access 2003 vorbereitet Um den Start zu vereinfa chen sind die Daten als komplette MS Access Datenbank beigef gt und k nnen unmittelbar genutzt werden Alle Daten f r die Kursdatenbank stehen auf der CD unter datenbanken MSAccess kurse Die Datei Kurse2003 mdb enth lt die komplette Kursdaten bank f r MS Access 2003 Um die Kursdatenbank wieder zur ckzusetzen kopieren Sie die Datei einfach erneut von der CD F r Nutzer lterer Versio nen sind die Daten noch als Excel Dateien beigef gt Importieren Sie die Excel Dateien in die Datenbank Das Verfahren f r MS Access wird in Anhang A beschrieben Alle Daten f r die Artikeldatenbank stehen auf der CD unter datenbanken MSAccess artikel Die Datei Artikel2003 mdb enth lt die komplette Artikel datenbank f r MS Access 2003 Um die Artikeldatenbank wieder zur ckzu setzen kopieren Sie die Datei einfach erneut von der CD F r Nutzer lterer Versionen sind die Daten noch als Excel Dateien beigef gt Importieren Sie die Excel Dateien in die Datenbank Das Verfahren f r MS Access wird in Anhang A beschrieben Denken Sie bei einer direkten Kopie von CD daran gegebenenfalls den Schreibschutz zu entfernen Klicken Sie dazu im Windows Explorer mit der rechten Maustaste auf die kopierte Datei w hlen Sie den Befehl EIGENSCHAF TEN und entferne
379. gnis CURRENT_DATEO FROM tbKursbesuche kb INNER JOIN tbPerson p ON p PID kb KTID WHERE KID CE23 Beachten Sie dass die Nutzung von Unterabfragen nicht in allen Datenban ken m glich ist Au erdem weicht die Syntax von der CREATE TABLE Syntax CREATE mit Unterabragen W E O U leicht ab siehe Kapitel 8 So w rde Oracle die folgende Version der obigen CREATE TABLE Anweisung ben tigen um dieselbe Tabelle zu erzeugen CREATE TABLE tbce23 Familienname Vorname KID fehltage Zeugnis Listing 10 3 P ELECT is y D Eeh Koz Erstellen einer Tabelle mit p Familienname p Vorname kb kb Fehltage kb Zeugnis Unterabfrage in Oracle FROM tbKursbesuche kb INNER JOIN tbPerson p ger ON p PID kb KTID WHERE KID CE23 Damit ergibt sich eine Erweiterung der Syntax f r die Erstellung von Tabel len CREATE TABLE CREATE TABLE Felddefinition Integrit tsbedingung Felddefinition Integrit tsbedin gung AS SELECT Anweisung Die CREATE TABLE Anweisung wird in dieser Form von Firebird und openBase zurzeit nicht unterst tzt In MS Access kann ber eine Tabellenerstellungsab frage ein solcher Befehl erzeugt werden Dabei wird die SELECT Anweisung aus der Abfrage erstellt Wird die Abfrage dann in eine Tabellenerstellungsab frage umgewandelt wird intern eine entsprechende CREATE TABLE Anweisung mit Unterabfrage erzeugt Entsprechend steht sie in der Engine aber wie alle CREATE TABLE Anweisungen nicht im
380. gruppe siehe Benutzerrolle Benutzerrolle 341 342 Benutzervariable 367 BETWEEN 108 110 Beziehung 19 31 33 116 225 228 236 1 zu 1 229 1 zu n 229 CREATE TABLE 263 423 5 Stichwortverzeichnis fehlende 131 Grad der 228 Kardinalit t 230 n zu n 229 rekursive 231 Umsetzung ERM in Tabelle 238 BIGINT 151 157 BINARY 155 BIT 152 162 BLOB 152 162 BOOLEAN 152 Boolesche Logik 106 C CamelCase 30 95 CASCADE 271 CASE 191 CAST 189 CEILING 175 CHAR 154 180 CHARACTER 151 CHARACTER SET 251 CHARACTER VARYING 151 CHECK 266 275 CHECK OPTION 296 CLOB 152 155 COLLATE 102 251 COLLATION 252 COMMIT 358 COMMIT WORK 360 CONCAT 149 CONCATENATE 180 Condition JOIN 123 CONVERT 155 189 CORR 196 COUNT 136 138 143 193 194 COVAR_ SAMP 196 COVAR_POP 195 CREATE DATABASE 250 Firebird 255 MySQL 250 CREATE DOMAIN 152 298 CREATE INDEX 221 371 CREATE PROCEDURE 380 CREATE ROLE 342 349 353 CREATE SCHEMA 250 255 MS Access 253 MySQL 251 openBase 256 Oracle 254 424 CREATE TABLE 257 mit Unterabfrage 317 Syntax 258 266 CREATE TABLESPACE 221 379 CREATE TRIGGER 381 CREATE TYPE 152 CREATE USER 254 341 353 CREATE VIEW 286 CROSS JOIN 131 CURRENCY 159 CURRENT_DATE 183 CURRENT_TIME 183 CURRENT_TIMESTAMP 170 183 D Data Dictionary 23 DATE 151 162 Datenbankentwurf 222 232 Datenbankmodellierung 219 Datenbankschema 29 249 Datenfeld 30 136 149 Datengruppe 145 Datenhaltungssystem 46 221 Datensatz 31 136
381. h ein SELECT auf einer anderen Tabelle Es muss mit einer entsprechenden Fehlermeldung zur ckgewiesen werden Wenn Sie brigens danach zu Ihrem urspr nglichen Benutzer zur ckkehren wollen k nnen Sie das durch ein CONNECT mit dem Superuser sa erreichen CONNECT USER sa PASSWORD Jetzt k nnen Sie dem vertrieb seine Rechte wieder entziehen REVOKE SELECT ON tbPerson FROM vertrieb 353 Karite 12 Beispiel Listing 12 7 Einrichten einer Sicht und 354 der Zugriffsrechte auf diese Sicht Benutzer Rechte und Zugriffsschutz Damit hat die Rolle vertrieb keine Rechte mehr und kann auch entfernt werden DROP ROLE vertrieb Schlie lich kann auf demselben Weg auch der USER wieder gel scht werden DROP USER meier 12 9 VIEW als Zugriffsschutz Wir haben bereits ber die Definition von Benutzersichten in Form des VIEW gesprochen Wie der Name Benutzersicht schon andeutet handelt es sich dabei eigentlich um ein ideales Konzept gerade den lesenden aber auch den ndernden Zugriff mit den diskutierten Einschr nkungen festzulegen Bereits durch die Definition des VIEw wird die Datensicht eingeschr nkt Die Wahl der Spalten wie auch der Datens tze ber eine entsprechende SELECT Klausel erlaubt eine sehr flexible Festlegung der f r einen Benutzer oder eine Benutzergruppe zur Verf gung zu stellenden Informationen Da ein VIEW ebenfalls ein Datenbankobjekt ist k nnen dann anschlie end die entspre chenden
382. h festlegen wie die Werte berechnet werden sollen Dazu nutzen Sie die bereits bekannte Vorgehensweise f r Auswahlabfragen In diesem Fall m ssen Sie noch die Gruppierungsfunktion einschalten und die einzelnen Aggregatfunktionen Summe Mittelwert und Anzahl f r die jeweiligen Fel der ausw hlen Diese Beschreibung ist bekannt Der einzige Unterschied zu Auswahlabfragen besteht darin dass das Ergebnis nicht am Bildschirm dar gestellt sondern direkt mit INSERT in die Zieltabelle geschrieben wird Neue Datens tze einf gen INSERT i Abfrage1 Anf geabfrage tbKursbes Fr sen Fr ne rer T re Rabatt GezahlterBetrag KBID Tabelle tbKursbesuche tbKursbesuche tbKursbesuche tbKursbesuche tbKursbesuche Funktion Gruppierung Summe Summe Mittelwert Anzahl oa nf gen an KID sum_fehltage sum_rabatt mittel_betrag Kriterien tbKurs_Statistik oder sum_fehltage sum_rabatt mittel_betrag Aus diesen Angaben erzeugt MS Access eine INSERT Anweisung Dies ist mit Alias genau die SOL Anweisung die wir bereits betrachtet haben nur ohne WHERE beziehungsweise HAVING Klausel INSERT INTO tbKurs_Statistik C KID sum_fehltage sum_rabatt mittel_beitrag Anzahl SELECT tbKursbesuche KID Sum tbKursbesuche Fehltage AS Summe von Fehltage Sum tbKursbesuche Rabatt AS Summe von Rabatt Avg tbKursbesuche GezahlterBetrag AS Mittelwert von GezahlterBetrag Count tbKursbesuche KBID AS Anzahl von KBID FROM
383. h mm ss plus Zeitzone und weitere Dezimalstel len nach Implementierung TIMESTAMP Kombination von DATE und TIME Intervall INTERVAL DAY Intervall Tage INTERVAL HOUR Intervall Stunden 151 WM kaites 152 Tabelle 5 1 Forts Basisdatentypen der meisten SQL Datenbanken CREATE TYPE Datentypcode Datentypen Ausdr cke und Funktionen Kategorie Datentyp Beschreibung sonstige BLOB Binary Large Object Speicherung bin rer Daten beispielsweise f r Grafiken Der Zugriff erfolgt ber spezielle Metho den ab SQL99 CLOB Character Large Object Vergleichbar mit dem BLOB aber f r textbasierte Objekte ab SQL99 BIT n Bitkette der L nge n normalerweise maximale L nge BOOLEAN Wahrheitswert Ja Nein True False Zu diesen Basistypen kommen in der Regel noch eine Reihe weiterer Daten typen die datenbankspezifisch sind Hierzu geh ren streng genommen bereits die logischen Datentypen Boolean aber beispielsweise auch Aufz h lungstypen Mengentypen oder Konstrukte wie das neue MULTISET Dar ber hinaus bieten viele Datenbanken strukturierte Datentypen Felder ARRAY und diverse Typen f r spezielle Anwendungszwecke wie beispiels weise Geodaten oder multidimensionale Strukturen In einigen Systemen k nnen mit einer eigenen SQL Anweisung CREATE TYPE oder CREATE DOMAIN weitere Datentypen definiert werden Die so definierten Datentypen k nnen dann wie normale Datentypen
384. heit u tionen UM Anzahl i Anzahl Operato Zeitinter Einheit Datums ren mit valle zu ADDTIME feld Zeitinter addieren Uhrzeit Einheitwie vallen oder zu oo i Patepart ADD_ subtrahie MONTHO ren Als ein weiteres Beispiel wollen wir eine Geburtstagsliste der Personen in der Tabelle tbPerson erstellen Dazu ist es notwendig dass wir uns auf den Monat und den Tag konzentrieren und die Liste nach diesen ordnen Um den Monat und den Tag zu extrahieren k nnen wir die SQL Standardfunktion Tabelle 5 16 Forts Datumsorientierte Funktionen Beispiel 185 5 Kapitel5 Datentypen Ausdr cke und Funktionen EXTRACT verwenden Dann wird die Liste nach dem Monat und dem Tag sor tiert und Sie erhalten mit der Anweisung in Listing 5 15 das Ergebnis in Abbildung 5 14 Listing 5 15 SELECT Geburtstagsliste mit Familienname Vorname EXTRACT EXTRACT MONTH FROM Geburtsdatum AS Monat EXTRACT CDAY FROM Geburtsdatum AS Tag FROM tbPerson WHERE Geburtsdatum IS NOT NULL ORDER BY 3 ASC 4 ASC Neben der Funktion EXTRACT existieren in den meisten Datenbanksystemen noch eine ganze Reihe lterer Funktionen wie MONTHO oder DAYO um ein zelne Bestandteile eines Datums oder einer Uhrzeit zu extrahieren die bei spielhaft in Listing 5 16 MySQL verwendet werden Listing 5 16 SELECT Familienname Vorname MONTH Geburtsdatum AS Monat Geburtstagsliste DAY Geburtsdatum AS Tag mit klassischen FROM tbPerson a WHER
385. hendes gilt f r die anderen Klauseln Abgeschlossen wird eine SELECT Anweisung wie jede SQL Anweisung durch ein Semikolon 4 2 Einfache Abfragen Sie sehen es ist eigentlich ganz einfach Beschr nken Sie sich auf die tat s chlich notwendigen Angaben so k nnen Sie sehr schnell eine SELECT Anweisung formulieren die tats chlich auch erste Informationen liefert Wir wollen damit beginnen eine SELECT Anweisung zu formulieren die alle Personen aus unserer Tabelle tbPerson anzeigt SELECT Familienname Vorname FROM tbPerson Das Ergebnis ist eine Liste in der in jeder Zeile der Familienname und anschlie end der Vorname der Personen angezeigt werden Familienname Vorname Weiss Peter Bucz Susanne Karmann Thomas Kl tzer Karl Weiss Karin Weiss Peter Meier Kathrin Schmidt Karl M ller Claudia Lisewski Bernd Martens Melanie Schlachter Dieter Peredy Helmut Ruppert Nicola Sander Cromberg J rg Schulze Tanja Winter Petra Plate Ulrich Magerkurth Melissa Vertauschen Sie beide Angaben so erkennen Sie dass die Reihenfolge der Feldnamen in der Namensliste die Reihenfolge der Werte in der Ergebnis menge direkt bestimmt Reihenfolge beachten Beispiel Listing 4 1 Alle Personen mit Namen Abbildung 4 1 Ergebnis der SELECT Anweisung Reihenfolge der Felder 91 Mit SQL Daten abfragen SELECT WM karitea Listing 4 2 Ge nderte Reihenfolge SELECT Vorname FROM tbPerson Familiennam
386. hlermeldung bei Konflikten mit der Portfreigabe in der has failed with the following error Firewall Error Nr 2003 Can t connect to MySQL server on localhost 10061 Connection Error The security settings could not be applied to the database because the connection If a personal firewall is running on your machine please make sure you have opened the TCP port 3306 for connections Otherwise no client application can connect to the server After you have opened the port please press Retry to apply the security settings If you are re installing after you just uninstalled the MySQL server please note that the data directory was not removed automatically Therefore the old password from your last installation is still needed to connect to the server In this case please select skip now and re run the Configuration Wizard from the start menu In diesem Fall m ssen Sie den Port freigeben Dr Abbildung 3 12 Windows Firewall Firewall unter Windows co z Allgemein Ausnahmen Erweitert Der Computer wird durch de s Firewall g Der windows Firewall tr gt zum Schutz des Computers bei indem der Zugriff durch nicht autorisierte Benutzer auf den Computer ber das Internet bzw ein Netzwerk verhindert wird O on j Diese Einstellung blockt den Zugriff auf den Computer f r alle au en liegenden Quellen mit Ausnahme derjenigen die auf der Registerkarte Ausnahmen entsprechend ausgew hlt sind C Keine Ausnahmen
387. holz Herr Tisson Thomas Neustadt 17 29221 Celle 29 04 76 1 22 Herr Kohlbausch Hans Prinzengarten 5 29223 Celle 02 06 56 1 23 Herr berholz Matthias Lindenstra e 4 29227 Celle 05 08 85 2 24 Frau Petersen Annemarie Neustadt 3 29221 Celle 05 08 34 1 25 Clean GmbH Frau _Havenstein Katrin Lauensteinplatz 8 29225 Celle 03 03 86 2 26 Her _S lzer Bernd Nordweg 27 29229 Celle 15 04 83 3 27 Frau Jakobi Irmgard Vogelbeerweg 3 29223 Celle 03 04 62 1 28 Frau Hoopmann Kirsten Akazienweg 45 29221 Celle 27 02 87 2 29 Herr Roberts Oliver J gerheide 3 29227 Celle 23 03 39 1 30 Herr Meyer Ewald Am Weinberg 15 20221 Celle 21 11 58 1 31 Herr Meyer Helmut Sonnenweg 13 29223 Celle 11 09 56 1 32 Herr Maier Siegfried Kampweg 3 29303 Bergen 01 07 60 2 33 Frau Rabiga Annelore Dorfstra e 17 29303 Bergen 23 05 51 1 34 Bohlen amp Co Frau Pfaff Else rtzestra e 5 29303 Bergen 19 12 37 2 3 Frau Pfaff Hertha Kreuzweg 8 29303 Bergen 12 01 41 3 36 Frau Mengel Margrit Rosenstra e 8 29303 Bergen 30 09 49 2_ 39 Herr Kramm Heiko Luxhoop 5 29303 Bergen 07 07 88 1 38 Herr F rster Ernst J rgen Achtergarten 1 29348 Eschede 13 10 46 1 39 Herr Dreyer Manfred Thieleweg 3 29348 Eschede 23 03 62 2 40 Frau F rster Iris Salzmoor 11 29328 Fa berg 17 06 69 1 41 Herr Wieckenberg Peter Wieseweg 21 29328 Fa berg 06 04 56 3 42 Herr Stechert Otto Am Geh ge 2 29328 Fa berg 26 04 31 1 43 Frau Krenz Ingrid Ericaweg 17 29313 Hamb hren 09 09 51 2 44 Frau Licht Marion Beethovenstra e 10
388. hrt aber nat rlich zu sehr unterschiedlichen Ergebnissen je nachdem ob Sie mit Tabellen Abfragen oder beispielsweise Makros ar beiten 2 W hlen Sie im Datenbankfenster die Schaltfl che NEU Sie erhalten ein neues kleines Fenster NEUE TABELLE Abbildung A 31 Importoption f r die Neue Tabelle Erstellung neuer Tabellen aus Datenblattansicht vorhandenen Dateien Be Entwurfs ansicht Ess Tabellen Assistent EEE Tabelle importieren Tabelle verkn pfen Dieser Assistent importiert Tabellen und Objekte aus einer externen Datei in die aktuelle Datenbank 402 MS Access 3 W hlen Sie hier die Option TABELLE IMPORTIEREN und best tigen Sie die Auswahl mit OK 4 Sie sehen ein Fenster zur Dateiauswahl aus dem Sie die Quelldatei f r die anzulegende Tabelle ausw hlen k nnen Wenn Sie die CD dieses Bu ches noch nicht verwendet haben legen Sie sie ein und w hlen darauf die Ordner Datenbanken MSAccess Kurse Achten Sie darauf dass Sie unten im Auswahlfenster den Typ der zu importierenden Dateien auf Excel umstellen siehe Abbildung A 32 Voreingestellt ist der Typ f r MS Access Datenbanken Abbildung 1 32 Auswahl der Excel Dateien Suchenin kurse a AIA X GE Extras f r den Import Importieren E tbDozent xls e tbKurs xis amp tbKursbesuche xIs Ba tbKursthema xls amp ltbPerson xis Dateiname Importierer Netzwerk v Dateityp Microsoft Excel xls K A
389. hst die Struktur der Tabelle mit DESC tbKurs Wenn Sie auf Ihrer CD in die Datei Kurse trt schauen datenban ken MySQL kurse sehen Sie folgende Zeilen INSERT INTO tbKurs KID Kurskennung KTHID KursdauerStunden Kursbe ginn Kursende Zertifikat Gebuehr Ustpflichtig DID VALUESC CE17 Cel1le17 Word 4 40 2007 04 23 2007 04 27 eigen 280 00 833 INSERT INTO tbKurs KID Kurskennung KTHID KursdauerStunden Kursbe ginn Kursende Zertifikat Gebuehr Ustpflichtig DID VALUESC CE20 Cel1le20 Word 4 40 2007 07 09 2007 07 13 eigen 280 00 J 812 INSERT INTO tbKurs KID Kurskennung KTHID KursdauerStunden Kursbe ginn Kursende Zertifikat Gebuehr Ustpflichtig DID VALUESC CE23 Celle23 Access 5 36 2007 08 06 2007 08 10 eigen 350 00 N 812 Es folgen noch eine Reihe weiterer Zeilen Bei der Datei handelt es sich wie der um SQL Anweisungen mit denen die Daten in die Tabelle tbKurs einge f gt werden k nnen Dies erreichen wir mit der Zeile mysql exe uroot pmasterkey kurse lt Kurse txt Die angegebenen Daten werden in die Tabelle tbKurs geladen Wir wollen das Laden der Daten in die Tabelle tbKurs berpr fen Dazu gen gt uns eine andere einfache SQL Anweisung vielleicht die SQL Anwei sung schlechthin mysq1 gt SELECT FROM tbKurs Mit dieser Anweisung werden alle Daten angezeigt die in der Tabelle tbKurs gespeichert sind Das Ergebnis k nnen Sie der Abbild
390. hte vom Benutzer SYSTEM sowie von Benut zern vergeben werden deren Rolle entweder ADMIN oder DBA ist oder die in der RESOURCE Rolle eine GRANT OPTION auf die eigenen Objekte haben 12 7 Rechte entziehen REVOKE Rechte m ssen nat rlich auch wieder entzogen werden k nnen Der zentrale Befehl zum Entzug von Berechtigungen ist die REVOKE Anweisung Die Grun didee und die Syntax entsprechen genau der GRANT Anweisung Die Frage lautet Was darf womit durch wen nicht mehr gemacht werden In die Welt von SQL bersetzt bedeutet das dann REVOKE rechte ON datenbankobjekte FROM benutzerliste Bei der Ausgestaltung der verschiedenen Rechte und Datenbankobjekte rich ten sich die verschiedenen Hersteller normalerweise auch nach ihrer jewei ligen Implementierung der GRANT Anweisung Es soll testweise ein neuer Benutzer meier erzeugt werden der die Tabelle tbPerson vollst ndig bearbeiten darf w hrend er bei den Dozenten neben der Auswertung nur einf gen und ndern darf Anschlie end werden dem Benutzer alle Rechte entzogen und der Benutzer wird wieder entfernt siehe Listing 12 2 Benutzerkonzepte verschiedener Datenbanken 12 CREATE USER meier IDENTIFIED BY hase Listing 12 2 GRANT SELECT INSERT UPDATE ON kurse tbDozent TO meier Erzeugen eines Benutzers GRANT ALL ON kurse tbPerson TO meier und L schen mit REVOKE ALL ON kurse tbDozent FROM meier REVOKE ALL ON kurse tbPerson FROM meier DROP USER meier Rechtev
391. ibut 225 WM karitez Abbildung 7 2 Grafische Elemente eines 226 Entity Relationship Modells Entwicklung eines Modells Attribute Schl ssel Datenbanken modellieren Es gibt verschiedene Varianten des ERM die sich durch die Art der Darstel lung und die Menge der enthaltenen Informationen unterscheiden Wir wol len hier die urspr ngliche Schreibweise von Chen verwenden Die drei Grundelemente Entit t Entity Beziehung Relationship und Attri but Attribut sind in Abbildung 7 2 dargestellt Die grafische Darstellung erfolgt als Rechteck Entit t Raute Beziehung und abgerundetes Rechteck oder Ellipse bzw Kreis Attribute Entit t Beziehung Attribut 7 2 1 Entit ten Die Entwicklung eines Entity Relationship Modells beginnt meistens mit der Suche nach den Entit ten Will man aus einer Beschreibung und aus Gespr chen mit dem Anwender ermitteln welche Entit ten f r die L sung seines Problems infrage kommen ergeben sich aus diesen Gespr chen und Nieder schriften oft eine Reihe von Anhaltspunkten Gute Kandidaten f r Entit ten sind Substantive die oft verwendet werden und zum Problemumfang geh ren E Substantive die Dinge oder Ideen beschreiben die Sie durch weitere Ei genschaften genauer beschreiben k nnen E Substantive von denen mehrere reale Objekte existieren m Substantive die Aktivit ten beschreiben oder die sp ter leicht aus ande ren Informatione
392. ich ber die Browser Ober fl che anmelden Verwenden Sie jetzt als Username kurse mit dem Passwort pwkurse Hat der Import funktioniert k nnen Sie ber den Objekt Browser das Ergebnis kontrollieren Durch Ausf hrung des Skripts haben Sie ein Datenbankschema erzeugt das wie unser Benutzer kurse hei t Sie k nnen dieses Schema jetzt inhaltlich kontrollieren indem Sie das Auswahlmen des OBJECT BROWSER ffnen auf BROWSE und dann auf TABLES verzweigen siehe Abbildung 3 34 gt w v v O Object Browser L Utilities Create gt Browse gt Browse iews Indexes Sequences Types Functions Triggers Synonyms Oracle Sie kommen in das bersichtsfenster des Browsers Hier sind zun chst die f nf Tabellen des Schemas f r die Kursdatenbank vorhanden siehe Abbil dung 3 35 Sie k nnen jeweils auf die Tabellennamen klicken um sich die Struktur der einzelnen Tabellen anzusehen Tables J p Ja TBDOZENT TBKURS TBKURSBESUCHE TBKURSTHEMA TBPERSON Sollte die Anmeldung nicht funktionieren oder sollten keine Tabellen vor handen sein ffnen Sie die Datei CreateKurse sql im Oracle Ordner unter Datenbanken auf Ihrer CD mit einem normalen Editor wie dem Notepad Ent fernen Sie die letzte Anweisung exit aus der Datei und speichern Sie sie neu auf Ihrer Festplatte ab Versuchen Sie danach erneut das Skript OraKurse bat zu starten Sie sollten jetzt nach Eingabe des Passwortes die Fehlermeldun gen s
393. ichkeiten von MySQL Die DEVELOPER MACHINE ist die typische Konfigu ration f r einen Entwicklungsrechner auf dem die Datenbank einen Teil der Entwicklungsumgebung darstellt Andere Entwicklungswerkzeuge und eventuell auch andere Datenbankmanagementsysteme werden parallel ben tigt Daher sollte MySQL nicht zu viel Speicher verwenden Dazu kommt dass in der Entwicklungsumgebung zumeist nicht allzu gro e Datenmengen verarbeitet werden m ssen Somit ist diese Konfiguration geeignet um die Datenbank resourcenschonend zu betreiben wenn nicht allzu hohe Anforderungen an die Performance gestellt werden Die SERVER MACHINE ist die typische Konfiguration f r einen Webserver bei Server Machine dem MySQL schon gr ere Datenmengen und vor allem viele lesende Anfra gen bearbeiten muss Daher werden gr ere Ressourcen insbesondere Speicher auf dem Rechner ben tigt Andererseits m ssen noch ein Web server wie Apache und eine Reihe von PHP Python oder Perlskripten f r ein CMS einen Webshop oder sonstige Anwendungen ausgef hrt werden k nnen sodass nicht alle Ressourcen von MySQL beansprucht werden d r fen Diese Konfiguration stellt also einen Kompromiss zwischen Performance der Datenbank und anderen Anwendungen dar Schlie lich gibt es noch den dedizierten Datenbankserver sei es in einer Cli Dedicated Server ent Server Umgebung oder ebenfalls in einer Webumgebung mit verschie Machine denen Hardwareservern f r die ein
394. ichnis m glich Wechsle in das angegebene Laufwerk Wechsle in das bergeordnete Verzeichnis Zeige alle Dateien im aktuellen Verzeichnis an Nach dem Aufruf des Fensters f r die Eingabeaufforderung befinden Sie sich beispielsweise an der unten angegebenen Stelle w hrend MySQL unter C Programme MySQL MySQL Server 5 0 bin installiert ist d Dokumente und Einstellungen Harry gt Sie geben ein C cd Programme va MO M cd MySQL cd MySQL Server 5 0 cd bin dir Jetzt m ssten Sie in etwa das Bild aus Abbildung 3 15 sehen Das Programm mysqladmin exe dient der Administration von MySQL erf llt mysqladmin exe also etwa die Funktion des MySQL Administrators Hiermit k nnen die grundlegenden Anweisungen f r den technischen Betrieb des Datenbank managementsystems erteilt werden Mit dem Aufruf C Programme mysq1 MySQL Server 5 0 bin gt mysqladmin help k nnen Sie die Optionen aufrufen die beim Aufruf des Programms angege ben werden k nnen Der Pfad muss nur eingegeben werden wenn Sie sich nicht in dem Verzeichnis befinden bzw der Pfad nicht bei der Installation eingetragen wurde Im Folgenden werden wir dies voraussetzen und ihn weglassen So k nnen Sie sich beispielsweise als Benutzer root anmelden und pr fen ob der MySQL Server antwortet mysqladmin uroot pmasterkey ping Beachten Sie dass nach dem Parameter beispielsweise nach p der Wert hier das Passwort direkt und ohne Leerzeichen angeschlos
395. icht das INSERT INTO aus 3 4 MS Access 3 4 1 Gr nde f r die Nutzung MS Access ist eines der Datenbanksysteme die in diesem Buch schwerpunkt m ig als Grundlage der Beispiele und bungen verwendet werden Im Fall von MS Access sind die Beispiele f r MS Access 2003 erstellt die zurzeit meistverbreitete Version F r die Nutzer lterer Versionen von MS Access 97 2000 ist hier keine ltere MS komplette Datenbank beigef gt Sie k nnen aber wie die Nutzer aller Ver Access Versionen sionen von MS Access eine eigene Datenbank anlegen indem Sie die beige f gten Excel Dateien importieren Das Verfahren ist in Anhang A unter MS Access ausf hrlich beschrieben F r die Nutzer von MS Access 2007 ist die beigef gte Datenbank nutzbar Access 2007 Sie k nnen sie bei Bedarf auch konvertieren Bei der Oberfl che gibt es nat rlich ein paar Unterschiede die Sie aber beim Umgang mit SQL nicht besonders behindern sollten 65 W kaites 66 Gr nde f r MS Access MDB Datei Tipp Die Beispieldatenbanken MS Access wird hier als eines der Datenbankmanagementsysteme f r die bungen verwendet obwohl es in vielen Bereichen etwas untypisch ist und von erfahrenen Datenbankanwendern als kleine M nze eingestuft wird Man sieht da oft so ein virtuelles Naser mpfen Gleichwohl ist es die Daten bank mit der viele Anwender als Erstes in Ber hrung kommen einfach weil sie als Teil der MS Office Umgebung von Microsoft
396. ie Software die aber den blichen Restriktionen hinsichtlich einer kommerziellen Nut zung unterliegt In diesem Buch wird die Version 2 2 verwendet andere Ver sionen sind aber hnlich Gleiches gilt auch f r StarOffice mit Star Base Nat rlich gibt es stets neuere Versionen die aber zumindest den hier voraus gesetzten Funktionsumfang beinhalten sollten 77 Willkommen zu OpenOffice org 2 2 shittee O2 Willkommen zu OpenOffice org 2 2 1 willkommen Dieser Assistent wird Sie durch die Lizenzbedingungen und die Registrierung von OpenOffice org f hren 2 Lizenzbedingungen klicken Sie auf Weiter um Fortzufahren HSQL Abbildung 3 50 Start des Installations assistenten f r OpenOffice 83 is Kapitel3 Die Beispieldatenbanken Abbildung 3 51 Installation von OpenOffice OpenOffice org 2 2 Build contributed in collaboration with the community by Sun Microsystems Inc For credits see VUN http www openoffice org welcome credits html microsystems ameme Nach der Installation von OpenOffice k nnen Sie openBase aufrufen Suchen Sie zuvor auf der CD unter datenbanken openBase kurse nach der Kursda tenbank kurse odb Wenn Sie die Datei direkt mit dem Windows Explorer in ein Verzeichnis Ihres Rechners kopieren m ssen Sie an den Schreibschutz denken ffnen Sie die kopierte Datei mit einem rechten Mausklick w hlen Sie EIGENSCHAFTEN und entfernen Sie gegebenenfalls den Haken f r den Schreib
397. ie Daten bank Mit ihm k nnen Sie insbesondere die Struktur Ihrer Tabellen er mitteln Es ist of ratsam im Browser ein Fenster oder eine Registerkarte mit diesen Inhalten ge ffnet zu halten um leichter nachschlagen zu k n nen 390 Oracle SQL Hier erfolgt die eigentliche Eingabe und Verwaltung der SOL An weisungen Ein Fenster mit diesem Werkzeug sollten Sie stets ge ffnet halten um die SOL Anweisungen testen zu k nnen UTILITIES Dies stellt die Oberfl che einer Reihe von Zusatzprogrammen dar die Oracle anbietet Obwohl viele davon den Umgang mit der Daten bank deutlich erleichtern sollten sie hier nicht den Schwerpunkt bilden da es um SQL geht E APPLICATION BUILDER Weiter gehende Anwendungen auf der Datenbank Sie sollten testweise einmal SQL aufrufen wie in Abbildung 1 11 dargestellt 7 Licens f o Getting 4 Leamt o Docur soL jes o Forum Ss SQL Commands gt SQL Commands c SAL Scripts Enter commana Query Builder gt Sie k nnen in dem jetzt angebotenen Fenster die komplette Eingabe Aus f hrung und Ergebniskontrolle der SQL Anweisungen ausf hren siehe Abbildung 1 12 Home gt SOL gt SOL Commands Y Autocommit Display 20 4 SELECT Familienname Vorname FROM tbPerson Der obere Teil des Fensters erlaubt die direkte Eingabe von SQL Anweisun gen Geben Sie testweise das angezeigte Beispiel an Zum Aufruf des Befehls m ssen Si
398. ie Form PRODUKT BAUTEIL LIEFE RANT Der Grad der Beziehung ist dann 3 tern re Beziehung Wechselwirkungen und Abh ngigkeiten zwischen Entit ten werden durch Beziehungen Assoziationen dargestellt Eine Beziehung gilt im Normalfall zwischen genau zwei Entit ten So l sst sich eine Ehe als Beziehung ist ver heiratet zwischen den beiden Entit ten EHEMANN und EHEFRAU definieren EHEMANN ist verheiratet mit EHEFRAU Dieselbe Beziehung l sst sich aber auch verallgemeinern indem Sie Ehefrau und Ehemann zu einer Entit t PERSON zusammenfassen Es ergibt sich dann die Beziehung PERSON ist verheiratet mit PERSON Das Entity Relationship Modell ERM Hinter einer solchen Beziehung verbergen sich dann konkrete Zuordnungen beispielsweise Herr Meyer ist verheiratet mit Frau Meyer Herr Schulz ist verheiratet mit Frau Schulz EB Herr M ller ist verheiratet mit Frau M ller L denscheid Eine Beziehung bezieht sich also normalerweise auf zwei oder eine Entit t in zwei Rollen Wesentlich f r eine Beziehung ist dabei dass es sich immer um einen Zusammenhang zwischen Entit ten handeln muss sie also nicht als Attribut einer Entit t aufgefasst werden kann Beziehung Beschreibung Beispiele 1 n eins zu n oder eins zu viele Normalfall Eine Auspr gung der einen Entit t kann maxi mal einer Auspr gung der anderen Entit t zugeordnet werden umgekehrt aber k n nen es viele sein angestell
399. ie Syntax mit ON verwenden da diese durchg ngig unterst tzt wird Der NATURAL JOIN ist dar ber hinaus im produktiven Betrieb generell mit gro Ber Vorsicht zu handhaben Hier f hren nderungen der Feldnamen zu einer impliziten nderung des JOIN sei es dass Feldnamen die vorher gleich waren nicht mehr gleich sind sei es dass andere Feldnamen pl tzlich gleich lauten Gerade wenn die Ergebnisse der SELECT Anweisung noch von anderen Programmen weiterverwendet werden kann dies zu schwer aufzusp renden Fehlern f hren bungen zur SELECT Anweisung mit USING JOIN und NATURAL JOIN Erstellen Sie f r die folgenden Aufgaben soweit m glich jeweils eine SELECT Anweisung mit USING JOIN und mit NATURAL JOIN nur MySQL und Oracle 1 Erstellen Sie eine Liste aller Kurse mit Kennung und Kursthema der tat s chlichen und der geplanten Kursdauer 4 5 3 1 Tabellen miteinander verbinden JOIN 2 Erstellen Sie eine alphabetische Liste aller Dozenten mit Familienname Vorname PLZ Ort und Stundensatz siehe 4 5 1 2 4 5 3 2 3 Erstellen Sie eine eindeutige alphabetisch sortierte Liste aller Kursteil nehmer mit Familienname und Vorname die an einem Kurs zum Thema Access teilnehmen siehe 4 5 2 1 4 5 3 3 4 Ermitteln Sie f r alle Dozenten ihren Familiennamen Vornamen Stunden satz und die Geb hr der Kurse die sie zurzeit betreuen siehe 4 5 2 2 4 5 3 4 4 5 4 Non Equi JOIN Wir bleiben noch im
400. ie alle Datens tze die in den bungen des Abschnitts 6 1 5 eingef gt wurden 6 3 1 Es sollen alle Kursteilnehmer aus der Tabelle tbKursbesuche entfernt wer den die einen oder mehr Fehltage haben 6 3 2 Es sollen alle Kursteilnehmer aus der Tabelle tbKursbesuche entfernt wer den die mit einem Gutschein bezahlen U6 3 3 L schen Sie alle Kursthemen aus der Tabelle tbKursthema bei denen aus der Kursbeschreibung zu entnehmen ist dass der Kurs etwas mit Pro grammen oder Programmierung zu tun hat 6 3 4 L schen Sie alle Dozenten aus der Tabelle tbDozent die entweder selbst st ndig sind oder als Titel Meister tragen 6 3 5 E E u E Datenbanken modellieren Datenbanken sind ein sinnvolles Hilfsmittel zur Verwaltung umfangreicher strukturierter Datenbest nde Mit SQL Abfragen wie wir sie in den vorheri gen Abschnitten behandelt haben k nnen Informationen schnell gewonnen und genutzt werden Voraussetzung ist allerdings dass die Daten in der Datenbank in einer vern nftigen Struktur vorliegen 7 1 Das 3 Ebenen Modell 7 1 1 Anforderungen an das Datenbankmodell Im Folgenden werden die wesentlichen Aspekte der Datenbankmodellierung betrachtet an einigen Stellen auch vereinfacht So musste beispielsweise bei der Modellierung mehr auf das Ergebnis als auf den Prozess eingegangen werden Bestimmte Modellierungsaspekte wie hierarchische Beziehungen und einige andere Konstrukte werden nicht weiter d
401. ie sich an Abbildung 1 8 Programmelemente von Oracle Database 10g Express Edition 389 5 Anhang A Anhang Benutzung der Datenbanksysteme Abbildung A 9 Anmeldung im Browser in der lokalen Datenbank Enter your database username and password Username kurse Password essee Click here to learn howto get started Nach der Anmeldung gelangen Sie in das bersichtsfenster der Oberfl che siehe Abbildung A 10 Abbildung A 10 bersichtsfenster Oracle A Oracle Microsoft Internet Explorer DR Datei Bearbeiten Ansicht Favoriten Extras 2 7 Qua a A E Osun Heroin O a a RS Adresse http 127 0 0 1 8080 apex f p 4500 1000 2398896960047551 E 5 v EJ wechseinzu Links ORACLE Database Express Edition Oo 2 Logout Help User KURSE License Agreement o Getting Started Learn more o Documentation o Forum Registration o Discussion Forum Product Page Utilities Application Builder BD Internet Hier finden Sie die zentralen Anwendungen ADMINISTRATION Dient der Verwaltung des Datenbankzugriffs ber Be nutzer sowie des physikalischen Speichers und der Netzwerkeinstellun gen Diesen Bereich m ssen Sie zun chst nur beachten wenn Sie die Passw rter beispielsweise f r die Superuser ndern wollen Ratsam ist dies wenn Sie sich im Netz befinden und Ihre Inhalte sch tzen wollen m OBJECT BROWSER Der Object Browser dient der bersicht ber d
402. ie zu Orten mit weniger als drei Personen geh ren Das kann aber nicht mit einer WHERE Klausel funktionieren da diese vor der GROUP BY Klausel abgearbeitet wird und der SQL Interpreter daher zum Zeitpunkt der Bearbeitung der WHERE Klausel noch gar nicht wei wie viele Datens tze zu einem Ort geh ren werden Daher muss eine M glichkeit geschaffen werden die Ergebnismenge noch einmal zu filtern nachdem die Gruppenbildung erfolgt ist Daf r gibt es die HAVING Klausel der SELECT Anweisung Die HAVING Klausel Wir wollen jetzt also auch Eigenschaften von gruppierten Datens tzen nut zen um die gew nschten Daten auszuw hlen also in Gruppendatens tzen filtern Dazu nutzen wir die HAVING Klausel der SELECT Anweisung um auf die gew nschten Datengruppen zu filtern Soll beispielsweise f r jeden Ort in der Personentabelle tbPerson ermittelt Beispiel werden wie viele Personen dort wohnen und sollen nur die Orte ausgegeben werden in denen mindestens drei Personen wohnen so kann dies mit der folgenden SELECT Anweisung erreicht werden SELECT p Ort COUNT AS Personen in der Datenbank Listing 4 49 FROM tbPerson AS p Orte mit mindestens drei GROUP BY p Ort P j D k HAVING COUNTC gt 3 ersonen in der Datenban ORDER BY COUNT DESC Das Ergebnis ist dasselbe wie das in der Abbildung 4 44 Es entsteht aller dings auf andere Art War es oben eher Zufall dass nur Gruppendatens tze mit mindestens drei Datens tzen ber
403. iert wurden optimiert werden Dabei werden Erweiterungen und gegebenenfalls nderungen am rela tionalen Schema durchgef hrt bei spielsweise durch das Einf gen von Indizes Logisches Schema mit phy sischen Eigen schaften wie Indizes Daten typen und andere 223 E E u E W karitez Tabelle 7 1 Forts Idealtypische Vorgehens weise bei der Erstellung einer Datenbank Am Anfang ist das Modell 224 Definition Modell Datenbanken modellieren Phasenname T tigkeiten Ergebnisse Implementierung In der letzten Entwurfsphase erfolgt die Schema wird in Definition des internen Schemas Es der Datenbank werden geeignete Speicherstrukturen implementiert und Zugriffsmechanismen darauf fest gelegt Ein wichtiger Aspekt ist auch das Laufzeitverhalten des DBMS das durch einen effizienten Zugriff auf die relevanten Daten verbessert werden kann In der Datendefinitionssprache DDL des DBMS werden nun das phy sische Schema Tablespaces Indi zes das logische Schema Tabellen und das externe Schema VIEws implementiert Die Festlegung der Zugriffsrechte erfolgt ebenfalls in dieser Phase 7 2 Das Entity Relationship Modell ERM Das Entity Relationship Modell kurz als ERM bezeichnet steht zumeist am Anfang jedes Datenbankentwurfs Beim konzeptionellen Entwurf geht es darum aus den meist unstrukturierten Informationen die man ber den Inhalt einer Datenbank hat ein Modell
404. ieser besitzt auf Windows eine kleine Oberfl che die aber nicht zur Eingabe von SQL Anweisungen geeignet ist Die zeichenorientierte Oberfl che die unmittelbar zur Verf gung steht haben wir gerade getestet Sie ist letztlich wenig kom fortabel Daher sollten Sie zus tzlich eine grafische Oberfl che installieren Eine der verf gbaren Oberfl chen ist ebenfalls im Unterverzeichnis MySQL der CD vorhanden die MySQL Tools Sie k nnen sie auch direkt von MySQL und verschiedenen Websites laden Zur Installation der MySQL Tools starten Sie mysql gui tools 5 0 r12 win32 msi aus demselben Verzeichnis wa O M Abbildung 3 17 Start der Installation Welcome to the Setup Wizard for MySQL Tools von MySQL Tools iS MySQL Tools for 5 0 Setup Wizard The Setup Wizard will allow you to modify repair or remove MySQL Tools for 5 0 To continue click Next Nach dem Start k nnen Sie die Installation neu erstellen beziehungsweise modifizieren Eine benutzerdefinierte Installation CUSTOM SETUP zeigt Ihnen die einzelnen Komponenten Der SQL Administrator dient der Verwaltung der Datenbank also des Service der Benutzer der Verbindungen der Datensicherung und ande rer Aktivit ten die nichts mit dem eigentlichen Inhalt in Form der Tabel len zu tun haben Der Query Browser ist das eigentliche Werkzeug f r die Eingabe und Ausf hrung der SQL Anweisungen Die meisten Anweisungen unserer Beispiele sind hier einzugeben Das M
405. ifft einen Artikel Es sollen Kundenlisten erstellt werden mit deren Hilfe den Kunden gezielt Angebote im Rahmen von Aktionen gemacht werden k nnen Au erdem will man eine ganze Reihe von Informationen abfragen k nnen beispielsweise wann welcher Kunde welche Waren gekauft hat wel che Ums tze man mit welchem Artikel macht oder wie hoch die Lagerbe st nde sind Das Unternehmen B roFix handelt mit einem breiten Sortiment f r den B robedarf Es m chte eine Datenbank aufbauen die ihm Auskunft ber Einkauf und Verkauf verschiedener Artikel seines Sortiments gibt B roFix besteht aus zwei Firmen der B roFix KG und der B ro Versand GmbH Die B roFix KG betreibt mehrere Ladengesch fte w hrend die B ro Versand GmbH ihre Kunden im Versandhandel beliefert Zus tzlich hat sie in der Nachbarstadt noch die Paul und Weiss B robedarf GmbH bernommen die dort mehrere Gesch fte betreibt B roFix m chte eine gemeinsame Daten bank f r die drei Firmen betreiben Alle Kunden einschlie lich der Versand kunden bilden einen gemeinsamen Kundenstamm Die Waren sind verschie denen Warengruppen zugeordnet Jeder Artikel hat einen von mehreren vordefinierten Mehrwertsteuers tzen Die Kunden erteilen Bestellungen die aus mehreren Bestellpositionen bestehen k nnen Jede Bestellposition betrifft einen Artikel Es sollen Kundenlisten erstellt werden mit deren Hilfe den Kunden gezielt Angebote im Rahmen von Aktionen gemacht werden k nnen Au erde
406. igration Toolkit dient der Datenmigration und wird uns nicht wei ter besch ftigen Abbildung 3 18 Die verschiedenen Custom Setup Komponenten der Select the program Features you want installed grafischen Tools MySQL Tools for 5 0 Setup Wizard Click on an icon in the list below to change how a Feature is installed Feature Description Common components For all GUI tools Common Components MySQL Administrator MySQL Query Browser MySQL Migration Toolkit Language Support This Feature requires OKB on your hard drive 55 W kaites 56 Abbildung 3 19 Anmeldung als root Die Beispieldatenbanken Nach der Best tigung erfolgt die Installation Sie k nnen nach der Installa tion die Programme ber das normale Start Men von Windows aufrufen Starten Sie den MySQL Administrator f r Ihre erste Testanmeldung Sie wer den aufgefordert sich zu identifizieren siehe Abbildung 3 19 MySQL Administrator 1 2 12 WN Myst Administrator Mit MySQL Serverinstanz verbinden Gesp Verbindungen k Server Host localhost Part 13306 Nutzername root xxsex Passwort Sie m ssen die Adresse des Rechners mit dem Datenbankserver angeben Dies kann eine TCP IP Adresse oder der Name des Rechners im Netzwerk sein Arbeiten Sie lokal auf einer Maschine k nnen Sie entsprechend 127 0 0 1 oder einfach localhost angeben Sie erinnern sich dass MySQL den Benutzer root bei der Installatio
407. il M g lichkeit enth lt Ich freue mich auf einen regen Austausch 383 Anhang Benutzung der Datenbanksysteme Wenn Sie sich f r eines der Datenbankmanagementsysteme entschieden haben das Sie f r die Beispiele dieses Buches verwenden wollen aber sich mit dem System noch nicht intensiv besch ftigt haben und nicht genau wis sen wie Sie es handhaben m ssen sind hier einige Hinweise zusammenge stellt Diese Hinweise ersetzen naturgem kein Benutzerhandbuch sollten aber als Starthilfe f r einen schnellen Einstieg dienen A 1 MySQL Die Eingabe der SQL Anweisungen geschieht mithilfe des My SQL Query Werkzeugs Dieses k nnen Sie entweder ber den MySQL Adminstrator mit EXTRAS MYSQL QUERY BROWSER oder direkt in der Programmgruppe MySQL ber MYSQL QUERY BROWSER aufrufen siehe Abbildung 1 1 Abbildung 1 1 MySQL Administrator Aufruf aus Windows MySQL Migration Toolkit 6 MySQL Query Browser Q MySQL System Tray Monitor MySQL Server 5 0 Sie m ssen sich danach normal beim MySQL Server anmelden Der Benutzer root ist bei der Erstellung angelegt worden das Passwort im Standard ist masterkey Die Angabe eines Standardschemas ist keine Pflicht Sie k nnen bei der folgenden Meldung die Schaltfl che IGNORIEREN w hlen In diesem Fall m ssen Sie aber danach im Query Browser im rechten Fenster ein Schema ausw hlen Klicken Sie dazu auf Kurse oder falls schon angelegt auf artikel Mit der rechten M
408. im r schl ssel 2 Die neue Tabelle wird ber einen Fremdschl ssel a1 in der urspr ngli chen Tabelle der dem Prim rschl ssel a1 der neuen Tabelle entspricht verbunden 7 5 5 Grenzen der Normalisierung Vielleicht kennen Sie den alten Satz schon Wenn man einen Hammer hat sieht jedes Problem wie ein Nagel aus In unserem Fall also Wenn man die Normalisierung beherrscht will man jede Datenbank normalisieren Dies ist nur bedingt sinnvoll in vielen F llen nicht mehr notwendig und manchmal sogar kontraproduktiv Hat man eine Datenbank wie wir hier ber ein Entity Relationship Modell entwickelt so ist das Ergebnis in vielen F llen bereits normalisiert weil man bereits w hrend der Entwicklung des ERM darauf geachtet hat nur wirklich zusammenh ngende Informationen in einer Entit t zusammenzufassen Es ergibt sich auf nat rliche Weise ein normalisiertes Modell Die Normalisie rung ist f r die Umstellung bestehender Datenbest nde wie beispielsweise die angesprochene Tabelle Bestellung_Kap7_redundant xls in relationale Strukturen sinnvoll bei der Neuentwicklung mithilfe des ERM aber zumeist kaum notwendig Daher muss hier das Beispielmodell auch nicht weiter normalisiert werden Der Zweck der Normalisierung ist wie gesagt die Vermeidung von Redun danz und Anomalien Der Preis den man daf r zahlt ist eine starke Zersplit terung der Datenbank in viele Tabellen und Beziehungen Diese Tabellen m s
409. immer wieder abgelegt Das ist nicht nur speicherintensiv sondern auch fehleranf llig Woher wissen wir eigentlich dass es Lauensteinplatz 8 und nicht Lauensteinplatz 9 ist wie auch einmal angegeben Welche Angabe stimmt Derartige Fehler sind sogenannte Anomalien Anomalien sind widerspr ch Anomalien liche Informationen in einer Datenbank Anomalien entstehen durch Redundanz Wird dieselbe Information mehr fach redundant gespeichert kann es zu Fehlern kommen die dann Ano malien darstellen Jeder der in der Praxis Kundendatenbanken gesehen hat wei warum wir Kataloge mehrmals bekommen unsere Nachmieter noch nach Monaten unsere Post erhalten und ehemalige Adressen scheinbar unausl schlich sind Hier werden Informationen redundant abgelegt und bei der teilweisen nderung entstehen Anomalien Anomalien k nnen bei der Eingabe entstehen So k nnen bei der erneuten Einf geanomalie Eingabe der Kundendaten Fehler gemacht werden Wird beispielsweise bei INSERT dem n chsten Auftrag der Kundenname des Kunden 2 versehentlich als Ewal Kuhn KG statt Ewald Kuhn KG eingegeben so gibt es in der Daten bank in der Bestelltabelle Datens tze die die Information beinhalten dass der Kunde 2 Ewald KUHN KG hei t andere Datens tze geben die Informa tion wieder dass er Ewal Kuhn KG hei t Das ist eine Einf geanomalie da der Fehler bei der Neueingabe eines Datensatzes INSERT Anweisung auf tritt 241
410. in dem virtuellen Gruppendaten satz nicht m glich F r das Gruppierungsfeld ist die Wertermittlung einfach Schlie lich ist die Gruppierung gerade so gebildet worden dass der Wert in dem Feld einer Gruppe berall gleich und somit auch f r den Gruppendatensatz sinnvoll ist Hier w rde f r die erste Gruppe das Feld KID beispielsweise den Wert CE17 bekommen Bei zweifacher Gruppierung gilt dies f r beide Gruppierungsfel der beispielsweise f r KID CE17 und f r die Zahlweise Gutschein Damit ist klar welcher Wert f r die Gruppierungsfelder ausgegeben wird wenn sie Bestandteil der Ausgabe sind Bei allen anderen Feldern muss aus der Menge der Werte aller Datens tze innerhalb der Gruppe ein Wert gewonnen werden Dazu werden sogenannte Aggregatfunktionen wie COUNTO verwendet Diese Funktionen beinhalten die Anweisung wie die Einzelwerte zu einem gemeinsamen Wert verdichtet werden sollen Diese Anweisung ist notwendig weil im Gegensatz zu den Gruppierungsfeldern die Werte der anderen Felder innerhalb einer Gruppe normalerweise nicht gleich sind Also gilt die Regel dass bei einer Gruppie rung alle Felder au er den Gruppierungsfeldern eine Aggregatfunktion besitzen m ssen Die Aggregatfunktion COUNTO beispielsweise bewirkt einfach die Z hlung der Datens tze der Gruppe Das w re aber doch sehr wenig Daher gibt es daneben die M glichkeit durch andere Aggregatfunktionen die Zusammen fassung Aggregation der Wer
411. indem die Enden der Beziehung mit 1 beziehungsweise n mit dem Zeichen f r unendlich markiert werden siehe Abbildung 8 13 Die Mastertabelle erh lt die 1 MS Access leitet die Darstellung aus der Verwendung des Prim rschl ssels ab Da dieser eindeu tig sein muss wird stets die Seite einer Beziehung die den Prim rschl ssel enth lt mit 1 markiert Wenn Sie zwei Tabellen ber ihre Prim rschl ssel verbinden erkennt MS Access auch dass es sich um eine 1 1 Beziehung handelt Das Verfahren funktioniert leider nicht bei Beziehungen mit mehreren Feldern sodass im Beispiel der Kunden und deren Bestellungen keine Markierung erfolgt Der Funktion tut dies aber keinen Abbruch 8 3 3 Allgemeine Integrit tsbedingung CHECK Neben den speziellen auf die Schl ssel bezogenen Bedingungen PRIMARY KEY und FOREIGN KEY gibt es au erdem die M glichkeit allgemeine Integrit tsbe dingungen anzugeben die f r alle Datens tze der Tabelle eingehalten wer den sollen Mithilfe der CHECK Integrit tsbedingung werden diese Bedingun gen definiert die vom Datenbankmanagementsystem dann bei allen Daten nderungen also insbesondere bei INSERT UPDATE und DELETE Anweisungen berpr ft werden Integrit tsbedingung CONSTRAINT name CHECK bedingung1 AND OR bedingung Abbildung 8 13 Beziehung mit referenzieller Integrit t CHECK 275 W kaites Beispiel Listing 8 7 Erzeugen der Tabelle artik
412. inen wichtigen Bestandteil vieler Ausdr cke Teilweise werden ganze Datenbanksysteme nach dem Umfang der bereitgestellten Funktionen beurteilt was aber zumindest zweifelhaft ist Es gibt zwei gro e Gruppen von Funktionen E Datensatzorientierte Funktionen die Berechnungen innerhalb eines Da tensatzes ausf hren um neue Ausdr cke zu berechnen Skalarfunktio nen E Gruppenorientierte Funktionen die basierend auf einer Gruppe Menge von Datens tzen Berechnungen innerhalb eines Datenfeldes f r die ge samte Gruppe durchf hren Aggregatfunktionen Datensatzorientierte Funktionen erlauben die Berechnung neuer Ausdr cke also neuer Spalten innerhalb der Ergebnismenge einer SELECT Anweisung Damit entstehen in der Abfrage Spalten die in keiner Tabelle der Datenbank vorhanden sind wie in unserem obigen Beispiel die Geb hr Diese Funktionen haben alle einen festgelegten Aufbau der den Funktionen in anderen Programmiersprachen entspricht FUNKTIONSNAME Parameter1 Parameter2 Der Funktionsname wird hier stets in Gro buchstaben geschrieben obwohl dies nicht zwingend notwendig ist Er ist aber hnlich wie die SOL Schl s selw rter fest definiert und wird daher hier genauso behandelt In den Klam Funktionen mern stehen die Parameter also die Werte die an die Funktion bergeben werden Wichtig ist dabei dass sowohl die Anzahl als auch der Datentyp der Parameter mit der Funktionsdefinition bereinstimmen SQ
413. information Schema Berechtigungen Ressourcen Dienstverwaltung z meier D7 Startvariablen Diesem Benutzer zugewiesene Schema Berechtigungen 2a Benutzerverwaltung Schemata Zugewiesene Berechtigungen Verf gbare Berechtigungen Aktive Verbindungen P A SELECT 1 A DELETE R umt AD Serverstatus i UPDATE CREATE R umt z E artikel FR INSERT A DROP R umt Serverprotokolle 8 information _schema A REFERENCES A GRANT R umt P Repikationsstatus 1 kuse A CREATE vI R INDEX R umt ae mysql A ALTER R umt ackup G pizza A CREATE_TMP_T R umt wiederherstellung E spezial A LOCK_TABLES R umt 4l S test A SHOW_VIEW R umt Kataloge A A CREATE_ROUTI R umt ER C A ALTER_ROUTINE R umt Benutzerkonten A EXECUTE R umt P amp meier 8 root Sie sehen hier die klassischen Rechte SELECT UPDATE DELETE INSERT aber auch weitere Rechte die sich oft auf bestimmte Datenbankobjekte beziehen Ein echtes Rollenkonzept im oben angesprochenen Sinn kennt diese MySQL Version nicht In MySQL wird das Passwort eines Benutzers mit einer eigenen SET PASS WORD Anweisung ge ndert Mit SET PASSWORD PASSWORD neues Passwort SET PASSWORD wird das Passwort des aktuellen Benutzers ge ndert F r andere Benutzer kann das Passwort mit SET PASSWORD FOR benutzer PASSWORDL neues Passwort ge ndert werden sofern der aktuelle Benutzer die Berechtigung dazu hat 12 8 2
414. ion Program Interface zur Ver f gung gestellt Ein API f r eine relationale Datenbank bietet letztlich immer eine M glich keit SOL Anweisungen an die Datenbank zu bergeben und das Ergebnis verarbeiten zu k nnen Ein API ist stets f r eine bestimmte Programmiersprache bestimmt weil Funktionen in dieser Programmiersprache zur Verf gung gestellt werden m ssen Diese Funktionen sind in der spezifischen Programmiersprache geschrieben In MySQL steht zun chst ein C API zur Verf gung mit dem aus C und C auf MySQL zugegriffen werden kann Das C API besteht aus einer Bibliothek mysql h die mit einem include mysql h in ein C Programm eingebunden wird Die enthaltenen Funktionen k nnen dann im eigenen C Programm genutzt werden mysql_server_init Anmeldeinformationen db db_connect kurse db_do_query db SELECT from tbperson mysql_close db Derartige API Schnittstellen sind in vielf ltiger Form f r die meisten Daten banken und sehr viele Programmiersprachen von C C ber C Basic Dia lekte Delphi Pascal COBOL bis hin zu den Skriptsprachen wie PHP Perl oder Listing 14 8 Einf gen eines neuen Dozenten C API Listing 14 9 Schematische Anmeldung und Ausf hrung einer SQL Anweisung 381 E arite 14 382 PHP Listing 14 10 Zugriff auf MySQL aus PHP Mit SQL Datenbanken betreiben und optimieren Python vorhanden Nicht jede Sprache l sst sich mit jedem Datenbanksys
415. ion nur die ON DELETE SET NULL und ON DELETE CASCADE Bedingung Die anderen Varianten und ON DELETE UPDATE werden nicht unterst tzt openBase verwendet wie beschrieben die REFERENCES Klausel in der aktuellen Version nur als eigene Integrit tsbedingung der CREATE TABLE Anweisung nicht als Zusatz zur Felddefinition Daher k nnen auch nur dort die ON DELETE oder ON UPDATE Bedingungen angegeben werden Die CHECK Bedin gung wird ebenfalls nicht direkt bei der Felddefinition sondern nur als zus tzliche Integrit tsbedingung am Ende der CREATE TABLE Anweisung unterst tzt Die entsprechenden CHECK Bedingungen k nnen aber dort ein fach erg nzt werden siehe Listing 8 8 CREATE TABLE artikel anr INT NOT NULL PRIMARY KEY bezeichnung VARCHAR 255 NOT NULL gebinde FLOAT einheit VARCHAR 30 wgknz INT DEFAULT O NOT NULL einstandspreis DECIMAL 6 2 listenpreis DECIMAL 6 2 mwst_art CHAR 9 DEFAULT voll NOT NULL mindestbestand INT DEFAULT O NOT NULL letzte_aenderung timestamp DEFAULT current_timestamp CHECK Ceinstandspreis gt 0 CHECK Clistenpreis gt 0 CHECK mindestbestand gt 0 CHECK Clistenpreis gt einstandspreis 1 5 FOREIGN KEY wgknz REFERENCES warengruppe kennziffer ON DELETE CASCADE ON UPDATE CASCADE FOREIGN KEY mwst_art REFERENCES mwst mwst_art ON DELETE SET DEFAULT ON UPDATE CASCADE Die Form der Definition von Integrit tsbedingungen wie in Listing 8 8 angegeben ist
416. ionen die nicht sonderlich ungew hnlich sind und zumindest teilweise bereits in vielen Systemen vorher implementiert waren zeigen wieder dass der Standard der Entwicklung in vielen Bereichen mit Abstand folgt Abschlie end soll noch eine neuere komplexe Funktion gezeigt werden die die Klassifizierung von Daten erlaubt WIDTH_BUCKET Da diese Funktion nur in Oracle vollst ndig implementiert ist werden die M glichkeiten dieser neuen Gruppierungsfunktion an einem Beispiel mit Oracle gezeigt SELECT Listing 5 12 WIDTH_BUCKET GezahlterBetrag 0 400 8 AS Klasse Gruppierung der COUNT 1 AS Anzahl Kursbesuche EROM SbKurshesuche t bezahlten Kursbesuche GROUP BY WIDTH_BUCKET GezahlterBetrag 0 400 8 ORDER BY WIDTH_BUCKET GezahlterBetrag 0 400 8 Dabei werden die Geb hren die von den einzelnen Kursteilnehmern bereits bezahlt wurden aus dem Feld GezahlterBetrag gelesen Mit der Funktion WIDTH_BUCKET werden die Daten in diesem Feld klassifiziert Der niedrigste Betrag ist 0 der h chste 400 Euro Dieser Bereich wird in 8 gleich gro e Klassen aufgeteilt WIDTH_BUCKET ermittelt f r jeden Wert zu welcher Klasse er geh rt Gruppiert und sortiert nach dieser Klassennummer erh lt man das Ergebnis in Abbildung 5 12 Abbildung 5 12 Klasse Anzahl Kursbesuche Eee tii Klassifizierte Kursbeitr ge 1 2 2 3 3 1 6 5 7 2 8 5 bungen zu den numerischen Funktionen bungen Erstellen Sie f r die folgenden Aufgaben jewei
417. ir Schemata anlegen k nnen ist es sinnvoll berfl ssige Sche mata wieder zu entfernen Das Gegenst ck zu jeder CREATE Anweisung in der SQL DDL ist immer die DROP Anweisung Entsprechend k nnen Sie ein Datenbankschema komplett mit allen Daten DROP SCHEMA mit der SOQL Anweisung DROP SCHEMA IF EXISTS schemaname oder gleichwertig DROP DATABASE IF EXISTS schemaname entfernen Probieren Sie es doch einmal mit dem oben angelegten Schema artikel2 aus 8 1 2 MS Access MS Access hat hinsichtlich des Datenbankschemas eine eingeschr nkte MS Access Funktionalit t Eine MS Access Datenbank beinhaltet ein Datenbank schema das alle im Datenbankfenster sichtbaren Informationen umfasst Datenbank und Datenbankschema fallen zusammen und werden direkt mit der Anlage einer neuen Datenbank erzeugt Beim Start von MS Access kann nicht nur eine bestehende Datenbank ge ffnet sondern auch eine neue Datenbank erzeugt werden Dazu w hlen Sie den ersten Punkt LEERE ACCESS DATENBANK und MS Access erzeugt ein neues Datenbankschema ohne dass die SQL Anweisung CREATE SCHEMA transparent wird Sie k nnen auch eine neue Datenbank anlegen wenn MS Access bereits ge ffnet ist Mit der Funktion DATEI NEU ffnet MS Access ein Fenster in dem Sie entweder eine komplett leere Datenbank neu erzeugen k nnen oder eine der bereits existierenden Musterdatenbanken als Vorlage verwenden k nnen In jedem Fall wird die aktuelle Datenbank geschlossen da je
418. ise aus Bruttobetr gen die Nettobetr ge oder die Umsatzsteuer berechnen l sst oder mit denen sich der Gewinn aus vorhandenen Datenfeldern bestimmen l sst E Alphanumerische Funktionen die sich auf alle alphanumerischen Daten typen wie CHAR oder VARCHAR anwenden lassen und Texte oder einzelne Zeichen aus anderen Texten extrahieren Texte miteinander verbinden Zeichen ersetzen oder l schen Damit lassen sich beispielsweise Adressen aus ihren Einzelteilen neu kombinieren oder umgekehrt in l ngeren Text teilen Teilbegriffe oder Worte suchen E Datumsfunktionen die im Wesentlichen auf DATE TIME TIMESTAMP aber auch auf Zeitintervallen beruhen um Zeiten zu vergleichen Zeitr ume zu berechnen oder auch nur die aktuelle Zeit zu erg nzen E Casting Funktionen die im Zweifelsfall Werte zwischen Datentypen um wandeln soweit dies sinnvoll und aufgrund der Werte machbar ist E Sonstige Funktionen die beispielsweise einen logischen Ablauf erlauben Systemvariablen abfragen oder sonstige Informationen liefern Beachten Sie dass die Einteilung im SQL Standard dem Datentyp folgt den die Funktion erzeugt nicht dem den sie prim r als Parameter verarbeitet So gilt die Ermittlung der L nge einer Zeichenkette als numerische Funktion weil sie zwar eine Zeichenkette also eine alphanumerische Eingabe besitzt Freiheiten R ckgabewert Einteilung nach dem Ergebnisdatentyp 169 WM kaites 170 Unterschiedlicher Funktions
419. ise f r ein INSERT oder UPDATE die relevanten Daten bereitstellt 10 1 CREATE mit Unterabfragen In einigen Datenbanken wie MySQL oder Oracle besteht auch die M glich keit neue Tabellen auf der Basis bestehender Tabellen mithilfe eines CREATE TABLE und einer Unterabfrage zu erstellen Sie erinnern sich an die Erstellung einer Tabelle mit CREATE CREATE TABLE Felddefinition Integrit tsbedingung Felddefinition Integrit tsbedin gung Wird eine Unterabfrage verwendet werden die Felder mit ihrer Definition wie Datentyp und L nge aus den bestehenden Strukturen gelesen und m s sen bzw d rfen nicht neu angegeben werden Dadurch vereinfacht sich die Definition der Tabelle erheblich Es soll jetzt beispielsweise eine eigene Tabelle erstellt werden in der nur die Beispiel Teilnehmer des Kurses CE23 mit einigen wichtigen Informationen gespei chert werden Dies kann mithilfe von MySQL mit folgendem Beispiel gesche hen 317 Karite 10 Listing 10 1 Erstellen einer neuen Tabelle f r den Kurs CE23 Abbildung 10 1 Die neue Tabelle ist Teil des Schemas Abbildung 10 2 Inhalt der neu erzeugten Tabelle Schnappschuss Listing 10 2 Erstellen der Tabelle mit Zeitstempel Timestamp 318 Oracle Unterabfragen in der DDL und DML CREATE TABLE tbce23 SELECT p Familienname p Vorname kb KID kb Fehltage kb Zeugnis FROM tbKursbesuche kb INNER JOIN tbPerson p ON p PID kb KTI
420. iskutiert Bedenken Sie aber bitte dass dies eine Einf hrung in SQL nicht in den Datenbankentwurf ist Dieses Kapitel ist hier enthalten um mehr Hintergrundverst ndnis f r die Entstehung des Datenbankschemas zu schaffen das im n chsten Kapitel dann mit SQL realisiert wird Die Struktur einer relationalen Datenbank wird von ihrem Modell von den Vern nftiges Modell Tabellen den Feldern den Prim r und Fremdschl sseln bestimmt Was ist aber eine vern nftige Struktur Welches Modell ist richtig welches falsch Immer wenn man mir diese Frage gestellt hat habe ich geantwortet dass es keine richtigen und falschen Modelle gibt nur nutzbare und weniger nutz bare Modelle Ein vern nftiges Modell bedeutet daher zun chst dass es sich zu dem Zweck eignet f r den eine Datenbank gedacht ist Der Ausgangspunkt des Daten bankmodells sind die betrieblichen Prozesse die anschlie end unterst tzt werden sollen 219 S Kapitel 7 ANSI SPARC Abbildung 7 1 Das 3 Schichten Modell einer Datenbank 220 Datenbanken modellieren Weil Datenbanken wenn sie erst einmal in Betrieb sind und Abfragen und nderungsmechanismen realisiert sind nur mit erheblichem Aufwand ge n dert werden k nnen bedarf es eines sorgf ltigen Datenbankentwurfs der dann mit SQL umgesetzt wird 7 1 2 Die drei Ebenen des Datenbankmodells Vor dem eigentlichen Entwurf soll kurz auf das 3 Ebenen Modell eingegan gen werden Dieses Modell wird auch al
421. ispielsweise TBPERSON stellt eine ganze Reihe an Informationen zur Verf gung So lassen sich die Attribute mit allen Eigenschaften PROPERTIES und der Inhalt der Tabelle DATA darstellen auf der DATA Seite m ssen Sie die Tabelle noch mit OPEN ffnen Aber auch die SQL DDL zur Erzeugung der Tabelle METADATA sowie die Zugriffsrechte PERMISSIONS auf die Tabelle lassen sich anzeigen Fremdschl sselbeziehun gen DEPENDENCIES eine Beschreibung f r den Benutzer DESCRIPTION sowie Abbildung 1 18 bersicht Datenbank 395 5 Anhang A Abbildung A 19 Eigenschaften eine Tabelle 396 Abbildung A 20 Ubersicht ber vorhandene Abfragen Anhang Benutzung der Datenbanksysteme vorgenerierte SQL Anweisungen SQL STATEMENTS runden die Informa tionen ab Gerade wenn es in diesem Buch um die DDL und die DCL geht kann diese Sicht genutzt werden um die Auswirkungen der einzelnen Anweisungen zu pr fen Table TBPERSON ata l Metadata Permissions Dependencies Description SQL Statements IB Columns Indexes a Unique Constraints amp Check Constraints a Referential Constraints Triggers Allow Nulls Name Type Character Set Collation Default Value PID INTEGER No FAMILIENNAME VARCHARISO No VORNAME VARCHAR 50 Yes PLZ CHAR 5 Yes STRASSE VARCHAR 50 Yes ORT VARCHAR 50 DEFAULT Celle Yes GEBURTSDATUM DATE Yes A A MS Access 1 4 1 SQL Anweisungen eingeben MS Access bietet neben der rein
422. it der PID 1 aus der Tabelle tbPerson ausgew hlt Die entsprechende Person wird in einen neuen Kurs CExx eingetragen Die Fehltage werden auf O gesetzt Es gibt kein Zeugnis daf r wird auch keine Geb hr verlangt INSERT INTO tbKursbesuche Listing 10 6 SELECT p PID 1000 p PID CExx 0 N N Gutschein 0 0 Einf gen eines non B Kursbesuches mit i p einer Unterabfrage Nach erfolgreicher Eingabe existiert ein neuer Datensatz mit der KBID 1001 Sie k nnen den Datensatz leicht in der Tabelle kontrollieren 321 Karite 10 Listing 10 7 Alle Personen die noch keinen Kurs besuchen werden f r CExx eingetragen Abbildung 10 4 Tabelle tbKundenbesuche 322 nach erfolgreichem INSERT Unterabfragen in der DDL und DML Jetzt soll das Beispiel erweitert werden und alle Personen diesem neuen Kurs CExx zugewiesen werden die bisher noch keinen Kurs besucht haben Dazu wird zun chst der urspr ngliche Zustand wiederhergestellt und der eben eingef gte Datensatz gel scht Die KBID kann direkt angesprochen wer den Es reicht ein einfaches DELETE FROM tbKursbesuche WHERE KBID 1001 Jetzt soll die neue INSERT Anweisung erstellt werden Anstatt einen Daten satz mit der festen PID 1 auszuw hlen wird wiederum eine Unterabfrage in die Unterabfrage geschachtelt die mithilfe des EXISTS Operators ermittelt welche Personen noch keinen Eintrag in der Tabelle tbKursbesuche besitzen Die
423. iteinander verbinden JOIN 4 5 Tabellen miteinander verbinden JOIN 4 5 1 Der Klassiker INNER JOIN Wir konnten bisher recht komfortabel Daten aus den Kursbesuchen filtern um beispielsweise zu ermitteln wer seine Geb hren noch nicht in nennens wertem Umfang bezahlt hat Dabei haben wir aber f r jeden Kursteilnehmer stets nur die KTID die Kursteilnehmer Identifikationsnummer angegeben Sch n w re es wenn Si auch seinen Namen und die Anschrift ermitteln k nnten Da es sich bei dem Fremdschl ssel KTID zugleich um den Prim r schl ssel PID der Personentabelle tbPerson handelt k nnen Sie dort nat r lich leicht die weiteren Daten zu den Personen ermitteln indem Sie einfach mit der ermittelten Nummer suchen Sie m ssen daf r aber beide Tabellen miteinander verbinden Wir wollen daher jetzt Daten aus mehreren Tabellen verbinden um so zu umfassenderen Informationen zu gelangen Wir betrachten nicht mehr iso lierte Tabellen sondern Zusammenh nge zwischen verschiedenen Daten und k nnen so bergreifende Daten auswerten Lassen Sie uns das oben beschriebene Problem weitere Informationen ber Personen zu erg nzen ausarbeiten Wir wollen dabei den Namen und die Adresse aller Kursteilnehmer bestimmen die noch keine 250 bezahlt haben Dazu sind grunds tzlich zwei Arbeitsschritte notwendig 1 Zun chst werden in der Tabelle tbKursbesuche die Datens tze mit gerin geren Zahlungen mithilfe einer SELECT Anweisung ermittel
424. itere Anweisungen zur physischen Datenspeicherung Daf r erfordern Indizes den zus tzlichen Speicherplatz f r die Indextabelle und oder den B Baum E den zus tzlichen Verwaltungsaufwand f r den Aufbau und die Pflege des Index Typische Einsatzm glichkeiten bei denen der Einsatz eines Index lohnt sind der h ufige direkte Zugriff auf einzelne oder wenige Datens tze ber ein oder mehrere bestimmte Datenfelder E der Zugriff auf Datens tze mit bekanntem Wert oder bekanntem Pr fix E h ufig genutzte Fremdschl sselbeziehungen Typische F lle bei denen ein Index eher zu Nachteilen f hrt sind E h ufige nderungen im Vergleich zu der Abfrageh ufigkeit E h ufige Abfragen von mehr als etwa 30 der Daten Nat rlich gibt es auch technische Beschr nkungen So gilt in MySQL ab 5 x beispielsweise E bis zu 64 Indizes pro Tabelle E bis zu 16 Spalten pro Index bis zu 1 000 Byte pro Index Neben den numerischen Typen d rfen auch CHAR VARCHAR BLOB und TEXT f r Indizes verwendet werden und sie k nnen Pr fixe haben also eine definierte L nge 14 4 Weitere Anweisungen zur physischen Datenspeicherung Die Daten eines Datenbanksystems werden logisch in Tabellen gespeichert Physisch werden diese Tabellen auf Festplatten gespeichert Dazu wird vom Datenbanksystem Speicherplatz reserviert Die Reservierung dieses Spei cherplatzes einschlie lich des physischen Speicherortes in Form des Lauf werkes erfolgt normal
425. itrag f r den Mittelwert der Beitr ge und ein Feld Anzahl f r die Anzahl der Kursteilnehmer Wir m ssen die Abfrage jetzt so konstruieren dass alle Felder dieser Zielta belle mit sinnvollen Werten belegt werden k nnen Als Quelle dieser Werte kommen feste Werte Funktionen oder andere Tabellen aus der Datenbank infrage Wir wollen hier beispielhaft die Tabelle tbKursbesuche verwenden der wir alle Werte entnehmen k nnen Dazu wird die Tabelle wie bei Aus wahlabfragen blich zun chst in die Abfrage bernommen Wichtig ist also dass oben in der Abfrage die Quelle der Informationen steht das Ziel ist bereits festgelegt worden Nachdem Sie die Abfrage als Anf geabfrage markiert haben wird im unte ren Bereich des Abfragefensters zus tzlich eine neue Zeile zur Verf gung gestellt In der neuen Zeile ANF GEN AN k nnen Sie die Namen der Felder in der Tabelle tbKurs_Statistik angeben die Sie gerade als Zieltabelle gew hlt haben siehe Abbildung 6 4 Diese Feldnamen stellen das Ziel der INSERT Anweisung dar hier werden die Informationen gespeichert Die Zeile FELD beinhaltet die Quelle der Werte also die Werte und Ausdr cke die in die ent sprechenden Felder eingetragen werden sollen Die Werte in der oberen Zeile werden also in die Felder der unteren Zeile ANF GEN AN geschrieben Die Zuordnung erfolgt paarweise oben der Wert unten der Feldname Sie k nnen die einzelnen Felder durch Aufklappen ausw hlen Jetzt m ssen Sie noc
426. kehrt Wie wir noch sehen werden k nnen Abweichungen durch we niger restriktive Isolationsstufen erm glicht werden E Dauerhaftigkeit Bis zum Abschluss einer Transaktion k nnen alle Be fehle r ckg ngig gemacht werden Mit Abschluss der Transaktion sind die durch die Transaktion ausgel sten nderungen dauerhaft in der Da tenbank gespeichert 13 4 Sperren Jede Transaktion stellt sicher dass ein Benutzer nderungen vornehmen kann ohne dass ein anderer Benutzer die von der nderung betroffenen Bereiche gleichzeitig ndern kann Dazu sind sogenannte Sperren notwen dig ACID 361 E Karite 13 Sperrstrategie Sperre auf Satzebene Record Sperre auf Tabellenebene 362 Exklusive Sperre Transaktionen Sperren sind Bereiche der Datenbank die zumeist kurzzeitig f r einen Benutzer zur alleinigen Verwendung reserviert werden und f r alle anderen Benutzer nicht mehr zugreifbar sind Das hat zwar f r den einen Benutzer den Vorteil der st rungsfreien nderung der Datenbank f r alle anderen Benutzer allerdings den Nachteil dass bestimmte Bereiche der Datenbank zumindest weitgehend nicht mehr zugreifbar sind Ein solcher Zustand behindert nat rlich den Betrieb der Datenbank und muss auf ein Mindestma reduziert werden Mindestma bedeutet dabei zeitlich dass die Transaktion auf die unbedingt notwendige Zeit beschr nkt wird Mindestma bedeutet auch dass die anderen Benutzer nicht mehr als unb
427. kript LoescheFireArtikel aufgerufen Um die Datenbank wieder zu laden wird das Skript FireArtikel aufgerufen Beide Skripte je Datenbank gehen jeweils davon aus dass Sie das Passwort masterkey f r den Benutzer SYSDBA eingerichtet haben wie es in der fol genden Installation empfohlen wird Die Existenz des Schemas k nnen Sie in Firebird mit der hier verwendeten Konsole unter DATABASES im Baum des linken Fensters pr fen Mit einem Doppelklick auf die Datenbank ffnet sich eine Liste die unter anderem den Eintrag TABLES zeigt W hlen Sie diesen Eintrag aus k nnen Sie anschlie end durch Doppelklick auf die gew nschte Tabelle im rechten Fenster ein weiteres Fenster mit der Struktur der Tabelle ffnen In der Registerseite PROPERTIES sehen Sie die Struktur unter DATA nach der zus tzlichen Auswahl von OPEN den Inhalt der Tabelle Wenn Sie eine Datenbank wie kurse oder artikel neu aufbauen wollen k n nen Sie dies durch den Start der beiden entsprechenden Skripte tun Sie m s sen sie hinterher unter Umst nden noch registrieren Dazu rufen Sie bei spielsweise in der Konsolenoberfl che DATABASE REGISTER auf Lassen Sie sich auch nicht davon irritieren dass die Datenbank nach der Ausf hrung des L schskriptes noch sichtbar ist Mit einem Doppelklick auf den Namen der Datenbank im linken Fenster erhalten Sie eine Fehlermeldung Die Datenbank ist lediglich noch nicht abgemeldet was auch nicht notwendig ist da wir sie wieder neu erzeu
428. kup a database View a list of users currently connected to the server Restore a database Server Local Server Database KURSE FDB User SYSDBA W hlen Sie beispielsweise TABLES dann erhalten Sie die bersicht in Abbil dung 3 47 ti _IBOConsole Console View Server Database Tools Help yY 4m BE Name Owner Description Es TBDOZENT SYSDBA a TBKURS SYSDBA amp TBKURSBESUCHE SYSDBA TBKURSTHEMA SYSDBA Es TBPERSON SYSDBA Servers a Local Server D Databases 5 7 KURSE FDB ka Domains z a Views a Stored Procedures PR Extemal Functions P Generators Exceptions Blob Filters Server Local Server Database KURSE FDB User SYSDBA 5 objects listed Hier k nnen Sie sich jetzt ber den aktuellen Stand informieren Ein Hinweis soll an dieser Stelle noch erfolgen Sollten Sie im Lauf der Arbeit wieder auf den aktuellen Stand kommen wollen k nnen Sie die Datenbank mit DROP DATABASE entfernen und dann wie beschrieben neu aufbauen Das Kom mando ist auch im Skript LoescheFireKurse enthalten F hren Sie es bei geschlossener Datenbank aus und starten danach wieder FireKurse so haben Sie den Ausgangszustand wiederhergestellt g Drop Database Abbildung 3 46 bersicht ber die Datenbank KURSE nach der Anmeldung Abbildung 3 47 Tabellen bersicht Abbildung 3 48 Entfernen der Datenbank 81 W kaites 82 Abbildung 3 49 Tabelle in Firebird Die Beispieldaten
429. kursiver 117 Self JOIN 118 Syntax 116 ber mehrere Felder 133 USING 134 USING JOIN 123 VIEW 289 K Kardinalit t 230 Kartesisches Produkt 131 Klammer eckige 90 geschweifte 90 Klammersetzung 122 Klammerung 108 Konsistenz 361 Konto 340 Kursdatenbank 35 L LAST 143 194 LEAST 175 Leerzeichen 94 LEFT OUTER JOIN 127 LENGTH 180 LIKE 110 LIMIT 213 Literal 164 167 LN 175 L schabfrage 217 L schanomalie 242 L sung 35 LOG 175 LOWER 180 LTRIM 181 M Mandantenf higkeit 133 Mastertabelle 269 MAX 143 194 MDB 66 MEDIUMINT 157 Memo 155 Metadaten 249 MIN 143 194 MINUS 334 MOD 174 176 Modell 220 224 Modellierung 219 MS Access 65 MULTISET 152 MyISAM 46 360 MySQL 41 mysql 53 MySQL Query Browser 58 mysqladmin 53 N NATURAL JOIN ber mehrere Felder 134 USING JOIN 124 NCHAR 156 NO ACTION 271 Non Equi JOIN 125 Normalform 245 Normalisierung 243 NOT 108 110 NOT EXISTS 259 NULL 129 163 200 259 OUTER JOIN 129 NUMBER 158 NUMERIC 151 159 Numerisch 151 165 NVARCHAR 156 O Oberfl che 21 Firebird 77 MySQL 54 Oracle 71 Prinzip 21 ODBC Modus 172 OLE 162 ON 116 Condition JOIN 123 ON DELETE 269 ON UPDATE 269 openBase 82 openOffice orgbase 82 openOffice orgbase siehe openBase Operator 110 OR 108 147 Oracle 69 ORDER BY 100 147 329 Syntax 103 Stichwortverzeichnis ae m m OUTER JOIN 127 FULL OUTER JOIN 130 LEFT OUTER JOIN 127 MS Access 128 RIGHT OUTER JO
430. l ssel identifiziert jeden Datensatz der Tabelle eindeutig und erm glicht damit ein wesentlich schnelleres Abrufen von Daten O Prim rschl ssel automatisch hinzuf gen O Kein Prim rschl ssel 11 Schlie lich wird im letzten Schritt die Tabelle benannt Hier k nnen Sie jeweils den vorgegebenen Dateinamen aus Excel verwenden siehe Abbildung A 38 Nat rlich k nnen Sie auch eigene Tabellennamen ver geben In MS Access hat sich eingeb rgert dass man Pr fixe verwendet Im Datenbankfenster haben Sie bereits gesehen dass es neben Tabellen Abfragen Formulare Berichte Seiten Makros Module und Gruppen gibt Bei komplexen Anwendungen kann es hier schnell zu Verwechslun gen kommen Da Tabellen die einzigen origin ren Datenbankobjekte dar stellen die die eigentlichen Daten enthalten nehmen sie eine Sonderrolle ein In MS Access geht das in der F lle der Objekte oftmals leider etwas verloren Importieren in Tabelle Sie erhalten jetzt eine Best tigungsmeldung von MS Access Danach sehen Sie im Datenbankfenster dass jetzt als erste Tabelle die Tabelle tbPerson ein getragen worden ist Sie haben also als Erstes die Tabelle tbPerson aus einer Excel Datei erzeugt Mit demselben Verfahren k nnen Sie jetzt die weiteren Tabellen importieren Importieren Sie f r die Kursdatenbank die folgenden f nf Tabellen Person Kursbesuche Dozent Kursthema Kurs Die weiteren Dateien sind Testdateien f r spezielle Beispiel
431. lant ist F r sie existiert kein passender Satz in der Kurstabelle daher fallen sie bei einem INNER JOIN wie in Listing 4 35 unter den Tisch Tabellen miteinander verbinden JOIN SELECT tbPerson Familienname tbPerson Vorname tbDozent Titel tbDozent Qualifikationen tbKurs Kurskennung FROM CtbDozent INNER JOIN tbKurs ON tbDozent DID tbKurs DID INNER JOIN tbPerson ON tbDozent PID tbPerson PID ORDER BY tbPerson Familienname tbPerson Vorname Familienname Yorname Titel Qualifikationen Kurskennung Bucz Susanne Industriekaufmann Windows Rechnungswesen HannoverI0 windows Bucz Susanne Industriekaufmann Windows Rechnungswesen Hannover91 Windows Cromberg J rg Mathematiker windows Word Celle17 Word Weiss Peter Informatiker Word Windows Datenbanken Hannover89 Access Weiss Peter Informatiker Word Windows Datenbanken Celle24 Access Weiss Peter Informatiker Word Windows Datenbanken Celle23 Access Weiss Peter Informatiker Word Windows Datenbanken Celle20 word Um auch die Datens tze einer Tabelle zu erhalten die in einer anderen Tabelle keine Entsprechung finden ben tigen wir den OUTER JOIN Es sollen beispielsweise alle Dozenten mit ihren in der Datenbank abgelegten Kurseins tzen angegeben werden Als Besonderheit wollen wir auch diejeni gen Dozenten auflisten die zurzeit nicht in Kursen eingeplant sind Bei den Dozenten wird der Familienname und Name angegeben nach denen auch sortiert wird SELECT tbPers
432. le oder Abfrage hinzuf gen die Abfrage Tabellen O Abfragen tbKursbesuche tbKursthema Hilfe tbPerson Eine Besonderheit von openBase ist dabei dass nicht nur die Namen der Fel der aus der Datenbank direkt sondern auch sogenannte Alias verwendet werden d rfen Alias werden von allen gr eren Datenbanksystemen unter st tzt openBase hat hier eine elegante M glichkeit gefunden sie auch unmittelbar in die grafische Oberfl che zu integrieren Au erdem lassen sich die ausgew hlten Felder zur Sortierung der Ergebnis datens tze zur Auswahl der relevanten Datens tze Kriterien sowie zur Gruppierung mit Funktionen heranziehen Auf die Bedeutung dieser Optionen und ihre Auswirkung auf die generierte SOL Anweisung wird im Buchtext eingegangen we 7 Abfrage1 OpenOffice org Base Abfrageentwurf BAE Erstellun g einer Abfrag e Datei Bearbeiten Ansicht Einf gen Extras Fenster Hilfe in openBase A EE ibe Aela n a faae k E tbPerson PID Familienname Vorname PLZ Ort Strasse Geburtsdatum PID Familienname Vorname tbPerson tbPerson tbPerson v v v 408 openBase Haben Sie die Abfrage in der Entwurfsansicht erstellt k nnen Sie sie unmit telbar speichern Dies sollten Sie in regelm igen Abst nden tun Wenn Sie wie auch in Abbildung A 44 dargestellt nach einem Namen gefragt werden handelt es sich um den Namen unter dem
433. le vor dem Schema und den Tabellen k nnen Sie die Detailansichten jeweils ein oder ausschalten Im Prinzip haben Sie die dreistufige Hierarchie wie in Abbil dung A 7 angegeben zur Verf gung Schemata information_schema kurse 7 tbdozent gt m tbkurs 7 tbkursbesuche 7 tbkursthema tbperson PID Familienname Vorname PLZ Strasse Ort Geburtsdatum gt 8 mysql gt E test O Das Schema kurse haben Sie bereits am Anfang erzeugt Wenn Sie sich mit einem Standardschema angemeldet haben wird dieses hier bereits ge ffnet Wenn Sie sich ohne Standardschema angemeldet haben m ssen Sie dieses jetzt hier ffnen Dies ist wichtig damit MySQL wei aus welchem Schema die Tabellen und Datenfelder stammen die Sie in der SQL Anweisung ver wenden Klicken Sie mit der rechten Maustaste auf ein Schema k nnen Sie dies zum Standardschema machen Dies ist wichtig damit die entsprechen den Tabellen ohne weitere Qualifizierung gefunden werden k nnen Wenn Sie brigens den Inhalt einer Tabelle nur einfach einmal schnell testen wollen k nnen Sie mit einem Doppelklick auf einen Tabellennamen eine entsprechende SELECT Anweisung erzeugen und mit einem weiteren Dop pelklick oder mit der Schaltfl che AUSF HREN den Inhalt anzeigen Oracle Oberhalb des Fensters finden Sie noch ein kleines Suchfenster zum Suchen innerhalb des Schemafensters wenn Sie beispielsweise einm
434. len Schl ssel Beziehungen Indizes und ande rer Komponenten Dies sind letztlich die Metadaten die die Struktur der tats chlichen Daten wie in einem Katalog beschreiben Der SQL Standard sieht vor dass es als zentrale Struktur einen Katalog gibt der ein oder mehrere Schemata beinhalten kann Von einer Datenbank spricht man in der Regel wenn man die Gesamtheit aller Daten einschlie lich der eigentlichen Nutzdaten meint Leider geht die Begrifflichkeit hier oft durcheinander Manchmal werden auch Datenbank schemata als die gesamte Datenbank bezeichnet oder das Schema wird Kata log genannt Sie sollten sich hier jeweils an die in Ihrem Umfeld gebr uch liche Begrifflichkeit halten 249 W kaites CREATE SCHEMA MySQL Schema Abbildung 8 1 Zwei neue Datenbanksche mata sind erzeugt worden 250 Datenbanken erstellen SQL DDL In diesem Buch sprechen wir immer vom Datenbankschema wenn wir die Struktur meinen Die Erstellung dieser Struktur erfolgt mithilfe der SQL DDL Die erste Anweisung der SQL DDL haben Sie bereits kennengelernt es ist die CREATE SCHEMA Anweisung zur Erzeugung eines neuen Datenbank schemas CREATE SCHEMA schemaname DEFAULT CHARACTER SET zeichensatz Definition von Tabellen Dom nen Views Rechten Oft wird auch CREATE DATABASE synonym verwendet Die CREATE SCHEMA CRE ATE DATABASE Anweisung wird von den verschiedenen Datenbanksystemen recht unterschiedlich umgesetzt So ist beispielsw
435. len oder mehr Indizes effektiv einsetzen kann Allerdings k nnen andere Indexarten oder die Ein lagerung von Indextabellen und oder Datentabellen in den Hauptspeicher auch zu ganz anderen Aussagen f hren Von gro er Bedeutung ist auch die Art der Daten also die Datentypen Indi zes auf numerischen Feldern stellen zumeist kein besonderes Problem dar 377 E arite 14 378 Mit SQL Datenbanken betreiben und optimieren Soll dagegen nach bestimmten Texten wie beispielsweise Namen oder Pro duktbezeichnungen gesucht werden sind im Allgemeinen Felder mit alpha numerischen Werten betroffen Diese sind mit CHAR VARCHAR oder hnlichen Datentypen definiert und zumeist vergleichsweise gro beispielsweise 50 Zeichen f r einen Namen Das f hrt wiederum zu gro en Indizes Bei einigen Datenbanken sind Indizes auf bestimmten textuellen Feldern berhaupt nicht erlaubt Sind derartige Indizes erlaubt macht es oft Sinn nicht das gesamte Datenfeld zu verwenden sondern nur eine bestimmte Anzahl von Zeichen am Wortanfang Wird der Index mit CREATE INDEX name ON tbPerson familienname 10 definiert hat dies den Vorteil dass nur die ersten zehn Zeichen des Famili ennamens Eingang in den Index finden dieser somit nur 10 Byte an Reinin formation je Datensatz beinhaltet und nicht viel gr er als eine numerische Information ist Andererseits k nnen Sie mit den ersten zehn Zeichen den Namen bereits relativ genau ermitteln und dann den Rest
436. len tbPerson und tbDozent Fremdschl ssel Tabelle tbDozent DID PID Beschaeftigung Stundensatz Firma Titel Qualifikationen 812 1 01 07 2003 17 00 selbstst ndig Informatiker Word Windows 815 17 01 01 2002 15 00 selbstst ndig IT Kaufmann Office Datenba 821 6 15 09 2005 13 00 Dreher KG Meister CNC Steuerung o gt ac n1 mo anna ann elmanainan Manttnenntilene finden Mine Prim rschl ssel Tabelle tbPerson PID Familienname Vomame PLZ Ort Strasse Geburtsdatum 1 Weiss Peter 30529 Hannover Palmstra e 6 07 11 1963 2 Bucz Susanne 30531 Hannover Heinestra e 23 06 04 1976 4 Karmann Thomas 29227 Celle Trift 28 04 08 1954 5 Kl tzer Karl 29221 Celle Bahnhofstra e 2 13 03 1971 e 6 Weiss Karin 30529 Hannover Palmstra e 6 05 10 1962 7 Waianae Datar AMANU Brmimechwnin Nlamuan A mn 1074 Sie sehen dass der Dozent mit der DID 812 die PID 1 hat Da dies in der anderen Tabelle dem Datensatz mit dem Prim rschl ssel PID mit dem Wert 1 entspricht ist klar dass in Hannover in der Palmstra e 6 ein Peter Weiss wohnt der als der entsprechende Dozent seit dem 01 07 2003 f r einen Stun densatz von 17 unterrichtet selbstst ndig und Informatiker ist Mehrere Prim rschl sselfelder In der Praxis ergibt sich immer wieder die Problematik dass Tabellen doch mehr als ein Prim rschl sselfeld aufweisen In diesem Fall muss nat rlich auch eine entsprechende Zahl an Fremdschl sselfelde
437. lgenden Beispiel wird die Ergebnismenge zus tzlich auf die Personen eingeschr nkt deren Postleitzahl mit 29 beginnt SELECT p Familienname p Vorname p PLZ Listing 9 15 WIERE Ce PLZ LIKE 29 AND Ta p 29 mindestens einen p PID IN SELECT kb KTID FROM tbKursbesuche kb Kurs belegt haben 309 Sj Kapitel 9 310 Abbildung 9 6 Alle Kunden die mindestens einen Kurs belegt haben IN oder ANY NOT IN oder ALL Unterabfragen Sub SELECT Karmann Thomas 29227 Kl tzer Karl 29221 M ller Claudia 29596 Peredy Helmut 29221 Martens Melanie 29221 Ruppert Nicola 29301 Sander Bus 29223 Schulze Tanja 29308 Magerkurth Melissa 29336 winter Petra 29320 Der Operator IN pr ft also auf inhaltliche bereinstimmung mit mindestens einem Datensatz der Unterabfrage Das ist nichts anderes als die Verbindung ANY die ebenfalls bedeutet dass mindestens ein Datensatz denselben Datenwert liefern muss Die beiden Anweisungen SELECT FROM WHERE datenfeld IN SELECT datenfeld FROM SELECT FROM WHERE datenfeld ANY SELECT datenfeld FROM sind also identisch Umgekehrt bedeutet die Verneinung NOT IN dass kein Datensatz der Unter abfrage denselben Wert haben darf dass also alle Werte ungleich sein m s sen Daher sind auch die beiden folgenden Abfragen identisch SELECT FROM WHERE datenfeld NOT IN SELECT datenfeld FROM ER SELECT FROM WHERE datenfeld ALL SELECT datenfeld
438. lienname und Vorname der Dozenten aus Sortieren Sie die Liste alphabetisch nach Dozentennamen Qualifizieren Sie alle Angaben 4 5 2 3 4 Ermitteln Sie alle Personen die zugleich Kursteilnehmer in einem Kurs und Dozent in einem anderen Kurs sind 4 5 2 4 4 5 3 Varianten des INNER JOIN Der INNER JOIN wie wir ihn bisher vorgestellt haben wird auch als Condi tion JOIN bezeichnet weil eine Bedingung ON f r seinen Aufbau ver wendet wird Diese Bedingung Condition gibt die Vorschrift an nach der die Datens tze der Tabellen miteinander verbunden werden sollen Es gibt aber noch einige weitere Varianten des INNER JOIN die im SQL Standard definiert sind und in der Praxis vorsichtig eingesetzt in bestimmten Situationen vorteilhaft sein k nnen Dazu geh ren insbesondere der USING JOIN und der NATURAL JOIN Sie verwenden letztlich auch Bedingungen um die Tabellen zu kombinieren allerdings nur implizit Wir wollen diese Alternativen zum Condition JOIN jetzt verwenden und k nnen deren spezielle Vor und Nachteile abw gen Der INNER JOIN mit USING macht sich die Tatsache zunutze dass sehr oft das Fremdschl sselfeld der einen Tabelle eines Jorn denselben Namen hat wie das Prim rschl sselfeld der anderen Tabelle In diesen F llen beruht der JOIN im Prinzip auf einem Feld Die USING Variante des JOIN macht sich dies zunutze indem es reicht den Namen des gemeinsamen Feldes zu erw hnen FROM tabellenname1 INNER
439. ll eine Liste aller Personen ausgegeben werden die zus tzlich eine Zei Beispiel lennummerierung besitzen soll Dann kann in MySQL eine lokale Variable Zeilennummer definiert werden die anschlie end in einer SELECT Anwei sung genutzt wird START TRANSACTION Listing 13 4 SET Zeilennummer 0 Hinzuf gen einer SELECT Zeilennummer Zeilennummer 1 AS Zeile PID FROM tbPer Zeilennummerierung son COMMIT zu einer Abfrage 367 E Karite 13 368 Transaktionen Das Listing 13 4 zeigt wie innerhalb einer Transaktion zun chst der Wert definiert wird der anschlie end in der SELECT Anweisung wie in einer Schleife durchlaufen wird Grunds tzlich lassen sich auch globale Variablen verwenden die aber wegen der Seiteneffekte sehr vorsichtig zu verwenden sind Der hier beschriebene Mechanismus bleibt lokal und setzt die Verwen dung einer Transaktion voraus da nur innerhalb der Transaktion der Kon text erhalten bleibt Sie k nnen dies testen indem Sie die entsprechenden Befehle nacheinander ausf hren lassen Mit SQL Datenbanken betreiben und optimieren Die Data Control Language DCL bietet innerhalb von SQL neben den Berechtigungen und Transaktionen noch eine Reihe von Unterst tzungen bei der physischen Datenspeicherung Nachdem die physische Datenhaltung bei allen Datenbanksystemen unterschiedlich ist gibt es letztlich auch Unterschiede in der DCL Daher sollen hier abschlie end noch einige Aspekte der DCL im
440. lnen Datenbanksystemen weitgehend standar disiert weitere Datentypen sind leider nicht einheitlich benannt und teil weise auch inhaltlich unterschiedlich realisiert sodass sich hier in der Praxis immer wieder Probleme ergeben Die grunds tzlichen Datentypen f r Text Zahlen und Datums Uhrzeitangaben sind aber in allen relationalen Daten banken vorhanden und es muss auch in allen Systemen jedem Datenfeld ein Datentyp zugeordnet werden Sollten Sie sich wundern warum der Dozent keinen Namen und keine Anschrift hat so hat dies einen einfachen Grund Diese Informationen sind in einer anderen Tabelle tbPerson enthalten auf die hier nur ber die Perso nen Identifikationsnummer PID Bezug genommen wird Diese Tabelle k nnte die in Abbildung 2 7 dargestellten Datens tze enthalten ber einen gemeinsamen Wert in einem Feld hier die PID kann dann eine Beziehung hergestellt werden So kann ber den Wert 1 als PID ermittelt werden dass der Dozent 812 der Informatiker ist und dessen Qualifikationen Word Windows und Datenbanken sind Peter Weiss hei t und in Hannover in der Palmstra e 6 wohnt PID Familienname Vorname PLZ Or Strasse Geburtsdatum E 1 Weiss Peter 30529 Hannover Palmstra e 6 07 11 1963 2 Bucz Susanne 30531 Hannover Heinestra e 23 06 04 1976 4 Karmann Thomas 29227 Celle Trift 28 04 08 1954 5 Kl tzer Karl 29221 Celle Bahnhofstra e 13 03 1971 6 Weiss Karin 30529 Hannover Palmstra e 6 05 10 196
441. ls eine SELECT Anweisung 1 Erstellen Sie eine bersicht ber alle Kursbesuche mit der KTID der Ge b hr f r den Kurs und dem Rabatt Berechnen Sie au erdem eine Spalte Reduzierte Geb hr die den f r den Kurs zu zahlenden Beitrag bestimmt 5 6 2 1 2 Bestimmen Sie f r alle Kurse die Geb hr die Kosten f r den Dozenten sowie die Anzahl der Teilnehmer die man ben tigt um die Kosten zu de cken wenn neben den Kosten f r den Dozenten noch einmal der gleiche Betrag f r sonstige Kosten anf llt Geben Sie zus tzlich die Anzahl auf gerundet auf ganze Teilnehmer an 5 6 2 2 179 WM kaites Tabelle 5 13 G ngige alphanumerische 180 Funktionen Datentypen Ausdr cke und Funktionen 3 Nutzen Sie die KTHID der Kursthemen um den Wert der Exponentialfunk tion sowie die Quadratwurzel der ersten 10 Zahlen zu bestimmen 5 6 2 3 4 Nutzen Sie die Kursbesuche um 18 mal zu w rfeln also eine ganze Zufallszahl im Bereich von 1 bis 6 zu erzeugen U5 6 2 4 5 6 3 Alphanumerische Funktionen Die zweite Gruppe von Skalarfunktionen sind Funktionen die sich auf alphanumerische Datentypen anwenden lassen also auf Texte Einige wich tige alphanumerische Funktionen sind in Tabelle 5 13 zusammengestellt SQL Funktion Erl uterung Beispiel CONCATENATE alla2 gt a Die beiden Texte a und a2 CONCATENATE oder werden aneinanderge 29223 Celle CONCATENATE a a2 gt a h ngt
442. m IBOCon sole Programm heraus mit dem Men befehl TooLs INTERACTIVE SQL starten k nnen Hier k nnen Sie Ihre SOL Anweisungen direkt eingeben Als Hilfe k nnen Sie die beiden Fenster im linken Bereich verwenden Das obere Fens ter zeigt alle Tabellen des aktuellen Schemas Sie k nnen durch einen einfa chen Klick auf einen Tabellennamen die Felder der Tabelle unten anzeigen lassen Durch einen Doppelklick im unteren Bereich k nnen Sie Feldnamen direkt in Ihre SOL Anweisung bernehmen Durch einen Doppelklick im oberen Bereich k nnen Sie den Tabellennamen beispielsweise f r die FROM Klausel bernehmen Interactive SQL Fie Edit Query Database Help ame BE ALS u Z ea TEDOZENT TBKURS TBKURSBESUCHE TBKURSTHEMA TBPERSON select from TEDOZENT TA Modified Client dialect 3 Data Plan Statistics Add Table vu se Table Alias BESCHAEFTIGUNGSBEGINN STUNDENSATZ FIRMA TITEL QUALIFIKATIONEN Add Field C Programme FirebirdYFirebird_2_O KURSE FDB Firebird Die Ausf hrung der Anweisung erfolgt grunds tzlich mit dem Blitzsymbol Das Ergebnis der Anweisung wird dann im unteren Bereich angezeigt oder es wird eine entsprechende Fehlermeldung angezeigt Das Ergebnis der Abfrage kann als Tabelle gespeichert und dann mit anderen Werkzeugen weiterverarbeitet werden Aber auch die SQL Anweisung kann gespeichert werden Dabei werden grunds tzlich alle ausgef hrten Anweisungen gepuf
443. m MySQL angelegt Die Funktionsf higkeit pr fen Sie am besten mithilfe der grafi schen Benutzeroberfl che Geben Sie beispielhaft die SQL Anweisung SELECT FROM tabellenname ein und f hren Sie sie aus Wenn Sie im Query Browser rechts doppelt auf die Tabelle klicken wird auto matisch die passende SQL Anweisung erzeugt Sie brauchen sie nur noch Tipp auszuf hren Nach der Ausf hrung k nnen Sie ganz unten die Anzahl ermit telter Datens tze ablesen beispielsweise 10 Zeilen in 0 0178 s 0 0004 s geholt Sie sollten in tbDozent 5 Datens tze in tbKurs 7 Datens tze in tbKursbesu che 18 Datens tze in tbKursthema 11 Datens tze und in tbPerson 20 Daten s tze finden Wenn Sie den Inhalt genau berpr fen wollen sollten Sie Ihre Datenbankinhalte mit den im Anhang abgedruckten Tabellen vergleichen F r gr ere Importe von Daten bietet MySQL noch das zus tzliche Utility Import mysqlimport exe Damit k nnen Sie gr ere Datenmengen komfortabel in die Datenbank einf gen Insbesondere k nnen tabellarisch aufbereitete Daten sehr schnell eingelesen werden Diese Daten m ssen auch nicht zwin gend auf dem Client liegen sondern k nnen auch direkt auf dem Server lie gen Im Prinzip f hrt mysqlimport exe die SQL Anweisung LOAD DATA INFILE aus Wir wollen darauf im Rahmen der Administration und der Utilitys zur ckkommen F r unsere kleinen Datenmengen der bungsdatenbanken und zum Verst ndnis der SQL Logik re
444. m verwaltet Bruchteile von Sekunden m ssen gesondert eingestellt werden F r die Abspeicherung sieht der Standard ein Format DATE vor das sowohl das Datum als auch die Uhrzeit beinhaltet also eine Angabe in der Form JJJJ MM TT HH MM SS Bei der Umsetzung gibt es im Wesentlichen zwei Varianten Entweder wird das Format wie beispielsweise in Oracle gem dem Standard umgesetzt oder es werden f r Datum und Uhrzeit getrennte Formate DATE und TIME geschaffen die dann f r die Speicherung des Datums beziehungsweise der Uhrzeit verwendet werden Manche Datenbanken wie MySQL bieten dann zus tzlich noch einen Datentyp DATETIME um beides zu speichern Datentypen 5 m Ein besonderer Datentyp ist der Zeitstempel TIMESTAMP Dabei handelt es TIMESTAMP sich prinzipiell ebenfalls um eine Kombination von Datum und Uhrzeit Da der Hauptzweck des Zeitstempels zumeist die eindeutige Markierung von Einf ge oder nderungszeitpunkten ist gibt es noch die M glichkeit die Zeit durch die Angabe von Sekundenbruchteilen und oder der Zeitzone ein deutiger zu gestalten Einige Datenbanken erlauben bis zu neun Nachkommastellen bei der Sekun denangabe so kann man bei Oracle mit TIMSTAMP 6 beispielsweise Zeitangaben wie 12 23 15 362562 zulassen also eine auf die Millionstelsekunde genaue Angabe wenn dies denn die Rechneruhr hergibt Die Zeit TIME wird wie gesagt in einem 24 Stunden System mit jeweils GMT 2 Stellen f r
445. m will man eine ganze Reihe von Informationen abfragen k nnen beispielsweise wann welcher Kunde welche Waren gekauft hat wel che Ums tze man mit welchem Artikel macht oder wie hoch die Lagerbe st nde sind Im Text sind jetzt gezielt Verben hervorgehoben die im Zusammenhang mit den ausgew hlten Entit ten stehen Setzen Sie die Beziehungen in das ERM um so erhalten Sie das Bild aus Abbildung 7 9 Umsetzung in das relationale Modell Sie sehen dass ein Kunde nicht zwingend eine Bestellung abgegeben haben muss es werden also auch Interessenten gespeichert Umgekehrt kann eine Bestellung nur von genau einem Kunden aufgegeben werden Eine Bestel lung besteht aus mindestens einer Bestellposition kann aber nat rlich belie big viele Positionen umfassen Die Bestellposition dient der Speicherung der Bestellmenge f r einen Artikel Dementsprechend wird einer Bestellposition auch genau ein Artikel zugeordnet Der Artikel beschreibt den Typ also nicht das einzelne Exemplar Entsprechend kann ein Artikel mehreren Bestellposi tionen zugeordnet werden Ist ein Artikel noch nie von einem Kunden bestellt worden ist er bisher auch keiner Bestellung und damit keiner Bestellposition zugeordnet Entsprechend ist hier auch das Minimum 0 zuge lassen Jeder Artikel geh rt zu genau einer Warengruppe die ihrerseits aus vielen aber mindestens einem Artikel besteht Jedem Artikel wird ein Mehr wertsteuersatz eindeutig zugeordnet Jeder Mehrwertsteuersat
446. me Vorname 1 Weiss Peter 2 Bucz Susanne 4 Karmann Thomas 5 Kl tzer Karl 6 Weiss Karin 7 Weiss Peter 8 Meier Kathrin 9 Schmidt Karl 10 M ller Claudia 11 Lisewski Bernd atensatz 1 von 14 PLZ 30529 30531 29227 29221 30529 38134 38154 30529 29596 30890 Abbildung 3 55 Ergebnis der Abfrage in openBase Ort Strasse Geburtsdatum Hannoy Palmstra e 07 11 63 Hannoy Heinestra e 06 04 76 Celle Trift 28 04 08 54 Celle Bahnhofstr 13 03 71 Hannoy Palmstra e 05 10 62 Braunsc Glanweg 4 02 03 74 Braunsc Welfenallee 03 05 81 Hannoy Lavesallee 225 06 49 Breitent In den Fuhr Barsingl Roggenkam 06 06 60 ONE an 7117 02 A1 Familienname Vorname 1 Weiss Peter 2 Bucz Susanne 4 Karmann Thomas 5 Kl tzer Karl 6 weiss Karin 7 Weiss Peter 8 Meier Kathrin 9 Schmidt Karl 10 M ller Claudia 11 Lisewski Bernd Datensatz 1 14 30529 30531 29227 29221 30529 38134 38154 30529 29596 30890 Abbildung 3 56 Design Ansicht in openBase Strasse Geburtsdatum Hannov Palmstra e 07 11 63 Hannov Heinestra e 06 04 76 Celle Trift 28 04 08 54 Celle Bahnhofstr 13 03 71 Hannov Palmstra e 05 10 62 Braunsc Glanweg 4 02 03 74 Braunsc Welfenallee 03 05 81 Hannov Lavesallee 25 06 49 Breitent In den Fuhr Barsingl Roggenkam 06 06 60 an 2 17 02 61 Joela E tbPerson PID Familienname Vorname PLZ Ort gt m tbPerson v
447. meist nur 1 Bit ben tigt wird sowie die M glichkeit gro e Bin rdateien beispielsweise f r Multimedia Objekte wie Bilder Filme oder Musik zu speichern ANSI MySQL MS Access Oracle Firebird openBase BLOB BLOB OLE Object BLOB CLOB BLOB BINARY 64k 64k 4 GB 64k NR LONGBLOB LONGVAR 2 GB BINARY BIT BIT n BINARY BOOLEAN teilweise Ja Nein BOOLEAN Ja Nein Bei bin ren Werten kann beispielsweise in MySQL auch eine gr ere Bit Anzahl definiert werden also beispielsweise BIT 8 Generell wird aber in den neuen SQL Standards von der Verwendung dieser bin ren Datentypen abgeraten NULL Werte Auf BLOB Daten kann mit den Standard SQL Anweisungen nicht zugegriffen werden Die BLOB Typen wurden haupts chlich eingef hrt um derartige Daten nicht au erhalb der Datenbanken speichern zu m ssen Neben den reinen BLOB Daten gibt es inzwischen ganze Bereiche wo die Datentypen um XML Daten geografische Daten oder multidimensionale Daten mit den zugeh rigen Erweiterungen des Standard SQL in die Datenbanksysteme integriert wurden Diese Erweiterungen sind aber zum einen datenbankspe zifisch und zum anderen so komplex dass sie den hier besprochenen Umfang von SQL bei Weitem bersteigen 5 2 NULL Werte Eine Besonderheit von SQL ist der Wert NULL NULL wird immer gro geschrie ben und bedeutet immer das Fehlen eines Wertes also das Fehlen einer Information was streng genommen selbst wieder eine In
448. meist selten gebrauchten trigonometrischem Funktionen und Winkelumrechnungen wie ACOS X ASIN X ATAN X in verschiedenen Varianten COS X COT X SIN X TAN X sowie DEGREES X RADIANS X Betrachten wir den Aufruf und die Funktion an einem Beispiel Es gibt ver Beispiel schiedene Rundungsfunktionen ROUND CEIL und FLOOR die im Wesentli chen ein mathematisches Runden ein Aufrunden und ein Abrunden bewir ken In Listing 5 10 sind alle drei Varianten verwendet worden SELECT Listing 5 10 Gebuehr Runden mit verschiedenen KursdauerStunden Funktionen Gebuehr KursdauerStunden ROUND Gebuehr KursdauerStunden 2 AS gerundet CEIL Gebuehr KursdauerStunden AS aufgerundet FLOOR Gebuehr KursdauerStunden AS abgerundet FROM tbKurs t 177 WM kaites Abbildung 5 10 Ergebnis der Abfrage mit Rundungen Beispiel Listing 5 11 berblick Kursaufteilung 178 bei siebenst ndigem Unterricht Abbildung 5 11 Ergebnis der Abfrage aus Listing 5 11 Datentypen Ausdr cke und Funktionen Bei der mathematischen Rundung ist ein zweiter Parameter angegeben wor den der die Anzahl der Nachkommastellen angibt Dadurch wird hier nicht auf ganze Zahlen sondern auf die zweite Nachkommastelle also auf Hun dertstel gerundet Die Eingabe der Parameter mit runden Klammern ist in allen Systemen gleich Das Ergebnis der Abfrage ist in Abbildung 5 10 zu sehen Gebuehr KursdauerStun Gebuehr Kursd gerundet aufg
449. meisten dieser Optionen spie len f r uns hier keine gro e Rolle Wir wollen aber im n chsten Abschnitt die Funktionsweise am Beispiel der ersten Beispieldatenbank zeigen x Eingabeaufforderung mysql Note that all text comman must be first on line and end with N Synonym for help sc Clear command sr Reconnect to the server Optional arguments are db and host Nd Set statement delimiter NOTE Takes the rest of the line as new NG Send command to mysql server display result vertically Ng Exit mysql Same as quit lt g gt Send command to mysql server sh Display this help st Don t write into outfile Sp Print current command lt R gt Change your mysql prompt Ng Quit mysql lt s gt Rebuild completion hash lt N Execute a SQL script file Takes a file name as an argument Ns Get status information from the server lt T gt Set outfile to_outfilel Append everything into given outfile su Use another database Takes database name as argument W Show warnings after every statement nowarning w gt Don t show warnings after every statement For server side help type help contents Verlassen Sie dazu zun chst mysql ere mit dem Kommando exit oder quit Sie gelangen auf die Betriebssystemebene zur ck wie Sie an dem ver nder ten Cursor sehen 3 3 4 Die grafische Oberfl che MySQL Tools MySQL meldet sich nach dem Start ausschlie lich als Dienst D
450. mit sich dann die Syntax der UPDATE Anweisung ergibt UPDATE tabellenname SET feldnamel ausdruck1 feldname ausdruck WHERE bedingungsliste Jetzt sollen alle Kurse die sich auf Access beziehen den Zusatz Daten bank erhalten Au erdem soll die Kursdauer dieser Kurse um 50 erh ht werden Zun chst testen wir mit einer SELECT Anweisung SELECT KTHID Kursthema CONCATC Datenbank SUBSTRING Kursthema 6 DauerPlan ROUND DauerPlan 1 5 0 FROM tbKursthema WHERE Kursthema LIKE Access Neu ist in der Anweisung die WHERE Klausel die daf r sorgt dass UPDATE auf die Datens tze beschr nkt wird die Access in der Kursbeschreibung ent halten Im Ergebnis erhalten wir zwei Zeilen mit den gew nschten Ergebnis sen Danach wird diese SELECT Anweisung mit wenigen nderungen in eine UPDATE Anweisung umgewandelt UPDATE tbKursthema SET Kursthema CONCATC Datenbank SUBSTRING Kursthema 6 DauerPlan ROUND DauerPlan 1 5 0 WHERE Kursthema LIKE Access Das Ergebnis ist eine ge nderte Tabelle tbKursthema in der die beiden Daten bankkurse jetzt einen entsprechenden Zusatz erhalten haben wie in Abbil dung 6 9 zu sehen KTHID Kursthema Kursbeschreibung Kursdemo DauerPlan Voraussetzung 1 EDY Einstieg mit Windows Windows bietet die Grundlage f r alle mode 20 ME 2 EDY Windows f r Fortge Der Kurs wendet sich an PC Benutzer die 20 1 3 EDY Ordnung im Datei
451. mstra e 6 07 11 1963 bPerson mit SELECT 2 Bucz Susanne 30531 Hannover Heinestra e 23 06 04 1976 a tbPerson 4 Karmann Thomas 29227 Celle Trift 28 04 08 1954 i 5 Kl tzer Karl 29221 Celle Bahnhofstra e 2 13 03 1971 6 Weiss Karin 30529 Hannover Palmstra e 6 05 10 1962 7 Weiss Peter 38134 Braunschweig Glanweg 4 02 03 1974 8 Meier Kathrin 38154 Braunschweig Welfenallee 23 03 05 1981 9 Schmidt Karl 30529 Hannover Lavesallee 32 25 06 1949 10 M ller Claudia 29596 Breitenhees In den Fuhren 12 11 Lisewski Bernd 30890 Barsinghausen Roggenkamp 10 06 06 1960 15 Martens Melanie 29221 Celle Horstweg 258 17 02 1961 17 Schlachter Dieter 29227 Celle Mondhagen 43 02 02 1961 23 Peredy Helmut 29221 Celle Mauernstra e 2 23 02 1956 24 Ruppert Nicola 29301 Bergen Welfenallee 23 25 02 1962 25 Sander 29223 Celle Marxallee 12 05 02 1953 26 Cromberg J rg 38152 Braunschweig Nordring 13 07 06 1991 31 Schulze Tanja 29308 Winsen Berliner Ring 23 09 11 1992 32 Winter Petra 29320 Hermannsburg Immenhoop 51 30 12 1989 34 Plate Ulrich 30529 Hannover Gutenberggasse 5 02 12 1986 37 Magerkurth Melissa 29336 Nienhagen Am T mpel 3 04 09 1951 Solange der Name eines Feldes eindeutig ist reicht er zur Bezeichnung f r Qualifizierung die SELECT Anweisung aus Innerhalb einer Tabelle m ssen alle Namen ein deutig sein Zwei Felder mit demselben Namen sind verboten Schwierigkei ten k nnen sich ergeben wenn mehrere Tabellen in einer SELECT Anweisung verw
452. mut 1956 02 23 Schlachter Dieter 1961 02 02 Martens Melanie 1911 02 17 Ruppert Nicola 1962 02 25 Sander Bo 1953 02 05 Cromberg J rg 1991 06 07 Schulze Tanja 1992 11 09 Magerkurth Melissa 1951 09 04 Plate Ulrich 1986 12 02 Klever Klaus 1981 04 02 SQL sieht im Original das Schl sselwort EXCEPT statt MINUS vor EXCEPT wird beispielsweise von DB2 unterst tzt Dort gibt es auch ein EXCEPT ALL das im Sinne einer echten Subtraktion funktioniert Liefert die erste Abfrage bei spielsweise zwei identische Datens tze und die zweite Abfrage einen weite ren identischen Datensatz w rde bei einem EXCEPT ALL ein Datensatz brig bleiben WINTER WINTER EXCEPT ALL WINTER ergibt somit WINTER 11 5 Besonderheiten der Datenbanksysteme MySQL bietet nur den Operator UNION mit den Zus tzen DISTINCT und ALL an MySQL Als Standard wird DISTINCT verwendet INTERSECT wie auch EXCEPT MINUS sind in der aktuellen Version noch nicht verf gbar Durch Qualifizierung mit dem Schemanamen also kurse tbPerson PID statt nur tbPerson PID sind Auswertungen ber verschiedene Schemata m glich 335 W karite 1 MS Access Oracle Firebird openBase Listing 11 7 Erzeugung eines VIEW mit einem UNION Operator 336 Mengenoperationen UNION INTERSECT EXCEPT MINUS In MS Access steht ebenfalls nur der Operator UNION beziehungsweise UNION ALL zur Verf gung Die Eingabe muss direkt in das SQL Fenster der Abfrage erfolgen Die grafis
453. n Datentypen Die Dezimalzahlen werden im kaufm nnischen Bereich bevorzugt da sie eher eine Abbildung der kaufm nnischen Rundungsvorschriften erlauben Hier wird entsprechend auch mit einer festen Anzahl an Nachkommastellen gerechnet Die interne Darstellung ist hnlich erfolgt aber zur Basis 10 also entsprechend unserem gewohnten Zahlensystem Die Zahl 7 32 kann dann beispielsweise mit Vorzeichen 0 1 Bit Mantisse 732 zur Basis 10 mit dem Exponent 2 wie folgt dargestellt werden 1 732 10 7 7 32 F r den kaufm nnischen Bereich insbesondere f r Geldbetr ge werden also die Dezimalzahlen angeboten bei denen zwischen solchen mit fester L nge NUMERIC und solchen mit variabler L nge DECIMAL unterschieden wird In beiden F llen kann die Anzahl der Nachkommastellen fest vorgegeben wer den In Tabelle 5 5 wird ein berblick ber die Namen der g ngigen Datentypen f r Gleitkommazahlen und Dezimalzahlen gegeben ANSI MySQL MS Access Oracle Firebird openBase NUMERIC NUMERIC CURRENCY NUMERIC NUMERIC NUMERIC m n m n W hrung m n m n m n DECIMAL DECIMAL DECIMAL DECIMAL DECIMAL DECIMAL m n m n m n m n m n m n Dezimal REAL REAL SINGLE REAL FLOAT 63 FLOAT REAL 4 Byte Zahl 7 Nach kommast DOUBLE FLOAT DOUBLE FLOAT 126 DOUBLE DOUBLE PRECISION zus tzlich FLOAT BINARY_ PRECISION 8 Byte DOUBLE Zahl DOUBLE 14 Nach kommast FLOAT n FLO
454. n E Es werden f r alle Felder f r die in der Tabellendefinition keine NULL Werte erlaubt sind tats chlich auch Werte angegeben Also m ssen alle Felder die nicht leer sein d rfen mit Werten belegt werden Beachten Sie bitte dass wenn nur eine dieser Bedingungen verletzt ist der gesamte Datensatz abgewiesen wird Es erfolgt dann also kein Eintrag in der Datenbank Die obige SQL Anweisung hat zwei Besonderheiten F r den Vornamen erfolgt die Angabe NULL Dies bedeutet dass man den Vornamen nicht kennt Die Frage ist Was macht die Datenbank mit dieser Angabe Wir wol len dies gleich kl ren Zweitens ist f r den Ortsnamen der Wert DEFAULT angegeben Dies bedeutet dass der Standardwert der Datenbank verwendet werden soll Woher soll die Datenbank diesen Wert kennen Dieser Standardwert wird bei der Anlage der Tabelle angegeben Wir wollen uns im Vorgriff die Definition der Tabelle tbPerson ansehen ohne auf die Details jetzt bereits genau einzugehen siehe Listing 6 2 CREATE TABLE IF NOT EXISTS tbPerson PID int NOT NULL PRIMARY KEY Familienname varchar 50 NOT NULL Vorname varchar 50 NULL PLZ char 5 NULL Strasse varchar 50 NULL Ort varchar 50 NULL DEFAULT Celle Geburtsdatum date Sie sehen in der vierten Zeile an der Angabe NULL dass NULL Werte f r den Vornamen zugelassen sind Die Datenbank bernimmt daher die Angabe NULL als NULL Wert Der Datensatz wird daher nicht abgewiesen Es gibt ein
455. n Diese Anforderungen werden meist nach bestimmten Kriterien klassifiziert beispielsweise nach Abteilungen oder Benutzergruppen Wichtig ist dass festgelegt wird welche Daten gespei chert werden sollen was zu speichern ist und wie die Daten zu bearbeiten sind weise bei der Erstellung einer Datenbank Konzeptioneller Entwurf Am Ende dieser Phase liegen die Sich ten und das konzeptionelle Gesamt schema meist als Entity Relationship Modell vor Beim Entwurf k nnen Sie verschiedene Vorgehensweisen ver wenden Die externen Sichten m ssen nicht zwingend entworfen werden Werden sie entworfen haben Sie mehrere M glichkeiten Entweder Sie entwerfen zuerst die externen Sichten und f gen diese dann zu einem kon zeptionellen Schema zusammen oder umgekehrt Konzeptionelles Schema als ERM oder Klas sendiagramm Logischer Entwurf Das konzeptionelle Schema wird in das logische relationale Schema der Datenbank berf hrt Zus tzlich wird die Datenbank qualitativ f r das relatio nale Schema optimiert zumeist durch Normalisierung Bevor der logische Entwurf durchge f hrt werden kann muss festgelegt werden f r welches DBMS die Daten bank aufgebaut werden soll Normalisiertes logisches Schema mit Tabellen Feldern und Beziehun gen Verfeinerung des logischen Ent wurfs Nun kann der logische Entwurf in Hin blick auf h ufige oder bevorzugte Abfragen die in den Anforderungen formul
456. n sondern Daten die die anderen Abfragen ihrerseits aus Tabellen oder wie derum aus Abfragen ermitteln Im Normalfall werden hier Tabellen gew hlt W hlen Sie also die Tabellen aus die Sie als Basis verwenden wollen Die Tabellen werden in die soge nannte Entwurfsansicht bernommen die Sie in Abbildung A 23 sehen Dies ist das zentrale Fenster f r die Erstellung der SQL Anweisung die soge nannte grafische Oberfl che In dieser Entwurfsansicht wird so weit m g lich die gesamte Abfrage erstellt Wesentlich sind zun chst die ausgew hlten Tabellen im oberen Teil des Fens ters Innerhalb der Tabellen sind die Datenfelder der Tabellen aufgelistet Sie k nnen jetzt die Felder ausw hlen die von der SQL Anweisung gezeigt wer den sollen W hlen Sie die Felder entweder per Doppelklick auf den Feldna men oder durch Ziehen mit der Maus in den unteren tabellenartigen Teil aus Im Beispiel sind die PID der Familienname und der Vorname ausgew hlt Wenn Sie Felder ausgew hlt haben die Sie nicht ben tigen l schen Sie das Feld in der unteren Tabelle Markieren Sie dazu die gesamte Spalte oder l schen Sie den kompletten Feldnamen aus der Tabelle Wichtig f r die sp tere Nutzung sind die Zeilen SORTIERUNG und KRITERIEN Die Zeile SORTIERUNG erlaubt einen Eintrag der die Ergebnisliste entspre chend den Werten eines Feldes sortiert Bei den KRITERIEN k nnen Einschr n kungen der Datens tze eingetragen werden Die Sortierungen w
457. n Ein Systemabsturz ein Stromausfall ein Plat tenfehler oder verschiedene andere m gliche St rungen k nnten auftreten In diesem Fall entsteht ein undefinierter Zustand bei dem zun chst m hsam gekl rt werden muss welche Daten aktualisiert wurden und welche nicht Daher werden wann immer m glich Transaktionen eingesetzt Dies gilt in besonderem Ma f r Befehle die den Inhalt der Datenbank ndern Die Eigenschaften die eine Transaktion ausmachen wurden von der Daten banktheorie urspr nglich unter der Abk rzung ACID definiert ACID steht dabei f r die Anfangsbuchstaben der englischen Begriffe f r die Eigenschaf ten Atomicity Consistency Isolation und Durability In der deutschen Sprachwahl haben sich weitgehend die Begriffe Atomarit t Konsistenz Iso lation und Dauerhaftigkeit durchgesetzt E Atomarit t Eine Transaktion ist ein unteilbares Ganzes sie wird ent weder komplett durchgef hrt COMMIT oder komplett r ckg ngig ge macht ROLLBACK E Konsistenz Eine Datenbank die in einem in sich konsistenten Zustand ist ist auch nach Abschluss der Transaktion wieder in einem konsisten ten Zustand Durch die vollst ndige Durchf hrung wird gew hrleistet dass keinerlei Verst e gegen Konsistenzbedingungen m glich sind so weit dies in der Kontrolle der Datenbank liegt Isolation Die SOL Anweisungen innerhalb einer Transaktion werden nicht von SQL Anweisungen anderer Transaktionen beeinflusst und um ge
458. n Tats chlich wird nicht die PID sondern ein interner nur dem Daten banksystem bekannter Schl ssel verwendet um den richtigen Datensatz zu einem Indexeintrag zu finden Dies kann statt eines einzelnen Datensatzes auch der Name einer Speicherseite oder ein anderer Eintrag sein der dem Datenbankmanagementsystem einen schnellen Zugriff erlaubt Hier wird also nur aus Vereinfachungsgr nden die PID gew hlt um das Prinzip zu ver deutlichen MySQL bildet jetzt aus der WHERE Bedingung der SELECT Abfrage ebenfalls einen zusammengesetzten Text also WeissHannover und beginnt damit in der Indextabelle zu suchen Wichtig ist dabei dass MySQL nur von links vergleichen kann es kommt also darauf an dass der Anfang des Suchstrings zum Anfang des Indexeintrags passt Dies ist bei dem Index ort tats chlich der Fall sodass der Index verwendet werden kann um die PID des oder der gesuchten Datens tze zu ermitteln Wie gesagt handelt es sich dabei in der Praxis um die physischen Adressen sodass der Zugriff dann gezielt erfolgen kann 373 E arite 14 374 Abbildung 14 2 M gliche Indextabelle zum Index Ort Listing 14 4 Beispielabfrage f r die Indexverwendung mit dem Index ort2 Mit SQL Datenbanken betreiben und optimieren Indexeintrag Interne ID weissHannover30529 1 BuczHannover30531 2 KarmannlCelle29227 4 Kl tzerCelle29221 5 WeissHannover30529 6 WeissBraunschweig38134 i MeierBraunschweig33154 8 SchmidtHannover3
459. n Familienname tbPerson Vorname current_date AS archiviert FROM tbPerson INNER JOIN CtbKursthema INNER JOIN tbKurs ON CtbKursthema KTHID tbKurs KTHID INNER JOIN tbKursbesuche ON tbKurs KID tbKursbesuche KID ON CtbPerson PID tbKursbesuche KTID WHERE tbKurs KID CE23 Die Ergebnisdatens tze sind in Abbildung 6 1 zu sehen Diese Datens tze werden durch die INSERT Anweisung in der Archivtabelle abgelegt Beachten Sie bitte wie die Reihenfolge der Feldnamen in der Zieltabelle wiederum genau mit der Reihenfolge in der SELECT Anweisung bereinstimmt Dies entspricht genau der bereinstimmung die auch bei der Angabe der Feld namen und der zuzuordnenden Werte in der Grundform des INSERT INTO wie wir sie am Anfang hatten eingesetzt wurde Wieder muss bei der INSERT InTO Anweisung die Liste der Zielfelder stets der Reihenfolge der Werte egal wie sie ermittelt werden entsprechen Kursthema Kurskennung Kursbeginn i archiviert CE23 Access Celle23 Access 06 08 2007 10 08 2007 4 Karmann Thomas 18 08 2007 22 12 21 CE23 Access Celle23 Access 06 08 2007 10 08 2007 5 Kl tzer Karl 18 08 2007 22 12 21 CE23 Access Celle23 Access 06 08 2007 10 08 2007 15 Martens Melanie 18 08 2007 22 12 21 CE23 Access Celle23 Access 06 08 2007 10 08 2007 10 M ller Claudia 18 08 2007 22 12 21 CE23 Access Celle23 Access 06 08 2007 10 08 2007 31 Schulze Tanja 18 08 2007 22 12 21 CE23 Access Celle23 Access 06 08 2007 10 08
460. n Sie den Haken beim Schreibschutz 3 2 5 openBase Alle Daten sind f r openOffice org Base hier immer kurz openBase genannt vorbereitet Um den Start zu vereinfachen sind die Datenbanken jeweils als komplette Datenbanken beigef gt und k nnen unmittelbar genutzt werden Alle Daten f r die Kursdatenbank stehen auf der CD unter datenbanken openBase kurse Die Datei kurse odb enth lt die komplette Kursdatenbank f r openBase Um die Kursdatenbank wieder zur ckzusetzen kopieren Sie die Datei einfach erneut von der CD F r Nutzer lterer Versionen sind die Daten noch als Calc Dateien beigef gt Importieren Sie die Calc Dateien in die Datenbank Das Verfahren f r openBase wird in Anhang A beschrieben Alle Daten f r die Artikeldatenbank stehen auf der CD unter datenbanken openbase artikel Die Datei artikel odb enth lt die komplette Artikeldaten bank f r openBase Um die Artikeldatenbank wieder zur ckzusetzen kopie ren Sie die Datei einfach erneut von der CD F r Nutzer lterer Versionen sind die Daten noch als Calc Dateien beigef gt Importieren Sie die Calc Dateien in die Datenbank Das Verfahren f r openBase wird in Anhang A beschrieben Denken Sie bei einer direkten Kopie von CD daran gegebenenfalls den Schreibschutz zu entfernen Klicken Sie dazu im Windows Explorer mit der rechten Maustaste auf die kopierte Datei w hlen Sie die EIGENSCHAFTEN und entfernen Sie den Haken beim Schreibschutz MySQL 3 3 MySQL 3
461. n Sie sich in der Abfrage mit SELECT Stundensatz in EURO AS Stundensatz_in_Euro FROM tbMitarbeiter Hier wird der Spie also umgedreht aus dem ungl cklichen Feldnamen wird ein programmierkompatibles Alias Sie k nnen das Alias nat rlich auch zusammenschreiben Wie erw hnt hilft die CamelCase Schreibweise bei vielen SQL Interpretern im Zusammenhang mit einem Alias auch nicht weiter da der Interpreter aus StundensatzInEuro sofort STUNDENSATZINEURO macht was auch nicht wirklich berzeugt Generell lautet der Tipp Sollen zusammengesetzte W rter in Namen verwen det werden nutzen Sie den Unterstrich _ Dieser wird von fast jedem SQL Interpreter und fast jeder relationalen Datenbank akzeptiert Soweit die Theorie aber wir sind bekanntlich in der EDV Also ist nichts best ndiger als die Ausnahme Vielleicht haben Sie die obigen Anweisungen schon in MS Access oder MySQL ausprobiert und fragen sich was Sie oder der Autor dieses Buches hier wieder falsch gemacht haben Es k nnte zumindest auch daran liegen dass sowohl MS Access als auch MySQL hier ein vom Standard abweichendes Verhalten zeigen Alias in MS Access MS Access ist wie erw hnt stark von Windows gepr gt Daher werden hier die Feldnamen nicht in Gro schreibung umgesetzt sondern unver n dert beibehalten Die Einschlie ung in doppelte Anf hrungsstriche funktio niert ebenfalls nur sehr bedingt diese werden n mlich als Teil des Alias bernommen MS
462. n Sie sp ter wenn wir die Funktionen beschreiben zumeist leicht aus dieser Tabelle die passende Funktion ermitteln soweit sie verf gbar ist Funktionsklasse Funktionen numerisch ABS ATAN CEILING COS EXP FLOOR LOG MOD POWER RAND SIGN SIN SORT TAN alphanumerisch ASCII CHAR CONCAT LCASE LEFT LENGTH LOCATE LTRIM RIGHT RTRIM SPACE SUBSTRING UCASE Datum Uhrzeit CURDATE CURTIME DAYNAME DAYOFMONTH DAYOFWEEK DAYOFYEAR HOUR MINUTE MONTH MONTHNAME NOW QUARTER SECOND WEEK YEAR Konvertierung CONVERT Wird dagegen in einem ADP gearbeitet stehen die Funktionen des MS SQL Servers zur Verf gung die dort nachzulesen sind Die Jet Engine wird bei der Programmierung ber die entsprechende Schnittstelle genutzt also im Normalfall nicht wenn wir wie in diesem Buch blich mit der MS Access Oberfl che arbeiten Bei der Nutzung der MS Access Oberfl che wird dagegen wie wir es hier tun auf den VBA Funktionssatz zur ckgegriffen Dies sind VBA Funk tionen die f r das Access Modul verf gbar gemacht worden sind und in SQL verwendet werden d rfen Diese k nnen sowohl direkt im SQL Code des Abfragefensters verwendet werden als auch ber die grafische Oberfl che eingegeben werden Bei der Nutzung der grafischen Oberfl che Entwurfsansicht f r Abfragen klicken Sie mit der rechten Maustaste auf die zu beschreibende Spalte im Abfragefenster Es erscheint ein Auswahlmen wie in Abbil
463. n berechenbar sind Substantive deren Instanzen Sie mithilfe einer oder mehrerer Figen schaften eindeutig identifizieren k nnen Schl ssel 7 2 2 Attribute Eigenschaften Attribute oft auch als Eigenschaften bezeichnet charakterisieren eine Entit t Ein Attribut besitzt einen Namen und einen Datentyp In der grafi schen Darstellung werden die Attribute als abgerundete Rechtecke als Ellip sen oder Kreise dargestellt Diese sind ber ungerichtete Kanten mit der Enti t t verbunden Bei den Attributen wird zwischen beschreibenden Attributen den anwendungsspezifischen Eigenschaften und identifizierenden Attribu ten den Schl sseln zur eindeutigen Identifikation unterschieden Ein Schl ssel setzt sich aus einem oder mehreren Attributen zusammen Es sollten so wenige wie m glich Minimalit tsforderung aber so viele wie n tig sein Das ist wichtig da so beim sp teren Erstellen der Datenbank ent schieden werden kann ob diese Schl ssel direkt verwendet werden k nnen Das Entity Relationship Modell ERM oder ob k nstliche Schl ssel vergeben werden sollten und die hier definier ten Schl ssel ber zus tzliche Bedingungen Constraints umgesetzt werden sollen K nstliche Schl ssel sollten im ER Modell nach M glichkeit noch nicht vergeben werden Ist unter den vorhandenen Attributen und Attribut kombinationen keine die als Schl ssel eingesetzt werden kann sollte das Modell noch einmal berpr ft werden
464. n den vergangenen zehn Jahren ihre vorherr schende Rolle weiter ausgebaut und sind heute fast konkurrenzlos Dies liegt neben der hohen Flexibilit t des relationalen Modells auch und gerade in der M glichkeit eines standardisierten Zugriffs auf alle diese Systeme der auch einen Namen tr gt SQL SQL dieses unscheinbare K rzel bei dem bis heute der Streit dar ber anh lt ob es Standard Query Language oder Structured Query Language hei t Richtig ist brigens historisch der zweite Begriff Praktisch beschreibt die erste Variante die Situation als Standard SQL das bedeutet eine einzige Sprache um auf alle wichtigen Datenbank systeme zuzugreifen sei es DB2 ORACLE Adabas SQL Server MySQL MS Access openBase MaxDB Postgres oder Firebird Interbase um nur einige zu nennen Dar ber hinaus gibt es aus fast allen Programmiersprachen Zugriffsm glichkeiten auf SQL Es gibt objektorientierte Erweiterungen Erweiterungen f r XML und standardisierte Schnittstellen wie ODBC JDBC oder DAO und ADO 15 WM karite Abschnitt I Kapitel 1 3 Vorbereitung Abschnitt Il Kapitel 4 6 Abfrage und Bearbeitung 16 Abschnitt Ill Kapitel 7 8 Erstellen einer Datenbank Einleitung Datenbanken werden mit SQL definiert mit Daten versorgt und abgefragt Zugriffsmechanismen werden gesetzt Optimierungen vorgenommen und die Datenorganisation wird gesteuert Wir wollen uns hier mit den verschiedenen Aspekten von SQL
465. n der Hardware dem Betriebssystem und den sonstigen aktiven Prozessen ab Bei spielhaft k nnte man mit MySQL die Zeiten in der Tabelle 14 1 ermitteln Reiner DB Zugriff Zugriff mit Aufbereitung ohne Index 0 0011s 0 0454s mit Index 0 0331s 0 0410s Die reinen Ausf hrungszeiten beschreiben die Zeit f r die Datenbankab frage Die Zeit f r die Aufbereitung umfasst zus tzlich die Zeit f r die Auf bereitung in der Oberfl che Sie sehen dass die Zugriffszeiten durch den Index nicht wirklich besser werden die reine Datenbankzugriffszeit wird sogar schlechter Dies h ngt mit dem zus tzlichen Verwaltungsaufwand f r den Index zusammen Die Nutzung eines Index lohnt nur bei relativ gro en Datenmengen siehe Tabelle 14 2 Haben Sie entsprechend gro e Datenmengen so kann ein Index lohnen Sie m ssen dann allerdings sicherstellen den richtigen Index zu verwenden Je nach Zugriff auf die Kundendaten k nnen verschiedene Indizes sinnvoll sein immer vorausgesetzt dass eine entsprechend gro e Anzahl Datens tze vor handen ist Es soll folgende SOL Anweisung auf die Personentabelle der Kursdatenbank ausgef hrt werden SELECT FROM tbPerson WHERE Familienname Weiss AND Ort Hannover Es werden verschiedene Indizes f r die Tabelle tbPerson definiert wie in Lis ting 14 3 angegeben CREATE INDEX plz ON tbPerson Familienname PLZ CREATE INDEX name ON tbPerson Vorname Familienname Ort CREATE INDEX or
466. n eingerichtet hat Geben Sie daher hier als Benutzername root ein und das Passwort das Sie bei der Installation gew hlt haben normalerweise masterkey Mehr Informationen haben wir noch nicht und ben tigen sie im Moment auch noch nicht Nach der erfolgreichen Anmeldung gelangen Sie in das bersichtsfenster mit allen relevanten Informationen Die verschiedenen Optionen auf der lin ken Seite werden uns noch in dem einen oder anderen Fall besch ftigen ber den Men punkt EXTRAS gelangen Sie zu den anderen Werkzeugen die auch direkt aufgerufen werden k nnen Sie k nnen beispielsweise auch Ihre Verbindung zur Datenbank speichern wenn Sie sie f r k nftige Anmeldungen verwenden wollen siehe Abbildung 3 21 va MO M Abbildung 3 20 MySQL Administrator Connection root localhost 3306 5 g Datei Bearbeiten View Extras Eenster MySQL Enterprise Hilfe bersichtsfenster des 3 MySQL Administrators E Dienstverwaltung Serverstatus CE Stantvariablen JS MySQL Server l uft 8a Benutzerverwaltung W Aktive Verbindungen Mit MySQL Serverinstanz verbunden AUS Servertaus Benutzemame root Hostname localhost EI Serverprotokole Eoi FE BP Repikationsstatus SE Backup Serverinformation Q Wiederherstelung MySQLVersion MySQL 5 0 41 community nt via TCP IP Netzwerkname localhost 5 Kataloge IP 127 001 Clientinformation Version MySQL Client Version 5 1 11 Netzwerkname helgas IP 127 001 Betriebssystem Windo
467. n erlaubt In anderen F llen wie in MySQL ist es auch m glich den Isolationslevel bereits beim Start der Transaktion anzugeben Im Folgenden werden einige Beispiele mit MySQL vorgestellt Dabei werden stets zwei Benutzer simuliert die mit ihren Transaktionen zugreifen Die schw chste Isolationsstufe ist der READ UNCOMMITTED der bei einem SELECT auch bereits das Lesen von Daten anderer nicht beendeter Transak tionen erlaubt Dies wird auch als schmutziges Lesen dirty read bezeich net da auch Daten gelesen werden die unter Umst nden nicht konsistent sind Bei einem ROLLBACK der anderen Transaktion deren Daten gelesen wer den verschwinden diese wieder und es wurden Daten gelesen die nie Bestandteil des offiziellen Datenbankstandes waren und sind Eigene Transaktion T1 Fremde Transaktion T2 START TRANSACTION SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED SELECT FROM bestellung WHERE KID Sie sehen 1 Bestellung des Kunden 1 START TRANSACTION SELECT FROM bestellung WHERE KID 1 LOCK IN SHARE MODE 1 Datensatz des Kunden gefunden Sperren es 113 m Eigene Transaktion T1 Tabelle 13 1 Forts Fremde Transaktion T2 Transaktion mit Isolationsstufe INSERT INTO bestellung VALUES READ UNCOMMITED 1 9999 1 CURRENT_DATE CURRENT_TIMESTAMP neue Bestellung von KID 1 SELECT FROM bestellung WHERE KID 4 Sie sehen die neue Bestellung des
468. n f r einen JOIN verwendet werden Insbesondere lt lt gt gt und k nnen genutzt werden um die Felder von Tabellen miteinander ber einen JOIN in Verbin dung zu setzen Der Non Equi J0IN wird oft nicht in der FROM sondern in der alten Syntax in der WHERE Klausel verwendet bungen zur SELECT Anweisung mit Non Equi JOIN Erstellen Sie f r die folgenden Aufgaben jeweils eine SELECT Anweisung 1 Ermitteln Sie die Kursteilnehmer mit KID bei denen der bezahlte Kursbei trag unabh ngig vom Rabatt kleiner ist als die Kursgeb hr des besuch ten Kurses Zeigen Sie sowohl die gezahlte Geb hr als auch die Kursgeb hr an U4 5 4 1 2 Ermitteln Sie die Kurskennungen aller Kurse die der Dozent Peter Weiss mit der PLZ 30529 nicht betreut 4 5 4 2 4 5 5 OUTER JOIN Der bisher betrachtete innere Verbund INNER JOIN in seinen verschiedenen Formen l sst die Kombination von Datens tzen aus zwei Tabellen zu die in irgendeiner Form einander entsprechen Es wurden immer die Werte zweier Felder miteinander verglichen und Datens tze mit passenden Werten mitein ander kombiniert Anders stellt sich die Situation dar wenn in einem der am JOIN beteiligten Felder in einem Datensatz ein passender Wert in der anderen Tabelle fehlt Soll der Finsatz aller Dozenten in Kursen analysiert werden so l sst sich dies durch einen JOIN zwischen tbDozent und tbKurs erreichen Was ist aber mit den Dozenten f r die zurzeit kein Einsatz gep
469. n jeweils eine SELECT Anweisung 1 Ermitteln Sie aus der Tabelle tbKursbesuche je Kurs den kleinsten und gr ten Rabatt der gew hrt wurde Geben Sie nur die Kurse an bei de nen der gr te Rabatt ber 50 liegt Sortieren Sie das Ergebnis abstei gend nach dem gr ten Rabatt 4 7 1 2 Ermitteln Sie die KID und den durchschnittlichen Rabatt f r alle Kursteil nehmer gruppiert nach Kursen Geben Sie dabei nur diejenigen an bei denen der durchschnittliche gezahlte Betrag der Teilnehmer kleiner als 250 ist 4 7 2 3 Gruppieren Sie alle Kurse nach der Geb hr Bestimmen Sie die Anzahl der Datens tze und geben Sie nur solche Gruppen aus die aus mindes tens zwei Datens tzen bestehen Sortieren Sie das Ergebnis aufsteigend nach der Geb hr U4 7 3 4 Ermitteln Sie die Anzahl der Kurse die mindestens 300 kosten und gruppieren Sie sie nach der Geb hr U4 7 4 147 Datentypen Ausdr cke und Funktionen Sie haben jetzt bereits recht komplexe SELECT Anweisungen erstellt Dabei haben Sie aber immer die Felder so verwendet wie diese in den Tabellen definiert sind Sie ahnen es nach diesen S tzen schon es gibt auch noch wei tere M glichkeiten Tats chlich k nnen neben den Feldern auch Konstanten Literale oder mithilfe der Felder berechnete Ausdr cke in SELECT Anwei sungen verwendet werden Bevor wir dies hier ausf hrlich betrachten m s sen wir aber ber Datentypen sprechen War es der SELECT Anweisung
470. n nur spezielle Werte f r ein Feld Sinn machen Diese sollten dann nach M glichkeit auch gleich von der Datenbank gepr ft werden Dom nen sind in der hier beschriebenen Form bei den hier betrachteten Datenbanksystemen bisher nur in Firebird implementiert Oracle kennt ein Konstrukt zur Definition von Objekten das aber sehr komplex und Oracle spe zifisch ist und daher hier nicht n her beschrieben werden soll Betrachten wir dazu noch einmal die Definition der Tabelle f r die Mehr wertsteuer Das Feld f r die Mehrwertsteuerart soll entsprechend der Defini tion nur die Werte voll erm ssigt und kein enthalten k nnen Demge m wurden die Werte in der Tabellendefinition angegeben CREATE TABLE mwst mwst_art ENUMC voll erm ssigt kein NOT NULL PRIMARY KEY mwst_satz SMALLINT NOT NULL DEFAULT O I Eine Alternative ist die Verwendung einer CHECK Integrit tsbedingung wie wir sie f r die Datenbanken au er MySQL verwendet haben CREATE TABLE mwst mwst_art char 9 CHECK VALUE IN C voll erm ssigt kein NOT NULL PRIMARY KEY mwst_satz SMALLINT NOT NULL DEFAULT 0 Beide Varianten haben einen gemeinsamen Nachteil Sie erfordern die Wie derholung der Wertebereich Definition an allen Stellen an denen der Mehr wertsteuersatz verwendet wird Da es sich hier auch noch um den Prim r schl ssel handelt muss die entsprechende Logik an allen Stellen wiederholt werden an denen ein Fremdschl sselfeld mi
471. n sind nicht bekannt F gen Sie ihn mit der DID 835 ein Wenn Sie jetzt den Ausgangszustand wiederherstellen wollen sollten Sie in Abschnitt 6 3 4 die erste bung durchf hren Lesen Sie dort auch die vor ausgehenden Hinweise zum DELETE Befehl Sie k nnen aber auch hier wei terarbeiten und die L schungen vornehmen wenn Sie in dem Abschnitt angekommen sind 6 2 Vorhandene Datens tze ndern UPDATE Datens tze k nnen nat rlich nicht nur eingef gt werden sondern vorhan dene Datens tze k nnen auch ge ndert werden Stellen Sie sich vor die Preise von Produkten sollen ge ndert werden Menschen wechseln die Woh nung ziehen um oder heiraten und ndern ihren Namen In Kursen sind die Zahlungen zu ndern Fehltage zu erh hen und Zeugnisse auszustellen Es gibt also viele gute Gr nde Datens tze in der Datenbank zu ndern Daher bietet SQL auch eine Anweisung um Datens tze zu ndern Diese Anweisung hei t UPDATE Vorhandene Datens tze ndern UPDATE 6 2 1 UPDATE Anweisungen Das neue Kursprogramm soll im Kursthema bereits darauf hinweisen dass es sich um EDV Kurse handelt da k nftig auch andere Kursarten geplant sind Um die Datenbankstruktur nicht ndern zu m ssen soll daher allen Kursthe men ein EDV vorangestellt werden Dies kann mit einem UPDATE tbKursthema SET kursthema concat EDV kursthema geschehen Sie sehen bereits an der Syntax dass die Tabelle tbKursthema ge ndert werden s
472. ne beschreibt den zul ssigen Wertebereich eines Attributes Im Normalfall handelt es sich dabei um einen Datentyp Ein Datentyp hat einen festen Wertebereich beispielsweise hat der Datentyp INTEGER einen festen Zahlenbereich wie in Kapitel 5 beschrieben Es k nnen in einem Attribut dieses Typs nur Zahlen aus diesem Wertebereich gespeichert werden also ganze Zahlen in einer bestimmten Gr enordnung In einigen F llen ergeben sich aus dem Kontext eines Attributes weitere Ein schr nkungen des Wertebereiches Das k nnen fest vorgegebene Wertemen gen sein z B Januar Februar Bereiche z B von O bis 999 von A bis G oder Mengen solcher Werte Schl sselkandidat Prim rschl ssel 227 WM karitez Beispiel Grad einer Beziehung 228 Definition Datenbanken modellieren In der Kursdatenbank werden als Zahlungsart nur Gutschein bar oder berweisung zugelassen Es wird zwar ein alphanumerischer Datentyp CHARACTER verwendet tats chlich ist der Wertebereich aber viel kleiner als die Menge aller Buchstabenkombinationen die Sie aufgrund des Datentyps bilden k nnten Derartige Dom nen sollten der Beschreibung der Attribute bereits fr hzeitig hier im Rahmen des ER Modells beigef gt werden da sie den Anwendern oft bekannt sind und so bereits bei der Erzeugung des Datenbankschemas ber cksichtigt werden k nnen Hier entsteht ein Zwiespalt Einerseits m chte man sich nicht zu fr h auf ein
473. nen Sinn und Unsinn der Normalisierung Wir wissen jetzt also dass es sinnvoll ist Tabellen zu zerlegen und ber Beziehungen zu verbinden anstatt alle Informationen in einer Tabelle zu speichern Bleibt noch das Problem wie man diese Zerlegung sinnvoll gestaltet damit zusammengeh rige Informationen zusammenbleiben ande rerseits aber auch Redundanz vermieden werden kann Der Weg zu diesem Ziel ist ein Verfahren das als Normalisierung bezeichnet wird Das Ziel der Normalisierung ist die Verhinderung der redundanten Speicherung identischer Sachverhalte und E Vermeidung von Anomalien beim Einf gen ndern und L schen von Datens tzen Sie kennen das folgende Beispiel von oben In der Tabelle Bestellung besteht das Problem darin dass zu jedem Auftrag immer wieder alle Daten eines Mitarbeiters und eines Kunden gespeichert werden Das sehen Sie bereits an der ersten zweiten und dritten Zeile Die Daten des Kunden Ewald Kuhn KG hier seine Kundennummer die PLZ und der Ort werden f r jeden Auf trag dieses Kunden immer wieder gespeichert Dies ist Redundanz Die L sung best nde hier in der Aufspaltung in mehrere Tabellen Eine Tabelle enth lt die Kundendaten einmalig f r jeden Kunden Die andere Tabelle enth lt die Auftr ge und lediglich einen Fremdschl ssel die Kun dennr um die Beziehung zu dem passenden Datensatz in der Tabelle Kunde herstellen zu k nnen Die dritte Tabelle enth lt die Mitarbeiterdaten
474. nfalls ber 77 W kaites Abbildung 3 41 Anmeldung am Firebird Server SYSDBA Abbildung 3 42 Anmeldung mit dem Superuser SYSDBA 78 Die Beispieldatenbanken einen Verweis auf www serval de SQL erreichbar und kann f r Testzwecke genutzt werden Die Installation besteht lediglich aus einem Entpacken des Werkzeugs in ein Verzeichnis Ihres Rechners Sie k nnen danach die Datei IBOConsole exe direkt starten Auf Dauer ist es aber sinnvoller einen Link auf dem Desktop oder im Programmsystem ein zuf gen um den Aufruf zu vereinfachen Die Oberfl che der IBOConsole ist in Abbildung 3 41 erkennbar ti IBOConsole Console View Server Database Tools Help Pyre 3a lZ e Servers Action Description Local Server H Login Login to the selected server 22 Register Register a new Server Y Un Register Unregister an Server Diagnose Conn Diagnose a connection to a server db Properties View Server properties Server Local Server Melden Sie sich beim Server an entweder ber die Funktion im rechten Fensterteil LOGIN oder ber die rechte Maustaste jeweils nach Markierung des Servers Nutzen Sie dazu den Superuser SYSDBA mit dem automatisch erzeugten Passwort masterkey siehe Abbildung 3 42 I Server Login Server Local Server User Name sys DBA Password pe Der Server ffnet sich und zeigt die enthaltenen Bestandteile an Es sind jetzt wie in Abbildung 3 43 zu sehen noch keine Datenbanken vorhan
475. nfeld mehr als einen Wert je Datensatz haben kann und Datenfelder vom Prim rschl ssel funktional abh ngig sind Ein Datenfeld das die Werte der Kundennummer und des Kundennamens enth lt etwa 2 Ewald Kuhn KG widerspricht der Grundidee eines relatio nalen DBMS Das Feld Kunden_Ort ist in diesem Sinne problematisch Die zweite Bedingung greift das Prinzip der funktionalen Abh ngigkeit auf und zeigt dass funktionale Abh ngigkeiten von einem Prim rschl ssel gut und gewollt sind 2 Normalform 2NF Minimaler Prim rschl ssel Eine Relation ist in 2NF wenn sie in 1NF ist und 2NF E jedes Datenfeld das selbst nicht Bestandteil des Prim rschl ssels ist vom ganzen Prim rschl ssel und nicht nur einem Teil funktional abh ngig ist Diese zus tzliche Anforderung kann also nur zum Tragen kommen wenn mindestens zwei Prim rschl sselfelder existieren 245 W karitez 3NF Normalisierung durch 246 Modellierung Performance Datenbanken modellieren 3 Normalform 3NF Keine transitiven Abh ngigkeiten Eine Relation ist in 3NF wenn sie in 2NF ist und E keine funktionalen Abh ngigkeiten zwischen den Datenfeldern bestehen die nicht zum Prim rschl ssel geh ren Die L sung bei Widerspr chen zu einer der Normalformen ist immer die selbe 1 Bei einer Abh ngigkeit a1 gt a2 werden a1 und a2 in eine eigene zus tz liche Tabelle ausgelagert In dieser Tabelle wird a1 der neue Pr
476. nft Die Daten k nnen aus unter schiedlichen Tabellen oder sogar aus unterschiedlichen Datenbankschemata stammen 11 2 Die Vereinigungsmenge UNION Mit der SQL Anweisung UNION werden die Ergebnismengen zweier SELECT Anweisungen miteinander verbunden oder einfacher ausgedr ckt ohne Duplikate untereinandergeschrieben Der Kursbetreiber und der B roartikelh ndler wollen ihren Kundenstamm gegen berstellen Dabei soll zun chst eine Liste aller bekannten Personen der beiden Firmen erstellt werden Dies bedeutet dass die Daten aus der Tabelle tbPerson des Schemas kurse und aus der Tabelle kunden des Schemas artikel zusammen dargestellt werden Man k nnte jetzt versuchen mithilfe eines INSERT die eine Tabelle in die andere Tabelle zu bertragen Das kann aber zu mindestens drei Problemen f hren Die Daten sind strukturell unterschiedlich da die Felder nicht gleich sind Die Prim rschl ssel sind doppelt Die Firmen m chten berhaupt nicht dass die Daten bertragen werden Daher w re es sch ner die Daten gemeinsam darzustellen und dabei die Fel der zu verwenden die sich entsprechen So k nnte mithilfe der UNION Anweisung eine gemeinsame Kundenliste erstellt werden Die Vereinigungsmenge UNION 111 m SELECT p Familienname p Vorname p Geburtsdatum Kurse Listing 11 1 FROM kurse tbPerson p Vereinigung der UNION Personen aus zwei SELECT k Nachname k Vorname CURRENT_DATE Artikel FROM artik
477. ng existiert 9 4 4 9 5 Synchronisierte und korrelierte Unterabfragen Im Zusammenhang mit Unterabfragen tauchen immer wieder die Begriffe synchronisiert und korreliert oder verbunden auf Unter korrelierten verbundenen Unterabfragen sind solche Unterabfragen zu verstehen die Feldnamen aus der Hauptabfrage in der Unterabfrage ver wenden Korrelierte Unterabfragen sind somit nicht allein ausf hrbar son dern funktionieren nur im Zusammenspiel mit der jeweiligen Hauptabfrage SELECT p Familienname p Vorname p PID FROM tbPerson p WHERE NOT EXISTS SELECT FROM tbKursbesuche kb WHERE p PID kb KTID Hier wird p PID in der Unterabfrage wieder aufgegriffen Da dieses Feld in der Hauptabfrage definiert wird ist die Unterabfrage allein nicht lauff hig Im Gegensatz zu korrelierten Unterabfragen sind unkorrelierte oder freie Unterabfragen auch f r sich allein ausf hrbar Unter synchronisierten Unterabfragen sind solche Unterabfragen zu verste hen bei denen in der Hauptabfrage und in der Unterabfrage dieselbe Tabelle verwendet wird In diesem Fall ist nat rlich der Einsatz von Alias zwingend erforderlich um die Feldnamen sauber auseinanderhalten zu k nnen Die bereits bekannte Abfrage in Listing 9 19 stellt hier ein typisches Beispiel dar SELECT p Familienname p Vorname t DID t Stundensatz FROM tbDozent t INNER JOIN tbPerson p ON t PID p PID WHERE t Stundensatz gt SELECT AVGCt2 Stundensatz FROM tbDozent
478. ngere Kette sortiert also beispielsweise 19 vor 190 Bei der Sortierung ist der verwendete Zeichensatz entscheidend Sie sehen an den beiden letzten Angaben dass Kleinbuchstaben vor Gro buchstaben liegen Ziffern wiederum liegen vor Buchstaben Sonderzeichen wie der Unterstrich oder das Leerzeichen das im obersten Datensatz vor Hannover steht liegen wiederum abh ngig vom verwendeten Datensatz an anderer Stelle im Beispiel vor den Ziffern Sie m ssen also bei alphanumerischen Angaben auf den Zeichensatz achten Besonders kritisch kann es werden wenn eigentlich numerische Angaben als alphanumerischer Text gespeichert werden Sie sehen dass 19 20 und 21 richtig angeordnet werden die 190 aber an der falschen Stelle steht Dies liegt an dem beschriebenen Mechanismus Bereits beim Vergleich des ersten Zeichens wird die 20 hinter die 190 eingeordnet da die 2 gr er als die 1 ist Die Sortierung von Zahlen in alphanumerischen Feldern funktio niert nur wenn die Angaben gleich lang sind wie beispielsweise bei Post leitzahlen und f hrende Nullen verwendet werden Daten sortieren mit der ORDER BY Klausel Die Speicherung numerischer Angaben in alphanumerischen Feldern sollte also nur in besonders begr ndeten F llen erfolgen da sonst die Sortierung erschwert wird Ist dies nicht zu vermeiden k nnen hier eventuell datenbank spezifische Funktionen Abhilfe schaffen auf die in Kapitel 5 noch
479. ngetragen werden kann und die bestellten Produkte verf gbar sind Der Kunde soll andererseits nur eingetragen werden wenn seine Bestellung erfasst werden kann Sie ben tigen zumindest eine INSERT Anweisung f r den Kunden eine INSERT Anweisung f r die Bestellung und eventuell noch weitere Anweisungen um die Bestellpositionen einzutragen und die Verf g barkeit der Artikel zu pr fen Gerade bei nderungen in der Datenbank h ngen oft verschiedene Fintra gungen und damit verschiedene SQL Anweisungen voneinander ab Nur wenn alle nderungen durchgef hrt werden k nnen ergibt sich wieder ein konsistenter in sich sinnvoller Stand Daraus ergeben sich drei wesentliche Anforderungen an eine Transaktion 1 Die nderungen m ssen so lange r ckg ngig gemacht werden k nnen wie nicht sichergestellt ist dass alle Anweisungen durchf hrbar sind 2 Andere Nutzer der Datenbank sollen keine inkonsistenten Zust nde se hen k nnen Die nderungen d rfen also erst dann f r andere Anwender sichtbar werden wenn sie komplett ausgef hrt werden konnten 3 nderungen eines Benutzers beziehen sich stets auf den urspr nglichen Zustand der Datenbank bei Beginn der Transaktion Es k nnen niemals zwei oder mehrere Benutzer gleichzeitig Daten in demselben Bereich der Datenbank ndern Eine solche Situation k nnte abh ngig von der Rei henfolge der nderungen zu f r alle Benutzer unerwarteten Situationen f hren Um diese Anforderungen erf
480. ngung1 Funktionen Ausdruck Wertl IFNULLC Bedingung2 veeeyen Wert2 NUL ver LIF Cesset ee a System DATABASE Current UID DATABASE variable CURRENT_ User USER CURRENT_ USER Aktueller USERENV USERO abfragen schemao Benutzer USER VERSIONO Die zweite wichtige Funktionsart ist eine Art Verzweigung die dem IF aus Programmiersprachen hnelt und etwa der M chtigkeit des IF in Excel ent spricht SELECT p Familienname p Vorname IF kb Zeugnis J CONCATC Ja am k Kursende Nein AS Zeugnis FROM tbKursbesuche kb INNER JOIN tbKurs k ON kb KID k KID INNER JOIN tbPerson p ON kb KTID p PID Beliebt ist auch die Mehrfachverzweigung mit CASE WHEN die in zwei Ver sionen existiert Als einfache Bedingung hat sie die Form CASE Bedingung WHEN Ausdruck1 THEN Wert1 WHEN Ausdruck THEN Wert ELSE Wert END Dabei wird die Bedingung nacheinander mit den Ausdr cken verglichen Sobald ein Vergleich eine bereinstimmung ergibt wird der zu dem Aus druck geh rige Wert zur ckgegeben Trifft kein Ausdruck zu wird der ELSE Wert gew hlt Fehlt der ELSE Ausdruck wird zumeist NULL geliefert Die Alternative ist die reine Bedingung wobei jeweils eine Bedingung einem Wert zugeordnet wird Die erste Bedingung die erf llt ist bestimmt den R ckgabewert F r die ELSE Klausel gilt dasselbe wie f r das einfache CASE WHEN CASE WHEN Bedingung THEN Wert1 WHEN Be
481. nhagen 02 06 38 1 66 Herr Prei ler Jan Peter Dorfstra e 41 29336 Nienhagen 03 06 62 1 67 Herr Bucco Arnold Wiesenstra e 13 29336 Nienhagen 05 03 78 1 68 Frau Behrens Cormelia Maisfeld 32 29336 Nienhagen 06 04 89 1 69 Frau Bothe Frieda Am Bahnhof 3 29339 Wathlingen 04 02 46 1 70 Frau B hren Tamara Kr mmelweg 1 29339 Wathlingen 07 09 87 1 71 Herr Brase Jan Sachsenring 3 29339 Wathlingen 01 02 84 1 72 Herr Kolditz Michael Schaffeld 23 29342 Wienhausen 23 06 78 1 73 Herr B hring Uwe Schleusenweg 17 29342 Wienhausen 03 07 61 1 74 Herr Eggers Harald Appelweh 4 29342 Wienhausen 08 10 60 1 7 Herr B ttner Detief Dorfstra e 18 29342 Wienhausen 08 09 58 1 76 Frau Luft Carola Petersweg 20 29323 Wietze 21 11 86 1 77 Lehmann Dagmar Friedrichstra e 12 29323 Wietze 20 08 64 1 78 Herr M ller Peter Am Salzberg 9 29323 Wietze 31 12 83 2 79 Herr Meier Horst Buschweg 7 29308 Winsen 06 05 53 2 80 Herr Meier Jan Peter Bahnhostra e 11 29308 Winsen 02 08 56 1 81 Herr Langenbahn Christian Bremer Weg 17 29308 en 11 07 67 1 82 Herr Elsner Rudolf Hauptstra e 30 29308 Winsen 21 02 61 1 83 Frau L ttger Ingrid Hirschwiese 19 29308 Winsen 13 07 57 1 84 Frau _Mohrholz Rosemarie Poggenteich 31 29223 Celle 05 09 50 1 85 Herr Meyer Werner Heese 10 29348 Eschede 18 04 57 186 Herr Hoffmann Thomas Heese 10 29225 Celle 13 03 57 1 87 Herr Ammermann Udo Am S gewerk 2 29348 Eschede 10 02 61 2 88 Frau Schr der Birgit Harmsstra e 41 29320 Hermannsbur 03 03 67 1 89 Frau _
482. nische Administratoren gedacht die sich nicht mit der Verwaltung des Datenbankschemas befassen Hier liegt letztlich auch der Unterschied zwi schen den Superusern SYS und SYSTEM Benutzerkonzepte verschiedener Datenbanken Oracle hat das Konzept der Rollen wie es jetzt im Standard definiert worden ist bereits umgesetzt Hier erh lt jeder Benutzer nach seiner Anmeldung alle Rechte die ihm wie bisher als einzelnem Benutzer zugewiesen wurden Zus tzlich werden ihm alle Rechte zugewiesen die in seinen sogenannten benutzerdefinierten Rollen festgelegt sind Um diese benutzerdefinierten Rollen festzulegen wurde ein CREATE ROLE rollenname IDENTIFIED BY passwort NOT IDENTIFIED eingef hrt Die entsprechenden Anweisungen zur nderung des Passwortes und zum L schen einer Rolle lauten dann ALTER ROLE rollenname IDENTIFIED BY passwort NOT IDENTIFIED DROP ROLE rollenname Mit der bekannten GRANT Anweisung k nnen dann die Rechte flexibel auf die Rollen verteilt werden Wir k nnen das komplexe System hier nicht im Detail betrachten aber versuchen dessen Nutzen an einem Beispiel zu ver deutlichen Die drei Mitarbeiter meier stolze und wegmann sind alle Mitarbeiter im Ver Beispiel trieb Alle Vertriebsmitarbeiter sollen in der Tabelle kunden Abfragen durch f hren und Datens tze einf gen und ndern d rfen Bestellungen d rfen alle drei Mitarbeiter beliebig ndern Der Gruppenleiter wegmann darf auch Kunden l schen so
483. nktioniert mit einigen Einschr nkungen brigens auch umgekehrt Sie haben also bei den Beispielen dieses Buches oft die Wahl ob Sie die grafische Oberfl che nutzen oder ob Sie die Anweisung direkt in die SQL Ansicht eingeben In diesem Fall haben Sie eine vergleichbare Situation wie bei den anderen Systemen Durch Wahl der Datenblattansicht gelangen Sie zu den eigentlichen Daten Das Ergebnis der SQL Abfrage wird als Datensatztabelle dargestellt siehe Abbildung A 26 Sie k nnen jetzt wieder zur Entwurfsansicht oder zur SQL Ansicht zur ckkehren und beliebig zwischen den Ansichten wechseln Schlie lich k nnen Sie die Abfrage speichern indem Sie sie einfach schlie Ben Das ist etwas ungewohnt entspricht aber dem Prinzip von MS Access alle Informationen beim Schlie en eines Fensters zu speichern Sie werden aber nach einem Namen f r die Abfrage gefragt siehe Abbildung A 27 Beachten Sie dass bei der Speicherabfrage nur die Struktur der Abfrage also die SQL Anweisung gespeichert wird nicht die Daten Diese bleiben unver ndert in den Tabellen E Abbildung 1 24 Die verschiedenen Ansich ten einer Abfrage Abbildung 1 25 SQL Anweisung entspre chend der Auswahl in der Entwurfsansicht 399 5j Anhang A Anhang Benutzung der Datenbanksysteme Abbildung A 26 Die Datenblattansicht ist i Beispielabfrage Auswahlabf BEK das Ergebnis der Abfrage SEPIE ie EIER PID Familienname Vomame Weiss Peter 2
484. nn Wechseln Sie dazu gegebenenfalls von der Ansicht KEINE in die Ansicht DOKUMENT Das Datenbanksystem openBase bietet im Rahmen seiner grafischen Benut zeroberfl che die M glichkeit Alias f r die Felder einer Abfrage festzulegen Me Dazu m ssen Sie das nebenstehende Symbol aktivieren Sie erhalten dann eine weitere Zeile in der Sie unmittelbar ein Alias f r ein Feld angeben k n nen Dar ber hinaus k nnen Sie auch ber das nebenstehende Symbol bestim men dass nur unterschiedliche Datens tze in der Ergebnismenge enthalten sein sollen Es wird dann ein DISTINCT in die entsprechende SQL Anweisung generiert F CI um 410 openBase A 5 2 Andere SQL Anweisungen eingeben Die Abfragen erlauben in openBase letztlich nur die Eingabe von SELECT Anweisungen was systematisch auch richtig ist Andere SQL Anweisungen also INSERT UPDATE und DELETE sowie alle SOL DDL und SQL DCL Anwei sungen lassen sich direkt als SOQL Anweisungen eingeben W hlen Sie im Men EXTRAS SQL um in ein Eingabefenster f r SOQL Anwei sungen zu gelangen siehe Abbildung 1 46 SQL Statement ausf hren SQL Kommando auszuf hrendes Kommando INSERT INTO tbKursthema KTHID Kursthema Kursbeschreibun ursdemo DauerPlan Voraussetzung ALUES 12 MySQL MySQL Einsteigerkurs NULL 40 2 Vorherige Kommandos Hier k nnen Sie alle Anweisungen au er SELECT Anweisungen eingeben Aber Vorsicht open
485. ns tze eindeutig sein muss Zwei Datens tze mit demselben Wert 51 als PID sind aber nicht eindeutig und daher nicht zul ssig Die Syntax einer INSERT Anweisung ist damit zun chst klar INSERT INTO tabellenname feldnamel feldname2 INSERT Syntax VALUES wert wert2 Beide Listen werden jeweils durch Kommata getrennt Beachten Sie dass die Feldnamenliste optional ist also fehlen darf Fehlt diese Liste muss die Wer teliste Eintr ge f r alle Felder der Tabelle in der richtigen Reihenfolge ent sprechend der Definition der Tabelle enthalten Nur so kann der SQL Inter preter entscheiden welcher Wert f r welches Feld bestimmt ist Das Weglassen der Feldnamenliste spart nat rlich Schreibarbeit Trotzdem nut zen Sie dies nur wenn Sie ausnahmsweise direkt oder testweise einen Daten satz erfassen wollen und sicher sind welche Struktur die Tabelle zur Zeit hat da dieses Vorgehen fehleranf llig ist Bei maschineller Verarbeitung ist das Weglassen der Feldnamenliste fehler anf llig Wird die Tabellenstruktur ver ndert kann die INSERT Anweisung fehl schlagen und der Datensatz abgewiesen werden sei es dass Felder fehlen oder Datentypen ver ndert sind Im schlimmsten Fall merken Sie es nicht ein mal weil Felder eingef gt worden sind und NULL Werte an den betroffenen Stellen erlaubt waren Dann landen die Werte der neu eingef gten Daten s tze in vollkommen falschen Feldern Geben Sie also wann immer m glich
486. ns tze gel scht werden Es werden immer alle Datens tze gel scht die die angegebene WHERE Klausel erf llen Das bedeutet in der Konsequenz auch dass bei fehlender WHERE Klausel wenn diese beispielsweise einfach vergessen wird alle Datens tze aus einer Tabelle gel scht werden DELETE FROM tbKursbesuche Diese einfache Anweisung hat also unter Umst nden die fatale Folge dass Ihre Datens tze alle verschwunden sind Wenn Sie es ausprobieren Sie k n nen die Tabelle wie in Kapitel 3 beschrieben anschlie end durch einen Import wiederherstellen beziehungsweise auf eine Kopie der MS Access Datenbank Kurse zur ckgreifen Es wird allerdings nicht die Tabelle selbst gel scht dazu gibt es die DROP Anweisung die nicht nur die Datens tze einer Tabelle sondern auch deren Struktur l scht siehe Kapitel 8 Datens tze l schen DELET W E 0 U Im Normalfall wollen Sie aber mit einer DELETE Anweisung nicht alle Daten s tze und erst recht nicht die Tabellenstruktur l schen Wenn Sie allerdings wirklich alle Datens tze einer Tabelle l schen wollen so TRUNCATE k nnen Sie dies prinzipiell mit einem DELETE ohne WHERE Klausel erreichen Von einigen Datenbanken wird als Alternative zum L schen aller Datens tze einer Tabelle die TRUNCATE Anweisung angeboten Auch TRUNCATE l scht nicht die Tabellenstruktur selbst sondern nur alle Datens tze in der Tabelle Die TRUNCATE Anweisung ist allerdings beim L schen zumeist d
487. nsbestandteile durch einen Unterstrich ver bunden Wir haben hinsichtlich der Datentypen ganzzahlig einerseits und Zeichenkette andererseits weitere Detailentscheidungen getroffen Ebenso haben wir entschieden dass beide Felder keine NULL Werte beinhalten d r fen Derartige Entscheidungen erg nzen die Modellierung aus dem ERM sofern sie nicht dort durch entsprechende Erweiterungen bereits festgelegt wurden Die Syntax einer CREATE TABLE Anweisung kann also zun chst lauten CREATE TABLE tabellenname Felddefinition Felddefinition Die Definition einer Tabelle ist also eine kommaseparierte Liste von Feld definitionen Dies entspricht dem Gedanken dass eine Tabelle zun chst ein fach eine sortierte Menge von Feldern ist Jedes einzelne Feld besitzt eine Felddefinition die wiederum einen eigenen festen Aufbau hat Felddefinition feldname datentyp DEFAULT standardwert NULL NOT NULL UNIQUE PRIMARY KEY Der Feldname muss dabei den blichen Regeln f r die Vergabe von Namen folgen also mit einem Buchstaben beginnen und darf au er einem Unter strich keine Sonderzeichen beinhalten Er muss innerhalb einer Tabelle ein deutig sein Die Angabe des Datentyps muss einen f r das Datenbankmanagementsys tem g ltigen Datentyp beinhalten Die Standardtypen f r SQL sind in Kapitel 5 1 beschrieben G ngig sind CHAR VARCHAR INT SMALLINT FLOAT DOUBLE DATE oder TIMESTAMP Unter den einzelnen Datenbanksystemen gib
488. nsen 1992 11 09 32 Winter Petra 29320 Immenhoop 51 Hermannsburg 1989 12 30 34 Plate Ulrich 30529 Gutenberggasse 5 Hannover 1986 12 02 37 Magerkurth Melissa 29336 Am T mpel 3 Nienhagen 1951 09 04 Die Anzahl der Datens tze sowie die Dauer der Abfrage k nnen Sie am unte ren Ende des Bildschirms sehen siehe Abbildung 1 6 Die Abfragedauer besteht dabei nicht nur aus der Dauer der Datenbankabfrage sondern auch aus allen Verarbeitungs und Aufbereitungszeiten si 20 Zeiles in 0 0191 s 0 0004 5 geholt Abbildung 1 4 SELECT Anweisung im MySQL Query Browser w Ausf hren v Abbildung 1 5 Ergebnis der Abfrage SELECT FROM tbPerson Abbildung 1 6 Anzahl der Ergebnisdaten s tze Abfragezeit reine Datenbankabfragezeit 387 5j Anhang A 388 Abbildung A 7 Schema kurse mit f nf Tabellen Standardschema Anhang Benutzung der Datenbanksysteme In diesem Buch sind viele Beispiele f r SQL Anweisungen enthalten Diese k nnen Sie nutzen um die Oberfl che zu testen In manchen F llen m ssen Sie die Anweisung vielleicht etwas anpassen oder wollen sie erweitern um etwas auszuprobieren Um eine sinnvolle SQL Anweisung eingeben zu k n nen k nnen Sie unmittelbar auf die beiden Fenster am rechten Bildschirm rand zur ckgreifen Dort finden Sie zum einen eine bersicht ber das Schema mit den Tabellen und innerhalb der Tabellen wiederum ber die darin enthaltenen Datenfelder Durch Klicken auf die kleinen Pfei
489. nweise auf aktualisierte Versionen auf www serval de SQL Kapitel 4 ist der schnelle Einstieg f r den Datenbanknutzer Wir wollen mit hilfe der SELECT Anweisung Daten aus fertigen Beispieldatenbanken abfra gen Informationen zusammenstellen und analysieren Dies ist die Kernfunk tionalit t aller Datenbanknutzer Entsprechend wird der SELECT Anweisung hier breiter Raum einger umt Kapitel 5 vertieft die Nutzung der SELECT Anweisung um Berechnungen und Umwandlungen der Ergebnisse mithilfe von SQL Funktionen Basis sind die SQL Datentypen Kapitel 6 f hrt in die nderung UPDATE die Eingabe INSERT und das L schen DELETE von Daten mit SQL ein Jetzt k nnen wir also die Daten in der Datenbank beliebig ndern Kapitel 7 beschreibt die Entwicklung von Datenbanken mit dem konzeptio nellen ER Modell und zeigt dessen Umsetzung in ein relationales Modell mit Normalisierung Kapitel 8 nimmt das so erstellte relationale Modell auf und f hrt dies fort indem die SOL Anweisungen zur Erstellung CREATE nde rung ALTER und L schung DROP von Datenbankstrukturen und nicht nur von Daten vorgestellt werden Dieser Abschnitt umfasst also das Vorgehen zur Erstellung neuer Datenbanken Einleitung EB a 1 m Kapitel 9 nimmt das Thema Abfragen jetzt auf der Basis der urspr ngli Abschnitt IV chen Datenbanken wie auch der im vorherigen Abschnitt erstellten neuen Kapitel 9 11 Datenbanken wieder auf und zeigt die Nutzung sogenannt
490. oder eine Aggregatfunktion wie eine Summierung oder Mittelwertbildung in Verbindung mit einer GROUP BY Klausel 8 6 5 Der VIEW in MS Access MS Access kennt leider keine direkte CREATE VIEW Anweisung Eine Daten sicht entsteht in MS Access indem Sie eine normale Abfrage erstellen Jedes Abfrageobjekt wird in MS Access wie ein VIEW behandelt Jede Abfrage ist ein VIEW Das hei t insbesondere dass jede Abfrage wieder die Basis f r eine weitere Abfrage sein kann Sie steht gleichberechtigt neben der Tabelle Die Abfrage wird als SELECT Klausel in eine andere Abfrage eingef gt Das erkennen Sie auch an der Grundstruktur der Oberfl che von MS Access Die Abbildung 8 20 zeigt das typische Auswahlfenster mit dem Tabellen und Abfragen ausgew hlt werden die dann als Basis einer Abfrage also einer SELECT Anweisung verwendet werden k nnen Abbildung 8 20 Tabelle anzeigen Auswahl f r eine Abfrage in MS Access Tabellen Abfragen Beide tbDozent Schlie en tbKurs tbKursbesuche tbKursthema tbPerson 293 W kaites 294 ALTER VIEW DROP VIEW Updateable Datenbanken erstellen SQL DDL Sie sehen unmittelbar dass beide Tabellen und Abfragen gleichberechtigt nebeneinanderstehen Sie k nnen entsprechend auch in identischer Weise als Basis f r eine neue Abfrage verwendet werden 8 6 6 Einen VIEW ndern ALTER VIEW DROP VIEW Ist ein VIEw einmal definiert kann er mit einem ALTER VIEW ge ndert werden Der A
491. olgen wobei die Anzahl der Datens tze in der Tabelle tbperson ermittelt wird START TRANSACTION CALL Personenanzahl anzahl SELECT anzahl COMMIT Trigger dienen dazu bei der Ausf hrung von bestimmten Datenbankopera tionen wie dem Einf gen Andern oder L schen von Datens tzen zus tzliche Anweisungen ausf hren zu k nnen Typischerweise werden mit Triggern Application Program Interface Konsistenzpr fungen durchgef hrt Datensicherungen vorgenommen oder andere Prozesse gestartet Das Vorgehen entspricht dem Vorgehen bei Pro zeduren CREATE TRIGGER neuerdozent AFTER INSERT ON tbDozent FOR EACH ROW BEGIN INSERT tbPerson SET PID NEW PID END Trigger werden auf bestimmte Tabellen bezogen und typischerweise gibt es dann zumindest Trigger wie BEFORE INSERT AFTER INSERT BEFORE UPDATE AFTER UPDATE BEFORE DELETE und AFTER DELETE Im Trigger k nnen eine oder mehrere SQL Anweisungen verwendet werden einschlie lich Prozeduren Der Trigger wird immer aktiv wenn die entsprechende Operation in der Datenbank ausgef hrt werden soll 14 6 Application Program Interface Datenbanken werden zumeist nicht direkt ber eine Oberfl che mit einzel nen SQL Anweisungen angesprochen sondern sind in vielen F llen Basis f r andere Anwendungen Dies erfordert dass andere Anwendungen auf eine Datenbank zugreifen k nnen Eine solche Zugriffsm glichkeit wird von dem Datenbankmanage mentsystem ber sogenannte API Applicat
492. oll Dabei wird die bereits von der INSERT Anweisung bekannte Syntax mit SET verwendet Mit einer UPDATE Anweisung k nnen ein oder mehrere Felder gleichzeitig ge ndert werden Es k nnen auch mehrere und sogar alle Datens tze einer Tabelle mit einer einzigen UPDATE Anweisung ge ndert werden Eine UPDATE Anweisung ver ndert Ihre Datenbank Dies ist sofern Sie nicht wie in Kapitel 13 beschrieben Transaktionen verwenden unwiderruflich Das aus Windows gewohnte R ckg ngig gibt es in SQL nicht Bevor Sie eine UPDATE Anweisung daher auch nur testweise in Ihrer Datenbank ver wenden sollten Sie sich angew hnen das Ergebnis zuvor so gut wie m g lich zu testen Sie sollten daher immer zun chst eine normale SELECT Anweisung verwenden um zu testen welche Datens tze Sie ndern w rden Die SELECT und die UPDATE Anweisung arbeiten hinsichtlich der betroffenen Datens tze identisch Bei den mit SELECT ermittelten Datens tzen sollten Sie zumindest den Prim rschl ssel die bisherigen Werte der zu ndernden Fel der und die neuen Werte anzeigen SELECT KTHID kursthema concat EDV FROM tbKursthema kursthema Dies ergibt die Datens tze aus der Abbildung 6 8 KTHID kursthema concatf EDY kursthema Einstieg mit Windows EDY Einstieg mit windows EDY Windows f r Fortgeschrittene 3 EDY Ordnung im Dateisystem 4 Wordl EDY Word 5 Access EDV Access 6 Excell EDV Excell 7 Access Il EDY Acce
493. oll es in diesem Kapitel aber um die Berechtigungen gehen 12 1 Schutz der Informationen Stellen Sie sich vor jeder Benutzer k nnte auf alle Daten einer Datenbank frei zugreifen Das w rde zwar zun chst viele Probleme die aus Passw rtern und sonstigen Zugriffsschutzmechanismen resultieren vermindern w re aber das sichere Ende jeder umfangreicheren Datenbank 339 Karite 12 340 Datenschutz Fehlbedienung Privilegien Benutzer Rechte und Zugriffsschutz Die Bedenken kommen dabei aus zwei Richtungen E Schutz sensibler Informationen vor Verbreitung und Missbrauch und Schutz wertvoller Informationen vor unabsichtlicher Zerst rung oder Verf lschung Datenbanken enthalten Informationen die zumeist nicht von beliebigen Nutzern der Datenbank in vollem Umfang genutzt werden d rfen Denken Sie in einem Unternehmen nur an sensible Daten wie Geh lter Ums tze oder Rabatte Denken Sie an eine Internetdatenbank auf die im Netz freier Zugriff durch beliebige Nutzer m glich w re Die Datenbank w re dem Angriff in jeder Form ausgesetzt Dies ist nicht nur in Unternehmen mehr als uner w nscht Bedrohungen f r eine Datenbank m ssen aber nicht immer durch mutwillige Angriffe Spionage oder andere gezielte Aktionen b swilliger Nutzer entste hen Probleme k nnen auch einfach durch unsachgem e Eingaben nde rungen oder L schungen von Benutzern entstehen So kann ein unerfahre ner Mitarbeiter in gutem Gl
494. on Familienname tbPerson Vorname tbDozent Titel tbDozent Qualifikationen tbKurs Kurskennung FROM tbDozent LEFT OUTER JOIN tbKurs ON tbDozent DID tbKurs DID INNER JOIN tbPerson ON tbDozent PID tbPerson PID ORDER BY tbPerson Familienname tbPerson Vorname Neu ist die Angabe tbDozent LEFT OUTER JOIN tbKurs ON tbDozent DID tbKurs DID die dazu f hrt dass aus der linken Tabelle also tbDozent alle Datens tze Teil der Ergebnismenge werden egal ob in der Tabelle tbKurs ein Kurs vorhanden ist oder nicht Entsprechend erkennen Sie im Ergebnis dieser Abfrage in Abbildung 4 31 dass den beiden Dozenten Dieter Schlachter und Karin Weiss keine Kurse zugeordnet sind W re statt eines LEFT OUTER JOINhier ein INNER JOIN verwendet worden h t ten beide Datens tze im Ergebnis komplett gefehlt siehe Abbildung 4 30 Familienname Vorname Titel Qualifikationen Kurskennu Bucz Susanne Industriekaufmann Windows Rechnungswesen Hannover91 Windows Bucz Susanne Industriekaufmann Windows Rechnungswesen Hannover90 Windows Cromberg J rg Mathematiker Windows Word Celle17 Word Schlachter Dieter IT Kaufmann Office Datenbanken Netzwerke Weiss Karin Meister CNC Steuerungen Weiss Peter Informatiker Word Windows Datenbanken Celle24 Access Weiss Peter Informatiker Word Windows Datenbanken Hannover 9 Access Weiss Peter Informatiker Word Windows Datenbanken Celle23 Access Weiss Peter Informatiker Word Windows Datenbank
495. ormalfall noch nicht sichtbar Dies liegt daran dass noch nicht klar ist ob die Trans aktion vollst ndig beendet werden kann ob also nicht noch weitere SQL Anweisungen auszuf hren sind beispielsweise ein Eintrag in der Tabelle tbKursbesuche Die Transaktion kann daher jetzt noch mit einem ROLLBACK statt einem COMMIT beendet werden und damit komplett r ckg ngig gemacht werden Klaus Klever hat es nie wirklich in der Datenbank gegeben Tritt w hrend der Transaktion also ein Fehler auf der nicht behoben werden ROLLBACK kann oder dauert die Transaktion zu lange oder soll sie aus anderen Gr n den vom Benutzer ohne Ver nderung beendet werden kann sie mit einem ROLLBACK komplett r ckg ngig gemacht werden In diesem Fall wird der Zustand vor der Durchf hrung wiederhergestellt Wenn Sie nach einem ROLLBACK jetzt ein SELECT from tbPerson eingeben l sst sich das leicht berpr fen Dies gilt allerdings nur wenn Ihr Datenbanksystem nicht in einer Art AUTOCOMMIT Modus l uft bei dem nach jeder SQL Anweisung automatisch ein COMMIT ausgef hrt wird wenn diese erfolgreich abgeschlossen werden konnte 13 2 AUTOCOMMIT Wenn Sie Transaktionen selbst testen wollen m ssen Sie beachten dass die meisten Datenbanken in den hier verwendeten Oberfl chen im AUTOCOMMIT Modus laufen Dies bedeutet dass jede SQL Anweisung automatisch als Transaktion mit START TRANSACTION und COMMIT ausgef hrt wird Diesen Modus m ssen Sie aus
496. p 3 INTERVAL HOUR hat ebenfalls den Typ 10 aber den Untertyp 4 Diese Datentypen k n nen in einigen Systemen insbesondere bei der Programmierung mit Schnitt stellen aus verschiedenen Programmiersprachen verwendet werden bieten aber auch keine hundertprozentige Garantie f r Kompatibilit t Die Vielfalt der Datentypen erkl rt sich aus dem Bestreben der Datenbank hersteller den Anwendern Wahlm glichkeiten bei der Gr e der Datenfelder Speicherplatz und der Verarbeitung der Datenfelder Funktionen zu bieten und so der Datenbank Vorteile zu verschaffen Nat rlich ist Speicherplatz seit der Entwicklung der ersten SQL f higen Speicherplatz Datenbanken erheblich g nstiger und in gr erem Umfang verf gbar geworden Gleichzeitig sind aber auch die Anforderungen durch wachsende Datenmengen gestiegen Spielt es bei unseren Beispieldatenbanken noch keine gro e Rolle ob ein Namensfeld 25 oder 100 Zeichen lang ist kann dies bei 10 Millionen Datens tzen allein in diesem Feld einen Unterschied von ungef hr 750 MB ausmachen Multipliziert man dies mit der Anzahl der Datenfelder und Tabellen mit Versionen und Sicherungsst nden macht es auch heute unter Umst nden noch Sinn bei der Wahl des Datentyps gezielt auch auf den Speicherbedarf zu achten Der zweite Aspekt liegt in den Funktionen die f r die einzelnen Datentypen Funktionen zur Verf gung stehen Soll beispielsweise mit den Inhalten eines Feldes gerechnet wer
497. p Vorname FROM tbKurs k INNER JOIN CtbPerson p INNER JOIN tbKursbesuche kb ON p PID kb KTID ON k KID kb KID WHERE k KID CE23 ORDER BY p Familienname p Vorname Das Ergebnis der SOL Anweisung ist in Abbildung 4 25 dargestellt Kurskennung Familienname Vorname Celle23 Access Karmann Thomas Celle23 Access Kl tzer Karl Celle23 Access Magerkurth Melissa Celle23 Access Martens Melanie Celle23 Access M ller Claudia Celle23 Access Ruppert Nicola Celle23 Access Schulze Tanja Celle23 Access Winter Petra Beispiel Listing 4 27 JOIN ber drei Tabellen Abbildung 4 25 Ergebnis der SELECT Anweisung 119 H Kapitel4 Mit SQL Daten abfragen SELECT 120 Abbildung 4 26 Zwei aufeinander aufbauende JOIN Um noch einmal auf das Thema Qualifizierung zur ckzukommen Sp testens hier ist die Qualifizierung zumindest des Feldes KID zwingend Eine Spalte KID tritt in beiden Tabellen auf Erst durch die Angabe k KID beziehungsweise kb KID wird f r den SQL Interpreter deutlich dass er das Feld der Tabelle tbKurs respektive tbKursbesuche entnehmen soll Also im Zweifelsfall besser qualifizieren Die Darstellung in Abbildung 4 26 zeigt die Logik der angegebenen SELECT Anweisung In einem ersten Schritt werden die Tabellen tbPerson und tbKursbesuche miteinander zu einer virtuellen Tabelle verbunden Dieser JOIN geht ber die Gleichheit der Werte in den Spalten tbPerson PID tbKursbesuche KTID Dabei gehen
498. palte sortiert Gruppierung mit MS Access An dieser Stelle ist es Zeit kurz auf die Besonderheiten von MS Access und openBase einzugehen Beide bieten in der grafischen Oberfl che eine beson dere Unterst tzung f r die Gruppierung an die dann in eine GROUP BY Klau sel in SQL umgesetzt wird Schauen wir uns dabei zun chst das Beispiel an Beachten Sie f r MS Access die eckigen Klammern bei dem Alias In der grafischen Oberfl che von MS Access erhalten Sie die Darstellung in Abbildung 4 40 Auff llig ist dabei die Zeile FUNKTION Diese wird in der Standardeinstellung nicht angeboten Sie k nnen sie ber den Men befehl ANSICHT FUNKTIONEN einblenden Alternativ geht dies auch ber die rechte Maustaste im unteren Fensterbereich und durch die Anwahl von FUNKTIONEN im dann eingeblendeten Kontextmenu oder ber das Summen Icon In der Zeile FUNKTION bestimmen Sie die Gruppierung indem Sie f r die Gruppierungsfelder die Funktion GRUPPIERUNG einstellen F r alle anderen Felder stellen Sie die Aggregatfunktion f r unser Beispiel SUMME ein was dann in ein SUM in SQL umgesetzt wird Beachten Sie bitte dass die Gruppie rungsfelder in der Reihenfolge von links nach rechts in die GROUP BY Klausel bernommen werden Sie m ssen also bei mehreren Gruppierungsfeldern Listing 4 46 Je Kurs bezahlte Betr ge Gruppierung in MS Access und openBase Gruppierung festlegen 139 S Kapitel 4 Abbildung 4 40 MS Access Darstellung
499. peichert werden Daf r stehen Typen wie BINARY oder VAR BINARY zur Verf gung Diese lassen sich dann zumeist mit CONVERT in ver schiedenen Zeichens tzen interpretieren Den Unterschied k nnen Sie sich mithilfe eines kleinen Beispiels klarmachen SELECT Familienname SUBSTR Familienname 3 1 AS Z3 Listing 5 3 ASCII SUBSTR Familienname 3 1 AS ASCIIL Bei zeichenbasierten CONVERT SUBSTR Familienname 3 1 USING utf8 AS ASCII2 normalen Strings erfolgt FROM tbPerson t keine Konvertierung MySQL SELECT Familienname SUBSTR Familienname 3 1 AS Z3 Listing 5 4 ASCII BINARY SUBSTR Familienname 3 1 AS ASCIII Bei bin ren Strings wird in CONVERT BINARY SUBSTR Familienname 3 1 USING utf8 AS ASCII2 einen neuen Zeichencode FROM tbPerson t i umgesetzt MySQL In beiden Listings wird versucht den dritten Buchstaben des Familienna mens zu ermitteln Dabei wird einmal das Zeichen ohne Konvertierung ermittelt was problemlos in beiden Beispielen funktioniert da der Zeichen satz verwendet wird der auch bei der Eingabe eingesetzt wurde Dann wird einmal der Inhalt als ASCH Zeichencode ausgegeben der in bei den Beispielen ebenfalls dasselbe Ergebnis liefert Schlie lich wird das Zei chen konvertiert in den Zeichensatz UTF8 ausgegeben Die Daten sind jeweils zeichenorientiert abgespeichert Im zweiten Beispiel wird mit der 155 W kaites Abbildung 5 3 Ergebnis ohne Zeichen satzumwandlung Abbildung 5 4
500. pen entspricht Weitere Anga ben sind datentypabh ngig und werden im unteren Bereich gemacht So fin den Sie f r den Datentyp Text dort die L ngenangabe Der Standardwert ent spricht der DEFAULT Klausel Die Angabe EINGABE ERFORDERLICH ist nat rlich die Umsetzung der NULL beziehungsweise NOT NULL Angabe in einer CREATE TABLE Anweisung Weitere Angaben wie die G LTIGKEITSREGEL oder die M glichkeit leere Texte zu unterbinden weisen bereits auf die CHECK Klauseln hin Der Prim rschl ssel wird durch Markierung in der linken Spalte vor dem Feldnamen Mausklick ausgew hlt Sollen in MS Access mehrere Schl ssel felder angegeben werden so k nnen Sie diese Felder ber die Entwurfsan sicht definieren Markieren Sie dazu mit gedr ckter Steuerungstaste die gew nschten Spalten und definieren Sie sie als Prim rschl ssel Dies geschieht entweder ber den Men befehl BEARBEITEN PRIM RSCHL SSEL oder ber die entsprechende Schaltfl che Beachten Sie dass mit jeder neuen Definition eines Schl ssels der bisherige Schl ssel entfernt wird Es ist also zwingend notwendig alle Prim rschl sselfelder gleichzeitig zu markieren Das Ergebnis sollte wie in Abbildung 8 14 dargestellt aussehen Beachten Sie bitte auch dass diese Art der Schl sselvergabe nur in der Ent Prim rschl ssel wurfsansicht von MS Access m glich ist W hrend des Imports k nnen Sie beim Import nur ein Feld als Schl sselfeld ausw hlen Dies f hrt aber in vielen
501. pen zu verwenden Im All gemeinen werden exklusive Sperren und nicht exklusive Sperren Shared Sperren unterschieden Bei einer exklusiven Sperre wird der gesperrte Bereich Datensatz Tabelle oder Seite f r einen Benutzer exklusiv gesperrt Er kann von ihm ge ndert oder gel scht werden Transaktionen anderer Benutzer erhalten keinen Zugriff und m ssen mit Schreib und L schoperationen warten Eine exklu sive Sperre wird durch jede ndernde SQL Anweisung ausgel st insbeson dere durch UPDATE und DELETE Sie kann auch durch eine SELECT Anweisung mit dem Zusatz FOR UPDATE bewusst ausgel st werden Sperren START TRANSACTION SELECT FROM artikel WHERE anr 6001 FOR UPDATE UPDATE artikel SET einstandspreis 1 64 WHERE anr 6001 COMMIT Der Sinn dieser Transaktion besteht darin bereits bei der Abfrage die betrof fenen Datens tze oder die gesamte Tabelle zu sperren Ist die Abfrage dabei erfolgreich k nnen die folgenden nderungen in jedem Fall durchgef hrt werden Kein anderer Benutzter sieht die ersten nderungen solange nicht alle Preis nderungen komplett durchgef hrt wurden Bei einer nicht exklusiven Sperre wird der gesperrte Bereich nur als Shared Read Bereich gespeichert Die Transaktion kann also davon ausgehen dass keine andere Transaktion die gelesenen Daten ndern oder l schen wohl aber lesen kann Der Vorteil liegt darin dass beispielsweise zun chst gepr ft werden kann ob ein Eintrag in
502. pierung voraussetzt Nur wenn eine Gruppierung vorhanden ist kann mithilfe einer Aggregatfunktion eine Gruppe von Datens tzen verdichtet werden in diesem Fall wird der Mittelwert der gruppierten Datens tze ermit telt Listing 9 2 Kombinierte Abfrage mit Unterabfrage Abbildung 9 4 Ergebnis der Abfrage mit Unterabfrage Listing 9 3 Erster nicht funktionsf higer Versuch eine Unterabfrage zu ersetzen 303 W kaites Listing 9 4 Zweiter nicht funktions f higer Versuch eine Unterabfrage zu ersetzen Listing 9 5 Erfolgreiche Gruppierung die aber keine Einzeldaten 304 s tze mehr liefert Syntax Unterabfragen Sub SELECT Das gleiche Problem ergibt sich auch wenn die Aggregatfunktion unmittel bar in der Datenfeldliste verwendet wird SELECT p Familienname p Vorname t DID t Stundensatz avg t Stundensatz FROM tbDozent t INNER JOIN tbPerson p ON t PID p PID WHERE t Stundensatz gt AVG t Stundensatz Es ist also zwingend eine Gruppierung der Datens tze erforderlich um den Mittelwert der Stundens tze ermitteln zu k nnen Die Gruppierung m sste allerdings derart gestaltet werden dass alle Datens tze in die Gruppierung einbezogen werden da der Mittelwert aller Datens tze ben tigt wird Ande rerseits werden aber die Einzeldatens tze ermittelt deren Stundensatz ber dem Mittelwert liegt Die folgenden Versuche funktionieren daher zwar syn taktisch ermitteln aber wiederum nicht
503. plikation mit 0 5 wird dann die H lfte der Kurstage ermittelt und mit der Anzahl der Fehltage verglichen siehe Listing 10 8 SELECT FROM tbce23 WHERE fehltage gt SELECT kursdauerStunden 8 0 5 FROM tbKurs k WHERE k KID CE23 J Das Ergebnis sind die zwei Kursteilnehmer aus Abbildung 10 5 Familienname Vorname KID Fehltage Zeugnis Martens Melanie CE23 5 N Magerkurth Melissa CE23 8 N Das sind also die beiden Teilnehmer die jetzt mit einer L schabfrage gel scht werden sollen Dazu wird einfach diese Abfrage als Unterabfrage in die WHERE Klausel der DELETE Anweisung eingebaut DELETE FROM tbce23 WHERE fehltage gt SELECT kursdauerStunden 8 0 5 FROM tbKurs k WHERE k KID CE23 Nach Ausf hrung der Anweisung sollten die beiden Zeilen in der Tabelle tbce23 gel scht worden sein Wenn Sie brigens jetzt ein wenig aufr umen wollen und die restliche Tabelle auch noch komplett mit Struktur l schen wollen k nnen Sie das wie gewohnt mit einem DROP erreichen DROP TABLE tbce23 Abschlie end soll noch einmal die Syntax f r die DELETE Anweisung mit Unterabfrage zusammengefasst werden DELETE FROM tabellenname WHERE SELECT Anweisung DELETE mit Unterabtragen W E O p bungen zu DELETE TABLE mit Unterabfragen bungen Erstellen Sie f r die folgenden Aufgaben jeweils eine SELECT Anweisung 1 Ermitteln Sie in der Tabelle tbDozent die ID und die h chste Kursgeb hr f r alle Dozent
504. r SELECT p Ort COUNT AS Personen in der Datenbank FROM tbPerson AS p WHERE p Ort IN C Hannover Braunschweig Celle GROUP BY p Ort ORDER BY COUNT DESC Derselbe Effekt l sst sich in diesem Fall auch mit einer HAVInG Klausel errei chen wenn eine GROUP BY Klausel existiert 145 WM karitea Listing 4 50 Wahlweises Filtern mit WHERE und HAVING WHERE versus HAVING Beispiel Listing 4 51 Varianten mit WHERE und HAVING Abbildung 4 45 Ergebnis der SELECT 146 Anweisung mit HAVING Klausel Mit SQL Daten abfragen SELECT SELECT p Ort COUNT AS Personen in der Datenbank FROM tbPerson AS p GROUP BY p Ort HAVING p Ort IN C Hannover Braunschweig Celle ORDER BY COUNT DESC In jedem anderen Fall also wenn sich die Filterbedingung auf ein Feld des Gruppendatensatzes mit dem Z hler COUNT oder einer anderen Aggregat funktion bezieht ist die Nutzung der HAVING Klausel statt der WHERE Klausel zwingend erforderlich weil der zu filternde Wert erst durch die Aggregation entsteht Haben Sie wie im ersten Beispiel die Wahl ist also eine HAVING Klausel nicht zwingend so sollten Sie im Normalfall die WHERE Bedingung verwenden um die Datenmenge so fr h wie m glich zu reduzieren Ein weiteres Beispiel in dem sowohl die WHERE als auch die HAVING Klausel verwendet werden k nnen ist eine Fortf hrung des Beispiels der GROUP BY Klausel aus Listing 4 43 Hierbei wird die Anzahl
505. r Isolationsstufe READ COMMITTED Tabelle 13 3 Transaktion mit dem Isolationslevel REPEATABLE READ Transaktionen Eigene Transaktion T1 Fremde Transaktion T2 SELECT FROM bestellung WHERE KID 1 LOCK IN SHARE MODE Sie sehen auch die neue Bestellung von KID 1 SELECT FROM bestellung WHERE KID d Sie sehen nach wie vor nur die erste Bestellung des Kunden mit der KID 1 COMMIT SELECT FROM bestellung WHERE KID l Sie sehen auch die neue Bestellung von KID 1 COMMIT SELECT FROM bestellung WHERE KID a Sie sehen auch die neue Bestellung von KID 1 Sie sehen dass die nderungen der fremden Transaktion erst sichtbar wer den wenn diese mit einem COMMIT beendet wurde Das Ergebnis der Abfrage in der eigenen Transaktion ist unabh ngig von einem COMMIT der eigenen Transaktion Die n chste Isolationsstufe REPEATABLE READ ist die Standardeinstellung von MySQL Im Unterschied zu READ COMMITED werden bei einem SELECT jetzt stets die Daten gelesen die beim Beginn der eigenen Transaktion aktuell waren Eigene Transaktion T1 Fremde Transaktion T2 START TRANSACTION SET TRANSACTION ISOLATION LEVEL REPEATABLE READ SELECT FROM bestellung WHERE KID I Sie sehen 1 Bestellung des Kunden 1 START TRANSACTION SELECT FROM bestellung WHERE KID 1 LOCK IN SHARE MODE 1 Datensatz des Kunden gefunden INSERT INTO bestellung VALUES 1 9999 1 CURRENT
506. r Fremdschl sselbeziehungen mit REFERENCES ist nicht zwingend erforderlich die Beziehungen k nnen auch nur durch die entspre chenden Angaben in den SELECT Anweisungen genutzt werden Durch Beachtung sinnvoller und zusammenpassender Werte bei INSERT UPDATE und DELETE Anweisungen k nnen die Beziehungen auch inhaltlich sicherge stellt werden Bei einem manuellen Vorgehen also dem Verzicht auf die REFERENCES Angaben liegt die Verantwortung f r die Pflege der Beziehun gen bei dem Anwender oder dem Programm das die Daten ndert einf gt oder l scht Dies kann gew nscht sein Es erh ht den Freiheitsgrad bei der Programmierung der Datenbankanwendung da die Datenbank weniger pr ft und somit auch weniger Fehlermeldungen durch fehlende oder nicht zusammenpassende Daten entstehen Umgekehrt erh ht dies das Fehler risiko da die Datenbank die Qualit t der Daten in geringerem Ma selbst sicherstellen kann Andererseits hat die Verwendung der REFERENCES Angabe nat rlich auch erhebliche Vorteile Die Verwendung der REFERENCES Klausel erlaubt der Datenbank die Pr fung auf zusammenh ngende Daten in der obigen Anweisung beispielsweise die Angabe einer g ltigen Warengruppe bei der Erfassung eines Artikels Letztlich k nnen alle im Zusammenhang mit der referenziellen Integrit t m glichen Restriktionen durch die Datenbank selbst berpr ft werden Damit kann die Datenbank die Integrit t der Beziehungen garantieren und somit zur Datenqualit
507. r Kathrin 38154 Braunschweig M ller Claudia 29596 Breitenhees Peredy Helmut 29221 Celle Plate Ulrich 30529 Hannover Ruppert Nicola 29301 Bergen Sander Em 29223 Celle Schlachter Dieter 29227 Celle Schmidt Karl 30529 Hannover Schulze Tanja 29308 Winsen weiss Karin 30529 Hannover weiss Peter 38134 Braunschweig weiss Peter 30529 Hannover winter Petra 29320 Hermannsburg Die Reihenfolge der Sortierung wird dabei stets durch die Reihenfolge der Felder Ausdr cke in der ORDER BY Klausel bestimmt und von links nach rechts abgearbeitet Sortierungen k nnen prinzipiell aufsteigend oder absteigend erfolgen Daf r bietet SQL die Schl sselw rter ASCENDING aufstei gend und DESCENDING absteigend an die zumeist mit ASC und DESC abge k rzt werden Nicht alle Datenbanken unterst tzen die Langform Der Stan dardwert ist ASC Somit ist die obige Abfrage gleichbedeutend mit SELECT p Familienname p Vorname p PLZ p Ort FROM tbPerson p ORDER BY p Familienname ASC p Vorname ASC Soll eine Liste absteigend nach dem Geburtsdatum und innerhalb der Geburtsdaten aufsteigend nach Namen sortiert werden erg be sich SELECT p Familienname p Vorname p PLZ p Ort p Geburtsdatum FROM tbPerson p ORDER BY p Geburtsdatum DESC p Familienname ASC p Vorname ASC Abbildung 4 9 Ergebnis der SELECT Anweisung ASCIDESC Listing 4 13 Alphabetisch aufsteigende Sortierung Listing 4 14 Gemischte absteigende und aufsteigende Sortierungen 10
508. r Tabelle aus 09 7 1 als Unterabfrage jetzt die mid die bnr die pos sowie die Anzahl die Artikelnummer und den Ge samtwert jeder Bestellposition netto und brutto 09 7 2 3 Ermitteln Sie mithilfe der Tabelle aus U9 7 2 als Unterabfrage f r alle Be stellungen die Bestellnummer die Kundennummer das Bestelldatum so wie den Bestellwert netto und den Bestellwert brutto als Summe der einzelnen Positionen der Bestellung Verwenden Sie sinnvolle Alias bei der Anzeige U9 7 3 9 8 Unterabfragen mit MS Access MS Access beherrscht Unterabfragen allerdings sind diese nicht wirklich in die grafische Oberfl che integriert Eine Unterabfrage wird zumeist in der WHERE Klausel definiert Dementsprechend ist in MS Access auch nur eine M glichkeit vorgesehen die komplette Unterabfrage in den Kriterien in SQL Syntax einzugeben So wird unser anf ngliches Beispiel SELECT p Familienname p Vorname t DID t Stundensatz FROM tbDozent t INNER JOIN tbPerson p ON t PID p PID WHERE t Stundensatz gt SELECT AVGCt2 Stundensatz FROM tbDozent t2 inMS Access wie in Abbildung 9 10 dargestellt eingegeben 315 5 Kapitel 9 Abbildung 9 10 Abfrage mit Unterabfrage in MS Access Listing 9 22 Unterabfrage in MS Access 316 Unterabfragen Sub SELECT tbDozent Stundensatz Firma Titel Geburtsdatum Qualifikationen e E Feld Familienname _ vorname _ DID_____ Stundensatz Tabelle tbDozent soteng Tooo Anzeigen m K
509. r den Administrator nicht da es hier nur um Inhalte geht Diese SQL Befehle k nnen wir mit mysql exre ausf hren lassen Wechseln Sie in der Ein gabeaufforderung in das Kurs Verzeichnis datenbanken MySQL kurse und schicken Sie dann folgenden Befehl ab mysql exe uroot pmasterkey kurse lt CreateKurse txt Diese Zeile bedeutet im Prinzip 1 Melde dich als Benutzer root bei MySQL an Gedanklich haben wir jetzt den Cursor mysql gt vor uns 2 W hle die Datenbank kurse entspricht einem mysql gt use Kurse 3 F hre alle SOL Befehle aus die du in der Datei CreateKurse txt findest 4 F hre die Abmeldung aus entspricht mysqI gt exit Zus tzlich zum Benutzer und zum Passwort muss jetzt das Datenbank schema angegeben werden das wir im ersten Schritt bereits erzeugt haben Damit wei MySQL in welchem Datenbankschema die Tabellen angelegt werden sollen Schlie lich wird das Skript CreateKurse txt als Input Daten strom an das Tool bergeben Die Verzeichnisstruktur entspricht der Struktur auf Ihrer CD Bei einer abweichenden Installation m ssen hier eventuell nderungen vorgenommen werden Wir wollen das Ergebnis unserer Batch SQL Anweisungen zun chst mit mysql exe berpr fen Dazu wollen wir mit direkten Befehlen und SQL Anweisungen in mysql ere arbeiten Zun chst m ssen wir uns also wieder anmelden mysql uroot pmasterkey Nach diesem Befehl ndert sich der Cursor wie gehabt zu mysql gt Jetzt m ss
510. racle auf das abschlie ende END verzichtet und MS Access mit SWITCH eine eigene Syntax verwendet bungen zu den sonstigen Funktionen Erstellen Sie f r die folgenden Aufgaben jeweils eine SELECT Anweisung 1 F r Adresslisten soll eine Umformatierung wie in 5 6 3 3 vorgenommen werden Die Ausgabe soll in der Form Bucz Susanne 29xxx CELLE Marxallee12 erfolgen Erstellen Sie eine solche Liste jetzt mit Ber ck sichtigung des Problems des fehlenden Vornamens 5 6 6 1 Gruppenorientierte Funktionen Aggregatfunktionen 2 Jetzt soll ermittelt werden welche Person im aktuellen Jahr schon Ge burtstag hatte oder hat Dazu soll das Geburtsdatum das aktuelle Datum und Ja ausgegeben werden wenn die Person heute oder fr her im Jahr Geburtstag hatte sonst Nein 5 6 6 2 5 7 Gruppenorientierte Funktionen Aggregatfunktionen Gruppenorientierte Funktionen auch Aggregatfunktionen genannt fas sen die Werte eines Datenfeldes Ausdruckes ber eine Gruppe von Daten s tzen zusammen Dadurch wird ein Wert ermittelt der repr sentativ f r das Feld in der gesamten Datensatzgruppe ist Soll die Anzahl der Teilnehmer des Kurses CE23 ermittelt werden so ist die Anzahl der Datens tze zu ermitteln Dies kann wie in Kapitel 4 gesehen rela tiv einfach geschehen SELECT kb KID COUNT kb KBID AS Anzahl Kursbesucher FROM tbKursbesuche kb GROUP BY kb KID Es werden hier die Datens tze nach der KID gruppie
511. rafische Oberfl che in der die Abfrage zu sammengestellt und dann daraus die SOL Anweisung generiert wird Mit den Assistenten wird noch ein Abfragedialog vor die Entwurfsan sicht und die SQL Generierung geschaltet Somit gibt es hier drei Stufen Dialog Entwurf und schlie lich SQL Mit der SOL Ansicht schlie lich kann eine SOL Anweisung direkt einge geben werden F r unsere Zwecke sind die Assistenten wenig hilfreich Die Entwurfsansicht kann in einigen F llen dazu verwendet werden um das Ergebnis als SQL Anweisung zu analysieren Sie soll daher hier einmal beispielhaft aufgerufen werden openBase fragt dann nach den zu verwendenden Datenquellen wie in Abbildung A 40 zu sehen W hlen Sie beispielsweise tbPerson aus Sie gelangen dann in das ber sichtsfenster f r die Erstellung einer Abfrage siehe Abbildung A 41 Im oberen Teil des Fensters sind die ausgew hlten Datenquellen dargestellt Darunter ist eine tabellenartige Struktur die der Konstruktion der Abfrage und schlie lich der SQL Generierung dient Wie in MS Access k nnen Sie die gew nschten Datenfelder entweder per Doppelklick auf die Datenfelder im oberen Tabellenbereich oder mit Ziehen mit gedr ckter linker Maustaste aus dem oberen in die Tabelle im unteren Bereich in die Abfrage einf gen Abfragen Abbildung 1 39 M gliche Aktionen f r Abfragen 407 5 Anhang A Anhang Benutzung der Datenbanksysteme Abbildung A 40 Datenquellen f r Tabel
512. rd der Eintrag gefunden und anschlie end gepr ft ob in den Unterb umen weitere Eintr ge vorhanden sind Der genaue Algorithmus soll hier nicht interessieren Wichtig ist f r die Performance der Abfrage derartige B ume m glichst ausgeglichen balan ced zu gestalten Dies garantieren die sogenannten B B ume mit einem spe ziellen Einf ge und Ausgleichsmechanismus Bei einem ausgeglichenen Baum l sst sich die Tiefe t aus der Anzahl der Datens tze n mit der Formel t log n n herungsweise bestimmen Die Tiefe des Baums bestimmt wiederum die Anzahl der Datenzugriffe und Vergleiche die notwendig sind um einen bestimmten Datensatz zu finden W hrend bei einer Suche ohne Index sequenziell alle Datens tze durchsucht werden m ssen und so im schlimms ten Fall n Zugriffe erforderlich sind reduziert sich hier die Anzahl der Such zugriffe erheblich wie sich der Tabelle 14 2 entnehmen l sst Weitere berlegungen zum Einsatz von Indizes 114 m Datens tze n Suchzugriffe bei Suchzugriffe bei Suche pe ahl der sequenzieller Suche n mit B Baum Index log n maximalen Datenzugriffe bei einem Index 10 1 3 mit B Baum 100 100 7 1000 1000 10 10000 10000 13 100000 100000 17 1000000 1000000 20 Sie sehen wie der Index die Anzahl der notwendigen Datenzugriffe mit zunehmender Anzahl der Datens tze drastisch reduziert Sind bei 10 Daten s tzen mit Index noch 30 der Zugriffe notwendig so sin
513. rd nur das entsprechende Kontrollfeld MIT REFERENTIELLER INTEGRIT T aktiviert stellt MS Access den Standardwert NO ACTION ein Jetzt wird also das L schen und ndern von Datens tzen so kontrolliert dass keine Verletzung der referen ziellen Integrit t auftreten kann Es k nnen also keine Datens tze in die Detailtabelle eingef gt werden denen kein Wert in einem Prim rschl ssel feld der Mastertabelle entspricht Hier bedeutet das dass keine Bestellungen eingef gt werden k nnen deren Kunde nicht in der Kundentabelle steht Es k nnen auch keine Datens tze von Kunden aus der Kundentabelle gel scht werden die noch Bestellungen in der Tabelle bestellung aufweisen Schlie lich k nnen weder Prim rschl ssel noch Fremdschl ssel ge ndert werden 274 Integrit tsbedingung Die beiden zus tzlichen Optionen AKTUALISIERUNGSWEITERGABE und L SCHWEITERGABE erm glichen ein Verhalten das der Option CASCADE ent spricht Hier werden also bei einer nderung des Prim rschl ssels kid oder mid in kunden die entsprechenden Werte in die jeweiligen Felder der Tabelle bestellung bernommen sodass sie nach einer nderung wieder berein stimmen Die L schweitergabe bewirkt schlie lich im Falle des L schens eines Datensatzes aus der Tabelle kunden das L schen der entsprechenden Datens tze aus der Detailtabelle bestellung In Normalfall wird nach dem Einschalten der referenziellen Integrit t die Darstellung der Beziehung ver ndert
514. rden alle Tabellen angegeben auf die in der gesamten SE LECT Anweisung zur ckgegriffen wird sowie deren Verbindungen unter einander beschrieben JOIN Im einfachsten Fall werden alle Datens tze einer Tabelle ermittelt und bilden die Zeilen der Ergebnistabelle Somit ist mit SELECT ausdrucksliste FROM tabelle eine Ergebnistabelle bereits vollst ndig definiert Das Ergebnis kann ermittelt und angezeigt werden Alle weiteren Anweisungen modifizieren dieses Ergebnis nur noch E Die wHERE Klausel beschreibt die Bedingungen die ein Datensatz erf llen muss in Form seiner Werte um in die Ergebnismenge die die SELECT Anweisung liefert aufgenommen zu werden Hier werden also die ermit telten Ergebniszeilen eingeschr nkt Die GROUP Klausel erlaubt es Gruppen von Datens tzen zu einem Grup pendatensatz zusammenzufassen m Die HAVING Klausel gibt wiederum Bedingungen f r diese Gruppendaten s tzen an die erf llt sein m ssen um einen gruppierten Datensatz in die Ergebnismenge der SELECT Anweisung aufzunehmen Hier werden also die ermittelten Gruppendatens tze eingeschr nkt Mit der ORDER BY Klausel k nnen die Datens tze und die Gruppendaten s tze vor ihrer Ausgabe abschlie end sortiert werden Einfache Abfragen Wichtig ist in jedem Fall die Reihenfolge der einzelnen Klauseln beizube halten Eine WHERE Klausel steht immer vor der GROUP Klausel Eine ORDER BY Klausel kommt niemals vor einem HAVING und Entsprec
515. regatfunktion SuM verwendet Dem zweiten Feld sum_fehltage wird mit SUMCtbKursbesuche Fehltage die Summe der Fehl tage aller Teilnehmer des Kurses CE23 zugeordnet An dritter Stelle steht das Feld sum_rabatt Diesem Feld wird ber den an dritter Stelle des SELECT stehenden Ausdruck SUMCtbKursbesuche Rabatt die Summe der Rabatte aller Kursteilnehmer als Wert bertragen Das vierte Feld mittel_beitrag wird mit dem Mittelwert der gezahlten Beitr ge aller Kursteilnehmer AVGCtbKursbesuche GezahlterBetrag gef llt Schlie lich wird noch die Anzahl der Kursteilnehmer mit COUNTCtbKursbesuche KBID aus der Anzahl verschiedener Werte des Prim rschl ssels ermittelt Der Prim rschl ssel stellt immer eine gute Grundlage f r die Ermittlung der Datensatzanzahl dar da sich dessen Werte nicht wiederholen d rfen INSERT INTO tabellenname feld1 feld2 SELECT Select Anweisung Mithilfe des SELECT als Datenquelle k nnen Sie die Werte neuer Datens tze aus bereits existierenden Tabellen bernehmen oder berechnen Erlaubt sind dabei alle SELECT Anweisungen die die ben tigte Anzahl der Werte im rich tigen Format ohne Prim rschl sselverletzung liefern Mit anderen Worten alle Anweisungen die die Bedingungen eines INSERT erf llen Interessant ist dass Sie auf diese Weise mit einer einzigen INSERT INTO Anweisung mehrere Datens tze gleichzeitig einf gen k nnen Jeder Datensatz den das SELECT liefert wird n mlich nacheinander mi
516. regatfunktionen sind bereits in die Tabel len aufgenommen worden Es sind noch weitere Funktionen insbesondere aus dem Bereich der Regression aufgenommen worden wie REGR_SLOPE REGR_INTERCEPT REGR_COUNT REGR_R2 REGR_AVCX REGR_AVGY REGR_SXX REGR_SYY REGR_SXY die aber bisher nur in Oracle in etwas anderer Syntax verf gbar sind Es soll f r alle Personen ermittelt werden wie viele Kurse sie besuchen Zus tzlich soll berechnet werden wie hoch die bisher gezahlten Betr ge sind und wie hoch diese durchschnittlich pro Kurs sind Da die Personen von besonderem Interesse sind die besonders viel bezahlt haben soll das Ergeb nis absteigend nach den gezahlten Betr gen sortiert werden Daf r muss auf die beiden Tabellen tbPerson und tbKursbesuche zugegriffen werden Beide Tabellen werden daher ber einen INNER JOIN verbunden Dann soll ein Ergebnis pro Person ermittelt werden Dies k nnte ber die PID in der Tabelle tbPerson oder ber die KTID in der Tabelle tbKursbesuche erfolgen Da die Gruppierung der Betr ge letztlich ber die Kursbesuche erfolgt wird die KTID gew hlt Jetzt m ssen alle Felder des Ergebnisses au er dem Gruppierungs feld selbst mit einer Aggregatfunktion versehen werden um je Gruppe einen eindeutigen Wert zu liefern Das gilt letztlich auch f r den Namen der Per son wobei einige Datenbanken wie MySQL dies nicht zwingend erfordern Hier kann aber jede Funktion gew hlt werden die keine numerische Eingabe erfor
517. ren Gruppierungsfeldern m ssen also in jeder Gruppe die Werte aller Gruppierungsfelder identisch sein Soll beispielsweise ermittelt werden wie sich die Struktur der Zahlungsweise innerhalb der Kursteilnehmer der einzelnen Kurse zusammensetzt so kann zun chst nach der KID also dem Kurs und dann innerhalb des Kurses nach der Zahlungsweise gruppiert werden DieGROUPEYKuec M MH U Gruppierungsfeld KID Abbildung 4 37 Gruppierung nach der Kurs Identifikationsnmmer CE17 4 Karmann Thomas KID Gruppe mit KID CE17 CE17 5 Kl tzer Karl CE17 25 Sander CE23 4 Karmann Thomas CE23 5 Kl tzer Karl CE23 10 M ller Claudia Gruppe mit KID CE23 CE23 15 Martens Melanie CE23 24 Ruppert Nicola CE23 31 Schulze Tanja CE23 32 Winter Petra CE23 37 Magerkurth Melissa CE24 4 Karmann Thomas CE24 10 M ller Claudia Gruppe mit KID CE CE24 11 Lisewski Bernd CE24 15 Martens Melanie CE24 23 Peredy Helmut H90 9 Schmidt Karl Cuppa m IDENT 1 H90 34 Plate Ulrich SELECT kb KID kb Zahlweise COUNT AS Anzahl Zahler Listing 4 45 FROM tbKursbesuche kb Mehrstufige Gruppierung GROUP BY kb KID kb Zahlweise Die entstehende Struktur ist in Abbildung 4 38 dargestellt Es entstehen 10 Gruppen In jeder der Gruppen sind die Werte beider Gruppierungsfelder in allen Datens tzen gleich KID CE1T KID CE23 Zahlweise Gutschein Gruppierungsfeld KID Abbildung 4 38 Gruppierungsfeld Zahlweise Zweifache Gruppierung f hrt zu 10 Gruppen
518. rgehen in einem Spiralmodell mit Prototyping oder Extreme Programming die weiteren Entwicklungsschritte durchgef hrt Aus Datenbanksicht sind im Rahmen des Entwicklungsprozesses dabei ver schiedene Aspekte zu beachten EB Welche Datensichten werden von verschiedenen Anwendern und Pro grammen auf die Datenbank ben tigt externe Schemata VIEws m Wie k nnen sie zu einer gemeinsamen konzeptionellen Struktur kon zeptionelles Schema zusammengefasst werden E Wie soll die logische Struktur aussehen in welcher Form werden also die Daten gespeichert und wie soll mit SQL darauf zugegriffen werden E Wie muss die physische Struktur internes Schema der Datenbank an gepasst werden um die Zugriffe zu optimieren Datenbanken werden wie Software auch in mehreren aufeinanderfolgen den Phasen entwickelt Das Ziel ist es von einer abstrakten und oft nur sprachlich unklar formulierten Anforderung der Nutzer zu einer exakten f r den Rechner verst ndlichen Formulierung der Struktur zu kommen Bei der reinen Entwicklung und Nutzung einer Datenbank ohne Program mierung k nnen Sie f nf Phasen voneinander unterscheiden Das 3 Ebenen Modell Tabelle 7 1 Idealtypische Vorgehens Phasenname T tigkeiten Ergebnisse Anforderungs In der Anforderungsanalyse werden Pflichtenheft analyse die Anforderungen aller Benutzer an die neue Datenbank zusammenpgetra gen Es kann auf UML oder andere Vorarbeiten zur ckgegriffen werde
519. rgestellt werden k nnen Die gute Nachricht ist dass die Datenbankhersteller bem ht sind den Anwendern den Umstieg zu erleichtern und viele Funktionen gleich benen nen manchmal sogar dieselbe Funktion unter verschiedenen Namen anbie ten um die Kompatibilit t zu verbessern Als kleines Beispiel kann daf r die Funktion CURRENT_TIMESTAMP dienen die das aktuelle Systemdatum und die Systemzeit im TIMESTAMP Format lie fert In MySQL k nnen Sie den aktuellen TIMESTAMP auf mindestens drei Arten erstellen Die folgende SELECT Anweisung liefert dreimal dasselbe Ergebnis SELECT NOWO SYSDATEC CURRENT_DATE Bevor wir uns den Funktionen im Detail widmen noch ein paar Hinweise zu einigen Datenbanken um keinen zu gro en Frust aufkommen zu lassen MySQL bietet einen gro en Funktionsumfang mit teils historisch gewachse nen und teils in neuerer Zeit st rker am Standard und anderen Systemen ori entierten Funktionen Sie finden sowohl in der PDF Datei refman 5 1 de a4 pdf als auch in der Oberfl che im unteren rechten Fenster unter dem zweiten Reiter FUNKTIONEN eine umfangreiche Dokumentation Oracle ist als die Datenbank mit den meisten und m chtigsten Funktionen bekannt Sie finden die Dokumentation am besten online indem Sie im bersichtsfenster HOME rechts oben auf LiNKs DOCUMENTATION klicken Geben Sie beispielsweise SQL function ein und w hlen Sie einen Eintrag der erste ist oft eine gute Wahl Datensatzorientiert
520. rich Monat Bindestrich und schlie lich der Tag Doch seien Sie vorsichtig man kann die Datumsdarstellung auch abweichend von dem internen Format einstellen und dann hilft nur noch probieren ein Blick in die Einstellungen der Datenbank oder ein Anruf beim Administrator Beispiel Listing 4 18 Alle Personen aus Celle die im Februar Geburtstag haben MS Access MS Access Beispiel Abbildung 4 11 Ergebnis der SELECT Anweisung mit WHERE Klausel in MS Access MySQL Beispiel Listing 4 19 Alle Personen aus Celle die im Februar Geburtstag haben 105 WM karitea Abbildung 4 12 Ergebnis der SELECT Anweisung mit WHERE Klausel in MySQL Projektion Abbildung 4 13 Auswahl der Spalten ber die SELECT Klausel 106 Mit SQL Daten abfragen SELECT Neben dem unterschiedlichen Format sind hier auch unterschiedliche Platz halter verwendet worden MS Access nutzt das Windows typische Zeichen w hrend MySQL das SQL standardkonforme Zeichen verwendet Oracle Firebird und openBase verwenden dieselben standardkonformen Platzhalter wie MySQL openBase kennt beide Varianten Mehr zu den Platzhaltern finden Sie im Anschluss an die Operatorenliste in Tabelle 4 1 Familienname Vorname PLZ Strasse Geburtsdatum Martens Melanie 29221 Celle 1911 02 17 Peredy Helmut 29221 Celle 1956 02 23 Sander pai 29223 Celle 1953 02 05 Schlachter Dieter 29227 Celle 1961 02 02 Die WHERE Klausel beschreibt die Bedingungen
521. riterien gt SELECT AYG t2 Stundensatz FROM tbDozent t2 oder Das ist nicht wirklich komfortabel aber es funktioniert wie in anderen Datenbanksystemen Die entsprechende SQL Anweisung die von MS Access daraus generiert wird zeigt bis auf die zus tzlichen Klammern eine praktisch identische SQL Syntax SELECT tbPerson Familienname tbPerson Vorname tbDozent DID tbDozent Stundensatz FROM tbPerson INNER JOIN tbDozent ON tbPerson PID tbDozent PID WHERE CtbDozent Stundensatz gt SELECT avg t2 Stundensatz FROM tbDozent t2 Allerdings besteht in MS Access die M glichkeit bei der Erstellung einer Abfrage ber die grafische Oberfl che neben den Tabellen auch auf andere Abfragen zuzugreifen Dabei wird dann ebenfalls die SOL Anweisung der so verwendeten Abfrage als Unterabfrage verwendet was allerdings nur bei einer Verwendung in der FROM Klausel funktioniert Auf diese Weise k nnen also Abfragen als Datenquellen verwendet werden aber nicht in der WHERE oder der HAVING Klausel Unterabfragen in der DDL und DML In Kapitel 9 sind Unterabfragen im Zusammenhang mit der SELECT Anwei sung besprochen worden Unterabfragen k nnen aber auch im Zusammen hang mit der Erstellung von Tabellen CREATE sowie mit der nderung von Daten in den Tabellen INSERT UPDATE DELETE genutzt werden Sie werden in diesem Zusammenhang ebenfalls stets als SELECT Anweisung formuliert die dann als Unterabfrage beispielswe
522. rmular Hat der Anwender die gew nschten Informationen beschrieben kann er sie per Knopfdruck aus der Datenbank erhalten Tat s chlich werden aus den Beschreibungen des Anwenders SQL Anweisungen generiert Die Informationen werden dann mit diesen SQL Anweisungen aus der Datenbank gewonnen und dem Anwender zur Verf gung gestellt Das Vorgehen ist in Abbildung 2 1 schematisch dargestellt Abbildung 2 1 Generierung von SQL Anweisungen ber eine Windows Oberfl che Windows Oberfl che SQL Daten Datenbank 2 3 Die Verarbeitung einer SQL Anweisung Die Verarbeitung einer SQL Anweisung ist in Abbildung 2 1 eher anschau lich dargestellt Data Dictionary Technisch sind in die Verarbeitung eine ganze Reihe von Komponenten ein gebunden die Abbildung 2 2 etwas detaillierter wiedergibt Der gro e Rah men umfasst die Komponenten des Datenbanksystems im engeren Sinne Die Datenbank beinhaltet dabei s mtliche Informationen ber ihre eigene Struk tur die Strukturen die Anwender angelegt haben also Tabellen Beziehun gen Benutzer und Benutzergruppen Berechtigungen und viele weitere Informationen die der Verarbeitung dienen Diese Informationen sind im Data Dictionary gespeichert das die Datenbank selbst verwaltet 22 Die Verarbeitung einer SQL Anweisung u A Abbildung 2 2 Grundablauf bei der SQL Anweisung Logische Records
523. rn vorhanden sein die paarweise den Prim rschl sselfeldern entsprechen Im Prinzip m ssen zum Aufbau einer Fremdschl sselbeziehung immer alle Prim rschl sselfelder der Tabelle zu der die Beziehung aufgebaut werden soll kopiert werden und eine entsprechende Anzahl passender Fremdschl sselfelder angelegt werden Jetzt k nnte hier noch ein SQL Beispiel f r die Abfrage ber eine Beziehung hinweg stehen Aber das w rde dann doch zu viele Erkl rungen erfordern Wenn Sie wollen k nnen Sie aber schon einmal in Kapitel 4 unter dem Stichwort JOIN spicken bevor wir uns jetzt den realen Datenbanken zuwenden Die Beispieldatenbanken Bevor wir uns jetzt den ersten realen SQL Befehlen im Detail zuwenden wollen wir noch die beiden Grundlagen betrachten die Sie f r die Beispiele dieses Buches ben tigen Zum einen sind dies die Beispieldatenbanken auf die sich die meisten SQL Beispiele dieses Buches beziehen Zum anderen soll die Installation der Datenbankmanagementsysteme MySQL MS Access openBase Oracle und Firebird beschrieben werden die Sie f r die Bearbei tung der Beispiele nutzen k nnen Wir werden in diesem Buch Beispiele f r alle f nf Systeme zeigen indem wir auch f r alle bungsaufgaben L sungen f r alle Systeme erstellen soweit dies sinnvoll m glich ist Die L sungen fin den Sie auf der beiliegenden CD Dieses Kapitel hat zwei Funktionen Es soll Ihnen zum einen helfen eine Bei spielumgebung f r die
524. rnes Systemfeld sehr beliebt dessen Wert bei Neueingaben oder nderungen automatisch in die Datens tze ein gef gt wird um die jeweils letzte nderung dokumentieren zu k nnen 161 WM kaites Intervall Tabelle 5 6 Datentypen f r Datums und Zeitangaben 162 Tabelle 5 7 Sonstige g ngige Datentypen Datentypen Ausdr cke und Funktionen Genutzt werden neben den Angaben von Zeitpunkten auch die Angaben von Zeitintervallen einige Datenbanken bieten hierzu auch eigene Datentypen Ein Intervall kann beispielsweise in Oracle in einem Datentyp INTERVAL DAY TO SECOND gespeichert werden der einen Zeitunterschied ausgedr ckt in Tagen Stunden Minuten und Sekunden speichert Die Tabelle 5 6 gibt einen berblick ber die wichtigsten Datums Uhrzeittypen in den verschiedenen Systemen ANSI MySQL MS Access Oracle Firebird openBase DATE DATETIME DATE TIME DATE DATE und DATE und DATE und PATETIME TIME TIME TIME exis Datum Uhr zusammen zusam tieren auch Zeit men einzeln TIMESTAMP TIMESTAMP TIMESTAMP TIME TIMESTAMP TIME Datum Uhr STAMP n STAMP n zeit n 0 oder 6 TIME TIMESTAMP STAMP WITH WITH TIMEZONE TIMEZONE 5 1 5 BITs BLOBs und andere Datentypen Neben den beschriebenen Datentypen gibt es eine Reihe von Erweiterungen die in vielen Systemen verf gbar sind Die wichtigsten sind die M glichkeit bin re Werte also 0 1 True False zu speichern wof r zu
525. rt die Informationen in Feldern Eine Tabelle tbArtikel beschreibt beispielsweise welche Informationen ber einen Artikel gespei chert werden k nnen F r jede Information wird ein Feld verwendet Ein Feld enth lt immer genau eine Information die Artikelnummer die Arti kelbezeichnung oder eine andere atomare Information aber nicht zwei oder mehrere Informationen gleichzeitig Sind die Felder einer Tabelle tbAr tikel bekannt wissen wir was wir an Informationen ber einen Artikel speichern k nnten Die Kursdatenbank die hier als wesentliche Grundlage f r die Beispiele ver wendet werden wird enth lt unter anderem eine Tabelle tbDozent Die Tabelle enth lt alle grundlegenden Informationen ber die Dozenten Die Datenfelder sind in diesem Fall DID PID Beschaeftigungsbeginn Stunden satz Firma Titel und Qualifikationen Die Abbildung 2 6 zeigt einen Aus schnitt mit den ersten Datens tzen der Tabelle DID PID Beschaeftigungsbeginn Stundensatz Fima Titel Qualifikationen 812 1 01 07 2003 18 70 selbstst ndig Informatiker Word Windows Datenbanken 815 17 01 01 2002 15 00 selbstst ndig IT Kaufmann Office Datenbanken Netzwerke on 2 4E nn anne AINNE aka Ur Kinintar AOMA Orauam nann Attribut Hier werden die einzelnen Informationen einer Tabelle als Felder bezeichnet Dies ist eine weitverbreitete Bezeichnung Synonym werden Felder auch als Spalten bezeichnet da jedes Feld in der D
526. rt und ein Gruppen datensatz f r jede Gruppe gebildet Mit der Funktion COUNTCkb KBID werden die Datens tze gez hlt die einen Eintrag in dem Feld kb KBID besitzen Sie kennen bereits die Spezialfunktion COUNTC die alle Datens tze z hlt COUNTC stellt im Rahmen der Aggregat funktionen einen Sonderfall dar da sie sich als einzige der g ngigen Funk tionen auf den gesamten Datensatz daher bezieht Alle anderen Aggre gatfunktionen beziehen sich immer auf ein einzelnes Feld Der Vorteil von COUNTC liegt in der Behandlung der NULL Werte Da ein gesamter Datensatz niemals NULL sein kann wird mit COUNTC die Anzahl der Datens tze unab h ngig von irgendwelchen nuULL Werten bestimmt COUNT feldname bestimmt im Gegensatz dazu die Anzahl der Datens tze in denen das Feld feldname nicht NULL ist kann also unter Umst nden weniger Datens tze liefern COUNT feldname ist wiederum eine Kurzform f r COUNT ALL feldname das die Anzahl aller Werte liefert die nicht NULL sind w hrend COUNT DISTINCT feldname die Anzahl unterschiedlicher Werte berechnet die nicht NULL sind Im Fall des Prim rschl sselattributes hier KBID sind dann aber COUNT und COUNTCKBID und COUNT DISTINCT KBID gleichwertig da der Prim rschl ssel niemals NULL sein darf und in jedem Datensatz unterschiedlich sein muss In der Tabelle 5 21 sind unterschiedliche Varianten einer COUNT Anweisung zusammengestellt Alle Varianten beziehen sich auf die Ta
527. rter Informationen stellte sich die Frage nach dem Zugriff und der Verarbeitung dieser Informationen Man suchte nach m glichst einfachen zugleich aber umfassenden Wegen um die Informa tionen in relationalen Datenbanken zu verarbeiten Zahlreiche Namen wie QBE Query by Example QUEL Query Language und letztlich auch SEQUEL spiegeln diese verschiedenen Entwicklungen wider Durchgesetzt hat sich am Ende SEQUEL in seinem inzwischen mehrfach standardisierten Nachfolger SQL Die Gr nde f r den Erfolg sind vielf ltig So ist die Marktmacht von IBM und sp ter deren Absplitterung Oracle gerade im Bereich gr erer Unternehmen nicht zu untersch tzen Diese war gerade zum Entstehungszeitpunkt sehr gro Heute ist SQL zum Selbstg nger geworden Kein Datenbankanbieter von IBM ber Oracle Microsoft bis zu den OpenSource Anbietern wie MySQL kann ohne den Standard SQL aus kommen Kein Anbieter von Standardsoftware oder Programmierumgebun gen kann ohne eine Zugriffsschicht f r SOL auskommen Schlie lich haben auch in heutigen Webanwendungen SQL Datenbanken insbesondere MySQL ihren festen Platz gefunden Neben der Unterst tzung durch wich tige Hersteller von Software im Unternehmensbereich ist SQL auch dank sei ner Standardisierung ein zentraler Pfeiler der Softwarearchitektur geworden Die Standardisierung von SQL wird vom American National Standard Insti tute ANSI betrieben Entsprechend spricht man auch von ANSI Standards Im Lauf
528. rtierungen ist dass in der ersten Norm der sogenannten DIN 5007 1 die Umlaute wie die ent sprechenden Vokale sortiert werden also wie a wie o und wie u Die DIN 5007 2 betrachtet dagegen als ae als oe und als ue Dadurch kann sich eine Sortierreihenfolge im Einzelfall ndern W hrend die DIN 5007 2 im Bereich von Namenslisten Verwendung findet ist sonst weitgehend DIN 5007 1 gebr uchlich Eine Angabe k nnte also beispielsweise lauten CREATE SCHEMA IF NOT EXISTS artikel DEFAULT CHARACTER SET latin1 DEFAULT COLLATE Tatinl_germanl_ci Das Datenbankschema erstellen CREATE SCHEMA WM WM E B Betrachten Sie die beiden Begriffe Schale und sch len so beginnt der Beispiel Unterschied beim Vokal a gegen ber Laut DIN 5007 1 latin _ _Sortierreihenfolge germanl_ci wird wie a behandelt Die Gro und Kleinschreibung spielt keine Rolle Damit sind beide W rter bis Schale bzw sch le iden tisch Erst das folgende n in sch len f hrt dazu dass die Sortierung T Schale 2 sch len ist Demgegen ber ist laut DIN 5007 2 latinI_german2_ci das wie ae zu behandeln Damit unterscheiden sich beide Begriffe nach dem Scha mit dem folgenden l einerseits und scha mit dem folgenden e vom ae andererseits Da das e vor dem l liegt werden die Begriffe als 1 sch len 2 Schale sortiert Nachdem w
529. rwenden m chten Name Portnummer 3306 ICP O UDP welche Risiken bestehen beim ffnen eines Ports Damit haben Sie alle Voraussetzungen geschaffen und die Installation von MySQL sollte normal enden siehe Abbildung 3 14 Der Server l uft jetzt auf dem System und kann genutzt werden Sie k nnen dies in der Windows Systemsteuerung unter den Diensten kontrollieren Hier sollten Sie einen Dienst MYSQL finden der gestartet ist Je nachdem ob Sie sich f r oder gegen einen automatischen Start entschieden haben finden Sie hier auch den entsprechenden Eintrag Das Starten und Beenden des Dienstes k nnen Sie ebenfalls manuell vornehmen va MO M Abbildung 3 14 MySQL Server Instance Configuration Wizard Abschluss der n MySQL Installation MySQL Server Instance Configuration Configure the MySQL Server 5 0 server instance Processing configuration A Prepare configuration 5 Write configuration file C ProgrammeiMySQLMySQL Server 5 0my ini amp Start service 5 Apply security settings Configuration file created Windows service MySQL installed Service started successfully Security settings applied Press Finish to close the Wizard 3 3 3 Die Kommandozeile MySQL bietet nach der Installation nur eine sehr eingeschr nkte grafische Oberfl che Hier macht die Installation einer Erg nzung wie der MySQL Tools Sinn Sie sollten aber auch die ganz elementare einfache Kommandozeilenober
530. s Er entspricht der mysql ere Nach dem Start und der Anmeldung erhalten Sie eine Ansicht wie in Abbildung 3 22 Die Grundstruktur erlaubt im oberen Fenster die Eingabe von SQL Anwei sungen Jede SQL Anweisung die Sie im oberen Fenster eingeben muss durch Dr cken der Schaltfl che AUSF HREN im rechten Bereich ausgef hrt werden Das Ergebnis wird im unteren Hauptfenster dem Ergebnisbereich angezeigt Dieser Bereich verf gt ber Tabs die immer einschlie lich der SQL Anweisung gelten sodass Sie immer mit einer Vielzahl von Anweisun gen parallel arbeiten k nnen Rechts haben Sie die verf gbaren Datenbank schemata die sich erweitern lassen sodass die Tabellen und auch deren Fel der sichtbar werden Unten finden Sie noch eine sinnvolle Hilfe zur SQL Syntax Weitere Hilfen zum Umgang finden Sie in Anhang A 3 3 5 Eine Beispieldatenbank aufbauen Um mit MySQL eine Datenbank aufzubauen sind wie bei fast allen Daten bankmanagementsystemen drei Schritte notwendig Das entspricht auch der Logik von SQL 1 Erstellen des Datenbankschemas manchmal spricht man auch verein facht von der Datenbank 2 Erstellen der Tabellen auf die weiteren Strukturen verzichten wir hier noch 3 Eingabe der eigentlichen Daten MySQL Schritt 1 Datenbankschema erstellen Das Datenbankschema ist der Container in dem eine Gruppe zusammen geh riger Tabellen zusammengefasst wird Dies ist die g ngige Gruppierung f r Projekte
531. s 2 Jahre sind aus Ihrer Datenbank entfernen Hat Ihr Kunde Ewald Kuhn KG in den letzten 2 Jahren nichts bestellt sind dann hinterher auch seine Kundennummer seine Adresse und andere Anga ben verschwunden Schade eigentlich f r Ihr Marketing und Ihren Vertrieb Redundanz kann zu Anomalien in Ihrer Datenbank f hren Vermeiden Sie Redundanz durch Normalisierung wenn dies m glich ist Dies ist der Sinn der Normalisierung Beachten Sie aber auch den Hinweis zum Unsinn der Norma lisierung 7 5 2 Normalisierungsziele Redundanz ist also ein Problem Redundanz entsteht immer dann wenn zu viele Informationen in eine Tabelle aufgenommen werden Immer dann wenn Felder noch von einem oder mehreren anderen Feldern in derselben Tabelle au er dem Prim rschl ssel abh ngig sind geh ren sie nicht in diese Tabelle Wenn ich die Mitarbeiternummer kenne kann ich die restlichen Daten des Mitarbeiters in einer anderen Tabelle nachsehen Dort brauche ich sie nur einmal abzulegen Immer dann wenn ich eine Artikelnummer kenne joine ich die Artikeltabelle die die ben tigten Informationen einmal f r jeden Artikel enth lt oder die Mitarbeitertabelle f r die Mitarbeiternamen oder die Kundentabelle f r die Kundendaten Redundanzfreiheit zu erzeugen bedeutet daher immer Tabellen so zu zerle gen dass jede Information nur einmal abgespeichert wird und bei Bedarf die Informationen in der SELECT Anweisung wieder zusammengef hrt werden k n
532. s ANSI SPARC Modell bezeichnet und wurde 1978 in seiner detaillierten Fassung vom Standard Planning And Requirement Commitee SPARC des American National Standards Institute ANSI vorgelegt Die Architektur spielt bis heute die zentrale Rolle f r die Hersteller und Betreiber von Datenbanksoftware und Zugriffssystemen Sie bildet in gewisser Weise auch die Basis f r die Standardisierung von SQL da hier mit dem konzeptionellen logischen Schema eine Ebene geschaffen wurde die von der internen Speicherung abstrahiert und die verschiedenen Anwendersichten integriert Damit war die Basis f r die Schaffung einer standardisierten Sprache geschaffen Das 3 Schichten Modell unterscheidet die physische Struktur der Datenspei cherung das logische Modell und die externen Sichten auf die Datenbank Jede dieser drei Ebenen bedarf eines Entwurfes wenn man sich in der Dar stellung auch zumeist auf das logische Modell des konzeptionellen Schemas beschr nkt 5 E Controlling 7 En gt f B 7 L svarma 5 N Externe F Schemata Konzeptionelles Schema N a E E u 1i IL O Verschiedene Dateien verschiedene Datenspeicher verschiedene Rechner 556 5 Internes Schema Das 3 Ebenen Modell Die physische Struktur des internen Schemas ist eine Sache der konkreten Datenbank und deren Umgang mit den vom Betriebssystem bereitgestellten Schnittstellen zur Verwaltung des physikalischen
533. s alles in SQL nicht Ben tigen Sie derartige Strukturen m ssen Sie die SQL Anweisungen in andere Pro grammiersprachen einbetten SQL konzentriert sich vollkommen auf die Objekte und Mengen relationaler Datenbanken Allerdings bieten die meisten Datenbankhersteller entweder eigene Erweite rungen zu SQL wie Oracle mit PL SQL und oder Einbettungen in andere Pro grammiersprachen wie Visual Basic Java oder andere Sprachen an 2 5 Relationale Datenbanken SQL ist aufs Engste mit der Nutzung relationaler Datenbanken verbunden Es wurde ausschlie lich zu diesem Zweck entwickelt Daher ist f r das Ver st ndnis von SQL zun chst ein zumindest oberfl chliches Verst ndnis der Struktur relationaler Datenbanken notwendig Dabei soll von der Technik abstrahiert werden und die Ebene des sogenannten Datenbankschemas gew hlt werden das mit SQL bearbeitet werden kann Das Datenbankschema nimmt eine Art Mittelposition zwischen der techni schen Sicht und der Anwendersicht ein So abstrahiert es einerseits von den technischen Details der eigentlichen Datenspeicherung und ist andererseits so formal dass es eine Programmierung erlaubt Das Datenbankschema einer relationalen Datenbank besteht im Wesentlichen zun chst aus Tabellen mit ihren Feldern auch Spalten oder Attribute genannt und m glichen Beziehungen zwischen diesen Tabellen 2 5 1 Tabellen Tabellen entstehen durch Gruppierung gleichartiger Daten Typische Tabel len in der Datenb
534. samtheit Population ausgeht interpretiert SAMP die Werte als Stichprobe Sample einer gr eren Grundgesamtheit CORR Ausdruckl Ausdruck2 gt n Korrelationskoeffizient zweier Ausdr cke Felder Es wird der Koeffizient von Pearson f r numerische Angaben verwendet Die Ausdr cke m ssen daher numerisch sein ANSI MySQL MS Access Oracle Firebird openBase COUNTO COUNTO COUNTO COUNTO COUNT O COUNTO SUMO SUMO SUMO SUMO SUMO SUMO AVGO AVGO AVGO AVGO AVGO AVGO MAXO MAXO MAXO MAXO MAXO MAXO MINO MINO MINO MINO MINO MINO FIRSTO FIRSTO FIRSTO LASTO LASTO LASTO STDDEV_ STDevPC STDDEV_ STDDEV_ POPO POPO POPO STDDEV_ STDO STDev STDDEV_ STDDEV_ SAMPO SAMPO SAMPO STDDEV VAR_POPO VARP VAR_POP VAR_POPO VAR_ VAR VAR_ VAR_SAMPC SAMPO SAMPO VARIANCE COVAR_POP COVAR_POPC O Tabelle 5 22 Forts G ngige Aggregatfunktionen Tabelle 5 23 Aggregatfunktionen in den Datenbanken 195 W kaites Tabelle 5 23 Forts Aggregatfunktionen in den Datenbanken Regression Beispiel Listing 5 23 Ermittlung interessanter 196 Zahlen f r die Kursbesucher Datentypen Ausdr cke und Funktionen ANSI MySQL MS Access Oracle Firebird openBase COVAR COVAR_ SAMPO SAMPO CORR CORR Pearson CORR_S Spearman CORR_K Kendal1 Einige der neuen statistischen Agg
535. satz FROM tbDozent d1 WHERE g Stundensatz lt SELECT AVG d2 Stundensatz FROM tbDozent d2 Das Ergebnis in der Tabelle gehaltsanpassung ist in Abbildung 10 3 in Aus schnitten dargestellt BD PD TBeschsfigung Sundensaz 1 2003 07 01 17 17 2002 01 01 15 6 2005 09 15 14 8 26 2003 03 01 14 8 2 2001 01 01 15 Wir haben in dem Beispiel in den Unterabfragen jeweils die Tabelle tbDozent statt der Tabelle gehaltsanpassung verwendet Das hatte nicht nur den Sinn die Abfrage wiederholt durchf hren zu k nnen da die Basisdaten durch die Abfrage nicht ver ndert werden sondern auch den einfachen Grund dass nur wenige Datenbanksysteme wie beispielsweise Oracle die Verwendung derselben Tabelle in einer Unterabfrage einer UPDATE Anweisung erlauben H tte sich also die Unterabfrage in der FROM Klausel wieder auf die Tabelle gehaltsanpassung bezogen h tte die Abfrage in vielen F llen schlicht nicht funktioniert in anderen F llen h tte sie zu immer neuen ver nderten Werten gef hrt INSERT mit Unterabfragen E m 10 m bungen zu UPDATE TABLE mit Unterabfragen bungen Erstellen Sie f r die folgenden Aufgaben jeweils eine SELECT Anweisung 1 Die Geb hren f r die teureren Kurse sollen gesenkt werden Ermitteln Sie zun chst die durchschnittliche Kursgeb hr um sich ein Bild zu machen welche Kurse betroffen sind 10 2 1 2 Ermitteln Sie jetzt die ID und die Geb hr aller Kurse sowie die DID des Dozenten deren Kur
536. sbe sondere des Zeichens angebracht Steht dieses links in einer Vergleichs bedingung ist der linke Teil der Vergleichsbedingung nicht bekannt und ein Index ist nicht nutzbar SELECT FROM tbPerson WHERE Familienname SELECT FROM tbPerson WHERE Familienname eiss tot a o 3 Insofern liegen also bei gro en Datenmengen zwischen den beiden Abfragen in Listing 14 5 erhebliche Unterschiede Nur die zweite Abfrage erlaubt die Verwendung eines Index w hrend die erste einen kompletten Scan der Tabelle erfordert 14 2 Einen Index l schen Ein Index kann nicht nur angelegt werden er kann nat rlich auch wieder entfernt werden Wir wollen zun chst den oben definierten Index wieder entfernen DROP INDEX name ON kunden Die allgemeine Syntax f r das Entfernen eines Index lautet DROP INDEX name MySQL erfordert eine zus tzliche Angabe ON tabellenname in der DROP INDEX Anweisung Bei der Entfernung des Index werden einfach die zus tzlichen Indextabellen gel scht Da die Originaltabellen davon nicht ber hrt sind kann dies ohne Datenverlust geschehen Die Anweisung ben tigt den Indexnamen der bei der Erzeugung des Index vergeben wurde Die Entfernung des Index kann auch mit der entsprechenden ALTER TABLE Anweisung ALTER TABLE tabellename DROP INDEX indername erfolgen 14 3 Weitere berlegungen zum Einsatz von Indizes Der Einsatz eines Index lohnt nur bei einer entsprechend gro en Menge von Eintr gen Die
537. schalten wenn Sie selbst Transaktionen starten und beenden wollen MySQL nutzt verschiedene Datenverwaltungssysteme f r die physische MySQL Datenspeicherung Nur mit InnoDB BDB oder NDB Cluster als Dateiverwal tungssystem sind Transaktionen m glich insbesondere bei Verwendung des 359 Karite 13 360 Oracle Firebird X MS Access openBase Transaktionsstruktur Transaktionen Standards MyISAM gilt dies nicht Daher haben wir bei der Installation InnoDB als Standardsystem verwendet Geben Sie jetzt einfach SET AUTOCOMMIT 0 an um AUTOCOMMIT auszuschalten Entsprechend k nnen Sie es auf 1 setzen um es wieder einzuschalten Oracle bietet eine umfangreiche Unterst tzung f r Transaktionen die aber je nach Umfang der Version stark variieren Die einfachste Art f r unsere Zwecke ist das Kontrollk stchen AUTOCOMMIT unmittelbar ber dem Einga befenster der SQL Befehle zu deaktivieren Oracle ben tigt kein START TRANS ACTION Transaktionen k nnen mit einem COMMIT oder ROLLBACK beendet wer den Das standardkonforme COMMIT WORK ist ebenfalls verf gbar Es hat denselben Effekt wie ein einfaches COMMIT Firebird bietet einen vollst ndigen Support f r Transaktionen Da die Daten bank vorwiegend f r den Einsatz als Backend Datenbanksystem f r pro grammierte Anwendungen gedacht ist werden Beginn und Ende der Trans aktion von der Anwendung gesteuert In unserer Oberfl che stehen zwei Schaltfl chen
538. schen Windows und Linux deutliche Unterschiede geben Folglich muss das Gesagte unter diesem Blickwinkel betrachtet werden In den meisten F llen sollten Sie aber ein standardkonformes Ergebnis wie in Abbildung 4 7 gezeigt erhalten Vomame Name lt Postleitzahl Wohnort der Person Peter weiss 30529 Hannover Susanne Bucz 30531 Hannover Thomas Karmann 29227 Celle Karl Kl tzer 29221 Celle Karin WPRISS 30529 Hannnver Sie k nnen dies auch mit der Kommandozeilenoberfl che von MySQL tes ten Starten Sie mysql exe Bei Eingabe der SQL Anweisung am Prompt erhalten Sie das in Abbildung 4 8 gezeigte Ergebnis mysql gt select Vorname AS Vorname Familienname AS Name PLZ AS Postleitzahl Joh v inort der Per FROM thPer Hannover LEUTEN Celle Celle Hannover Wie die Feldnamen k nnen auch die Tabellennamen mit einem Alias verse hen werden Damit kann das Alias des Tabellennamens an allen Stellen der SELECT Anweisung verwendet werden an denen sonst der komplette Tabel lenname stehen m sste Insbesondere kann das Alias zur Qualifizierung der Spaltennamen mit dem Tabellennamen verwendet werden Listing 4 9 Alias in MS Access Abbildung 4 6 SELECT Anweisung mit Alias in MS Access Alias in MySQL Abbildung 4 7 Ergebnis der SELECT Anweisung mit Alias in MySQL Abbildung 4 8 Ergebnis der SELECT Anweisung mit Alias in mysql exe Alias f r Tabellen 97 WM Kapitei4 Mit SQL Daten abfragen SELECT
539. schutz Danach k nnen Sie die Datei in openBase mit der Option BESTEHENDE DATENBANKDATEI FFNEN der Wahl der Datei und der Schaltfl che FFNEN laden Abbildung 3 52 ffnen der Datenbank Datenbank Assistent Schritte Willkommen zum OpenOffice org Datenbank Assistenten 1 Datenbank ausw hlen Benutzen Sie den Datenbank Assistenten um eine neue Datenbank anzulegen eine bestehende Datenbankdatei zu ffnen oder eine Verbindung zu einer Server Datenbank herzustellen Wie m chten Sie fortfahren O Neue Datenbank erstellen Bestehende Datenbankdatei ffnen Zuletzt benutzt I Kurse O Yerbindung zu einer bestehenden Datenbank herstellen osc lt Zur ck weiter gt gt Fertig stellen Abbrechen 84 OpenOffice orgBase Damit steht die Datenbank zur Bearbeitung zur Verf gung W hlen Sie TABELLEN um eine bersicht ber alle Tabellen zu bekommen Dies kann beim ersten Mal einen Augenblick dauern Sie sehen eine Datenbank mit den Tabellen siehe Abbildung 3 53 Den Inhalt der Tabellen k nnen Sie durch Auswahl mit einem einfachen Klick rechts als Vorschau sehen Den komplet ten Inhalt einer Tabelle k nnen Sie sich mit einem Doppelklick auf den Tabellennamen oder ber die rechte Maustaste mit der Option FFNEN anse hen Sie sehen den kompletten Tabelleninhalt und k nnen ihn mit dem Inhalt im Anhang vergleichen Das Fenster schlie en Sie mit DATEI SCHLIESSEN A Tabelle in der Entw
540. se werden ermittelt und in identischer Form wie oben in die Tabelle ein getragen siehe Listing 10 7 INSERT INTO tbKursbesuche SELECT p PID 1000 p PID CExx 0 N N Gutschein 0 0 FROM tbPerson p WHERE NOT EXISTS SELECT FROM tbKursbesuche k2 WHERE p PID k2 KTID J Das Ergebnis der Abfrage l sst sich dann in der Tabelle tbKursbesuche ber pr fen Eine SELECT Anweisung sollte in etwa das Ergebnis in Abbildung 10 4 liefern Sie sehen die 1000er PID Datens tze die sich jetzt alle auf den Kurs CExx beziehen KBID KTID KID Fehltage Zeugnis Selbstzahler Zahlweise Rabatt GezahlterBetrag 310 25 CE 0 J J berweisung 20 260 312 4 CE24 ON N Gutschein 100 250 314 4 CE17 0 J N Gutschein 0 280 315 5 CE17 0J N Gutschein 0 230 354 34 H90 1 N J berweisung 20 80 361 9 H90 ON N Gutschein 0 120 412 4 CE23 2 N N Gutschein 0 350 413 5 CE23 0 N J berweisung 100 50 415 15 CE23 5 N J Bar 100 250 416 10 CE23 ON N Gutschein 0 350 418 31 CE23 1 N N Gutschein 0 350 419 32 CE23 0 N J berweisung 50 300 420 24 CE23 2 N J Bar 0 350 421 37 CE23 8 N J berweisung 150 50 423 10 CE24 0 N J Bar 100 0 432 15 CE24 ON J Bar 100 0 438 11 CE24 ON N Gutschein 0 350 442 23 CE24 ON J berweisung 50 300 999 7 CE23 ON J Bar 0 50 1099 99 CExx ON N Gutschein 0 0 1026 26 CExx 0 N N Gutschein 0 0 1017 17 CExx ON N Gutschein 0 0 1008 8 CExx 0 N N Gutschein 0 0 1006 6 Ess ON N Gutschein 0 0 1002 2
541. sen in einer Abfrage mit einer SELECT Anweisung wieder gejoint werden Das ist nicht nur kompliziert sondern f hrt auch h ufig zu Performance Problemen Normalisierte Datenbanken k nnen also bei h ufigen komple xen Abfragen Probleme im Antwortzeitverhalten bekommen Hier ist dann zwischen Abfrage und nderung abzuw gen Es gibt Datenbanken im Data Warehouse Umfeld die praktisch berhaupt keine nderungen auf Einzel satzebene kennen sondern nur Abfragen und Massenloads Die Gefahren durch Redundanz sind hier sehr gering Eine Anomalie entsteht nur durch einen Programmierfehler da das Laden der Daten ber automati sierte Programme erfolgt Andererseits m ssen viele komplexe Abfragen auf Sinn und Unsinn der Normalisierung Massendaten ausgef hrt werden Hier st rt die Normalisierung da sie durch die notwendigen JoIN Verkn pfungen die Performance der Abfragen nega tiv beeinflusst Das ndern der Datenbank ber Programme ist schlie lich ein generelles Argument das die Anforderungen an eine Normalisierung senkt Sind die Programme gut getestet und erfolgen keine manuellen Eingaben so ist die Gefahr von Anomalien erheblich gesenkt Es bleibt dann noch das Argument des geringeren Speicherplatzes dem die im Allgemeinen schlechtere Perfor mance normalisierter Datenbanken gegen bersteht Dies sind alles keine Argumente die gegen eine normalisierte Datenbank struktur als solche sprechen sondern Aspekte die bei der Gestaltun
542. sen wird Sie k nnen auch mit mysqladmin uroot pmasterkey version die aktuelle Version Ihres Servers und einige weitere Statusinformationen erhalten Wir werden in Abschnitt 3 3 5 mysqladmin exe nutzen um ein Datenbankschema f r unsere bungsdatenbanken anzulegen Das zweite wichtige Programm ist mysql exe Es dient der Eingabe beliebiger mysql exe SQL Anweisungen W hrend also mysqladmin exe die grundlegenden tech nischen Einstellungen steuert k nnen mit mysql ere die f r uns interessan ten SQL Befehle eingegeben werden Der Aufruf um die verf gbaren Para meter zu erhalten lautet mysql Denken Sie gegebenenfalls an den Pfadnamen Sie sehen dass Sie eine Reihe von Optionen wiederum beginnend mit einem Bindestrich angeben k n nen Die einfachste Form der Anmeldung bei der Datenbank ist mysql uroot pmasterkey Nach diesem Befehl ndert sich der Cursor zu mysql gt 53 W kaites 54 Abbildung 3 16 Optionen von mysql exe Die Beispieldatenbanken Diese unscheinbare nderung besagt dass Sie jetzt nicht mehr auf Betriebs systemebene sind sondern sich innerhalb eines MySQL Clients bewegen Sie sind beim Datenbankmanagementsystem angemeldet und k nnen ab jetzt direkt SQL Anweisungen sowie einige zus tzliche Kommandos eingeben Testen Sie dies indem Sie beispielsweise help eingeben Sie erhalten eine Liste der m glichen Kommandos die etwa der Liste in Abbildung 3 16 entsprechen sollte Die
543. sgeb hr ber der durchschnittlichen Kursgeb hr liegt 10 2 2 3 Erh hen Sie jetzt den Stundensatz aller Dozenten um 10 die in min destens einem Kurs unterrichten dessen Geb hr ber dem Durchschnitt aller Kurse liegt 10 2 3 4 Senken Sie jetzt die Preise aller Kurse deren Preis ber dem Durchschnitt aller Kurse liegt um 10 10 2 4 10 3 INSERT mit Unterabfragen Die INSERT Anweisung erlaubt das Einf gen von Datens tzen in bestehende Tabellen Wiederum k nnen dabei neben der direkten Angabe von Werten diese Werte auch mithilfe einer Unterabfrage gewonnen und dann in die Tabelle eingef gt werden In Kapitel 6 ist die Syntax der INSERT Anweisung als optionale Liste von Direkte Werteingabe Feldnamen und den Feldern zugeordneten Werten beschrieben wobei die sich entsprechende Reihenfolge der Felder und Werte entscheidend ist INSERT INTO tabellenname feldnamel feldname2 VALUES wert wert2 Die Werte werden dabei in die Felder der angegebenen Tabelle eingetragen Werden die Feldnamen nicht angegeben werden die Werte in der Reihen folge der Definition in der CREATE TABLE Anweisung eingetragen Bei Verwendung einer Unterabfrage kann diese genutzt werden um die ein Beispiel zuf genden Werte bereitzustellen Entsprechend tritt die Unterabfrage an die Stelle der VALUES Klausel Die Anweisung in Listing 10 6 f gt einen neuen Datensatz in die Tabelle tbKursbesuche ein Daf r wird der Datensatz m
544. so beispielsweise die nderung der Kundennummer kid auf 2000 dazu f hren dass der Schl ssel ge ndert wird Wegen der Einstellung ON UPDATE CASCADE w rden die entsprechenden Einstellungen in der Fremdschl sseltabelle bestellung ebenfalls ge ndert werden W rde also die kid in 2000 ge ndert w rde die kid in der Tabelle bestellung in allen beiden Datens tzen ebenfalls ge ndert W rde der Datensatz der Ewald Kuhn KG in der Kundentabelle gel scht w rde dies dazu f hren dass der Datensatz tats chlich gel scht wird Wegen der Einstellung ON DELETE SET NULL w rde in die beiden Datens tze seiner Bestellungen siehe Abbildung 8 11 als Wert f r die beiden Fremdschl ssel felder jeweils NULL eingetragen Referenzielle Integrit t Die Angabe der ON UPDATE und ON DELETE Optionen soll Anomalien vermei den also die sogenannte referenzielle Integrit t sicherstellen Referenzielle Integrit t bedeutet im Wesentlichen dass keine sinnlosen Fremdschl sselbe ziehungen existieren und keine notwendigen Beziehungen fehlen die Daten also zusammenpassen CASCADE Wesentlich hierf r ist die Option CASCADE die dies weitgehend sicherstellt Sie f hrt bei einer nderung des Prim rschl ssels dazu dass die zugeh ri gen Werte in den Fremdschl sseln ebenfalls ge ndert werden sodass Fremd schl sselwert und Prim rschl sselwert wieder zusammenpassen Bei einer L schung des Prim rschl sselwertes in
545. son kombiniert Bei gro en Datenbanken hat man dann in der Regel riesige Ergebnismengen mit entsprechenden Laufzeiten und ohne inhaltliche Bedeutung Trotzdem gibt es Spezialf lle in denen ein CROSS JOIN tats ch lich beabsichtigt werden kann Wenn Sie einmal gro e Datenmengen erzeugen wollen um beispielsweise Beispiel die Auswirkung auf Ihre Datenbankperformance zu testen oder um Optimie rungen wie Indizes zu testen k nnen Sie dies recht schnell mit einem CROSS JOIN erreichen Im folgenden Beispiel finden Sie vier Tabellen CJVorname CJFami lienname CJOrt und CJStrasse die jeweils nur aus einem Feld bestehen In den Tabel len sind zehn Vornamen zehn Familiennamen zehn Orte und zehn Stra en eingetragen Mit dem einfachen CROSS JOIN hier in der alten Syntax die in allen Datenbanksystemen funktioniert 131 WM karitea Listing 4 38 Beispiel CROSS JOIN f r die Adressen Listing 4 39 CROSS JOIN mit neuer Syntax Listing 4 40 Erzeugung einer neuen Tabelle mit Unterabfrage 132 durch CROSS JOIN bungen Mit SQL Daten abfragen SELECT SELECT CJVorname Vorname CJFami lienname Familienname CJOrt Ort CJStrasse Strasse FROM CJFamilienname CJOrt CJStrasse CJVorname werden alle Datens tze aller Tabellen miteinander kombiniert Also werden zehn Vornamen mit zehn Familiennamen kombiniert was 100 Datens tze ergibt Dann werden diese 100 Datens tze mit den zehn Datens tzen der Ortstab
546. sonders lange Texte sind daher Erweiterungen geschaffen worden bei denen Texte in gro en Containern abgelegt werden die mit SQL zumeist nur noch begrenzt bearbeitbar sind Diese Container tragen je nach Datenbank Namen wie TEXT Memo oder CLOB Character Large OBject Im Endeffekt sind Felder dieser Datentypen letztlich nur in die Datenbank eingelagerte Container mit dem Vorteil alle Informationen zentral in einem System verwalten zu k nnen Die Zugriffs m glichkeiten mit SELECT Anweisungen sind sehr eingeschr nkt insbeson dere ist oft keine Suche mit einem WHERE feldname LIKE suchtext m glich Einige neuere wiederum datenbankspezifische Entwicklungen bieten hier aber immer mehr Bearbeitungsm glichkeiten inklusive einer Volltextsuche Neben der reinen Gr e von Textobjekten entstehen auch durch den verwen Zeichensatz deten Zeichensatz Probleme In CHAR und VARCHAR Feldern werden Texte gem dem f r die Datenbank gew hlten oder bei der Definition der Tabelle angegebenen Zeichensatz gespeichert Dies setzt dann voraus dass die Datenbank stets mit demselben Zeichensatz verwendet wird oder dass eine entsprechende Umwandlung erfolgt Der Vorteil ist in jedem Fall dass bekannt ist mit welchem Zeichensatz gearbeitet wird und jedes mit diesem Zeichensatz darstellbare Zeichen auch gespeichert werden kann Spielt der Zeichensatz keine Rolle k nnen Texte auch platzsparender bin r statt byteweise ges
547. spiele auch mit dem bei liegenden Oracle Express bearbeiten 3 5 2 Oracle installieren Zun chst soll hier kurz die Installation der Oracle 10g Express Edition erl u tert werden f r die Sie die Hinweise zum Download unter www serval de SQOL finden Starten Sie die Datei auf Ihrem PC Damit startet der INSTALLATIONS ASSISTENT siehe Abbildung 3 30 Oracle Database 10g Express Edition Installations Assistent Willkommen bei dem InstallShield Assistenten f r Oracle Database 10g Express Edition Der InstallShield r Assistent installiert Oracle Database 10g Express Edition auf dem Rechner Um fortzufahren klicken Sie auf Weiter ORACLE DATABASE EXPRESS EDITION Abbrechen Abbildung 3 30 Startbildschirm des Oracle Installations Assistenten 69 W kaites SYS und SYSTEM Abbildung 3 31 Eingabe des Passwortes 70 f r die Superuser Die Beispieldatenbanken Nach den g ngigen Fragen zur Lizenzierung und zum Zielverzeichnis f r die Installation fragt Sie Oracle nach einem Passwort Dieses Passwort wird gleich f r zwei Superuser verwendet die Oracle SYS und SYSTEM nennt Die genauen Unterschiede sind hier nicht relevant im Wesentlichen wird mit SYSTEM gearbeitet w hrend SYS ein Backup f r den Administrator dar stellt Verwenden Sie als Passwort am besten wieder masterkey wie in diesem Buch immer empfohlen und worauf auch die Skripte abgestimmt sind Oracle Database 10g Express Edition In
548. ss 8 9 0 1 Windows f r Fortgeschrittene Ordnung im Dateisystem Datenbankentwurf EDY Datenbankentwurf EDY VBA Datenbankprogrammierung EDY Word Il EDY Excel ll vBA Datenbankprogrammierung Word Il Excel Il Nachdem Sie mit dem Ergebnis zufrieden sind k nnen Sie dann die entspre chende UPDATE Anweisung wie oben beschrieben formulieren und ausf h ren Bei jeder UPDATE Anweisung muss der SQL Interpreter wissen welche Spal ten und welche Zeilen der Tabelle ge ndert werden sollen Die Spalten erge ben sich aus den Feldnamen die in der SET Anweisung aufgef hrt werden Machen Sie keine weiteren Angaben bezieht sich die nderung auf die gesamte Tabelle was in den wenigsten F llen gew nscht ist Beispiel R ckg ngig machen Abbildung 6 8 Ergebnis des SELECT in Vorbereitung auf die UPDATE Anweisung 211 WM xariteis Datenbankinhalte ndern INSERT UPDATE DELETE UPDATE Syntax Beispiel Listing 6 12 Testweise Auswahl aller Kurse zum Thema Access 212 MySQL Listing 6 13 Die Anweisung als UPDATE Anweisung MySQL Abbildung 6 9 Gezieltes Update zweier Datens tze mit WHERE Klausel Eine UPDATE Anweisung ohne WHERE Klausel ndert alle Datens tze in der Tabelle Das ist meistens nicht erw nscht Daher muss jede UPDATE Anwei sung vor ihrer Ausf hrung immer sorgf ltig getestet werden Einschr nken lassen sich die Zeilen durch die bereits bekannte wHERE Klau sel wo
549. ssen wiederum die Werte in diesem Feld f r jeden Datensatz der Tabelle eindeutig sein Es handelt sich also bei dem einzelnen Feld beziehungsweise bei jeder Kombination von Feldern immer um Schl sselkandidaten wie sie aus der Modellierung heraus ent standen sein k nnen CREATE TABLE bestellung mid INT NOT NULL bnr INT NOT NULL kid VARCHAR 50 NOT NULL bestelldatum DATE NOT NULL letzte_aenderung TIMESTAMP DEFAULT current_timestamp CONSTRAINT PKBEST PRIMARY KEY mid bnr CONSTRAINT FKBESTKUND FOREIGN KEY mid kid REFERENCES kunden mid kid ON UPDATE CASCADE ON DELETE CASCADE UNIQUE Ckid bestelldatum J In Listing 8 9 ist eine Integrit tsbedingung eingef gt worden die festlegt dass pro Kunde nur einmal am Tag eine Bestellung erfolgen kann 8 3 5 bungen zu Integrit tsbedingungen Hier sind die bungen zu den verschiedenen Integrit tsbedingungen zusam mengefasst Bitte beachten Sie dass Sie vorhandene Tabellen l schen m s sen bevor Sie sie neu erzeugen k nnen Dabei ist auch die Reihenfolge von Bedeutung wenn Sie mit referenzieller Integrit t arbeiten REFERENCES Sie k nnen nur Verweise auf Tabellen erzeugen die bereits existieren Umge kehrt k nnen Sie nur Tabellen l schen auf die kein Verweis mehr besteht Vereinfacht ausgedr ckt bedeutet das dass die Tabellen im Zweifelsfall in umgekehrter Reihenfolge ihrer Erstellung gel scht werden m ssen wenn sie mit REFERENCES Klauseln miteinander verbunden sin
550. sswort DEFAULT CHARACTER SET zeichensatz Sie sehen dass die Schl sselw rter DATABASE und SCHEMA wahlweise angege ben werden k nnen Der dateiname muss ein g ltiger Dateiname mit even tuellen Pfadangaben sein der der physischen Speicherung der Daten dient Er legt gleichzeitig den Datenbank und den Schemanamen fest Ein Benut zer kann aus Sicherheitsgr nden verwendet werden Schlie lich kann noch der Standardzeichensatz eingesetzt werden Wird keiner angegeben wird der jeweilige Zeichensatz des Betriebssystems verwendet Die Anlage der neuen Artikeldatenbank kann beispielsweise mit folgendem Befehl erfolgen CREATE SCHEMA artikel fdb DEFAULT CHARACTER SET IS08859_1 Ein solcher Befehl kann f r Firebird im Hilfswerkzeug isql eingegeben wer den auf das hier aber nicht detailliert eingegangen werden soll Eine neue Datenbank kann mit Firebird auch ber die Oberfl che erzeugt werden Gehen Sie dazu in der Oberfl che ber DATABASE CREATE DATEBASE Sie erhalten ein neues Fenster wie in Abbildung 8 4 angegeben Tragen Sie den Dateinamen mit Pfad ein Mit der Pagesize geben Sie die Gr e der Datei vor 230 ist Minimum Die Registrierung sollte erfolgen damit die neue Daten bank beim Firebird Server bekannt ist Ein Alias ist der Schemaname der nach M glichkeit dem Dateinamen entsprechen sollte ab dem senkrechten Strich im oberen Fenster der nicht zum Dateinamen geh rt sondern nur der Markierung in der Abbildung dient
551. st aber als eigenst ndige Datenbank mit grafi scher Oberfl che eher untypisch Damit Sie dieses System ebenfalls f r die Beispiele des Buches nutzen k n nen wird kurz die Installation und die Bereitstellung der Beispieldatenban ken beschrieben Die Beispiele sind aber hnlich wie bei Oracle nicht schwerpunktm ig auf Firebird abgestimmt sodass einige Beispiele wegen der etwas unterschiedlichen Philosophie von Firebird mangels vorinstallier ter Funktionen nicht genutzt werden k nnen Sie finden alle Hinweise zum Download unter www serval de SOL Starten Sie die Installation der Firebird Version 2 0 3 mit der entsprechenden Datei Firebird 2 0 3 12981 1 Win32 ere Der Installationsassistent meldet sich mit dem Logo in der Abbildung 3 37 16l Setup Firebird Datenbank Server 2 0 Willkommen zum Firebird Datenbank Server 2 0 Setup Assistenten Dieser Assistent wird jetzt Firebird 2 0 3 auf Ihren Computer installieren Sie sollten alle anderen Anwendungen beenden bevor Sie mit dem Setup fortfahren weiter zum Fortfahren Abbrechen zum Verlassen Abbildung 3 37 Start des Firebird Installationsassistenten 75 W kaites 76 Abbildung 3 38 Wahl des Super Servers Die Beispieldatenbanken Sie k nnen jetzt wie blich durch die Installation gehen indem Sie zun chst die Lizenzvereinbarung lesen Der folgende Hinweis auf die ge nderte Struk tur ist nur f r die bisherigen Nutzer des Systems relevant In
552. st der Familienname relevant SELECT p Familienname p Vorname p PLZ p Ort FROM tbPerson p ORDER BY p Familienname Das Ergebnis ist eine Liste der Familiennamen Vornamen Postleitzahlen und Orte aufsteigend sortiert nach Familiennamen Soll zus tzlich innerhalb der Namen nach Vornamen sortiert werden kann eine weitere Spalte in die ORDER BY Klausel aufgenommen werden SELECT p Familienname p Vorname p PLZ p Ort FROM tbPerson p ORDER BY p Familienname p Vorname Das Ergebnis der SELECT Anweisung ist in Abbildung 4 9 zu sehen Zun chst erkennen Sie die alphabetische Sortierung der Familiennamen Die Sortie rung innerhalb der Vornamen erkennen Sie beim Familiennamen Weiss an der Anordnung der Datens tze nach dem Vornamen Nat rlich kann auch die erste SELECT Anweisung die nur nach dem Familiennamen sortiert zuf llig dasselbe Ergebnis liefern Die Reihenfolge ist dann aber zuf llig und nicht garantiert Entsprechend ist in Abbildung 4 9 das Ergebnis hinsichtlich der Reihenfolge der beiden Datens tze f r Weiss Peter auch noch zuf llig Hier m ssten dann gegebenenfalls weitere Sortierkriterien vorgegeben werden Daten sortieren mit der ORDER BY Klausel Familienname Vorname PLZ Name Bucz Susanne 30531 Hannover Cromberg J rg 38152 Braunschweig Karmann Thomas 29227 Celle Kl tzer Karl 29221 Celle Lisewski Bernd 30890 Barsinghausen Magerkurth Melissa 29336 Nienhagen Martens Melanie 29221 Celle Meie
553. stallations Assistent Datenbankkennw rter angeben DATABASE EXPRESS LOMON Geben Sie die Kennw rter f r die Datenbank ein und best tigen Sie diese Dieses Kennwort wird f r die SYS und SYSTEM Datenbank Accounts benutzt Kennwort eingeben ng Kennwort best tigen vi Hinweis Sie sollten den SYSTEM Benutzer zusammen mit dem Kennwort das Sie hier eingeben f r die nmeldung bei der Datenbank Homepage verwenden nachdem die Installation abgeschlossen ist lt Zur ck weiter gt Abbrechen Danach l uft die Installation des Oracle Servers als Dienst ab Sie bekommen die drei wesentlichen Ports angezeigt die Oracle verwendet Diese f hren zumeist nicht zu gr eren Problemen mit der Firewall wenn doch finden Sie im Rahmen der Beschreibung der MySQL Installation eine Beschreibung der Vorgehensweise zur Freigabe einzelner Ports in der Firewall Nach der erfolgten Installation des Servers die etwas Geduld Ihrerseits erfor dert aber keine weiteren Besonderheiten oder wichtigen Auswahlm glich keiten aufweist k nnen Sie ber die normale Windows Start Schaltfl che eine Reihe von Funktionen aufrufen siehe Abbildung 3 32 Sie sehen dass Sie den Oracle Server hier starten und stoppen k nnen was den Vorteil hat dass alle Dienste koordiniert werden F r den Zugriff auf die Datenbank bietet Oracle die SQL Befehlszeile und die Option GEHE ZU DATEN BANK HOMEPAGE als grafische Oberfl che an Auf die Erl uterung der
554. stallieren Sie das System das erste Mal k nnen Sie den Hinweis ignorieren alle Dateien sind auf die Version 2 abgestimmt iE Setup Firebird Datenbank Server 2 0 Komponenten ausw hlen Welche Komponenten sollen installiert werden w hlen Sie die Komponenten aus die Sie installieren mochten Klicken Sie auf weiter wenn sie bereit sind fortzufahren Server Komponenten Classic Server Bin rdateien Super Server Bin rdateien ILV Komponenten f r Entwickler und Administratoren Die aktuelle Auswahl erfordert min 14 8 MB Speicherplatz Wenn Sie weiter dem Installationsassistenten folgen gelangen Sie schlie lich zu der Abfrage in Abbildung 3 38 Wesentlich ist die Wahl der CLASSIC SERVER oder der SUPER SERVER Komponenten Wegen der besseren Unter st tzung ist unter Windows in jedem Fall der SUPER SERVER vorzuziehen Die weitere Auswahl ist in Abbildung 3 39 angegeben Der Guardian ist ein n tzliches Hilfsmittel zur Kontrolle des Servers Die Installation als Server folgt der Logik der anderen Datenbanken Der automatische Start des Servers bei Systemstart sollte wiederum je nach H ufigkeit der Nutzung entschieden werden Nach einigen weiteren Standardeinstellungen ist die Installation abgeschlos sen und Firebird best tigt dies wie in Abbildung 3 40 zu sehen Die Instal lation k nnen Sie in der Windows Systemsteuerung kontrollieren Dort m sste bei Ihnen als zus tzliches Symbol der Guardian Firebird
555. sung entfernt Die Rollen werden mit DROP ROLE gel scht Benutzer m ssen getrennt ber die beschriebenen Wege gel scht werden 351 5 Kapitel 12 Benutzer Rechte und Zugriffsschutz 352 Abbildung 12 5 Datenbankobjekte ein schlie lich der Rollen Y KURSE FDB kon Domains Es Tables a Views fs Stored Procedures Fr External Functions a Generators Q Exceptions amp Blob Filters a Roles 12 8 4 Benutzerkonzept in MS Access Das Sicherheitskonzept das den meisten anderen Systemen am n chsten kommt hei t in MS Access Sicherheit auf Benutzerebene MS Access verwendet f r die Verwaltung der Benutzerberechtigungen eine eigene Datei die normalerweise die Endung mdw besitzt Bei der Installa tion wird eine Standarddatei System mdw angelegt Diese Datei beinhaltet alle Benutzer und Benutzergruppen Sie k nnen der Verwaltung in der Stan darddatei beitreten oder eine komplett neue Berechtigungsdatei aufbauen W hlen Sie dazu EXTRAS SICHERHEIT ARBEITSGRUPPENADMINISTRATOR erst ab Access 2003 Erstellen Sie eine neue Datei und beachten Sie die Sicherheits hinweise Sie haben jetzt eine neue Systemdatei in der alle Berechtigungen aufgebaut werden k nnen W hlen Sie SICHERHEIT BENUTZER UND GRUPPENKONTEN um den Inhalt zu bearbeiten Im Standard richtet MS Access die beiden Benutzergruppen Administratoren und Benutzer ein Der einzige Benutzer der Superuser hei t in MS Access Administrator und ist Mitglie
556. sweise aus Excel in eine Datenbank zu bernehmen W hlen Sie die NEU und dann die Option LEERE DATENBANK und best tigen Sie diese mit OK J Abbildung 1 29 Dateiname Kurse mdb Anlage einer Es MS Access Datenbank Dateityp Microsoft Access Datenbanken mdb Abbrechen Sie k nnen jetzt die komplette Datenbank anlegen indem Sie in einem eige nen Verzeichnis einen Namen hier Kurse w hlen und die Auswahl mit FFNEN best tigen Sie erhalten das sogenannte Datenbankfenster Sie sehen dass links die Option TABELLEN aktiviert ist Rechts werden nur einige Assistenten angezeigt aber keine Tabellen Sie haben also jetzt eine leere Datenbank erzeugt Diese Datenbank k nnten Sie jetzt manuell mit hilfe der Assistenten anlegen Tats chlich geschieht dies wieder mit SQL wie wir es bereits von MySQL kennen MS Access versteckt die SOL Anweisun gen aber noch einmal besonders und erlaubt es so sehr einfach Tabellen mit Inhalt ber die Oberfl che zu importieren 401 5j Anhang A Anhang Benutzung der Datenbanksysteme Abbildung A 30 Datenbankfenster von MS Access mit leerer Pr i Datenbank ideen Monet mma a EE C a busk are Tabaks unter Vermenung des Anton due Die Schritte zum Import einer Tabelle in MS Access sind folgende 1 Pr fen Sie ob Sie in der linken Optionsleiste die Auswahl TABELLEN ge troffen haben Das Datenbankfenster sieht f r alle Auswahlen fast iden tisch aus f
557. swort pwkurse anmelden und unter OBJECT BROWSER BROWSE TABLES den Inhalt berpr fen Im Tabellenblatt TABLE sehen Sie die Struktur unter DATA den Inhalt der Tabellen Schnelleinstieg und Neustart ae E Alle Daten f r die Artikeldatenbank stehen auf der CD unter datenbanken artikel Oracle artikel Um die Kursdatenbank wieder zur ckzusetzen wird das Skript LoescheOraArtikel aufgerufen Um die Datenbank wieder zu laden wird das Skript OraArtikel aufgerufen Beide Skripte gehen davon aus dass Sie das Passwort masterkey f r den Benutzer system eingerichtet haben wie es in der folgenden Installation empfohlen wird Die Existenz des Schemas k nnen Sie in Oracle unter ADMI NISTRATION DATABASE USERS MANAGE USERS kontrollieren Existiert der Benutzer artikel ist das Schema verf gbar Sie k nnen sich mit dem Benut zer artikelund dem Passwort pwartikel anmelden und unter OBJECT BROWSER BROWSE TABLES den Inhalt berpr fen Im Tabellenblatt TABLE sehen Sie die Struktur unter DATA den Inhalt der Tabellen 3 2 3 Firebird Alle Daten f r die Kursdatenbank stehen auf der CD unter datenbanken Fire kurse bird kurse Um die Kursdatenbank wieder zur ckzusetzen wird das Skript LoescheFireKurse aufgerufen Um die Datenbank wieder zu laden wird das Skript FireKurse aufgerufen Alle Daten f r die Artikeldatenbank stehen auf der CD unter datenbanken artikel Firebird artikel Um die Artikeldatenbank wieder zur ckzusetzen wird das S
558. sy Wie schaffe ich Ordnung auf dem PC Wie 8 2 4 EDY Word Einstieg in die Textverabeitung mit Word G 40 2 5 Datenbank Access Einstieg in das Datenbankmanagmentsyste 60 2 6 EDV Excell Einstieg in die Tabellenkalkulation mit Excel 40 2 7 Datenbank Access IlI Vertiefung der Arbeit mit MS Access Kompl 60 5 8 EDV Datenbankentwurf Entwurf relationaler Datenbanken und Ums 80 7 9 EDY VBA Datenbankpro Programmierung von Anwendungen auf der 80 7 10 EDY Word Il Vertiefung des Umgangs mit Word Mehrsp 40 4 11 EDY Excel ll Vertiefung des Umgangs mit Excel Funktio 40 6 Vorhandene Datens tze ndern UPDATE Die UPDATE Anweisung besitzt eine Reihe von Erweiterungen So kann mit LOW PRIORITY die Ausf hrung des UPDATE bei hoher Belastung der Datenbank verz gert werden Ein UPDATE erfordert Sperren in der Datenbank die dann andere Benutzer unter Umst nden behindern Ist die unmittelbare Ausf h rung nicht notwendig kann dies daher sinnvoll sein Mehr dazu in Kapitel 13 Zu Testzwecken kann auch die Anzahl der zu ndernden Datens tze beschr nkt werden UPDATE LOW PRIORITY tabellenname SET feldname ausdruck1 feldname ausdruck WHERE bedingungsliste LIMIT anzahl Weitere Zus tze sind f r die einzelnen Datenbanken verf gbar 6 2 2 Besonderheiten von UPDATE bei MS Access MS Access bietet auch f r die Erstellung von UPDATE Anweisungen eine eigene M glichkeit im Rahmen der grafischen B
559. t 2 Dann werden dem Ergebnis der Anweisung die Werte aus dem Feld KTID PID der Personentabelle als Fremdschl ssel entnommen Die so ermit telten Werte werden dann in einer zweiten SQL Anweisung in der PID als Prim rschl ssel in der Tabelle tbPerson gesucht Es geh ren immer die Datens tze aus tbPerson und aus tbKursbesuche zusammen deren Werte in dem Feld PID beziehungsweise KTID bereinstimmen Haben Sie die zusammengeh rigen Datens tze ermittelt ist es nicht mehr schwer die weiteren Daten aus den brigen Feldern der zusammengeh renden Da tens tze zu bestimmen Was Sie tun m ssen ist also den Fremdschl ssel KTID der Tabelle tbKursbesuche mit dem Prim rschl ssel PID der Tabelle tbPerson gleichzusetzen Das nennt man in SQL einen JOIN der sich auch direkt in einer SOQL Anweisung ausf hren l sst Sollen beispielsweise die Adressen aller Personen ermittelt werden die am Kurs CE23 teilnehmen und noch nicht mindestens 250 Kursgeb hr bezahlt haben so k nnen Sie beide Schritte in einer SELECT Anweisung zusammenfassen SELECT k KID k GezahlterBetrag k KTID p PID p Familienname p Vorname p PLZ p Ort p Strasse FROM tbPerson p INNER JOIN tbKursbesuche k ON p PID k KTID WHERE k KID CE23 AND k GezahlterBetrag lt 250 ORDER BY p Familienname ASC p Vorname ASC Beispiel Fremdschl ssel Prim rschl ssel Beispiel Listing 4 22 Beispiel f r einen JOIN 113 S Kapitel 4 Abbild
560. t SQL ist eine universelle Datenbanksprache die allerdings Dialekte aufweist Dialekte die von den unterschiedlichen Datenbanksystemen gesprochen werden Mit den Datenbanken ist es wie mit den Dialekten es gibt kein Bes ser oder Schlechter man mag einen Dialekt oder man mag ihn nicht Schlie lich h ngt es auch davon ab wo man lebt genauso wie von dem Datenbanksystem das man lernen m chte vielleicht weil es in der Firma eingesetzt wird der Kunde es w nscht die Hochschule oder Schule es vor gibt oder man es einfach schon ein wenig kennt Vielleicht auch weil man ein neues System kennenlernen m chte Ich m chte Sie herzlich einladen Ihre Entscheidung frei zu treffen und viel leicht auch mit mehreren Systemen parallel zu experimentieren Es soll Ihnen hier kein Dialekt vorgeschrieben werden Daher sind alle L sungen zu den bungsaufgaben und viele Hinweise im Text auf die Systeme MySQL MS Access Oracle Firebird und openOffice base hier kurz openBase bezo gen Basis f r meine Auswahl war dass diese Systeme zusammen die in der Praxis verwendeten Systeme gut repr sentieren und von allen bis auf MS Access zumindest kostenlose bungsversionen verf gbar sind die Sie auch auf der CD finden W hlen Sie also Ihr System Ihren Dialekt oder um im obigen Bild zu bleiben Ihren Tennisschl ger zum Erlernen von SQL 13 14 Vorwort Mein Dank gilt zun chst dem Verlag Addison Wesley f r die Geduld und die
561. t Der MITARBEITER Meier ist angestellt bei einer FIRMA Daten Welt Die FIRMA DatenWelt hat einen oder viele MITARBEITER beispielsweise Meier Hoff mann 1 1 eins Zzu eins Eine Auspr gung der einen Entit t kann nur maximal einer Auspr gung der anderen Enti t t zugeordnet werden und umgekehrt verheiratet christliche Vari ante Eine PERSON ist mit keiner oder einer PERSON verheiratet Das Ganze gilt in beiden Richtungen n zu n oder viele zu viele Eine Auspr gung der einen Entit t kann keiner einer oder vielen Auspr gungen der anderen Entit t zugeordnet werden und umgekehrt Wird auch mit n m oder m m abgek rzt nin verheiratet Polygamie Ein Mann ist mit keiner einer oder vielen Frauen verheiratet Eine Frau ist mit keinem einem oder vielen M nnern verheiratet kauft Ein Kunde kauft keinen einen oder viele Artikel Ein Artikel der Typ nicht der konkrete Artikel wird von keinem einem oder vie len Kunden gekauft Zeitliche Rahmenbedingungen Beachten Sie dass alle Informationen in einer relationalen Datenbank wie in einem Entity Relationship Modell immer zu einem bestimmten Zeitpunkt gel ten So kann sich die Beziehung ist verheiratet im Lauf der Zeit durchaus von einer 1 1 Beziehung zu einer n n Beziehung ndern Dies ist aber nur dann relevant wenn der zeitliche Verlauf in die Datenbank hineinmodelliert werden soll
562. t Im fol genden Beispiel werden also alle Personen ausgew hlt die mehr bezahlt haben als irgendein Teilnehmer des Kurses CE23 bezahlt hat Somit wird de facto mit dem kleinsten gezahlten Betrag also dem Minimum verglichen und es werden alle Teilnehmer ermittelt die NICHT den kleinsten Betrag bezahlt haben siehe Listing 9 13 SELECT p Familienname p Vorname kb GezahlterBetrag kb KID FROM tbPerson p INNER JOIN tbKursbesuche kb ON p PID kb KTID WHERE kb GezahlterBetrag gt ANY SELECT kb2 GezahlterBetrag FROM tbKursbesuche kb2 WHERE kb2 KID CE23 I Damit k nnen durch Negation dieser Aussage gerade die Teilnehmer ermit telt werden die h chstens den kleinsten Betrag aus dem Kurs CE23 bezahlt haben Unterabfragen mit IN und EXISTS 9 m SELECT p Familienname p Vorname kb GezahlterBetrag kb KID Listing 9 14 FROM tbPerson p INNER JOIN tbKursbesuche kb ON p PID kb KTID Alle Teilnehmer die den WHERE NOT kb GezahlterBetrag gt kleinsten Betra ANY SELECT kb2 GezahlterBetrag ee FROM tbKursbesuche kb2 WHERE kb2 KID CE23 D Somit wird mit der folgenden SQL Anweisung derselbe Effekt erreicht SELECT p Familienname p Vorname kb GezahlterBetrag kb KID FROM tbPerson p INNER JOIN tbKursbesuche kb ON p PID kb KTID WHERE kb GezahlterBetrag lt SELECT MINCkb2 GezahlterBetrag FROM tbKursbesuche kb2 WHERE kb2 KID CE23 I Beachten Sie dass die Verwendung der Funktionen MIN und MAX nicht
563. t Bezug zur Mehrwertsteuerta belle ben tigt wird Sie erkennen dies am Beispiel der Tabelle artikel CREATE TABLE IF NOT EXISTS artikel mwst_art ENUMC voll erm ssigt kein NOT NULL DEFAULT voll REF ERENCES mwst mwst_art I Das ist nicht nur aufwendig sondern auch fehlertr chtig Da sich gerade in der betrieblichen Praxis viele Beispiele f r eingeschr nkte Wertebereiche finden hat man nach Wegen gesucht derartige Spezialwerte und Bedingun Beispiel Dom ne 297 W kaites 298 CREATE DOMAIN Datenbanken erstellen SQL DDL gen einmalig zu definieren und sie dann an allen ben tigten Stellen ver wenden zu k nnen Derartige eingeschr nkte Wertebereiche nennt man Dom nen Dom nen werden mit einer eigenen CREATE Anweisung erzeugt die aller dings nur in wenigen Datenbanksystemen hier Firebird verf gbar ist In unserem Beispiel k nnte das wie folgt aussehen CREATE DOMAIN mehrwertsteuerart AS CHAR 9 DEFAULT kein NOT NULL CHECK VALUE IN voll erm ssigt kein I Die Definition der Dom ne wird also mit einer eigenen SQL Anweisung erzeugt Die Dom ne erh lt damit auch einen eigenen Namen hier wird mehrwertsteuerart erzeugt Der Name muss wiederum innerhalb des Sche mas eindeutig sein Er kann als Datentyp in anderen DDL Anweisungen genutzt werden Die Tabelle mwst kann jetzt erstellt werden mit CREATE TABLE mwst mwst_art mehrwertsteuerart PRIMARY KEY mwst_satz SMA
564. t INSERT in die Tabelle eingef gt H t ten wir im obigen Beispiel auf das HAVING tbKursbsuche KID CE23 ver zichtet w re f r alle Kurse ein Datensatz eingef gt worden Da die Tabelle tbKursbesuche die Teilnehmer von vier verschiedenen Kursen enth lt w ren vier Gruppendatens tze gebildet und diese vier Datens tze in die Tabelle tbKurs_Statistik eingef gt worden Die obige INSERT INTO Anweisung ist brigens das Ergebnis eines mit MS Access generierten SQL Befehls Sie sehen dass man die HAVING Klausel bes ser durch eine WHERE Bedingung ersetzt h tte um bereits vor dem Gruppie ren zu filtern und so die Datenmenge einzuschr nken Das folgende SQL Beispiel h tte also dasselbe Ergebnis und bei gr eren Datenmengen einen geringeren Speicher und Zeitbedarf INSERT INTO tbKurs_Statistik C KID sum_fehltage sum_rabatt mittel_beitrag Anzahl SELECT tbKursbesuche KID SUMCtbKursbesuche Fehltage SUMCtbKursbesuche Rabatt AVGCtbKursbesuche GezahlterBetrag COUNTCtbKursbesuche KBID FROM tbKursbesuche WHERE tbKursbesuche KID CE23 GROUP BY tbKursbesuche KID INSERT INTO sa SELECT z Mehrere Datens tze einf gen Listing 6 6 Einf gen eines Datensatzes mit einer Unterabfrage Sub SELECT 203 WM xKariteis Datenbankinhalte ndern INSERT UPDATE DELETE Beispiel Archiv Listing 6 7 Einf gen von Archivdatens tzen aus mehreren Tabellen Abbildung 6 1 Ergebnis der Archivierung 204
565. t ON tbPerson Familienname 10 Ort Vorname CREATE INDEX ort2 ON tbPerson Ort Familienname 10 Optimierter Zugriff der INDEX E 14 m Die Frage ist nun welche dieser Indizes f r die SELECT Anweisung verwendet werden k nnen Schauen wir uns dazu den Effekt der Anlage eines Index an Die Tabelle tbPerson ist in Abbildung 14 1 komplett zu sehen die Reihen folge der Felder wurde f r unsere Zwecke in der Anzeige ge ndert Abbildung 14 1 PID Famiisnnems Vorname Ort PLZ Inhalt der Tabelle tbPerson 1 Weiss Peter Hannover 30529 2 Bucz Susanne Hannover 30531 4 Karmann Thomas Celle 29227 5 Kl tzer Karl Celle 29221 6 Weiss Karin Hannover 30529 7 Weiss Peter Braunschweig 38134 8 Meier Kathrin Braunschweig 38154 9 Schmidt Karl Hannover 30529 10 M ller Claudia Breitenhees 29596 11 Lisewski Bemd Barsinghausen 30890 15 Martens Melanie Celle 29221 17 Schlachter Dieter Celle 29227 23 Peredy Helmut Celle 29221 24 Ruppert Nicola Bergen 29301 25 Sander km Celle 29223 26 Cromberg J rg Braunschweig 38152 31 Schulze Tanja winsen 29308 32 Winter Petra Hermannsburg 29320 34 Plate Ulrich Hannover 30529 37 Magerkurth Melissa Nienhagen 29336 Wird der Index ort wie er als dritte Zeile in Listing 14 3 angegeben ist angelegt kann man sich die Anlage einer Indextabelle wie in Abbildung 14 2 vorstellen Die Felder des Index werden f r jeden Datensatz zu einem Eintrag verbunden und es wird als Referenz die ID des Datensatzes angege be
566. t den Namen des Mitarbeiters dazu Mitarbeiternr Mitarbeiternai Mitarbeitervor PLZ Ort Kundennr Kundenname Kunden_PLZ Kunden _Ort Abbildung 7 10 777 Olsen Edwin 29225 Celle 2 EWALD Kuhn KG 29223 Celle Windm hlenstr 12 i j 777 Olsen Edwin 29225 Celle 2 EWALD Kuhn KG 29223 Celle Windm hlenstr 12 Ausschnitt einer TTT Olsen Edwin 29225 Celle 2 EWALD Kuhn KG 29223 Celle Windm hlenstr 12 redundanten Tabelle 277 Wichtig Willi 30156 Hannover 3 Hans Joachim Bit 29320 Hermannsburg Lange Sra e 1 277 Wichtig Willi 30156 Hannover 3 Hans Joachim Bit 29320 Hermannsburg Lange Sra e 1 777 Olsen Edwin 29225 Celle 6 Hobelix OHG 30230 Hannover Lange Laube 2 777 Olsen Edwin 29225 Celle 6 Hobelix OHG 30230 Hannover Lange Laube 3 777 Olsen Edwin 29225 Celle 17 EWALD Kuhn KG 29223 Celle Windm hlenstra e 12 777 Olsen Edwin 29225 Celle 17 EWALD Kuhn KG 29223 Celle Windm hlenstr 15 277 Wichtig Willi 30156 Hannover 25 Clean GmbH 29225 Celle Lauensteinplatz 8 277 Wichtig Willi 30156 Hannover 25 Clean GmbH 29225 Celle Lauensteinplatz 8 777 Wichtig Willi 30156 Hannover 25 Clean GmbH 29225 Celle Lauensteinplatz 9 Betrachten Sie den Kunden CLEAN GmbH In Abbildung 7 10 sehen Sie wieder die Redundanz Hier besteht das Problem darin dass zu jedem Auf trag immer wieder alle Daten eines Kunden abgelegt werden Die Daten des Kunden Clean GmbH hier seine Kundennummer die PLZ und weitere Daten wie Ort Stra e und Hausnummer werden f r jeden Auftrag dieses Kunden
567. t ein sogenannter Ausdruck Jeder einzelne Feldname f r sich wie auch jedes Literal f r sich ist aber ebenfalls bereits ein Ausdruck Ein Ausdruck kann also ein Feldname sein ein Literal oder eine Kombination aus beiden in beliebiger Komplexit t Zus tzlich stehen bei der Bildung von Ausdr cken sogenannte Funktionen zur Verf gung mit denen die Feldinhalte und Literale weiter ver ndert wer den k nnen Somit stellt der Begriff Ausdruck hier einen Oberbegriff f r alle Kombinationen von Feldern Funktionen und Operatoren dar die zu einem sinnvollen Ergebnis f hren Ausdruck 167 W kaites 168 Beispiele Listing 5 8 Kalkulation des Bruttobetrages Parameter Datentypen Ausdr cke und Funktionen Die folgende SELECT Anweisung gibt die Kursgeb hr um 19 Umsatzsteuer erh ht und auf zwei Stellen gerundet aus Dabei wird die W hrung EUR als Text angef gt SELECT k Kurskennung CONCAT ROUND k Gebuehr 1 19 2 EUR AS Geb hr FROM tbKurs k Hier sind die beiden Feldnamen Kurskennung und Gebuehr das Literal EUR beachten Sie das Leerzeichen vor dem EUR sowie die Funktionen ROUNDO und CONCATO verwendet worden Die SELECT Anweisung kann somit erwei tert werden zu SELECT DISTINCTJALL ausdrucksliste FROM tabelle joinliste WHERE bedingungsliste GROUP BY ausdrucksliste HAVING bedingungsliste ORDER BY ausdrucksliste ASC DESCI 5 5 Funktionen Funktionen bilden e
568. t es hier aller dings erhebliche Unterschiede Oft werden die Datentypen entsprechend dem Tabellen erstellen CREATE TABLE zu erwartenden Speicherbedarf noch unterteilt beispielsweise in TINYINT SMALLINT INTEGER und BIGINT Obige Datentypen sind bis auf die erw hn ten Besonderheiten in MS Access in den hier verwendeten Datenbanksys temen verf gbar Nat rlich k nnen Sie auch die Erweiterungen der einzelnen Datenbanksys teme nutzen So kann alternativ bei Datenbanken wie MySQL die auch Auf z hlungstypen kennen die Tabelle mit CREATE TABLE IF NOT EXISTS mwst mwst_art ENUMC voll erm ssigt kein NOT NULL PRIMARY KEY mwst_satz SMALLINT NOT NULL DEFAULT O definiert werden Damit wird eine Tabelle mwst angelegt die wiederum zwei Felder beinhaltet Das erste Feld mwst_art kann zwar wieder Texte aufneh men diese k nnen aber nur die drei Werte voll erm ssigt oder kein sein was an dem Aufz hlungstyp ENUM erkennbar ist Mit dem Zusatz IF NOT EXISTSdirekt nach dem CREATE TABLEkann verhindert werden dass das Datenbanksystem einen Fehler erzeugt wenn bereits eine Tabelle mit demselben Namen vorhanden ist Gerade bei der automatisierten Erzeugung kompletter Schemata kann das von Vorteil sein wenn es vom Datenbanksystem unterst tzt wird Die Angabe NOT NULL erzwingt eine Werteingabe f r ein Feld Interessant ist die Kombination mit der DEFAULT Option Wird ein DEFAULT Wert angegeben wird di
569. t masterkey f r den Benutzer root eingerichtet haben wie es in der folgenden Installation emp fohlen wird Au erdem gehen beide Skripte davon aus dass sie aus dem Ver zeichnis datenbanken MySQL kurse heraus ausgef hrt werden Alle Daten f r die Artikeldatenbank stehen auf der CD unter datenbanken MySQL artikel Um die Kursdatenbank wieder zur ckzusetzen wird das Skript LoescheArtikeldb aufgerufen und anschlie end das L schen mit y best tigt Um die Datenbank wieder zu laden wird das Skript Artikeldb aufgerufen Beide Skripte gehen davon aus dass Sie das Passwort masterkey f r den Benutzer root eingerichtet haben wie es in der folgenden Installation emp fohlen wird Au erdem gehen beide Skripte davon aus dass sie aus dem Ver zeichnis datenbanken MySQL kurse heraus ausgef hrt werden 3 2 2 Oracle Alle Daten f r die Kursdatenbank stehen auf der CD unter datenbanken Ora cle kurse Um die Kursdatenbank wieder zur ckzusetzen wird das Skript LoescheOraKurse aufgerufen Um die Datenbank wieder zu laden wird das Skript OraKurse aufgerufen Beide Skripte gehen davon aus dass Sie das Passwort masterkey f r den Benutzer system eingerichtet haben wie es in der folgenden Installation empfohlen wird Die Existenz des Schemas k nnen Sie in Oracle unter ADMI NISTRATION DATABASE USERS MANAGE USERS kontrollieren Existiert der Benutzer kurse ist das Schema verf gbar Sie k nnen sich mit dem Benutzer kurse und dem Pas
570. t wie der durchschnittliche Rabattsatz aller Teilnehmer aller Kurse U9 2 2 3 Verwenden Sie jetzt die Artikeldatenbank Ermitteln Sie die Artikelnum mer anr und die Bezeichnung sowie den Listenpreis aller Artikel deren Listenpreis gr er als der durchschnittliche Listenpreis aller Artikel ist 09 2 3 4 Ermitteln Sie die Artikelnummer anr und die Bezeichnung sowie den Listenpreis des teuersten Artikels 9 2 4 5 Ermitteln Sie f r alle Warengruppen deren durchschnittlicher Listenpreis ber dem Gesamtdurchschnitt aller Artikel liegt die Bezeichnung der Warengruppe und deren durchschnittlichen Listenpreis 9 2 5 9 3 Unterabfragen mit ALL und ANY Eng verwandt mit den bisherigen Abfragen sind Vergleichsabfragen mit den beiden Operatoren ALL und ANY ALL und ANY sind prinzipiell nur Umschrei bungen f r die Verwendung der Aggregationsfunktionen MINO und MXO zur Ermittlung des kleinsten respektive gr ten Wertes einer Gruppe von Werten Sollen beispielsweise alle Kursteilnehmer ermittelt werden die bisher min destens so viel bezahlt haben wie derjenige Teilnehmer des Kurses CE23 der am meisten bezahlt hat so kann dies mit der folgenden SQL Anweisung ermittelt werden bungen Beispiel 307 W kaites Listing 9 12 berdurchschnittliche Beitragszahler des Kurses CE23 Abbildung 9 5 Alle Teilnehmer die mindestens so viel bezahlt haben wie das Maximum der Teilnehmer von Kurs CE23
571. tbKursbesuche GROUP BY tbKursbesuche KID Sie k nnen die Abfrage jetzt testen indem Sie ber das Symbol links oben in die Datenblattansicht umschalten und erhalten die vier Datens tze die eingef gt wurden Abbildung 6 5 tbKurs_Statistik Tabelle Bere sum Emael mittel_betrag Sie sehen die automatisch erzeugten Alias als berschriften der Ergebnis spalten Mit ABFRAGE AUSF HREN oder dem nebenstehend abgebildeten Sym bol k nnen Sie die Anf geabfrage wirklich ausf hren Jetzt wird die INSERT INTO Anweisung ausgef hrt Da dies zu einer realen und nicht automatisch r ckg ngig zu machenden nderung der Datenbank f hrt m ssen Sie die Anweisung best tigen Abbildung 6 4 MS Access Anf geabfrage Listing 6 9 INSERT aus MS Access Abbildung 6 5 Ergebnis des Tests der Anf geabfrage 207 S Kapitel 6 Abbildung 6 6 Anf geabfrage mit Filter Abbildung 6 7 Einf geabfrage mit festen Werten und einer Funktion 208 Listing 6 10 Einf geabfrage mit Literalen und Funktion Datenbankinhalte ndern INSERT UPDATE DELETE Nach der Best tigung k nnen Sie das Ergebnis in der Tabelle tbKurs_ Statistik betrachten Hier sollten genau die vier Datens tze aus der Abbil dung 6 5 vorhanden sein Um das obige Beispiel zu vervollst ndigen soll jetzt gezielt nur der Kurs CE23 in die Statistiktabelle eingef gt werden L schen Sie dazu zun chst noch einmal die schon vorhandenen Datens tze
572. tbPerson und tbDozent die nur in der Tabelle tbPerson enthalten sind 11 6 5 bungen 337 Benutzer Rechte und Zugriffsschutz Mit diesem Kapitel verlassen wird den engeren Bereich der f r die Datenbe arbeitung und Schemabearbeitung definierten SQL Befehle Wir haben bis her noch eine Reihe von Befehlen ausgelassen die weniger mit der Defini tion des Schemas und mit der unmittelbaren Abfrage und nderung von Daten in einer relationalen Datenbank zu tun haben und zumeist als Data Control Language also SOL DCL bezeichnet werden Trotzdem sind sie f r das Funktionieren und die Performance einer Daten bank unter Umst nden entscheidend Dazu geh ren sowohl die Verwaltung von Rechten GRANT REVOKE die Steuerung der Transaktionen COMMIT ROLL BACK wie auch eine Reihe im engeren SQL Standard nicht definierter Anwei sungen Obwohl diese im engeren SQL Standard teilweise nicht einmal erw hnt sind sind sie gleichwohl De facto Standards zur Steuerung der physischen Datenverwaltung und Optimierung des Datenzugriffs geworden Diese Steuerung der physischen Datenhaltung geh rt streng genommen nicht zum Aufgabenumfang von SQL da hier im Sinn der 3 Ebenen Archi tektur nicht die von SQL adressierte logische Ebene sondern die physische Ebene betroffen ist Die Praxis hat allerdings gezeigt dass gerade eine Optimierung des Zugriffs auf h ufig verwendete Informationen zu den wesentlichen Anforderungen geh rt Zun chst s
573. te eines Datenfeldes aller Einzeldatens tze Die GROUP BY Klausel einer Gruppe durchzuf hren Aggregatfunktionen sind in der Lage bei spielsweise den kleinsten Wert einer Gruppe zu ermitteln MIN die Werte zu summieren SUMME oder einen Mittelwert Avc zu bilden Dabei wird die Funktion mit dem Feldnamen aufgerufen also beispielsweise E SUMCRabatt Summe aller Rabatte je Gruppe AVG GezahlterBetrag durchschnittlich gezahlter Betrag je Gruppe E COUNT Zahlweise Anzahl unterschiedlicher Zahlweisen je Gruppe Wesentlich ist wie gesagt dass f r jedes Datenfeld au er den Gruppierungs feldern eine Aggregatfunktion angegeben wird Ist n mlich nicht klar wie f r ein Feld ein repr sentativer Gruppenwert entstehen soll m sste der SQL Interpreter selbst entscheiden welchen Wert er nehmen soll Das ist nicht nur willk rlich sondern auch sinnlos Also k nnen keine einfachen Felder im Ergebnis der SELECT Anweisung auftauchen sondern nur Gruppierungs felder und Felder mit Aggregatfunktion So kann beispielsweise die Summe der gezahlten Beitr ge je Kurs wie folgt ermittelt werden SELECT KID SUM GezahlterBetrag FROM tbKursbesuche GROUP BY KID ORDER BY 2 DESC Das Feld KID ist das Gruppierungsfeld es wird also je Kurs ein Gruppen datensatz erzeugt Dann werden die Werte des Feldes GezahlterBetrag je Gruppe summiert Abschlie end werden die ermittelten Datens tze abstei gend nach dem summierten Betrag 2 S
574. tell_position TO vertrieb GRANT SELECT ON artikel TO vertrieb GRANT ALL ON kunden TO vertriebsleitung GRANT ALL ON artikel TO artikelverwaltung GRANT vertrieb TO meier stolze wegmann chef GRANT vertriebsleitung TO wegmann chef GRANT artikelverwaltung TO mueller neumayer chef GRANT chef TO ahrens REVOKE vertrieb FROM stolze GRANT vertrieb TO altmann Sie sehen in Listing 12 5 wie zun chst die Benutzer und dann die Rollen erzeugt werden Die Benutzer entsprechen den tats chlichen Mitarbeitern die Rollen geben die Position im Betrieb wieder Danach werden die Rechte an den Tabellen den Rollen zugeordnet Der Vertrieb erh lt seine Zugriffs rechte Der Vertriebsleiter erh lt seine zus tzlichen Rechte Dann erh lt die Rolle artikelverwaltung ihre Rechte Jetzt m ssen die Rollenrechte noch den eigentlichen Mitarbeitern zugeordnet werden Dazu dienen die n chsten drei GRANT Anweisungen Beachten Sie dass die Rechte dabei nicht nur den ein zelnen Benutzern sondern auch der bergeordneten Rolle chef zugewiesen werden Dadurch sammeln sich dort alle Rechte Schlie lich wird die Stelle des Chefs besetzt indem die Rechte an der Rolle dem Benutzer ahrens zuge ordnet werden Dies ist die eigentliche Stellenbesetzung im Sinn der Datenbank Nat rlich h tte man im Fall des Vertriebsleiters und des Chefs auf eine eigene Rolle verzichten k nnen da es sich nur um einen Benutzer handelt Das Rollenkonzept ist aber flexi
575. tellenanzahl gibt die Anzahl dargestellter Ziffern an Fehlen Ziffern wird die Angabe links mit Leerzeichen aufgef llt was die Verwendung in Tabellen deutlich verbessert Mit ZEROFILL kann auch mit f hrenden Nullen aufgef llt werden So wird bei der Angabe INTEGER C5 ZEROFILL die Postleitzahl 01438 korrekt mit f hrender Null angegeben Die Tabelle 5 4 gibt eine bersicht ber die Standardtypen ganzer Zahlen in den verschie denen Systemen Tabelle 5 3 bersicht ber ganzzahlige Typen in MySQL SIGNED UNSIGNED 157 W kaites 158 Tabelle 5 4 Ganze Zahlen Oracle Access Gleitkommazahl Datentypen Ausdr cke und Funktionen ANSI MySQL MS Access Oracle Firebird open Base SMALLINT 2 Byte SMALLINT INTEGER SMALLINT SMALLINT SMALLINT Zahl INTEGER 4 Byte INTEGER LONG INTE INTEGER INTEGER INTEGER INT GER Zahl BIGINT 8 Byte BIGINT BIGINT BIGINT Oracle stellt eine Besonderheit dar da dort f r Zahlen generell der Typ NUM BER empfohlen wird NUMBER ist eine Oracle Entwicklung die in diesem Umfeld aber den De facto Standard darstellt F r ganze Zahlen empfiehlt sich hier generell die Verwendung des Typs NUMBER 38 Die MS Access Oberfl che bietet f r alle numerischen Angaben die Auswahl Zahl an Wird im unteren Auswahlbereich unter FELDGR SSE Byte 1 Byte Integer oder Long Integer gew hlt ergibt sich daraus eine entsprechende Ganzzahl 5 1
576. tenbanken modellieren artikel anr INT bezeichnung VARCHAR 255 gebinde INT einheit VAR CHAR 30 wgknz INT einstandspreis DECIMAL 6 2 listenpreis DECI MAL 6 2 mwst_art ENUMC voll erm ssigt kein mindestbestand INT Ein typischer Datensatz w re hier 1002 Universalpapier Standard 500 Blatt 1 2 48 5 99 vo11 2000 Die Bestellung beinhaltet neben dem Bestelldatum vor allem mit der mid und der kid die Fremdschl ssel f r die Beziehung zum bestellenden Kunden bestellung mid INT bnr INT kid VARCHAR 50 bestelldatum DATE Ein typischer Datensatz w re hier 1 1 4711 15 10 2007 Die Bestellposition beschreibt die Menge die von einem Artikel innerhalb einer bestimmten Bestellung bestellt wird ber die mid und die bnr wird die Beziehung zur Bestellung hergestellt Die Beziehung zum bestellten Artikel wiederum wird ber die anr hergestellt bestell_position mid VARCHAR 50 bnr INT pos INT anr INT anzahl INT Ein typischer Datensatz w re hier 1 8876 1 10 2 7 5 Sinn und Unsinn der Normalisierung 7 5 1 Redundanz und Anomalien Sie haben wahrscheinlich bereits bei der Erstellung der einfachen SELECT Anweisungen in Kapitel 4 festgestellt dass die Beziehungen immer wieder Probleme verursachen k nnen Wenn wir uns in Kapitel 9 mit Unterabfragen besch ftigen wird die Sache noch unangenehmer Es stellt sich die Frage warum man sich das denn berhaupt antut und nicht alle Informationen in eine Tabelle legt
577. tifikat Gebuehr Ustpflichtig DID Vorname PLZ Ort Strasse Geburtsdatum Die Reihenfolge in der die JoIN Verkn pfungen gebildet werden wird dabei durch eventuelle Klammern in der FROM Klausel bestimmt Im obigen Beispiel wird zun chst der geklammerte Ausdruck CtbPerson p INNER JOIN tbKursbesuche kb ON p PID kb KTID als erster Ausdruck ausgewertet das Ergebnis ist eine virtuelle Tabelle In einem zweiten Schritt wird dann diese virtuelle Tabelle mit tbKurs verbun den FROM tbKurs k INNER JOIN VIRTUELL ON k KID VIRTUELL KID Solange INNER JOIN Verkn pfungen verwendet werden ist die Reihenfolge f r das Ergebnis des JOIN letztlich egal Es k nnte also dasselbe Ergebnis auch mit folgender SELECT Anweisung erreicht werden SELECT k Kurskennung p Familienname p Vorname FROM tbKurs k INNER JOIN tbKursbesuche kb ON k KID kb KID INNER JOIN tbPerson p ON kb KTID p PID WHERE k KID CE23 ORDER BY p Familienname p Vorname Beachten Sie die ver nderte Stellung der Klausel ON k KID kb KID in die ser Anweisung Wie gesagt das Ergebnis ist das Gleiche und in Abbildung 4 25 dargestellt Eine weitere M glichkeit dies mit einem SELECT zu formulieren besteht darin scheinbar zweimal direkt von der mittleren Tabelle tbKursbesuche aus zugehen Abbildung 4 27 Verbindung dreier Tabellen Listing 4 28 Ver nderte JOIN Reihenfolge 121 WM karitea Listing 4 29 Dritte Variante des JOIN
578. tit t Artikel Abbildung 7 8 Entit t Mehrwertsteuer 235 W karitez Problembeschreibung 236 aus Beziehungssicht Datenbanken modellieren Sind die Entit ten eher den Substantiven einer textuellen Problembeschrei bung zu entnehmen entsprechen die Verben eher den Beziehungen Gerade die Verben die sich auf Substantive beziehen die bereits als Entit ten akzep tiert wurden k nnen sinnvolle Hinweise auf Beziehungen liefern Dazu wol len wir noch einmal den urspr nglichen Text analysieren Das Unternehmen B roFix handelt mit einem breiten Sortiment f r den B robedarf Es m chte eine Datenbank aufbauen die ihm Auskunft ber Einkauf und Verkauf verschiedener Artikel seines Sortiments gibt B roFix besteht aus zwei Firmen der B roFix KG und der B ro Versand GmbH Die B roFix KG betreibt mehrere Ladengesch fte w hrend die B ro Versand GmbH ihre Kunden im Versandhandel beliefert Zus tzlich hat sie in der Nachbarstadt noch die Paul und Weiss B robedarf GmbH bernommen die dort mehrere Gesch fte betreibt B roFix m chte eine gemeinsame Daten bank f r die drei Firmen betreiben Alle Kunden einschlie lich der Versand kunden bilden einen gemeinsamen Kundenstamm Die Waren sind verschie denen Warengruppen zugeordnet Jeder Artikel hat einen von mehreren vordefinierten Mehrwertsteuers tzen Die Kunden erteilen Bestellungen die aus mehreren Bestellpositionen bestehen k nnen Jede Bestellposition betr
579. toffe zu sparen haben wir auf Folienverpackung verzichtet 101987654321 11 10 09 ISBN 978 3 8273 2485 6 2009 Pearson Studium ein Imprint der Pearson Education Deutschland GmbH Martin Kollar Stra e 10 12 D 81829 M nchen Germany Alle Rechte vorbehalten www pearson studium de Lektorat Brigitte Bauer Schiewek bbauer pearson de Fachlektorat Dirk Louis Herstellung Martha K rzl Harrison mkuerzl pearson de Korrektorat Martina Gradias Coverkonzeption und gestaltung Marco Lindenbeck webwo GmbH mlindenbeck webwo de Satz Reemers Publishing Services GmbH Krefeld www reemers de Druck und Verarbeitung K sel Krugzell www KoeselBuch de Printed in Germany Auf einen Blick Vorwort Kapitel 1 Kapitel 2 Kapitel 3 Kapitel 4 Kapitel 5 Kapitel 6 Kapitel 7 Kapitel 8 Kapitel 9 Kapitel 10 Kapitel 11 Kapitel 12 Kapitel 13 Kapitel 14 A B 0 Einleitung e E E ETT SQL der Standard relationaler Datenbanken Die Beispieldatenbanken Mit SQL Daten abfragen SELECT Datentypen Ausdr cke und Funktionen Datenbankinhalte ndern INSERT UPDATE DELETE ae aan Datenbanken modellieren Datenbanken erstellen SQL DDL Unterabfragen Sub SELECT Unterabfragen in der DDL und DML Mengenoperationen UNION INTERSECT EXCEPT MINUS Benutzer Rechte
580. tral European GBK Simplified Chinese ISO 8859 9 Turkish ARMSCII 8 Armenian UTF 8 Unicode UCS 2 Unicode DOS Russian DOS Kamenicky Czech 1lovak Mac Central European Mac West European DOS Central European ISO 8859 13 Baltic Windows Cyrillic i Arabic Baltic Binary pseudo charset GEOSTD8 Georgian SJIS for Windows Japanese UJIS for Wi Japanese cp858_general_ci hp8_english_ci koi8 r_general_c latini1_swedish_ latin2_gen e7 ascii_gene ujis_japan japan tis628_thai_ci euckr_korean_ci koi u_genera i gb2312_chine greek_general_ci cp1258_general_ci gbk_chinese_ci latin5_turkish_ci armscii _general_ci utf8_general_ci ucs2_general_ci cp866_general_ci keybcs2_general_ci macce_general_ci macroman_general_ci cp852_general_ci latin _general_ci cp1251_genera cp1256_general_ci cp1257 _general_ci binary geostd8_general_ci cp932_japanese_ deutscher Sprache zumeist latin gew hlt wird W kaites Sortierreihenfolge Abbildung 8 3 Sortierreihenfolgen f r den 252 Zeichensatz latin1 DIN 5007 Datenbanken erstellen SQL DDL Jeder Zeichensatz hat eine oder mehrere Sortierreihenfolgen So k nnen Sie mit der SQL Anweisung SHOW COLLATION LIKE latin1 alle Sortierreihenfolgen ermitteln die f r den Zeichensatz latin1 definiert sind weil die Namen aller Sortierreihenfolgen stets mit dem Namen des Zei chensatzes beginnen f r den sie definiert sind Somit dient das Zeichen als
581. tte am Anfang stehen U4 3 4 4 4 Die Daten mit der WHERE Klausel ausw hlen Bisher haben wir zwar die Felder einschr nken k nnen die wir als Ergebnis einer SELECT Anweisung erhalten aber immer alle Datens tze einer Tabelle von der Datenbank geliefert bekommen Bei gro en Tabellen bedeutet das Die Daten mit der WHERE Klausel ausw hlen nicht nur eine Belastung der Datenleitungen sondern insbesondere viel zu gro e und un bersichtliche Mengen Daher m ssen auch die Datens tze die das Ergebnis einer SELECT Anweisung sind meistens eingeschr nkt werden Dies ist die Aufgabe der WHERE Klausel Soll beispielsweise vorbereitend f r eine Gl ckwunschkarte die Liste aller Per sonen ermittelt werden die in Celle wohnen und im Februar Geburtstag haben so k nnte dies mit einer SOL Anweisung wie in Listing 4 18 geschehen SELECT p Familienname p Vorname p PLZ p Ort p Strasse p Geburtsdatum FROM tbPerson p WHERE p Ort Celle AND p Geburtsdatum Like 02 ORDER BY p Familienname p Vorname Das Ergebnis ist in Abbildung 4 11 zu sehen Es muss auf die Tabelle tbPer son zugegriffen werden Sinnvoll ist es neben dem Namen auch den Geburtstag und die Adresse anzuzeigen die f r den Gl ckwunsch ben tigt werden Eine alphabetische Sortierung ist generell sinnvoll Zus tzlich wer den die Datens tze eingeschr nkt Es sollen nur solche Datens tze erschei nen bei denen in der Tabelle tbPerson im Feld Ort der W
582. ttsbetrag aufgefasst und auf diese Tabelle wird dann die Aggregatfunktion MAXO angewendet SELECT MAXCkb2 durchschnittsbetrag FROM SELECT AVG kb GezahlterBetrag AS durchschnittsbetrag FROM tbKursbesuche kb GROUP BY kb KID AS kb2 Damit wird das gew nschte Ergebnis 273 33 ermittelt Die Alias Zuweisung mit AS ist dabei in den meisten Datenbanken unverzichtbar um eindeutige Benennungen zu erhalten In manchen Systemen so auch in MySQL k nnen auch Unterabfragen ver wendet werden die nicht nur eine sondern mehrere Spalten liefern und direkt mit vorgegebenen Werten verglichen werden Das Prinzip entspricht dem der virtuellen oder tempor ren Tabellen die in einigen Systemen auch dauerhafter erzeugt und f r Abfragen innerhalb einer Session wiederver wendet werden k nnen Abschlie end wird noch ein Beispiel mit der neuen Funktion WIDTH_BUCKET Werte Minimum Maximum Anzahl_Klassen vorgestellt Die Funktion teilt den Wertebereich von Minimum bis Maximum in eine feste Anzahl gleich gro er Klassen also Wertebereiche ein Die Anzahl dieser Klassen wird ber den letzten Parameter Anzahl_Klassen gesteuert Dann wird f r jeden Datensatz mithilfe des Eintrags im Feld werte die Nummer der Klasse ermittelt der der Datensatz zuzuordnen ist SELECT Klasse Klasse 1 50 AS ab Klasse 50 AS bis unter COUNT C AS Anzahl Kursbesuche FROM SELECT WIDTH_BUCKET GezahlterBetrag 0 400 8 AS Klasse FROM tbKursbesuche
583. tz aller anderen Dozenten Sie ist bei der Dreher KG als Leiterin der Buchhaltung Titel t tig Die Qua lifikationen sind Windows und Buchhaltung 10 3 2 10 4 DELETE mit Unterabfragen Sie haben schon darauf gewartet Richtig auch die DELETE Anweisung l sst sich mit einer Unterabfrage kombinieren Die grunds tzliche Syntax ist bekannt DELETE FROM tabellenname WHERE bedingungsliste Hier bietet sich f r die Unterabfrage wiederum die wHERE Klausel an die dazu dient die zu l schenden Datens tze zu identifizieren Sie wollen alle Kursteilnehmer des Kurses CE23 l schen die bereits 50 oder mehr Fehltage der Kursdauer haben Wir verwenden dazu die Tabelle tbce23 die wir am Anfang dieses Kapitels mit der CREATE TABLE Anweisung Syntax bungen Beispiel 323 Karite 10 Listing 10 8 Alle Teilnehmer des Kurses CE23 mit mindestens 50 Fehlzeit Abbildung 10 5 Teilnehmer mit mindestens 50 Fehlzeit Listing 10 9 L schen aller Kursteilneh mer des Kurses CE23 mit mindestens 50 Fehlzeit 324 Unterabfragen in der DDL und DML erstellt haben Dies hat den Vorteil dass keine Daten aus den Originaltabel len gel scht werden Zun chst wollen wir die Unterabfrage mit einer einfa chen SELECT Anweisung testen Dazu gehen wir bei den Kursen von t glich 8 Stunden aus Entsprechend wird die Kursdauer in Stunden durch acht geteilt Dies ergibt die Anzahl der Kurstage Durch Multi
584. tzer IDENTIFIED BY passwort Der Status CONNECT ist f r den typischen Nutzer der Datenbank vorgesehen Grunds tzlich d rfen die entsprechenden Daten sofern die Rechte f r die entsprechenden Tabellen gegeben sind abgefragt und ge ndert werden Daten abfragen SELECT E Daten ndern INSERT UPDATE DELETE E VIEWs erzeugen Die Rolle RESOURCE ist f r Datenbankentwickler vorgesehen Sie d rfen grunds tzlich alle Operationen durchf hren die mit CONNECT erlaubt sind und zus tzlich innerhalb eines Schemas der Dom ne CREATE TABLE CREATE INDEX CREATE CONSTRAINT sowie die entsprechen den Anweisungen mit ALTER und DROP EB GRANT und REVOKE um die Rechte an den Objekten des Schemas anderen Benutzern geben oder entziehen zu k nnen Damit k nnen komplette Schemata wie unsere Kursdatenbank oder die Arti keldatenbank jeweils von einem Benutzer oder einer Gruppe verwaltet wer den Was noch fehlt ist die M glichkeit Benutzer mit der Rolle DBA zu verwalten die dann auch ein CREATE SCHEMA DROP SCHEMA CREATE USER ALTER USER und DROP USER GRANT und REVOKE sowie Datensicherungs und berwachungsoperationen und alle Befehle der RESOURCE Rolle f r alle Schemata durchf hren d rfen also die Datenbankverwaltung au erhalb eines einzel nen Schemas Die letzte Rolle ist noch ADMIN die letztlich die Befehle umfasst die ein DBA hat ohne die Kommandos f r die RESOURCE Rolle Diese Rolle ist f r rein tech
585. ufen Sie das Werkzeug MySQL Query Browser auf direkt oder ber EXTRAS in MySQL Administrator Sie finden im rechten Teil des Bildschirms die Schemata Eventuell m ssen Sie diese aktualisieren rechte Maustaste siehe Abbildung 3 24 Mit der rechten Maustaste k nnen Sie au erdem ein Schema zum aktu ellen Schema bestimmen Dieses wird dann in Fettschrift dargestellt Nur die Tabellen des aktuellen Schemas k nnen direkt verwendet werden alle ande ren Tabellen m ssen mit dem Schemanamen qualifiziert werden also kurse tbPerson statt einfach tbperson Sie sollten daher das Schema kurse als aktuelles Schema ausw hlen Die SQL Anweisung DESCRIBE tbPerson k nnen Sie jetzt direkt im oberen Fenster eingeben und ausf hren AUSF H REN Sie sollten dann den Inhalt aus Abbildung 3 25 erhalten Dies ist eine komplette Beschreibung der Tabellenstruktur Sie sehen in jeder Zeile die Beschreibung eines Datenfeldes mit Namen Datentyp der Angabe ob das Feld leer bleiben darf NULL ob es Prim rschl ssel ist und ob ein Standard wert vorhanden ist Die Details werden wir in Kapitel 8 betrachten Abbildung 3 23 Tabelle toPerson im Kommandozeilenmodus Ergebniskontrolle Il 61 5 Kapitel 3 Abbildung 3 24 Das Fenster Schemata in MySQL Query Browser mit 62 dem Schema kurse Abbildung 3 25 Struktur der Tabelle tbPerson Die Beispieldatenbanken Schemata A gt 3 information_schema v E kurse bT tbdozent
586. umerisch 123 Als Dezimaltrennzeichen ist der im Engli a schen bliche Punkt zu verwenden Be 12 F hrende Vorzeichen sind erlaubt 123 12E 2 Die wissenschaftliche Schreibweise ist 123 12E 2 erlaubt E 2 steht f r 10 Datum DATE 2007 08 11 Bei Datums und Uhrzeitliteralen muss Uhrzeit TIME 13 15 04 gegebenenfalls die Schreibweise gepr ft ee werden Hier k nnen sowohl Datenbank 1 0 einstellungen als auch Betriebssystemwerte ein anderes Format erfordern Alphanumerische Literale Grunds tzlich werden Literale in einfache Anf hrungszeichen eingeschlos sen auf der deutschen Tastatur auf der Taste nicht zu verwechseln mit den Accents Soll in einem Literal selbst ein solches Anf hrungszeichen ver wendet werden wird es durch ein vorangestelltes ebenfalls einfaches Anf h rungszeichen maskiert Escape Zeichen MySQL verwendet in Literalen sogenannte Escape Zeichen um Sonderzei chen einf gen zu k nnen Dieses Vorgehen und auch die Zeichen entspre chen den aus der Linux Welt bekannten Zeichen In sind einige der wichtigs ten Zeichen aufgelistet Zeichen Erl uterung NY Einfaches Anf hrungszeichen N Doppelte Anf hrungszeichen IN Backslash n Neue Zeile t Tabulatorzeichen Numerische Literale Sollen numerische Literale oder einfacher ausgedr ckt Zahlen verwendet werden treten im Allgemeinen keine gr eren Schwierigkeiten auf Zahlen ohne Dezimaltrennzeichen werden als
587. umfang MySQL Oracle Datentypen Ausdr cke und Funktionen das Ergebnis aber immer eine Zahl also eine numerische Angabe ist F r jede Funktion sind die ben tigten Eingabewerte Parameter und deren Datentypen festgelegt und die Logik der SOL Anweisung muss sicherstellen dass genau diese Datentypen auch f r die Funktion bereitgestellt werden F r die eigene Erstellung von SQL Anweisungen insbesondere SELECT Anweisungen ist diese Einteilung aber oft auch l stig da man zumeist von bestimmten Datenfeldern ausgeht deren Datentyp man kennt Man wei dass man beispielsweise zwei alphanumerische Felder verbinden und deren gemeinsame L nge bestimmen will Da ist es eher ungew hnlich bei den numerischen Funktionen zu suchen weil am Ende eine Zahl erzeugt wird Daher sind die Funktionen hier nach ihrem prim ren Anwendungsbereich also nach ihrer Nutzung im Zusammenhang mit numerischen alphanume rischen beziehungsweise datumsorientierten Ausdr cken sortiert Bevor wir jetzt auf die Funktionen eingehen muss noch eine kleine Anmer kung erfolgen Der Standard gab urspr nglich sehr wenig hinsichtlich der Funktionen vor und ist der Entwicklung der Datenbanksysteme immer hin terhergelaufen Daher gibt es zwar eine hnliche Funktionalit t und auch eine recht gro e gemeinsame Menge an Funktionen bei den verschiedenen Systemen aber auch eine F lle von Funktionen die nur in bestimmten Sys temen existieren und hier nicht alle vo
588. umgesetzt wird MS Access fragt ab wie die neue Tabelle hei Ben soll die die Abfrage erstellt Dabei kann noch entschieden werden ob nur die Tabellenstruktur erstellt wird entspricht CREATE TABLE oder ob auch die Daten mit bernommen werden sollen INSERT Im Kern ermittelt MS Access aus den Angaben der ausgew hlten Felder deren Eigenschaften wie Datentyp NOT NULL und weitere Angaben und erzeugt gleichnamige Felder mit identischen Eigenschaften in der neuen Tabelle Da alle Informationen vorhanden sind kann dies vollautomatisch geschehen Die entsprechende CREATE TABLE Anweisung wird nicht sichtbar Durch Angabe eines Ausdrucks k nnen die neuen Felder auch umbenannt werden also etwa Neuer _Name Alter_Name in der Zeile FELD Zus tzlich k nnen die Daten aus der Abfrage auch sofort in die neue Tabelle bernommen werden MS Access generiert daraus SELECT feldname feldname INTO neue _tabelle FROM alte_tabelle WHERE aan Der Vorteil dieses Vorgehens ist dass gleichartige Felder nicht erneut beschrieben werden m ssen Andererseits besteht hier immer die Gefahr redundante Felder zu erzeugen Felder mit wirklich neuem Inhalt m ssen zumeist doch manuell angelegt werden Wirkliche Tabellenerstellungsabfragen lassen sich leider nur ber die Pro grammiierschnittstelle der Jet Engine realisieren bungen zur einfachen CREATE TABLE Anweisung 1 Erstellen Sie die Tabelle warengruppe gem der Definition aus Kapitel 7 im
589. un chst darin Informationen aus relationalen Datenbanken zu gewinnen SQL bietet hierf r die SELECT Anweisung Daher ist die SELECT Anweisung die in der Praxis meistverwendete und wichtigste Anweisung berhaupt Jede SELECT Anweisung liefert eine Menge von Datens tzen Tupeln dersel ben Art also mit festgelegten Datenfeldern Spalten aus einer oder mehreren Tabellen Um die richtigen Felder und die richtigen Datens tze aus den ent sprechenden Tabellen zu ermitteln muss die SELECT Anweisung entsprechend formuliert werden Dabei zeigt sich dass die SELECT Anweisung zugleich die einfachste und komplizierteste Anweisung ist Einfach ist sie da sie nur aus wenigen klar strukturierten Bausteinen besteht Schwierig ist sie weil diese Bausteine in vielerlei Art kombiniert werden k nnen Schwierig ist sie auch aufgrund der Performance berlegungen die sie in komplexen Datenbanken mit einer gro en Anzahl von Tabellen und Datens tzen erfordert 4 1 SELECT die Syntax Wir wollen die einzelnen Bausteine schrittweise erarbeiten Damit Sie aber bereits wissen wohin unsere Reise f hrt beginnen wir mit der weitgehend vollst ndigen Syntax der SELECT Anweisung Sie lautet SELECT Syntax SELECT DISTINCTJALL ausdrucksliste FROM tabelle joinliste WHERE bedingungsliste GROUP BY ausdrucksliste HAVING bedingungsliste ORDER BY ausdrucksliste ASC DESC 89 WM karitea 90 bersicht Mit SQL Daten abfragen SELECT
590. unde neben dem urspr nglichen Prim rschl sselfeld kdnr Kundennummer eine mr Mandantennummer aufgenommen Damit kann von verschiedenen Unternehmen dieselbe Kundennummer vergeben werden Die Kundenst mme k nnen mithilfe der unterschiedlichen Mandan tennummer unterschieden werden Es existieren bei zwei Mandanten sozu sagen zwei parallele Datenbest nde f r jeden Mandanten ein eigener Bestand Dies erfordert dann aber nat rlich auch dass andere Tabellen die sich auf diese Tabelle beziehen zwei Fremdschl sselfelder verwenden eines f r die kdnr eines f r die mnr Der Bezug zu dieser Tabelle mithilfe eines sol chen Fremdschl ssels erfordert dann einen JOIN mit mehreren Feldern siehe Abbildung 4 34 Prim rschl sselattribute tbkunde Tabelle mr kor firma anede name 1 1 Frau Sibum 1 2 Ewald Kuhn KG Herr Sch ller sus tbbestellung Tabelle bnr bestelldatum 4711 15 10 2007 4856 16 11 2007 Fremdschl sselattribute Beispiel Abbildung 4 34 Mandantenf hige Verbindung der Kunden und Bestellungen 133 WM karitea Listing 4 41 JOIN ber zwei Feldpaare Beispiel Listing 4 42 Liste der besuchten Kurse 134 Mit SQL Daten abfragen SELECT Ein JOIN muss dann alle betroffenen Felder hier die kdnr und die mnr ber cksichtigen SELECT k mnr k kdnr k firma k anrede k name b bnr b bestelldatum FROM tbkunde k INNER JOIN tbBestellung b O
591. ung 3 26 entnehmen Achten Sie dabei auf den Zeilenumbruch Jeder Datensatz und auch alle Erl uterungszeilen sind aus Platzgr nden in zwei Zeilen umgebrochen Ver gleichen Sie die ersten drei Zeilen mit den INSERT INTO Anweisungen die wir in Listing 3 2 als Ausschnitt der Datei Kurse txt gesehen haben Sie sehen jetzt das unmittelbare Ergebnis dieser SOL Anweisungen in der Tabelle tbKurs Listing 3 2 Einf gen von Daten in die Tabelle tbKurs Ergebniskontrolle Ill 63 W kaites Abbildung 3 26 Inhalt der Tabelle tbKurs in mysql exe Abbildung 3 27 Inhalt der Tabelle toKurs in MySQL Query Browser 64 Datenimport Die Beispieldatenbanken GCelle1 Word 2807 84 23 i 280 Celle28 Word i 280 Celle23 Access i 358 2007 87 09 2007 88 86 2007 88 10 2007 88 13 2007 88 17 Gelle24 Access i 488 Hannover89 Acc i 350 Hannover Hindo i 128 Hannover i Windo 2007 07 09 2807 87 13 2887 87 16 2887 07 18 2887 07 23 2887 07 25 Ea Em zz u SAPER FEN EEE in set 8 36 sec F K Kurskennung KTHID KursdauerStunden Kursbeginn Kursende Zertifikat Gebuehr Ustpflichtig DID CE17 Celle17 Word 4 40 2007 04 23 2007 04 27 eigen 280 J 833 CE20 Celle20 word 4 40 2007 07 09 2007 07 13 eigen 280 J 812 CE23 Celle23 Access 5 36 2007 08 06 2007 08 10 eigen 350 N 812 CE24 Cele24 Access 7 40 2007 08 13 2007 08 17 eigen 400 N 812 H89 Hannover89 Access 5 32 2007 07 09 2007 07 13 eigen 350 N 812 H90 Hannoverg0 windows 1 1
592. ung 4 18 Ergebnis der SELECT Anweisung Listing 4 23 JOIN ohne Ausgabe der Schl sselfelder Abbildung 4 19 Ergebnis der SELECT Anweisung Abbildung 4 20 Zusammenf hrung zweier 114 Datens tze ber Fremdschl ssel und Prim rschl ssel Mit SQL Daten abfragen SELECT Das Ergebnis ist dann in Abbildung 4 18 zu sehen Sie sehen dass in jedem Datensatz des Ergebnisses Werte aus zwei tats chlichen Datens tzen der beiden Tabellen kombiniert worden sind Diese Datens tze haben identische Werte in den Feldern KTID beziehungsweise PID hier also jeweils 5 oder 37 KID GezahlterBetrag KTID PID Familienname Vorname PLZ Ort Strasse CE23 50 00 5 5 Kl tzer Karl 29221 Celle Bahnhofstra e 2 CE23 50 00 37 37 Magerkurth Melissa 29336 Nienhagen Am T mpel 3 Der JOIN kann auch erfolgen ohne dass das Fremdschl sselfeld und oder das Prim rschl sselfeld selbst Bestandteil der Ergebnismenge ist Obiges Beispiel h tte man also auch vereinfachen k nnen wie in der folgenden SELECT Anweisung dargestellt SELECT k KID k GezahlterBetrag p Familienname p Vorname p PLZ p Ort p Strasse FROM tbPerson p INNER JOIN tbKursbesuche k ON p PID k KTID WHERE k KID CE23 AND k GezahlterBetrag lt 250 ORDER BY p Familienname ASC p Vorname ASC Das Ergebnis ist dann in Abbildung 4 19 zu sehen L___K D GezahlterBetrag Familienname Vorname PLZ Ort Strasse CE23 50 00 Kl
593. ung besteht Dieses Feld kann dann als Prim rschl ssel genutzt und ein entsprechendes Feld als Fremdschl ssel in andere Tabellen aufgenommen werden Es ist per formant und einfach Integrit tsbedingung ae 8 m Eine solche L sung sollte aber nach M glichkeit vor dem Anwender der Datenbank verborgen werden da er mit diesem rein technischen Schl ssel nichts anfangen kann K nnen Sie ber die Anwendung sicherstellen dass dies m glich ist sollten Sie statt des logischen Schl ssels mit mehreren Fel dern ein neues Feld als technischen Prim rschl ssel verwenden Die urspr nglichen Schl sselfelder bleiben nat rlich erhalten und k nnen als Alternativschl ssel dienen Ist dies nicht m glich sollte im Interesse des Anwenders doch die urspr ngli che L sung mit mehreren Schl sselfeldern bevorzugt werden Es k nnen also Situationen auftreten in denen Schl ssel und Fremdschl s sel mit mehreren Feldern sinnvoll sind Dem wird Rechnung getragen indem in unserem Beispiel f r die Bestellungen mit mehreren Prim rschl s selfeldern gearbeitet wird SQL unterst tzt dieses Konzept im Rahmen der Integrit tsbedingung f r Fremdschl ssel indem Feldlisten f r Prim rschl s selfelder und Fremdschl sselfelder zugelassen sind Integrit tsbedingung FOREIGN KEY CONSTRAINT name FOREIGN KEY feldname feldname REFERENCES tabellenname feldname feldname ON UPDATE NO ACTION CASCADEISET DEFAULT SET NULLY
594. ung das Passwort nochmals ein eL E Wiedeiherstelung Zusatzinformationen J Katal 3 2 ataloge Voller Name Der vollst ndige Name des Benutzers Beschreibung t Benutzerkonten ee Zus tzliche Beschreibung des Benutzers Email Die Email Adresse des Benutzers am ion i informati i Kontaktinformation Wahlweise Kontaktinformation 8 Von Festplatte lade Dem Benutzer zugeordnetes Icon Bild l schen Neuen Nutzer anlege l Sie k nnen die Einrichtung des neuen Benutzers leicht pr fen indem Sie die verf gbaren Benutzer User Accounts zun chst im Fenster unten links aktualisieren REFRESH Benutzerkonten meier 8 root Der neue Benutzer hat damit aber noch keine Rechte irgendetwas innerhalb der Datenbank zu tun au er sich anzumelden Wenn Sie den Benutzer aus w hlen sehen Sie bei den Berechtigungen zun chst noch keine Eintr ge Abbildung 12 4 Sie k nnen jetzt f r jedes Schema beispielsweise unsere Artikel Datenbank die verf gbaren Rechte anzeigen Hier finden Sie viele bereits bekannte SQL Anweisungen wieder deren Verwendung f r das Schema Artikel Sie jetzt dem neuen Benutzer meier erlauben k nnen Benutzerkonzepte verschiedener Datenbanken 3 u 112 Abbildung 12 4 Rechteverwaltung eines Benutzers privileges MySQL Administrator Connection Datei Bearbeiten View Extras Fenster MySQL Enterprise Hilfe r infi 11 m E Servetintomalon Benutzer
595. ung nicht mehr auf die einzelnen Felder ein zelner Datens tze zur ckf hren kann Um das Konzept der Benutzersicht umsetzen zu k nnen und maximalen Komfort f r Abfragen sicherzustellen werden neben den normalen VIEwWs daher normalerweise eigene VIEws f r das Update erstellt Eine Besonderheit die aber die Kontrolle ber die durch einen Benutzer ge nderten Daten noch CHECK OPTION 295 W kaites 296 bungen Datenbanken erstellen SQL DDL einmal verbessert ist die Pr foption CHECK OPTION Ein VIEW mit CHECK OPTION erlaubt nur die Bearbeitung von Datens tzen die die Bedingungen der WHERE Klausel erf llen Betrachten wir dazu noch einmal den zuvor definierten VIEW zur Fokussie rung auf die Kunden aus Braunschweig und erg nzen ihn mit der Pr fop tion CREATE VIEW braunschweig AS SELECT FROM tbPerson WHERE Ort Braunschweig WITH CHECK OPTION Damit d rfen nur noch Kunden eingef gt oder ge ndert werden die aus Braunschweig stammen Ein Versuch mit INSERT INTO braunschweig PID Familienname Vorname PLZ Ort Geburtsdatum VALUES 99 M ller Max 30529 Hannover 1980 02 01 also der Versuch einen Kunden einzuf gen der nicht aus Braunschweig ist w rde von der Datenbank abgewiesen Damit ist sichergestellt dass ein Benutzer nur die ihm gem seiner Datensicht zugeordneten Datens tze ndern kann Weitere Anwendungen dieser Technik sind viele denkbar indem beispiels weise nur Kund
596. ungen enden jeweils auf H he eines bestimmten Datenfeldes beispielsweise ist das Datenfeld PID in der Tabelle tbPerson mit dem Datenfeld KTID in der Tabelle tbKursbesuche verbunden Derartige Felder bilden den Prim rschl ssel der einen Tabelle und den Fremdschl ssel der anderen Tabelle Sie k nnen eine solche Beziehung im Prinzip auf zwei Arten anlegen Ent weder Sie greifen mit der linken Maustaste eines der beiden Felder und zie hen es mit gedr ckter Maustaste auf das andere Feld Sie sehen an der Ver nderung des Cursors wann eine Verbindung zustande kommen kann Hier lassen Sie das Feld einfach los Haben Sie sich vertan markieren Sie die Ver bindungslinie und l schen die Verbindung mit der Taste Entf Beziehungen 67 S Kapitel 3 Abbildung 3 28 Aufbau einer Beziehung zwischen tbPerson und tbKursbesuche in MS Access Abbildung 3 29 Datenbankfenster nach dem Import 68 Die Beispieldatenbanken Die zweite M glichkeit ist die Funktion BEZIEHUNGEN BEZIEHUNGEN BEARBEI TEN Hier erhalten Sie ein Fenster wie in Abbildung 3 28 dargestellt Sie m s sen die an der Beziehung beteiligten Tabellen sowie das Prim rschl ssel und das Fremdschl sselfeld ausw hlen Beachten Sie dass die Auswahl nicht symmetrisch ist Sie m ssen links als Tabelle die Tabelle mit dem Pri m rschl sselfeld angeben Rechts wird als Detailtabelle die Tabelle mit dem Fremdschl sselfeld ausgew hlt Beziehungen bearbeiten T
597. unschweig Celle GROUP BY p Ort ORDER BY COUNT DESC Sie sehen im Ergebnis in Abbildung 4 44 dass zun chst alle Datens tze bis auf die Eintr ge mit den drei gew nschten St dten herausgefiltert wurden Dann sind die Datens tze gruppiert und entsprechend der H ufigkeit abstei gend sortiert worden Ort Personen in der Datenbank Celle 6 Hannover 5 Braunschweig 3 Die GROUP BY Klausel Diejenigen die schon eine Weile gerade auch mit klassischen Programmier sprachen wie COBOL oder PL I programmiert haben oder die schon mit Report generatoren gearbeitet haben werden hier stark an den sogenannten Grup penwechsel erinnert worden sein bei dem die Datens tze ebenfalls nach Gruppen sortiert und dann innerhalb der Gruppen einzeln verarbeitet werden Tats chlich bereitet SQL die Daten mithilfe der GROUP BY Klausel ganz analog vor Allerdings werden die einzelnen S tze hier bereits zu einem kompletten Gruppendatensatz zusammengefasst In einem weiterverarbeitenden Pro gramm k nnen die einzelnen Datens tze daher nicht mehr bearbeitet werden Zusammenfassung Mit der GROUP BY Klausel k nnen Sie eine mehrstufige Gruppierung der Daten einer SELECT Anweisung vornehmen Die Gruppierung erfolgt nach der Filterung mit der wHERE Klausel Die Gruppierung kann alle Felder der Tabellen aus der FROM Klausel umfassen Die Gruppierungsfelder werden von links nach rechts genutzt um die Ergebnisse in Gruppen und Teilgruppen
598. urfsansicht erstellen lz 3 j Tabelle unter Verwendung des Assistenten erstellen Tabellen R Ansicht erstellen Abfragen Formare _ g tbkurs tbKursbesuche Berichte tbKursthema tbPerson Die Beziehungen zwischen den Tabellen k nnen Sie ber EXTRAS BEZIEHUN GEN sichtbar machen Sie finden eine hnliche Darstellung wie in Abbildung 3 1 Durch einen Doppelklick auf eine Beziehung k nnen Sie die beteiligten Felder sowie die beim ndern oder L schen von Daten durchzuf hrenden Aktionen sehen Die Bedeutung der Beziehungen sehen wir uns in Kapitel 8 an Sie k nnen dieses Fenster wieder mit DATEI SCHLIESSEN beenden Noch eine Anmerkung f r die Nutzer von OpenOffice openBase kann auch als Oberfl che f r andere Datenbankmanagementsysteme verwendet wer den So finden Sie in der Liste m glicher Datenbanken in Abbildung 3 54 auch bekannte Systeme wie MS Access MySQL und Oracle Auch die Stan dardverbindungen ODBC JDBC und ADO stehen zur Verf gung Die Nut zung dieser Verbindungen kann openBase zu einer attraktiven Oberfl che und zu einer Alternative zu den hier vorgestellten Oberfl chen f r die ande Abbildung 3 53 bersicht Tabellen in openBase Beziehungen 85 W kaites 86 Abbildung 3 54 Verbindung aus OpenOffice zu anderen Datenbanksystemen Die Beispieldatenbanken ren Datenbanken machen Wegen des teilweise untypischen Verhaltens der Oberfl che und Irritationen bei dem zu verw
599. ustauschen Eine Folge von SQL Anweisun gen kann aber komplexe Datenbank nderungen realisieren die dann weite ren Anweisungen zur Verf gung stehen Alle SQL Anweisungen beginnen mit einem englischen Verb zumeist gefolgt von dem Objekt auf das sich die Anweisung bezieht und n heren Spezifikationen Die Tabelle 2 1 zeigt die Logik am Beispiel der SOL DML also des Teils von SQL der der Abfrage und nderung der Daten in der Datenbank dient Befehl Bedeutung SELECT FROM tbPerson W hle alle Datens tze aus der Personen tabelle also lies alle Personeninformationen UPDATE tbPerson SET Aktualisiere die Informationen in der Perso nentabelle also die Informationen ber eine oder mehrere Personen DELETE FROM tbPerson L sche einen oder mehrere Datens tze in der Personentabelle l sche also bestimmte Per sonen aus dem Bestand INSERT INTO tbPerson Einf gen eines neuen Personendatensatzes also die Aufnahme einer neuen Person in den Bestand Die Grundstruktur ist also einfach Die SQL Anweisung SELECT FROM tbPerson bewirkt ganz einfach dass alle Informationen ber Personen angezeigt wer den Das m gliche Ergebnis ist in Abbildung 2 3 wiedergegeben Die Felder h ngen nat rlich von der Struktur der Tabelle ab Typisch ist dabei die Dar stellung in Tabellenform Die Zeilen entsprechen jeweils einem einzelnen Datensatz in diesem Fall allen verf gbaren Informationen ber ein
600. ve Beziehung Abbildung 7 5 Bauteile bestehen aus einer Anzahl anderer Bauteile 231 W karitez 232 Beispiel B roFix Beispiel Artikel Datenbanken modellieren 7 3 Beispiel B roFix Die Entwicklung eines Entity Relationship Modells soll an einem konkreten Beispiel nachvollzogen werden Dazu wird das folgende Beispiel verwendet Das Unternehmen B roFix handelt mit einem breiten Sortiment f r den B robedarf Es m chte eine Datenbank aufbauen die ihm Auskunft ber Einkauf und Verkauf verschiedener Artikel seines Sortiments gibt B roFix besteht aus zwei Firmen der B roFix KG und der B ro Versand GmbH Die B roFix KG betreibt mehrere Ladengesch fte w hrend die B ro Versand GmbH ihre Kunden im Versandhandel beliefert Zus tzlich hat sie in der Nachbarstadt noch die Paul und Weiss B robedarf GmbH bernommen die dort mehrere Gesch fte betreibt B roFix m chte eine gemeinsame Daten bank f r die drei Firmen betreiben Alle Kunden einschlie lich der Versand kunden bilden einen gemeinsamen Kundenstamm Die Waren sind verschie denen Warengruppen zugeordnet Jeder Artikel hat einen von mehreren vordefinierten Mehrwertsteuers tzen Die Kunden erteilen Bestellungen die aus mehreren Bestellpositionen bestehen k nnen Jede Bestellposition betrifft einen Artikel Es sollen Kundenlisten erstellt werden mit deren Hilfe Kunden gezielt Angebote im Rahmen von Aktionen gemacht werden k n nen Au erdem will man eine ganze
601. ver 5 0 Setup Wizard m glichkeiten f r MySQL Setup Type Choose the setup type that best suits your needs Please select a setup type O Typical 4 Common program features will be installed Recommended for Le general use O Complete All program features will be installed Requires the most disk Choose which program features you want installed and where they E will be installed Recommended for advanced users 42 MySQL Die Unterschiede zwischen den drei Varianten sehen Sie am besten wenn Sie die individuelle Installation Custom w hlen und die komplette bersicht ber die verf gbaren Komponenten betrachten siehe Abbildung 3 3 Wesentliche Unterschiede liegen insbesondere in der Installation von Ent wicklungswerkzeugen mit deren Hilfe man Anwendungen f r MySQL schreiben kann ii MySQL Server 5 0 Setup Wizard Custom Setup Select the program Features you want installed Click on an icon in the list below to change how a Feature is installed Feature Description Installs several helpful scripts and a couple of example files MySQL Server Client Programs MySQL Instance Manager Documentation Developer Components E3 C Include Files Lib Files This feature requires 400KB on v AEE E your hard drive nstall to C Programme MySQL MySQL Server 5 01 MySQL wird standardm ig mit einer C Bibliothek ausgeliefert den C In clude Files Lib Files mit denen
602. vorkommenden verschiede nen Kursdauern ohne weitere Felder U4 2 4 99 WM karitea ORDER BY Beispiel Listing 4 11 Alphabetische Sortierung nach dem Familiennamen Listing 4 12 Alphabetische Sortierung 100 nach Familienname und Vorname Mit SQL Daten abfragen SELECT 4 3 Daten sortieren mit der ORDER BY Klausel Wie der Ausdruck ORDER BY nahelegt geht es um die Sortierung der Ergeb nismenge Relationale Datenbanken arbeiten mit Mengen Mengen sind aber per Definition unsortiert Das bedeutet dass die Reihenfolge der Datens tze zuf llig ist und allein im technischen Ermessen des Datenbankmanagement systems liegt Nat rlich wird man bei einem SELECT beobachten dass die Daten oft in der Reihenfolge ihrer Eingabe erscheinen aber erstens kennt der eine oder andere Anwender diese Reihenfolge nicht unbedingt und zweitens gibt es daf r keinerlei Garantie Sp testens wenn mehrere Tabellen an einem SELECT beteiligt sind wird die Lage un bersichtlich In vielen F llen m chten Sie sicher sein dass die Daten in einer bestimmten Reihenfolge sortiert dargestellt werden Daher bietet die SELECT Anweisung mit der ORDER BY Klausel die M glichkeit die Datens tze nach eigenen Kri terien zu sortieren Dies betrifft nat rlich immer nur die Ergebnismenge des SELECT niemals die tats chliche Speicherung der Daten in den Tabellen Sollen beispielsweise unsere Personen alphabetisch sortiert werden so ist dazu zun ch
603. weil der Name Weiss nicht eindeutig ist k nnte man doch den Vornamen dazunehmen Aber was ist wenn das auch nicht ausreichend ist Gut auch das Problem sehen Sie in Abbildung 2 7 Wenn Sie die Datens tze mit den PID 1 und 6 betrachten w rde die Kombination der Datenfelder Name und Vorname gerade noch reichen um jeden Datensatz eindeutig zu identifizieren Sp testens beim Datensatz mit der PID 7 reicht das aber auch nicht mehr aus Jetzt m sste man ein weiteres Feld beispielsweise die Strasse dazunehmen Aber reicht das wirklich in allen F llen aus Wer wei wer da n chsten Monat noch einzieht Dieses Verfahren ist sehr unsi cher Aber nicht nur das es ist auch umst ndlich und verkompliziert sp ter die Realisierung der Beziehungen zwischen den Tabellen Es ist daher nahe liegend einen k nstlichen Prim rschl ssel in diesem Fall die PID zu verge ben der beim Aufbau der Datenbank mit Sicherheit eindeutig ist 2 5 3 Beziehungen Das grundlegende Strukturierungsmerkmal einer relationalen Datenbank sind also Tabellen f r Personen Dozenten Kunden Artikel Bestellungen und andere Nun w re es sehr unbefriedigend wenn man zwar feststellen k nnte welche Kunden man hat aber nicht welcher Kunde welche Bestel lung get tigt hat oder welcher Lieferant welche Artikel liefert oder welcher Dozent in welcher Stra e wohnt Daher d rfen die Tabellen nicht isoliert betrachtet werden sondern m ssen mitein
604. weils immer nur eine Datenbank gleichzeitig bearbeitet werden kann 253 W kaites 254 Datenbanken erstellen SQL DDL Eine Datenbank mit genau einem Datenbankschema besteht in MS Access physikalisch aus einer Datei mit der Endung mdb Daher ffnet MS Access jetzt ein Fenster in dem Sie angeben m ssen wo diese Datei gespeichert werden soll und wie sie hei en soll MS Access schl gt dabei direkt die Endung mdb vor W hlen Sie als Name auftrag und speichern Sie die neue Datenbank in einem geeigneten Verzeichnis Nach dem Best tigen mit ERSTELLEN haben Sie eine neue leere Datenbank erzeugt Sie enth lt noch keinerlei Tabellen oder andere Informationen 8 1 3 Oracle In Oracle wird mit der Erzeugung eines Users auch ein leeres Schema erzeugt Die entsprechende Anweisung lautet CREATE USER artikel IDENTIFIED BY pwartikel Dabei sollten Sie mit dem User SYS oder einem anderen User mit Adminis trationsrechten angemeldet sein Der User und das zugeh rige Schema hei Ben nach der Ausf hrung der Anweisung artikel und das zugeh rige Pass wort wird hier auf pwartikel gesetzt Sie m ssen dem User jetzt noch das Recht einr umen in dem Schema neue Tabellen und andere Objekte anzulegen Am einfachsten erreichen Sie dies mit GRANT ALL PRIVILEGES TO artikel Beachten Sie bitte dass die Beispiele hier f r eine lokale Nutzung gedacht sind In einem gr eren Oracle System werden Sie diesen Befehl nicht abset zen d
605. werden Sollen die gemeinsamen Kunden unseres B roartikelversands und des Kurs Beispiel anbieters ermittelt werden so kann dies in Oracle mit der folgenden SQL Anweisung geschehen SELECT p Familienname p Vorname p geburtsdatum Listing 11 5 FROM kurse tbPerson p Gemeinsame Kunden INTERSECT in beiden Schemata SELECT k nachname k Vorname k geburtsdatum FROM artikel kunden k ORDER BY 1 Unsere Tests mit den beiden UNION Anweisungen haben bereits gezeigt dass nur Petra Winter in beiden Datenbest nden enthalten ist Daher ist es nicht berraschend wenn wir jetzt das Ergebnis in Abbildung 11 6 erhalten Abbildung 11 6 Familienname Vorname geburtsdatum Schnittmenge der Winter Petra 1939 12 30 beiden Kundentabellen Die Syntax der INTERSECT Anweisung ist derjenigen der UNION Anweisung sehr hnlich Das Schl sselwort INTERSECT wird zwischen zwei SELECT Anweisungen gesetzt Dieses Konstrukt kann beliebig oft wiederholt werden SELECT INTERSECT ALL SELECT INTERSECT ALL SELECT ORDER BY Spaltennummer Spaltennummer Y Das Schl sselwort INTERSECT wird nicht von allen Datenbanksystemen unterst tzt Oracle und das hier nicht besprochene DB2 kennen aber INTER SECT Werden INTERSECT und UNION Anweisungen kombiniert werden zun chst die INTERSECT Anweisungen ausgef hrt 333 apite 11 Mengenoperationen UNION INTERSECT EXCEPT MINUS Beispiel Listing 11 6 Personen aus der
606. wie alle anderen Aktionen auf dieser Tabelle durchf hren Die Artikel d rfen von allen Vertriebsmitarbeitern gelesen werden Die Mit arbeiter mueller und neumayer verwalten artikel und d rfen damit alle Ope rationen durchf hren Ihr gemeinsamer Chef ahrens soll alles d rfen was seine Mitarbeiter d rfen Nachdem alles eingerichtet ist findet ein Mitarbei terwechsel statt Jetzt soll stolze keinen Zugriff mehr auf diesen Teil der Datenbank haben und durch altmann ersetzt werden Um die Mitarbeiter und die Rollen anzulegen sollten Sie ber die entspre chenden Rechte verf gen Daher sollen Sie sicherheitshalber zun chst den Benutzer SYSTEM verwenden CREATE USER meier IDENTIFIED BY pwmeier Listing 12 4 CREATE USER stolze IDENTIFIED BY pwstolze Bolspiel fur Rollen nd Benutzerverwaltung CREATE USER wegmann IDENTIFIED BY pwwegmann mit Oracle CREATE USER mueller IDENTIFIED BY pwmueller CREATE USER neumayer IDENTIFIED BY pwneumayer CREATE USER ahrens IDENTIFIED BY pwahrens CREATE ROLE vertrieb CREATE ROLE vertriebsleiter CREATE ROLE artikelverwaltung CREATE ROLE chef Jetzt m ssen Sie Zugriff auf die Datenbankobjekte also die Tabellen haben Daf r bietet sich der Benutzer artikel an 349 karite 12 350 Listing 12 5 Beispiel f r Rechte verwaltung mit Oracle ALTER USER GSEC Benutzer Rechte und Zugriffsschutz GRANT SELECT INSERT UPDATE ON kunden TO vertrieb GRANT ALL ON bestellung bes
607. ws XP Hardware AMD Turiontm 64 Mobile Technology ML 32 1 0 GB RAM Abbildung 3 21 Fenster MySQL Enterprise F yQ H Men punkt Extras MySQL Query Browser MySQL Befehlszeilen Client MySQL Infobereich Monitor windows Befehlszeile Verbindungen verwalten Aktuelle Verbindung speichern Einstellungen Damit ist die Installation der Arbeitsumgebung f r MySQL abgeschlossen Nach der Installation k nnen Sie die Oberfl che direkt als Windows Pro gramm starten Es gibt im Wesentlichen vier Programme unter START ALLE PROGRAMME MYSQL E MySQL Administrator MySQL Migration Toolkit MySQL Query Browser BE MySQL System Tray Monitor Der Monitor dient der berwachung des Systems Mit ihm kann MySQL auch gestartet werden Sollten Sie beim Aufruf des Administrators oder des Query Browsers eine Fehlermeldung erhalten so starten Sie mit dem Monitor mit START INSTANCE eine neue Instanz Sie finden den Monitor unten in der Task leiste Sie ffnen ihn mit der rechten Maustaste die linke startet und beendet den Server ebenfalls 57 WM kaites 58 Abbildung 3 22 Oberfl che MySQL Query Browser Q Ausf hren v Die Beispieldatenbanken Der Administrator dient der Administration des Systems also der Verwal tung von Benutzern und Speicherplatz der Datensicherung und Wiederher stellung von Daten Wir wollen darauf in Kapitel 12 zur ckkommen Der MySQL Query Browser dient der Ausf hrung der SQL Kommando
608. x hnlich sieht es mit den anderen Entit ten aus So zeigt Abbildung 7 7 die Modellierung der Entit t Artikel Die Begrifflichkeiten sind wiederum der Anwendungssituation entnommen Der Listenpreis ist als Nettopreis zu ver stehen In der Realit t ist dann die Mehrwertsteuer zu addieren Einstandspreis Mindestbestand Lieferantennr Die H he des Mehrwertsteuersatzes richtet sich nach der Art des Artikels So sind die meisten Lebensmittel mit dem halben Mehrwertsteuersatz belastet w hrend die B roartikel mit dem vollen Satz zu versteuern sind Es sind aber nicht nur unterschiedliche Mehrwertsteuers tze zu ber cksichtigen der Mehrwertsteuersatz ndert sich auch unter Umst nden durch politische Ent scheidungen im Zeitverlauf Derartigen Situationen kann dadurch Rechnung getragen werden dass der aktuelle Wert hier der tats chliche Mehrwert steuersatz nicht direkt bei dem Artikel gespeichert wird Stattdessen wird eine eigene Entit t f r die Mehrwertsteuer dargestellt in der die Art des Mehrwertsteuersatzes voll erm igt kein und die tats chliche H he des Prozentsatzes gespeichert wird siehe Abbildung 7 8 ndert sich der Pro zentsatz wird er hier ge ndert Anschlie end m ssen die Entit ten nat rlich noch miteinander verbunden werden Mehrwertsteuer Sind die Entit ten festgelegt m ssen die Beziehungen zwischen den Entit ten ermittelt und beschrieben werden Abbildung 7 7 En
609. z gt SELECT AVGCt2 Stundensatz FROM tbDozent t2 Konkret wird also f r alle Datens tze gepr ft ob t Stundensatz gt AVG t2 Stundensatz gilt Sie sehen die Bedeutung der Alias in diesem Fall Die Tabelle tbDozent wird zweifach verwendet Das Alias t bezeichnet die Tabelle in der Hauptab frage Hier verbergen sich alle einzelnen Datens tze der Tabelle tbDozent hinter dem Alias w hrend mit t2 die ebenfalls auf tbDozent beruhende aber gruppierte und mithilfe der Aggregatfunktion AVG zu einem Datensatz mit dem Durchschnittswert verdichtete virtuelle Tabelle der Unterabfrage ange sprochen wird Es werden also nacheinander alle Stundens tze der Dozenten mit dem durchschnittlichen Stundensatz 14 8 verglichen Dann werden als Ergebnis der wHERE Klausel nur diejenigen Datens tze angezeigt deren Stundensatz mindestens 14 8 betr gt Das Ergebnis zeigt die Abbildung 9 4 Famiienname Vomame SDD Stundensatz EIWEISS natur Peter 812 17 Schlachter Dieter 815 15 Bucz Susanne 934 15 Eine solche Abfrage ist nicht durch eine geschickte einfache SOQL Anweisung zu ersetzen Im Folgenden sind einige Ans tze zu sehen die man vielleicht versuchen w rde zu verwenden Der naheliegendste Versuch ist SELECT p Familienname p Vorname t DID t Stundensatz FROM tbDozent t INNER JOIN tbPerson p ON t PID p PID WHERE t Stundensatz gt AVG t Stundensatz Der Versuch scheitert daran dass die Aggregatfunktion AVGO zwingend eine Grup
610. z Kursende Firma Zertifikat Titel Gebuehr Qualifikationen Ustpflichtig DID Dar ber hinaus bietet MS Access eine zus tzliche Hilfe beim Aufbau eines OUTER JOIN Gehen Sie dazu in den oberen Teil des Abfragefensters der die Verbindungen zwischen den Tabellen visualisiert Hier k nnen Sie durch einen einfachen Klick auf die Verbindung diese zun chst aktivieren sie wird hervorgehoben Jetzt erhalten Sie durch einen rechten Mausklick auf diese Verbindung ein kleines Men in dem Sie die VERKN PFUNGSEIGENSCHAFTEN aufrufen k nnen Alternativ k nnen Sie auch ber den Men befehl ANSICHT VERKN PFUNGSEIGENSCHAFTEN gehen Tabellen miteinander verbinden JOIN ae 4 m Sie erhalten ein neues Fenster wie in dargestellt Wenn Sie jetzt den VER KN PFUNGSTYP w hlen erhalten Sie ein neues Fenster Hier finden Sie die Standardeinstellungen 1 f r einen INNER JOIN 2 f r einen LEFT OUTER JOIN 3 f r einen RIGHT OUTER JOIN MS Access erl utert die Bedeutung der einzelnen Beziehungen am Beispiel der beteiligten Tabellen Nehmen Sie sich die Zeit die Beschreibung kurz zu lesen ist diese zumeist auch recht verst ndlich _ Abbildung 4 33 Beziehungen bearbeiten Einstellung f r einen LEFT OUTER JOIN TabellefAbfrage Verwandte Tabelle bfrage tbDozent v tbKurs Abbrechen Verkn pfungstyp Neue erstellen DB
611. z PRIMARY KEY bei der Felddefinition des Pri m rschl sselfeldes Dies ist die einfachste M glichkeit einen Prim rschl s sel zu definieren die aber nur m glich ist wenn der Prim rschl ssel aus einem einzigen Feld besteht und keine weiteren Angaben zu machen sind Eine zweite M glichkeit einen Prim rschl ssel zu definieren ist eine Inte grit tsbedingung bei der Tabellendefinition mit CREATE TABLE anzugeben Diese Variante erlaubt insbesondere die Angabe mehrerer Felder als Prim r schl ssel Sie kann au erdem im Rahmen der ALTER TABLE Anweisung genutzt werden Integrit tsbedingung 8 m Integrit tsbedingung Prim rschl ssel CONSTRAINT name PRIMARY KEY feldname feldname Damit kann ein einzelnes Feld oder eine Liste von Feldern angegeben wer den die gemeinsam den Prim rschl ssel der Tabelle bilden Wir wollen dies am Beispiel der Entit t Bestellposition betrachten Abbildung 8 8 Bestell ID Umgebung der Entit t Bestellposition Mandanten ID Bestellung gt Bestellposition Die Entit t Bestellposition besitzt laut Modellierung drei Prim rschl sselfel der die Mandanten ID die Bestell ID und die Position Daher bietet es sich hier an den Prim rschl ssel ber eine Integrit tsbedingung mit den drei Fel dern mid bnr und pos zu definieren CREATE TABLE bestell_position Listing 8 5 mid a Ae He Erstellen der Tabelle f r die nr j Bestellpositi pos INT NOT NULL en
612. z kann f r beliebig viele Artikel gelten Es kann auch geschehen dass im Sortiment f r einen Mehrwertsteuersatz kein Artikel gef hrt wird Bestellung 0 N Bestellposition 0 N betrifft Warengruppe Mehrwertsteuer 7 4 Umsetzung in das relationale Modell Wir haben im Zusammenhang mit SQL immer vom relationalen Modell gesprochen Jetzt ist das Entity Relationship Modell hinzugekommen Sein Vorteil ist dass es einen guten berblick in der Entwurfsphase gibt Proble matisch ist nur dass es damit zwei Modelle zur Beschreibung der Informa tionen gibt Das relationale Modell verwendet eine etwas andere Terminologie als das ER Modell Gl cklicherweise sind das ER Modell und das relationale Modell aber relativ gut vertr glich Daher l sst sich ein ER Modell relativ einfach in ein relationales Modell umformen das dann unmittelbar in eine relationale Datenbank wie beispielsweise MySQL MS Access oder Oracle umgesetzt werden kann Abbildung 7 9 Komplettes Entity Relationship Modell ohne Attribute 237 W karitez Regeln f r Entit ten Regeln f r Beziehungen 238 Datenbanken modellieren Die wichtigsten Regeln f r die Umsetzung sind im Folgenden aufgelistet Regeln f r die Transformation von Entit ten E Jede Entit t wird zu einer Tabelle Alle Attribute einer Entit t werden als Felder in die Tabelle bernommen E Die Prim rschl ssel bleiben erhalten und werden ebenfalls Prim rs
613. zelnen Komponenten In einer solchen Umgebung muss der Datenbankserver auf maximale Performance getrimmt werden und ben tigt daf r alle verf gbaren Ressourcen F r unsere Zwecke sollte die Konfiguration als DEVELOPER MACHINE ausrei chend sein Abbildung 3 7 MySQL Server Instance Configuration Wizard Nutzung verschiedener MySQL Server Instance Configuration Datenablagesysteme Configure the MySQL Server 5 0 server instance Please select the database usage Multifunctional Database o General purpose databases This will optimize the server for the use of the fast transactional InnoDB storage engine and the high speed MyISAM storage engine Transactional Database Only Optimized for application servers and transactional web applications This will make InnoDB the main storage engine Note that the MyISAM engine can still be used Non Transactional Database Only Suited for simple web applications monitoring or logging applications as well as analysis programs Only the non transactional MyISAM storage engine will be activated 45 W kaites 46 Die Beispieldatenbanken MySQL verwendet im Sinne einer Schichtenarchitektur verschiedene Daten haltungssysteme um die in der Datenbank abgelegten Informationen zu speichern MySQL bernimmt also die Datenorganisation auf der Festplatte nicht selbst sondern bedient sich dazu wiederum eines Datenhaltungssys tems Die beiden wichtigsten Datenhaltungssysteme sind
614. zu zerlegen Mit einem COUNTC k nnen Sie die Anzahl der Datens tze pro Gruppe ermitteln Mit anderen Gruppierungsfunktionen wie SUM Summe oder AvG Mittelwert k nnen Sie Berechnungen bei der Aggregation von Datenfeldern durchf hren Wichtige Aggregatfunktionen k nnen Sie der folgenden Tabelle entnehmen Beachten Sie dass es Abweichungen zwischen den verschiedenen Daten bankmanagementsystemen und teilweise auch zwischen englischen und deutschen Versionen gibt Genaueres finden Sie in Kapitel 5 Aggregat Bedeutung grafische Oberfl che funktion deutsch COUNT Anzahl der Datens tze mit verschiede Anzahl nen Werten eines Feldes oder Anzahl der Datens tze COUNT SUMO Summe der Datenfeldwerte Summe AVGO Arithmetisches Mittel der Datenfeldwerte Mittelwert Durchschnittswert MAXO Gr ter auftretender Wert Max MINO Kleinster auftretender Wert Min STDDEV Standardabweichung der Werte StAbw VARO Varianz der Werte Varianz FIRSTO Erster gefundener Wert Wert des Erster Wert Datenfeldes im ersten Datensatz der Gruppe LASTO Letzter gefundener Wert Wert des Letzter Wert Datenfeldes im letzten Datensatz der Gruppe Tabelle 4 3 Wichtige Aggregatfunktionen 143 WM karitea 144 SELECT Syntax bungen Mit SQL Daten abfragen SELECT Damit beherrschen Sie jetzt SELECT Anweisungen mit dieser Syntax SELECT DISTINCTIALL feldname AS alias feldname AS alias FROM ta
615. zu gewinnen das E konkret und strukturiert genug ist um eine Datenbank daraus erstellen zu k nnen E allgemein genug ist um von Nicht IT Fachleuten verstanden zu werden Die bekannteste Methode zur Beschreibung eines konzeptionellen Schemas ist das Entity Relationship Modell von Peter Chen 1976 das historisch also j nger als das relationale Modell ist Das Modell steht also am Anfang der Datenbankentwicklung Das Ziel ist es ein richtiges Abbild der Realit t der k nftigen Anwender zu finden Rich tig bedeutet dabei dass die Daten einfach abgelegt ge ndert und insbeson dere abgefragt werden k nnen Gerade der letzte Aspekt ist wichtig Zwar bieten relationale Datenbanken eine gro e Flexibilit t und Funktionalit t aber das kann in der Praxis auch problematisch werden So wird eine Daten bank die bereits am Anfang nur schwer die Abfragen der Anwender beant worten kann und eine schlechte Performance aufweist nur schwer Akzep tanz bei den Anwendern finden Unter einem Modell ist eine vereinfachte Abbildung der Realit t oder einer Idee zu verstehen die alle f r den jeweiligen Zweck wesentlichen Aspekte enth lt Wir kennen in der Realit t viele Modelle So gibt es allein f r unsere Erde zahlreiche Modelle um die Komplexit t des Ganzen zu reduzieren Wenn Sie Das Entity Relationship Modell ERM mit dem Fahrzeug unterwegs sind ist eine Autokarte von Deutschland hilf reich Die Karte beinhaltet die f r d
616. zu vereinfachen Weitere Aspekte der physischen Datenhaltung sind die Replikation von Datenbanken das Laden und Entladen sowie die Sicherung und Wiederher stellung der Datenbest nde 14 5 Prozeduren und Trigger Die weitere Automatisierung Konsistenzsicherung und Erg nzung von feh lenden Funktionen in Datenbanken kann mithilfe von Prozeduren und Trig gern erfolgen Prozeduren sind letztlich Folgen gespeicherter SQL Anweisungen die durch Aufruf der Prozedur immer wieder ausgef hrt werden k nnen Prozeduren k nnen mit eigenen Befehlen erstellt und gel scht werden normalerweise mit einem CREATE PROCEDURE hier in der MySQL Variante Ein kleines Prob lem entsteht dadurch dass die SQL Anweisungen in der Prozedur selbst wie der mit dem Zeichen beendet werden m ssen Dies begrenzt immer eine SQL Anweisung Delimiter Der Query Browser beendet damit hier die SQL Anweisung was nicht gew nscht ist Daher muss f r die Dauer der Defini tion der Prozedur der Delimiter ge ndert und am Ende wieder zur ckgesetzt werden Der Query Browser bietet hierf r die Option NEUE PROZEDUR FUNK TION ANLEGEN die Sie mit einem rechten Mausklick auf das Schema kurse im rechten Fenster ffnen DELIMITER DROP PROCEDURE IF EXISTS kurse Personenanzahl CREATE PROCEDURE kurse Personenanzahl OUT zahl INT BEGIN SELECT COUNT INTO zahl FROM tbPerson END DELIMITER Der Aufruf kann dann mithilfe einer Folge wie in Listing 14 7 erf
617. zur Verabschiedung von SQL92 ausschlie lich eine andere Syntax erlaubt und gebr uchlich Dabei wurde der JOIN ebenfalls ber die Gleichheit der Werte zweier Felder durchgef hrt Dieser JOIN war allerdings nicht Bestandteil der FROM Klausel sondern der wHERE Klausel in der die Fel der einfach gleichgesetzt wurden Die in Listing 4 22 vorgestellte SELECT Anweisung w rde man dann wie folgt formulieren SELECT Listing 4 25 k KID k GezahlterBetrag p Familienname JOIN ber die p Vorname p PLZ p Ort p Strasse WHERE Klausel FROM tbPerson p tbKursbesuche k WHERE p PID k KTID AND k KID CE23 AND k GezahlterBetrag lt 250 ORDER BY p Familienname p Vorname Sie sehen dass in der FROM Klausel nur die zu verwendenden Tabellen auf gez hlt aber keinerlei Angaben zum JOIN gemacht werden Die Gleichset zung der beteiligten Felder also der PID aus der Tabelle tbPerson und der KTID aus der Tabelle tbKursbesuche erfolgt ausschlie lich in der WHERE Klau sel Diese Syntax ist bis heute in allen g ngigen relationalen Datenbank managementsystemen g ltig und kann gleichwertig mit der neueren JOIN Syntax in der FROM Klausel verwendet werden Egal welche Syntax verwendet wird beruht der JOIN immer auf der Verbin dung zweier Tabellen ber zumindest ein gemeinsames Paar von Feldern Verwenden Sie wenn m glich die neue SQL92 Syntax Sie ist eindeutig und erlaubt dem SQL Interpreter wegen der zus tzlichen Information eine
618. zur Verf gung um ein COM MIT oder ein ROLLBACK der Anweisungen zu steuern MS Access bietet trotz des urspr nglich als Desktop System entwickelten Konzeptes eine Transaktionsunterst tzung Eine Transaktion muss aber in jedem Fall mit einem BEGIN TRANSACTION begonnen werden Sie kann dann mit einem COMMIT wieder beendet werden Statt des einfachen COMMIT kann auch COMMIT TRANS ACTION oder COMMIT WORK verwendet werden Entsprechend gibt es neben dem ROLLBACK auch ein ROLLBACK TRANSACTION und ein ROLLBACK WORK openBase unterst tzt in der aktuellen Version noch keine nennenswerten Transaktionen Daher sollte hier entweder auf ein anderes System ausgewi chen werden oder auf eine sp tere Version gewartet werden Eine Unterst t zung ist angek ndigt aber noch nicht terminiert 13 3 Eigenschaften einer Transaktion Eine Transaktion besteht also im Prinzip aus folgender Struktur START TRANSACTION SQL Befehle COMMIT ROLLBACK Sperren In einer Transaktion k nnen theoretisch beliebig viele SQL Befehle aneinan dergereiht werden Aber auch bei einem einzigen Befehl kann dies hilfreich sein Kommen wir dazu auf unser Kursbeispiel zur ck Es sollen Rechnungen f r die Kursteilnehmer erstellt werden UPDATE artikel SET Listenpreis Listenpreis 1 03 Das Update der Artikel wird in realen Datenbest nden zumeist nur wenige Sekunden oder Sekundenbruchteile ben tigen Trotzdem kann es in dieser Zeit zu St rungen komme
Download Pdf Manuals
Related Search
Related Contents
セキスイ製 ホ~ータブルトイレ 座楽背もたれ型の無償交換のお知らせ 3 - digikal.gr Magellan GPS 3000 XL User's Manual L-09074 0 CATAL LABOCAST CODES, SANS PRIX Manual iAQ-engine - Mikrocontroller.net Monster Power 109457-00 surge protector K,c 取扱説明書 Copyright © All rights reserved.
Failed to retrieve file