Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

SQL - Structured Query Language

Ähnliche Präsentationen


Präsentation zum Thema: "SQL - Structured Query Language"—  Präsentation transkript:

1 SQL - Structured Query Language
Herzlich willkommen ! Wilhelm Moser 1

2 SQL - Structured Query Language
Was werden Sie nach dem Kurs können ? Datenbanken abfragen können Komplizierte Auswahlabfragen erstellen können Datenbankschnittstellen verstehen können Datenbanken verwalten können RDBMS - Systeme verstehen können Die Arbeitsweise des SQL-Server 6.5 in den Grundzügen verstehen können SQL - Structured Query Language Wilhelm Moser 2

3 SQL - Structured Query Language
Kursinhalte Allgemeines über Datenbanksysteme Relationale Datenbanksysteme Die Übungsdatenbank SQL - Structured Query Language die Standard Abfragesprache DML - Data Manipulation Language SELECT Daten abfragen INSERT Daten einfügen UPDATE Daten verändern DELETE Daten löschen DDL - Data Definition Language DCL - Data Control Language SQL - Structured Query Language Wilhelm Moser 3

4 SQL - Structured Query Language
Datenbanksysteme - allgemein SQL (Structured Query Language) wurde von IBM Mitte der 70er‑Jahre als Bestandteil eines relationalen Datenbanksystems (R) entwickelt. SQL ist eine Datenbanksprache keine Programmiersprache, sondern eine Schnittstelle zwischen dem Datenbankbenutzer und einer Datenbank. Relationale Datenbank Managment Systeme (RDBMS) stellen heute meist Standard SQL Funktionalität zur Verfügung. INFORMIX, DB2, ORACLE, dBase, SQL-Server, OASIS RDBMS wurde um 1977 von L. Ellison (IBM) in der Programmiersprache C entwickelt. ORACLE (1979) und SQL/DS (1982) waren die ersten Datenbanksysteme, die ein RDBMS und SQL verwendeten. SQL wurde vom ANSI (American National Standard Institute) genormt und als Datenbanksprache für relationale Datenbanken empfohlen. SQL ist eine Sprache der 4. Generation (4GL). Sie beschreibt die Eigenschaften der gewünschten Daten (also WAS die Daten sind) und nicht WIE man zu den Daten gelangt. SQL ist mengenorientiert. Das bedeutet, daß bei jeder Datenmanipulation immer Sammlungen von Datensätzen und nicht einzelne Datensätze angesprochen werden. (Selbst wenn das Resultat nur ein Datensatz ist.) SQL - Structured Query Language Wilhelm Moser 4

5 SQL - Structured Query Language
Relationale Datenbanksysteme - Beziehungskiste Daten können durch „Verknüpfung“ von Tabellen einfach in andere Tabellen eingebunden, auf Richtigkeit überprüft und verwaltet werden. Daten kommen nicht doppelt in der Daten-bank vor. Durch Verweise auf andere Tabellen können sehr schnell gleichartige Datensätze „gefiltert“ werden. Mit „referentieller Integrität“ erreicht man Datenkontinuität. (Daten können nur verändert oder gelöscht werden, wenn die Referenz-Datensätze ebenfalls geändert werden können) SQL - Structured Query Language Wilhelm Moser 5

6 SQL - Structured Query Language
Datendarstellung - von Feldern & Sätzen strukturierte Daten (oder wie finde ich was?) Aufbauend auf die binäre Speicherung müssen die Daten logisch strukturiert werden: Datenfeld FIRMA Nimmt man alle Datenfelder FIRMA erhält man eine Liste mit allen Firmennamen Datensatz "Index" Nimmt man einen Datensatz "Index" erhält man eine Zeile mit allen Felddaten einer Firma od Person. Ein "Datensatz" ist die Menge von "Datenfeld" SQL - Structured Query Language Wilhelm Moser 6

