- RobertKrah.de

Werbung
Microsoft SQL-Server 2000
Anleitung
1 Datenbanksysteme und Einsatzzwecke: Access
/
SQL-Server1
Um einen Vergleich von DBMS anstellen zu können, sollen zunächst die Anforderungen an
diese Systeme näher untersucht werden. Die folgenden Überlegungen können bei der Auswahl eines DBMS angestellt werden:
- Anzahl und Umfang der mit dem DBMS zu verwaltenden Datensätze und das erwartete Wachstum
- vorhandene oder geplante EDV-Infrastruktur (Netzwerk, Server, Betriebssysteme, bereits vorhandene DBMS)
- verfügbares Personal (Administratoren)
- verfügbares EDV-Budget für einmalige Investition und laufende Investitionen
- Lizenzpreise
- Wechsel von Datenbeständen auf andere DBMS
- Investitionsschutz
- Anzahl von gleichzeitigen Benutzern
MS-Access 2000 hat beispielweise folgende Begrenzungen, die aufgrund der Systemarchitektur nicht erweitert werden können:
Maximale Größe einer MDB-Datenbank
2 GB
Anzahl gleichzeitiger Benutzer
255
Anzahl der geöffneten Tabellen
1024
Maximale Größe einer Tabelle
1 GB
Anzahl der Felder in einer Tabelle
255
Anzahl der Indizes in einer Tabelle
32
Weitere Nachteile und Einschränkungen:
-
Nach einem Absturz von ACCESS gibt es keine Wiederherstellungsroutine.
-
Im Netz werden immer alle Daten übertragen ohne Berücksichtigung von WHERE
Kriterien.
-
Das Sicherheitskonzept von ACCESS ist nicht sehr mächtig.
1.1 File Server – Client/Server
Grundsätzlich muss zwischen File Server Datenbanken wie Access und Client/ServerDatenbanken unterschieden werden:
File Server Datenbank (z.B. Access):
Hier kann von außen immer nur auf die Datenbankdatei zugegriffen werden. Außerdem werden hier grundsätzlich alle Daten übertragen und erst der Empfänger ist in der Lage, die Daten zu selektieren.
Vorteile einer solchen File Server Architektur sind dabei:
-
Zugriff von mehreren Anwendern auf Daten
-
Client-Programme lokal vorhanden
Angesichts dieser Vorteile könnte man sich nun jedoch die Frage stellen, wozu man überhaupt noch eine Client Server Architektur braucht:
Eine File Server Datenbank verfügt über keinen eigenen Datenbankprozess, der bestimmte
Dienste ausführen kann. Es können somit keine Daten auf dem Server selektiert werden,
1
:vgl. zum 1. Kapitel: http://www.fh-deggendorf.de/doku/fh/meile/bachelor/lehre/db/index.html
(Zusammenfassung, z. T. wörtliche Übernahme aus Folge 10 und 11 der Vorlesungsreihe zu Datenbanken)
-1-
Microsoft SQL-Server 2000
Anleitung
sondern es wird die Datenbank File an sich übergeben. Das führt zu langen Zugriffszeiten
insbesondere wegen des großen Datentransfers im Netz.
1.2 Client Server Datenbank: (z. B. Oracle, MS-SQL-Server)
Auf dieser läuft nach dem Hochfahren ein Datenbankprozess, der Anforderungen in Empfang nehmen und den entsprechenden Dienst ausführen kann, z.B. das Ausführen eines
Selects mit Where-Bedingung. Hier werden also nur die benötigten Daten übergeben. Daraus ergibt sich ein Geschwindigkeitsvorteil.
Als allgemeine Kriterien, die als Anforderungen an Datenbanksysteme genannt werden, lassen sich folgende Punkte nennen:
⇒
⇒
⇒
⇒
⇒
⇒
⇒
Skalierbarkeit
Migration
Zugriff
Administration
Backup/Recovery
Benchmarks
Sicherheit
Skalierbarkeit:
Aus der Abschätzung über die Anzahl, den Aufbau und den Umfang der zu verwaltenden
Datensätze, sowie die Anzahl der gleichzeitigen Zugriffe auf eine Datenbank kann schon
eine gewisse Vorauswahl getroffen werden. Während MS Access aufgrund der Systemarchitektur eine Begrenzung in der maximalen Größe einer Datenbank bei 2 GB und bei der Anzahl gleichzeitiger Benutzer bei 255 hat, gelten diese Begrenzungen für die „großen“ DBMS,
wie z.B. MS SQL Server oder Oracle nicht. „Große“ DBMS erlauben eine Datenbankgröße,
die in Terabytes gemessen werden kann. Die Einschränkung besteht heute nur noch darin,
wie viel Zeit für das Sichern, die Wiederherstellung und die Reorganisation der Datenbanken
veranschlagt werden muss. Ein wesentliches Merkmal für ein DBMS ist also die Skalierbarkeit, d.h. die Möglichkeit der Anpassung eines DBMS an sich ändernde Benutzer- und
Transaktionslasten.
Skalierbarkeit beschreibt folgende Arten von Systemänderungen:
-
Vergrößerung von Datenbanken
-
wachsende Anzahl von Benutzern und Netzwerklast
-
zunehmende Transaktionslast
-
steigende Anforderungen bei Anwendungen durch neue Programmiertechniken
-
wachsende Anzahl von Servern
Migration:
Möglichkeit des Wechsels von Datenbanken auf leistungsfähigere Versionen bzw. andere
DBMS.
MS Access bietet mit dem Upsizing-Assistenten die Möglichkeit, eine vorhandene AccessDatenbank zu einem Access-Projekt umzuformen. Dabei werden Tabellen und Abfragen in
eine SQL-Server Datenbank kopiert. Grundsätzlich ist auch eine Migration von Oracle nach
MS SQL Server und umgekehrt möglich. Dies erfordert aber eine genaue Planung und
Kenntnis der Unterschiede.
Bei jeder Migration sind also unterschiedliche Aspekte der Systemarchitektur zu beachten.
So bestehen z.B. Unterschiede in der Bezeichnung der Datentypen zwischen MS Access
-2-
Microsoft SQL-Server 2000
Anleitung
und MS SQL-Server. Während Datentypen beim SQL-Server auf die Programmiersprache C
bezogen sind, basieren die Datentypen bei Access auf Visual Basic.
Sicherheit:
Im Bezug auf Sicherheit basiert MS-SQL Server, MS-Access und Oracle auf dem Konzept
von Benutzern und Gruppen von Benutzern mit bestimmten Rollen. MS-SQL-Server kann in
zwei Sicherheits-Modi arbeiten:
-
mit Windows NT Authentifizierung
-
im sog. Mixed Mode, d.h. Windows NT Authentifizierung und SQL-Server Authentifzierung
So erlaubt MS-Access z.B. die Zugriffssteuerung von Benutzern und Gruppen von Benutzern
über den sog. Workgroup-Administrator.
Beim SQL Server gibt es eine Log-Datei, die die Transaktionen für Änderungen von Datenbankinhalten aufnimmt. Damit kann das DBMS nach einem Absturz Daten, die noch im Puffer stehen, auf die Datenbank schreiben (Rollforward) bzw. nicht vollständig durchgeführte
Transaktionen wieder zurücknehmen (Rollback). Außerdem kann man nach einem Plattencrash über das Einspielen der letzten Sicherung mit Hilfe der Logfile auch alle seitdem
durchgeführten Datenbankänderungen nachvollziehen. Das Log File sollte dabei nie auf der
Platte gespeichert werden wo die Datenbank liegt, denn nach einem Plattencrash könnte die
Logfile ansonsten nicht mehr verwendbar sein.
⇒ Was versteht man eigentlich unter dem „Zurücknehmen von Transaktionen“?
Angenommen, es erfolgte eine Warenauslieferung durch den Anwender. Dazu erfolgt in der
Datenbank innerhalb einer Transaktion sowohl die Erhöhung der Liefermenge im Kundenauftrag, als auch die Reduzierung des Lagerbestands. Angenommen, die Erhöhung der Liefermenge erfolgte noch, danach kam es zum Datenbankabsturz.
Die Transaktion wurde nicht vollständig durchgeführt. Man muss also die Transaktion wieder
zurücknehmen, denn das manuelle reduzieren des Lagerbestandes durch den Anwender
nach dem Neustart der Datenbank ist problematisch, da der Anwender nur ganze Geschäftsprozesse aufrufen darf, aber keine einzelnen Änderungen von Datenbankinhalten.
Das wäre viel zu fehleranfällig.
Deshalb werden die Datenbankaktualisierungen wieder zurückgenommen, die innerhalb einer nicht vollständig durchgeführten Transaktion bereits schon realisiert wurden. In unserem
Fall wird somit die Liefermenge wieder reduziert, um auf den Stand zu kommen, den die Datenbank vor dem Beginn der Transaktion aufwies.
Administration:
Für den Administrator einer Datenbank sind andere Kriterien, als die oben genannten Unterschiede bei den Datentypen, deren Kenntnis z.B. für den Anwendungsentwickler von Bedeutung sind, wichtig.
Ein wesentliches Kriterium für die Verfügbarkeit und Erweiterbarkeit eines DBMS liegt in der
Administration des Systems.
Der Datenbankadministrator hat folgende Aufgaben:
-
Installation des DBMS
-
Konfiguration der Server und Clients
-
Erstellung der Datenbanken
-
Umsetzung der Berechtigungen
-
Datentransfer (d.h. Import und Export von Daten)
-
Sichern und Wiederherstellen einer Datenbank
-
Überwachung der Systemauslastung und Reaktion auf bestimmte Alarme
-3-
Microsoft SQL-Server 2000
-
Anleitung
Behebung von Systemproblemen
Für diese Tätigkeiten braucht ein Datenbankadministrator Unterstützung durch entsprechende Hilfsmittel der DBMS.
Für einen Datenbankadministrator ist das zugrundeliegende Serverbetriebssystem von großer Bedeutung. Während MS-Access und MS-SQL-Server nur auf MicrosoftBetriebssystemen laufen, kann eine Oracle-Datenbank auf Windows NT Server bzw. Windows 2000 Server oder auch unter UNIX ablaufen. Die Wahl des Serverbetriebssystems
wirkt sich neben der Stabilität des DBMS auch auf das Preis/Leistungsverhältnis aus. In diese Rechnung gehen Überlegungen wie z.B. Lizenzierungskosten, Zugriff auf bereits im Serverbetriebssystem angelegte Benutzer aus MS-SQL-Server heraus oder Verfügbarkeit von
Datensicherungssoftware ein.
Die meisten kommerziellen DBMS verfügen heute über eine graphische Benutzeroberfläche
zur Administration. Während bei MS Access bestimmte Dienstprogramme in die Anwendung
integriert sind, gibt es beim MS SQL-Server bzw. bei Oracle Dienstprogramme wie den Enterprise Manager bzw. den Oracle Enterprise Manager. Diese graphischen Werkzeuge
erlauben es dem Datenbankadministrator Datenbanken bzw. Instanzen zu erzeugen und zu
bearbeiten, sowie Benutzer anzulegen und bestimmten Rollen zuzuordnen. Dienstprogramme für das Starten und Anhalten von Datenbanken, oder für die Sicherung und Restaurierung von Datenbanken, sowie Tools zur Darstellung der Systemauslastung, sollten ebenfalls
vorhanden sein.
Architektur:
Leider gibt es bei den verschiedenen Herstellern von DBMS eine unterschiedliche Terminologie. So besteht z.B. eine Oracle-Datenbank aus der kompletten Umgebung. Dies beinhaltet:
-
Oracle Datenbank-Prozesse und Pufferbereiche (Instanzen)
-
System-Tablespace, d.h. das Schema der Datenbank
-
Tablespaces die vom Datenbankadministrator definiert wurden
-
Redo-Log-Dateien
-
andere Dateien (Control Files, Init.ora)
Eine MS-SQL-Server Datenbank besteht aus Daten, Anwendungen und Sicherheitsmechanismen, die mit einem Tablespace bei Oracle vergleichbar sind. Mit der Installation eines
MS-SQL-Servers werden standardmäßig folgende System-Datenbanken installiert:
-
Master-Datenbank zur Verwaltung von Systeminformationen über den SQL-Server,
wie z.B. Anmeldeinformationen oder Systemkonfiguration
-
Model-Datenbank als Vorlage für alle neuangelegten Datenbanken
-
tempdb-Datenbank zur Zwischenspeicherung bei Sortieroperationen
-
msdb-Datenbank zur Zeitsteuerung von Alarmen oder Jobs
-
Beispieldatenbanken
Benchmarks:
Bei den “großen” DBMS spielt die Leistungsfähigkeit oder auch Performance bei Vergleichen
eine große Rolle. Eine amerikanische Institution, das Transaction Processing Performance
Council (TPC)2 beschäftigt sich damit, Leistungstests (Benchmarks) zu definieren, die einen
Vergleich der verschiedenen Systeme erlauben. Mitglied des TPC sind alle führenden Da-
2
Ergebnisse finden sich auf http://www.tpc.org
-4-
Microsoft SQL-Server 2000
Anleitung
tenbankhersteller. So stellt beispielsweise der TPC-C Benchmark eine Mischung aus Leseund Update-Transaktionen dar.
Es zeigt sich, dass in Bezug auf die Geschwindigkeit bei der Ausführung von Transaktionen
und im Preis/Leistungsverhältnis für diesen speziellen Leistungstest der MS SQL Server
2000 vorne liegt.
Obwohl beide DBMS über ähnliche Funktionen verfügen, haben Untersuchungen3 gezeigt,
dass mit Oracle größere Datenbanken (im Schnitt 19 GB) als mit MS SQL-Server (im Schnitt
5 GB) verwaltet werden. Zudem laufen viele der großen Datenbanken auf UNIX-Servern unter Oracle, die nach der Erfahrung vieler Administratoren stabiler laufen.
Die Wahl des „richtigen“ DBMS ist bei der heutigen Leistungsdichte der „großen“ DBMS wie
z.B. MS SQL 2000 oder Oracle 8 bzw. die neuere Version 9 schon zu einer „philosophischen“ Frage geworden.
Auf jeden Fall sollte bei einem Auswahlprozess die Erfahrung der Systemadministratoren mit
den verschiedenen Serverbetriebssystemen NT und UNIX miteinbezogen werden. Allgemein
gilt ein Windows NT System als leichter administrierbar wie ein UNIX-System. In Bezug auf
die Stabilität wird dagegen UNIX meistens gegenüber Windows NT der Vorzug gegeben.
Ein nicht zu unterschätzender Punkt sind die Lizenzkosten der unterschiedlichen DBMS und
die Kosten für die Betriebssystemlizenzen, sowie die Mitlieferung von Tools im Standardlieferumfang. Hier schneidet der MS SQL Server besser ab.
Aufgrund der großen Verbreitung von Microsoft-Systemen kann auch auf ein größeres Potential von Datenbank-Entwicklern zurückgegriffen werden. Dies bringt ein deutliche Kostenersparnis bei der Anwendungsentwicklung für MS SQL Server.
Die eben angestellten Überlegungen gelten maßgeblich für Systemumgebungen mit ca. 1004
gleichzeitigen Benutzern eines DBMS. Bei größeren Benutzerzahlen und Datenbankgrößen
verschiebt sich der Schwerpunkt deutlich zu Oracle.
3
IDC, International Data Corporation
4
MS SQL Server and Oracle 7 Cost-to-Use for Under 50 Concurrent Users, Microsoft Tec. Information, Dec. 2000
-5-
Microsoft SQL-Server 2000
Anleitung
2 Datenbank erstellen
Um unter SQL Server 2000 eine Datenbank zu erstellen, haben Sie folgende drei Möglichkeiten:
•
Den Datenbankerstellungs-Assistenten
•
Den SQL Server Enterprise Manager
•
Die Anweisung CREATE DATABASE
Wir erstellen zunächst eine Datenbank mit Hilfe der Befehlseingabe.
Dazu müssen Sie den SQL Server
Query Analyzer starten
(Start, Programme, Microsoft SQLServer, Query Analyzer).
Im Query Analyzer erfolgt auch allgemein die Eingabe von SQLAnweisungen.
Beachten Sie, dass ein SQL-Befehl nicht mit der Eingabetaste bestätigt wird, sondern mit F5
(=Ausführen)
Die Syntax der create database-Anweisung lautet:
CREATE DATABASE database_name
[ ON
[ < filespec > [ ,...n ] ]
[ , < filegroup > [ ,...n ] ]
]
[ LOG ON { < filespec > [ ,...n ] } ]
[ COLLATE collation_name ]
[ FOR LOAD | FOR ATTACH ]
< filespec > ::=
[ PRIMARY ]
( [ NAME = logical_file_name , ]
FILENAME = 'os_file_name'
[ , SIZE = size ]
[ , MAXSIZE = { max_size | UNLIMITED } ]
[ , FILEGROWTH = growth_increment ] ) [ ,...n ]
< filegroup > ::=
FILEGROUP filegroup_name < filespec > [ ,...n ]
Die einzelnen Befehle bedeuten:
•
database_name - Der Name der gesamten Datenbank.
•
ON ...- Gibt an, zu welcher Dateigruppe diese Datenbank gehört. Die standardmäßige
Dateigruppe ist Primary.
•
LOG ON Hier werden die Protokolldateien beschrieben.
•
•
Collate – Diese Angabe bezieht sich auf die Standardsortierung.
FOR LOAD | FOR ATTACH Die erste Angabe bezieht sich auf die Kompatibilität zu
früheren Versionen von SQL Server, die zweite Angabe hat etwas mit dem Anhängen
von Dateien an Betriebssystemdateien zu tun.
•
FILENAME - Dieser Parameter enthält den Pfad und den Dateinamen der Datei, in die
Ihre Daten auf der Festplatte gespeichert werden sollen.
•
SIZE - Dieser Parameter gibt an, wie groß die Datenbank werden soll. Sie können
den Wert entweder in Megabyte oder Kilobyte angeben. Vorgabewert ist die Größe
-6-
Microsoft SQL-Server 2000
Anleitung
der model- Datenbank. Um die Größe in Megabyte oder Kilobyte anzugeben, hängen
Sie entweder MB oder KB an Ihren Wert an. Wenn Sie beispielsweise hier 10 Mbyte
angeben, würde eine 10 Mbyte große Datei erstellt.
•
MAXSIZE - Dieser Parameter gibt an, bis zu welcher maximalen Größe Ihre Daten-
bank dynamisch anwachsen kann. Falls Sie hier nichts angeben und die autogrowth
Option eingestellt ist, kann Ihre Datenbank bis zur Größe Ihrer Festplatte anwachsen.
Dieser Parameter kann ebenfalls entweder in Megabyte oder Kilobyte angegeben
werden.
•
FILEGROWTH - Dieser Parameter gibt an, welche Schrittweite für die dynamische
Größenänderung Ihrer Datenbank verwendet wird. Dieser Wert kann entweder in
Megabyte, Kilobyte oder als prozentualer Anteil der Dateigröße zum Zeitpunkt der
Größenänderung angegeben werden. Falls Sie hier nichts angeben wird der Vorgabewert von 1 Mbyte verwendet.
•
LOG ON - Gibt an, wo sich die Transaktionsprotokolle befinden, und welche Größe sie
besitzen.
•
FOR LOAD - Dieser Parameter markiert diese Datenbank für die ausschließliche Ver-
wendung durch die Datenbankbesitzer (dbo). Dieser Parameter ist nur aus Gründen
der Abwärtskompatibilität vorhanden, und sollte in SQL Server 2000 nicht verwendet
werden.
•
FOR ATTACH - Dieser Parameter fügt einen Satz von Dateien an, die eine Datenbank
darstellen. Diese Dateien müssen vorher erstellt und dann vom SQL Server getrennt
worden sein.
Aufgabe: Erstellen Sie eine neue Datenbank namens Testdaten mit der folgenden Befehlsfolge im SQL Server Query Analyzer:
Nach der Eingabe mit F5 bestätigen!
Es erfolgt die Meldung:
Der CREATE DATABASE-Prozess reserviert 2.00 MB auf dem Datenträger 'Testdaten'.
Der CREATE DATABASE-Prozess reserviert 1.00 MB auf dem Datenträger 'Test_log'.
Die Datei Testdaten ist Bestandteil der Gruppe Primary. Dies ist die standardmäßige Dateigruppe. Die Verwendung von Dateigruppen kann Vorteile sowohl für die Administration als
auch für die Leistung der Datenbank haben. Durch verschiedene Dateigruppen kann bei
großen Datenbanken die Zugriffsgeschwindigkeit vergrößert werden, wenn die einzelnen
Dateien auf verschiedenen Festplatten untergebracht werden.
Die anfängliche Größe der Datei beträgt 2 MB, die maximale Größe ist 20 MB. Sie wird in
Schritten von 1 MB vergrößert.
-7-
Microsoft SQL-Server 2000
Anleitung
Es wird außerdem eine Transaktionsdatei mit dem Namen Testlog erzeugt (1 MB Anfangsgröße, 10 MB Maximum, Vergrößerung in Schritten von 1 MB.
Um anschließend die Datenbank auszuwählen, aktivieren Sie den
Listenpfeil bei DB in der Symbolleiste und klicken auf Aktualisieren.
Anschließend ist die Datenbank Test in der Auflistung enthalten.
3 Tabellen erstellen
Um Tabellen erstellen zu können, müssen Ihnen die Datentypen in SQL Server bekannt sein:
Gruppe
Datentyp
Bemerkung
Zeichenkette
char(n), varchar
Speichert Zeichenketten.
Binär
binary(n), varbinary in Paaren
von 2 Byte
Speichert binäre Daten.
Ganzzahl
int, smallint, tinyint
Speichert ganzzahlige Werte.
Ungefähr numerisch float, real
(Gleitkomma)
Speichert ungefähr numerische (Gleitkomma)
Werte.
Genau numerisch
decimal, numeric
Speichert genaue numerische Werte.
Besonders
bit, text, image
Speichert ein einzelnes Bit, Zeichendaten größer als 8000 Byte oder Bilddaten.
Datum und Zeit
datetime, smalldatetime
Speichert Datums- und Zeitwerte.
Währung
money, smallmoney
Speichert Währungswerte.
Systemgeneriert
timestamp
Speichert Werte von Datentypen, die automatisch vom SQL Server erstellt oder inkrementiert werden.
Synonym
Ordnet ANSI-Datentypen Datentypen des SQL
Server zu.
Benutzerdefiniert
Datentypen, die Sie zur Speicherung von Daten selbst definieren können.
Berechnete Spalte
Speichert den Ausdruck, der zur Berechnung
der Spalte verwendet wird. Beachten Sie, dass
hier nicht die Ergebnisdaten, sondern lediglich
die Ausdrücke gespeichert werden, die die
Ergebnisdaten erzeugen.
Unicode
Nchar, ntext, varchar
Speichert Daten im Unicode-Format (ein Doppelbyte pro gespeichertem Zeichen).
Zum Erstellen von Tabellen gibt es wieder zwei Möglichkeiten:
a) die Befehlseingabe über den Query Analyzer in Transact-SQL
b) den Enterprise Manager
zu a) die Syntax zur Erstellung einer Tabelle lautet:
-8-
Microsoft SQL-Server 2000
Anleitung
CREATE TABLE
CREATE TABLE [Datenbank.[Besitzer.]Tabellenname
(
Spaltenname Datentyp [Identität|Einschränkung|NULL|NOT NULL]
[...]
)
Aufgabe: Erstellen Sie in der geöffneten Datenbank Test folgende Tabelle:
CREATE TABLE Mitarbeiter
(
mitarb_id tinyint Primary key IDENTITY NOT NULL,
Vorname char(15),
Name char(20) NOT NULL,
Strasse varchar(30),
Postfach varchar(30),
Plz char(5),
Anfangsdatum datetime
)
An der Syntax sehen Sie, dass jeweils zuerst das Feld, dann der Datentyp und (bei den
meisten Feldern) die Länge genannt wird.
Z. B.die Zeile:: Ort varchar(30) legt das Feld Ort als Zeichenfeld (char = charakter =
Buchstabe) mit 30 Zeichen Länge an.
Nur das erste Feld muss noch genauer erklärt werden:
Primary key
Dieses Feld ist der Primärschlüssel der Tabellel
IDENTITY
Gibt an, dass es sich bei der neuen Spalte um eine Identitätsspalte
handelt. Wenn eine neue Zeile zur Tabelle hinzugefügt wird, stellt
SQL Server einen eindeutigen Wert für die Spalte bereit (wird jeweils
inkrementiell um 1 erhöht, wie Autowert in Access)
Not null
Das Feld darf nicht leer bleiben
Aufgabe: Löschen Sie jetzt zunächst die Befehlszeilen im Query Analyzer und geben Sie
dann den Befehl ein: select * from mitarbeiter
Obwohl noch keine Daten eingegeben wurden, zeigt der Query Analyzer schon
die Spalten der neuen Tabelle an:
4 Daten über SQL eingeben
Die erste Tabelle, die im SQL Server erstellt wurden, soll jetzt dazu verwendet werden, über
SQL-Anweisungen auch Daten einzufügen.
Die allgemeine Syntax dazu lautet:
INSERT INTO Tabellenname
(Spalte1, Spalte2...)
VALUES (Wert1, Wert2...)
-9-
Microsoft SQL-Server 2000
Anleitung
Aufgabe: Verwenden Sie den nachfolgenden Befehl, um einen Mitarbeiter in die Tabelle
Test einzugeben (Voraussetzung: Die Datenbank Test ist geöffnet)
INSERT INTO Mitarbeiter
(Vorname, Name, Strasse, Ort, PLZ)
VALUES ('Gerd', 'Faber', 'Schönhauser Strasse','Köln','50968')
Aufgabe: Lassen Sie sich das Ergebnis anzeigen:
Aufgabe: Nehmen Sie ebenfalls die folgenden Mitarbeiter auf:
Anna
Moltke
Bonner Strasse
Köln
50968
Peter
Holzmann
Rathausstrasse 49
Troisdorf 53844
Karin
Grosser
Poststrasse 23
Troisdorf 53844
Heinz
Lindemann
Rheinuferweg 45
Köln
50986
Aufgabe: Lassen Sie sich jetzt die Mitarbeiter anzeigen (select * from Mitarbeiter)
Aufgabe: Erstellen Sie in derselben Datenbank eine Tabelle Abteilung. Diese Tabelle soll
aus den Feldern Abt_id, Abt_Name, Abt_Leiter und Mitarb_id bestehen. Überlegen Sie selbst sinnvolle Datentypen.
)
4.1 Datenbanken mit dem Enterprise Manager erstellen
Der zweite Weg zur Anlage einer Datenbank erfolgt über den Enterprise Manager.
Über Start, Programme, Microsoft SQL Server , Enterprise Manager starten Sie den Enterprise Manager.
- 10 -
Microsoft SQL-Server 2000
Anleitung
Klicken Sie auf das PlusZeichen, bis Sie Ihren Server
am roten Blitz erkennen:
Öffnen Sie weiter mit dem PlusZeichen, bis der Ordner Datenbanken geöffnet ist:
Im Kontextmenu mit der rechten
Maustaste erreichen Sie den Befehl
Neue Datenbank
Verwenden Sie den Namen Test2
und stellen Sie die Angaben zur
Datenbank- und zur Transaktionsprotokolldatei ein.
Zum Bestätigen klicken Sie auf
OK.
4.2 Datenbanken mit dem Assistenten einrichten
Über den Enterprise Manager erreichen Sie auch den Assistenten zum Einrichten einer neuen Datenbank. Gehen Sie folgendermaßen vor, wenn Sie den Datenbankerstellungsassistenten verwenden wollen:
- 11 -
Microsoft SQL-Server 2000
Anleitung
Klicken Sie auf die + Zeichen, bis Sie Ihren
Server und den Ordner Datenbanken erreicht
haben.
Wählen Sie dann den Befehl
Extras Assistenten
Klicken Sie Datenbank und dann
Datenbankerstellungsassistent auf:
Zunächst erscheint ein Willkommensbildschirm.
Klicken Sie auf Weiter.
Im folgenden Schritt wird der Name der
Datenbank (Test3) und der Speicherort
bestimmt.
Klicken Sie dann auf Weiter.
Im nächsten Schritt können Sie die anfängliche Datenbankgröße festlegen
In diesem Schritt geht es um die Vergrößerung der Datenbank:
- 12 -
Microsoft SQL-Server 2000
Anleitung
Hier werden die Transaktionsprotokolldateien festgelegt
Auch hier geht es um die Schritte zur
Vergrößerung der Dateien:
Dies ist der letzte Schritt.
Klicken Sie auf Fertigstellen.
Der Assistent fragt, ob Sie auch einen Datenbankwartungsplan erstellen wollen.
Bestätigen Sie mit Ja, um sich die einzelnen Schritte anzusehen, die hier nicht alle abgedruckt werden sollen.
4.3 Tabellen mit dem Enterprise Manager erstellen
Um Tabellen mit dem Enterprise-Manager zu erstellen, rufen Sie Ihren Server im Konsolenstamm auf und öffnen die Datenbank, in der die Tabelle erstellt werden soll. Sie sehen dann
im Inhaltsbereich eigene Tabellen und Systemtabellen:
- 13 -
Microsoft SQL-Server 2000
Anleitung
Um eine neue Tabelle zu erstellen, klicken Sie in der rechten Fensterhälfte auf die rechte
Maustaste und wählen den Befehl Neue Tabelle.
Hier können die Felder der Tabelle
definiert werden.
Wenn die Eingabe beendet ist, klicken Sie auf das Symbol zum Speichern.
Dabei wird nach dem Namen der
Tabelle gefragt. Nennen Sie die Tabelle Dienstwagen.
Aufgabe: Richten Sie mit dem Enterprise Manager eine Tabelle Dienstwagen in der Datenbank Test ein. Die Tabelle soll die folgenden Felder enthalten:
Auto_Id
Bestimmen Sie selber die
Autonummer
Felddatentypen.
Marke
Typ
PS
Baujahr
Kaufdatum
Kaufpreis
5 Projekte in Access
Im folgenden soll das Zusammenwirken von Access und SQL Server mit Hilfe von Projekten
getestet und ausprobiert werden. Der folgende Auszug aus der Access-2000-Hilfe (kursiv)
erläutert, was ein Projekt ist:
5.1 Was ist ein Microsoft Access-Projekt?
Ein Microsoft Access-Projekt (.adp) repräsentiert eine neue Art von Access-Datei, die einen eigenen effizienten Zugriff auf eine
Microsoft SQL Server-Datenbank über die
OLE DB-Komponentenarchitektur ermöglicht.
Mit einem Access-Projekt können Sie eine
Client/Server-Anwendung genauso einfach
erstellen wie eine Dateiserver-Anwendung.
Eine solche Client/Server-Anwendung kann
eine herkömmliche Lösung auf der Grundlage
von Formularen und Berichten sein oder eine
webbasierte Lösung unter Verwendung von
Datenzugriffseiten oder eine Kombination von
beidem.
Ein Access-Projekt wird als "Projekt" bezeichnet, da es nur code-basierte oder HTMLbasierte Datenbankobjekte enthält: Formulare, Berichte, Datenzugriffsseiten, Makros und
Module. Dies sind die Datenbankobjekte, die Sie zur Erstellung einer Anwendung verwenden. Anders als eine Microsoft Access-Datenbank enthält ein Access-Projekt keine Daten
oder an Datendefinitionen gebundene Objekte, also keine Tabellen, Sichten,
Datenbankdiagramme oder Gespeicherte Prozeduren (die auch anwendungsbezogenen
- 14 -
Microsoft SQL-Server 2000
Anleitung
Code enthalten können). Stattdessen werden diese Datenbankobjekte in der SQL ServerDatenbank gespeichert.
Dazu soll die Datenbank Winter01 mit der IHK-Prüfungsaufgabe zunächst im SQL Server
erstellt und dann in Access als Frontend bearbeitet werden.
Aufgabe: Erstellen Sie die Datenbank Winter01 mit dem Enterprise Manager.
Öffnen Sie dann die Datenbank und markieren Sie
Tabellen
Dann können Sie den Befehl
Vorgang Neue Tabelle
verwenden.
Aufgabe: Richten Sie jetzt die erforderlichen Tabellen ein. Am Beispiel der Tabelle Dozent
sehen Sie:
Aufgabe: Legen Sie die anderen Tabellen nach demselben Schema an. Orientieren Sie
sich an den Daten, die auf den Tabellen des beiliegenden Blattes dargestellt
sind.
5.2 Access als Frontend für den SQL Server
Unter „Frontend“ versteht man die Oberfläche, die – gewissermaßen an „vorderster Front“
zugrunde liegt. In diesem Fall soll die Leistungsfähigkeit der „großen“ Client-ServerDatenbank und die Benutzerfreundlichkeit der „kleinen Schwester“ Access verbunden werden. Die Datenbank an sich wird auf dem SQL-Server bereitgehalten, die Pflege der Tabellen, das Gestalten von Abfragen usw. kann mit Access erfolgen.
Man spricht von einem „Projekt“, wenn Access Dienste für den SQL Server übernimmt. Deshalb zu Beginn in Access der Befehl:
Datei Neu
Im Dialogfeld wählen Sie
Projekt
(bestehende Datenbank)
- 15 -
Microsoft SQL-Server 2000
Anleitung
dann OK
Klicken Sie auf OK. Vergeben Sie den Namen Winter01 .Klicken Sie dann auf die Schaltfläche Erstellen.
Im nächsten Schritt sehen Sie die Verknüpfungseigenschaften
Geben Sie hier Ihren Servernamen ein
Bei Punkt 2:
Integrierte Sicherheit von Windows NT
Bei Punkt 3 schließlich der Name der Serverdatenbank
Dann mit OK bestätigen.
Anschließend sehen Sie die Datenbank in ähnlicher Form, wie Sie es von Access her kennen. (in der Abbildung nur mit den beiden ersten Tabellen)
- 16 -
Microsoft SQL-Server 2000
Anleitung
Wenn Sie über Access die Daten eingegeben haben, können Sie über den Query Analyzer
vom SQL Server wieder abrufen:
6 Sichten erstellen
Während der Beschäftigung mit Access haben Sie Abfragen als gespeicherte Filter kennen
gelernt; häufig gestellte Fragen an den Datenbestand werden als Abfrage erstellt. In einer
Abfrage sind bekanntlich nicht die Daten gespeichert, sondern nur die Frage an den Datenbestand, ähnlich wie Sie eine Frage mit dem Select-Befehl mit SQL erstellen und ein Ergebnis angezeigt bekommen. Dieses Ergebnis - die sichtbaren Daten – sind in Access auch als
Dynaset bezeichnet worden. Dynaset bedeutet: Dynamisches Set von Daten. Wenn die Abfrage zu einem späteren Zeitpunkt verwendet wird, dann resultieren andere Daten aus der
selben Abfrage.
Beim SQL Server spricht man nicht von Abfragen, sondern von Sichten (engl. View). Wenn
eine Datenbank nur von Ihnen verwendet wird, dann ist eine Sicht nichts anderes als eine
Abfrage. Aber bei der Client-Server-Datenbank kommt der Aspekt der Zugriffsberechtigung
durch verschiedene Benutzer dazu. Eine Sicht ermöglicht es, genau anzugeben, wie ein Benutzer die Daten sehen soll. Die folgende Aufzählung aus dem Buch von Richard Waymire,
SQL Server 7.0, fasst den Sinn von Sichten zusammen:
•
Sie ermöglichen eine Kontrolle über das, was der Benutzer sehen darf, was
sowohl aus Sicherheits- wie auch Bedienungsgründen nützlich ist. Der Benutzer braucht sich nicht mehr mit Zusatzinformationen zu befassen, die ihn nicht
interessieren.
•
Sie vereinfachen die Bedienerführung bei oft verwendeten Abfragen. Hierdurch
ist der Benutzer in der Lage, die Sicht mit einer einfachen Anweisung ablaufen
- 17 -
Microsoft SQL-Server 2000
Anleitung
lassen zu können, anstatt jedes Mal eine Anzahl von Parametern mitgeben zu
müssen.
•
Sie bieten Sicherheit. Die Benutzer haben die Kontrolle nur über das, was Sie
sie auch sehen lassen. Dies kann eine Untermenge von Zeilen oder Spalten,
statistische Informationen oder eine Untermenge von Informationen aus anderen Sichten sein.
•
Da eine Sicht ein Datenbankobjekt darstellt, können Sie ihr Benutzerberechtigungen zuweisen, was viel effizienter ist, als dieselben Berechtigung einzelnen
Spalten in einer Tabelle zuzuweisen.
Im Programm MS-SQL-Server erstellen wir jetzt zunächst Sichten mit dem Enterprise Manager. Dazu soll die Beispieldatenbank Pubs (=publishers) verwendet werden, die bei der
Standard-Installation von SQL-Server zur Verfügung steht.
Aufgabe: Starten Sie den Enterprise
Manager. Öffnen Sie die
Datenbank Pubs
(= publishers, dt. Verlage).
Klicken Sie mit der rechten Maustaste auf Neue Sicht
Sie sehen, dass der Bildschirmaufbau
den Abfragen von Access ähnelt:
Klicken Sie auf
, um die Liste der
Tabellen
anzeigen
zu
lassen:
Gehen Sie jetzt so vor:
⇒
Wählen Sie authors, titleauthor und title
- 18 -
Microsoft SQL-Server 2000
⇒
⇒
Klicken Sie dann die Kästchen bei au_lname und title an
Sie können sehen, welcher SQL-Befehl dabei erzeugt wird:
SELECT
FROM
⇒
Anleitung
dbo.authors.au_lname, dbo.titles.title
dbo.authors INNER JOIN
dbo.titleauthor ON dbo.authors.au_id = dbo.titleauthor.au_id INNER JOIN
dbo.titles ON dbo.titleauthor.title_id = dbo.titles.title_id
Klicken Sie das rote Ausrufungszeichen zum Ausführen der Sicht:
Sie sehen dann unten im Ergebnisbereich direkt die Zusammenstellung von Autoren
und Titeln:
Aufgabe: Speichern Sie die Sicht mit dem Namen Autoren_Titel. Schließen Sie dann die
Sicht.
Wenn mit einer bereits bestehenden Datenbank gearbeitet wird, dann ist es erforderlich, zunächst etwas über die Tabellen und deren Beziehungen zu wissen. Wenn wir beispielsweise
im Sicht-Entwurfs-Bildschirm nur die Tabellen Autors und Title ausgewählt hätten, dann wäre
- 19 -
Microsoft SQL-Server 2000
Anleitung
das Ergebnis ein Cross Join gewesen, also die Verbindung von jedem Autor mit jedem Buch.
Deshalb ist es sinnvoll, sich zunächst das Datenbankdiagramm zu erstellen bzw. anzeigen
zu lassen:
Aufgabe: 1) Bei geöffneter Datenbank Pubs
soll nun Diagramme markiert
werden.
2) rechte Maustaste für das Kontextmenü:
3) den Assistenten abbrechen (er führt m. E. nicht zu übersichtlichen Ergebnissen),
4) Tabelle hinzufügen
6) Wählen Sie die Tabellen aus, die nicht mit
sys beginnen (Systemtabellen).
7) Anschließend durch Schieben mit der Titelleiste noch etwas platzsparender anordnen
Dann sehen Sie die Beziehungen zwischen allen Tabellen der Datenbank:
6.1 Kriterien in Sichten
In Sichten wie auch in Abfragen werden Krierien vergeben. Das sind die Einschränkungen,
das, was beim Suchen beachtet werden soll. Dem entspricht die where-Klausel in der Select-Abfrage. Als Beispiel sehen Sie in der folgenden Abbildung eine Sicht, die aus der Tabelle authors diejenigen sucht, die aus dem Staat Kalifornien (CA) kommen und einen
Contract haben.
- 20 -
Microsoft SQL-Server 2000
Anleitung
Aufgabe: Erstellen Sie diese Sicht und speichern Sie mit dem Namen Autor_1 .
Um die folgenden Aufgaben zu lösen, ist es zum Teil erforderlich, die Tabellen zu öffnen und
die Feldeigenschaften und –inhalte zu sehen, zum Teil auch, das vorher erstellte komplette
Datenbankdiagramm ( hier auch: Abbildung S. 20) anzusehen, um zu wissen, welche Tabellen in die Sicht aufgenommen werden müssen.
Übungsaufgaben zum Erstellen von Sichten mit dem Enterprise Manager:
1)
Welche Autoren (Name und Adresse) schreiben Bücher vom Typ business?
2)
Erstellen Sie eine Sicht, die die Titel auflistet, die netto innerhalb 30 Tagen gezahlt werden müssen (payterms: net 30 aus der Tabelle sales)
- 21 -
Microsoft SQL-Server 2000
Anleitung
3)
Welche Titel und welche Autoren vertreibt der Verlag New Moon Books?
4)
Bei welchen Verlagen (publisher) sind die Autoren verlegt, die in Oakland wohnen?
5)
Welche Angestellten (employees) haben mit dem publisher Algodata Infosystems zu tun?
6)
Wie heißt der Verlag aus Frankreich?
7)
Listen Sie mit einer Sicht die Titel und die Verlage auf, die nach dem 01.01.1994 verkauft wurden (Tabelle sales verwenden!)
6.2 Sichten über Access als Frontend für bestehende SQL-Server-Datenbanken
Es ist ebenfalls möglich, Access zu verwenden, um mit Sichten auf den Datenbestand einer
SQL-Server-Datenbank zuzugreifen. Dies geschiegt über ein Projekt. Zusätzlich zum SQL
Server muss Access gestartet worden sein.
Wählen Sie dazu in Access den Befehl
Datei Neu, dann Projekt (Bestehende Datenbank)
Access fragt nach dem Dateinamen des Projekts und fordert zum Speichern auf:
- 22 -
Microsoft SQL-Server 2000
Anleitung
1. Geben Sie hier Ihren Ser
- vernamen an
2. Klicken Sie hier an, um das
Passwort von Windows
zu verwenden:
3. Erst dann kann man unter
Punkt 3) die Datenbank
(pubs) auswählen:
Anschließend haben Sie über
Access den Zugriff auf die
Tabellen der SQL-ServerDatenbank:
Sie haben ebenfalls Zugriff auf die vorher erstellten Sichten.
- 23 -
Microsoft SQL-Server 2000
Anleitung
Aufgabe: Erstellen Sie von Access aus eine Sicht auf die Datenbank pubs. Die Vorgehensweise ist nicht dieselbe wie im SQL Server:
Verwenden Sie zunächst:
Im leeren Sicht-Entwurfsbildschirm dann:
Symbol Tabellen hinzufügen,
auf das Plus-Symbol bei Tabellen klicken,
Es sollen die Tabellen jobs und employees verwendet werden. Aus diesen Tabellen wählen
Sie die angegebenen Felder und das Kriterium für job_desc (Job description= Beschreibung
der Tätigkeit) : Managing director.
Das Ergebnis wird so angezeigt:
Mit dem Projekt über Access liegt eine andere Vorgehensweise vor, wie man sich über Sichten den Zugriff auf die Daten erschließen kann. Die Darstellung ist meines Erachtens aber
über den Enterprise Manager übersichtlicher, weil auch die SQL-Befehlssyntax und das Ergebnis direkt auf einer Bildschirmansicht dargeboten werden.
- 24 -
Microsoft SQL-Server 2000
Anleitung
6.3 Sichten (Views) über SQL-Befehle erstellen
Wenn Sichten über SQL erstellt werden, dann sind sie genauso nutzbar wie die Sichten, die
zuvor über den Enterprise Manager erstellt worden sind: Es wird eine Betrachtungsweise der
Tabelle (oder mehrerer Tabellen) erzeugt, die man auch als „virtuelle Tabelle“ beschreiben
könnte. Für Nutzer der Datenbank werden Spalten der Tabelle abgefragt, mit oder ohne Einschränkung durch Kriterien (hier: Where-Klauseln). Wenn eine Sicht erzeugt wird, dann wird
kein Datenbankobjekt erzeugt, d. h. die Daten, die in Tabellenform abgerufen werden und
aussehen wie eine Tabelle, sind nicht tatsächlich physikalisch vorhanden, sie werden ja aus
der Datenbanktabelle selbst abgerufen, Wenn sich die zugrundeliegenden Daten in der Datenbank ändern, dann liefert auch die Sicht andere Daten.
Die SQL-Syntax für die Erstellung der Sicht lautet:
CREATE VIEW <Sichtname> [(Spalte1, Spalte2...)] AS
SELECT <Tabellenname.Spaltennamen>
FROM <Tabellenname>
WHERE <Bedingung>
Am Beispiel erklärt:
Wenn eine Select-Abfrage aus einer Tabelle Artikel die Felder ArtNr und Bezeichnung für
den Lieferanten mit der Lief_Nr 3 abfragt, dann lautet zunächst der SQL-Befehl:
Select ArtNr, Bezeichnung
from Artikel
where Lief_Nr=3
Dieser Select-Befehl müsste jedes Mal neu gegeben werden, wenn man diese Informationen
haben möchte; deshalb ist es sinnvoll, eine Sicht zu erzeugen, die später immer wieder zur
Verfügung steht. Wenn im vorliegenden Beispiel die Select-Abfrage als Sicht mit dem Namen Art_Sicht erzeugt werden soll, dann heißt der Befehl:
create View Art_sicht as
Select ArtNr, Bezeichnung
from Artikel
where Lief_Nr=3
Am Beispiel des Query Analyzer im Programm MS-SQL-Server sollen jetzt Beispiele für
Sichten eingeübt werden.
Aufgabe: Öffnen Sie den Query Analyzer. In diesem Programm soll dann die Datenbank
Pubs geöffnet werden:
) dann sehen Sie (Ausschnitt):
Wenn Sie alle Felder auflisten (
Das erste Beispiel soll eine Sicht mit dem Namen Vertragsautor erzeugen, die aus der Tabelle authors die Felder au_lname und au_fname abfragt, und zwar für die Autoren, die
einen Vertrag (contract) haben.
Aufgabe: Erstellen Sie zuerst eine
Abfrage dazu (zum Testen
am Besten geeignet):
select au_lname, au_fname
from authors
where contract=1
- 25 -
Microsoft SQL-Server 2000
Anleitung
Wenn die Abfrage die richtigen Ergebnisse liefert, dann kann der create view-Befehl einfach
dazugesetzt werden
create view Vertragsautor as
select au_lname, au_fname
from authors
where contract=1
Es geschieht scheinbar nichts, wenn Sie F5 gedrückt haben, nur in der Statuszeile wird gemeldet:
Um die Ergebnisse der
Sicht zu sehen, rufen Sie
sie auf wie eine Tabelle:
Die Sicht ist jetzt gespeichert und jederzeit nutzbar, wenn die Datenbank pubs offen ist.
Auch im Enterprise Manager sieht man sie in der Auflistung der Sichten:
6.4 Sicht erstellen, die Informationen aus verschiedenen Tabellen bereitstellt
Im folgenden Beispiel soll eine Sicht erzeugt werden, die auf zwei Tabellen basiert, die miteinander in Beziehung stehen. Die Tabelle jobs enthält die folgenden Felder und Inhalte:
Der rechts stehende Auszug aus dem
Datenbankdiagramm zeigt die 1:nBeziehung zwischen den Tabellen jobs
und employee
- 26 -
Microsoft SQL-Server 2000
Anleitung
Die Tabelle employee, die hier nur im Ausschnitt wiedergegeben wird:
Die folgende Abfrage selektiert die Felder Job-Beschreibung (job_desc aus der Tabelle
Jobs), außerdem Vorname und Name (fname, lname) aus der Tabelle Employee. Dabei
werden Aliasnamen für die Tabellen verwendet:
select j.job_desc, e.fname,e.lname
from jobs as j, employee as e
where j.job_id=e.job_id
Ergebnisse (im Ausschnitt)
Noch besser ist es, wenn man direkt die Spaltenüberschriften so umbenennt, wie man sie
sehen will:
select j.job_desc as Tätigkeit, e.fname as Vorname,e.lname as Name
from jobs as j, employee as e
where j.job_id=e.job_id
Wenn man weiß, wie die select-Abfrage lautet, dann ist die Sicht einfach zu erzeugen:
SQL-Befehl zum Erzeugen der Sicht mit Namen Job-Liste:
create View Job_Liste as
select j.job_desc as Tätigkeit, e.fname as Vorname,e.lname as Name
from jobs as j, employee as e
where j.job_id=e.job_id
Um später auf die Sicht zuzugreifen, ist dann der Select-Befehl so möglich:
select * from Job_Liste
Aufgabe: Erzeugen Sie jetzt folgende Sichten zur Datenbank Pubs:
1. Eine Sicht namens CA soll alle Felder sämtlicher Autoren aus dem Staat Kalifornien (CA)
zeigen.
2. Eine Sicht namens 20 soll die Felder title, prime und pubdate zeigen, die mehr als 20
DM kosten.
3. Eine Sicht namens Titel_Autoren soll Autoren und deren Buchtitel anzeigen (welcher
Autor schrieb welches Buch)
4. Eine Sicht namens Sales soll die Bücher (mit Feldüberschriften auf deutsch) anzeigen,
die nach dem 01.01.1994 bestellt wurden (ord_date in der Tabelle Sales)
- 27 -
Microsoft SQL-Server 2000
Anleitung
Befehlssyntax einer Sicht anzeigen lassen:
ergibt: (Vorausgesetzt, die Sicht mit dem Namen Vertragsautor existiert (s. S. 25)
Auf diese Art ist es möglich, sich nachträglich die SQL-Syntax zu dem Thema anzeigen zu
lassen.
6.5 Berechnungen in Sichten:
Es ist bekanntlich in SQL-Abfragen möglich, Felder mit numerischen Daten zu verwenden,
um damit Berechnungen durchzuführen. Bezogen auf die Datenbank Pubs:
select title, (price*ytd_sales) as gesamt
from titles
Dies ergibt:
....
Daraus kann nach normaler Methode (mit dem Befehl create view) eine Sicht erstellt werden,
die dann jederzeit in aktualisierter Form aufgerufen werden kann:
create view Gesamtverkauf as
select title, (price*ytd_sales) as gesamt
from titles
Diese Sicht kann dann später benutzt werden, um damit weitere Bedingungen an die Analyse des Datenbestands zu stellen:
select * from gesamtverkauf
where gesamt is Null
Mit dieser Sicht werden dann nur die Bücher angezeigt, bei denen das berechnete Feld keinen Wert enthält.
- 28 -
Microsoft SQL-Server 2000
Anleitung
7 Benutzerkonten
Benutzerkonten können entweder über sp_addlogin (Query Analyzer) oder über den Enterprise Manager hinzugefügt werden.
Um einen neuen Benutzer einzurichten, muss zunächst ein Benutzer in Windows 2000 existieren. Durch die Windows-NT-Authentifizierung wird ja erreicht, dass sich jemand in Windows anmeldet und dadurch auch Berechtigungen für den SQL Server erhält.
Aufgabe: Wählen Sie aus der WindowsSystemsteuerung Benutzer
und Kennwörter und richten
Sie einen neuen Benutzer
Paul ein:
Geben Sie ein Kennwort und richten einen Standardbenutzer (ohne Admin-Rechte) ein.
Wenn sich der Administrator jetzt in Windows abmeldet und eine Neuanmeldung als Paul
durchgeführt wird, dann kann er zunächst nicht mit dem SQL Server arbeiten:
Es ist zunächst erforderlich, als Administrator zu arbeiten und dort eine neue Anmeldung für
Paul durchzuführen.
Aufgabe: Starten Sie den Enterprise
Manager (vorher als Administator
anmelden) .
Wählen Sie dann Sicherheit, Benutzernamen
- 29 -
Microsoft SQL-Server 2000
Anleitung
rechte Maustaste auf Benutzernamen:
Klicken Sie dort auf die kleine Schaltfläche
mit den drei Pünktchen.
hier erscheint Paul Martens:
Dann: Hinzufügen anklicken
(Domäne ist Havelring)
unten im Dialogfeld:
Berechtigung nur für die Datenbank pubs gewähren:
Aufgabe: Wählen Sie Eigenschaften,
Datenbankzugriff:
Sie sehen Paul als Benutzer der Datenbank
pubs.
- 30 -
Microsoft SQL-Server 2000
Anleitung
Aufgabe: Melden Sie sich jetzt wieder als Administrator in Windows 2000 an.
Öffnen Sie (im Enterprise Manager) Datenbanken, pubs, Benutzer, dann sehen
Sie rechts:
Es ist also zusätzlich zum dbo (database owner) und dem eben eingerichteten Paul auch
noch ein guest (=Gast)Zugang offen. Über den Zugang als Gast kann jeder auf die Datenbank zugreifen.
Aufgabe: Öffnen Sie statt der Datenbank pubs jetzt die Datenbank Northwind und entfernen Sie dort den Gastzugang.
Für die Datenbank Northwind gibt es jetzt nur noch den sa
(=Systemadministrator) :
Aufgabe: Jetzt müssen Sie sich noch einmal als Paul anmelden. Versuchen Sie jetzt, auf
die Datenbank Northwind zuzugreifen. Sie erhalten die Meldung:
Aufgabe: Melden Sie sich noch einmal als Administrator an.
Gehen Sie in den
Enterprise Manager, dort
auf:
Datenbanken, pubs, Benutzer, Paul:
rechts im Fenster auf Paul,
rechte Maustaste, Eigenschaften:
Sie sehen hier die Überschrift: Mitglied in Datenbankrollen Es muss jetzt geklärt werden,
was es mit den Rollen auf sich hat, und wie man eigene Rollen erstellen kann.
- 31 -
Microsoft SQL-Server 2000
Anleitung
8 Rollen
Rollen in der Datenbank SQL Server sind mit Gruppen in Windows vergleichbar. Durch Rollen werden Benutzer zu Gruppen zusammengefasst.
Jede Datenbank kann Rollen enthalten. Sie können auch eigene Rollen hinzufügen. Der folgende Teil (kursiv formatiert) ist wörtlich aus: Waymire, Richard, SQL Server 7 in 21 Tagen,
S. 193 ff:). In Bezug auf die Rollen unterscheidet sich SQL Server 2000 kaum von der Vorversion 7.0.
8.1 Die öffentliche Rolle
SQL Server 7.0 enthält eine eingebaute Rolle namens public (Öffentlich) in jeder Datenbank.
Alle Benutzer, Gruppen und Rollen sind Mitglieder der Rolle public und können nicht entfernt
werden. Stellen Sie sich die Rolle public als ähnlich der Gruppe Everyone (jeder) von Windows NT vor. Es ist eine bequeme Abkürzung, um sich auf alle Benutzer zu beziehen, ohne
sie explizit nennen zu müssen. Sie sehen eine Verwendung hiervon am Tag 6, »Arbeiten mit
Berechtigungen«. Wenn Sie Abbildung 5.14 noch mal betrachten, haben Sie den Gruppennamen public gesehen, der für die meisten Benutzer gezeigt wurde.
8.2 Serverweite Rollen
Was wir in der heutigen Lektion immer wieder sehen, ist, daß die Anmeldung sa allmächtig
ist und alles tun kann, was er oder sie momentan mit SQL Server tun möchte. Obwohl dies
wahr ist, liegt es in der Tat daran, daß die Anmeldung sa ein Mitglied der serverweiten Rolle
namens sysadmin ist. SQL Server hat sieben serverweite Rollen. Sie können eine Anmeldung jederzeit zu einem Mitglied von einer oder mehreren dieser serverweiten Rollen machen. Sie können aus der Liste der serverweiten Rollen jedoch nichts entfernen oder zufügen. Sie können sa aus der serverweiten Rolle sysadmin nicht entfernen.
8.2.1 Verfügbare serverweite Rollen
Die folgende Liste ist der vollständige Satz verfügbarer serverweiter Rollen. Studieren Sie sie
sorgfältig, so daß sie wissen, wann Sie sie verwenden sollten.
•
sysadmin - Mitglieder der Rolle sysadmin können alles im SQL Server tun. Sie scheinen der dbo von jeder Datenbank zu sein (selbst, wenn sie es nicht sind). Sie umgehen im wesentlichen die Berechtigungen und Sicherheitssysteme.
•
serveradmin - Mitglieder der Rolle serveradmin können Konfigurationsoptionen mit
der gespeicherten Systemprozedur sp_configure aufstellen und können den Server
herunterfahren. Serveroperator sind gute Kandidaten als Mitglieder dieser Rolle. Beachten Sie, daß Mitglieder dieser Rolle nur das Transact-SQL- Kommando SHUTDOWN geben können, um den Server herunterzufahren. Ihre Berechtigungen zur
Steuerung von Diensten sind Windows-NT-Rechte - nicht SQL-Server-Rechte.
•
setupadmin - Mitglieder der Rolle setupadmin können verknüpfte Server installieren
und konfigurieren und eine gespeicherte Prozedur markieren, so daß sie beim Hochfahren ausgeführt wird.
•
securityadmin - Mitglieder der Rolle securityadmin können Serveranmeldungen sowie
Berechtigungen zur Erstellung von Datenbanken erstellen und kontrollieren und können das Fehlerprotokoll von SQL Server lesen. Wieder sind Operatoren Kandidaten
für diese Rolle und wahrscheinlich ist Ihr Anwenderunterstützungspersonal ein Mitglied dieser Rolle.
•
processadmin - Mitglieder der Rolle processadmin können Prozesse steuern, die auf
dem Datenbankserver laufen. Dies beinhaltet typischerweise das »Killen« durchge-
- 32 -
Microsoft SQL-Server 2000
Anleitung
gangener Abfragen und Anwenderstützungspersonal braucht dieses Recht möglicherweise.
•
dbcreator - Mitglieder der Rolle dbcreator können Datenbanken auf Ihrem Server
erstellen und ändern. DBAs sind gute Kandidaten für diese Rolle (wenn Sie nicht wollen, daß Ihr DBA ein Mitglied der Rolle sysadmin ist).
•
diskadmin - Mitglieder der Rolle diskadmin können Dateien und das Dateiwachstum
auf dem Server verwalten. DBAs sind gute Kandidaten für diese Rolle (wenn Sie
nicht wollen, daß Ihr DBA ein Mitglied der Rolle sysadmin ist).
Zurück zum Benutzer Paul:
Aufgabe: Lassen Sie den Benutzer
Paul für die Rollen zu, die
Sie auf der nebenstehenden Abbildung sehen.
Klicken Sie jetzt (oben im Dialogfeld) auf Berechtigungen . Nun sehen Sie, dass Sie Paul
für jede Tabelle separat Rechte entziehen und gewähren können.
Sie können ein Feld anklicken, dann erscheint es grünes Häkchen:
noch einmal anklicken, wird der Zugriff verweigert:
.
Aufgabe: Geben Sie dem Benutzer Paul den folgenden Zugriff auf die Daten:
Tabelle authors:
nur select
Tabelle titles:
select, insert, update
Tabelle Titleauthors:
select, insert, update
- 33 -
Wenn Sie es
Microsoft SQL-Server 2000
Anleitung
Aufgabe: Melden Sie sich jetzt wieder als Paul an. Öffnen Sie den Enterprise Manager,
dann Datenbanken, Tabellen.
Öffnen Sie jetzt die Tabelle Authors (was möglich sein muss, denn Paul hat Leseberechtigung).
Versuchen Sie dann, den Namen eines Autors zu ändern: SQL Server wird jetzt
eine Fehlermeldung auf den Monitor bringen, denn dies ist nicht erlaubt (keine
update-Berechtigung).
Öffnen Sie jetzt die Tabelle Titles und ändern Sie einen Titel: Dies muss möglich
sein, denn hier sind die Berechtigungen vorhanden.
Im oben verwendeten Dialogfeld Berechtigungen sehen
Sie auch die Schaltfläche Spalten:
Dort können Sie – je nach vorher
markierter Tabelle – die Rechte
separat für bestimmte Spalten der
Tabelle gewähren oder entziehen.
Generell gilt, dass Benutzer meistens so viele Rechte wie möglich gerne für sich beanspruchen wollen. Sinnvoll ist es aber, Ihnen nur die Rechte zu gewähren, die auch tatsächlich
benötigt werden, und nicht „auf Vorrat“ zu viele Rechte!
Aufgabe: Richten Sie jetzt eine Benutzerin namens Andrea ein. (zuerst in Windows!).
Andrea soll Rechte für die Datenbank Northwind, aber nicht für Pubs erhalten.
Gewähren Sie jetzt:
Rechte
Tabellen
nur select:
Categorie, Customers
select, insert, update, delete
Orders, Order Details
gar keine Berechtigung
Employees
Aufgabe: Melden Sie sich dann als Benutzerin Andrea an und testen Sie alle Zugriffsmöglichkeiten.
- 34 -
Microsoft SQL-Server 2000
Anleitung
Aufgabe: Ergänzen Sie die Tabelle Mitarbeiter, Datenbank Test, um ein Feld Gehalt mit
folgenden Daten:
Aufgabe: Jetzt sollen die vorher eingerichteten Benutzer Paul und Andrea folgende Rechte
bezüglich dieser Tabelle haben:
Paul darf das Gehalt der Mitarbeiter sehen, aber nicht ändern, und
Andrea darf das Gehalt der Mitarbeiter gar nicht sehen (dies ist entweder mit
spaltenweiser Berechtigung oder mit einer Sicht möglich!).
9 Backup und Restore von Datenbanken
Im Enterprise Manager erreichen Sie den Befehl zum Sichern einer Datenbank über die
rechte Maustaste, wenn Sie die Markierung auf Datenbanken stellen:
Datenbanken, Alle Tasks, Datenbank sichern...
Als Datenbank erscheint zunächst die Master-Datenbank:
Aufgabe: Es soll eine Sicherung der Datenbank Northwind hergestellt werden.
Stellen Sie dazu oben Northwind ein und betätigen dann die Schaltfläche
Nun muss der Pfad und ein Dateiname angegeben werden:
Stellen Sie einen Pfad ein und vergeben Sie einen Dateinamen:
Bestätigen Sie insgesamt dreimal mit OK .
SQL Server meldet:
- 35 -
Microsoft SQL-Server 2000
Anleitung
Aufgabe: Löschen Sie jetzt (mit der rechten Maustaste) die Northwind-Datenbank. Im Meldungsfenster nehmen wir zunächst eine Option heraus:
Anschließend soll die Datenbank wiederhergestellt werden. Nehmen Sie dazu den Befehl
Datenbank, Alle Tasks, Datenbank wiederherstellen
Stellen Sie hier ein:
Dateigruppen oder Dateien
und wählen Sie dann auch hier die
Datenbank Northwind aus.
Kreuzen Sie das Kontrollkästchen
an:
Wenn das Ergebnis folgendes ist
und keine Tabellen usw. widerhergestellt werden, dann gehen Sie stattdessen so vor:
Im Dialogfeld Datenbank wiederherstellen
stellen Sie ein:
und gehen dann über die Schaltfläche
Dann wählen Sie im nächsten Dialogfeld Wiederherstellungsmedien wählen
Klicken Sie hier auf
Hinzufügen
und gehen Sie dann über die Schaltfläche mit den drei Pünktchen zu der
Datei, die vorhin angelegt wurde.
- 36 -
Microsoft SQL-Server 2000
Anleitung
Bestätigen die dann wider mehrmals mit OK Wenn die folgende Meldung erscheinen sollte:
Dann liegt es nur daran, dass oben im Dialogfeld noch die Master-Datenbank steht.
Wichtig ist also, dass die Datenbank Northwind als
wiederherzustellende Datenbank genannt ist..
Dann müssten von der Northwind-Datenbank alle Elemente wieder zu sehen sein.
Aufgabe: Kopieren Sie jetzt die Datei
aus dem Netzordner Public und
stellen Sie daraus die Datenbank aus der IHK-Prüfung (Winter 03) wieder her.
Dann müsste z. B. als Diagramm die folgende Darstellung zu sehen sein:
Aufgabe: Nun soll die differentielle Sicherung ausprobiert werden. Dies ist eine Teilsicherung, die verwendet wird, um zum Beispiel nur das, was seit der letzten Sicherung in der Datenbank verändert wurde, neu zu sichern.
Gehen Sie dazu so vor:
1. Erstellen Sie ein komplettes Backup der Datenbank pubs. Sehen Sie sich im Explorer die
Daten dazu an:
2. Öffnen Sie jetzt die Tabelle Jobs und fügen Sie unten eine neue Zeile an:
(die Nr. 15 nicht eintragen, es ist ein Autowert).
- 37 -
Microsoft SQL-Server 2000
Anleitung
3. Nehmen Sie jetzt wieder den Befehl Datenbanken, Alle Tasks, Datenbank sichern und
nehmen dort die Einstellung Datenbank differentiell vor:
4. Löschen Sie die Datenbank Pubs im Enterprise Manager.
Schauen Sie im Windows Explorer nach und vergleichen Sie die Dateiangaben zu der
Datenbanksicherung vorher (bei Schritt 2)
5. Stellen Sie die Datenbank wieder her und vergewissern Sie sich durch das Öffnen der
Tabelle Jobs davon, dass der hinzugefügte Datensatz wieder da ist.
10 Daten importieren
Zur Vorbereitung auf die nächsten Aufgaben soll zunächst gezeigt werden, wie Importe aus
anderen Datenformaten durchgeführt werden, hier exemplarisch am Beispiel einer ExcelTabelle.
Aufgabe: Kopieren Sie zunächst die Excel-Datei Abteilung.xls vom Netz auf Ihre
Festplatte.
Gehen Sie dann im Enterprise Manager folgendermaßen vor, um die Daten zu importieren:
1. Erstellen Sie zunächst eine neue Datenbank mit dem Namen SQL
2. Markieren Sie die Datenbank und wählen den Befehl Alle Tasks, Daten importieren
3. Das erste Dialogfeld heißt Sie nur Willkommen.
auf Weiter.
. Klicken Sie
4. Im nächsten Dialogfeld wird die Datenbank ausgewählt. Wählen Sie oben Excel 972000 und bei Dateiname die vorher kopierte Datei Abteilung.xls
- 38 -
Microsoft SQL-Server 2000
Anleitung
5. Im nächsten Dialogfeld muss das Ziel gewählt werden. Hier soll es die vorher erstellte
Datenbank SQL sein.
6. Im dann folgenden Dialogfeld geht es nur darum, ob Tabellen oder auch Abfragen
übertragen werden sollen. Belassen Sie es bei der Vorgane und Klicken auf Weiter.
7. Im nächsten Dialogfeld können Sie auf Alle Auswählen klicken, es handelt sich ja bei
der Datenquelle nicht um eine Datenbank, sondern nur um eine Excel-Datei:
8. Im nächsten Dialogfeld können Sie es bei der Vorgabe belassen und direkt auf
Weiter klicken:
9. Nachdem Sie zum Schluss auf die Schaltfläche Fertigstellen klicken, wird der Import
durchgeführt.
11 Select-Abfragen mit Transact-SQL-Statements
In diesem Kapitel sollen die Möglichkeiten von Select-Abfragen vertieft werden. Der SQLServer bietet Ihnen eine Reihe von Erweiterungen der SQL-Befehle, die vor allem hier anhand der Aggregat-Funktionen besprochen werden sollen.
Aufgabe: Starten Sie den Query Analyzer. Wählen Sie oben die Datenbank SQL.
Geben Sie jetzt das SQL-Statement:
select name, abteilung, gehalt from Abteilung
Sie sehen:
....
- 39 -
Microsoft SQL-Server 2000
Anleitung
Aufgabe: Geben Sie jetzt den Befehl:
select abteilung,sum(gehalt)
from Abteilung
group by abteilung
Das Ergebnis kennen Sie von früheren SQL-Übungen:
Sie sehen im Vergleich der beiden SQL-Befehle, dass entweder Zusammenfassungen oder
die Einzelergebnisse aus der Tabelle gezeigt werden. Mit dem Befehlszusatz compute
(=berechnen) ist es möglich, Detailzeilen und Zusammenfassungen geliefert zu bekommen.
Aufgabe: Testen Sie den Befehl:
select name,abteilung,gehalt from Abteilung
order by abteilung
compute sum(gehalt) by abteilung
Das Ergebnis ist:
Zu einer Abteilung wird jeweils als Zusammenfassung das Ergebnis geliefert.
Wichtig:
compute by kann nur zusammen mit order by
verwendet werden!
Im folgenden Beispiel wird compute ohne den Zusatz by (und das heißt dann, für die ganze
Tabelle) angewandt. Sie sehen, dass zuerst der normale select-Ausdruck erstellt wird und
dann die Zusammenfassung durch compute gemacht wird.
- 40 -
Microsoft SQL-Server 2000
Anleitung
Lassen Sie Gruppen nach
verheirateten und die nicht
verheirateten Mitarbeitern
bilden und zeigen Sie die
Summe des Gehalts:
Ohne Gruppierung ist die
Sortierung und dann die
Zusammenfassung möglich:
Im nächsten Beispiel sehen Sie, wie die
Gruppierung durch den Zusatz by erreicht
wird:
Je nach Gruppe wird dabei etwas berechnet.
- 41 -
Microsoft SQL-Server 2000
Anleitung
Sie können also die bekannten set-Funktionen (min, max, avg, sum) auf Gruppen anwenden und trotzdem die Einzelwerte sehen. Beachten Sie nur dabei, dass das Ergebnis nicht
relational ist, es liefert keine Tabelle zurück. Deshaln kann dieser select-Zusatz auch nicht
verwendet werden, wenn Sie mit select into Ergebnisse der Abfrage in eine neue Tabelle
überführen wollen.
Aufgabe: Ermitteln Sie name, gehalt und abschluss aus der Tabelle Abteilung. Jeweils
pro Abteilung soll der Mittelwert des Gehalts ermittelt werden.
Aufgabe: Ergänzen Sie die Abfrage so, dass zusätzlich zum Mittelwert auch das Minimum,
das Maximum und die Summe berechnet wird.
Aufgabe: Eine Abfrage soll den Namen und die Anzahl der Fehltage (Attribut krank_tage)
liefern. Außerdem soll Summe und Mittelwert dieser Fehltage berechnet werden,
gruppiert nach verheirateten und nicht verheirateten Mitarbeitern.
Aufgabe: Die folgende Abfrage soll den Namen und die Anzahl der Urlaubstage liefern. Je
nach Abteilung soll dabei der Mittelwert, Min und Max der Urlaubstage ausgegeben werden.
Lösungen:
1)
select name, gehalt, abschluss
from abteilung
order by abschluss
compute avg(gehalt) by abschluss
2)
select name, gehalt, abschluss
from abteilung
order by abschluss
compute avg(gehalt),min(gehalt), max(gehalt), sum(gehalt) by abschluss
3)
select name, krank_tage
from abteilung
order by verheiratet
compute sum(krank_tage),avg(krank_tage) by verheiratet
4)
select name, urlaubstage
from abteilung
order by abteilung
compute avg(urlaubstage), min(urlaubstage), max(urlaubstage) by abteilung
- 42 -
Microsoft SQL-Server 2000
Anleitung
11.1 Übungen zu SQL5
Verwenden Sie für die folgenden SQL-Übungen (bitte mit dem Query Analyzer durchführen)
die Datenbank pubs.
2. Sie möchten title_id, title und price für sämtliche Bücher abrufen, die eine Verleger-ID
(publisher ID) 0877 oder das Wort computer im Titel haben; außerdem soll der Preis
NOT NULL sein. Welches Transact-SQL müssen Sie dafür benutzen (Tip: Benutzen
Sie die Tabelle titles)?
3. Schreiben Sie eine Abfrage zum Abrufen sämtlicher Bücher in der Tabelle titles, die
Preise haben, die NOT NULL sind.
3. Schreiben Sie eine Abfrage zum Auflisten sämtlicher Buchtitel und Preise in der Tabelle titles in absteigender Sortierreihenfolge nach dem Preis.
4. Schreiben Sie eine Abfrage, die den Durchschnittswert der ytd_sales-Zahlen aus der
Tabelle titles in der Datenbank pubs liefert.
5. Schreiben Sie unter Verwendung der Klauseln GROUP BY und HAVING eine Abfrage, die sämtliche Bücher mit mehr als einem Autor findet (Tip: Benutzen Sie die die
Tabelle titleauthor).
6. Schreiben Sie unter Verwendung der COMPUTE BY-Klausel eine Abfrage, die
stor_id ausgibt und eine fortlaufende Summe der bestellten Menge anzeigt. Benutzen
Sie dazu die Tabelle sales.
7. Erstellen Sie unter Verwendung von Verknüpfungen (entweder eine SQL-Serveroder eine ANSI-Verknüpfung) eine Abfrage zur Anzeige des Vornamen (first name),
des nachnamen (last name) und der Buchtitel (titles) des Autors (Benutzen Sie
au_fname und au_lname, aus der Tabelle authors und das Feld title aus der Tabelle
titles) (Tip: Sie müsse zwei Verknüpfungen einsetzen - eine von authors mit titleauthor und eine von titles mit titleauthor).
8. Erstellen Sie eine Unterabfrage zum Auffinden von Autoren (authors), die in denselben Bundesländern leben, in denen sich die Buchgeschäfte (stores) befinden.
5
Richard Waymire, SQL Server 7.0, Kap. 11
- 43 -
Microsoft SQL-Server 2000
Anleitung
11.1.1 Lösungen für die Übungsaufgaben
1. SELECT title_id, title, price
FROM titles
WHERE (pub_id = ´0877´
OR title LIKE ´%computer%´)
And price is not NULL
(gibt 14 Zeilen zurück)
2. SELECT * FROM titles
WHERE price IS NOT NULL
(gibt 16 Zeilen zurück)
3. SELECT title, price
FROM titles
ORDER BY price DESC
(gibt 18 Zeilen zurück)
4. SELECT AVG(ytd_sales) FROM titles
5. SELECT title_id, count(title_id)
FROM titleauthor
GROUP BY title_id
HAVING count(title_id) > 1
6. SELECT stor_id, qty
FROM sales
ORDER BY stor_id
COMPUTE SUM(qty) BY stor_id
7. ANSI Syntax
SELECT authors.au_fname, authors.au_lname, titles.title
FROM authors
INNER JOIN titleauthor ON authors.au_id = titleauthor.au_id
INNER JOIN titles ON titleauthor.title_id = titles.title_id
ORDER BY authors.au_lname
SQL Server Syntax
SELECT authors.au_fname, authors.au_lname, titles.title
FROM authors, titles, titleauthor
WHERE authors.au_id = titleauthor.au_id
AND titleauthor.title_id = titles.title_id
ORDER BY authors.au_lname
8. SELECT * FROM authors
WHERE authors.state IN
(SELECT state from stores)
- 44 -
Herunterladen