7 SQL - Structured Query Language
Tabellen, Spalten & Recordsets bei RDMS Die Tabelle ist die einzige Form der Datenaufbewahrung Sie ist zweidimensional angelegt, hat also Reihen (ROWS) und Spalten (COLUMNS) Sie ist dynamisch, d.h. die Struktur kann immer verändert werden. Länge durch hinzufügen von Datensätzen (Recordsets) ändern, Felddatentyp ändern Felder hinzufügen oder löschen etc. Die Daten werden nach Zugehörigkeit zu einem Begriff z.B.: Firmenname („Schlüssel“ als eindeutiger Zeilenbezeichner) in COLUMNS geordnet , Adresse, Straße, Telephonnummer...... Zur programmgesteuerten Bearbeitung erstellt man mit SQL sogenannte Recordsets (Spiegelbilder = Kopien) der jeweils gewünschten Daten. SQL - Structured Query Language Wilhelm Moser 7

8 SQL - Structured Query Language
Indizes - Allgemeines über Suchhilfen Ein Reisebüro möchte allen [Kunden] mit [L_CODE] = AUT ein Werbeprospekt schicken: „Primär-Schlüssel“ 1. Möglichkeit: Alle Datensätze werden in dem Feld [L_CODE] nach dem Wert „AUT“ durchsucht ( sequentiell ) „Unique Index“ 2. Möglichkeit Zur Tabelle wird eine Indexdatei erstellt, die Land und Recordsetnummer speichert. Die Verwaltung beim Hinzufügen oder Löschen der INDIZES übernimmt heute das RDBMS selbständig. Empfehlung: indizieren Sie nur notwendige Felder sonst wird das System zu langsam. Erstellen Sie zumindest einen „Unique Index“ oder „Primary Key“ SQL - Structured Query Language Wilhelm Moser 8

9 SQL - Structured Query Language
Das Entity-Relationship Model (ERM) Relationen sind Beziehungen von Daten in Quell- und Zieldateien 1:1 Beziehung [Lieferanten] -- [Adressendetails_Lieferanten] 1:n Beziehung [Lieferanten] >>[Artikel] Eine 1:n-Beziehung ist der häufigste Beziehungstyp. In einer 1:n-Beziehung können einem Datensatz in Tabelle A mehrere passende Datensätze in Tabelle B zugeordnet sein, aber einem Datensatz in Tabelle B ist nie mehr als ein Datensatz in Tabelle A zugeordnet. m:n Beziehung [Artikel] [Bestelldetails] [Bestellungen] In einer m:n-Beziehung können jedem Datensatz in Tabelle A mehrere Datensätze in Tabelle B zugeordnet sein und umgekehrt. Dies ist nur möglich, indem eine dritte Tabelle (Verbindungstabelle) definiert wird, deren Primärschlüssel aus zwei Feldern besteht, den Fremdschlüsseln aus den Tabellen A und B. Eine m:n-Beziehung besteht eigentlich aus zwei 1:n-Beziehungen mit einer dritten Tabelle. Zwischen der Tabelle Bestellungen und der Tabelle Artikel besteht z.B. eine m:n-Beziehung, die durch Erstellung von zwei 1:n-Beziehungen zur Tabelle Bestelldetails definiert wird. SQL - Structured Query Language Wilhelm Moser 9

10 SQL - Structured Query Language
Was sind Abfragen ? - Allgemeines SQL - Structured Query Language Wilhelm Moser 1010

11 SQL - Structured Query Language
Erstellen von Abfragen SQL - Structured Query Language Wilhelm Moser 1111

12 SQL - Structured Query Language
Die Auswahlabfrage SQL - Structured Query Language Wilhelm Moser 1212

13 SQL - Structured Query Language
Unser Übungsmodell - Reise.mdb Als Übungsmodell habe ich ein REISEBÜRO gewählt und die gängigste Datenbank am Client ist wohl MS-ACCESS. Folgende Tabellen stehen zur Verfügung: SQL - Structured Query Language Wilhelm Moser 1313

14 SQL - Structured Query Language
SQL - Structured Query Language - Einleitung I SQL wurde vom ANSI (American National Standard Institute) genormt und als Standarddatenbanksprache empfohlen. Leider sind dennoch verschiedene „Dialekte“ bei den Datenbanken vorhanden. Vorteile des „Standards“ Praktisch alle Datenbanken können mit SQL abgefragt werden Eine einheitliche Sprache ermöglich Programm und Datenbank- übergreifenden Datenaustausch Applikationen sind nicht an eine spezielle Datenbank gebunden Die Verbindung zur Datenbank ermöglichen spezielle Treiber wie ODBC, DAO, ADO, RDO MS-Jet Engine..... SQL - Structured Query Language Wilhelm Moser 1414

15 SQL - Structured Query Language
SQL - Structured Query Language - Einleitung II SQL ist im Gegensatz zu anderen Datenbanksprachen nicht Recordset sondern mengenorientiert. Daher bezieht sich eine Abfrage NIE auf einzelne Datensätze sondern auf eine Menge von Datensätzen. In einem Programm (z.B. MS-QUERY) oder einer Programmiersprache wird ein SQL-Befehl formuliert. Die Richtigkeit der Syntax wird überprüft und als Befehlsfolge an das RDBMS übergeben, das die Abfrage optimiert und ausführt. Die Ergebnisse werden an den Aufrufer übergeben. Die Aufgaben von SQL Daten manipulieren DML Data Manipulation Language Datenstrukturen definieren DDL Data Definition Language Datenfluß kontrollieren DCL Data Control Language SQL - Structured Query Language Wilhelm Moser 1515

16 SQL - Structured Query Language
DML - Data Manipulation Language - Übersicht Ein Teil der SQL wird als DML bezeichnet. Die Funktionen zur Daten-manipulation sind: Erfassen Ändern Löschen Abfragen SQL Sprachelemente sind nicht Case-Sensitive. Das gilt allerdings nicht für Strings. Bei Abfragen aus Programmiersprachen kann die Art der Darstellung des Recordsets gesetzt werden: OpenTable, OpenDynaset, OpenSnapshot (OpenTableDef) SQL - Structured Query Language Wilhelm Moser 1616

17 SQL - Structured Query Language
SQL-DML - Statements - SELECT & WHERE Die Hauptaufgabe einer Datenbank ist die Bereitstellung von erfaßten Daten nach bestimmten Kriterien. Die einfachste Form ist die Abfrage aller vorhandenen Datensätze und Felder einer Tabelle: SELECT * FROM KUNDEN Natürlich können wir auch spezielle Felder anstelle des Asteriks angeben: SELECT NAME, GEBURTSDATUM FROM KUNDEN Durch Definition von Bedingungen ist die gezielte Auswahl möglich: SELECT NAME, UMSATZ FROM KUNDEN WHERE UMSATZ > 4000 SQL - Structured Query Language Wilhelm Moser 1717

18 SQL - Structured Query Language
SQL-DML - Operanden & Operatoren Listing Die Operanden Konstante 1,‘HERMANN‘..... Columns kunden.name.... Funktionen min(kunden.nr), 4+5, now.... (Achtung datenbankspezifisch) Konstantenliste (´JA´,´NEIN´,´UNBEKANNT´).... Operatoren (Vergleich und logische) = Gleich <> Ungleich <= Kleiner oder Gleich >= Größer oder Gleich in Operand innerhalb einer Liste not in Operand nicht innerhalb einer Liste between and Operand zwischen 2 Werten not between and Operand außerhalb der 2 Werte like Operand so ähnlich wie: Vergleich mit Wildcards not like Operand nicht ähnlich wie is null Operand ist unbestimmt (NULL) is not null Operand ist bestimmt and logisches und or logisches oder SQL - Structured Query Language Wilhelm Moser 1818

19 SQL - Structured Query Language
SQL-DML - Operanden & Operatoren Logisches and SELECT NAME, ADRESSE FROM KUNDEN WHERE L_CODE = 'AUT' and UMSATZ >= 4000 Logisches 0r SELECT BEZ, L_CODE, SPRACHE FROM Reisegebiete WHERE SPRACHE='DEUTSCH' Or SPRACHE='ENGLISCH' Operand in SELECT BEZ, L_CODE, SPRACHE FROM Reisegebiete WHERE SPRACHE in ('DEUTSCH','ENGLISCH') Operand between SELECT Name, Adresse, Umsatz from Kunden WHERE Umsatz between 4000 and 9999 SQL - Structured Query Language Wilhelm Moser 1919

20 SQL - Structured Query Language
SQL-DML - Funktionen & Wildcards Operand Like mit Wildcards wie auf Betriebssystemebene SELECT * from Reisegebiete where Bez like 'M*I?' Operand IS NULL SELECT NAME, ADRESSE FROM KUNDEN WHERE TELEFON IS NULL Funktion HEUTE mit IS NULL SELECT NAME, TELEFON, Format(Now(),"dd/mm/yy") AS HEUTE FROM KUNDEN WHERE TELEFON Is Null SQL - Structured Query Language Wilhelm Moser 2020

21 SQL - Structured Query Language
SQL-DML - Joins Wir wollen die bevorzugten Reisegebiete von Andrea wissen. Derzeit müßten wir wie folgt vorgehen: 1. In [KUNDEN] die Nummer von Andrea suchen 2. In [KUNDEN_GEBIETE] die Nummern aller Reisegebiete von Andrea suchen 3. In [REISE_GEBIETE] die Nummern der Reisegebiete aufsuchen. Now lets JOIN Tables SELECT REISEGEBIETE.BEZ FROM KUNDEN, KUNDEN_GEBIETE, REISEGEBIETE 1. WHERE KUNDEN.NAME = 'ANDREA' 2. AND KUNDEN_GEBIETE.G_NR = REISEGEBIETE.NR 3. AND KUNDEN.NR = KUNDEN_GEBIETE.K_NR Durch diese Tabellenverknüpfung wird eine temporäre, relationale Verbindung hergestellt ohne daß eine Referenz (2 Schlüsselfelder) besteht. JOIN wird nicht angegeben. SQL - Structured Query Language Wilhelm Moser 2121

22 SQL - Structured Query Language
SQL-DML - Alias Namen & Inner Joins Wozu ALIAS Namen ? 1. Bei Spalten schönere Feldbezeichnung 2. Bei Tabellen Verkürzung des Tabellennamens Beispiel: SELECT KUNDEN.NAME AS Vorname, INTERESSEN.BEZ as Interessen FROM (KUNDEN INNER JOIN KUNDEN_INTERESSEN ON KUNDEN.NR =KUNDEN_INTERESSEN.K_NR ) INNER JOIN INTERESSEN ON KUNDEN_INTERESSEN.I_NR = INTERESSEN.NR Der Inner Join kombiniert Datensätze aus zwei Tabellen, sobald ein gemeinsames Feld dieselben Werte enthält. SQL - Structured Query Language Wilhelm Moser 2222

23 SQL - Structured Query Language
SQL-DML - Self Join Versuchen wir, alle Kunden, die zusammen wohnen, auszufiltern. In diesem Fall müssen wir die gleiche Tabelle 2 x in unsere Abfrage einbeziehen. Beispiel: SELECT K1.NAME, K2.NAME FROM KUNDEN K1, KUNDEN K2 WHERE K1.ADRESSE = K2.ADRESSE AND K1.NR <> K2.NR In Access geht’s mit dem Assistenten und Unterabfragen: (dazu später) SELECT DISTINCTROW KUNDEN.ADRESSE, KUNDEN.NAME FROM KUNDEN WHERE (((KUNDEN.ADRESSE) In (SELECT [ADRESSE] FROM [KUNDEN] As Tmp GROUP BY [ADRESSE] HAVING Count(*)>1 ))) ORDER BY KUNDEN.ADRESSE; SQL - Structured Query Language Wilhelm Moser 2323

24 SQL - Structured Query Language
SQL-DML - Outer Join Die Idee des Joins ist nicht die wahllose Verbindung von Tabellen, sondern die Recordset - spezifische. Wenn wir für alle Kunden das LAND angeben wollen, müssen wir KUNDEN und LÄNDER verbinden. In dem Fall wird Claudia nicht mehr angezeigt, da dort ein unbekanntes Land steht. (Was mit referentieller Integrität ja nicht passieren dürfte) Beispiel ohne Outer Join und ohne Claudia: SELECT K.NAME,L.BEZ FROM KUNDEN K, LÄNDER L WHERE K.L_CODE=L.Code Beispiel mit Outer Join und Claudia: SELECT K.NAME,L.BEZ FROM KUNDEN K, LÄNDER L WHERE K.L_CODE=L.Code(+) Soweit die Theorie. Die Syntax mag bei UNIX-INFORMIX Systemen aufgehen, der Dialekt von ACCESS läßt das jedenfalls nicht zu. Jedoch gibt’s dort sogenannte Left Joins & Right Joins SQL - Structured Query Language Wilhelm Moser 2424

25 SQL - Structured Query Language
SQL-DML - Subqueries - Unterabfragen Ronnie beschließt eine Reise zu unternehmen und möchte in ein Land reisen, das auch Andrea besucht(e). Beispiel einer Unterabfrage: SELECT G.BEZ FROM REISEGEBIETE AS G, GEBIETE_INTERESSEN AS GI WHERE GI.G_NR=G.NR AND GI.I_NR In (SELECT KI1.I_NR FROM KUNDEN_INTERESSEN KI1, KUNDEN K1 WHERE K1.NAME='ANDREA' AND KI1.K_NR=K1.NR ); Natürlich kann man solche „Monster“ auch noch mit and Operatoren verknüpfen und sogar abhängige Subqueries erstellen. SQL - Structured Query Language Wilhelm Moser 2525

26 SQL - Structured Query Language
SQL-DML - Correlated Subqueries Versuchen wir das Beispiel der zusammen wohnenden RONNIE & JUDITH (Self Join) mit einer Unterabfrage zu lösen Beispiel einer abhängigen Unterabfrage: SELECT K1.NAME FROM KUNDEN K1 WHERE EXISTS (SELECT K2.NAME FROM KUNDEN K WHERE K1.ADRESSE = K2.ADRESSE AND K1.NR <> K2.NR ); Hier und nur im Zusammenhang mit Subqueries wird der Operator EXISTS verwendet, um Fehler der Subquery auszuschalten. Exists ist dann wahr, wenn die Subquery zumindest eine Zeile zurückliefert. SQL - Structured Query Language Wilhelm Moser 2626

27 SQL - Structured Query Language
SQL-DML - UNION-Klausel - Mengenvereinigung Mit UNION lassen sich beliebige mit SELECT erzeugte Mengen vereinigen. Die Spalten der einzelnen SELECTS müssen jedoch den selben DatenTyp besitzen. Beispiel - eine Liste aller Interessen und aller Reisegebiete: SELECT INTERESSEN.BEZ FROM INTERESSEN UNION SELECT REISEGEBIETE.BEZ FROM REISEGEBIETE; Meiner Meinung nach ein gutes Mittel, um heillose Verwirrung in an sich strukturierte „Logik“ zu bringen. Diese beiden Datenarten haben in einer Spalte nichts verloren. SQL - Structured Query Language Wilhelm Moser 2727

28 SQL - Structured Query Language
SQL-DML - ORDER BY & GROUP BY So, nun wird’s Easy - Order by läßt uns Daten sortieren Wir können praktisch nach jeder Abfrage das Statement ...ORDER BY NAME ASC, ADRESSE DESC anbringen, wobei ASCending und DESCending für auf- oder absteigende Sortierung eingesetzt wird. GRUPPIERUNG: Das Zusammenfassen von Daten in Recordsets. Welche Herkunftsländer bringen welchen Umsatz. (Gruppierung der Kunden nach Herkunftsländern. SELECT KUNDEN.L_CODE, AVG(RB.KOSTEN) as A, SUM(RB.KOSTEN) as S FROM KUNDEN, REISE_BUCHUNG RB WHERE KUNDEN.NR=RB.K_NR GROUP BY KUNDEN.L_CODE; SQL - Structured Query Language Wilhelm Moser 2828

29 SQL - Structured Query Language
SQL-DML - DISTINCT Statement Durch das Statement DISTINCT(ROW) läßt sich die Ausgabe doppelter Zeilen vermeiden: SELECT L_CODE FROM KUNDEN; SELECT DISTINCT L_CODE FROM KUNDEN; liefert: AUT AUT AUT DEU DEU ENG AUT ENG SQL - Structured Query Language Wilhelm Moser 2929

30 SQL - Structured Query Language
SQL-DML - INSERT INTO - Anfügeabfrage Ermöglicht das Anfügen von Daten an eine bereits bestehende Tabelle. INSERT INTO KUNDEN (Name,Adresse,L_Code,Telefon,Geburtsdatum, Umsatz) VALUES ('RONNY','Palffygasse 8','AUT','111111',' ', 10000); ACHTUNG: In diesem Fall darf das Feld NR, das einen Autowert enthält, nicht angegeben werden !!!! Funktioniert mit MSQRY32.EXE, nicht aber direkt mit QBE-Access, erst nach erneutem Aufruf der gespeicherten Abfrage. Jede Kombination (Subqueries) ist möglich. SQL - Structured Query Language Wilhelm Moser 3030

31 SQL - Structured Query Language
SQL-DML - UPDATE - Aktualisierungsabfrage Durch die UPDATE Anweisung können Daten eines bereits bestehenden Datensatzes verändert werden. UPDATE KUNDEN SET ADRESSE = 'Hauptstraße 125', TELEFON = ' ' WHERE KUNDEN.NAME = 'MARKUS' ACHTUNG: In diesem Fall darf das Feld NR, das einen Autowert enthält, nicht angegeben werden !!!! natürlich ist auch hier jede Kombination (Subqueries) möglich. SQL - Structured Query Language Wilhelm Moser 3131

32 SQL - Structured Query Language
SQL-DML - DELETE - Löschabfrage Mit dem DELETE Statement können benannte Datensätze (WHERE....) gelöscht werden. DELETE FROM KUNDEN WHERE NR = 3; oder DELETE FROM KUNDEN WHERE NAME = 'MARKUS'; ACHTUNG: In diesem Fall darf das Feld NR, das einen Autowert enthält, angegeben werden !!!! natürlich ist auch hier jede Kombination (Subqueries) möglich. SQL - Structured Query Language Wilhelm Moser 3232

33 SQL - Structured Query Language
SQL-DML - Zusammenfassung Das Thema ist so umfangreich, daß nur die ständige Beschäftigung die notwendige Routine mit sich bringen kann. Fallweise Tätigkeiten sind eher mühsam und bedürfen des oftmaligen Nachschlagens in der Syntax der jeweiligen Datenbank, die mit SQL-DML angesprochen wird Hier ein Leitfaden für die Lösung komplexer Aufgaben: 1. Zuerst die Information suchen, die ausgegeben werden soll. 2. Zugehörige Tabellen und Spalten suchen. 3. Verbindung der Tabellen (graphisch) darstellen. 4. Gruppierungen formulieren 5. Suchordnung erstellen Wenn irgend möglich, lassen Sie doch die QBE-Umgebung von ACCESS die Abfragen für Sie formulieren und konvertieren Sie diese dann in Ihre Programmierumgebung oder Ihren Abfragegenerator. ( Die Abfrageassistenten von ACCESS sind wirklich gut) SQL - Structured Query Language Wilhelm Moser 3333

34 SQL - Structured Query Language
SQL-DDL - Data Definition Language Data Definition Language ist das Tool zum erstellen, löschen und ändern von Tabellen, Indizes und Ansichten (Views). Meist werden diese Änderungen NICHT durch den Programmierer, sondern den Datenbankadministrator am Server (SQL, ORACLE, INFORMIX....) vorgenommen. Aus gutem Grund. Sollen doch die Änderungen konstistent und daher möglichst zentral erfolgen. Wir werden nur die minimalen Möglichkeiten behandeln, da jede Datenbank andere Dialekte und Möglichkeiten anbietet. SQL - Structured Query Language Wilhelm Moser 3434

35 SQL - Structured Query Language
SQL-DDL - Tabellen - Allgemeines & Schlüssel Tabellen besitzen Spalten und Zeilen. Die Spalten müssen einem bestimmten Datentyp zugeordnet sein. Eine Tabelle kann einen Primärschlüssel und mehrere Fremdschlüssel haben. Dies dient zur Konsistenzsicherung in der Datenbank und ist oft fester Bestandteil der Tabellen- definition. Eine Tabelle kann mehrere Fremdschlüssel haben. Fremdschlüssel können NULL Werte enthalten. Fremdschlüssel gelten als NULL wenn zumindest eine Spalte des Schlüssels NULL ist. Eindeutige Schlüssel (Unique Keys) können mehrfach vorhanden sein. SQL - Structured Query Language Wilhelm Moser 3535

36 SQL - Structured Query Language
SQL-DDL - Tabellen - CREATE TABLE Nachdem man alle Tabellenstrukturen (auf dem Papier) konzipiert hat, legt man die Tabellen physisch an. Die On Delete Bedingung bewirkt das Löschen der entsprechenden Spalten dieser Tabelle, wenn dazugehörige Recordsets der Muttertabelle gelöscht werden. Diese semantischen Restriktionen erzielen die Konsistenz der Datenbank und es wird verhindert, daß in der Tabelle KUNDEN_INTERESSEN Kundenummern vorhanden sind, die in der Tabelle KUNDEN nicht mehr existieren. Beispiel: (Nur bei Server-Datenbanken nicht bei Access möglich - zu komplex) Die Tabelle KUNDEN_INTERESSEN hat einen Primary Key und 2 Foreign Keys CREATE TABLE KUNDEN_INTERESSEN ( K_NR NUMBER NOT NULL, I_NR NUMBER NOT NULL, PRIMARY KEY (K_NR,I_NR), FOREIGN KEY KEY_KUNDEN (K_NR) REFERENCES KUNDEN ON DELETE RESTRICT, FOREIGN KEY KEY_INTERESSEN (I_NR) REFERENCES INTERESSEN ON DELETE RESTRICT ); bei Access ist das mit dem INTO Statement möglich SELECT [K_NR] AS A1, [I_NR] AS A2 INTO KUNDEN_INTERESSEN GROUP BY [K_NR], [I_NR]; SQL - Structured Query Language Wilhelm Moser 3636

37 SQL - Structured Query Language
SQL-DDL - Tabellen - ALTER & DROP TABLE Also, nachdem wir soweit gekommen sind ist das folgende ja wohl ein Klacks: ADD Spalten hinzufügen ALTER TABLE KUNDEN ADD FAX CHAR(25) NOT NULL; DROP Spalten / Tabellen löschen ALTER TABLE KUNDEN DROP GEBURTSDATUM; DROP TABLE KUNDEN; RENAME Spalten umbenennen ALTER TABLE KUNDEN RENAME ADRESSE STRASSE; (nicht in Access) MODIFY Spalten ändern ALTER TABLE KUNDEN MODIFY NAME CHAR(50) NOT NULL; (nicht in Access) SQL - Structured Query Language Wilhelm Moser 3737

38 SQL - Structured Query Language
SQL-DDL - Indizes - Allgemeines Stellen wir uns einen Index wie ein Telefonregister vor: A-Z ist unser INDEX. Um leichteren Zugriff zu haben müssen wir bei der Tabellenerstellung INDIZES angeben. Nach der Erstellung übernimmt die Verwaltung der Optimizer des RDBMS. Der Datenbankadministrator muß allerdings für den richtigen Einsatz der INDIZES bei einem Projekt sorgen. Regeln bei der Erstellung von INDIZES: 1. Pro Tabelle zumindest ein INDEX. 2. Pro Primary Key sollte ein Unique Index generiert werden. 3. Pro Foreign Key sollte ein Index generiert werden. 4. Oft gelesene Tabellen = viele Indizes. 5. Oft geschriebenen Tabellen = wenige Indizes. SQL - Structured Query Language Wilhelm Moser 3838

39 SQL - Structured Query Language
SQL-DDL - Indizes - Create & Drop Auch bei Create Index kann man bei der Definition angeben, ob der Index aufsteigend oder absteigend sortiert werden soll. (ORDER BY) UNIQUE INDEX bedeutet, daß die Indexspalten eindeutig sein müssen. Der Name des INDEX muß in der Datenbank eindeutig sein. CREATE UNIQUE INDEX KUNDEN_I1 ON KUNDEN (NAME); CREATE INDEX KUNDEN_I2 ON KUNDEN (L_Code, Geburtsdatum); DROP INDEX KUNDEN_I1 ON KUNDEN; SQL - Structured Query Language Wilhelm Moser 3939

40 SQL - Structured Query Language
SQL-DDL - Views - Allgemeines ( Server based ) Mit Views können logische Ansichtsfenster „über“ eine Tabelle gelegt werden. VORTEILE: Der Anwender erhält verschiedene Sichtweisen der Tabelle. Zugriffsschutz durch „Teilansicht“ der Tabelle erlaubt eine vereinfachte Schreibweise für komplizierte Tabellenverknüpfungen Views können wie Tabellen verwendet werden, speichern aber keine Daten. EIGENSCHAFTEN von VIEW‘s: referenziert Daten - Änderung der Tabelle = Änderung des View‘s Die Daten einer View kann man nur ändern, wenn sie einer Tabelle zugeordnet sind, sonst nur LESEN. Verbraucht minimalen Speicherplatz. SQL - Structured Query Language Wilhelm Moser 4040

41 SQL - Structured Query Language
SQL-DDL - Views - Create & Drop View ( Server based ) View‘s entsprechen bei der dynamischen Frontendverwaltung von Access dem QBE-Bereich zur Erstellung von Recordsets vom Typ Dynaset oder Snapshot. Durch die umfassenderen Möglichkeiten von Access ist die VIEW in der ANSI-Standard Form in Access nicht vorgesehen. Hier zwei Beispiele für Server basierte View‘s in create & drop CREATE VIEW KUNDENINT ( KUNDEN, INTERESSEN) AS SELECT K.NAME, I.BEZ FROMKUNDEN K, KUNDEN_INTERESSEN KI, INTERESSEN I WHEREK.NR = KI.K_NR AND KI.I_NR = I.NR; DROP VIEW KUNDENINT; SQL - Structured Query Language Wilhelm Moser 4141

42 SQL - Structured Query Language
SQL-DCL - Data Control Language Wohl ein wichtiger Bereich für Transaktionen und Privilegien die im ACCESS Bereich die MS-Jet Engine oder ODBC zur Verfügung stellt. Transaktionen Befehlsfolgen werden in logische Bereiche (Transaktionen) zusammengefaßt. Eine Transaktion beginnt mit dem SQL-Befehl und endet mit COMMIT oder ROLLBACK, dann beginnt die nächste Transaktion. Auf simpel: üblicherweise werden Recordsets nach Bearbeitung en Block gespeichert, oder bei Fehlern überhaupt nicht (Stromausfall). Gerade dieser Bereich hat sich in den letzten Monaten durch DAO, ODBC, RDO, ADO und MS-Jet Engine so verändert, daß Standards kaum mehr zu erkennen sind. Die Jet-Engine verwendet z.B.: die Syntax BeginTrans & CommitTrans mit anderen Parametern bzw. Funktionsdefinitionen. SQL - Structured Query Language Wilhelm Moser 4242

43 SQL - Structured Query Language
SQL-DCL - COMMIT & ROLLBACK Hier also ein Beispiel für Server based commit: . . . COMMIT DELETE FROM KUNDEN WHERE NR = 3; DELETE FROM KUNDEN_GEBIETE WHERE K_NR = 3; DELETE FROM KUNDEN_INTERESSEN WHERE K_NR = 3; COMMIT Das bedeutet, daß erst bei erfolgreichem commit die Transaktion abgeschlossen wird. Nun ja, ROLLBACK (zurückrollen) heißt dann wohl alles bis zum letzten commit aufrollen und rückgängig machen. SQL - Structured Query Language Wilhelm Moser 4343

44 SQL - Structured Query Language
SQL-DCL - Summary Also ehrlich, für mich war das recherchierte Material so unergiebig, daß ich mich ruhigen Gewissens auf einen Bereich zurückziehe - die Fähigkeiten der MS-JET Engine (ODBC - mit dem man alle Datenbanken ansprechen kann funktioniert auf VB, ACCESS oder C++ Ebene ähnlich). Das DB Engine-Objekt enthält die folgenden Auflistungen, Methoden und Eigenschaften. Auflistungen Errors Properties Workspaces (Voreinstellung) Eigenschaften DefaultPassword DefaultType DefaultUser IniPath  LoginTimeout SystemDB  Version  nur in MS Jet-Arbeitsbereichen  nur in ODBCDirect-Arbeitsbereichen Methoden BeginTrans CommitTrans CompactDatabase  CreateDatabase  CreateWorkspace Idle  OpenConnection  OpenDatabase RegisterDatabase RepairDatabase  Rollback SetOption  SQL - Structured Query Language Wilhelm Moser 4444

45 SQL - Structured Query Language
über moser_willi SQL - Structured Query Language Wilhelm Moser 4545

46 Danke schön, bezauberndes Sie waren ein Publikum
SQL - Structured Query Language aber das können Sie ja bereits... Danke schön, bezauberndes Sie waren ein Publikum auf wiedersehen bei weiteren interessanten Kursen... SQL - Structured Query Language Wilhelm Moser 4646

47 noch viel interessantere Dinge ..... SQL - Structured Query Language
P A U S E ! und nach der Pause ? noch viel interessantere Dinge ..... SQL - Structured Query Language Wilhelm Moser 4747


Herunterladen ppt "SQL - Structured Query Language"

Ähnliche Präsentationen


Google-Anzeigen