147 69 9MB
German Pages 398
Abfragen von Microsoft SQL Server 2000 mit Hilfe von Transact-SQL
®
™
Arbeitsbuch für Kursleiter Kursnummer: 2316B
Artikelnumer: X08-54663 Version: 10/2001
Die in diesen Unterlagen enthaltenen Angaben und Daten, einschließlich URLs und anderer Verweise auf Internetwebsites, können ohne vorherige Ankündigung geändert werden. Die in den Beispielen genannten Firmen, Organisationen, Produkte, Domänennamen, E-Mail-Adressen, Logos, Personen, Orte und Ereignisse sind frei erfunden und jede Ähnlichkeit mit bestehenden Firmen, Organisationen, Produkten, Domänennamen, E-Mail-Adressen, Logos, Personen, Orten oder Ereignissen ist rein zufällig, soweit nichts anderes angegeben ist. Die Benutzer sind verantwortlich für das Einhalten aller anwendbaren Urheberrechtsgesetze. Unabhängig von der Anwendbarkeit der entsprechenden Urheberrechtsgesetze darf ohne ausdrückliche schriftliche Erlaubnis der Microsoft Corporation kein Teil dieses Dokuments für irgendwelche Zwecke vervielfältigt oder in einem Datenempfangssystem gespeichert oder darin eingelesen werden, unabhängig davon, auf welche Art und Weise oder mit welchen Mitteln (elektronisch, mechanisch, durch Fotokopieren, Aufzeichnen, usw.) dies geschieht. Microsoft Corporation kann Inhaber von Patenten oder Patentanträgen, Marken, Urheberrechten oder anderen gewerblichen Schutzrechten sein, die den Inhalt dieses Dokuments betreffen. Die Bereitstellung dieses Dokuments gewährt keinerlei Lizenzrechte an diesen Patenten, Marken, Urheberrechten oder anderen gewerblichen Schutzrechten, es sei denn, dies wurde ausdrücklich durch einen schriftlichen Lizenzvertrag mit der Microsoft Corporation vereinbart. 2001 Microsoft Corporation. Alle Rechte vorbehalten. Microsoft, BackOffice, MS-DOS, PowerPoint, Visual Studio, Windows, Windows Media und Windows NT sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Die in diesem Dokument aufgeführten Namen tatsächlicher Firmen und Produkte sind möglicherweise Marken der jeweiligen Eigentümer.
Kursnummer: 2316B Artikelnummer: X08-54663 Version: 10/2001
Abfragen von Microsoft SQL Server 2000 mit Hilfe von Transact-SQL
iii
Inhalt Einführung Einführung ...............................................................................................................1 Kursunterlagen.........................................................................................................2 Voraussetzungen......................................................................................................3 Kursbeschreibung ....................................................................................................4 Anhänge ...................................................................................................................7 Microsoft Official Curriculum .................................................................................8 Microsoft Certified Professional-Programm............................................................9 Einrichtungen.........................................................................................................11
Unterrichtseinheit 1 : Einführung in Transact-SQL Übersicht..................................................................................................................1 Die Programmiersprache Transact-SQL ..................................................................2 Typen von Transact-SQL-Anweisungen .................................................................3 Transact-SQL-Syntaxelemente ................................................................................7 Übungseinheit A: Verwenden der SQL Server-Onlinedokumentation ..................31 Lernzielkontrolle....................................................................................................35
Unterrichtseinheit 2: Verwenden von Transact-SQL-Abfragetools Übersicht..................................................................................................................1 SQL Query Analyzer ...............................................................................................2 Verwenden des Objektkatalogs in SQL Query Analyzer.........................................3 Verwenden von Vorlagen in SQL Query Analyzer .................................................5 Verwenden des Dienstprogramms „osql“ ................................................................6 Ausführen von Transact-SQL-Anweisungen...........................................................9 Empfohlene Methoden...........................................................................................15 Übungseinheit A: Erstellen und Ausführen von Transact-SQL-Skripts ................16 Lernzielkontrolle....................................................................................................22
Unterrichtseinheit 3: Abrufen von Daten Übersicht..................................................................................................................1 Abrufen von Daten mit Hilfe der SELECT-Anweisung ..........................................2 Filtern von Daten .....................................................................................................8 Formatieren von Resultsets....................................................................................21 Verarbeiten von Abfragen......................................................................................30 Automatisches Zwischenspeichern von Abfragen .................................................31 Aspekte der Systemleistung ...................................................................................33 Empfohlene Methoden...........................................................................................34 Übungseinheit A: Abrufen von Daten und Bearbeiten der Resultsets ...................35 Lernzielkontrolle....................................................................................................47
iv
Abfragen von Microsoft SQL Server 2000 mit Hilfe von Transact-SQL
Unterrichtseinheit 4: Gruppieren und Zusammenfassen von Daten Übersicht................................................................................................................. 1 Auflisten der TOP n-Werte ..................................................................................... 2 Verwenden von Aggregatfunktionen ...................................................................... 4 Grundlagen der GROUP BY-Klausel ..................................................................... 8 Generieren von Aggregatwerten in Resultsets ...................................................... 14 Verwenden der COMPUTE- und COMPUTE BY-Klauseln................................ 23 Empfohlene Methoden.......................................................................................... 26 Übungseinheit A: Gruppieren und Zusammenfassen von Daten .......................... 27 Lernzielkontrolle................................................................................................... 41
Unterrichtseinheit 5: Verknüpfen von mehreren Tabellen Übersicht................................................................................................................. 1 Verwenden von Aliasnamen für Tabellennamen .................................................... 2 Kombinieren von Daten aus mehreren Tabellen..................................................... 4 Kombinieren mehrerer Resultsets ......................................................................... 19 Empfohlene Methoden.......................................................................................... 21 Übungseinheit A: Abfragen mehrerer Tabellen .................................................... 22 Lernzielkontrolle................................................................................................... 31
Unterrichtseinheit 6: Arbeiten mit Unterabfragen Übersicht................................................................................................................. 1 Einführung in Unterabfragen .................................................................................. 2 Verwenden einer Unterabfrage als abgeleitete Tabelle........................................... 4 Verwenden einer Unterabfrage als Ausdruck ......................................................... 5 Verwenden einer Unterabfrage zum Korrelieren von Daten................................... 6 Verwenden der EXISTS- und NOT EXISTS-Klauseln ........................................ 13 Empfohlene Methoden.......................................................................................... 15 Übungseinheit A: Arbeiten mit Unterabfragen ..................................................... 16 Lernzielkontrolle................................................................................................... 28
Unterrichtseinheit 7: Ändern von Daten Übersicht................................................................................................................. 1 Verwenden von Transaktionen ............................................................................... 2 Einfügen von Daten ................................................................................................ 4 Löschen von Daten................................................................................................ 15 Aktualisieren von Daten........................................................................................ 20 Leistungsaspekte ................................................................................................... 25 Empfohlene Methoden.......................................................................................... 26 Übungseinheit A: Ändern von Daten.................................................................... 27 Lernzielkontrolle................................................................................................... 41
Unterrichtseinheit 8: Abfragen von Volltextindizes Übersicht................................................................................................................. 1 Einführung in den Microsoft Search-Dienst ........................................................... 2 Komponenten des Microsoft Search-Dienstes ........................................................ 3 Zusammenstellen von Informationen zu Volltextindizes........................................ 5 Schreiben von Volltextabfragen.............................................................................. 7 Empfohlene Methoden.......................................................................................... 15 Übungseinheit A: Abfragen von Volltextindizes .................................................. 16 Lernzielkontrolle................................................................................................... 23
Abfragen von Microsoft SQL Server 2000 mit Hilfe von Transact-SQL
v
Unterrichtseinheit 9: Einführung zu Programmierobjekten Übersicht..................................................................................................................1 Anzeigen des Textes eines Programmierobjekts......................................................2 Einführung zu Sichten..............................................................................................4 Vorteile von Sichten ................................................................................................6 Erstellen von Sichten ...............................................................................................8 Einführung zu gespeicherten Prozeduren...............................................................13 Einführung zu Triggern..........................................................................................18 Einführung zu benutzerdefinierten Funktionen .....................................................19 Empfohlene Methoden...........................................................................................25 Übungseinheit A: Arbeiten mit Sichten .................................................................26 Lernzielkontrolle....................................................................................................33
Anhang A: Fallstudie der library-Datenbank Anhang B: Datenbankschemas
vi
Abfragen von Microsoft SQL Server 2000 mit Hilfe von Transact-SQL
This page is intentionally left blank.
Abfragen von Microsoft SQL Server 2000 mit Hilfe von Transact-SQL
vii
Über diesen Kurs Dieser Abschnitt bietet eine kurze Beschreibung des Kurses, der Zielgruppe, der empfohlenen Voraussetzungen und der Lernziele.
Beschreibung Dieser Kurs vermittelt den Kursteilnehmern die technischen Fähigkeiten, die nötig sind, um grundlegende Transact-SQL-Abfragen für Microsoft® SQL Server™ 2000 zu schreiben. Es handelt sich um einen überarbeiteten zweitätigen Kurs. Das Hauptaugenmerk des Kursinhalts ist auf das Abfragen mit Hilfe von Transact-SQL gerichtet. Die Themen stammen hauptsächlich aus Kurs 2316A, Abfragen von Microsoft SQL Server 2000 mit Hilfe von Transact-SQL. Dieser überarbeitete Kurs ist Voraussetzung für Kurs 2328A, Programmieren einer Microsoft SQL Server 2000-Datenbank und Kurs 2322A, Verwalten einer Microsoft SQL Server 2000-Datenbank.
Zielgruppe Dieser Kurs richtet sich an SQL Server-Datenbankadministratoren, Implementierer, Systemtechniker und Entwickler, die für das Schreiben von Abfragen verantwortlich sind.
Voraussetzungen für die Kursteilnehmer Für diesen Kurs müssen die Kursteilnehmer die folgenden Voraussetzungen erfüllen: !
Erfahrung im Verwenden eines Microsoft Windows®-Betriebssystems.
!
Kenntnisse der grundlegenden Konzepte relationaler Datenbanken, einschließlich folgender Kenntnisse: • Logischer und physischer Datenbankentwurf. • Konzepte der Datenintegrität. • Beziehungen zwischen Tabellen und Spalten (Primärschlüssel und Fremdschlüssel, 1:1, 1:n, n:n). • Speichern von Daten in Tabellen (Zeilen und Spalten). Kursteilnehmer, die diese Voraussetzungen nicht erfüllen, können die erforderlichen Kenntnisse und Fähigkeiten im folgenden Kurs erwerben: • Kurs 1609, Designing Data Services and Data Models
!
Kenntnis der Rolle des Datenbankadministrators.
viii
Abfragen von Microsoft SQL Server 2000 mit Hilfe von Transact-SQL
Lernziele Am Ende dieses Kurses werden die Kursteilnehmer in der Lage sein, die folgenden Aufgaben auszuführen: !
Beschreiben der Verwendungs- und Ausführungsmöglichkeiten der Transact-SQL-Sprache.
!
Verwenden von Abfragetools.
!
Schreiben von SELECT -Abfragen zum Abrufen von Daten.
!
Gruppieren und Zusammenfassen von Daten mit Hilfe von Transact-SQL.
!
Verknüpfen von Daten aus mehreren Tabellen.
!
Schreiben von Abfragen, die Daten abrufen und ändern, mit Hilfe von Unterabfragen.
!
Ändern von Daten in Tabellen.
!
Abfragen von Textfeldern mit Volltexsuche.
!
Beschreiben, wie Programmierobjekte erstellt werden.
Abfragen von Microsoft SQL Server 2000 mit Hilfe von Transact-SQL
ix
Zeitplan für den Kurs Der folgende Zeitplan zeigt eine ungefähre Schätzung der für die einzelnen Unterrichtseinheiten benötigten Zeit. Der Zeitplan kann sich leicht verschieben.
1. Tag Beginn
Ende
Unterrichtseinheit
8:30
9:00
9:00
10:00
Unterrichtseinheit 1: Einführung in Transact-SQL
10:00
10:15
Übungseinheit A: Verwenden der SQL Server-Onlinedokumentation
10:15
10:30
Pause
10:30
11:00
Unterrichtseinheit 2: Verwenden von Transact-SQL-Abfragetools
11:00
11:30
Übungseinheit A: Erstellen und Ausführen von Transact-SQLSkripts
11:30
12:15
Unterrichtseinheit 3: Abrufen von Daten
12:15
13:15
Mittagspause
13:15
14:00
Übungseinheit A: Abrufen von Daten und Bearbeiten der Resultsets
14:00
14:45
Unterrichtseinheit 4: Gruppieren und Zusammenfassen von Daten
14:45
15:00
Pause
15:00
15:45
Übungseinheit A: Gruppieren und Zusammenfassen von Daten
15:45
16:45
Unterrichtseinheit 5: Verknüpfen von mehreren Tabellen
16:45
17:30
Übungseinheit A: Abfragen mehrerer Tabellen
Beginn
Ende
Unterrichtseinheit
8:30
9:00
Wiederholung des ersten Tages
9:00
9:45
Unterrichtseinheit 6: Arbeiten mit Unterabfragen
9:45
10:15
Übungseinheit A: Arbeiten mit Unterabfragen
10:15
10:30
Pause
10:30
11:15
Unterrichtseinheit 7: Ändern von Daten
11:15
12:15
Übungseinheit A: Ändern von Daten
12:15
13:15
Mittagspause
13:15
14:00
Unterrichtseinheit 8: Abfragen von Volltextindizes
14:00
15:00
Übungseinheit A: Abfragen von Volltextindizes
15:00
15:15
Pause
15:15
16:15
Unterrichtseinheit 9: Einführung zu Programmierobjekten
16:15
16:45
Übungseinheit A: Arbeiten mit Sichten
Einführung
2. Tag
x
Abfragen von Microsoft SQL Server 2000 mit Hilfe von Transact-SQL
Inhalt der Kursleiter-CD Die Kursleiter-CD enthält folgende Dateien und Ordner: !
Default.htm. Diese Datei öffnet die Webseite mit den Unterlagen für den Kursleiter.
!
Readme.txt. Diese Datei enthält eine Beschreibung des CD-Inhalts und der Installationsanweisungen im ASCII-Format (kein Word-Dokument).
!
2316B_ms.doc. Diese Datei ist das Handbuch für das manuelle Einrichten von Schulungscomputern. Sie enthält die Schritte zum manuellen Installieren der Schulungscomputer.
!
2316B_sg.doc. Diese Datei ist das Handbuch für das Einrichten von Schulungscomputern. Sie enthält eine Beschreibung der Schulungsraumanforderungen und der Schulungsraumkonfiguration sowie die Anweisungen zum Einrichten der Schulungscomputer.
!
Batches. Dieser Ordner enthält für das Einrichten des Computers erforderliche Dateien.
!
Demo. Dieser Ordner enthält für das Einrichten des Computers erforderliche Dateien.
!
Errorlog. Dieser Ordner enthält eine Vorlage, die zum Aufzeichnen von im Kurs auftretenden Fehlern und Korrekturen verwendet wird.
!
Manual. Dieser Ordner enthält Dateien, die zum manuellen Einrichten des Kursleitercomputers und der Kursteilnehmercomputer verwendet werden können.
!
Powerpnt. Dieser Ordner enthält die Microsoft PowerPoint®-Folien, die in diesem Kurs verwendet werden.
!
Pptview. Dieser Ordner enthält Microsoft PowerPoint Viewer, der zum Anzeigen der PowerPoint-Folien verwendet wird.
!
Revisionlog. Dieser Ordner enthält die Korrekturen zu Kurs 2316A, die zum Aktualisieren dieses Kurses verwendet wurden.
!
Setup. Dieser Ordner enthält die Dateien, die zum Einrichten des Kursleitercomputers und der Kursteilnehmercomputer verwendet werden.
!
Studentcd. Dieser Ordner enthält die Webseite mit Hyperlinks zu den diesen Kurs betreffenden Ressourcen, einschließlich weiterführender Literatur, der Antworten zur Lernzielkontrolle und zu den Übungseinheiten, der Dateien mit den Übungseinheiten, der Multimediapräsentationen und der Websites mit für den Kurs relevanten Inhalten.
!
Tools. Dieser Ordner enthält die Dateien und Dienstprogramme, die zum Einrichten des Kursleitercomputers erforderlich sind.
!
Tprep. Dieser Ordner enthält die Präsentation zur Vorbereitung des Kursleiters, eine kommentierte Folienvorführung, in der die Anweisungsstrategie für den Kurs erklärt wird sowie Präsentationstipps und Warnungen gegeben werden. Um die Präsentation zu öffnen, klicken Sie auf der Webseite mit den Unterlagen für den Kursleiter auf Präsentation zur Vorbereitung des Kursleiters.
Abfragen von Microsoft SQL Server 2000 mit Hilfe von Transact-SQL
xi
Inhalt der Kursteilnehmer-CD Die Kursteilnehmer-CD enthält folgende Dateien und Ordner: !
Default.htm. Diese Datei öffnet die Webseite mit den Unterlagen für die Kursteilnehmer. Sie stellt den Kursteilnehmern die den Kurs betreffenden Ressourcen bereit, einschließlich weiterführender Literatur, der Antworten zur Lernzielkontrolle und zu den Übungseinheiten, der Dateien mit den Übungseinheiten, der Multimediapräsentationen und der Websites mit für den Kurs relevanten Inhalten.
!
Readme.txt. Diese Datei enthält eine Beschreibung des CD-Inhalts und der Installationsanweisungen im ASCII-Format (kein Word-Dokument).
!
Addread. Dieser Ordner enthält weiterführende Literatur zu diesem Kurs. Wenn keine weiterführende Literatur vorhanden ist, wird dieser Ordner nicht angezeigt.
!
Answers. Dieser Ordner enthält Antworten auf die Fragen zur Lernzielkontrolle und praktischen Übungen der Unterrichtseinheiten.
!
Appendix. Dieser Ordner enthält Anhangdateien für diesen Kurs. Wenn keine Anhangdateien vorhanden sind, wird dieser Ordner nicht angezeigt.
!
Batches. Dieser Ordner enthält Batchdateien und Skripts für die Einrichtung der Unterrichtseinheiten und der Übungseinheiten.
!
Demo. Dieser Ordner enthält Skripts, die in den Unterrichtseinheiten verwendet werden.
!
Fonts. Dieser Ordner enthält Schriftarten, die erforderlich sind, um Präsentationen in PowerPoint und webbasierte Materialien anzuzeigen.
!
Labfiles. Dieser Ordner enthält Dateien, die in den praktischen Übungseinheiten verwendet werden. Diese Dateien können zur Vorbereitung der Kursteilnehmercomputer für die praktischen Übungseinheiten verwendet werden.
!
Pptview. Dieser Ordner enthält PowerPoint Viewer, der zum Anzeigen der PowerPoint-Folien verwendet wird..
!
Webfiles. Dieser Ordner enthält Dateien, die zum Anzeigen der Webseite des Kurses erforderlich sind. Öffnen Sie Windows-Explorer, und doppelklicken Sie im Stammverzeichnis der CD auf Default.htm, um die Webseite zu öffnen.
!
Wordview. Dieser Ordner enthält Word Viewer, der zum Anzeigen beliebiger Dokumentdateien unter Word (DOC-Dateien) verwendet wird, die auf der CD enthalten sind.
xii
Abfragen von Microsoft SQL Server 2000 mit Hilfe von Transact-SQL
Typografische Vereinbarungen Die folgenden typografischen Vereinbarungen werden in den Kursunterlagen verwendet, um Textelemente hervorzuheben. Vereinbarung
Verwendung
"
Kennzeichnet eine Einführungsseite. Dieses Symbol steht neben dem Titel einer Folie, wenn auf der Seite bzw. den folgenden Seiten weitere Informationen zum entsprechenden Thema behandelt werden.
Fett
Kennzeichnet Befehle, Befehlsoptionen und Syntaxteile, die exakt in der angegebenen Weise eingegeben werden müssen. Menübefehle, Schaltflächen, Symbole, Titel von Dialogfeldern und Optionen, Registerkarten und Namen von Symbolen und Menüs werden ebenfalls fett formatiert.
Kursiv
Kennzeichnet Platzhalter für variable Informationen in Syntaxanweisungen. Auf neue Begriffe, auf Buchtitel und auf besonders hervorzuhebende Begriffe wird ebenfalls in Kursivschrift hingewiesen.
Majuskel und Fett
Kennzeichnet Domänen-, Benutzer-, Computer-, Verzeichnis-, Ordner- und Dateinamen, ausgenommen, wenn auf bestimmte Namen verwiesen wird, bei denen die Großund Kleinschreibung beachtet werden muss. Wenn nichts anderes angegeben ist, können Sie bei der Eingabe eines Verzeichnis- oder Dateinamens in einem Dialogfeld oder an der Eingabeaufforderung Kleinbuchstaben verwenden.
GROSSBUCHSTABEN
Kennzeichnen Tastennamen, Tastenfolgen und Tastenkombinationen, z. B. ALT+LEERTASTE.
Festbreitenschrift
Stellt Codebeispiele, Beispiele für Bildschirmausgaben oder Eingaben dar, die Sie an der Eingabeaufforderung oder in Initialisierungsdateien eingeben.
[]
Zur Kennzeichnung optionaler Elemente in Syntaxanweisungen. So weist z. B. [Dateiname] in einer Befehlssyntax darauf hin, dass Sie wählen können, ob Sie einen Dateinamen mit dem Befehl eingeben möchten. Geben Sie nur die Informationen in den eckigen Klammern, jedoch nicht die Klammern selbst ein.
{}
Zur Kennzeichnung erforderlicher Elemente in Syntaxanweisungen. Geben Sie nur die Informationen in den geschweiften Klammern, jedoch nicht die Klammern selbst ein.
|
Trennt in Syntaxanweisungen zwei Alternativen, von denen nur eine gewählt werden kann.
!
Kennzeichnet (in den Übungseinheiten) ein Verfahren mit einer Abfolge von Schritten.
...
Gibt in Syntaxanweisungen an, dass das vorausgegangene Element wiederholt werden kann.
. . .
Stellt einen ausgelassenen Teil eines Codebeispiels dar.
Einführung
Inhalt Einführung
1
Kursunterlagen
2
Voraussetzungen
3
Kursbeschreibung
4
Anhänge
7
Microsoft Official Curriculum
8
Microsoft Certified Professional-Programm
9
Einrichtungen
11
Die in diesen Unterlagen enthaltenen Angaben und Daten, einschließlich URLs und anderer Verweise auf Internetwebsites, können ohne vorherige Ankündigung geändert werden. Die in den Beispielen genannten Firmen, Organisationen, Produkte, Domänennamen, E-Mail-Adressen, Logos, Personen, Orte und Ereignisse sind frei erfunden und jede Ähnlichkeit mit bestehenden Firmen, Organisationen, Produkten, Domänennamen, E-Mail-Adressen, Logos, Personen, Orten oder Ereignissen ist rein zufällig, soweit nichts anderes angegeben ist. Die Benutzer sind verantwortlich für das Einhalten aller anwendbaren Urheberrechtsgesetze. Unabhängig von der Anwendbarkeit der entsprechenden Urheberrechtsgesetze darf ohne ausdrückliche schriftliche Erlaubnis der Microsoft Corporation kein Teil dieses Dokuments für irgendwelche Zwecke vervielfältigt oder in einem Datenempfangssystem gespeichert oder darin eingelesen werden, unabhängig davon, auf welche Art und Weise oder mit welchen Mitteln (elektronisch, mechanisch, durch Fotokopieren, Aufzeichnen, usw.) dies geschieht. Microsoft Corporation kann Inhaber von Patenten oder Patentanträgen, Marken, Urheberrechten oder anderen gewerblichen Schutzrechten sein, die den Inhalt dieses Dokuments betreffen. Die Bereitstellung dieses Dokuments gewährt keinerlei Lizenzrechte an diesen Patenten, Marken, Urheberrechten oder anderen gewerblichen Schutzrechten, es sei denn, dies wurde ausdrücklich durch einen schriftlichen Lizenzvertrag mit der Microsoft Corporation vereinbart. 2001 Microsoft Corporation. Alle Rechte vorbehalten. Microsoft, BackOffice, MS-DOS, PowerPoint, Visual Studio, Windows, Windows Media und Windows NT sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Die in diesem Dokument aufgeführten Namen tatsächlicher Firmen und Produkte sind möglicherweise Marken der jeweiligen Eigentümer.
Einführung
iii
Hinweise für den Kursleiter Präsentation: 30 Minuten
Die Unterrichtseinheit zur Einführung gibt den Kursteilnehmern eine Übersicht über den Kursinhalt und die Kursunterlagen und enthält logistische Hinweise zum Verlauf des Kurses 2316B, Abfragen von Microsoft SQL Server 2000 mit Hilfe von Transact-SQL.
Kursunterlagen und Vorbereitung Erforderliche Unterlagen Um diesen Kurs zu unterrichten, benötigen Sie folgende Unterlagen: !
Arbeitsbuch für Kursleiter
!
Kursleiter-CD
Vorbereitende Aufgaben Zur Vorbereitung dieses Kurses gehen Sie folgendermaßen vor: !
Füllen Sie die Checkliste für die Kursvorbereitung aus, die in den Unterlagen für den Kursleiter bereitgestellt wird.
!
Lesen Sie das Überarbeitungsprotokoll, wenn Sie bereits Kurs 2316A unterrichtet haben.
iv
Einführung
Strategie für die Unterrichtseinheit Verwenden Sie die folgende Strategie, um diese Unterrichtseinheit zu präsentieren: !
Kurs 2316B, Abfragen von Microsoft SQL Server 2000 mit Hilfe von Transact-SQL. Zeigen Sie die Folie mit der Kursnummer und dem Kurstitel.
!
Einführung Begrüßen Sie die Kursteilnehmer zu diesem Kurs, und stellen Sie sich vor. Geben Sie eine kurze Übersicht über Ihren beruflichen Werdegang, um Ihre Kompetenz als Kursleiter zu unterstreichen. Bitten Sie die Kursteilnehmer, sich vorzustellen und ihrerseits eine Übersicht über Beruf, Produkterfahrung und Schulungserwartungen zu geben. Halten Sie die Erwartungen der Kursteilnehmer auf einer Tafel oder einem Flipchart fest, und greifen Sie diese Themen im Verlauf der Unterrichtseinheit auf.
!
Kursunterlagen Erläutern Sie den Zweck aller in diesem Kurs verwendeten Unterlagen. Teilen Sie den Kursteilnehmern mit, dass sie am Ende des Kurses Gelegenheit haben, mit Hilfe des Microsoft® Online Evaluation Systems Feedback zum Kurs und zu den Einrichtungen zu geben.
!
Voraussetzungen Teilen Sie den Kursteilnehmern mit, welche Voraussetzungen vor der Teilnahme an diesem Kurs erfüllt sein müssen. Dies ist eine Gelegenheit, um festzustellen, ob es Kursteilnehmer gibt, die möglicherweise nicht über den entsprechenden Hintergrund oder die Erfahrungen verfügen, die für die Teilnahme am Kurs erforderlich sind.
!
Kursbeschreibung Geben Sie eine Übersicht über die einzelnen Unterrichtseinheiten und Lernziele. Stellen Sie einen Bezug zwischen den Themen der Unterrichtseinheiten und den Erwartungen der Kursteilnehmer her.
!
Microsoft Certified Professional-Programm Informieren Sie die Kursteilnehmer über das Microsoft Certified Professional-Programm (MCP) und die verschiedenen Zertifizierungsmöglichkeiten.
!
Einrichtungen Erläutern Sie die Einrichtungen am Schulungsort.
Einführung
1
Einführung Inhalt dieser Folie
Stellen Sie sich vor, wecken Sie Vertrauen in Ihre Kompetenz als Kursleiter, und fordern Sie die Kursteilnehmer auf, sich vorzustellen und ihre Erwartungen an den Kurs zu definieren.
Einstieg
Guten Morgen. Willkommen zu Kurs 2316B, Abfragen von Microsoft SQL Server 2000 mit Hilfe von Transact-SQL.
!
Name
!
Firmenzugehörigkeit
!
Titel/Funktion
!
Beruflicher Verantwortungsbereich
!
Erfahrungen mit Datenbanken
!
Erfahrungen mit SQL Server
!
Erwartungen an den Kurs
Ich heiße...
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Stellen Sie sich vor. Geben Sie eine kurze Übersicht über Ihren beruflichen Werdegang, um Ihre Kompetenz als Kursleiter für SQL Server zu unterstreichen. Bitten Sie die Kursteilnehmer, sich anhand der aufgeführten Stichpunkte vorzustellen.
Methodischer Hinweis
Notieren Sie während der Vorstellung der Kursteilnehmer deren Erwartungen an den Kurs auf einer Tafel oder einem Flipchart.
2
Einführung
Kursunterlagen Inhalt dieser Folie
Zeigen und beschreiben Sie die Kursunterlagen.
Einstieg
Wir haben alle für den Kurs erforderlichen Unterlagen für Sie zusammengestellt. Auf Ihren Tischen finden Sie die folgenden Unterlagen...
!
Namensschild
!
Arbeitsbuch für Kursteilnehmer
!
Kursteilnehmer-CD
!
Feedbackbogen
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Beschreiben Sie den Inhalt des Arbeitsbuches und der Kursteilnehmer-CD. Bitten Sie die Kursteilnehmer, ihre Namen auf beide Seiten des Namensschildes zu schreiben. Weisen Sie die Kursteilnehmer darauf hin, dass Sie am Ende des Kurses einen Feedbackbogen ausfüllen müssen.
Das Kit enthält die folgenden Unterlagen: !
Namensschild. Schreiben Sie Ihren Namen auf beide Seiten des Namensschildes.
!
Arbeitsbuch für Kursteilnehmer. Das Arbeitsbuch für Kursteilnehmer enthält die in diesem Kurs behandelten Themen sowie die Übungen der praktischen Übungseinheiten.
!
Kursteilnehmer-CD. Die Kursteilnehmer-CD enthält die Webseite mit Hyperlinks zu den diesen Kurs betreffenden Ressourcen, einschließlich weiterführender Literatur, der Antworten zur Lernzielkontrolle und zu den Übungseinheiten, der Dateien mit den Übungseinheiten, der Multimediapräsentationen und der Websites mit für den Kurs relevanten Inhalten. Anmerkung Um die Webseite zu öffnen, legen Sie die Kursteilnehmer-CD in das CD-ROM-Laufwerk ein, und doppelklicken Sie dann im Stammverzeichnis der CD auf Default.htm.
Teilen Sie den Kursteilnehmern die Adresse mit, an die sie Kommentare senden können.
Methodischer Hinweis
Führen Sie vor, wie die auf der Kursteilnehmer-CD bereitgestellte Webseite geöffnet wird. Doppelklicken Sie auf der Kursleiter-CD im Ordner StudentCD auf Default.htm.
!
Feedbackbogen. Füllen Sie nach Beendigung des Kurses den Feedbackbogen aus, um Feedback zum Kursleiter, zum Kurs und zum Softwareprodukt abzugeben. Mit Hilfe Ihrer Kommentare können zukünftige Kurse weiter verbessert werden. Wenn Sie weitere Kommentare zu den Kursunterlagen abgeben möchten, können Sie eine entsprechende E-Mail an die folgende Adresse senden: [email protected]. Die Betreffzeile muss die Angabe Kurs 2316 (2071) enthalten. Wenn Sie weitere Kommentare zum Microsoft Certified ProfessionalProgramm abgeben oder sich über dieses Programm informieren möchten, können Sie eine E-Mail an die folgende Adresse senden: [email protected]
Einführung
3
Voraussetzungen Inhalt dieser Folie
Benennen und beschreiben Sie die Voraussetzungen für diesen Kurs.
!
Erfahrung im Verwenden eines Microsoft WindowsBetriebssystems
!
Kenntnisse der grundlegenden Konzepte relationaler Datenbanken
!
Kenntnis der Rolle des Datenbankadministrators
Einstieg
Für diesen Kurs müssen Sie über die folgenden Kenntnisse verfügen.
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Für diesen Kurs müssen die folgenden Voraussetzungen erfüllt werden: !
Erfahrung im Verwenden eines Microsoft Windows®-Betriebssystems.
!
Kenntnisse der grundlegenden Konzepte relationaler Datenbanken, einschließlich folgender Kenntnisse: • Logischer und physischer Datenbankentwurf. • Konzepte der Datenintegrität. • Beziehungen zwischen Tabellen und Spalten (Primärschlüssel und Fremdschlüssel, 1:1, 1:n, n:n). • Speichern von Daten in Tabellen (Zeilen und Spalten). Kursteilnehmer, die diese Voraussetzungen nicht erfüllen, können die erforderlichen Kenntnisse und Fähigkeiten im folgenden Kurs erwerben: • Kurs 1609, Designing Data Services and Data Models
!
Kenntnis der Rolle des Datenbankadministrators.
4
Einführung
Kursbeschreibung Inhalt dieser Folie
Geben Sie eine Übersicht über die einzelnen Unterrichtseinheiten und Lernziele.
Einstieg
In diesem Kurs werden folgende Themen behandelt...
!
Unterrichtseinheit 1: Einführung in Transact-SQL
!
Unterrichtseinheit 2: Verwenden von Transact-SQLAbfragetools
!
Unterrichtseinheit 3: Abrufen von Daten
!
Unterrichtseinheit 4: Gruppieren und Zusammenfassen von Daten
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Geben Sie eine kurze Beschreibung jeder Unterrichtseinheit. Gehen Sie bei der Beschreibung der einzelnen Unterrichtseinheiten auf alle Bereiche ein, die den zuvor geäußerten Erwartungen der Kursteilnehmer entsprechen.
Unterrichtseinheit 1, „Einführung in Transact-SQL“, gibt eine kurze Übersicht über Transact-SQL als Programmiersprache und beschreibt verschiedene Methoden zum Ausführen von Transact-SQL. Es wird vorausgesetzt, dass die Kursteilnehmer ANSI-SQL (American National Standards Institute) und grundlegende Programmierkonzepte kennen. Dazu gehören Funktionen, Operatoren, Variablen und Anweisungen zur Ablaufsteuerung. Am Ende dieser Unterrichtseinheit werden Sie in der Lage sein, die Elemente von Transact-SQL zu beschreiben. Unterrichtseinheit 2, „Verwenden von Transact-SQL-Abfragetools“, beschreibt verschiedene in Microsoft SQL Server™ verfügbare Abfragetools und deren Verwendung zum Ausführen von Transact-SQL-Skripts. Am Ende dieser Unterrichtseinheit werden Sie in der Lage sein, die primären Transact-SQLAbfragetools in SQL Server zu beschreiben und Transact-SQL-Skripts auf unterschiedliche Arten auszuführen. Unterrichtseinheit 3, „Abrufen von Daten“, behandelt die SELECT-Anweisung ausführlich. Es werden viele Beispiele verwendet, um des Sortieren von Daten, das Löschen von Duplikaten und das Ändern des Resultsetformats vorzuführen. Am Ende dieser Unterrichtseinheit werden Sie in der Lage sein, die SELECTAnweisung zum Abrufen von Daten zu verwenden. Unterrichtseinheit 4, „Gruppieren und Zusammenfassen von Daten“, erläutert das Gruppieren von Daten mit Hilfe von Aggregatfunktionen. Außerdem wird erläutert, wie Zusammenfassungsberichte generiert werden und wie Werte in einem Resultset aufgelistet werden. Am Ende dieser Unterrichtseinheit werden Sie in der Lage sein, Zusammenfassungsdaten für eine Tabelle zu generieren und zu gruppieren.
Einführung
5
Kursbeschreibung (Fortsetzung) !
Unterrichtseinheit 5: Verknüpfen von mehreren Tabellen
!
Unterrichtseinheit 6: Arbeiten mit Unterabfragen
!
Unterrichtseinheit 7: Ändern von Daten
!
Unterrichtseinheit 8: Abfragen von Volltextindizes
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Unterrichtseinheit 5, „Verknüpfen von mehreren Tabellen“, vermittelt Informationen zum Abfragen mehrerer Tabellen mit Hilfe verschiedener Verknüpfungstypen, zum Kombinieren von Resultsets mit Hilfe des UNION-Operators und zum Erstellen von Tabellen mit Hilfe der SELECT INTO-Anweisung. Am Ende dieser Unterrichtseinheit werden Sie in der Lage sein, Daten und mehrere Resultsets zu kombinieren. Unterrichtseinheit 6, „Arbeiten mit Unterabfragen“, stellt erweiterte Abfragetechniken vor, einschließlich geschachtelter und korrelierter Unterabfragen. Außerdem wird erläutert, wann und wie diese Techniken verwendet werden, um komplizierte Abfragen zu untergliedern und auszuführen. Am Ende dieser Unterrichtseinheit werden Sie in der Lage sein, Abfragen zu schreiben, die Abfragen mit einem einzigen Wert, Abfragen mit mehreren Werten und korrelierte Abfragen verwenden, um Resultsets zu beschränken und um mehrere Verarbeitungsschritte zu einer SELECT-Anweisung zusammenzufassen. Unterrichtseinheit 7, „Ändern von Daten“, erläutert die Funktionsweise von Transaktionen. Außerdem wird erläutert, wie INSERT-, DELETE- und UPDATE-Anweisungen geschrieben werden, um Daten in Tabellen zu ändern. Am Ende dieser Unterrichtseinheit werden Sie in der Lage sein, Daten in Tabellen auf verschiedene Weisen zu ändern. Unterrichtseinheit 8, „Abfragen von Volltextindizes“, beschreibt den Microsoft Search-Dienst. Außerdem wird beschrieben, wie auf Informationen zu Indizes für Textfelder zugegriffen wird und wie diese Volltextindizes abgefragt werden. Am Ende dieser Unterrichtseinheit werden Sie in der Lage sein, die Funktionen und Komponenten des Microsoft Search-Dienstes zu beschreiben, Informationen zu Volltextindizes zusammenzustellen und Volltextabfragen zu schreiben.
6
Einführung
Kursbeschreibung (Fortsetzung) !
Unterrichtseinheit 9: Einführung zu Programmierobjekten
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Unterrichtseinheit 9, „Einführung zu Programmierobjekten“, erläutert das Erstellen von Programmierobjekten mit denen Benutzer Daten anzeigen und bearbeiten können, während die Komplexität der zugrunde liegenden Datenbankstruktur ausgeblendet wird. Am Ende dieser Unterrichtseinheit werden Sie in der Lage sein, den Text eines Programmierobjektes anzuzeigen und die Konzepte und Vorteile des Verwendens von Sichten, gespeicherten Prozeduren, Triggern und benutzerdefinierten Funktionen zu beschreiben.
Einführung
7
Anhänge Inhalt dieser Folie
Beschreiben Sie die Anhänge, die in diesem Kurs verwendet werden.
!
Anhang A: Fallstudie der library-Datenbank
Einstieg
!
Anhang B: Datenbankschemas
In den Anhängen, die sich am Ende des Arbeitsbuches befinden, sind weitere Informationen enthalten, die in diesem Kurs verwendet werden.
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG****************
Anhang A: Fallstudie der library-Datenbank Dieser Anhang enthält eine Beschreibung der library-Beispieldatenbank, die in diesem Kurs verwendet wird.
Anhang B: Datenbankschemas Dieser Anhang enthält schematische Diagramme der Datenbanken, die in diesem Kurs verwendet werden.
8
Einführung
Microsoft Official Curriculum Inhalt dieser Folie
Beschreiben Sie das Microsoft Official Curriculum-Programm, und stellen Sie Informationen zu den Curriculum-Pfaden bereit.
!
Einstieg
Sprechen wir kurz über das Microsoft Official Curriculum-Programm.
WindowsBetriebssysteme
!
Microsoft Office
!
Microsoft BackOffice Small Business Server
!
Microsoft SQL Server
!
Microsoft Exchange
!
Microsoft BackOffice ServerInfrastruktur und -Lösungen
!
Microsoft FrontPage
!
Microsoft Systems Management Server
!
Knowledge ManagementLösungen
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Bei Microsoft Official Curriculum (MOC) handelt es sich um praxisorientierte, in einem Schulungsraum durchgeführte, webbasierte Schulungen. Microsoft entwickelt auf die Vermittlung von Fähigkeiten ausgerichtete Schulungen für Computerexperten, die mit Hilfe von Microsoft-Produkten, -Lösungen und -Technologien Lösungen entwickeln, unterstützen und implementieren. MOCKurse stehen für die folgenden Produkte und Lösungen zur Verfügung: !
Windows-Betriebssysteme
!
Microsoft Office
!
Microsoft BackOffice® Small Business Server
!
Microsoft SQL Server
!
Microsoft Exchange
!
Microsoft BackOffice Server-Infrastruktur und -Lösungen
!
Microsoft FrontPage®
!
Microsoft Systems Management Server
!
Knowledge Management-Lösungen
MOC stellt einen Curriculumpfad für jedes Produkt und jede Lösung zur Verfügung. Weitere Informationen zu den Curriculumpfaden finden Sie auf der MOC-Webseite unter der folgenden Adresse: http://www.microsoft.com/germany/ms/training/ Auf der MOC-Webseite werden Informationen zu den MOC-Kursen bereitgestellt. Darüber hinaus finden Sie auf dieser Seite empfohlene Curriculumpfade für Benutzer, die in die IT-Industrie (Information Technology) einsteigen, die die Schulung zu Microsoft-Produkten und -Lösungen fortsetzen möchten oder die zurzeit Produkte unterstützen, die nicht von Microsoft stammen.
Einführung
9
Microsoft Certified Professional-Programm Inhalt dieser Folie
Informieren Sie die Kursteilnehmer über das Microsoft Certified Professional-Programm.
Einstieg
Das Microsoft Certified Professional-Programm verfügt über die folgenden Zertifizierungen...
!
Microsoft Certified Systems Engineer (MCSE)
!
Microsoft Certified Database Administrator (MCDBA)
!
Microsoft Certified Solution Developer (MCSD)
!
Microsoft Certified Professional + Site Building (MCP + Site Building)
!
Microsoft Certified Professional (MCP)
!
Microsoft Certified Trainer (MCT)
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Das Microsoft Certified Professional-Programm (MCP) ist die beste Möglichkeit, um Ihre Kompetenz als Experte von Microsoft-Produkten und -Technologien zu belegen. In der folgenden Tabelle werden die Zertifizierungen ausführlich erläutert. Zertifizierung
Beschreibung
Microsoft Certified Systems Engineer (MCSE)
MCSEs verfügen über die Qualifikation, Informationssysteme in einer Vielzahl von Computerumgebungen unter Microsoft Windows NT® Server und BackOffice effizient zu planen, zu implementieren, zu verwalten und zu unterstützen.
Microsoft Certified Database Administrator (MCDBA)
MCDBAs verfügen über die Qualifikation zum Erstellen physischer Datenbankentwürfe, Entwickeln logischer Datenmodelle, Erstellen physischer Datenbanken, Erstellen von Datendiensten mit Hilfe von Transact-SQL, Verwalten und Pflegen von Datenbanken, Konfigurieren und Verwalten der Sicherheit, Überwachen und Optimieren von Datenbanken, sowie Installieren und Konfigurieren von SQL Server.
Microsoft Certified Solution Developer (MCSD)
MCSDs verfügen über die Qualifikation, mit Hilfe von Microsoft-Produkten, wie z. B. SQL Server, Microsoft Visual Studio® und Komponentendienste, webbasierte, verteilte und für den Handel einsetzbare Anwendungen zu erstellen.
Microsoft Certified Professional + Site Building (MCP + Site Building)
MCPs mit einer Spezialisierung im Bereich Sitebuilding sind qualifiziert, Websites mit Microsoft-Technologien und -Produkten zu planen, zu erstellen, zu warten und zu verwalten.
10
Einführung
(Fortsetzung) Zertifizierung
Beschreibung
Microsoft Certified Professional (MCP)
MCPs verfügen über detaillierte Kenntnisse zu mindestens einem Produkt. Diese Kenntnisse müssen in einer beliebigen Prüfung (ausgenommen Netzwerkgrundlagen) nachgewiesen werden.
Microsoft Certified Trainer (MCT)
MCTs verfügen über spezielle didaktische und technische Fähigkeiten, die sie dazu qualifizieren, das Microsoft Official Curriculum (MOC) in Microsoft Certified Technical Education Centers (Microsoft CTECs) zu unterrichten.
Zertifizierungsanforderungen Die Zertifizierungsanforderungen unterscheiden sich je nach Zertifizierungsart und orientieren sich an den Produkten und Tätigkeiten, für die die jeweilige Zertifizierung gilt. Um den Status eines Microsoft Certified Professionals zu erlangen, müssen Sie strenge Zertifizierungsprüfungen absolvieren, die eine gültige und zuverlässige Messung der technischen Fertigkeiten und Sachkenntnisse zulassen. Weitere Informationen Weitere Informationen finden Sie in der Website zu Microsoft Training und Zertifizierung unter der folgenden Adresse: http://www.microsoft.com/germany/ms/training/ Sie können auch eine E-Mail an [email protected] senden, falls Sie Fragen zur Zertifizierung haben.
Vorbereiten auf eine MCP-Prüfung Das MOC (Microsoft Official Curriculum) hilft Ihnen bei der Vorbereitung auf die Microsoft Certified Professional-Prüfungen (MCP). Es besteht jedoch keine 1:1-Entsprechung zwischen den Inhalten der MOC-Kurse und den Inhalten der MCP-Prüfungen. Microsoft sieht das MOC nicht als einziges Vorbereitungstool für das Bestehen einer MCP-Prüfung an. Praktische Produktkenntnisse und -erfahrungen sind für das Bestehen einer MCP-Prüfung ebenfalls erforderlich. Als Unterstützung bei den Vorbereitungen auf die MCP-Prüfungen können Sie die Leitfäden zur Vorbereitung verwenden, die für jede Prüfung zur Verfügung stehen. Alle Leitfäden zur Prüfungsvorbereitung enthalten prüfungsspezifische Informationen, wie beispielsweise eine Liste der Themen, zu denen Sie geprüft werden. Diese Leitfäden sind in der Microsoft Certified Professional-Website unter der folgenden Adresse verfügbar: http://www.microsoft.com/germany/ms/training/
Einführung
11
Einrichtungen Inhalt dieser Folie
Informieren Sie die Kursteilnehmer über die örtlichen Einrichtungen und die zu beachtenden Regeln auf dem Schulungsgelände.
Kurszeiten
Öffnungszeiten
Telefone
Parkplätze
Nachrichten
Toiletten
Raucherzonen
Kantine
Recycling
Einstieg
Bevor wir mit der Schulung beginnen, möchte ich Sie über die Einrichtungen im Schulungsgebäude informieren.
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Informieren Sie die Kursteilnehmer über die Kurszeiten, Mahlzeiten, Öffnungszeiten des Gebäudes für die Bearbeitung der Übungseinheiten, Parkmöglichkeiten, Toiletten, Raucherzonen, Telefone und Möglichkeiten zur Übermittlung von Nachrichten. Informieren Sie die Kursteilnehmer gegebenenfalls auch über das Recyclingprogramm.
2
Einführung
This page is intentionally left blank.
Unterrichtseinheit 1 : Einführung in Transact-SQL Inhalt Übersicht
1
Die Programmiersprache Transact-SQL
2
Typen von Transact-SQL-Anweisungen
3
Transact-SQL-Syntaxelemente
7
Übungseinheit A: Verwenden der SQL Server-Onlinedokumentation
31
Lernzielkontrolle
35
Die in diesen Unterlagen enthaltenen Angaben und Daten, einschließlich URLs und anderer Verweise auf Internetwebsites, können ohne vorherige Ankündigung geändert werden. Die in den Beispielen genannten Firmen, Organisationen, Produkte, Domänennamen, E-Mail-Adressen, Logos, Personen, Orte und Ereignisse sind frei erfunden und jede Ähnlichkeit mit bestehenden Firmen, Organisationen, Produkten, Domänennamen, E-Mail-Adressen, Logos, Personen, Orten oder Ereignissen ist rein zufällig, soweit nichts anderes angegeben ist. Die Benutzer sind verantwortlich für das Einhalten aller anwendbaren Urheberrechtsgesetze. Unabhängig von der Anwendbarkeit der entsprechenden Urheberrechtsgesetze darf ohne ausdrückliche schriftliche Erlaubnis der Microsoft Corporation kein Teil dieses Dokuments für irgendwelche Zwecke vervielfältigt oder in einem Datenempfangssystem gespeichert oder darin eingelesen werden, unabhängig davon, auf welche Art und Weise oder mit welchen Mitteln (elektronisch, mechanisch, durch Fotokopieren, Aufzeichnen, usw.) dies geschieht. Microsoft Corporation kann Inhaber von Patenten oder Patentanträgen, Marken, Urheberrechten oder anderen gewerblichen Schutzrechten sein, die den Inhalt dieses Dokuments betreffen. Die Bereitstellung dieses Dokuments gewährt keinerlei Lizenzrechte an diesen Patenten, Marken, Urheberrechten oder anderen gewerblichen Schutzrechten, es sei denn, dies wurde ausdrücklich durch einen schriftlichen Lizenzvertrag mit der Microsoft Corporation vereinbart. 2001 Microsoft Corporation. Alle Rechte vorbehalten. Microsoft, BackOffice, MS-DOS, PowerPoint, Visual Studio, Windows, Windows Media und Windows NT sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Die in diesem Dokument aufgeführten Namen tatsächlicher Firmen und Produkte sind möglicherweise Marken der jeweiligen Eigentümer.
Unterrichtseinheit 1 : Einführung in Transact-SQL
iii
Hinweise für den Kursleiter Präsentation: 60 Minuten Übungseinheit: 15 Minuten
Transact-SQL ist eine Datendefinitions-, Datenbearbeitungs- und Datensteuerungssprache. Diese Unterrichtseinheit gibt eine kurze Übersicht über Transact-SQL als Programmiersprache. Es werden darüber hinaus die verschiedenen Typen von Transact-SQL-Anweisungen und Syntaxelementen beschrieben. Am Ende dieser Unterrichtseinheit werden die Kursteilnehmer in der Lage sein, die folgenden Aufgaben auszuführen: !
Unterscheiden zwischen Transact-SQL und ANSI-SQL.
!
Beschreiben der grundlegenden Typen von Transact-SQL-Anweisungen.
!
Beschreiben der Syntaxelemente von Transact-SQL.
Unterlagen und Vorbereitung In diesem Abschnitt werden die erforderlichen Unterlagen und vorbereitenden Aufgaben erläutert, die nötig sind, um diese Unterrichtseinheit zu unterrichten.
Erforderliche Unterlagen Um diese Unterrichtseinheit zu unterrichten, benötigen Sie folgende Unterlagen: • Die Microsoft® PowerPoint®-Datei 2316B_01.ppt
Vorbereitende Aufgaben Zur Vorbereitung dieser Unterrichtseinheit gehen Sie folgendermaßen vor: !
Lesen Sie alle Unterlagen für diese Unterrichtseinheit.
!
Arbeiten Sie die Übungseinheit durch.
!
Machen Sie sich mit dem Thema „Transact-SQL-Referenz“ in der Microsoft® SQL Server™-Onlinedokumentation vertraut.
Strategie für die Unterrichtseinheit Verwenden Sie die folgende Strategie, um diese Unterrichtseinheit zu präsentieren: !
Die Programmiersprache Transact-SQL Weisen Sie die Kursteilnehmer darauf hin, dass Transact-SQL die in SQL Server verwendete Programmiersprache ist. Da die Kursteilnehmer normalerweise mit den Prinzipien des Programmierens vertraut sein sollten, werden in dieser Unterrichtseinheit keine Grundlagen zum Programmieren und Schreiben von Anweisungen behandelt. Stattdessen stellt sie eine Übersicht bereit und zeigt, inwiefern sich Transact-SQL deutlich von der ISO-Standardsprache (International Standards Organization) ANSI SQL-92 unterscheidet.
iv
Unterrichtseinheit 1 : Einführung in Transact-SQL !
Typen von Transact-SQL-Anweisungen In diesem Abschnitt werden die Sprachelemente von Transact-SQL besprochen. Erläutern Sie kurz die grundlegenden Typen von SQL-Anweisungen, wie z. B. DDL-Anweisungen (Data Definition Language), DCL-Anweisungen (Data Control Language) und DML-Anweisungen (Data Manipulation Language).
!
Transact-SQL-Syntaxelemente Erläutern Sie die zusätzlichen Sprachelemente bei Bedarf ausführlicher, je nach Kenntnisstand der Kursteilnehmer. Erläutern Sie lokale und globale Variablen, die verschiedenen Operatoren und Funktionen, Sprachelemente zur Ablaufsteuerung sowie Kommentarzeichen. In der Unterrichtseinheit werden die wichtigsten allgemein verwendeten Schlüsselwörter oder Sätze vorgestellt; weisen Sie die Kursteilnehmer auf die umfangreiche SQL Server-Onlinedokumentation hin, in der sich detaillierte Informationen zu weiteren Schlüsselwörtern befinden.
Anpassungsinformationen Dieser Abschnitt beschreibt die Anforderungen zum Einrichten der Übungseinheiten für eine Unterrichtseinheit sowie die Konfigurationsänderungen, die während der Übungseinheiten an den Kursteilnehmercomputern vorgenommen werden. Diese Informationen sollen Ihnen beim Replizieren oder Anpassen der Microsoft Official Curriculum-Courseware (MOC) helfen. Wichtig Die Übungseinheit in dieser Unterrichtseinheit hängt von der Schulungsraumkonfiguration ab, die im Abschnitt „Anpassungsinformationen“ am Ende des Dokuments Handbuch für das Einrichten von Schulungscomputern für den Kurs 2316B, Abfragen von Microsoft SQL Server 2000 mit Hilfe von Transact-SQL, angegeben ist.
Einrichten der Übungseinheit Es gibt keine Anforderungen zum Einrichten der Übungseinheiten, die die Replikation oder die Anpassung betreffen.
Ergebnisse der Übungseinheit Auf den Kursteilnehmercomputern gibt es keine Konfigurationsänderungen, die die Replikation oder die Anpassung betreffen.
Unterrichtseinheit 1 : Einführung in Transact-SQL
1
Übersicht Inhalt dieser Folie
Geben Sie eine Übersicht über die Themen und Lernziele dieser Unterrichtseinheit.
Einstieg
In dieser Unterrichtseinheit lernen SieTransact-SQL kennen.
!
Die Programmiersprache Transact-SQL
!
Typen von Transact-SQL-Anweisungen
!
Transact-SQL-Syntaxelemente
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Transact-SQL ist eine Datendefinitions-, Datenbearbeitungs- und Datensteuerungssprache. Diese Unterrichtseinheit stellt eine kurze Übersicht über Transact-SQL als Programmiersprache bereit. Es werden darüber hinaus die verschiedenen Typen von Transact-SQL-Anweisungen und Syntaxelementen beschrieben. Am Ende dieser Unterrichtseinheit werden Sie in der Lage sein, die folgenden Aufgaben auszuführen: !
Unterscheiden zwischen Transact-SQL und ANSI-SQL.
!
Beschreiben der grundlegenden Typen von Transact-SQL-Anweisungen.
!
Beschreiben der Syntaxelemente von Transact-SQL.
2
Unterrichtseinheit 1 : Einführung in Transact-SQL
Die Programmiersprache Transact-SQL Inhalt dieser Folie
Stellen Sie die Tatsache heraus, dass SQL Server über eine eigene Programmiersprache verfügt.
Einstieg
Bei Transact-SQL handelt es sich um eine Version der SQL-Programmiersprache, die ausschließlich in SQL Server verwendet wird.
!
Implementierung der Eingangsstufe (Entry Level) des ANSI SQL-92 ISO-Standards
!
Kann von jedem mit der ANSI-SQL-Eingangsstufe kompatiblen Produkt ausgeführt werden
!
Enthält zusätzliche einzigartige Funktionalität
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** ANSI (American National Standards Institute) und ISO (International Standards Organization) haben Standards für SQL definiert. Bei der Verwendung von Transact-SQL unterstützt Microsoft® SQL Server™ 2000 die Implementierung der Eingangsstufe (Entry Level) von SQL-92, dem SQL-Standard, der 1992 von ANSI und ISO veröffentlicht wurde. Die mit ANSI-SQL kompatiblen Sprachelemente von Transact-SQL können von jedem mit der ANSI-SQL-Eingangsstufe kompatiblen Produkt ausgeführt werden. Transact-SQL enthält außerdem mehrere Erweiterungen, die eine verbesserte Funktionalität bereitstellen.
Unterrichtseinheit 1 : Einführung in Transact-SQL
3
" Typen von Transact-SQL-Anweisungen Inhalt dieser Folie
Stellen Sie die grundlegenden Typen von TransactSQL-Anweisungen vor.
!
DDL-Anweisungen (Data Definition Language)
Einstieg
!
DCL-Anweisungen (Data Control Language)
!
DML-Anweisungen (Data Manipulation Language)
Beim Schreiben und Ausführen von Transact-SQLAnweisungen verwenden Sie einige dieser Typen von Transact-SQLAnweisungen.
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Methodischer Hinweis
Weisen Sie darauf hin, dass der Schwerpunkt dieses Kurses auf der Verwendung von DML-Anweisungen (Data Manipulation Language) liegt.
Eine Abfrage ist eine Anforderung von in SQL Server gespeicherten Daten. Bei allen Abfragen wird dem Benutzer das Resultset einer SELECT-Anweisung angezeigt. Ein Resultset ist eine tabellarische, aus Spalten und Zeilen bestehende Anordnung der Daten aus der SELECT-Anweisung. Das Schreiben und Ausführen von Transact-SQL-Anweisungen stellt eine Möglichkeit dar, eine Abfrage an SQL Server auszugeben. Beim Schreiben und Ausführen von Transact-SQL-Anweisungen verwenden Sie folgende Elemente: !
DDL-Anweisungen (Data Definition Language), mit denen Sie Objekte in der Datenbank erstellen können.
!
DCL-Anweisungen (Data Control Language), mit denen Sie ermitteln können, wer die Daten anzeigen und ändern kann.
!
DML-Anweisungen (Data Manipulation Language), mit denen Sie die Daten abfragen und ändern können.
Anmerkung In diesem Kurs wird schwerpunktmäßig das Verwenden von DML-Anweisungen zum Abfragen von Daten in SQL Server behandelt.
4
Unterrichtseinheit 1 : Einführung in Transact-SQL
DDL-Anweisungen Inhalt dieser Folie
Geben Sie den Kursteilnehmern eine Einführung in DDL-Anweisungen.
!
Einstieg
DDL-Anweisungen definieren eine Datenbank, indem Datenbanken, Tabellen und benutzerdefinierte Datentypen erstellt werden.
!
Definieren der Datenbankobjekte #
CREATE object_name
#
ALTER object_name
#
DROP object_name
Entsprechende Berechtigungen werden benötigt
USE USE Northwind Northwind CREATE CREATE TABLE TABLE customer customer (cust_id (cust_id int, int, company company varchar(40), varchar(40), contact contact varchar(30), varchar(30), phone phone char(12) char(12) )) GO GO
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Weitere Informationen Weitere Informationen zu DDL-Anweisungen finden Sie im Kurs 2322A, Verwalten einer Microsoft SQL Server 2000Datenbank.
DDL-Anweisungen (Data Definition Language) definieren die Datenbank, indem Datenbanken, Tabellen und benutzerdefinierte Datentypen erstellt werden. Darüber hinaus können Sie mit DDL-Anweisungen Datenbankobjekte verwalten. Zu den DDL-Anweisungen zählen folgende: !
CREATE object_name
!
ALTER object_name
!
DROP object_name
Standardmäßig können nur die Mitglieder der Rollen sysadmin, dbcreator, db_owner oder db_ddladmin DDL-Anweisungen ausführen. Im Allgemeinen wird empfohlen, dass keine anderen Konten zum Erstellen von Datenbankobjekten verwendet werden. Wenn verschiedene Benutzer eigene Objekte in einer Datenbank erstellen, muss jeder Objektbesitzer jedem Benutzer dieser Objekte die entsprechenden Berechtigungen erteilen. Wegen des enormen Verwaltungsaufwands sollte dies vermieden werden. Durch das Beschränken der Anweisungsberechtigungen auf diese Rollen können darüber hinaus auch Probleme mit dem Objektbesitz vermieden werden. Solche Probleme können auftreten, wenn ein Objektbesitzer aus einer Datenbank entfernt wurde oder wenn der Besitzer einer gespeicherten Prozedur oder Sicht nicht der Besitzer der zugrunde liegenden Tabellen ist. Beispiel
Das folgende Skript erstellt in der Northwind-Datenbank eine Tabelle mit dem Namen customer. Es schließt die Spalten cust_id, company, contact und phone ein. USE Northwind CREATE TABLE customer (cust_id int, company varchar(40),contact varchar(30), phone char(12) ) GO
Unterrichtseinheit 1 : Einführung in Transact-SQL
5
DCL-Anweisungen Inhalt dieser Folie
Geben Sie den Kursteilnehmern eine Einführung in DCL-Anweisungen.
!
Einstieg
DCL-Anweisungen steuern den Zugriff auf Datenbankobjekte und auf die Berechtigung, bestimmte Anweisungen auszuführen. !
Setzen oder Ändern von Berechtigungen #
GRANT
#
DENY
#
REVOKE
Entsprechende Berechtigungen werden benötigt
USE USE Northwind Northwind GRANT GRANT SELECT SELECT ON ON products products TO TO public public GO GO
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Methodischer Hinweis Weitere Informationen zu DCL-Anweisungen finden Sie im Kurs 2322A, Verwalten einer Microsoft SQL Server 2000Datenbank.
DCL-Anweisungen (Data Control Language) werden verwendet, um die mit einem Datenbankbenutzer oder einer Datenbankrolle verbundenen Berechtigungen zu ändern. In der folgenden Tabelle werden die DCL-Anweisungen beschrieben. Anweisung
Beschreibung
GRANT
Erstellt einen Eintrag im Sicherheitssystem, der es einem Benutzer ermöglicht, mit Daten zu arbeiten oder bestimmte Transact-SQLAnweisungen auszuführen.
DENY
Erstellt einen Eintrag im Sicherheitssystem, der eine Berechtigung eines Sicherheitskontos verweigert und verhindert, dass der Benutzer, die Gruppe oder die Rolle die Berechtigung über die Gruppen- und Rollenmitgliedschaft erbt.
REVOKE
Entfernt eine zuvor erteilte oder verweigerte Berechtigung.
Standardmäßig können nur die Mitglieder der Rollen sysadmin, dbcreator, db_owner oder db_securityadmin DCL-Anweisungen ausführen. Beispiel
In diesem Beispiel wird der public-Rolle die Berechtigung erteilt, die products-Tabelle abzufragen. USE Northwind GRANT SELECT ON products TO public GO
6
Unterrichtseinheit 1 : Einführung in Transact-SQL
DML-Anweisungen Inhalt dieser Folie
Geben Sie den Kursteilnehmern eine Einführung in DML-Anweisungen.
!
Benutzen Sie DML-Anweisungen, um Daten zu ändern oder Informationen abzurufen # SELECT # INSERT # UPDATE # DELETE
!
Entsprechende Berechtigungen werden benötigt
Einstieg
DML-Anweisungen arbeiten mit den Daten in der Datenbank.
USE USE Northwind Northwind SELECT SELECT categoryid, categoryid, productname, productname, productid, productid, unitprice unitprice FROM FROM products products GO GO
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** DML-Anweisungen (Data Manipulation Language) arbeiten mit den Daten in der Datenbank. Mit Hilfe von DML-Anweisungen können Sie Daten ändern oder Informationen abrufen. Zu den DML-Anweisungen zählen folgende:
Beispiel
!
SELECT
!
INSERT
!
UPDATE
!
DELETE
In diesem Beispiel werden die Kategoriekennung, der Produktname, die Product ID und der Stückpreis der Produkte in der Northwind-Datenbank abgerufen. USE Northwind SELECT categoryid, productname, productid, unitprice FROM products GO
Unterrichtseinheit 1 : Einführung in Transact-SQL
7
" Transact-SQL-Syntaxelemente Inhalt dieser Folie
Stellen Sie verschiedene Syntaxelemente von Transact-SQL vor.
!
Batchanweisungen
!
Systemfunktionen
Einstieg
!
Kommentare
!
Operatoren
!
Bezeichner
!
Ausdrücke
!
Datentypen
!
!
Variablen
Sprachelemente zur Ablaufsteuerung
!
Reservierte Schlüsselwörter
DML-Anweisungen werden mit Hilfe einer Reihe von Transact-SQL-Syntaxelementen erstellt.
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** DML-Anweisungen werden mit Hilfe einer Reihe von Transact-SQLSyntaxelementen erstellt. Zu diesen Anweisungen gehören folgende: !
Batchanweisungen
!
Kommentare
!
Bezeichner
!
Datentypen
!
Variablen
!
Systemfunktionen
!
Operatoren
!
Ausdrücke
!
Sprachelemente zur Ablaufsteuerung
!
Reservierte Schlüsselwörter
8
Unterrichtseinheit 1 : Einführung in Transact-SQL
Batchanweisungen Inhalt dieser Folie
Führen Sie vor, wie Batches von Transact-SQL ausgeführt werden.
!
Einstieg
GO #
Welches Tool Sie auch verwenden, Sie müssen wissen, auf welche Art und Weise der Transact-SQLCode verarbeitet werden soll.
#
!
Kennzeichnet Batches von Transact-SQL-Anweisungen für Tools und Dienstprogramme Ist keine wirkliche Transact-SQL-Anweisung
EXEC #
#
Führt eine benutzerdefinierte Funktion, eine Systemprozedur, eine benutzerdefinierte gespeicherte Prozedur oder eine erweiterte gespeicherte Prozedur durch Steuert die Ausführung einer Zeichenfolge in einem Transact-SQL-Batch
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** SQL Server verarbeitet einzelne oder mehrere Transact-SQL-Anweisungen in Batches. Eine Batchanweisung weist SQL Server an, alle Anweisungen im Batch zu analysieren und auszuführen. Es gibt zwei Standardmethoden, mit denen Batches an SQL Server ausgegeben werden.
GO SQL Server-Dienstprogramme interpretiert GO als Signal dafür, dass der aktuelle Batch von Transact-SQL-Anweisungen an SQL Server gesendet werden soll. Ein GO-Befehl kennzeichnet Batches von Transact-SQLAnweisungen für Tools und Dienstprogramme und beendet Batches. Ein GOBefehl ist keine wirkliche Transact-SQL-Anweisung. Beachten Sie die folgenden Punkte, wenn Sie GO verwenden: !
Der aktuelle Batch von Anweisungen umfasst sämtliche Anweisungen, die seit dem letzten GO-Befehl oder seit dem Beginn der Ad-hoc-Sitzung (bzw. seit dem letzten Skript, wenn der erste GO-Befehl ein Skript ist) eingegeben wurden.
!
Eine Transact-SQL-Anweisung kann nicht die gleiche Zeile belegen wie ein GO-Befehl, obwohl die Zeile Kommentare enthalten kann.
!
Benutzer müssen die Regeln für Batches befolgen. So müssen einige DDL-Anweisungen z. B. getrennt von anderen TransactSQL-Anweisungen ausgeführt werden, indem die Anweisungen mit einem GO-Befehl getrennt werden. Der Gültigkeitsbereich von lokalen (benutzerdefinierten) Variablen ist auf einen Batch beschränkt; nach einem GO-Befehl kann daher nicht auf eine dieser Variablen verwiesen werden.
Anmerkung GO ist keine wirkliche Transact-SQL-Anweisung; der GO-Befehl wird verwendet, um Batches für Tools und Dienstprogramme zu kennzeichnen.
Unterrichtseinheit 1 : Einführung in Transact-SQL
9
EXEC Die EXEC-Direktive wird verwendet, um eine benutzerdefinierte Funktion, eine Systemprozedur, eine benutzerdefinierte gespeicherte Prozedur oder eine erweiterte gespeicherte Prozedur auszuführen; sie kann zudem die Ausführung einer Zeichenfolge in einem Transact-SQL-Batch steuern. Parameter können als Argumente übergeben werden, und es kann ein Rückgabestatus zugewiesen werden.
10
Unterrichtseinheit 1 : Einführung in Transact-SQL
Kommentare Inhalt dieser Folie
Geben Sie den Kursteilnehmern eine Einführung in die allgemeine Verwendung von Kommentaren.
Einstieg
Kommentare sind nicht auszuführende Zeichenfolgen, die in Anweisungen platziert werden können, um die Anweisung zu kommentieren oder Teile davon während des Testens zu deaktivieren.
!
Inline-Kommentare
Beispiel Beispiel 11
SELECT SELECT productname productname ,, (unitsinstock (unitsinstock -- unitsonorder) unitsonorder) --- Berechnet Berechnet das das Inventar Inventar ,, supplierID supplierID FROM FROM products products GO GO !
Blockkommentare
Beispiel Beispiel 33
/* /* Dieses Dieses Codebeispiel Codebeispiel ruft ruft alle alle Zeilen Zeilen der der products-Tabelle products-Tabelle ab ab und und zeigt zeigt den den Einheitspreis, Einheitspreis, den den Einheitspreis Einheitspreis erhöht erhöht um um 10 10 Prozent Prozent und und den den Namen Namen des des Produkts Produkts an. an. */ */ USE USE Northwind Northwind SELECT SELECT unitprice, unitprice, (unitprice (unitprice ** 1.1), 1.1), productname productname FROM FROM products products GO GO
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Methodischer Hinweis
Inline-Kommentare am Anfang der Zeile können bei der Behandlung von Problemen mit Skripts helfen.
Kommentare sind nicht auszuführende Textzeichenfolgen, die in Anweisungen platziert werden, um die von der Anweisung ausgeführte Aktion zu beschreiben oder eine oder mehrere Zeilen der Anweisung zu deaktivieren. Kommentare können auf zwei Arten verwendet werden - in derselben Zeile wie die Anweisung (Inline) oder als Block.
Inline-Kommentare Inline-Kommentare können mit Hilfe von zwei Bindestrichen (--) erstellt werden, mit denen ein Kommentar von einer Anweisung abgegrenzt wird. Transact-SQL ignoriert Text, der rechts von den Kommentarzeichen steht. Darüber hinaus können mit diesem Kommentarzeichen auch Zeilen einer Anweisung deaktiviert werden. Beispiel 1
In diesem Beispiel wird in einem Inline-Kommentar erklärt, welche Art von Berechnung durchgeführt wird. USE Northwind SELECT productname , (unitsinstock - unitsonorder) -- Berechnet das Inventar , supplierid FROM products GO
Unterrichtseinheit 1 : Einführung in Transact-SQL
Beispiel 2
11
In diesem Beispiel wird mit einem Inline-Kommentar verhindert, dass ein Teil einer Anweisung ausgeführt wird. USE Northwind SELECT productname , (unitsinstock - unitsonorder) -- Berechnet das Inventar -- , supplierid FROM products GO
Blockkommentare Sie können Kommentarblöcke mit mehreren Zeilen erstellen, indem Sie ein Kommentarzeichen (/*) am Anfang des Kommentartextes platzieren, dann die Kommentare eingeben und den Kommentar mit einem abschließenden Kommentarzeichen (*/) beenden. Mit diesem Kommentarkennzeichner können Sie eine oder mehrere Zeilen umfassende Kommentare oder Kommentarheader erstellen - beschreibenden Text, der die nachfolgenden Anweisungen dokumentiert. Kommentarheader schließen häufig den Namen des Verfassers, das Datum der Erstellung und letzten Änderung des Skripts, sowie Versionsinformationen und eine Beschreibung der von der Anweisung ausgeführten Aktion ein. Beispiel 3
Dieses Beispiel zeigt einen Kommentarheader, der mehrere Zeilen umfasst. /* Dieses Codebeispiel ruft alle Zeilen der products-Tabelle ab und zeigt den Einheitspreis, den Einheitspreis erhöht um 10 Prozent und den Namen des Produkts an. */ USE Northwind SELECT unitprice, (unitprice * 1.1), productname FROM products GO
Anmerkung Sie sollten im gesamten Skript Kommentare platzieren, sodass die von den Anweisungen ausgeführten Aktionen beschrieben werden. Dies ist besonders wichtig, wenn andere Personen das Skript überprüfen und implementieren müssen. Beispiel 4
Dieser Abschnitt eines Skripts ist in Kommentarzeichen gesetzt, damit er nicht ausgeführt wird. Dies kann beim Debuggen oder bei der Problembehandlung in einer Skriptdatei hilfreich sein. /* DECLARE @v1 int SET @v1 = 0 WHILE @v1 < 100 BEGIN SELECT @v1 = (@v1 + 1) SELECT @v1 END */
12
Unterrichtseinheit 1 : Einführung in Transact-SQL
" Bezeichner Inhalt dieser Folie
Stellen Sie die Regeln zum Benennen von SQL ServerObjekten (Regeln für Bezeichner) vor.
!
Standardmäßige Bezeichner # Das erste Zeichen muss ein alphabetisches Zeichen sein # Andere Zeichen können aus Buchstaben, Zahlen oder Symbolen bestehen # Bezeichner, die mit einem Symbol beginnen, werden in besonderen Fällen verwendet
!
Begrenzte Bezeichner # Werden benutzt, wenn Namen eingebettete Leerzeichen enthalten # Werden benutzt, wenn reservierte Wörter Teile von Namen sind # Müssen in Klammern ([ ]) oder doppelte Anführungszeichen (" ") gesetzt werden
Einstieg
SQL Server stellt eine Reihe standardmäßiger Benennungsregeln für Objektbezeichner bereit sowie eine Methode zum Verwenden von Trennzeichen für Bezeichner, die nicht dem Standard entsprechen.
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Methodischer Hinweis
Führen Sie vor, wie SQL Server Query Analyzer die Anweisungselemente automatisch farbcodiert, um reservierte Wörter, Zeichenfolgen usw. anzuzeigen.
SQL Server stellt eine Reihe standardmäßiger Benennungsregeln für Objektbezeichner bereit sowie eine Methode zum Verwenden von Trennzeichen für Bezeichner, die nicht dem Standard entsprechen. Es wird empfohlen, dass Sie Objekte mit Hilfe der standardmäßigen Zeichen für Bezeichner benennen, falls dies möglich ist.
Standardmäßige Bezeichner Standardmäßige Bezeichner können zwischen einem und 128 Zeichen enthalten, darunter Buchstaben, Symbole (_, @, oder #) und Zahlen. Standardmäßige Bezeichner dürfen keine eingebetteten Leerzeichen enthalten. Zu den Regeln für das Verwenden von Bezeichnern zählen folgende: !
Das erste Zeichen muss ein alphabetisches Zeichen sein (a-z oder A-Z).
!
Nach dem ersten Zeichen kann ein Bezeichner Buchstaben, Zahlen oder eines der Symbole @, $, # oder _ einschließen.
!
Bezeichnernamen, die mit einem Symbol beginnen, werden in besonderen Fällen verwendet: • Ein mit dem Symbol @ beginnender Bezeichner steht für eine lokale Variable oder einen lokalen Parameter. • Ein mit einem Nummernzeichen (#) beginnender Bezeichner steht für eine temporäre Tabelle oder Prozedur. • Ein mit einem doppelten Nummernzeichen (##) beginnender Bezeichner steht für ein globales temporäres Objekt. Anmerkung Namen für temporäre Objekte sollten einschließlich Nummernzeichen (#) oder doppeltem Nummernzeichen (##) eine Länge von 116 Zeichen nicht überschreiten, da SQL Server an temporäre Objekte ein internes numerisches Suffix vergibt.
Unterrichtseinheit 1 : Einführung in Transact-SQL
Weitere Informationen Objektnamen können erst seit der aktuellen Version von SQL Server Leerzeichen enthalten.
13
Begrenzte Bezeichner Wenn ein Bezeichner alle Regeln für das Format von Bezeichnern erfüllt, kann er mit oder ohne Trennzeichen verwendet werden. Ein Bezeichner, der eine oder mehrere Regeln für das Format von Bezeichnern nicht erfüllt, muss immer begrenzt sein. Begrenzte Bezeichner können in den folgenden Situationen verwendet werden: !
Namen enthalten eingebettete Leerzeichen.
!
Reservierte Wörter werden für Objektnamen oder Teile von Objektnamen verwendet.
Begrenzte Bezeichner müssen in Klammern oder doppelte Anführungszeichen gesetzt werden, wenn sie in Transact-SQL-Anweisungen verwendet werden. !
Bezeichner in Klammern werden durch eckige Klammern ([ ]) begrenzt: SELECT * FROM [Blanks In Table Name]
Anmerkung Trennzeichen in Klammern können unabhängig vom Status der SET QUOTED_IDENTIFIER-Option verwendet werden. Weitere Informationen
Die Standardeinstellung in SQL Server 2000 ist ON. Aktivieren Sie jedoch diese Einstellung, um Genauigkeit zu gewährleisten.
!
Bezeichner in Anführungszeichen werden durch doppelte Anführungszeichen ("") begrenzt: SELECT * FROM "Blanks in Table Name"
Bezeichner in Anführungszeichen können nur verwendet werden, wenn die SET QUOTED_IDENTIFIER-Option auf ON festgelegt ist.
14
Unterrichtseinheit 1 : Einführung in Transact-SQL
Benennungsrichtlinien für Bezeichner Inhalt dieser Folie
Stellen Sie empfohlene Benennungsrichtlinien vor.
Einstieg
Namen von Datenbankobjekten sollten möglichst kurz sein.
!
Verwenden Sie kurze Namen
!
Verwenden Sie nach Möglichkeit aussagekräftige Namen
!
Verwenden Sie eine klare und einfache Benennungskonvention
!
Verwenden Sie einen Bezeichner, der den Objekttyp kennzeichnet
!
#
Sichten
#
Gespeicherte Prozeduren
Verwenden Sie eindeutige Objekt- und Benutzernamen #
sales-Tabelle und sales-Rolle
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Beim Benennen von Datenbankobjekten sollten Sie Folgendes beachten: !
Verwenden Sie kurze Namen.
!
Verwenden Sie nach Möglichkeit aussagekräftige Namen.
!
Verwenden Sie eine klare und einfache Benennungskonvention. Entscheiden Sie, was für Ihre Situation am sinnvollsten ist, und achten Sie auf Einheitlichkeit. Versuchen Sie, die Namenskonventionen nicht zu komplex zu gestalten, da sie sonst schwierig nachzuverfolgen und zu verstehen sind. Sie können z. B. die Vokale entfernen, wenn ein Objektname einem Schlüsselwort ähneln soll (wie eine gespeicherte Prozedur zur Sicherung mit dem Namen bckup).
!
Verwenden Sie einen Bezeichner, der den Objekttyp kennzeichnet (insbesondere bei Sichten und gespeicherten Prozeduren). Systemadministratoren verwechseln häufig Sichten mit Tabellen, was zu unerwarteten Problemen führen kann.
!
Verwenden Sie eindeutige Objekt- und Benutzernamen. Vermeiden Sie es z. B., eine sales-Tabelle und eine sales-Rolle in derselben Datenbank zu erstellen.
Unterrichtseinheit 1 : Einführung in Transact-SQL
15
Datentypen Inhalt dieser Folie
Stellen Sie grundlegende Transact-SQL-Datentypen vor.
!
Zahlen
!
SQL-Varianten
Einstieg
!
Datumsangaben
!
Image und Text
!
Zeichen
!
Tabellen
!
Binäre Datentypen
!
Cursor
!
Eindeutige Bezeichner (Globally Unique Identifier, GUID)
!
Benutzerdefiniert
Datentypen schränken den Wertetyp ein, der in einer Datenbank gespeichert werden kann.
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Methodischer Hinweis
In der linken Spalte der Folie sind relativ einfache und häufige Datentypen und in der rechten Spalte komplexere Datentypen aufgeführt.
Datentypen schränken den Wertetyp ein, der in einer Datenbank gespeichert werden kann. Datentypen sind Attribute, die angeben, welche Art von Informationen in einer Spalte, einem Parameter oder einer Variablen gespeichert werden können. Die meisten Transact-SQL-Anweisungen verweisen nicht explizit auf Datentypen, aber die Ergebnisse der meisten Anweisungen werden durch die Interaktionen zwischen den Datentypen der Objekte beeinflusst, auf die in der Anweisung verwiesen wird. SQL Server stellt vom System bereitgestellte (grundlegende) Datentypen zur Verfügung, Sie können jedoch auch Datentypen erstellen. Zu den grundlegenden Datentypen gehören beispielsweise folgende:
Zahlen Dieser Datentyp stellt numerische Werte dar und schließt ganze Zahlen wie int, tinyint, smallint und bigint ein. Er schließt auch präzise Dezimalwerte wie numeric, decimal, money und smallmoney ein. Er schließt zudem Gleitkommawerte wie float und real ein.
Datumsangaben Dieser Datentyp stellt Datumsangaben oder Zeiträume dar. Die beiden Datentypen für Datumsangaben sind datetime (mit einer Genauigkeit von 3,33 Millisekunden) und smalldatetime (mit einer Genauigkeit von 1-MinutenIntervallen).
Zeichen Mit diesem Datentyp werden Zeichendaten oder Zeichenfolgen dargestellt. Er schließt Datentypen mit Zeichenfolgen fester Länge ein, wie z. B. char und nchar, sowie Datentypen mit Zeichenfolgen variabler Länge, wie z. B. varchar und nvarchar.
16
Unterrichtseinheit 1 : Einführung in Transact-SQL
Weitere Informationen
Der rowversion-Datentyp ist der SQL Server 2000Alias für den timestampDatentyp. Der rowversionDatentyp hat die gleiche Funktion wie timestamp. Die Definition von timestamp wird in einer zukünftigen Version von SQL Server geändert, damit sie mit der SQL-99Definition von timestamp übereinstimmt.
Binäre Datentypen Dieser Datentyp ist den Datentypen für Zeichen im Hinblick auf Speicherung und Struktur sehr ähnlich, der Inhalt der Daten wird allerdings als Folge von Bytewerten behandelt. Binäre Datentypen schließen binary und varbinary ein. Ein bit-Datentyp zeigt die einzelnen Bitwerte 0 oder 1 an. Ein rowversionDatentyp zeigt einen speziellen 8-Byte-Binärwert an, der in einer Datenbank eindeutig ist.
Eindeutige Bezeichner Dieser spezielle Datentyp ist vom Typ uniqueidentifier, der einen global eindeutigen Bezeichner (Globally Unique Identifier, GUID) darstellt. Es handelt sich dabei um einen 16-Byte-Hexadezimalwert, der immer eindeutig sein sollte.
SQL-Varianten Dieser Datentyp kann Werte unterschiedlicher, von SQL Server unterstützter Datentypen darstellen, mit Ausnahme von text, ntext, image, timestamp und rowversion.
Image und Text Bei diesen Datentypen handelt es sich um BLOB-Strukturen (Binary Large Object), die Datentypen fester und variabler Länge zum Speichern großer Nicht-Unicode- und Unicode-Zeichendaten und -Binärdaten darstellen, wie z. B. image, text und ntext.
Tabellen Der Datentyp Tabelle kann nur verwendet werden, um lokale Variablen vom Typ Tabelle zu definieren oder um Werte einer benutzerdefinierten Funktion zurückzugeben.
Cursor Dieser Datentyp wird zum Programmieren in gespeicherten Prozeduren und bei Low-Level-Clientschnittstellen verwendet. Der cursor-Datentyp wird niemals als Teil einer DDL-Anweisung verwendet.
Benutzerdefinierte Datentypen Dieser Datentyp wird vom Datenbankadministrator erstellt und basiert auf Systemdatentypen. Verwenden Sie benutzerdefinierte Datentypen, wenn in mehreren Tabellen derselbe Datentyp in einer Spalte gespeichert werden muss und Sie sicherstellen müssen, dass die Spalten über exakt denselben Datentyp, dieselbe Länge und dieselbe Null-Zulässigkeit verfügen.
Unterrichtseinheit 1 : Einführung in Transact-SQL
17
Variablen Inhalt dieser Folie
Definieren Sie eine Variable, und erläutern Sie, wie sie verwendet wird.
!
Benutzerdefiniert mit einer DECLARE @-Anweisung
Einstieg
!
Wertezuweisung mit einer SET- oder SELECT @-Anweisung
!
Variablen haben einen lokalen Gültigkeitsbereich
Mit Hilfe der DECLAREAnweisung werden lokale Variablen in einem Batch oder einer Prozedur deklariert, und mit einer SELECTAnweisung werden den Variablen Werte zugewiesen.
USE USE Northwind Northwind DECLARE DECLARE @EmpID @EmpID varchar(11) varchar(11) ,@vlName ,@vlName char(20) char(20) SET SET @vlname @vlname == 'Dodsworth' 'Dodsworth' SELECT SELECT @EmpID @EmpID == employeeid employeeid FROM FROM employees employees WHERE WHERE LastName LastName == @vlname @vlname SELECT SELECT @EmpID @EmpID AS AS EmployeeID EmployeeID GO GO
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Variablen sind Sprachelemente mit zugewiesenen Werten. Lokale Variablen können in Transact-SQL verwendet werden. Eine lokale Variable wird von einem Benutzer in einer DECLARE-Anweisung definiert. Ihr wird ein Anfangswert in einer SET-Anweisung oder einer SELECT-Anweisung zugewiesen, und sie wird dann in der Anweisung, dem Batch oder der Prozedur verwendet, in der bzw. dem sie deklariert wurde. Der Gültigkeitsbereich einer lokalen Variablen entspricht der Dauer des Batches, in dem die lokale Variable definiert wurde. Eine lokale Variable wird mit einem @-Symbol vor dem jeweiligen Namen angezeigt. Anmerkung Variablen mit zwei @-Symbolen vor dem Namen stellen einen Funktionstyp dar. Weitere Informationen dazu finden Sie auf der Registerkarte Inhalt unter dem Thema „Transact-SQL-Referenz“, „Funktionen“ in der SQL Server-Onlinedokumentation.
18
Syntax
Unterrichtseinheit 1 : Einführung in Transact-SQL
DECLARE {@local_variable data_type} [,...n] SET @local_variable_name = expression
Beispiel
In diesem Beispiel werden die lokalen Variablen @EmpID und @vlname erstellt. Anschließend wird der Variablen @vlname und dann der Variablen @EmpID ein Wert zugewiesen, indem die Northwind-Datenbank abgefragt und der Datensatz ausgewählt wird, der den Wert der lokalen Variablen @vlname enthält. USE Northwind DECLARE @EmpID varchar(11) ,@vlName char(20) SET @vlname = 'Dodsworth' SELECT @EmpID = employeeid FROM employees WHERE LastName = @vlname SELECT @EmpID AS EmployeeID GO
Ergebnis
EmployeeID 9 (1 row(s) affected)
Unterrichtseinheit 1 : Einführung in Transact-SQL
19
" Systemfunktionen Inhalt dieser Folie
Geben Sie eine Übersicht über die in SQL Server verfügbaren Funktionen.
Einstieg
Transact-SQL stellt zahlreiche Funktionen bereit, die Daten zurückgeben.
!
Aggregatfunktionen
USE USE Northwind Northwind SELECT SELECT AVG AVG (unitprice) (unitprice) AS AS AvgPrice AvgPrice FROM FROM products products GO GO !
Skalarfunktionen
USE USE Northwind Northwind SELECT SELECT DB_NAME() DB_NAME() AS AS 'database‘ 'database‘ GO GO !
Rowsetfunktionen
SELECT SELECT ** FROM FROM OPENQUERY OPENQUERY (OracleSvr, (OracleSvr, 'SELECT 'SELECT name, name, id id FROM FROM owner.titles') owner.titles')
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Sie können Funktionen, einschließlich Systemfunktionen, überall dort verwenden, wo ein Ausdruck in einer Transact-SQL-Anweisung zulässig ist. Transact-SQL stellt zahlreiche Funktionen bereit, die Informationen zurückgeben. Methodischer Hinweis Es gibt weitere Funktionstypen. Die Kursteilnehmer sollten in der Onlinedokumentation unter Funktionen nachlesen.
Einige Funktionen besitzen Eingabeparameter und geben Werte zurück, die in Ausdrücken verwendet werden können. Andere Funktionen geben nur Werte zurück, und es sind keine Eingaben erforderlich. Die Transact-SQLProgrammiersprache stellt viele Funktionstypen bereit. Sie sollten sich mit den folgenden drei Funktionstypen vertraut machen: Anmerkung Weitere Informationen dazu finden Sie auf der Registerkarte Inhalt unter dem Thema „Transact-SQL-Referenz“, „Funktionen“ in der SQL Server-Onlinedokumentation. Aggregatfunktionen Verarbeiten die Werte einer ausgewählten Spalte in einem Resultset, und geben einen einzelnen zusammengefassten Wert zurück.
Beispiel 1
In diesem Beispiel wird der Durchschnitt der unitprice-Spalte für alle Produkte in der products-Tabelle ermittelt. USE Northwind SELECT AVG(unitprice) AS AvgPrice FROM products GO
Ergebnis
AvgPrice 28.8663 (1 row(s) affected)
20
Unterrichtseinheit 1 : Einführung in Transact-SQL
Skalarfunktionen Geben einen einzelnen Wert zurück und verarbeiten keinen oder viele einzelne skalare Werte. Diese Funktionen können auf alle gültigen Ausdrücke angewendet werden. Skalarfunktionen können in die folgenden Kategorien aufgeteilt werden.
Beispiel 2
Funktionskategorie
Beschreibung
Konfiguration
Gibt Informationen zur aktuellen Konfiguration zurück.
Cursor
Gibt Informationen zu Cursorn zurück.
Datum und Zeit
Verarbeitet Datums- und Zeiteingabewerte und gibt einen Zeichenfolgenwert, einen numerischen Wert oder einen Datums- und Zeitwert zurück.
Mathematisch
Führt eine Berechnung auf der Grundlage von Eingabewerten durch, die als Parameter für die Funktion bereitgestellt werden, und gibt einen numerischen Wert zurück.
Metadaten
Gibt Informationen zur Datenbank und den Datenbankobjekten zurück.
Sicherheit
Gibt Informationen zu Benutzern und Rollen zurück.
Zeichenfolge
Verarbeitet den Eingabewert einer Zeichenfolge (char oder varchar) und gibt eine Zeichenfolge oder einen numerischen Wert zurück.
System
Führt Operationen aus und gibt Informationen zu Werten, Objekten und Einstellungen in SQL Server zurück.
Statistische Systemfunktion
Gibt statistische Informationen zum System zurück.
Text und Image
Verarbeitet einen Text- oder Imageeingabewert bzw. eine Text- oder Imagespalte und gibt Informationen zum Wert zurück.
Dieses Beispiel einer Metadatenfunktion gibt den Namen der momentan verwendeten Datenbank zurück. USE Northwind SELECT DB_NAME() AS 'database' GO
Ergebnis
database Northwind (1 row(s) affected)
Unterrichtseinheit 1 : Einführung in Transact-SQL
21
Rowsetfunktionen Können wie Tabellenverweise in einer Transact-SQLAnweisung verwendet werden. Beispiel 3
Methodischer Hinweis
Dieses Beispiel kann nur mit Zugriff auf einen OracleServer ordnungsgemäß ausgeführt werden.
In diesem Beispiel wird eine verteilte Abfrage durchgeführt, um Informationen aus der titles-Tabelle abzurufen. Ohne Zugriff auf eine Oracle-Datenbank wird dieses Beispiel nicht ordnungsgemäß ausgeführt. SQL Server generiert eine entsprechende Meldung. SELECT * FROM OPENQUERY(OracleSvr, 'SELECT name, id FROM owner.titles') GO
22
Unterrichtseinheit 1 : Einführung in Transact-SQL
Beispiele für Systemfunktionen Inhalt dieser Folie
Führen Sie einige der allgemeinen Verwendungsmöglichkeiten der Funktionen vor.
Einstieg
Systemfunktionen werden im Allgemeinen zum Konvertieren von Datumsangaben aus dem Format eines Landes in das eines anderen Landes verwendet.
Beispiel 1 SELECT SELECT Style Style UNION UNION SELECT SELECT UNION UNION SELECT SELECT GO GO
'ANSI:', 'ANSI:', CONVERT(varchar(30), CONVERT(varchar(30), GETDATE(), GETDATE(), 102) 102) AS AS 'Japanese:', 'Japanese:', CONVERT(varchar(30), CONVERT(varchar(30), GETDATE(), GETDATE(), 111) 111) 'European:', 'European:', CONVERT(varchar(30), CONVERT(varchar(30), GETDATE(), GETDATE(), 113) 113)
Ergebnis Style Style ANSI: ANSI: Japanese: Japanese:
1998.11.20 1998.11.20 1998/11/20 1998/11/20
European: European:
20 20Nov Nov1998 199816:44:12:857 16:44:12:857
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Methodischer Hinweis
Weisen Sie auf die Formatoptionen im Thema „CONVERT“ in der SQL Server-Onlinedokumentation hin.
Beispiel 1
Systemfunktionen werden im Allgemeinen zum Konvertieren von Datumsangaben aus dem Format eines Landes in das eines anderen Landes verwendet. Anmerkung Verwenden Sie die CONVERT-Funktion mit der Formatoption, um Datumsformate zu ändern und das Datumsformat zu ermitteln, das zurückgegeben wird.
Dieses Beispiel zeigt, wie Datumsangaben in unterschiedliche Formate konvertiert werden können. SELECT 'ANSI:', CONVERT (varchar(30), GETDATE(), 102) AS Style UNION SELECT 'Japanese:', CONVERT(varchar(30), GETDATE(), 111) UNION SELECT 'European:', CONVERT(varchar(30), GETDATE(), 113) GO
Ergebnis
Style European: Japanese: ANSI:
20 Nov 1998 16:44:12:857 11/20/98 1998.11.20
Unterrichtseinheit 1 : Einführung in Transact-SQL
Beispiel 2
23
In diesem Beispiel wird die DATEFORMAT-Option der SET-Anweisung verwendet, um Datumsangaben für die Dauer einer Verbindung zu formatieren. Diese Einstellung wird nur bei der Interpretation von Zeichenfolgen verwendet, wenn die Zeichenfolgen in Datumswerte konvertiert werden. Sie hat keine Auswirkung auf die Anzeige von Datumswerten. SET DATEFORMAT dmy GO DECLARE @vdate datetime SET @vdate = '29/11/98' SELECT @vdate GO
Ergebnis
1998-11-29 00:00:00.000 (1 row(s) affected)
Beispiel 3
In diesem Beispiel werden der aktuelle Benutzername und die Anwendung zurückgegeben, die der Benutzer für die aktuelle Sitzung oder Verbindung verwendet. Der Benutzer ist in diesem Beispiel ein Mitglied der sysadminRolle. USE library SELECT user_name(), app_name() GO
Ergebnis
dbo
MS SQL Query Analyzer
(1 row(s) affected)
Beispiel 4
In diesem Beispiel wird ermittelt, ob in der firstname-Spalte der memberTabelle der library-Datenbank NULL-Werte zugelassen sind. Das Ergebnis Null (FALSE) bedeutet, dass keine NULL-Werte zugelassen sind, und das Ergebnis Eins (TRUE) bedeutet, dass NULL-Werte zugelassen sind. Beachten Sie, dass die OBJECT_ID-Funktion in die COLUMNPROPERTY-Funktion eingebettet ist. Dadurch können Sie den Wert für object id der member-Tabelle abfragen. USE library SELECT COLUMNPROPERTY(OBJECT_ID('member'), 'firstname', 'AllowsNull') GO
Ergebnis
0 (1 row(s) affected)
24
Unterrichtseinheit 1 : Einführung in Transact-SQL
Operatoren Inhalt dieser Folie
Zeigen Sie, wie Operatoren zum Ändern von Resultsets verwendet werden können.
!
Einstieg
Mit Operatoren können Sie Berechnungen durchführen oder Werte vergleichen.
!
Typen von Operatoren #
Arithmetisch
#
Vergleich
#
Verkettung von Zeichenfolgen
#
Logisch
Rangfolgenebenen von Operatoren
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Bei Operatoren handelt es sich um Symbole, die mathematische Berechnungen, Zeichenfolgenverkettungen und Vergleiche zwischen Spalten, Konstanten und Variablen durchführen. Sie können kombiniert und in Suchbedingungen verwendet werden. Beim Kombinieren von Operatoren basiert die Reihenfolge, in der sie verarbeitet werden, auf einer vordefinierten Rangfolge. Teilsyntax
{constant | column_name | function | (subquery)} [{arithmetic_operator | string_operator | AND | OR | NOT} {constant | column_name | function | (subquery)}…]
Typen von Operatoren SQL Server unterstützt vier Typen von Operatoren: arithmetische Operatoren, Vergleichsoperatoren, Operatoren für die Verkettung von Zeichenfolgen und logische Operatoren. Methodischer Hinweis Transact-SQL unterstützt auch bitweise Operatoren. Sie werden hier nicht behandelt, da sie nur sehr selten verwendet werden.
Arithmetisch Arithmetische Operatoren führen Berechnungen mit numerischen Spalten oder Konstanten durch. Transact-SQL unterstützt multiplikative Operatoren, einschließlich Multiplikation (*), Division (/) und Modulo (%) - der ganzzahlige Rest nach einer ganzzahligen Division - sowie die Addition (+) und Subtraktion (-) additiver Operatoren.
Unterrichtseinheit 1 : Einführung in Transact-SQL
25
Vergleich Vergleichsoperatoren vergleichen zwei Ausdrücke. Vergleiche können zwischen Variablen, Spalten und Ausdrücken eines ähnlichen Typs stattfinden. Zu den Vergleichsoperatoren zählen die in der folgenden Tabelle aufgeführten Operatoren. Operator
Bedeutung
=
Gleich
>
Größer als
=
Größer als oder gleich
> 10000 10000 GO GO
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Ausdrücke sind eine Kombination aus Symbolen und Operatoren, die zu einem einzelnen Datenwert ausgewertet werden. Es kann sich dabei um einfache Ausdrücke handeln - wie bei einer Konstante, einer Variablen oder einem Skalarwert - oder um komplexe Ausdrücke, die erstellt werden, indem ein einfacher Ausdruck bzw. mehrere einfache Ausdrücke mit Operatoren verbunden werden. Der Datentyp des Ergebnisses hängt von den Elementen im Ausdruck ab. Implizite Datentypkonvertierungen werden häufig für Elemente im Ausdruck während der Auswertung durchgeführt. Beispiel
Im folgenden Beispiel wird der Warenbestellwert berechnet, indem der Preis pro Einheit mit der bestellten Menge multipliziert wird. Anschließend werden die Ergebnisse gefiltert, sodass nur die Zeilen zurückgegeben werden, die Bestellungen mit Produkten enthalten, deren Wert größer als $10.000 ist. USE SELECT
Northwind OrderID, ProductID ,(UnitPrice * Quantity) as ExtendedAmount FROM [Order Details] WHERE (UnitPrice * Quantity) > 10000 GO
Ergebnis
OrderID
ProductID
ExtendedAmount
10353 10417 10424 10865 10889 10981
38 38 38 38 38 38
10540.0000 10540.0000 10329.2000 15810.0000 10540.0000 15810.0000
(6 row(s) affected)
Unterrichtseinheit 1 : Einführung in Transact-SQL
27
Sprachelemente zur Ablaufsteuerung Inhalt dieser Folie
Stellen Sie die Sprachelemente von Transact-SQL vor, die die Verarbeitung von Anweisungen steuern.
Beispiel Beispiel 22
!
Einstieg
Transact-SQL unterstützt Sprachelemente, die den Ablauf der Logik in Anweisungen steuern. !
Anweisungsebene #
BEGIN … END-Blöcke
#
IF … ELSE-Blöcke
#
WHILE-Konstrukte
Zeilenebene #
CASE-Funktion
DECLARE DECLARE @n @n tinyint tinyint SET SET @n @n == 55 IF IF (@n (@n BETWEEN BETWEEN 44 and and 6) 6) BEGIN BEGIN WHILE WHILE (@n (@n >> 0) 0) BEGIN BEGIN SELECT SELECT @n @n AS AS 'Number' 'Number' ,CASE ,CASE WHEN WHEN (@n (@n %% 2) 2) == 11 THEN THEN 'EVEN' 'EVEN' ELSE ELSE 'ODD' 'ODD' END END AS AS 'Type' 'Type' SET SET @n @n == @n @n -- 11 END END END END ELSE ELSE PRINT PRINT 'Keine 'Keine Analyse‘ Analyse‘ GO GO
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Transact-SQL enthält mehrere Sprachelemente, durch die der Ablauf der Logik in einer Anweisung gesteuert wird. Darüber hinaus enthält es die CASEFunktion, die es ermöglicht, eine bedingte Logik in einer einzelnen Zeile und innerhalb einer SELECT- oder UPDATE-Anweisung gleichzeitig zu verwenden.
Anweisungsebene Mit den folgenden Sprachelementen können Sie den Ablauf der Logik innerhalb eines Skripts steuern: BEGIN … END-Blöcke Diese Elemente schließen eine Reihe von Transact-SQL-Anweisungen ein, sodass sie als Einheit behandelt werden. IF … ELSE-Blöcke Diese Elemente geben an, dass SQL Server die erste Alternative ausführen soll, wenn eine bestimmte Bedingung erfüllt ist. Andernfalls soll SQL Server die zweite Alternative ausführen. WHILE-Konstrukte Durch diese Elemente wird eine Anweisung wiederholt ausgeführt, solange die angegebene Bedingung erfüllt ist. Mit den Anweisungen BREAK und CONTINUE wird die Ausführung der Anweisungen innerhalb einer WHILE-Schleife gesteuert. Tipp Rücken Sie für eine bessere Lesbarkeit die Transact-SQL-Anweisungen innerhalb eines Blockes zur Ablaufsteuerung ein.
28
Unterrichtseinheit 1 : Einführung in Transact-SQL
Beispiel 1
In diesem Beispiel wird ermittelt, ob für einen Kunden noch Bestellungen offen sind, bevor dieser Kunde aus der Kundenliste gelöscht wird. USE Northwind IF EXISTS (SELECT * FROM orders WHERE customerID = 'frank') PRINT '*** Kunde kann nicht gelöscht werden ***' ELSE BEGIN DELETE customers WHERE customerID = 'frank' PRINT '*** Kunde gelöscht ***' END GO
Zeilenebene Eine CASE-Funktion listet Prädikate auf, weist jedem Prädikat einen Wert zu und testet dann jedes Prädikat. Wenn der Ausdruck in der WHEN-Klausel den Wert TRUE zurückgibt, gibt die CASE-Funktion den Ausdruck in der THENKlausel zurück. Wenn der Ausdruck den Wert FALSE zurückgibt und es wurde eine ELSE-Klausel angegeben, gibt SQL Server den Wert in der ELSE-Klausel zurück. Eine CASE-Funktion kann in jedem Ausdruck verwendet werden. Syntax
CASE expression {WHEN expression THEN result} [,…n] [ELSE result] END
Beispiel 2
Im folgenden Beispiel wird eine lokale Variable deklariert, danach überprüft, ob sie die Werte 4, 5 oder 6 hat, und, falls ja, über eine WHILE-Schleife ermittelt, ob es sich beim aktuellen Wert um eine gerade oder ungerade Zahl handelt.
Methodischer Hinweis
Weisen Sie darauf hin, dass durch den in Beispiel 2 verwendeten Einzug des Blockes die Lesbarkeit verbessert wird.
DECLARE @n tinyint SET @n = 5 IF (@n BETWEEN 4 and 6) BEGIN WHILE (@n > 0) BEGIN SELECT @n AS 'Number' ,CASE WHEN (@n % 2) = 1 THEN 'ODD' ELSE 'EVEN' END AS 'Type' SET @n = @n - 1 END END ELSE PRINT 'Keine Analyse' GO
Unterrichtseinheit 1 : Einführung in Transact-SQL
Ergebnis
Number
Type
5
EVEN
(1 row(s) affected) Number
Type
4
ODD
(1 row(s) affected) Number
Type
3
EVEN
(1 row(s) affected) Number
Type
2
ODD
(1 row(s) affected) Number
Type
1
EVEN
(1 row(s) affected)
29
30
Unterrichtseinheit 1 : Einführung in Transact-SQL
Reservierte Schlüsselwörter Inhalt dieser Folie
Machen Sie die Kursteilnehmer mit dem Konzept reservierter Schlüsselwörter vertraut.
!
Einstieg
SQL Server reserviert bestimmte Schlüsselwörter für die Verwendung durch das System; vermeiden Sie es, diese Schlüsselwörter für die Namen von Bezeichnern zu verwenden.
!
Bezeichnernamen, die eine spezielle Bedeutung haben #
Transact-SQL-Schlüsselwörter
#
ANSI SQL-92-Schlüsselwörter
#
ODBC-reservierte Schlüsselwörter
Verwenden Sie keine reservierten Schlüsselwörter für Bezeichnernamen
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Methodischer Hinweis
Zeigen Sie die erweitere Liste von Schlüsselwörtern an, die in der SQL ServerOnlinedokumentation zu finden ist.
SQL Server reserviert bestimmte Schlüsselwörter für die ausschließliche Verwendung durch das System. Beispielsweise wird bei Verwendung der Schlüsselwörter DUMP oder BACKUP in einer osql- oder SQL Query Analyzer-Sitzung von SQL Server eine Sicherungskopie des gesamten Inhalts oder eines Teil einer Datenbank erstellt bzw. eine Sicherungskopie des Protokolls erstellt. Sie können an keinem Speicherort reservierte Schlüsselwörter in einer Transact-SQL-Anweisung einschließen, es sei denn, der Speicherort wird durch SQL Server definiert. Sie sollten es vermeiden, einem Objekt den Namen eines reservierten Schlüsselwortes zu geben. Wenn ein Objektname mit einem Schlüsselwort übereinstimmt, müssen Sie jedes Mal, wenn Sie auf das Objekt verweisen, das Objekt in begrenzende Bezeichner, wie z. B. Anführungszeichen oder Klammern [ ], einschließen. Die Systemadministrator- und Datenbankadministrator-Rollen oder der Datenbankersteller sind normalerweise dafür verantwortlich, Transact-SQL-Anweisungen und Datenbanknamen auf reservierte Schlüsselwörter hin zu überprüfen. Achtung Es ist möglich, syntaktisch richtige Transact-SQL-Anweisungen zu erstellen, die möglicherweise erfolgreich analysiert und kompiliert werden, die jedoch während der Ausführung einen Laufzeitfehler zurückgeben. Verwenden Sie optimalerweise keine reservierten Schlüsselwörter.
Unterrichtseinheit 1 : Einführung in Transact-SQL
31
Übungseinheit A: Verwenden der SQL ServerOnlinedokumentation Inhalt dieser Folie
Geben Sie eine Einführung in die Übungseinheit.
Einstieg
In dieser Übungseinheit verwenden Sie die SQL ServerOnlinedokumentation, um Informationen zu SQL Server abzurufen.
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Erläutern Sie die Lernziele der Übungseinheit.
Lernziele Am Ende dieser Übungseinheit werden Sie in der Lage sein, die folgenden Aufgaben auszuführen: • Anzeigen des Inhaltsverzeichnisses in der Microsoft SQL Server-Onlinedokumentation, Verwenden des Indexes, Suchen nach Informationen, sowie Speichern des Pfades der Informationen auf der Registerkarte Favoriten.
Voraussetzungen Keine
Einrichten der Übungseinheit Nicht erforderlich.
Weitere Informationen Wenn Sie Hilfe bei der Ausführung von Dateien benötigen, suchen Sie in der Hilfe zu SQL Query Analyzer nach „Ausführen einer Abfrage“. Daneben sind die folgenden Informationsquellen verfügbar: !
Das Northwind-Datenbankschema.
!
Die SQL Server-Onlinedokumentation.
32
Unterrichtseinheit 1 : Einführung in Transact-SQL
Szenario Der Aufbau des Schulungsraumes soll die Organisation des weltweit agierenden Handelsunternehmens Northwind Traders widerspiegeln. Das Unternehmen hat den fiktiven Domänennamen nwtraders.msft. Der primäre DNS-Server für nwtraders.msft ist der Kursleitercomputer, der die Internetprotokolladresse (IP-Adresse) 192.168.x.200 besitzt (wobei x die zugewiesene Schulungsraumnummer ist). Der Name des Kursleitercomputers ist London. Die folgende Tabelle stellt den Benutzernamen, den Computernamen und die IP-Adresse für jeden Kursteilnehmercomputer in der fiktiven Domäne nwtraders.msft bereit. Suchen Sie den Benutzernamen Ihres Computers, und notieren Sie ihn. Benutzername
Computername
IP-Adresse
SQLAdmin1
Vancouver
192.168.x.1
SQLAdmin2
Denver
192.168.x.2
SQLAdmin3
Perth
192.168.x.3
SQLAdmin4
Brisbane
192.168.x.4
SQLAdmin5
Lisbon
192.168.x.5
SQLAdmin6
Bonn
192.168.x.6
SQLAdmin7
Lima
192.168.x.7
SQLAdmin8
Santiago
192.168.x.8
SQLAdmin9
Bangalore
192.168.x.9
SQLAdmin10
Singapore
192.168.x.10
SQLAdmin11
Casablanca
192.168.x.11
SQLAdmin12
Tunis
192.168.x.12
SQLAdmin13
Acapulco
192.168.x.13
SQLAdmin14
Miami
192.168.x.14
SQLAdmin15
Auckland
192.168.x.15
SQLAdmin16
Suva
192.168.x.16
SQLAdmin17
Stockholm
192.168.x.17
SQLAdmin18
Moscow
192.168.x.18
SQLAdmin19
Caracas
192.168.x.19
SQLAdmin20
Montevideo
192.168.x.20
SQLAdmin21
Manila
192.168.x.21
SQLAdmin22
Tokyo
192.168.x.22
SQLAdmin23
Khartoum
192.168.x.23
SQLAdmin24
Nairobi
192.168.x.24
Veranschlagte Zeit für die Übungseinheit: 15 Minuten
Unterrichtseinheit 1 : Einführung in Transact-SQL
33
Übung 1 Verwenden der SQL Server-Onlinedokumentation In dieser Übung werden Sie in der SQL Server-Onlinedokumentation nach Informationen zu SQL Server suchen.
! So zeigen Sie das Inhaltsverzeichnis von „Erste Schritte“ in der SQL Server-Onlinedokumentation an
Mit diesem Verfahren zeigen Sie das Inhaltsverzeichnis der SQL ServerOnlinedokumentation an und machen sich mit den in der Dokumentation verwendeten Konventionen vertraut. 1. Melden Sie sich an der Schulungsdomäne nwtraders mit Hilfe der Informationen in der folgenden Tabelle an. Option
Eingabe
Benutzername
SQLAdminx (wobei x die Ihrem Computernamen zugewiesene Nummer ist, wie in der Schulungsraumdomäne nwtraders.msft festgelegt)
Kennwort
password
2. Klicken Sie auf der Taskleiste auf die Schaltfläche Start, zeigen Sie auf Programme, anschließend auf Microsoft SQL Server, und klicken Sie dann auf Onlinedokumentation. Anmerkung Sie können auf die Themen zur SQL Server-Installation in der SQL Server-Onlinedokumentation direkt über die SQL Server 2000-CD zugreifen. Legen Sie die SQL Server 2000-CD in das CD-ROM-Laufwerk ein, und klicken sie im Dialogfeld Microsoft SQL Server auf Hilfe zu Setup/Aktualisierung durchsuchen.
3. Überprüfen Sie in der Konsolenstruktur die Organisation der SQL ServerOnlinedokumentation. 4. Klicken Sie auf der Registerkarte Inhalt in der Liste Aktive Untermenge auf Gesamte Sammlung, und überprüfen Sie anschließend den Inhalt von Erste Schritte. 5. Erweitern Sie in der Konsolenstruktur Erste Schritte mit der SQL ServerOnlinedokumentation, und klicken Sie dann auf Typografische Vereinbarungen. Überprüfen Sie die Informationen im Detailbereich. 6. Erweitern Sie in der Konsolenstruktur Verwenden des HTML-HilfeViewers, erweitern Sie Verwenden der SQL Server-Onlinedokumentation, und klicken Sie dann auf Finden eines Themas. Überprüfen Sie die Informationen im Detailbereich. 7. Erweitern Sie in der Konsolenstruktur Finden eines Themas, und klicken Sie dann auf Verwenden der Registerkarte "Suchen". Überprüfen Sie die Informationen im Detailbereich.
34
Unterrichtseinheit 1 : Einführung in Transact-SQL
! So rufen Sie mit dem Index der SQL Server-Onlinedokumentation Informationen zur „Northwind“-Beispieldatenbank ab
Mit diesem Verfahren zeigen Sie mit dem Index der SQL Server-Onlinedokumentation auf einfache Weise Informationen zur Northwind-Beispieldatenbank an. 1. Klicken Sie auf die Registerkarte Index, und geben Sie dann Northwind ein. 2. Doppelklicken Sie auf Northwind-Beispieldatenbank. 3. Doppelklicken Sie im Dialogfeld Themen gefunden auf NorthwindBeispieldatenbank. Überprüfen Sie die Informationen im Detailbereich. 4. Klicken Sie auf die Registerkarte Favoriten, und klicken Sie dann auf Hinzufügen. 5. Klicken Sie auf die Registerkarte Inhalt, erweitern Sie dann in der Konsolenstruktur Northwind-Beispieldatenbank, und beachten Sie die verfügbaren Themen.
! So suchen Sie in der SQL Server-Onlinedokumentation nach einem Wort oder einem Satz
Mit diesem Verfahren suchen Sie in der SQL Server-Onlinedokumentation nach Informationen zur Architektur von SQL Server. 1. Klicken Sie auf die Registerkarte Suchen, aktivieren Sie das Kontrollkästchen Ähnliche Wörter suchen; deaktivieren Sie das Kontrollkästchen Nur Titel suchen. 2. Geben Sie sql NEAR Architektur auf der Registerkarte Suchen ein, und klicken Sie dann auf Themen auflisten. Achten Sie auf die Anzahl gefundener Themen. 3. Deaktivieren Sie auf der Registerkarte Suchen das Kontrollkästchen Ähnliche Wörter suchen; aktivieren Sie das Kontrollkästchen Nur Titel suchen, und klicken Sie dann auf Themen auflisten. Es werden nur zwei Themen gefunden. 4. Doppelklicken Sie auf Grundlegendes zur SQL Server-Architektur. 5. Klicken Sie auf den Detailbereich, und drücken Sie dann STRG+F. 6. Geben Sie in das Feld Suchen nach die Zeichenfolge oltp ein, und klicken Sie auf Weitersuchen. Anmerkung Die Suche findet das erste Vorkommen von oltp. Möglicherweise müssen Sie das Dialogfeld Suchen nach verschieben, um die Auswahl anzuzeigen.
7. Schließen Sie die SQL Server-Onlinedokumentation.
Unterrichtseinheit 1 : Einführung in Transact-SQL
35
Lernzielkontrolle Inhalt dieser Folie
Vertiefen Sie die Lernziele dieser Unterrichtseinheit, indem Sie die Kernpunkte wiederholen.
Einstieg
Die Fragen zur Lernzielkontrolle beziehen sich auf einige der Schlüsselkonzepte, die Inhalt dieser Unterrichtseinheit sind.
!
Die Programmiersprache Transact-SQL
!
Typen von Transact-SQL-Anweisungen
!
Transact-SQL-Syntaxelemente
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Gehen Sie anhand dieser Fragen die Themen der Unterrichtseinheit durch. Klären Sie andere offene Fragen der Kursteilnehmer, bevor Sie fortfahren.
1. Beschreiben Sie die grundlegenden Typen von Transact-SQL-Anweisungen und deren Verwendungsmöglichkeiten. DDL-Anweisungen (Data Definition Language), mit denen Sie Objekte in der Datenbank erstellen können. DCL-Anweisungen (Data Control Language), mit denen Sie ermitteln können, wer die Daten anzeigen und ändern kann. DML-Anweisungen (Data Manipulation Language), mit denen Sie die Daten abfragen und ändern können.
2. Inwiefern steht Transact-SQL mit der ANSI SQL-92-Spezifikation im Zusammenhang? Transact-SQL implementiert die Spezifikation der ANSI SQL-92Eingangsstufe und stellt mit speziellen SQL Server-Erweiterungen zusätzliche Funktionalität bereit.
2
Unterrichtseinheit 1 : Einführung in Transact-SQL
This page is intentionally left blank.
Unterrichtseinheit 2: Verwenden von TransactSQL-Abfragetools Inhalt Übersicht
1
SQL Query Analyzer
2
Verwenden des Objektkatalogs in SQL Query Analyzer
3
Verwenden von Vorlagen in SQL Query Analyzer
5
Verwenden des Dienstprogramms „osql“
6
Ausführen von Transact-SQLAnweisungen Empfohlene Methoden
9 15
Übungseinheit A: Erstellen und Ausführen von Transact-SQL-Skripts
16
Lernzielkontrolle
22
Die in diesen Unterlagen enthaltenen Angaben und Daten, einschließlich URLs und anderer Verweise auf Internetwebsites, können ohne vorherige Ankündigung geändert werden. Die in den Beispielen genannten Firmen, Organisationen, Produkte, Domänennamen, E-Mail-Adressen, Logos, Personen, Orte und Ereignisse sind frei erfunden und jede Ähnlichkeit mit bestehenden Firmen, Organisationen, Produkten, Domänennamen, E-Mail-Adressen, Logos, Personen, Orten oder Ereignissen ist rein zufällig, soweit nichts anderes angegeben ist. Die Benutzer sind verantwortlich für das Einhalten aller anwendbaren Urheberrechtsgesetze. Unabhängig von der Anwendbarkeit der entsprechenden Urheberrechtsgesetze darf ohne ausdrückliche schriftliche Erlaubnis der Microsoft Corporation kein Teil dieses Dokuments für irgendwelche Zwecke vervielfältigt oder in einem Datenempfangssystem gespeichert oder darin eingelesen werden, unabhängig davon, auf welche Art und Weise oder mit welchen Mitteln (elektronisch, mechanisch, durch Fotokopieren, Aufzeichnen, usw.) dies geschieht. Microsoft Corporation kann Inhaber von Patenten oder Patentanträgen, Marken, Urheberrechten oder anderen gewerblichen Schutzrechten sein, die den Inhalt dieses Dokuments betreffen. Die Bereitstellung dieses Dokuments gewährt keinerlei Lizenzrechte an diesen Patenten, Marken, Urheberrechten oder anderen gewerblichen Schutzrechten, es sei denn, dies wurde ausdrücklich durch einen schriftlichen Lizenzvertrag mit der Microsoft Corporation vereinbart. 2001 Microsoft Corporation. Alle Rechte vorbehalten. Microsoft, BackOffice, MS-DOS, PowerPoint, Visual Studio, Windows, Windows Media und Windows NT sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Die in diesem Dokument aufgeführten Namen tatsächlicher Firmen und Produkte sind möglicherweise Marken der jeweiligen Eigentümer.
Unterrichtseinheit 2: Verwenden von Transact-SQL-Abfragetools
iii
Hinweise für den Kursleiter Präsentation: 30 Minuten Übungseinheit: 30 Minuten
Microsoft® SQL Server™ 2000 stellt eine Reihe von Abfragetools bereit, mit deren Hilfe Sie Transact-SQL-Skripts ausführen können. Diese Unterrichtseinheit beschreibt, wie SQL Query Analyzer und das Befehlszeilendienstprogramm osql verwendet werden und auf welche Arten Transact-SQLAnweisungen ausgeführt werden können. Am Ende dieser Unterrichtseinheit werden die Kursteilnehmer in der Lage sein, die folgenden Aufgaben auszuführen: !
Beschreiben der Grundfunktionen von SQL Query Analyzer.
!
Beschreiben, wie der Objektkatalog in SQL Query Analyzer verwendet wird.
!
Beschreiben, wie die Vorlagen in SQL Query Analyzer verwendet werden.
!
Beschreiben, wie das Befehlszeilendienstprogramm osql verwendet wird.
!
Ausführen von Transact-SQL-Anweisungen auf verschiedene Arten.
Unterlagen und Vorbereitung In diesem Abschnitt werden die erforderlichen Unterlagen und vorbereitenden Aufgaben erläutert, die nötig sind, um diese Unterrichtseinheit zu unterrichten.
Erforderliche Unterlagen Um diese Unterrichtseinheit zu unterrichten, benötigen Sie folgende Unterlagen: !
Die Microsoft PowerPoint®-Datei 2316B_02.ppt
!
Die Beispieldatei C:\Moc\2316B\Demo\Ex_02.sql, die alle Beispielskripts der Unterrichtseinheit enthält, soweit in der Unterrichtseinheit nichts anderes angegeben ist.
Vorbereitende Aufgaben Zur Vorbereitung dieser Unterrichtseinheit gehen Sie folgendermaßen vor: !
Lesen Sie alle Unterlagen für diese Unterrichtseinheit.
!
Arbeiten Sie die Übungseinheit durch.
iv
Unterrichtseinheit 2: Verwenden von Transact-SQL-Abfragetools
Strategie für die Unterrichtseinheit Verwenden Sie die folgende Strategie, um diese Unterrichtseinheit zu präsentieren: !
SQL Query Analyzer Geben Sie eine Einführung in SQL Query Analyzer. Führen Sie die Grundfunktionen von SQL Query Analyzer vor. Heben Sie hervor, dass die Kursteilnehmer eine Abfrage ganz oder teilweise ausführen, Ergebnisse in einem Raster anzeigen und einen Ausführungsplan erstellen können. Verweisen Sie darauf, dass SQL Query Analyzer die Syntax automatisch farbig kennzeichnet und dass die Kursteilnehmer mit mehreren Abfragefenstern arbeiten und Teilskripts ausführen können.
!
Verwenden des Objektkatalogs in SQL Query Analyzer Heben Sie hervor, dass die Kursteilnehmer mit Hilfe des Objektkatalogs in SQL Query Analyzer Objekte suchen, Skripts für Objekte erstellen und viele Eingabe- und Syntaxfehler vermeiden können.
!
Verwenden von Vorlagen in SQL Query Analyzer Beschreiben Sie den Zweck und die Verwendung der Vorlagen, die SQL Query Analyzer bereitstellt. Führen Sie kurz vor, wie der Zugriff auf die Vorlagen erfolgt, und zeigen Sie die Arbeitsweise der grafischen Benutzeroberfläche. Wiederholen Sie die Definitionen der Vorlagenparameter.
!
Verwenden des Dienstprogramms osql Beschreiben Sie, wann und wie das Befehlszeilendienstprogramm osql verwendet wird. Sollten Kursteilnehmer nach dem Dienstprogramm isql fragen, weisen Sie darauf hin, dass es nicht in diesem Kurs behandelt wird, da es DB-Library für den Datenaustausch mit dem Server verwendet und Unicode-Datentypen nicht unterstützt.
!
Ausführen von Transact-SQL-Anweisungen Machen Sie die Kursteilnehmer mit den verschiedenen Arten des Ausführens von Transact-SQL-Anweisungen vertraut. Dazu zählen das dynamische Erstellen von Anweisungen, das Übergeben von Batches und das Ausführen von Skripts. Führen Sie diese Verfahren nach Möglichkeit mit Hilfe von SQL Query Analyzer vor.
Unterrichtseinheit 2: Verwenden von Transact-SQL-Abfragetools
v
Anpassungsinformationen Dieser Abschnitt beschreibt die Anforderungen zum Einrichten der Übungseinheiten für eine Unterrichtseinheit sowie die Konfigurationsänderungen, die während der Übungseinheiten an den Kursteilnehmercomputern vorgenommen werden. Diese Informationen sollen Ihnen beim Replizieren oder Anpassen der Microsoft Official Curriculum-Courseware (MOC) helfen. Wichtig Die Übungseinheit in dieser Unterrichtseinheit hängt von der Schulungsraumkonfiguration ab, die im Abschnitt „Anpassungsinformationen“ am Ende des Dokuments Handbuch für das Einrichten von Schulungscomputern für den Kurs 2316B, Abfragen von Microsoft SQL Server 2000 mit Hilfe von Transact-SQL, angegeben ist.
Einrichten der Übungseinheit Es gibt keine Anforderungen zum Einrichten der Übungseinheit, die die Replikation oder die Anpassung betreffen.
Ergebnisse der Übungseinheit Auf den Kursteilnehmercomputern gibt es keine Konfigurationsänderungen, die die Replikation oder die Anpassung betreffen.
vi
Unterrichtseinheit 2: Verwenden von Transact-SQL-Abfragetools
This page is intentionally left blank.
Unterrichtseinheit 2: Verwenden von Transact-SQL-Abfragetools
1
Übersicht Inhalt dieser Folie
Geben Sie eine Übersicht über die Themen und Lernziele dieser Unterrichtseinheit.
Einstieg
In dieser Unterrichtseinheit lernen Sie einige Abfragetools kennen, die SQL Server zum Ausführen von Transact-SQL-Skripts bereitstellt.
!
SQL Query Analyzer
!
Verwenden des Objektkatalogs in SQL Query Analyzer
!
Verwenden von Vorlagen in SQL Query Analyzer
!
Verwenden des Dienstprogramms „osql“
!
Ausführen von Transact-SQL-Anweisungen
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Microsoft® SQL Server™ 2000 stellt eine Reihe von Abfragetools bereit, mit deren Hilfe Sie Transact-SQL-Skripts ausführen können. Diese Unterrichtseinheit beschreibt, wie SQL Query Analyzer und das Befehlszeilendienstprogramm osql verwendet werden und auf welche Arten Transact-SQLAnweisungen ausgeführt werden können. Am Ende dieser Unterrichtseinheit werden Sie in der Lage sein, die folgenden Aufgaben auszuführen: !
Beschreiben der Grundfunktionen von SQL Query Analyzer.
!
Beschreiben, wie der Objektkatalog in SQL Query Analyzer verwendet wird.
!
Beschreiben, wie die Vorlagen in SQL Query Analyzer verwendet werden.
!
Beschreiben, wie das Befehlszeilendienstprogramm osql verwendet wird.
!
Ausführen von Transact-SQL-Anweisungen auf verschiedene Arten.
2
Unterrichtseinheit 2: Verwenden von Transact-SQL-Abfragetools
SQL Query Analyzer Inhalt dieser Folie
Geben Sie eine Einführung in SQL Query Analyzer.
Einstieg
Mit SQL Query Analyzer in SQL Server können Abfrageanweisungen und Ergebnisse grafisch angezeigt werden.
!
Editor für die freie Texteingabe
!
Farbige Kennzeichnung von Transact-SQL-Syntax
!
Mehrere Abfragefenster mit Raster- oder Textausgabe
!
Ausführung von Teilskripts
!
Abfrageausführungsinformationen
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Methodischer Hinweis
Führen Sie SQL Query Analyzer vor. Zeigen Sie den Kursteilnehmern die Grundelemente des SQL Query Analyzer-Fensters, die drei Arten der Abfrageausführung, die farbige Kennzeichnung der Syntax und das Öffnen und Speichern eines Skripts.
Mit SQL Query Analyzer in SQL Server können Abfrageanweisungen und Ergebnisse grafisch angezeigt werden. Darüber hinaus können Sie SQL Query Analyzer zum Schreiben, Ändern und Speichern von Transact-SQL-Skripts verwenden. SQL Query Analyzer stellt darüber hinaus Tools bereit, mit denen ermittelt werden kann, wie SQL Server eine Transact-SQL-Anweisung interpretiert und bearbeitet. SQL Query Analyzer schließt ein: !
Einen Editor für die freie Texteingabe. Der Editor verfügt über erweiterte Textbearbeitungsfunktionen, wie z. B. Blockeinrückungen, blockweises Auskommentieren und Entfernen von Kommentaren und Umwandlung in Großbuchstaben oder Kleinbuchstaben.
!
Farbige Kennzeichnung. Wenn Sie eine Abfrage erstellen, markiert SQL Query Analyzer Schlüsselwörter, Zeichenfolgen und andere Sprachelemente mit von Ihnen festgelegten Farbeinstellungen.
!
Mehrere Abfragefenster mit Raster- oder Textausgabe. Jedes Abfragefenster besitzt eine eigene Verbindung zu einem SQL Server. Das Ergebnis kann in einem Textfenster oder in einem Raster angezeigt werden.
!
Ausführung von Teilskripts. Mit Hilfe dieser Funktion können Sie Teile eines Skripts ausführen. Wenn Sie Teile eines Skripts auswählen, führt SQL Server nur diese Teile aus.
!
Abfrageausführungsinformationen. Die Abfrageausführungsinformationen schließen Clientstatistiken, Server-Ablaufverfolgungsinformationen und -Ausführungsplandaten ein. Diese Informationen können zur Optimierung und Problembehebung der Skripts verwendet werden.
Unterrichtseinheit 2: Verwenden von Transact-SQL-Abfragetools
3
Verwenden des Objektkatalogs in SQL Query Analyzer Inhalt dieser Folie
Geben Sie eine Einführung in den Objektkatalog in SQL Query Analyzer.
!
Der Objektkatalog ermöglicht das Navigieren in der Baumansicht der Objekte in einer Datenbank
!
Mit Hilfe des Objektkatalogs können Sie Folgendes tun:
Einstieg
Mit dem Objektkatalog in SQL Query Analyzer können Sie in der Baumansicht der Objekte in einer Datenbank navigieren und einen Drilldown auf ein bestimmtes Objekt ausführen.
"
Erstellen von Skripts für Objekte
"
Ausführen gespeicherter Prozeduren
"
Öffnen von Tabellen
"
Ändern von Objekten in der Datenbank
"
Verwenden von Transact-SQL-Vorlagen
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Mit dem Objektkatalog in SQL Query Analyzer können Sie in der Baumansicht der Objekte in einer Datenbank navigieren und einen Drilldown auf ein bestimmtes Objekt ausführen. Der Objektkatalog erstellt auch Skripts für Objekte, führt gespeicherte Prozeduren aus und erlaubt den Zugriff auf Tabellen und Sichten. Mit Hilfe des Objektkatalogs können Sie Folgendes tun: !
Erstellen von Skripts für Objekte. Welche Operationen der Objektkatalog unterstützt, hängt vom Objekttyp ab. Beispielsweise können Tabellenobjekte Skripts generieren, die SELECTAnweisungen, DDL-Anweisungen (Data Definition Language) wie z. B. CREATE oder DML-Anweisungen (Data Manipulation Language) wie z. B. INSERT enthalten.
!
Ausführen gespeicherter Prozeduren. Wenn Sie eine gespeicherte Prozedur mit Parametern ausführen, fordert der Objektkatalog Sie zur Eingabe von Werten auf.
!
Öffnen von Tabellen. Der Objektkatalog zeigt Abfrageergebnisse separat an. Sie können Zeilen bearbeiten, einfügen oder ändern.
!
Ändern von Objekten in der Datenbank. Sie können Objekte in einer Datenbank anzeigen und bearbeiten. Der Objektkatalog zeigt eine ALTER-Anweisung für das ausgewählte Objekt im Editorbereich an. Wenn das ausgewählte Objekt beispielsweise eine gespeicherte Prozedur ist, stellt der Objektkatalog eine ALTER PROCEDURE-Anweisung bereit. Sie können diese ALTER-Anweisung verwenden, um die Änderungen anzugeben, und sie dann ausführen.
4
Unterrichtseinheit 2: Verwenden von Transact-SQL-Abfragetools !
Verwenden von Transact-SQL-Vorlagen. Diese Vorlagen enthalten Transact-SQL-Skripts, mit deren Hilfe Sie Objekte in der Datenbank erstellen können. Sie können die Vorlagen für folgende Aufgaben verwenden: • Erstellen von Datenbanken, Tabellen, Sichten, Indizes, gespeicherten Prozeduren, Triggern, Statistiken und Funktionen. • Verwalten von erweiterten Eigenschaften, Verbindungsservern, Anmeldekonten, Rollen und Benutzern. • Deklarieren und Verwenden von Cursorn. • Anpassen von Skripts.
Unterrichtseinheit 2: Verwenden von Transact-SQL-Abfragetools
5
Verwenden von Vorlagen in SQL Query Analyzer Inhalt dieser Folie
Beschreiben Sie, wie Vorlagen in SQL Query Analyzer verwendet werden.
!
Einstieg
Vorlagen "
SQL Query Analyzer schließt Vorlagen ein, die Sie als Ausgangspunkt beim Erstellen von Objekten in einer Datenbank verwenden können.
"
!
Sind Ausgangspunkte beim Erstellen von Objekten in einer Datenbank Enthalten Parameter, die das Anpassen von Skripts unterstützen
Format für die Definitionen der Vorlagenparameter
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Methodischer Hinweis
Beschreiben Sie den Zweck und die Verwendung der Vorlagen, die SQL Query Analyzer bereitstellt. Führen Sie kurz vor, wie der Zugriff auf die Vorlagen erfolgt, und zeigen Sie die Arbeitsweise der grafischen Benutzeroberfläche. Verweisen Sie die Kursteilnehmer für weitere Informationen auf die SQL ServerOnlinedokumentation.
SQL Query Analyzer schließt Vorlagen ein, die Sie als Ausgangspunkt beim Erstellen von Objekten in einer Datenbank verwenden können. SQL Server stellt zahlreiche Vorlagen im Verzeichnis Templates\SQL Query Analyzer bereit. Dazu zählen u. a. die Vorlagen zum Erstellen von Datenbanken, Tabellen, Sichten, Indizes, gespeicherten Prozeduren, Triggern, Statistiken und Funktionen. Weitere Vorlagen in diesem Verzeichnis unterstützen Sie beim Verwalten von erweiterten Eigenschaften, Verbindungsservern, Anmeldekonten, Rollen und Benutzern sowie beim Deklarieren und Verwenden von Cursorn. Die von SQL Query Analyzer bereitgestellten Vorlagenskripts enthalten Parameter, die das Anpassen von Skripts unterstützen. Die Definitionen der Vorlagenparameter verwenden das folgende Format:
Die folgende Tabelle beschreibt das Format und die Definition der Vorlagenparameter: Format
Definition des Vorlagenparameters
Name des Skriptparameters.
Datentyp des Parameters.
Wert, der jedes Auftreten des Parameters im Skript ersetzen soll.
Sie fügen mit Hilfe eines Dialogfeldes die Werte in das Skript ein. Wenn Sie beispielsweise eine Funktion aus dem Objektkatalog abrufen, enthält die Funktion, die in den Editorbereich geschrieben wird, Parameterdefinitionen für alle Argumente der Funktion. Im Dialogfeld Vorlageparameter ersetzen geben Sie dann die Argumentwerte an.
6
Unterrichtseinheit 2: Verwenden von Transact-SQL-Abfragetools
Verwenden des Dienstprogramms „osql“ Inhalt dieser Folie
Geben Sie eine Einführung in das Dienstprogramm osql.
!
Starten des Befehlszeilendienstprogramms „osql“
Einstieg
!
Verwenden des interaktiven Modus
!
Verwenden des Skriptausführungsmodus
!
Verwenden von erweiterten osql-Skriptbefehlen
Das Dienstprogramm osql ist ein Befehlszeilendienstprogramm zum Abfragen von SQL Server.
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Weitere Informationen
Das Dienstprogramm isql wird in diesem Kurs nicht behandelt, da es DB-Library für den Datenaustausch mit dem Server verwendet und Unicode-Datentypen nicht unterstützt.
Das Dienstprogramm osql ist ein Befehlszeilendienstprogramm für die interaktive Ad-hoc-Ausführung von Transact-SQL-Anweisungen und -Skripts. Benutzer, die das Befehlszeilendienstprogramm osql verwenden möchten, müssen mit Transact-SQL vertraut sein und wissen, wie Skripts an der Eingabeaufforderung ausgeführt werden. Das Befehlszeilendienstprogramm osql verwendet SQL Server ODBC (Open Database Connectivity), um mit dem Server Daten auszutauschen, und unterliegt den Einschränkungen und dem Verhalten der ODBC-API (Application Programming Interface, Schnittstelle für Anwendungsprogrammierung).
Starten des Befehlszeilendienstprogramms „osql“ Sie starten das Befehlszeilendienstprogramm osql direkt vom Betriebssystem aus mit den unten aufgeführten Optionen (Groß-/Kleinschreibung beachten). Sie können osql in einer Batchdatei oder an der Eingabeaufforderung aufrufen. Bei einer Batchdatei handelt es sich um eine Gruppe von Befehlszeilenkommandos, die als Gruppe ausgeführt werden.
Verwenden des interaktiven Modus Das Befehlszeilendienstprogramm osql akzeptiert Transact-SQL-Anweisungen und sendet diese interaktiv an SQL Server. Das Ergebnis wird formatiert und auf dem Bildschirm angezeigt. Verwenden Sie die GO-Anweisung, um Transact-SQL-Anweisungen im Eingabepuffer auszuführen. Verwenden Sie die QUIT- oder EXIT-Anweisung, um das Befehlszeilendienstprogramm osql zu beenden.
Unterrichtseinheit 2: Verwenden von Transact-SQL-Abfragetools
7
Verwenden des Skriptausführungsmodus Benutzer übergeben einen osql-Batch, indem sie eine Transact-SQL-Anweisung angeben, die ausgeführt werden soll, oder indem sie auf eine Textdatei verweisen, die die auszuführenden Transact-SQL-Anweisungen enthalten. Die Ausgabe wird in der Regel in eine Textdatei geleitet, kann aber auch im Fenster mit der Eingabeaufforderung angezeigt werden. Teilsyntax
osql [-S Server] [-E] [-U Benutzername] [-P Kennwort] [-i Eingabedatei] [-o Ausgabedatei] [-?] Anmerkung Bei den Parametern in osql-Anweisungen wird zwischen Großund Kleinschreibung unterschieden.
Methodischer Hinweis
Weisen Sie darauf hin, dass Argumente mit einem Gedankenstrich (-) oder einem Schrägstrich (/) beginnen können. Verweisen Sie die Kursteilnehmer für weitere Informationen auf die SQL ServerOnlinedokumentation, Suchbegriff „osql (Dienstprogramm)“.
Denken Sie daran, dass Argumente mit einem Gedankenstrich (-) oder einem Schrägstrich (/) beginnen können. Die folgende Tabelle beschreibt die am häufigsten verwendeten Argumente. Argument
Beschreibung
-S Server
Gibt die SQL Server-Installation an, zu der eine Verbindung hergestellt wird. Server ist der Name des Servercomputers im Netzwerk. Diese Option ist erforderlich, wenn Sie osql von einem Remotecomputer aus über ein Netzwerk ausführen möchten.
-E
Verwendet eine vertraute Verbindung, anstatt ein Kennwort anzufordern.
-U Benutzername
Der Benutzername. Bei Benutzernamen wird zwischen Groß- und Kleinschreibung unterschieden. Wird weder die Option -U noch -P verwendet, verwendet SQL Server das aktuell angemeldete Benutzerkonto und fordert nicht zur Eingabe eines Kennwortes auf.
-P Kennwort
Ein vom Benutzer angegebenes Kennwort. Wenn die Option -P nicht verwendet wird, fordert osql zur Eingabe eines Kennwortes auf. Wenn die Option -P ohne Kennwort am Ende der Befehlszeile steht, verwendet osql das Standardkennwort (NULL). Bei Kennwörtern wird zwischen Groß- und Kleinschreibung unterschieden. Wird weder die Option -U noch -P verwendet, verwendet SQL Server das aktuell angemeldete Benutzerkonto und fordert nicht zur Eingabe eines Kennwortes auf.
-i Eingabedatei
Identifiziert die Datei, die einen Batch mit Transact-SQL-Anweisungen oder gespeicherten Prozeduren enthält. Anstelle von -i kann das Kleiner als-Zeichen () verwendet werden. Wenn die Eingabedatei das Unicode-Format hat, wird die Ausgabedatei im Unicode-Format gespeichert, wenn -o eingestellt ist. Wenn die Eingabedatei nicht das Unicode-Format hat, wird die Ausgabedatei im OEM-Format gespeichert.
-?
Zeigt die Syntaxzusammenfassung der osql-Optionen an.
8
Unterrichtseinheit 2: Verwenden von Transact-SQL-Abfragetools
Verwenden von erweiterten osql-Skriptbefehlen Das Befehlszeilendienstprogramm osql kann auch Befehle verarbeiten, die nicht aus Transact-SQL-Anweisungen bestehen. Das Befehlszeilendienstprogramm osql erkennt diese Befehle allerdings nur, wenn sie am Zeilenfang oder unmittelbar hinter der osql-Eingabeaufforderung stehen. Weitere Anweisungen auf derselben Zeile führen zu einem Fehler. Die folgende Tabelle beschreibt diese zusätzlichen Anweisungen. Befehl
Beschreibung
GO
Führt alle Befehle aus, die nach dem letzten GO-Befehl eingegeben wurden.
RESET
Löscht alle Anweisungen, die Sie eingegeben haben.
ED
Ruft den Editor auf.
!! Befehl
Führt einen Betriebssystembefehl aus.
QUIT oder EXIT( )
Beendet osql.
STRG+C
Beendet eine Abfrage, ohne osql zu beenden.
Unterrichtseinheit 2: Verwenden von Transact-SQL-Abfragetools
9
# Ausführen von Transact-SQL-Anweisungen Inhalt dieser Folie
Geben Sie eine Übersicht über die Arten der Ausführung von Transact-SQLAnweisungen.
Einstieg
Transact-SQL-Anweisungen können auf verschiedene Arten ausgeführt werden.
!
Dynamisches Erstellen von Anweisungen
!
Verwenden von Batches
!
Verwenden von Skripts
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Transact-SQL-Anweisungen können auf verschiedene Arten ausgeführt werden: !
Dynamisches Erstellen von Anweisungen zur Laufzeit.
!
Verwenden von Batches, um gemeinsam auszuführende Anweisungen zu gruppieren.
!
Verwenden von Skripts, um Batches in einer Datei zur späteren Verwendung zu speichern.
10
Unterrichtseinheit 2: Verwenden von Transact-SQL-Abfragetools
Dynamisches Erstellen von Anweisungen Inhalt dieser Folie
Erläutern Sie den Kursteilnehmern die dynamische Ausführung von Anweisungen.
!
Verwendung von EXECUTE-Anweisung mit Zeichenfolgenliteralen und Variablen
Einstieg
!
Verwendung, wenn der Wert der Variablen zur Ausführungszeit der Anweisung zugewiesen werden soll
Anweisungen können dynamisch erstellt werden, sodass sie gleichzeitig mit der Ausführung eines Skripts erstellt werden.
Beispiel Beispiel 11 USE USE library library DECLARE DECLARE @dbname @dbname varchar(30), varchar(30), @tblname @tblname varchar(30) varchar(30) SET SET @dbname @dbname == 'Northwind' 'Northwind' SET SET @tblname @tblname == 'products' 'products' EXECUTE EXECUTE ('USE ('USE '' ++ @dbname @dbname ++ '' SELECT SELECT ** FROM FROM ’+ ’+ @tblname) @tblname) GO GO
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Anweisungen können dynamisch erstellt werden, sodass sie gleichzeitig mit der Ausführung eines Skripts erstellt werden. Zum dynamischen Erstellen einer Anweisung wird die EXECUTE-Anweisung mit einer Reihe von Zeichenfolgenliteralen und Variablen verwendet, die zur Ausführungszeit aufgelöst werden. Dynamisch erstellte Anweisungen sind hilfreich, wenn der Wert der Variable bei der Ausführung der Anweisung zugewiesen werden soll. Sie können z. B. eine dynamische Anweisung erstellen, die eine bestimmte Aktion bei einer Reihe von Datenbankobjekten durchführt. Syntax
EXECUTE ({@str_var | 'tsql_string'} + [{@str_var | 'tsql_string'}...]}) Bei der EXECUTE-Anweisung sollten die folgenden Aspekte beachtet werden: !
Die EXECUTE-Anweisung führt aus Zeichenfolgen bestehende Anweisungen in einem Transact-SQL-Batch aus. Da es sich hierbei um Zeichenfolgenliterale handelt, müssen Sie darauf achten, dass sich an den entsprechenden Stellen Leerzeichen befinden, damit die Zeichenfolgen richtig verkettet werden.
!
Die EXECUTE-Anweisung kann ein Zeichenfolgenliteral, eine lokale Variable oder eine Verkettung von beidem enthalten.
!
Alle Elemente in der EXECUTE-Zeichenfolge müssen aus Zeichendaten bestehen; alle numerischen Daten müssen konvertiert werden, bevor Sie die EXECUTE-Anweisung verwenden können.
!
Funktionen können nicht verwendet werden, um die in der EXECUTEAnweisung auszuführende Zeichenfolge zu erstellen.
!
Alle gültigen Transact-SQL-Anweisungen können dynamisch erstellt werden, dies gilt auch für Funktionen.
Unterrichtseinheit 2: Verwenden von Transact-SQL-Abfragetools
Beispiel 1
!
EXECUTE-Anweisungen können verschachtelt werden.
!
Variablen und temporäre Tabellen, die dynamisch erstellt werden, bestehen nur für die Ausführungsdauer der Anweisung.
In diesem Beispiel wird gezeigt, wie mit einer dynamisch ausgeführten Anweisung ein anderer als der aktuelle Datenbankkontext angegeben werden kann und wie dann alle Spalten und Zeilen aus einer bestimmten Tabelle ausgewählt werden können. In diesem Beispiel bleibt der Wechsel des Datenbankkontextes zur Northwind-Datenbank nur für die Dauer der Abfrage bestehen. Der aktuelle Datenbankkontext bleibt unverändert. Durch Verwendung einer gespeicherten Prozedur könnte der Benutzer die Datenbank- und Tabelleninformationen als Parameter an die Anweisung übergeben und dann eine bestimmte Tabelle in einer Datenbank abfragen. USE library DECLARE @dbname varchar(30), @tablename varchar(30) SET @dbname = 'Northwind' SET @tablename = 'Products' EXECUTE ('USE ' + @dbname + ' SELECT ProductName FROM ' + @tablename) GO
Ergebnis
ProductName Chai Chang Aniseed Syrup
Beispiel 2
In diesem Beispiel wird gezeigt, wie mit einer dynamisch ausgeführten Anweisung eine Datenbankoption für die Dauer der Anweisung geändert werden kann. Die folgende Anweisung gibt die Anzahl der betroffenen Zeilen nicht zurück. USE Northwind EXECUTE ('SET NOCOUNT ON '+ 'SELECT LastName, ReportsTo FROM Employees WHERE ReportsTo IS NULL') GO
Ergebnis
11
LastName
ReportsTo
Fuller
NULL
12
Unterrichtseinheit 2: Verwenden von Transact-SQL-Abfragetools
Verwenden von Batches Inhalt dieser Folie
Erläutern Sie den Kursteilnehmern die Verwendung von Batches.
Einstieg
Bei einem Batch handelt es sich um eine Gruppe von Transact-SQL-Anweisungen, die gemeinsam übergeben und als Gruppe ausgeführt werden.
!
Eine oder mehrere Transact-SQL-Anweisungen werden zusammen übergeben
!
Definieren eines Batches mit Hilfe der GO-Anweisung
!
Batchverarbeitung bei SQL Server
!
Anweisungen, die nicht im selben Batch verwendet werden können "
CREATE PROCEDURE
"
CREATE VIEW
"
CREATE TRIGGER CREATE RULE AS
"
CREATE DEFAULT
"
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Eine oder mehrere Anweisungen können auch in einem Batch übergeben werden.
Eine oder mehrere Transact-SQL-Anweisungen werden zusammen übergeben Bei einem Batch handelt es sich um eine Gruppe von Transact-SQL-Anweisungen, die gemeinsam übergeben und als Gruppe ausgeführt werden. Batches können interaktiv oder als Teil eines Skripts ausgeführt werden. Ein Skript kann mehrere Batches mit Transact-SQL-Anweisungen enthalten.
Definieren eines Batches mit Hilfe der GO-Anweisung Verwenden Sie eine GO-Anweisung, um das Ende eines Batches anzugeben. GO ist keine allgemein gültige Transact-SQL-Anweisung, sondern ein Befehl, der nur von SQL Query Analyzer und dem Dienstprogramm osql akzeptiert wird. Auf ODBC- oder OLE DB-APIs basierende Anwendungen erzeugen einen Syntaxfehler, wenn sie versuchen, eine GO-Anweisung auszuführen.
Batchverarbeitung bei SQL Server Die Anweisungen werden von SQL Server in einem Batch gemeinsam optimiert, kompiliert und ausgeführt. Die Anweisungen müssen jedoch nicht als wiederherstellbare Arbeitseinheit ausgeführt werden. Der Gültigkeitsbereich von benutzerdefinierten Variablen ist auf einen Batch beschränkt, nach einer GO-Anweisung kann daher nicht auf eine dieser Variablen verwiesen werden. Anmerkung Wenn ein Syntaxfehler in einem Batch vorhanden ist, wird keine der Anweisungen in diesem Batch ausgeführt. Die Ausführung beginnt mit dem folgenden Batch.
Unterrichtseinheit 2: Verwenden von Transact-SQL-Abfragetools
13
Anweisungen, die nicht im selben Batch verwendet werden können Methodischer Hinweis Beschreiben Sie die Beispiele und vergleichen Sie sie miteinander.
Bestimmte Objekterstellungsanweisungen müssen jeweils in einem eigenen Batch innerhalb eines Skripts ausgeführt werden. Das liegt an der Art, wie die Objekterstellungsanweisungen definiert werden. Diese Objekterstellungsanweisungen besitzen eine bestimmte Struktur - einen Objektdefinitionsheader, gefolgt vom Schlüsselwort AS mit mindestens einer Definitionsanweisung. Außerdem muss jede Erstellungsanweisung mit einem GO-Befehl abgeschlossen werden, wenn ein Skript mehr als eine Erstellungsanweisung enthält. Sie müssen die folgenden Anweisungen in separaten Batches ausführen:
Beispiel 1
!
CREATE PROCEDURE
!
CREATE VIEW
!
CREATE TRIGGER
!
CREATE RULE AS
!
CREATE DEFAULT
Die Anweisungen in diesem Beispiel würden fehlschlagen, wenn sie als Teil eines einzigen Batches ausgeführt werden, da die Abfrage Anweisungen kombiniert, die in einem Batch nicht kombiniert werden dürfen. Sie müssen eine GOAnweisung vor jeder CREATE VIEW-Anweisung einfügen, damit diese korrekt ausgeführt werden. CREATE CREATE CREATE CREATE GO
Beispiel 2
DATABASE ... TABLE ... VIEW ... VIEW ...
In diesem Beispiel sind die in Beispiel 1 verwendeten Anweisungen so zu Batches gruppiert, dass sie korrekt ausgeführt werden. CREATE DATABASE ... CREATE TABLE ... GO CREATE VIEW ... GO CREATE VIEW ... GO
14
Unterrichtseinheit 2: Verwenden von Transact-SQL-Abfragetools
Verwenden von Skripts Inhalt dieser Folie
Erläutern Sie die Verwendung von Skripts zum Ausführen von Transact-SQLAnweisungen.
Einstieg
In den meisten Fällen werden Skripts zum Ausführen von Transact-SQL-Anweisungen verwendet.
!
Ein Skript ist eine oder mehrere Transact-SQL-Anweisung, die als Datei mit der Dateinamenerweiterung SQL gespeichert wird
!
Skripts "
Enthalten gespeicherte Anweisungen
"
Können mit jedem beliebigen Text-Editor erstellt werden
"
"
Können Datenbankobjekte oder Ausführungsanweisungen wiederholt ausführen Werden in SQL Query Analyzer oder mit dem Dienstprogramm osql ausgeführt
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** In den meisten Fällen werden Skripts zum Ausführen von Transact-SQL-Anweisungen verwendet. Ein Skript besteht aus einer oder mehreren Transact-SQL-Anweisungen, die als Datei gespeichert werden. Sie können Skripts in SQL Query Analyzer oder mit einem beliebigen TextEditor, wie z. B. Notepad, erstellen und speichern. Speichern Sie die Skriptdatei mit der Dateinamenerweiterung SQL. Gespeicherte Skripts sind sehr hilfreich, wenn Sie Datenbanken oder Datenobjekte neu erstellen möchten oder wenn Sie eine Gruppe von Anweisungen wiederholt verwenden müssen. Sie können die Skriptdatei in SQL Query Analyzer, aber auch mit dem Dienstprogramm osql (oder einem anderen Abfragetool) öffnen und ausführen.
Unterrichtseinheit 2: Verwenden von Transact-SQL-Abfragetools
15
Empfohlene Methoden Inhalt dieser Folie
Erläutern Sie die empfohlenen Methoden zur Verwendung der Transact-SQLAbfragetools.
Verwenden Verwenden Sie Sie SQL SQL Query Query Analyzer Analyzer für für grafisches grafisches und und interaktives interaktives Arbeiten Arbeiten
Einstieg
Verwenden Verwenden Sie Sie den den Objektkatalog Objektkatalog zum zum Suchen Suchen und und Erstellen Erstellen von von Objekten Objekten
Die empfohlenen Methoden erleichtern Ihnen die Verwendung der Transact-SQLAbfragetools.
Verwenden Verwenden Sie Sie Vorlagen Vorlagen als als Ausgangspunkt Ausgangspunkt beim beim Erstellen Erstellen von von Objekten Objekten Verwenden Verwenden Sie Sie das das Befehlszeilendienstprogramm Befehlszeilendienstprogramm „osql“ „osql“ für für Batchdateien Batchdateien und und Zeitplanungen Zeitplanungen Speichern Speichern Sie Sie häufig häufig verwendete verwendete Transact-SQL-Skripts Transact-SQL-Skripts in in Dateien Dateien
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Die folgenden empfohlenen Methoden erleichtern Ihnen die Verwendung der Transact-SQL-Abfragetools: !
Verwenden Sie SQL Query Analyzer, wenn Sie grafisch und interaktiv arbeiten möchten. Sie können mehrere Verbindungen zu SQL Server verwenden, und Sie können zwischen Fenstern ausschneiden und einfügen. Hierbei profitieren Sie von der farbigen Syntaxkennzeichnung und den Skriptfunktionen des Objektkatalogs.
!
Verwenden Sie den Objektkatalog, um Tabellen- und Spaltennamen zu suchen, um Skripts für diese zu erstellen und um fehlerfreie Skripts zum Ändern von Objekten und Daten zu erstellen.
!
Verwenden Sie Vorlagen in SQL Query Analyzer als Ausgangspunkt beim Erstellen von Objekten in einer Datenbank.
!
Verwenden Sie das Befehlszeilendienstprogramm osql für Batchdateien und zur Ausführung von häufig wiederkehrenden Aufgaben. Zusätzliche Skriptfunktionen des Befehlszeilendienstprogramms osql können Automatisierungs- und Wartungsaufgaben erleichtern.
!
Speichern Sie häufig verwendete Transact-SQL-Skripts in Dateien. Diese Dateien bilden auf effiziente Weise eine Bibliothek wiederverwendbarer Skripts, die zur Konsistenz beitragen und künftig verwendet werden können.
Zusätzliche Informationen zu den folgenden Themen erhalten Sie in der SQL Server-Onlinedokumentation. Thema
Suchbegriff
Verwenden von SQL Query Analyzer
“Übersicht über SQL Query Analyzer”
Verwenden des Dienstprogramms osql
“osql (Dienstprogramm)”
16
Unterrichtseinheit 2: Verwenden von Transact-SQL-Abfragetools
Übungseinheit A: Erstellen und Ausführen von TransactSQL-Skripts Inhalt dieser Folie
Geben Sie eine Einführung in die Übungseinheit.
Einstieg
In dieser Unterrichtseinheit erstellen Sie ein TransactSQL-Skript, speichern es, und führen es dann in SQL Query Analyzer und mit Hilfe des Dienstprogramms osql aus.
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Erläutern Sie die Lernziele der Übungseinheit.
Lernziele Am Ende dieser Übungseinheit werden Sie in der Lage sein, die folgenden Aufgaben auszuführen: !
Schreiben grundlegender SELECT-Anweisungen, die sortierte und eingeschränkte Resultsets zurückgeben.
!
Ändern und Ausführen eines Skripts mit Hilfe des Dienstprogramms osql.
Voraussetzungen Um diese Übungseinheit zu bearbeiten, benötigen Sie Folgendes: !
Die Skriptdateien für diese Übungseinheit, die sich in C:\Moc\2316B\Labfiles\L02 befinden.
!
Die Antwortdateien für diese Übungseinheit, die sich in C:\Moc\2316B\Labfiles\L02\Answers befinden.
Weitere Informationen Wenn Sie Hilfe bei der Ausführung von Dateien benötigen, suchen Sie in der Hilfe zu SQL Query Analyzer nach „Ausführen einer Abfrage“. Daneben sind die folgenden Informationsquellen verfügbar: !
Das Northwind-Datenbankschema.
!
Die Microsoft SQL Server-Onlinedokumentation.
Unterrichtseinheit 2: Verwenden von Transact-SQL-Abfragetools
17
Szenario Der Aufbau des Schulungsraumes soll die Organisation des weltweit agierenden Handelsunternehmens Northwind Traders widerspiegeln. Das Unternehmen hat den fiktiven Domänennamen nwtraders.msft. Der primäre DNS-Server für nwtraders.msft ist der Kursleitercomputer, der die Internetprotokolladresse (IP-Adresse) 192.168.x.200 besitzt (wobei x die zugewiesene Schulungsraumnummer ist). Der Name des Kursleitercomputers ist London. Die folgende Tabelle stellt den Benutzernamen, den Computernamen und die IP-Adresse für jeden Kursteilnehmercomputer in der fiktiven Domäne nwtraders.msft bereit. Suchen Sie den Benutzernamen Ihres Computers, und notieren Sie ihn. Benutzername
Computername
IP-Adresse
SQLAdmin1
Vancouver
192.168.x.1
SQLAdmin2
Denver
192.168.x.2
SQLAdmin3
Perth
192.168.x.3
SQLAdmin4
Brisbane
192.168.x.4
SQLAdmin5
Lisbon
192.168.x.5
SQLAdmin6
Bonn
192.168.x.6
SQLAdmin7
Lima
192.168.x.7
SQLAdmin8
Santiago
192.168.x.8
SQLAdmin9
Bangalore
192.168.x.9
SQLAdmin10
Singapore
192.168.x.10
SQLAdmin11
Casablanca
192.168.x.11
SQLAdmin12
Tunis
192.168.x.12
SQLAdmin13
Acapulco
192.168.x.13
SQLAdmin14
Miami
192.168.x.14
SQLAdmin15
Auckland
192.168.x.15
SQLAdmin16
Suva
192.168.x.16
SQLAdmin17
Stockholm
192.168.x.17
SQLAdmin18
Moscow
192.168.x.18
SQLAdmin19
Caracas
192.168.x.19
SQLAdmin20
Montevideo
192.168.x.20
SQLAdmin21
Manila
192.168.x.21
SQLAdmin22
Tokyo
192.168.x.22
SQLAdmin23
Khartoum
192.168.x.23
SQLAdmin24
Nairobi
192.168.x.24
Veranschlagte Zeit für die Übungseinheit: 30 Minuten
18
Unterrichtseinheit 2: Verwenden von Transact-SQL-Abfragetools
Übung 1 Schreiben grundlegender SELECT-Anweisungen In dieser Übung erstellen Sie verschiedene Anweisungen, die Zeilen aus der products-Tabelle in der Northwind-Datenbank zurückgeben. C:\Moc\2316B\Labfiles\L02\Answers enthält die vollständigen Skripts für diese Übung.
! So schreiben Sie eine SELECT-Anweisung, die sortierte Daten zurückgibt
Bei diesem Verfahren schreiben Sie eine Anweisung, die alle Zeilen und Spalten aus der products-Tabelle zurückgibt und die Ergebnisse in aufsteigender Reihenfolge nach der productname-Spalte sortiert. Answer_Ordered.sql ist das vollständige Skript für dieses Verfahren. 1. Melden Sie sich an der Schulungsraumdomäne nwtraders mit Hilfe der Informationen in der folgenden Tabelle an. Option
Eingabe
Benutzername
SQLAdminx (wobei x die Ihrem Computernamen zugewiesene Nummer ist, wie in der Schulungsraumdomäne nwtraders.msft festgelegt)
Kennwort
password
2. Öffnen Sie SQL Query Analyzer, und melden Sie sich, falls erforderlich, am (lokalen) Server mit Microsoft Windows®-Authentifizierung an. Sie haben die Berechtigung, sich anzumelden und SQL Server zu verwalten, da Sie als SQLAdminx angemeldet sind - einem Mitglied der lokalen Gruppe Administratoren von Windows 2000. Alle Mitglieder dieser Gruppe werden automatisch der sysadmin-Rolle von SQL Server zugeordnet. 3. Klicken Sie in der Liste DB auf Northwind. 4. Geben Sie eine SELECT-Anweisung ein, die alle Zeilen und Spalten aus der products-Tabelle zurückgibt und die Ergebnisse in aufsteigender Reihenfolge nach der productname-Spalte sortiert, und führen Sie sie aus. Sie können die gespeicherte Systemprozedur sp_help in der productsTabelle ausführen, um die korrekten Spaltennamen abzufragen. SELECT * FROM products ORDER BY productname
5. Klicken Sie auf den Pfeil neben der Schaltfläche Ausführungsmodus und klicken Sie auf Ergebnisse in Raster. 6. Führen Sie die Anweisung erneut aus.
Unterrichtseinheit 2: Verwenden von Transact-SQL-Abfragetools
19
! So schreiben Sie eine SELECT-Anweisung, die eingeschränkte Daten zurückgibt
Bei diesem Verfahren schreiben Sie eine Anweisung, die Produkte aus einer bestimmten Kategorie abruft. Answer_Limited.sql ist das vollständige Skript für dieses Verfahren. • Geben Sie eine SELECT-Anweisung ein, die alle Produkte in der Kategorie (categoryid) 4 aus der products-Tabelle abruft, und führen Sie sie aus. Sie können die gespeicherte Systemprozedur sp_help in der productsTabelle ausführen, um die korrekten Spaltennamen abzufragen. SELECT * FROM products WHERE categoryid = 4 GO
Tipp Für weitere Informationen zur SELECT-Anweisung (sowie zu TransactSQL-Anweisungen und Systemtabellen) wählen Sie das Schlüsselwort SELECT im Abfragefenster aus, drücken Sie Umschalt+F1, und doppelklicken Sie dann auf die SELECT-Klausel.
20
Unterrichtseinheit 2: Verwenden von Transact-SQL-Abfragetools
Übung 2 Ändern einer Skriptdatei In dieser Übung ändern und speichern Sie eine einfache Skriptdatei und führen sie dann aus. C:\Moc\2316B\Labfiles\L02\Answers enthält die vollständigen Skripts für diese Übung.
! So ändern Sie eine Skriptdatei Bei diesem Verfahren führen Sie ein Skript aus, das Fehler enthält. Mit Hilfe der zurückgegebenen Fehlerinformationen führen Sie Änderungen am Skript durch, sodass es ordnungsgemäß ausgeführt wird. Danach speichern Sie das Skript und führen es aus. 1. Öffnen Sie C:\Moc\2316B\Labfiles\L02\MyScript.sql, überprüfen Sie es, und führen Sie es dann aus. Beim Ausführen dieser Datei erhalten Sie Fehlermeldungen. Diese Fehler wurden absichtlich eingebaut. Answer_MyScript.sql ist das vollständige Skript für dieses Verfahren. 2. Schließen Sie die Zeilen, die den Skriptnamen und die Beschreibung enthalten, mit Schlüsselwörtern für Kommentarblöcke ein. /* MYSCRIPT.SQL Dieses Skript fragt die customer-Tabelle ab und gibt eine Liste von Firmennamen (customer name) zurück. Dieses Skript sollte in der Northwind-Datenbank ausgeführt werden. */
3. Fügen Sie eine Anweisung hinzu, die angibt, dass das Skript im Kontext der Northwind-Datenbank ausgeführt wird. USE Northwind
4. Fügen Sie Kennzeichen für das Ende des Batches (GO-Anweisungen) an den richtigen Stellen innerhalb des Skripts ein. SELECT CompanyName FROM customers GO
5. Speichern Sie das Skript, und führen Sie es dann aus. 6. Minimieren Sie SQL Query Analyzer.
Unterrichtseinheit 2: Verwenden von Transact-SQL-Abfragetools
21
Übung 3 Ausführen eines Skripts mit Hilfe des Dienstprogramms osql In dieser Übung verwenden Sie das Befehlszeilendienstprogramm osql, um das in Übung 2 erstellte Skript auszuführen.
! So zeigen Sie die Argumente des Befehlszeilendienstprogramms „osql“ an
Bei diesem Verfahren zeigen Sie die Argumente des Befehlszeilendienstprogramms osql an. 1. Öffnen Sie ein Fenster mit einer Eingabeaufforderung. 2. Geben Sie die folgende Anweisung ein, um die Befehlszeilenargumente von osql anzuzeigen. osql -?
3. Gehen Sie die Argumente durch.
! So führen Sie eine Skriptdatei mit Hilfe des Dienstprogramms „osql“ aus
Bei diesem Verfahren führen Sie eine Skriptdatei mit Hilfe des Dienstprogramms osql aus. Das Argument -E gibt an, dass eine vertraute Verbindung mit SQL Server hergestellt werden soll. 1. Öffnen Sie ein Fenster mit der Eingabeaufforderung. 2. Geben Sie die folgende Anweisung ein, um C:\Moc\2316B\Labfiles\L02\MyScript.sql auszuführen. Stellen Sie sicher, dass der Pfad korrekt ist und das Argument -E als Großbuchstabe eingegeben wird. osql -E -i "c:\moc\2316B\labfiles\l02\myscript.sql"
Anmerkung Wenn der SQL Server, mit dem das Dienstprogramm osql eine Verbindung herstellen soll, nicht mit dem Argument -S angegeben wird, stellt osql standardmäßig eine Verbindung mit dem lokalen SQL Server her. Der verwendete Befehlszeilenparameter -E gibt an, dass eine vertraute Verbindung mit SQL Server hergestellt werden sollte. Da jedoch kein bestimmter SQL Server angegeben wurde, wird wiederum eine Verbindung mit dem lokalen SQL Server hergestellt.
3. Überprüfen Sie, ob das Ergebnis mit dem Ergebnis aus Übung 2 übereinstimmt.
22
Unterrichtseinheit 2: Verwenden von Transact-SQL-Abfragetools
Lernzielkontrolle Inhalt dieser Folie
Vertiefen Sie die Lernziele dieser Unterrichtseinheit, indem Sie die Kernpunkte wiederholen.
Einstieg
Die Fragen zur Lernzielkontrolle beziehen sich auf einige der Schlüsselkonzepte, die Inhalt dieser Unterrichtseinheit sind.
!
SQL Query Analyzer
!
Verwenden des Objektkatalogs in SQL Query Analyzer
!
Verwenden von Vorlagen in SQL Query Analyzer
!
Verwenden des Dienstprogramms „osql“
!
Ausführen von Transact-SQL-Anweisungen
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** 1. Welches Abfragetool wird bestenfalls in einer Batchdatei verwendet, um das Abfrageergebnis in einer Textdatei zu speichern? Begründung? Bestenfalls wird die Abfrage mit dem Befehlszeilendienstprogramm „osql“ ausgeführt, wobei das Ergebnis mit Hilfe der Befehlszeilenoption „-o dateiname.txt“ in einer Textdatei gespeichert wird. Ebenso ist es möglich, geeignete Befehlszeilenoptionen in SQL Query Analyzer zu verwenden.
2. Wie werden optimalerweise Transact-SQL-Anweisungen für die künftige Verwendung erstellt und verwendet? Verwenden Sie den Objektkatalog, um Skripts mit Transact-SQLAnweisungen direkt aus Objekten und anderen Vorlagen zu erstellen. Ebenso ist es möglich, ein Transact-SQL-Skript in einer Datei zu speichern, um es später zu ändern und künftig zu verwenden.
3. Wie unterscheidet sich ein Transact-SQL-Batch von einem Transact-SQLSkript? Ein Transact-SQL-Batch besteht aus einer Reihe von Anweisungen, die mit einer GO-Anweisung abgeschlossen ist, und die auf einmal analysiert und ausgeführt wird. Ein Transact-SQL-Skript ist eine Datei, die einen oder mehrere zu verarbeitende Batches enthält.
Unterrichtseinheit 3: Abrufen von Daten Inhalt Übersicht
1
Abrufen von Daten mit Hilfe der SELECT-Anweisung
2
Filtern von Daten
8
Formatieren von Resultsets
21
Verarbeiten von Abfragen
30
Automatisches Zwischenspeichern von Abfragen
31
Aspekte der Systemleistung
33
Empfohlene Methoden
34
Übungseinheit A: Abrufen von Daten und Bearbeiten der Resultsets
35
Lernzielkontrolle
47
Die in diesen Unterlagen enthaltenen Angaben und Daten, einschließlich URLs und anderer Verweise auf Internetwebsites, können ohne vorherige Ankündigung geändert werden. Die in den Beispielen genannten Firmen, Organisationen, Produkte, Domänennamen, E-Mail-Adressen, Logos, Personen, Orte und Ereignisse sind frei erfunden und jede Ähnlichkeit mit bestehenden Firmen, Organisationen, Produkten, Domänennamen, E-Mail-Adressen, Logos, Personen, Orten oder Ereignissen ist rein zufällig, soweit nichts anderes angegeben ist. Die Benutzer sind verantwortlich für das Einhalten aller anwendbaren Urheberrechtsgesetze. Unabhängig von der Anwendbarkeit der entsprechenden Urheberrechtsgesetze darf ohne ausdrückliche schriftliche Erlaubnis der Microsoft Corporation kein Teil dieses Dokuments für irgendwelche Zwecke vervielfältigt oder in einem Datenempfangssystem gespeichert oder darin eingelesen werden, unabhängig davon, auf welche Art und Weise oder mit welchen Mitteln (elektronisch, mechanisch, durch Fotokopieren, Aufzeichnen, usw.) dies geschieht. Microsoft Corporation kann Inhaber von Patenten oder Patentanträgen, Marken, Urheberrechten oder anderen gewerblichen Schutzrechten sein, die den Inhalt dieses Dokuments betreffen. Die Bereitstellung dieses Dokuments gewährt keinerlei Lizenzrechte an diesen Patenten, Marken, Urheberrechten oder anderen gewerblichen Schutzrechten, es sei denn, dies wurde ausdrücklich durch einen schriftlichen Lizenzvertrag mit der Microsoft Corporation vereinbart. 2001 Microsoft Corporation. Alle Rechte vorbehalten. Microsoft, BackOffice, MS-DOS, PowerPoint, Visual Studio, Windows, Windows Media und Windows NT sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Die in diesem Dokument aufgeführten Namen tatsächlicher Firmen und Produkte sind möglicherweise Marken der jeweiligen Eigentümer.
Unterrichtseinheit 3: Abrufen von Daten
iii
Hinweise für den Kursleiter Präsentation: 45 Minuten Übungseinheiten: 45 Minuten
Diese Unterrichtseinheit vermittelt Kursteilnehmern die Kenntnisse und Fähigkeiten zum Ausführen einfacher Abfragen mit Hilfe der SELECT-Anweisung, die das Sortieren von Daten, Löschen von Duplikaten und Ändern des Resultsetformats einschließen. Die Unterrichtseinheit wird mit einer Beschreibung der Verarbeitung von Abfragen abgeschlossen. Am Ende dieser Unterrichtseinheit werden die Kursteilnehmer in der Lage sein, die folgenden Aufgaben auszuführen: !
Abfragen von Daten aus Tabellen mit Hilfe der SELECT-Anweisung.
!
Filtern von Daten mit Hilfe unterschiedlicher Suchbedingungen in der WHERE-Klausel.
!
Formatieren von Resultsets.
!
Beschreiben der Verarbeitung von Abfragen.
!
Beschreiben von Leistungsaspekten, die sich auf das Abrufen von Daten auswirken.
Unterlagen und Vorbereitung In diesem Abschnitt werden die erforderlichen Unterlagen und vorbereitenden Aufgaben erläutert, die nötig sind, um diese Unterrichtseinheit zu unterrichten.
Erforderliche Unterlagen Um diese Unterrichtseinheit zu unterrichten, benötigen Sie folgende Unterlagen: !
Die Microsoft® PowerPoint®-Datei 2316B_03.ppt
!
Die Beispieldatei C:\Moc\2316B\Demo\Ex_03.sql, die alle Beispielskripts der Unterrichtseinheit enthält, soweit in der Unterrichtseinheit nichts anderes angegeben ist.
Vorbereitende Aufgaben Zur Vorbereitung dieser Unterrichtseinheit gehen Sie folgendermaßen vor: !
Lesen Sie alle Unterlagen.
!
Führen Sie alle Vorführungen aus.
!
Arbeiten Sie die Übungseinheit durch.
iv
Unterrichtseinheit 3: Abrufen von Daten
Strategie für die Unterrichtseinheit Verwenden Sie die folgende Strategie, um diese Unterrichtseinheit zu präsentieren: !
Abrufen von Daten mit Hilfe der SELECT-Anweisung Erläutern Sie, wie bestimmte Spalten und Zeilen mit der SELECT-Anweisung und der WHERE-Klausel abgerufen werden.
!
Filtern von Daten Beschreiben Sie, wie die Anzahl der zurückgegebenen Zeilen mit Hilfe von Suchbedingungen in der WHERE-Klausel eingeschränkt wird. Besprechen Sie Vergleichs- und logische Operatoren, Zeichenfolgen, Wertebereiche, Wertelisten und unbekannte Werte.
!
Formatieren von Resultsets Beschreiben Sie, wie das Resultset durch Sortieren von Daten, Löschen von doppelten Daten, Ändern von Spaltennamen in Aliasnamen und Verwenden von Literalen übersichtlicher formatiert wird. Weisen Sie darauf hin, dass diese Formatierungsoptionen nicht die Daten selbst, sondern nur die Darstellung der Daten ändern.
!
Verarbeiten von Abfragen Beschreiben Sie, wie Abfragen verarbeitet werden. Erläutern Sie, dass alle Abfragen vor ihrer Ausführung dieselbe Verarbeitung durchlaufen und Microsoft SQL Server™ 2000 einen Teil der Verarbeitung für eine spätere Ausführung derselben Abfrage speichern kann. Erläutern Sie anschließend kurz die Vorteile zwischengespeicherter Abfragen und die Methoden zum Zwischenspeichern von Abfragen.
!
Aspekte der Systemleistung Besprechen Sie einige der Aspekte, die sich beim Ausführen einfacher Abfragen auf die Leistung von SQL Server auswirken.
Anpassungsinformationen Dieser Abschnitt beschreibt die Anforderungen zum Einrichten der Übungseinheiten für eine Unterrichtseinheit sowie die Konfigurationsänderungen, die während der Übungseinheiten an den Kursteilnehmercomputern vorgenommen werden. Diese Informationen sollen Ihnen beim Replizieren oder Anpassen der Microsoft Official Curriculum-Courseware (MOC) helfen. Wichtig Die Übungseinheit in dieser Unterrichtseinheit hängt von der Schulungsraumkonfiguration ab, die im Abschnitt „Anpassungsinformationen“ am Ende des Dokuments Handbuch für das Einrichten von Schulungscomputern für den Kurs 2316B, Abfragen von Microsoft SQL Server 2000 mit Hilfe von Transact-SQL, angegeben ist.
Unterrichtseinheit 3: Abrufen von Daten
Einrichten der Übungseinheit Es gibt keine Anforderungen zum Einrichten der Übungseinheit, die die Replikation oder die Anpassung betreffen.
Ergebnisse der Übungseinheit Auf den Kursteilnehmercomputern gibt es keine Konfigurationsänderungen, die die Replikation oder die Anpassung betreffen.
v
iv
Unterrichtseinheit 3: Abrufen von Daten
This page is intentionally left blank.
Unterrichtseinheit 3: Abrufen von Daten
1
Übersicht Inhalt dieser Folie
Geben Sie eine Übersicht über die Themen und Lernziele dieser Unterrichtseinheit.
Einstieg
In dieser Unterrichtseinheit lernen Sie, wie Daten mit Hilfe einfacher Abfragen abgerufen werden.
!
Abrufen von Daten mit Hilfe der SELECT-Anweisung
!
Filtern von Daten
!
Formatieren von Resultsets
!
Verarbeiten von Abfragen
!
Aspekte der Systemleistung
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Diese Unterrichtseinheit vermittelt Kursteilnehmern die Kenntnisse und Fähigkeiten zum Ausführen einfacher Abfragen mit Hilfe der SELECT-Anweisung, die das Sortieren von Daten, Löschen von Duplikaten und Ändern des Resultsetformats einschließen. Die Unterrichtseinheit wird mit einer Beschreibung der Verarbeitung von Abfragen abgeschlossen. Am Ende dieser Unterrichtseinheit werden Sie in der Lage sein, die folgenden Aufgaben auszuführen: !
Abfragen von Daten aus Tabellen mit Hilfe der SELECT-Anweisung.
!
Filtern von Daten mit Hilfe unterschiedlicher Suchbedingungen in der WHERE-Klausel.
!
Formatieren von Resultsets.
!
Beschreiben der Verarbeitung von Abfragen.
!
Beschreiben von Leistungsaspekten, die sich auf das Abrufen von Daten auswirken.
2
Unterrichtseinheit 3: Abrufen von Daten
" Abrufen von Daten mit Hilfe der SELECT-Anweisung Inhalt dieser Folie
Listen Sie die Themen auf, die im folgenden Abschnitt behandelt werden.
Einstieg
Das Abrufen von Daten aus Tabellen erfolgt mit Hilfe der SELECT-Anweisung, in der Spalten und Zeilen angegeben werden.
!
Verwenden der SELECT-Anweisung
!
Angeben der Spalten
!
Angeben von Zeilen mit Hilfe der WHERE-Klausel
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Bevor Sie Daten bearbeiten können, müssen Sie die Daten auswählen, die aus den Tabellen abgerufen werden sollen. In der SELECT-Anweisung können Sie die Spalten und Zeilen mit den Daten, die Sie aus Tabellen abrufen wollen, angeben.
Unterrichtseinheit 3: Abrufen von Daten
3
Verwenden der SELECT-Anweisung Inhalt dieser Folie
Erläutern Sie, wie Daten mit der SELECT-Anweisung aus einer Tabelle abgerufen werden.
Einstieg
Verwenden Sie die SELECT-Anweisung zum Abrufen von Daten.
!
Die SELECT-Liste gibt die Spalten an
!
Die WHERE-Klausel gibt die Bedingung an, die die Abfrage einschränkt
!
Die FROM-Klausel gibt die Tabelle an
Teilsyntax SELECT SELECT [ALL [ALL || DISTINCT] DISTINCT]
FROM {} FROM {} [,…n] [,…n] WHERE WHERE
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Verwenden Sie die SELECT-Anweisung zum Abrufen von Daten. Teilsyntax
SELECT [ ALL | DISTINCT ] FROM {} [,...n] [ WHERE ] Geben Sie in der SELECT-Anweisung die Spalten und Zeilen an, die aus einer Tabelle zurückgegeben werden sollen. !
Die SELECT-Liste gibt die Spalten an, die zurückgegeben werden.
!
Die WHERE-Klausel gibt die Bedingung an, die die Abfrage einschränkt. Wenn Sie in der WHERE-Klausel Vergleichsoperatoren, Zeichenfolgen und logische Operatoren als Suchbedingungen verwenden, können Sie die Anzahl der Zeilen einschränken.
!
Die FROM-Klausel gibt die Tabelle an, aus der Spalten und Zeilen zurückgegeben werden.
4
Unterrichtseinheit 3: Abrufen von Daten
Angeben der Spalten Inhalt dieser Folie
USE USE Northwind Northwind SELECT SELECT employeeid, employeeid, lastname, lastname, firstname, firstname, title title FROM FROM employees employees GO GO
Zeigen Sie, wie Spalten in einer Tabelle ausgewählt werden.
Einstieg
Sie können einzelne Spalten aus einer Tabelle abrufen, indem Sie sie in der Auswahlliste aufführen.
employeeid employeeid lastname lastname
firstname firstname
title title
11 22
Davolio Davolio Fuller Fuller
Nancy Nancy Andrew Andrew
Sales SalesRepresentative Representative Vice VicePresident, President,Sales Sales
33 44
Leverling Leverling Peacock Peacock
Janet Janet Margaret Margaret
Sales SalesRepresentative Representative Sales SalesRepresentative Representative
77 88
King King Callahan Callahan
Robert Robert Laura Laura
Sales SalesRepresentative Representative Inside InsideSales SalesCoordinator Coordinator
55 66
99
Buchanan Buchanan Suyama Suyama
Dodsworth Dodsworth
Steven Steven Michael Michael
Anne Anne
Sales SalesManager Manager Sales SalesRepresentative Representative
Sales SalesRepresentative Representative
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Sie können einzelne Spalten aus einer Tabelle abrufen, indem Sie sie in der Auswahlliste (SELECT-Liste) aufführen. Die Auswahlliste enthält die auszuwählenden Spalten, Ausdrücke oder Schlüsselwörter bzw. die zuzuweisende lokale Variable. Die folgenden Optionen können in der Auswahlliste verwendet werden: Teilsyntax
::= {
* | { table_name | view_name | table_alias }.* | { column_name | expression | IDENTITYCOL | ROWGUIDCOL } [ [AS] column_alias ] | column_alias = expression } [,...n]
Beachten Sie bei der Angabe der abzurufenden Spalten die folgenden Festlegungen und Richtlinien: !
Die Spalten werden in der Reihenfolge abgerufen, in der sie in der Auswahlliste angegeben sind.
!
Trennen Sie die Spaltennamen durch Kommas, abgesehen vom letzten Spaltennamen.
!
Vermeiden Sie, wenn möglich, die Verwendung eines Sternes (*) in der Auswahlliste. Wird ein Stern angegeben, werden alle Spalten aus einer Tabelle abgerufen.
Unterrichtseinheit 3: Abrufen von Daten
Beispiel
5
In diesem Beispiel werden die Spalten employeeid, lastname, firstname und title für alle Mitarbeiter aus der employees-Tabelle abgerufen. USE Northwind SELECT employeeid, lastname, firstname, title FROM employees GO
Ergebnis
employeeid
lastname
firstname
title
1 2 3 4 5 6 7 8 9
Davolio Fuller Leverling Peacock Buchanan Suyama King Callahan Dodsworth
Nancy Andrew Janet Margaret Steven Michael Robert Laura Anne
Sales Representative Vice President, Sales Sales Representative Sales Representative Sales Manager Sales Representative Sales Representative Inside Sales Coordinator Sales Representative
(9 row(s) affected)
6
Unterrichtseinheit 3: Abrufen von Daten
Angeben von Zeilen mit Hilfe der WHERE-Klausel Inhalt dieser Folie
Erläutern Sie, wie Zeilen mit Hilfe der WHERE-Klausel abgerufen werden.
Einstieg
Mit der WHERE-Klausel können Sie bestimmte Zeilen abhängig von Suchbedingungen abrufen.
USE USE Northwind Northwind SELECT SELECT employeeid, employeeid, FROM FROM employees employees WHERE WHERE employeeid employeeid == GO GO
employeeid employeeid 55
lastname, lastname, firstname, firstname, title title 55
lastname lastname firstname firstname Buchanan Buchanan Steven Steven
title title Sales SalesManager Manager
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Methodischer Hinweis
Vergleichen Sie das Resultset auf der vorhergehenden Folie mit dem auf dieser Folie. Weisen Sie darauf hin, dass mit Hilfe der WHERE-Klausel die Anzahl der zurückgegebenen Zeilen eingeschränkt werden kann. Die hier verwendete Syntax finden Sie nicht im Abschnitt „SELECT-Anweisung“, sondern im Abschnitt „Suchbedingung (T-SQL)“ in der SQL Server-Onlinedokumentation.
Mit Hilfe der WHERE-Klausel können Sie bestimmte Zeilen abhängig von Suchbedingungen abrufen. Die Suchbedingungen in der WHERE-Klausel können eine unbegrenzte Liste mit Prädikaten enthalten. ::= { [ NOT ] | ( ) } [ {AND | OR} [NOT] { | ( ) } ] } [,...n] Der Platzhalter für das Prädikat listet die Ausdrücke auf, die in der WHEREKlausel eingeschlossen sein können. Die folgenden Optionen können in einem Prädikat enthalten sein: ::= { expression { = | | > | >= | < | | >= | < | 250 GO
2. Führen Sie die Abfrage aus, und überprüfen Sie die Ergebnisse. Ergebnis
Das Ergebnis ähnelt dem folgenden Resultset. ordered
total_quantity
10515 10612 10658 10678 10847 10895 10990 11030
286 263 255 280 288 346 256 330
(8 row(s) affected)
Unterrichtseinheit 4: Gruppieren und Zusammenfassen von Daten
35
Übung 3 Verwenden des ROLLUP- und CUBE-Operators In dieser Übung generieren Sie Zusammenfassungsdaten mit Hilfe des ROLLUP- und des CUBE-Operators. Darüber hinaus verwenden Sie die GROUPING-Funktion, um die Ergebniszeilen zu ermitteln, bei denen es sich um Zusammenfassungen handelt. C:\Moc\2316B\Labfiles\L04\Answers enthält vollständige Skripts für diese Übung.
! So verwenden Sie den ROLLUP-Operator zum Generieren von zusammenfassenden Ergebnissen
In diesem Verfahren verwenden Sie den ROLLUP-Operator mit der GROUP BY- und der HAVING-Klausel, um zusammenfassende Ergebnisse zu generieren. Answer_Rollup1.sql ist ein vollständiges Skript für dieses Verfahren. 1. Öffnen und überprüfen Sie das Skript C:\Moc\2316B\Labfiles\L04\Rollup.sql. Dies ist eine Abfrage, die die Menge der Elemente zusammenfasst, die von productid und orderid bestellt wurden, und die eine Rollupberechnung durchführt. 2. Ändern Sie die Abfrage aus Schritt 1, sodass das Ergebnis auf die Produktnummer 50 beschränkt ist, indem Sie eine WHERE-Klausel verwenden, und führen Sie dann die Abfrage aus. USE Northwind SELECT productid, orderid, SUM(quantity) AS total_quantity FROM [order details] WHERE productid = 50 GROUP BY productid, orderid WITH ROLLUP ORDER BY productid, orderid GO
3. Führen Sie die Abfrage aus, und überprüfen Sie die Ergebnisse. Notieren Sie sich die Zeilen mit NULL-Werten. Ergebnis
Das Ergebnis ähnelt dem folgenden Resultset. productid
orderid
total_quantity
NULL 50 50 50 50 50 50 50 50 50 50 50
NULL NULL 10350 10383 10429 10465 10637 10729 10751 10920 10948 11072
235 235 15 15 40 25 25 40 20 24 9 22
(12 row(s) affected)
36
Unterrichtseinheit 4: Gruppieren und Zusammenfassen von Daten
4. Welche Bedeutung haben die NULL-Werte in den Spalten productid und orderid? Die NULL-Werte in einer Zeile zeigen an, dass der Wert in der Spalte „total_quantity“ für diese Zeile, der Summe aller „total_quantity“Werte ohne Gruppierung der Spalte mit dem NULL-Wert darstellt. Beispielsweise ist der Wert „total_quantity“ in der Zeile, in der sowohl „productid“ als auch „orderid“ Null sind, die Summe aller „total_quantity“-Werte der Tabelle. ____________________________________________________________ ____________________________________________________________
! So verwenden Sie den CUBE-Operator zum Generieren von zusammenfassenden Ergebnissen
In diesem Verfahren verwenden Sie den CUBE-Operator und die GROUPINGFunktion, um zwischen Summen- und Detailzeilen im Resultset zu unterscheiden. Answer_Cube1.sql ist ein vollständiges Skript für dieses Verfahren. 1. Öffnen und überprüfen Sie das Skript C:\Moc\2316B\Labfiles\L04\Rollup.sql. Dies ist eine Abfrage, die die Menge der Elemente zusammenfasst, die von productid und orderid bestellt wurden, und die eine Rollupberechnung durchführt. 2. Ändern Sie die Abfrage aus Schritt 1, um statt des ROLLUP-Operators den CUBE-Operator zu verwenden. Verwenden Sie darüber hinaus auch die GROUPING-Funktion in der productid- und der orderid-Spalte, damit Sie zwischen Summen- und Detailzeilen im Resultset unterscheiden können, und führen Sie dann die Abfrage aus. USE Northwind SELECT productid ,GROUPING(productid) ,orderid ,GROUPING(orderid) ,SUM(quantity) AS total_quantity FROM [order details] WHERE productid = 50 GROUP BY productid, orderid WITH CUBE ORDER BY productid, orderid GO
3. Führen Sie die Abfrage aus, und überprüfen Sie die Ergebnisse.
Unterrichtseinheit 4: Gruppieren und Zusammenfassen von Daten
Ergebnis
37
Das Ergebnis ähnelt dem folgenden Resultset. productid NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 50 50 50 50 50 50 50 50 50 50 50
orderid 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0
NULL 10350 10383 10429 10465 10637 10729 10751 10920 10948 11072 NULL 10350 10383 10429 10465 10637 10729 10751 10920 10948 11072
total_quantity 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0
235 15 15 40 25 25 40 20 24 9 22 235 15 15 40 25 25 40 20 24 9 22
(22 row(s) affected)
Welchen Zeilen sind Zusammenfassungen? Die Zeilen mit der Zahl 1 in einer von der GROUPING-Funktion generierten Spalte. ____________________________________________________________ ____________________________________________________________ Welchen Zeilen sind Zusammenfassungen nach Produkt? Nach Bestellung? Wenn die Zahl 1 in der von der GROUPING-Funktion für die „productid“-Spalte generierten Spalte vorhanden ist, handelt es sich bei der Zeile um eine Zusammenfassung nach Bestellung. Der Wert dieser Zeile in „productid“ ist NULL, da es sich um eine Summenzeile anstelle einer Detailzeile handelt, die einen NULL-Wert enthält. Die Zeile mit der Zahl 1 in der „orderid“-Spalte der GROUPING-Funktion ist eine Summenzeile für die Produktnummer 50. Die Zeile mit der Zahl 1 in den beiden von der GROUPING-Funktion generierten Spalten gibt eine Gesamtsumme an. ____________________________________________________________ ____________________________________________________________
38
Unterrichtseinheit 4: Gruppieren und Zusammenfassen von Daten
Übung 4 Verwenden der COMPUTE- und COMPUTE BY-Klausel In dieser Übung verwenden Sie die COMPUTE- und die COMPUTE BYKlausel, um Berichte mit Gruppenwechseln sowie Summen und Mittelwerte am Ende der Berichte zu generieren. C:\Moc\2316B\Labfiles\L04\Answers enthält vollständige Skripts für diese Übung.
! So verwenden Sie die COMPUTE-Klausel zum Generieren von Berichten
In diesem Verfahren ändern Sie eine vorhandene Abfrage durch Hinzufügen der COMPUTE- und der COMPUTE BY-Klausel, um Zwischensummen und Gesamtsummen zu generieren. Answer_Compute1.sql ist ein vollständiges Skript für dieses Verfahren. 1. Öffnen und überprüfen Sie das Skript C:\Moc\2316B\Labfiles\L04\Compute.sql. Dies ist eine Abfrage, die orderid und quantity aller Bestellungen zurückgibt, deren orderid größer als 11070 ist. 2. Ändern Sie die Abfrage aus Schritt 1, um mit Hilfe der COMPUTE-Klausel eine Gesamtsumme für die quantity-Spalte zu erstellen. USE Northwind SELECT orderid, quantity FROM [order details] WHERE orderid >= 11070 COMPUTE SUM(quantity) GO
3. Führen Sie die Abfrage aus, und überprüfen Sie die Ergebnisse. Ergebnis
Das Ergebnis ähnelt dem folgenden Teil eines Resultsets. ordered
quantity
11070 11070 11070 . . . 11077 11077 11077
40 20 30
24 4 1 Sum ========== 543
(45 row(s) affected)
Unterrichtseinheit 4: Gruppieren und Zusammenfassen von Daten
39
! So verwenden Sie die COMPUTE-Klausel zum Generieren von Berichten
In diesem Verfahren ändern Sie eine vorhandene Abfrage mit Hilfe der COMPUTE BY-Klausel, um Gesamtsummen zu generieren. Answer_Compute2.sql ist ein vollständiges Skript für dieses Verfahren. 1. Öffnen und überprüfen Sie das Skript C:\Moc\2316B\Labfiles\L04\Compute.sql. Dies ist eine Abfrage, die orderid und quantity aller Bestellungen zurückgibt, deren orderid größer als 11070 ist. 2. Ändern Sie die Abfrage aus Schritt 1, um einen Bericht mit Gruppenwechsel zu generieren, der die Gesamtmenge für die Bestellnummern 11075 und 11076 bereitstellt. USE Northwind SELECT orderid, quantity FROM [order details] WHERE orderid in ( 11075, 11076 ) ORDER BY orderid COMPUTE SUM(quantity) BY orderid GO
3. Führen Sie die Abfrage aus, und überprüfen Sie die Ergebnisse. Ergebnis
Das Ergebnis ähnelt dem folgenden Resultset. ordered
quantity
11075 11075 11075
10 30 2 Sum ========== 42
11076 11076 11076
20 20 10 Sum ========== 50
(8 row(s) affected)
40
Unterrichtseinheit 4: Gruppieren und Zusammenfassen von Daten
! So fügen Sie die Gesamtmenge und die durchschnittliche Menge am Ende des Berichts mit Gruppenwechsel hinzu
In diesem Verfahren fügen Sie die Gesamtmenge und die durchschnittliche Menge am Ende des Berichts mit Gruppenwechsel hinzu Answer_Compute3.sql ist ein vollständiges Skript für dieses Verfahren. 1. Ändern Sie die Abfrage aus Schritt 1 des vorherigen Verfahrens, um die Gesamtmenge und die durchschnittliche Menge am Ende des Berichts mit Gruppenwechsel hinzuzufügen. USE Northwind SELECT orderid, quantity FROM [order details] WHERE orderid in ( 11075, 11076 ) ORDER BY orderid COMPUTE SUM(quantity) BY orderid COMPUTE SUM(quantity) COMPUTE AVG(quantity) GO
2. Führen Sie die Abfrage aus, und überprüfen Sie die Ergebnisse. Ergebnis
Das Ergebnis ähnelt dem folgenden Resultset. Beachten Sie die Ähnlichkeit zwischen diesem Resultset und dem Resultset aus Schritt 3 des vorherigen Verfahrens, zusätzlich sind hier jedoch die Summen am Ende des Berichts (Gesamtmenge und durchschnittliche Menge) aufgeführt. orderid
quantity
11075 11075 11075
10 30 2 Sum ========== 42
11076 11076 11076
20 20 10 Sum ========== 50 Sum ========== 92 Avg ========== 15
(10 row(s) affected
Unterrichtseinheit 4: Gruppieren und Zusammenfassen von Daten
41
Lernzielkontrolle Inhalt dieser Folie
Vertiefen Sie die Lernziele dieser Unterrichtseinheit, indem Sie die wichtigsten Punkte wiederholen.
Einstieg
Die Fragen zur Lernzielkontrolle beziehen sich auf einige der Schlüsselkonzepte, die Inhalt dieser Unterrichtseinheit sind.
!
Auflisten der TOP n-Werte
!
Verwenden von Aggregatfunktionen
!
Grundlagen der GROUP BY-Klausel
!
Generieren von Aggregatwerten in Resultsets
!
Verwenden der COMPUTE- und COMPUTE BY-Klauseln
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Gehen Sie anhand dieser Fragen die Themen der Unterrichtseinheit durch. Klären Sie andere offene Fragen der Kursteilnehmer, bevor Sie fortfahren.
1. Eine Angestellte in der Marketingabteilung hat Sie gebeten, Zusammenfassungsdaten über Produktumsätze zur Verfügung zu stellen. Sie benötigt eine Zusammenfassung aller Frühstückszerealien nach Typ (warm, kalt oder fettarm), Hersteller und Größe der Niederlassung, in der das Produkt verkauft wurde (klein, mittelgroß oder groß). Wenn eine einzelne Tabelle alle diese Informationen enthält, welche Klauseln oder Operatoren könnten Sie mit der SELECT-Anweisung verwenden? Begründung? Die beste Antwort ist die GROUP BY-Klausel in Verbindung mit dem CUBE-Operator. Die GROUP BY- und HAVING-Klausel stellen nur eine Ebene von Zusammenfassungen (oder Gruppen) bereit. Der ROLLUP-Operator stellt nur für eine Kategorie Zusammenfassungen bereit. Der CUBE-Operator stellt für mehrere Kategorien Zusammenfassungen bereit. Sie könnten auch die COMPUTE- oder COMPUTE BY-Klausel zum Generieren allgemeiner Berichte verwenden.
42
Unterrichtseinheit 4: Gruppieren und Zusammenfassen von Daten
2. Ihr Vorgesetzter fordert Sie auf, eine Datei mit sämtlichen Daten aus Frage 1 an eine andere Entwicklungsgruppe zu übergeben, die für das Generieren von Berichten und die grafische Darstellung verantwortlich ist. Können die COMPUTE- und COMPUTE BY-Klausel bei dieser Aufgabenstellung verwendet werden? Begründung? Nein, die COMPUTE- und COMPUTE BY-Klausel generieren zusätzliche Summenzeilen mit Daten in einem nicht relationalen Format. Während dies beim Anzeigen hilfreich sein kann, eignet sich die Ausgabe nicht gut zum Generieren von Resultsets, die von anderen Anwendungen verwendet werden sollen. Sie können die GROUP BYKlausel und den CUBE- oder ROLLUP-Operator verwenden, um Daten in einem relationalen Standardformat zur Verfügung zu stellen, mit dem andere Clients problemlos arbeiten können.
3. Sie überprüfen die Ergebnisse einer SELECT-Anweisung, in der die GROUP BY-Klausel und der CUBE-Operator verwendet wurden. Das Resultset enthält NULL-Werte, und Sie wissen, dass NULL-Werte in den von der SELECT-Anweisung verwendeten Tabellen zulässig sind. Wie können Sie zwischen detaillierten Zeilen und zusammenfassenden Zeilen mit NULL-Werten unterscheiden? Verwenden Sie die GROUPING-Funktion in den Spalten, in denen NULL-Werte zulässig sind. Der Wert 1 wird in der durch die GROUPING-Funktion generierten Spalte angezeigt, wenn es sich bei der Zeile um eine zusammenfassende Zeile handelt.
4. Sie sollen eine Liste bereitstellen, die die 100 besten Produkte und die Produkte enthält, die sich in den unteren fünf Prozent des Umsatzes befinden. Können Sie zur Beantwortung beider Fragen die SELECT TOP n [PERCENT]-Anweisung verwenden? Gibt es andere Möglichkeiten, um diese Frage zu beantworten? Ja, Sie können zur Beantwortung beider Aufgaben die SELECT TOP n [PERCENT]-Anweisung verwenden. Die erste Frage kann mit der SELECT TOP 100...ORDER BY...DESC-Anweisung beantwortet werden, sodass die Elemente mit der höchsten Verkaufszahl in der Liste an oberster Position stehen. Die zweite Frage kann mit der SELECT TOP 5 PERCENT... ORDER BY...ASC-Anweisung beantwortet werden, sodass die Elemente mit der niedrigsten Verkaufszahl in der Liste an oberster Position stehen.
Unterrichtseinheit 5: Verknüpfen von mehreren Tabellen Inhalt Übersicht
1
Verwenden von Aliasnamen für Tabellennamen
2
Kombinieren von Daten aus mehreren Tabellen
4
Kombinieren mehrerer Resultsets
19
Empfohlene Methoden
21
Übungseinheit A: Abfragen mehrerer Tabellen
22
Lernzielkontrolle
31
Die in diesen Unterlagen enthaltenen Angaben und Daten, einschließlich URLs und anderer Verweise auf Internetwebsites, können ohne vorherige Ankündigung geändert werden. Die in den Beispielen genannten Firmen, Organisationen, Produkte, Domänennamen, E-Mail-Adressen, Logos, Personen, Orte und Ereignisse sind frei erfunden und jede Ähnlichkeit mit bestehenden Firmen, Organisationen, Produkten, Domänennamen, E-Mail-Adressen, Logos, Personen, Orten oder Ereignissen ist rein zufällig, soweit nichts anderes angegeben ist. Die Benutzer sind verantwortlich für das Einhalten aller anwendbaren Urheberrechtsgesetze. Unabhängig von der Anwendbarkeit der entsprechenden Urheberrechtsgesetze darf ohne ausdrückliche schriftliche Erlaubnis der Microsoft Corporation kein Teil dieses Dokuments für irgendwelche Zwecke vervielfältigt oder in einem Datenempfangssystem gespeichert oder darin eingelesen werden, unabhängig davon, auf welche Art und Weise oder mit welchen Mitteln (elektronisch, mechanisch, durch Fotokopieren, Aufzeichnen, usw.) dies geschieht. Microsoft Corporation kann Inhaber von Patenten oder Patentanträgen, Marken, Urheberrechten oder anderen gewerblichen Schutzrechten sein, die den Inhalt dieses Dokuments betreffen. Die Bereitstellung dieses Dokuments gewährt keinerlei Lizenzrechte an diesen Patenten, Marken, Urheberrechten oder anderen gewerblichen Schutzrechten, es sei denn, dies wurde ausdrücklich durch einen schriftlichen Lizenzvertrag mit der Microsoft Corporation vereinbart. 2001 Microsoft Corporation. Alle Rechte vorbehalten. Microsoft, BackOffice, MS-DOS, PowerPoint, Visual Studio, Windows, Windows Media und Windows NT sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Die in diesem Dokument aufgeführten Namen tatsächlicher Firmen und Produkte sind möglicherweise Marken der jeweiligen Eigentümer.
Unterrichtseinheit 5: Verknüpfen von mehreren Tabellen
iii
Hinweise für den Kursleiter Präsentation: 60 Minuten Übungseinheit: 45 Minuten
Diese Unterrichtseinheit gibt den Kursteilnehmern eine Übersicht über das Abfragen mehrerer Tabellen mit Hilfe verschiedener Verknüpfungstypen, über das Kombinieren von Resultsets mit Hilfe des UNION-Operators und über das Erstellen von Tabellen mit Hilfe der SELECT INTO-Anweisung. Am Ende dieser Unterrichtseinheit werden die Kursteilnehmer in der Lage sein, die folgenden Aufgaben auszuführen: !
Verwenden von Aliasnamen für Tabellennamen.
!
Kombinieren von Daten aus zwei oder mehreren Tabellen mit Hilfe von Verknüpfungen.
!
Kombinieren mehrerer Resultsets zu einem Resultset mit Hilfe des UNIONOperators.
Unterlagen und Vorbereitung In diesem Abschnitt werden die erforderlichen Unterlagen und vorbereitenden Aufgaben erläutert, die nötig sind, um diese Unterrichtseinheit zu unterrichten.
Erforderliche Unterlagen Um diese Unterrichtseinheit zu unterrichten, benötigen Sie folgende Unterlagen: !
Die Microsoft® PowerPoint®-Datei 2316B_05.ppt
!
Die Beispieldatei C:\Moc\2316B\Demo\Ex_05.sql, die alle Beispielskripts der Unterrichtseinheit enthält, soweit in der Unterrichtseinheit nichts anderes angegeben ist.
Vorbereitende Aufgaben Zur Vorbereitung dieser Unterrichtseinheit gehen Sie folgendermaßen vor: !
Lesen Sie alle Unterlagen.
!
Arbeiten Sie die Übungseinheit durch.
Strategie für die Unterrichtseinheit Verwenden Sie die folgende Strategie, um diese Unterrichtseinheit zu präsentieren: !
Verwenden von Aliasnamen für Tabellennamen Weisen Sie darauf hin, dass Benutzer im Bereich einer Transact-SQLAnweisung für Tabellennamen Aliasnamen zuweisen können. Durch das Verwenden von Aliasnamen für Tabellennamen wird die Lesbarkeit von Skripts verbessert, und eine komplexe Verknüpfungslogik wird vereinfacht.
iv
Unterrichtseinheit 5: Verknüpfen von mehreren Tabellen !
Kombinieren von Daten aus mehreren Tabellen Stellen Sie die Verknüpfungsoperation vor, und gehen Sie ausführlich auf innere und äußere Verknüpfungen sowie CROSS JOINS (Kreuzverknüpfungen) ein. Die Beispiele konzentrieren sich auf das Verknüpfen von zwei Tabellen mit Hilfe einer vereinfachten joindb-Datenbank, um diese Konzepte zu vermitteln. Erläutern Sie, wie mehrere Tabellen verknüpft werden und wie eine Tabelle mit sich selbst verknüpft wird. Führen Sie Verknüpfungen mehrerer Tabellen und Selbstverknüpfungen am Beispiel der Northwind-Datenbank mit Hilfe des bereitgestellten Skripts vor.
!
Kombinieren mehrerer Resultsets Beschreiben Sie, wie mit Hilfe des UNION-Operators mehrere Resultsets zu einem Resultset kombiniert werden.
Anpassungsinformationen Dieser Abschnitt beschreibt die Anforderungen zum Einrichten der Übungseinheiten für eine Unterrichtseinheit sowie die Konfigurationsänderungen, die während der Übungseinheiten an den Kursteilnehmercomputern vorgenommen werden. Diese Informationen sollen Ihnen beim Replizieren oder Anpassen der Microsoft Official Curriculum-Courseware (MOC) helfen. Wichtig Die Übungseinheit in dieser Unterrichtseinheit hängt von der Schulungsraumkonfiguration ab, die im Abschnitt „Anpassungsinformationen“ am Ende des Dokuments Handbuch für das Einrichten von Schulungscomputern für den Kurs 2316B, Abfragen von Microsoft SQL Server 2000 mit Hilfe von Transact-SQL, angegeben ist.
Einrichten der Unterrichtseinheit Das Skript C:\Moc\2316B\Batches\2316_JoinDB.sql, mit dem die Datenbank hinzugefügt wird, wird normalerweise als Bestandteil der Schulungsraumeinrichtung ausgeführt. Wenn Sie den Kurs anpassen, müssen Sie sicherstellen, dass das Skript ausgeführt wird, sodass die Beispiele in der Unterrichtseinheit ordnungsgemäß funktionieren.
Einrichten der Übungseinheit Es gibt keine Anforderungen zum Einrichten der Übungseinheit, die die Replikation oder die Anpassung betreffen.
Ergebnisse der Übungseinheit Auf den Kursteilnehmercomputern gibt es keine Konfigurationsänderungen, die die Replikation oder die Anpassung betreffen.
Unterrichtseinheit 5: Verknüpfen von mehreren Tabellen
1
Übersicht Inhalt dieser Folie
Geben Sie eine Übersicht über die Themen und Lernziele dieser Unterrichtseinheit.
Einstieg
In dieser Unterrichtseinheit lernen Sie, wie mehrere Tabellen verknüpft werden.
!
Verwenden von Aliasnamen für Tabellennamen
!
Kombinieren von Daten aus mehreren Tabellen
!
Kombinieren mehrerer Resultsets
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Diese Unterrichtseinheit gibt den Kursteilnehmern eine Übersicht über das Abfragen mehrerer Tabellen mit Hilfe verschiedener Verknüpfungstypen, über das Kombinieren von Resultsets mit Hilfe des UNION-Operators und über das Erstellen von Tabellen mit Hilfe der SELECT INTO-Anweisung. Am Ende dieser Unterrichtseinheit werden Sie in der Lage sein, die folgenden Aufgaben auszuführen: !
Verwenden von Aliasnamen für Tabellennamen.
!
Kombinieren von Daten aus zwei oder mehreren Tabellen mit Hilfe von Verknüpfungen.
!
Kombinieren mehrerer Resultsets zu einem Resultset mit Hilfe des UNIONOperators.
2
Unterrichtseinheit 5: Verknüpfen von mehreren Tabellen
Verwenden von Aliasnamen für Tabellennamen Inhalt dieser Folie
Beschreiben Sie, wie Aliasnamen für Tabellennamen verwendet werden.
Einstieg
Durch das Verwenden von Aliasnamen für Tabellennamen wird die Lesbarkeit von Skripts verbessert, das Schreiben von komplexen Verknüpfungen erleichtert und die Verwaltung von Transact-SQL vereinfacht.
!
Beispiel 1 (ohne Aliasnamen)
USE USE joindb joindb SELECT SELECT buyer_name, buyer_name, sales.buyer_id, sales.buyer_id, qty qty FROM FROM buyers buyers INNER INNER JOIN JOIN sales sales ON ON buyers.buyer_id buyers.buyer_id == sales.buyer_id sales.buyer_id GO GO !
Beispiel 2 (mit Aliasnamen)
USE USE joindb joindb SELECT SELECT buyer_name, buyer_name, s.buyer_id, s.buyer_id, qty qty FROM FROM buyers buyers AS AS bb INNER INNER JOIN JOIN sales sales AS AS ss ON ON b.buyer_id b.buyer_id == s.buyer_id s.buyer_id GO GO
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Durch das Verwenden von Aliasnamen für Tabellennamen wird die Lesbarkeit von Skripts verbessert, das Schreiben von komplexen Verknüpfungen erleichtert und die Verwaltung von Transact-SQL vereinfacht. Sie können beim Schreiben von Skripts einen langen und komplexen vollgekennzeichneten Tabellennamen durch einen einfachen, abgekürzten Aliasnamen ersetzen. Sie verwenden einen Aliasnamen anstelle des vollständigen Tabellennamens. Teilsyntax
SELECT * FROM server.database.schema.table AS table_alias
Beispiel 1
In diesem Beispiel werden die in der buyers- und der sales-Tabelle aufgeführten Namen von Käufern, die Käuferkennung und die verkaufte Menge angezeigt. Bei dieser Abfrage werden keine Aliasnamen für die Tabellen in der JOIN-Syntax verwendet. USE joindb SELECT buyer_name, Sales.buyer_id, qty FROM buyers INNER JOIN sales ON buyers.buyer_id = sales.buyer_id GO
Unterrichtseinheit 5: Verknüpfen von mehreren Tabellen
Beispiel 2
In diesem Beispiel werden die in der buyers- und der sales-Tabelle aufgeführten Namen von Käufern, die Käuferkennung und die verkaufte Menge angezeigt. Bei dieser Abfrage werden Aliasnamen für die Tabellen in der JOINSyntax verwendet. USE joindb SELECT buyer_name, s.buyer_id, qty FROM buyers AS b INNER JOIN sales AS s ON b.buyer_id = s.buyer_id GO
Anmerkung Manchmal müssen bei einer komplexen JOIN-Syntax und bei komplexen Unterabfragen Aliasnamen für Tabellennamen verwendet werden. Es müssen z. B. dann Aliasnamen verwendet werden, wenn eine Tabelle mit sich selbst verknüpft wird.
3
4
Unterrichtseinheit 5: Verknüpfen von mehreren Tabellen
" Kombinieren von Daten aus mehreren Tabellen Inhalt dieser Folie
Erklären Sie die unterschiedlichen Verfahren zum Kombinieren von Daten aus zwei oder mehreren Tabellen oder Resultsets.
!
Einführung in Verknüpfungen
!
Verwenden von inneren Verknüpfungen
Einstieg
!
Verwenden von äußeren Verknüpfungen
!
Verwenden von CROSS JOINS
!
Verknüpfen von mehr als zwei Tabellen
!
Verknüpfen einer Tabelle mit sich selbst
Daten aus zwei oder mehreren Tabellen können auch dann kombiniert werden, wenn sich die Tabellen in verschiedenen Datenbanken befinden.
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Bei einer Verknüpfung handelt es sich um eine Operation, mit der eine oder mehrere Tabellen abgefragt werden können, um ein Resultset zu erstellen, das Zeilen und Spalten der einzelnen Tabellen einschließt. Sie können Tabellen mit Hilfe beliebiger Ausdrücke verknüpfen, die auf einer oder mehreren Spalten beider Tabellen basieren. Wenn Tabellen verknüpft werden, vergleicht Microsoft® SQL Server™ 2000 Zeile für Zeile die Werte in den angegebenen Spalten. Anschließend werden die benutzerdefinierten Werte mit Hilfe der Vergleichsergebnisse in neuen Zeilen kombiniert. Man unterscheidet drei Verknüpfungstypen: Innere Verknüpfungen, äußere Verknüpfungen und CROSS JOINS (Kreuzverknüpfungen). Darüber hinaus können mehr als zwei Tabellen mit Hilfe einer Reihe von Verknüpfungen innerhalb einer SELECT-Anweisung miteinander verknüpft werden. Außerdem ist es möglich, eine Tabelle über eine Selbstverknüpfung mit sich selbst zu verknüpfen.
Unterrichtseinheit 5: Verknüpfen von mehreren Tabellen
5
Einführung in Verknüpfungen Inhalt dieser Folie
Erklären Sie, wie Verknüpfungen implementiert werden.
!
Auswählen bestimmter Spalten in mehreren Tabellen #
Einstieg
Tabellen werden verknüpft, um ein einzelnes Resultset zu erstellen, das Elemente aus zwei oder mehreren Tabellen umfasst.
#
!
Das JOIN-Schlüsselwort gibt an, dass Tabellen verknüpft sind und auf welche Weise sie verknüpft werden Das ON-Schlüsselwort gibt die Verknüpfungsbedingungen an
Abfragen zweier oder mehrerer Tabellen, um ein Resultset zu erstellen #
#
Verwenden von Primär- und Fremdschlüsseln als Verknüpfungsbedingungen Verwenden Sie zum Verknüpfen von Tabellen die Spalten, die in den angegebenen Tabellen übereinstimmen
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Tabellen werden verknüpft, um ein einzelnes Resultset zu erstellen, das Zeilen und Spalten aus zwei oder mehreren Tabellen einschließt. Teilsyntax
Methodischer Hinweis
Ziehen Sie die SQL ServerOnlinedokumentation heran, um die vollständige SELECT-Anweisung zu zeigen und die Verknüpfungen hervorzuheben.
SELECT column_name [, column_name …] FROM {} [,...n] ::= [ INNER | { { LEFT | RIGHT | FULL } [OUTER] } ] [ ] JOIN ::= ON | CROSS JOIN |
Auswählen bestimmter Spalten in mehreren Tabellen Eine Verknüpfung ermöglicht es Ihnen, Spalten aus mehreren Tabellen auszuwählen, indem Sie die FROM-Klausel der SELECT-Anweisung erweitern. In der FROM-Klausel werden zwei zusätzliche Schlüsselwörter eingeschlossen: JOIN und ON. !
Das JOIN-Schlüsselwort gibt an, welche Tabellen verknüpft werden sollen und auf welche Weise sie verknüpft werden.
!
Das ON-Schlüsselwort gibt an, welche Spalten in den Tabellen übereinstimmen.
6
Unterrichtseinheit 5: Verknüpfen von mehreren Tabellen
Abfragen zweier oder mehrerer Tabellen, um ein Resultset zu erstellen Eine Verknüpfung ermöglicht es Ihnen, zwei oder mehrere Tabellen abzufragen, um ein einzelnes Resultset zu erstellen. Beachten Sie beim Implementieren von Verknüpfungen die folgenden Punkte und Richtlinien: Weitere Informationen
Verknüpfungen werden meist für einfache und zusammengesetzte Primärund Fremdschlüssel durchgeführt, Verknüpfungen können aber auch für andere Spalten durchgeführt werden.
!
Geben Sie möglichst immer die Verknüpfungsbedingung auf der Grundlage der Primär- und Fremdschlüssel an, Sie können gegebenenfalls aber auch eine beliebige andere Spalte verwenden..
!
Um eine Datenerweiterung zu vermeiden, müssen Sie beim Verknüpfen von Tabellen in der ON-Klausel auf den vollständigen Schlüssel verweisen, wenn eine der Tabellen einen zusammengesetzten Primärschlüssel aufweist. Verknüpfen Sie im Allgemeinen alle Spalten, in denen eine Zeile eindeutig definiert wird, um eine Datenerweiterung zu verhindern.
!
Verwenden Sie zum Verknüpfen von Tabellen die Spalten, die in den angegebenen Tabellen übereinstimmen. Die Spalten sollten über den gleichen oder über kompatible Datentypen verfügen.
!
Verweisen Sie auf einen Tabellennamen, wenn die Spaltennamen der verknüpften Tabellen übereinstimmen. Kennzeichnen Sie jeden Spaltennamen mit Hilfe des Formats Tabellenname.Spaltenname.
!
Begrenzen Sie möglichst die Anzahl der Tabellen in einer Verknüpfung. Je größer die Anzahl der verknüpften Tabellen ist, desto länger kann die Verarbeitung der Abfrage in SQL Server dauern.
!
In einer einzigen SELECT-Anweisung können Sie eine oder mehrere Tabellen verknüpfen.
Unterrichtseinheit 5: Verknüpfen von mehreren Tabellen
7
Verwenden von inneren Verknüpfungen USE USE joindb joindb SELECT SELECT buyer_name, buyer_name, FROM FROM buyers buyers INNER INNER ON ON buyers.buyer_id buyers.buyer_id GO GO
Inhalt dieser Folie
Definieren Sie innere Verknüpfungen, und führen Sie ihre Funktionsweise vor.
sales.buyer_id, sales.buyer_id, qty qty JOIN JOIN sales sales == sales.buyer_id sales.buyer_id
buyers
Einstieg
sales
buyer_name buyer_id buyer_name buyer_id Adam 11 AdamBarr Barr Sean 22 SeanChai Chai Eva Corets 33 Eva Corets Erin O’Melia 44 Erin O’Melia
Mit inneren Verknüpfungen können Tabellen kombiniert werden, in denen Werte in verglichenen Spalten übereinstimmen.
Beispiel Beispiel 11
buyer_id buyer_id prod_id prod_id 11 22 11 33 44 11 33 55 44
Ergebnis
22
qty qty 15 15 55 37 37 11 11 1003 1003
buyer_name buyer_id qty buyer_name buyer_id qty Adam 11 15 15 AdamBarr Barr Adam 11 55 AdamBarr Barr Erin ErinO’Melia O’Melia Eva EvaCorets Corets
44 33
37 37 11 11
Erin ErinO’Melia O’Melia
44
1003 1003
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Mit inneren Verknüpfungen werden Tabellen kombiniert, indem Werte in Spalten verglichen werden, die in beiden Tabellen vorkommen. SQL Server gibt nur Zeilen zurück, die den Verknüpfungsbedingungen entsprechen. Anmerkung Bei den Beispielen in dieser Unterrichtseinheit wurde die joindbDatenbank zugrunde gelegt. Diese Datenbank wurde speziell zum Erläutern der verschiedenen Verknüpfungstypen erstellt. Die joindb-Datenbank ist auf der Kursteilnehmer-CD enthalten. Methodischer Hinweis
Die Beispiele auf den Folien in dieser Unterrichtseinheit stammen aus der joindbDatenbank. Diese Datenbank wurde speziell zum Erläutern der verschiedenen Verknüpfungstypen erstellt. Die joindb-Datenbank ist auf der Kursteilnehmer-CD enthalten. Weisen Sie darauf hin, dass SQL Server keine spezielle Reihenfolge im Resultset gewährleistet, es sei denn dies wird durch eine ORDER BY-Klausel angegeben.
Gründe für die Verwendung von inneren Verknüpfungen Mit inneren Verknüpfungen können Daten aus zwei separaten Tabellen abgerufen und in einem Resultset kombiniert werden. Wenn Sie innere Verknüpfungen verwenden, beachten Sie folgende Aspekte und Richtlinien: !
Bei inneren Verknüpfungen handelt es sich um das Standardverfahren von SQL Server. Die INNER JOIN-Klausel kann als JOIN abgekürzt werden.
!
Geben Sie an, welche Spalten im Resultset angezeigt werden sollen, indem Sie die gekennzeichneten Spaltennamen in der Auswahlliste einschließen.
!
Schließen Sie eine WHERE-Klausel ein, um die im Resultset zurückgegebenen Zeilen zu beschränken.
!
Verwenden Sie keinen NULL-Wert als Verknüpfungsbedingung, da NULLWerte nicht als übereinstimmend ausgewertet werden.
Anmerkung SQL Server gewährleistet keine spezielle Reihenfolge im Resultset, es sei denn dies wird durch eine ORDER BY-Klausel angegeben.
8
Unterrichtseinheit 5: Verknüpfen von mehreren Tabellen
Beispiel 1
Methodischer Hinweis
Weisen Sie darauf hin, dass auf die buyer_id-Spalte jeder Tabelle in der Auswahlliste verwiesen werden kann.
Ergebnis
Beispiel 2
In diesem Beispiel werden die Werte buyer_name, buyer_id und qty für die Käufer zurückgegeben, die Produkte gekauft haben. Käufer, die keine Produkte gekauft haben, sind im Resultset nicht eingeschlossen. Käufer, die mehr als ein Produkt gekauft haben, werden für jeden Kauf gesondert aufgeführt. Die buyer_id-Spalte jeder Tabelle kann in der Auswahlliste angegeben werden. USE joindb SELECT buyer_name, Sales.buyer_id, qty FROM buyers INNER JOIN sales ON Buyers.buyer_id = Sales.buyer_id GO buyer_name
buyer_id
qty
Adam Barr Adam Barr Erin O'Melia Eva Corets Erin O'Melia (5 row(s) affected)
1 1 4 3 4
15 5 37 11 1003
In diesem Beispiel werden die Namen von Produkten und die Namen der Unternehmen, die die Produkte vertreiben, zurückgegeben. Produkte ohne aufgeführte Lieferanten und Lieferanten ohne aktuelle Produkte sind im Resultset nicht eingeschlossen. USE Northwind SELECT ProductName, CompanyName FROM products INNER JOIN suppliers ON products.supplierid = suppliers.supplierid GO
Ergebnis
Beispiel 3
ProductName
CompanyName
Chai Chang Aniseed Syrup Chef Anton's Cajun Seasoning . . . (77 row(s) affected)
Exotic Liquids Exotic Liquids Exotic Liquids New Orleans Cajun Delights
In diesem Beispiel werden die Namen von Kunden zurückgegeben, die nach dem 01.01.1998 Aufträge erteilt haben. Beachten Sie, dass eine WHEREKlausel verwendet wird, um die im Resultset zurückgegebene Anzahl der Zeilen einzuschränken. USE Northwind SELECT DISTINCT companyname, orderdate FROM orders INNER JOIN customers ON orders.customerid = customers.customerid WHERE orderdate > '1/1/98' GO
Unterrichtseinheit 5: Verknüpfen von mehreren Tabellen
Ergebnis
Beispiel 4
Methodischer Hinweis
In diesem Beispiel wird die library-Datenbank verwendet, da die NorthwindDatenbank nicht über zwei Tabellen mit zusammengesetzten Primärschlüsseln verfügt, die sich aufeinander beziehen.
Ergebnis
companyname
orderdate
Alfreds Futterkiste Alfreds Futterkiste Alfreds Futterkiste Ana Trujillo Emparedados y helados . . . (264 row(s) affected)
1998-01-15 1998-03-16 1998-04-09 1998-03-04
9
00:00:00.000 00:00:00.000 00:00:00.000 00:00:00.000
In diesem Beispiel werden die Titelnummern aller aktuell ausgeliehenen Bücher sowie die Mitgliedsnummern der ausleihenden Personen aus den Tabellen copy und loan der library-Datenbank zurückgegeben. Die Tabellen copy und loan enthalten einen zusammengesetzten Primärschlüssel, der aus den Spalten isbn und copy_no besteht. Beim Verknüpfen dieser Tabellen müssen Sie beide Spalten als Verknüpfungsbedingungen angeben, da diese eine bestimmte Ausgabe eines Buches eindeutig identifizieren. USE library SELECT copy.title_no, loan.member_no FROM copy INNER JOIN loan ON copy.isbn = loan.isbn AND copy.copy_no = loan.copy_no WHERE copy.on_loan = 'Y' GO
title_no
member_no
1 325 1 351 2 390 2 416 . . . (2000 row(s) affected)
10
Unterrichtseinheit 5: Verknüpfen von mehreren Tabellen
Verwenden von äußeren Verknüpfungen USE USE joindb joindb SELECT SELECT buyer_name, buyer_name, sales.buyer_id, sales.buyer_id, qty qty FROM FROM buyers buyers LEFT LEFT OUTER OUTER JOIN JOIN sales sales ON ON buyers.buyer_id buyers.buyer_id == sales.buyer_id sales.buyer_id GO GO
Inhalt dieser Folie
Definieren Sie äußere Verknüpfungen, und beschreiben Sie die drei Typen.
Einstieg
Mit Hilfe von linken, rechten oder vollständigen äußeren Verknüpfungen können Zeilen, die der Verknüpfungsbedingung nicht entsprechen, in einem Resultset eingeschlossen werden.
Beispiel Beispiel 11
buyers
sales
buyer_name buyer_id buyer_name buyer_id Adam 11 AdamBarr Barr Sean 22 SeanChai Chai
buyer_id buyer_id prod_id prod_id qty qty 11 22 15 15 11 33 55 44 11 37 37
Eva EvaCorets Corets Erin ErinO’Melia O’Melia
33 44
Ergebnis buyer_name buyer_id qty buyer_name buyer_id qty Adam Barr 1 15 15 Adam Barr 1 Adam 11 55 AdamBarr Barr Erin 44 37 ErinO’Melia O’Melia 37 Eva 33 11 EvaCorets Corets 11 Erin ErinO’Melia O’Melia Sean SeanChai Chai
44 NULL NULL
33 44
55 22
11 11 1003 1003
1003 1003 NULL NULL
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Methodischer Hinweis
Weisen Sie auf die NULLWerte für Sean Chai auf der Folie hin. Für Zeilen, die der Verknüpfungsbedingung nicht entsprechen, wird im Resultset NULL angezeigt.
Mit linken oder rechten äußeren Verknüpfungen werden Zeilen aus zwei Tabellen kombiniert, die der Verknüpfungsbedingung entsprechen, sowie in der JOIN-Klausel angegebene Zeilen ohne Übereinstimmung aus der linken oder rechten Tabelle. Für Zeilen, die der Verknüpfungsbedingung nicht entsprechen, wird im Resultset NULL angezeigt. Mit vollständigen äußeren Verknüpfungen können auch alle Zeilen der verknüpften Tabellen angezeigt werden, unabhängig davon, ob in den Tabellen übereinstimmende Werte vorhanden sind.
Gründe für die Verwendung von linken oder rechten äußeren Verknüpfungen Methodischer Hinweis
Stellen Sie folgende Frage: Welche Änderungen würden Sie in der Beispielabfrage auf der Folie vornehmen, um dasselbe Ergebnis mit einer RIGHT OUTER JOIN-Klausel zu erzielen? Antwort: Kehren Sie die Reihenfolge der Tabellen in der FROM-Klausel um, und verwenden Sie die RIGHT OUTER JOIN-Klausel.
Methodischer Hinweis
Verwenden Sie immer die ANSI SQL-92-Verknüpfungssyntax, wobei ANSI_NULLS auf ON festgelegt ist.
Verwenden Sie linke oder rechte äußere Verknüpfungen, wenn Sie neben den Daten, die der Verknüpfungsbedingung entsprechen, eine vollständige Liste der Daten benötigen, die in einer der verknüpften Tabellen gespeichert sind. Wenn Sie linke oder rechte äußere Verknüpfungen verwenden, beachten Sie folgende Aspekte und Richtlinien: !
Mit einer linken äußeren Verknüpfung können alle Zeilen der zuerst genannten Tabelle (der Tabelle auf der linken Seite des Ausdrucks) angezeigt werden. Wenn Sie die Reihenfolge umkehren, in der die Tabellen in der FROM-Klausel aufgelistet sind, erzielt die Anweisung das gleiche Ergebnis wie eine rechte äußere Verknüpfung.
!
Mit einer rechten äußeren Verknüpfung können alle Zeilen der an zweiter Stelle genannten Tabelle (der Tabelle auf der rechten Seite des Ausdrucks) angezeigt werden. Wenn Sie die Reihenfolge umkehren, in der die Tabellen in der FROM-Klausel aufgelistet sind, erzielt die Anweisung das gleiche Ergebnis wie eine linke äußere Verknüpfung.
!
Die LEFT OUTER JOIN- oder die RIGHT OUTER JOIN-Klausel können als LEFT JOIN oder RIGHT JOIN abgekürzt werden.
Unterrichtseinheit 5: Verknüpfen von mehreren Tabellen
Beispiel 1
11
In diesem Beispiel werden die Werte buyer_name, buyer_id und qty für die Käufer und deren Einkäufe zurückgegeben. Beachten Sie, dass die Käufer, die keine Produkte gekauft haben, im Resultset aufgelistet werden. In den Spalten buyer_id und qty werden jedoch NULL-Werte angezeigt. USE joindb SELECT buyer_name, sales.buyer_id, qty FROM buyers LEFT OUTER JOIN sales ON buyers.buyer_id = sales.buyer_id GO
Ergebnis
buyer_name
buyer_id
qty
Adam Barr Adam Barr Erin O'Melia Eva Corets Erin O'Melia Sean Chai
1 1 4 3 4 NULL
15 5 37 11 1003 NULL
(6 row(s) affected)
Anmerkung Die Sortierreihenfolge des Resultsets kann unterschiedlich sein, da die ORDER BY-Klausel im Beispiel nicht verwendet wurde. Beispiel 2
In diesem Beispiel werden alle Kunden mit zugehörigem Auftragsdatum angezeigt. Mit Hilfe einer linken äußeren Verknüpfung wird eine Zeile für jeden Kunden abgerufen. Hat der Kunde mehrere Aufträge erteilt, werden weitere Zeilen abgerufen. In der orderdate-Spalte wird im Resultset NULL für Kunden zurückgegeben, die keinen Auftrag erteilt haben. Beachten Sie die NULL-Einträge für die Kunden FISSA und Paris Spécialités. USE Northwind SELECT companyname, customers.customerid, orderdate FROM customers LEFT OUTER JOIN orders ON customers.customerid = orders.customerid GO
Ergebnis
companyname
customerid
orderdate
Vins et alcools Chevalier Toms Spezialitäten Hanari Carnes Victuailles en stock . . . FISSA Fabrica Inter. Salichichas S.A. Paris specialities
VINIT TOMSP HANAR VICTE
1996-07-04 1996-07-05 1996-07-08 1996-07-08
FISSA PARIS
NULL NULL
(832 row(s) affected)
00:00.0 00:00.0 00:00.0 00:00.0
12
Unterrichtseinheit 5: Verknüpfen von mehreren Tabellen
Verwenden von CROSS JOINS USE USE joindb joindb SELECT SELECT buyer_name, buyer_name, qty qty FROM FROM buyers buyers CROSS CROSS JOIN JOIN sales sales GO GO
Inhalt dieser Folie
Zeigen Sie die Funktionsweise von CROSS JOINS, und beschreiben Sie das Resultset.
Einstieg
Mit CROSS JOINS können alle möglichen Zeilenkombinationen der ausgewählten Spalten in den verknüpften Tabellen angezeigt werden.
buyers buyer_id buyer_id buyer_name buyer_name 11 Adam AdamBarr Barr 22 33 44
Sean SeanChai Chai Eva EvaCorets Corets
Erin ErinO’Melia O’Melia
Beispiel Beispiel 11
sales
Ergebnis
buyer_id buyer_idprod_id prod_id qty qty 11 22 15 15 11 33 55
buyer_name qty buyer_name qty Adam 15 AdamBarr Barr 15 Adam 55 AdamBarr Barr
44 33 44
11 55
22
37 37 11 11
1003 1003
Adam AdamBarr Barr Adam AdamBarr Barr
37 37 11 11
Adam AdamBarr Barr Sean SeanChai Chai Sean SeanChai Chai
1003 1003 15 15 55
Sean SeanChai Chai Sean SeanChai Chai
37 37 11 11
Sean SeanChai Chai Eva EvaCorets Corets ......
1003 1003 15 15 ......
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Methodischer Hinweis
Weisen Sie darauf hin, dass das ON-Schlüsselwort und die zugeordnete Spaltenliste nicht in der SELECT-Anweisung verwendet werden, da CROSS JOINS alle möglichen Zeilenkombinationen jeder angegebenen Tabelle zurückgeben. Um einen CROSS JOIN verwenden zu können, ist keine gemeinsame Spalte erforderlich.
Beispiel 1
CROSS JOINS zeigen alle möglichen Kombinationen sämtlicher Zeilen der verknüpften Tabellen an. Um einen CROSS JOIN verwenden zu können, ist keine gemeinsame Spalte erforderlich.
Gründe für die Verwendung von CROSS JOINS CROSS JOINS werden in einer normalisierten Datenbank nur selten verwendet. Sie können zum Generieren von Testdaten für eine Datenbank oder von Listen aller möglichen Kombinationen für Prüflisten oder Geschäftsvorlagen verwendet werden. Wenn Sie CROSS JOINS verwenden, erstellt SQL Server ein kartesisches Produkt, in dem die Anzahl der Zeilen im Resultset der Anzahl der Zeilen in der ersten Tabelle multipliziert mit der Anzahl der Zeilen in der zweiten Tabelle entspricht. Wenn beispielsweise eine Tabelle 8 Zeilen und die andere 9 Zeilen enthält, gibt SQL Server insgesamt 72 Zeilen zurück. In diesem Beispiel werden alle möglichen Kombinationen der Werte in den Spalten buyers.buyer_name und sales.qty aufgelistet. USE joindb SELECT buyer_name, qty FROM buyers CROSS JOIN sales GO
Unterrichtseinheit 5: Verknüpfen von mehreren Tabellen
Ergebnis
Beispiel 2
Methodischer Hinweis
Führen Sie die Abfrage aus, und erklären Sie, dass in diesem Beispiel alle Möglichkeiten aufgelistet werden, die Lieferanten für den Versand ihrer Produkte zur Verfügung stehen.
Ergebnis
buyer_name
qty
Adam Barr Adam Barr Adam Barr Adam Barr Adam Barr Sean Chai Sean Chai . . . (20 row(s) affected)
15 5 37 11 1003 15 5
13
In diesem Beispiel wird ein CROSS JOIN zwischen den Tabellen shippers und suppliers angezeigt, mit dem alle Möglichkeiten aufgelistet werden können, die Lieferanten für den Versand ihrer Produkte zur Verfügung stehen. Bei Verwendung eines CROSS JOINS werden alle möglichen Zeilenkombinationen zwischen diesen beiden Tabellen angezeigt. Die Tabelle shippers enthält 3 Zeilen, während die Tabelle suppliers aus 29 Zeilen besteht. Das Resultset enthält 87 Zeilen. USE Northwind SELECT suppliers.companyname, shippers.companyname FROM suppliers CROSS JOIN shippers GO companyname
companyname
Aux joyeux ecclésiastiques Bigfoot Breweries Cooperativa de Quesos 'Las Cabras' Escargots Nouveaux . . . Aux joyeux ecclésiastiques Bigfoot Breweries Cooperativa de Quesos 'Las Cabras' Escargots Nouveaux . . . Aux joyeux ecclésiastiques Bigfoot Breweries Cooperativa de Quesos 'Las Cabras' Escargots Nouveaux . . . (87 row(s) affected)
Speedy Speedy Speedy Speedy
Express Express Express Express
United United United United
Package Package Package Package
Federal Federal Federal Federal
Shipping Shipping Shipping Shipping
14
Unterrichtseinheit 5: Verknüpfen von mehreren Tabellen
Verknüpfen von mehr als zwei Tabellen SELECT SELECT buyer_name, buyer_name, prod_name, prod_name, qty qty FROM FROM buyers buyers INNER INNER JOIN JOIN sales sales ON ON buyers.buyer_id buyers.buyer_id == sales.buyer_id sales.buyer_id INNER INNER JOIN JOIN produce produce ON ON sales.prod_id sales.prod_id == produce.prod_id produce.prod_id GO GO sales buyers buyer_id buyer_name buyer_id buyer_id prod_id buyer_idbuyer_name qty prod_id qty 11 Adam 11 22 15 AdamBarr Barr 15 1 3 55 22 Sean Chai 1 Sean Chai 3 1 33 Eva Corets 3 37 Eva Corets 3 37 1
Inhalt dieser Folie
Erklären Sie, wie mehr als zwei Tabellen miteinander verknüpft werden können.
Einstieg
Bisher wurden immer nur zwei Tabellen miteinander verknüpft. Es ist jedoch möglich, mehr als zwei Tabellen miteinander zu verknüpfen.
44
Erin ErinO’Melia O’Melia
44 22
Ergebnis buyer_name buyer_name Erin ErinO’Melia O’Melia Adam AdamBarr Barr Erin ErinO’Melia O’Melia Adam AdamBarr Barr Eva EvaCorets Corets
55 22
11 11 1003 1003
Beispiel Beispiel 11
produce prod_id prod_id prod_name prod_name 11 Apples Apples 22 Pears Pears 33 Oranges Oranges 44 55
Bananas Bananas Peaches Peaches
prod_name prod_name qty qty Apples 37 Apples 37 Pears 15 Pears 15 Pears 1003 Pears 1003 Oranges 55 Oranges Peaches Peaches
11 11
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Methodischer Hinweis
Zunächst werden die Tabellen buyers und sales miteinander verknüpft. Danach erfolgt die Verknüpfung der Tabellen sales und produce. Betonen Sie, dass jede Tabelle, auf die in einer Verknüpfungsoperation verwiesen wird, über eine gemeinsame Spalte mit einer anderen Tabelle verknüpft werden kann.
Beispiel 1
Es können beliebig viele Tabellen miteinander verknüpft werden. Jede Tabelle, auf die in einer Verknüpfungsoperation verwiesen wird, kann über eine gemeinsame Spalte mit einer anderen Tabelle verknüpft werden.
Gründe für das Verknüpfen von mehr als zwei Tabellen Über Mehrfachverknüpfungen können verbundene Daten aus mehreren Tabellen abgerufen werden. Beachten Sie beim Verknüpfen von mehr als zwei Tabellen folgende Aspekte und Richtlinien: !
Es werden eine oder mehrere Tabellen benötigt, die Fremdschlüsselbeziehungen zu jeder Tabelle enthalten, die verknüpft werden soll.
!
Die ON-Klausel sollte auf jede Spalte verweisen, die Teil eines zusammengesetzten Schlüssels ist.
!
Schließen Sie eine WHERE-Klausel ein, um die Anzahl der zurückgegebenen Zeilen einzuschränken.
In diesem Beispiel werden die Spalten buyer_name, prod_name und qty aus den Tabellen buyers, sales und produce zurückgegeben. Die buyer_id-Spalte ist sowohl in der buyers-Tabelle als auch in der sales-Tabelle vorhanden und wird verwendet, um die beiden Tabellen zu verknüpfen. Die prod_id-Spalte ist sowohl in der sales-Tabelle als auch in der produce-Tabelle enthalten. Die Spalte wird verwendet, um die produce-Tabelle mit dem Ergebnis der Verknüpfung zwischen den Tabellen buyers und sales zu verknüpfen.
Unterrichtseinheit 5: Verknüpfen von mehreren Tabellen
15
USE joindb SELECT buyer_name, prod_name, qty FROM buyers INNER JOIN sales ON Buyers.buyer_id = Sales.buyer_id INNER JOIN produce ON Sales.prod_id = Produce.prod_id GO
Ergebnis
buyer_name
prod_name
qty
Erin O'Melia Adam Barr Erin O'Melia Adam Barr Eva Corets
Apples Pears Pears Oranges Peaches
37 15 1003 5 11
(5 row(s) affected)
Beispiel 2
In diesem Beispiel werden Daten aus den Tabellen orders und products angezeigt, wobei die order details-Tabelle als Bindeglied verwendet wird. Wenn Sie z. B. eine Liste der täglich bestellten Produkte benötigen, sind hierzu Informationen aus den Tabellen orders und products erforderlich. Ein Auftrag kann aus zahlreichen Produkten bestehen, und für ein Produkt können viele Aufträge erteilt werden. Um Informationen aus den beiden Tabellen orders und products abzufragen, können Sie eine innere Verknüpfung über die order details-Tabelle verwenden. Obwohl keine Spalten aus der order details-Tabelle abgerufen werden, muss diese Tabelle jedoch als Teil der inneren Verknüpfung eingeschlossen werden, um die orders-Tabelle in Beziehung zur products-Tabelle zu setzen. In diesem Beispiel ist die orderid-Spalte sowohl in der orders-Tabelle als auch in der order details-Tabelle vorhanden. Die Tabellen order details und products enthalten beide die productid-Spalte. USE Northwind SELECT orderdate, productname FROM orders AS O INNER JOIN [order details] AS OD ON O.orderid = OD.orderid INNER JOIN products AS P ON OD.productid = P.productid WHERE orderdate = '7/8/96'
Ergebnis
orderdate
productname
1996-07-08 1996-07-08 1996-07-08 1996-07-08 1996-07-08 1996-07-08
Jack's New England Clam Chowder Manjimup Dried Apples Louisiana Fiery Hot Pepper Sauce Gustaf's Knakebrod Ravioli Angelo Louisiana Fiery Hot Pepper Sauce
(6 row(s) affected)
16
Unterrichtseinheit 5: Verknüpfen von mehreren Tabellen
Verknüpfen einer Tabelle mit sich selbst USE USE joindb joindb SELECT SELECT a.buyer_id a.buyer_id AS AS buyer1, buyer1, a.prod_id a.prod_id ,b.buyer_id ,b.buyer_id AS AS buyer2 buyer2 FROM FROM sales sales AS AS aa INNER INNER JOIN JOIN sales sales AS AS bb ON ON a.prod_id a.prod_id == b.prod_id b.prod_id WHERE WHERE a.buyer_id a.buyer_id >> b.buyer_id b.buyer_id GO GO
Inhalt dieser Folie
Erklären Sie die Selbstverknüpfung.
Einstieg
Verknüpfungen werden zwar in den meisten Fällen zum Kombinieren mehrerer Tabellen verwendet, eine Tabelle kann jedoch auch über eine Selbstverknüpfung mit sich selbst verknüpft werden.
sales a
Beispiel Beispiel 33
sales b
buyer_id buyer_id prod_id prod_id qty qty 11 22 15 15 11 33 55 44 33
11 55
37 37 11 11
44
22
1003 1003
buyer_id buyer_id prod_id prod_id qty qty 11 22 15 15 11 33 55 44 33
11 55
37 37 11 11
44
22
1003 1003
Ergebnis buyer1 buyer1 prod_id prod_id buyer2 buyer2 44 22 11
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Methodischer Hinweis
Das Beispiel auf der Folie zeigt das gewünschte Ergebnis, wenn eine Tabelle mit sich selbst verknüpft wird. Ziehen Sie die Beispielreihe im Arbeitsbuch für Kursteilnehmer heran, um zu erläutern, wie eine Tabelle mit sich selbst verknüpft wird.
Wenn Sie nach Zeilen suchen, deren Werte mit den Werten in anderen Zeilen derselben Tabelle übereinstimmen, können Sie eine Tabelle über eine Selbstverknüpfung mit einer weiteren Instanz der Tabelle verknüpfen.
Gründe für die Verwendung von Selbstverknüpfungen Selbstverknüpfungen werden zwar nur selten in einer normalisierten Datenbank verwendet, mit ihrer Hilfe kann jedoch die Anzahl der Abfragen reduziert werden, die beim Vergleichen von Werten aus Spalten in verschiedenen Zeilen derselben Tabelle ausgeführt werden. Beachten Sie folgende Richtlinien für Selbstverknüpfungen: !
Sie müssen Tabellenaliasnamen für den Verweis auf zwei Kopien der Tabelle angeben. Denken Sie daran, dass sich die Tabellenaliasnamen von den Spaltenaliasnamen unterscheiden. Bei Tabellenaliasnamen folgt der Alias auf den Tabellennamen.
!
Beim Erstellen von Selbstverknüpfungen stimmt jede Zeile mit sich selbst überein, und Paare werden wiederholt, was zu doppelten Zeilen führt. Verwenden Sie eine WHERE-Klausel, um die doppelten Zeilen zu löschen.
Unterrichtseinheit 5: Verknüpfen von mehreren Tabellen
Beispiel 1 Methodischer Hinweis
Weisen Sie auf die Duplikate hin, bei denen die Zeilen mit sich selbst übereinstimmen (Zeile 1, 3, 4 und 7). Verwenden Sie eine WHERE-Klausel mit dem Ungleich-Operator (), um diesen Duplikatstyp zu löschen.
Ergebnis
17
In diesem Beispiel wird eine Liste aller Käufer angezeigt, die die gleichen Produkte gekauft haben. Beachten Sie, dass buyer1 in der ersten und dritten Zeile des Resultsets mit sich selbst übereinstimmt. In der vierten und siebten Zeile stimmt buyer4 mit sich selbst überein. Die zweite und sechste Zeile spiegeln sich gegenseitig wider. USE joindb SELECT a.buyer_id AS buyer1, a.prod_id, b.buyer_id AS buyer2 FROM sales AS a INNER JOIN sales AS b ON A.prod_id = B.prod_id GO buyer1
prod_id
buyer2
1 4 1 4 3 1 4
2 2 3 1 5 2 2
1 1 1 4 3 4 4
(7 row(s) affected)
Beispiel 2
Methodischer Hinweis
Weisen Sie darauf hin, dass in den Beispielen doppelte Zeilen, bei denen es sich um Spiegelbilder der jeweils anderen Zeile handelt, nicht gelöscht werden.
Ergebnis
In diesem Beispiel wird eine Liste von Käufern angezeigt, die alle die gleichen Produkte gekauft haben. Dabei werden jedoch doppelte Zeilen gelöscht, wie z. B. die mit sich selbst übereinstimmenden Zeilen für buyer1 und buyer4. Vergleichen Sie die Resultsets der Beispiele 1 und 2. Beachten Sie, dass die doppelten Zeilen gelöscht werden, indem eine WHERE-Klausel mit dem Ungleich-Operator () verwendet wird. Doppelte Zeilen, die Spiegelbilder der jeweils anderen Zeile darstellen, werden im Resultset jedoch weiterhin zurückgegeben. USE joindb SELECT a.buyer_id AS buyer1, a.prod_id, b.buyer_id AS buyer2 FROM sales AS a INNER JOIN sales AS b ON a.prod_id = b.prod_id WHERE a.buyer_id b.buyer_id GO buyer1
prod_id
buyer2
4 1
2 2
1 4
(2 row(s) affected)
18
Unterrichtseinheit 5: Verknüpfen von mehreren Tabellen
Beispiel 3
In diesem Beispiel wird eine Liste von Käufern angezeigt, die die gleichen Produkte gekauft haben.
Methodischer Hinweis
Weisen Sie darauf hin, dass die Duplikate in Beispiel 2 bei Verwendung der WHERE-Klausel mit den Operatoren Größer als (>) und Kleiner als () einschließt. USE joindb SELECT a.buyer_id AS buyer1, a.prod_id, b.buyer_id AS buyer2 FROM sales AS a INNER JOIN sales AS b ON a.prod_id = b.prod_id WHERE a.buyer_id > b. buyer_id GO buyer1
prod_id
buyer2
4
2
1
(1 row(s) affected)
Beispiel 4
In diesem Beispiel werden Paare von Angestellten angezeigt, deren Berufsbezeichnung übereinstimmt. Wenn die WHERE-Klausel den Operator Kleiner als ( AVG(t2.price) GO
Anmerkung Sie können korrelierte Unterabfragen schreiben, die zum gleichen Ergebnis wie eine JOIN- oder HAVING-Klausel führen, aber der Abfrageprozessor implementiert sie möglicherweise nicht auf die gleiche Art.
Unterrichtseinheit 6: Arbeiten mit Unterabfragen
13
Verwenden der EXISTS- und NOT EXISTS-Klauseln Inhalt dieser Folie
Erläutern Sie, wie die EXISTS- und NOT EXISTSOperatoren zusammen mit korrelierten Unterabfragen verwendet werden.
Einstieg
!
Verwenden mit korrelierten Unterabfragen
!
Bestimmen des Vorhandenseins von Daten in einer Liste von Werten
!
SQL Server-Prozess "
Mit den EXISTS- und NOT EXISTS-Operatoren können Sie ermitteln, ob Daten in einer Liste von Werten vorhanden sind.
" "
Die äußere Abfrage überprüft, ob Zeilen vorhanden sind Die innere Abfrage gibt TRUE oder FALSE zurück Es werden keine Daten zurückgegeben
Beispiel Beispiel 11 USE USE Northwind Northwind SELECT lastname, employeeid SELECT lastname, employeeid FROM FROM employees employees AS AS ee WHERE WHERE EXISTS EXISTS (( SELECT SELECT ** FROM FROM orders orders AS AS oo WHERE WHERE e.employeeid e.employeeid == o.employeeid o.employeeid AND AND o.orderdate o.orderdate == '9/5/1997' '9/5/1997' )) GO GO
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Mit den EXISTS- und NOT EXISTS-Operatoren können Sie ermitteln, ob Daten in einer Liste von Werten vorhanden sind.
Verwenden mit korrelierten Unterabfragen Verwenden Sie die EXISTS- und NOT EXISTS-Operatoren mit korrelierten Unterabfragen, um das Resultset einer äußeren Abfrage auf Zeilen zu beschränken, die die Unterabfrage erfüllen. Die EXISTS- und NOT EXISTSOperatoren geben in Abhängigkeit davon, ob für Unterabfragen Zeilen zurückgegeben werden, TRUE oder FALSE zurück.
Bestimmen des Vorhandenseins von Daten in einer Liste von Werten Wenn eine Unterabfrage mit dem EXISTS-Operator eingeleitet wird, testet SQL Server, ob Daten vorhanden sind, die die Unterabfrage erfüllen. Tatsächlich werden keine Zeilen abgerufen. SQL Server beendet das Abrufen von Zeilen, sobald bekannt ist, dass mindestens eine Zeile die WHERE-Bedingung in der Unterabfrage erfüllt.
SQL Server-Prozess Wenn SQL Server Unterabfragen verarbeitet, die den EXISTS- oder NOT EXISTS-Operator verwenden, gilt Folgendes: !
Die äußere Abfrage überprüft, ob Zeilen vorhanden sind, die die Unterabfrage zurückgibt.
!
Die Unterabfrage gibt in Abhängigkeit von der Bedingung der Abfrage TRUE oder FALSE zurück.
!
Die Unterabfrage gibt keine Daten zurück.
14
Unterrichtseinheit 6: Arbeiten mit Unterabfragen
Teilsyntax
WHERE [NOT] EXISTS (subquery)
Beispiel 1
In diesem Beispiel wird eine korrelierte Unterabfrage mit einem EXISTSOperator in der WHERE-Klausel verwendet, um eine Liste der Angestellten zurückzugeben, die am 5.9.1997 Bestellungen entgegennahmen.
Methodischer Hinweis
Führen Sie die beiden Beispiele aus, wobei STATISTICS TIME auf ON festgelegt ist, um die Verarbeitungszeit zu vergleichen.
Ergebnis
USE Northwind SELECT lastname, employeeid FROM employees AS e WHERE EXISTS ( SELECT * FROM orders AS o WHERE e.employeeid = o.employeeid AND o.orderdate = '9/5/1997' ) GO lastname
employeeid
Peacock King
4 7
(2 row(s) affected)
Beispiel 2
In diesem Beispiel wird das gleiche Resultset wie in Beispiel 1 zurückgegeben und es wird gezeigt, dass Sie statt einer korrelierten Unterabfrage eine Verknüpfungsoperation verwenden können. Beachten Sie, dass für die Abfrage das DISTINCT-Schlüsselwort erforderlich ist, um eine einzige Zeile für jeden Angestellten zurückzugeben. USE Northwind SELECT DISTINCT lastname, e.employeeid FROM orders AS o INNER JOIN employees AS e ON o.employeeid = e.employeeid WHERE o.orderdate = '9/5/1997' GO
Ergebnis
lastname
employeeid
Peacock King
4 7
(2 row(s) affected)
Unterrichtseinheit 6: Arbeiten mit Unterabfragen
15
Empfohlene Methoden Inhalt dieser Folie
Listen Sie die empfohlenen Methoden zum Abrufen und Ändern von Daten auf.
Verwenden Verwenden Sie Sie Unterabfragen, Unterabfragen, um um komplexe komplexe Abfragen Abfragen zu zu untergliedern untergliedern
Einstieg
Die folgenden empfohlenen Methoden helfen Ihnen beim Ausführen erweiterter Abfragen.
Verwenden Verwenden Sie Sie Tabellenaliasnamen Tabellenaliasnamen für für korrelierte korrelierte Unterabfragen Unterabfragen Verwenden Verwenden Sie Sie die die INSERT…SELECT-Anweisung, INSERT…SELECT-Anweisung, um um zu zu einer einer vorhandenen vorhandenen Tabelle Tabelle aus aus anderen anderen Quellen Quellen Zeilen Zeilen hinzuzufügen hinzuzufügen Verwenden Verwenden Sie Sie möglichst möglichst immer immer den den EXISTS-Operator EXISTS-Operator anstelle anstelle des des IN-Operators IN-Operators
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Die folgenden empfohlenen Methoden sollen Ihnen beim Ausführen erweiterter Abfragen helfen: !
Verwenden Sie Unterabfragen, um komplexe Abfragen zu untergliedern. Sie können ein Problem mit einer einzigen Anweisung mit Hilfe von Unterabfragen lösen. Unterabfragen sind hilfreich, wenn die Abfrage von den Ergebnissen einer anderen Abfrage abhängt.
!
Verwenden Sie Tabellenaliasnamen für korrelierte Unterabfragen. In SQL Server sind für den Verweis auf die mehrdeutigen Tabellennamen Aliasnamen erforderlich, um zwischen den inneren und äußeren Tabellen zu unterscheiden.
!
Verwenden Sie die INSERT…SELECT-Anweisung, um zu einer vorhandenen Tabelle aus anderen Quellen Zeilen hinzuzufügen. Das Verwenden der INSERT…SELECT-Anweisung ist effizienter als das Schreiben mehrerer einzeiliger INSERT-Anweisungen.
!
Verwenden Sie möglichst immer den EXISTS-Operator anstelle des INOperators, sodass nicht das vollständige Resultset der Unterabfrage abgerufen werden muss.
Zusätzliche Informationen zu den folgenden Themen finden Sie in der SQL Server-Onlinedokumentation. Thema
Suchbegriff
Verwenden von Unterabfragen
“Erstellen einer Teilabfrage”
Korrelieren von Tabellen
“Verwenden von Tabellenaliasnamen” “Erstellen von Tabellenaliasen”
Verwenden einer Unterabfrage anstelle eines Ausdrucks
“Unterabfragen anstelle von Ausdrücken”
16
Unterrichtseinheit 6: Arbeiten mit Unterabfragen
Übungseinheit A: Arbeiten mit Unterabfragen Inhalt dieser Folie
Geben Sie eine Einführung in die Übungseinheit.
Einstieg
In dieser Übungseinheit schreiben Sie Unterabfragen und führen Unterabfragen aus, die als Ausdruck, Verknüpfung und zum Korrelieren von Daten verwendet werden.
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Erläutern Sie die Lernziele der Übungseinheit.
Lernziele Am Ende dieser Übungseinheit werden Sie in der Lage sein, die folgenden Aufgaben auszuführen: !
Verwenden einer Unterabfrage als abgeleitete Tabelle.
!
Verwenden einer Unterabfrage als Ausdruck.
!
Verwenden einer Unterabfrage zum Korrelieren von Daten.
Voraussetzungen Um diese Übungseinheit zu bearbeiten, benötigen Sie Folgendes: !
Die Skriptdateien für diese Übungseinheit, die sich in C:\Moc\2316B\Labfiles\L06 befinden.
!
Die Antwortdateien für diese Übungseinheit, die sich in C:\Moc\2316B\Labfiles\L06\Answers befinden.
!
Die library-Datenbank muss installiert sein.
Einrichten der Übungseinheit Nicht erforderlich.
Weitere Informationen Wenn Sie Hilfe bei der Ausführung von Dateien benötigen, suchen Sie in der Hilfe von SQL Query Analyzer nach „Ausführen einer Abfrage“. Daneben sind die folgenden Informationsquellen verfügbar: !
Das library-Datenbankschema.
!
Die SQL Server-Onlinedokumentation.
Unterrichtseinheit 6: Arbeiten mit Unterabfragen
17
Szenario Der Aufbau des Schulungsraumes soll die Organisation des weltweit agierenden Handelsunternehmens Northwind Traders widerspiegeln. Das Unternehmen hat den fiktiven Domänennamen ist nwtraders.msft. Der primäre DNS-Server für nwtraders.msft ist der Kursleitercomputer, der die Internetprotokolladresse (IP-Adresse) 192.168.x.200 besitzt (wobei x die zugewiesene Schulungsraumnummer ist). Der Name des Kursleitercomputers ist London. Die folgende Tabelle stellt den Benutzernamen, den Computernamen und die IP-Adresse für jeden Kursteilnehmercomputer in der fiktiven Domäne nwtraders.msft bereit. Suchen Sie den Benutzernamen Ihres Computers und notieren Sie ihn. Benutzername
Computername
IP-Adresse
SQLAdmin1
Vancouver
192.168.x.1
SQLAdmin2
Denver
192.168.x.2
SQLAdmin3
Perth
192.168.x.3
SQLAdmin4
Brisbane
192.168.x.4
SQLAdmin5
Lisbon
192.168.x.5
SQLAdmin6
Bonn
192.168.x.6
SQLAdmin7
Lima
192.168.x.7
SQLAdmin8
Santiago
192.168.x.8
SQLAdmin9
Bangalore
192.168.x.9
SQLAdmin10
Singapore
192.168.x.10
SQLAdmin11
Casablanca
192.168.x.11
SQLAdmin12
Tunis
192.168.x.12
SQLAdmin13
Acapulco
192.168.x.13
SQLAdmin14
Miami
192.168.x.14
SQLAdmin15
Auckland
192.168.x.15
SQLAdmin16
Suva
192.168.x.16
SQLAdmin17
Stockholm
192.168.x.17
SQLAdmin18
Moscow
192.168.x.18
SQLAdmin19
Caracas
192.168.x.19
SQLAdmin20
Montevideo
192.168.x.20
SQLAdmin21
Manila
192.168.x.21
SQLAdmin22
Tokyo
192.168.x.22
SQLAdmin23
Khartoum
192.168.x.23
SQLAdmin24
Nairobi
192.168.x.24
Veranschlagte Zeit für die Übungseinheit: 30 Minuten
18
Unterrichtseinheit 6: Arbeiten mit Unterabfragen
Übung 1 Verwenden einer Unterabfrage als abgeleitete Tabelle In dieser Übung schreiben Sie eine Abfrage, die eine abgeleitete Tabelle verwendet und die abgeleitete Tabelle mit einer anderen Tabelle verknüpft. Sie werden außerdem die Abfrage in einzelne Schritte unterteilen und zeigen, wie eine abgeleitete Tabelle verarbeitet wird. C:\Moc\2316B\Labfiles\L06\Answers enthält vollständige Skripts für diese Übung.
! So führen Sie eine Abfrage aus, die eine abgeleitete Tabelle verwendet In diesem Verfahren werden Sie eine Abfrage schreiben und ausführen. Diese Abfrage verwendet eine abgeleitete Tabelle und gibt die juvenile.adult_member_no-Spalte und die Anzahl der jugendlichen Mitglieder aller erwachsenen Mitglieder mit mehr als drei zugeordneten jugendlichen Mitgliedern zurück. Answer_DerivedTab.sql ist ein vollständiges Skript für dieses Verfahren. 1. Melden Sie sich an der Schulungsraumdomäne nwtraders mit Hilfe der Informationen in der folgenden Tabelle an. Option
Eingabe
Benutzername
SQLAdminx (wobei x die Ihrem Computernamen zugewiesene Nummer ist, wie in der Schulungsraumdomäne nwtraders.msft festgelegt)
Kennwort
password
2. Öffnen Sie SQL Query Analyzer, und melden Sie sich bei Aufforderung mit Hilfe der Microsoft Windows®-Authentifizierung am (lokalen) Server an. Sie verfügen über die Berechtigung, sich bei SQL Server anzumelden und SQL Server zu verwalten, da Sie als SQLAdminx angemeldet sind und SQLAdminx ein Mitglied der lokalen Windows 2000-Gruppe Administratoren ist. Alle Mitglieder dieser Gruppe werden automatisch der SQL Server-Rolle sysadmin zugeordnet. 3. Klicken Sie in der Liste DB auf library. 4. Geben Sie die folgende Abfrage ein, die eine abgeleitete Tabelle verwendet. USE library SELECT d.adult_member_no, a.expr_date, d.No_Of_Children FROM adult AS a INNER JOIN ( SELECT adult_member_no, COUNT(*) AS No_Of_Children FROM juvenile GROUP BY adult_member_no HAVING COUNT(*) > 3 ) AS d ON a.member_no = d.adult_member_no GO
5. Führen Sie die Abfrage aus, um zu überprüfen, ob die gewünschten Ergebnisse zurückgegeben werden.
Unterrichtseinheit 6: Arbeiten mit Unterabfragen
Ergebnis
19
Das Ergebnis ähnelt dem folgenden Resultset. Die Anzahl der zurückgegebenen Zeilen kann variieren. adult_member_no 1 3 67
expr_date 2000-06-22 12:43:51.800 2000-06-24 12:43:51.800 2000-06-27 12:43:51.800
No_Of_Children 4 4 4
(248 row(s) affected)
Anmerkung Denken Sie später in dieser Übung beim Beantworten von Fragen daran, dass dies das Resultset der ursprünglichen abgeleiteten Tabellenabfrage ist.
! So schreiben Sie die abgeleitete Tabellenabfrage als zwei getrennte Abfragen
In diesem Verfahren werden Sie die vorherige Abfrage als zwei getrennte Abfragen neu schreiben und ausführen, um zu zeigen, wie die Abfrage verarbeitet wird, die eine abgeleitete Tabelle verwendet. 1. Geben Sie die folgende Abfrage ein, die die Daten der adult_member_noSpalte zurückgibt, die Anzahl der Kinder aller erwachsenen Mitglieder berechnet und nur die Zeilen zurückgibt, die erwachsene Mitglieder mit mehr als drei Kindern aus der juvenile-Tabelle enthalten. USE library SELECT adult_member_no, COUNT(*) AS No_Of_Children FROM juvenile GROUP BY adult_member_no HAVING COUNT(*) > 3 GO
2. Führen Sie die Abfrage aus, um zu überprüfen, ob die gewünschten Ergebnisse zurückgegeben werden. Ergebnis
Das Ergebnis ähnelt dem folgenden Resultset. Die Anzahl der zurückgegebenen Zeilen kann variieren. Adult_member_no 1 3 5
No_Of_Children 4 4 4
(248 row(s) affected)
3. Vergleichen Sie die Ergebnisse der Abfrage aus Schritt 1 dieses Verfahrens mit der ursprünglichen abgeleiteten Tabellenabfrage des vorherigen Verfahrens. Worin bestehen die Ähnlichkeiten zwischen den beiden Ergebnissen? Beide Abfragen geben 248 Zeilen im Resultset zurück. Beide Abfragen geben außerdem die „adult_member_no“- und „No_Of_Children“Spalten zurück. ____________________________________________________________ ____________________________________________________________
20
Unterrichtseinheit 6: Arbeiten mit Unterabfragen
4. Geben Sie die folgende Abfrage ein, die Daten der expr_date-Spalte aus der adult-Tabelle abruft. USE library SELECT a.expr_date FROM adult AS a GO
5. Führen Sie die Abfrage aus, um zu überprüfen, ob die gewünschten Ergebnisse zurückgegeben werden. Ergebnis
Das Ergebnis ähnelt dem folgenden Resultset. expr_date 2000-06-22 12:43:51.800 2000-06-24 12:43:51.800 2000-06-26 12:43:51.800 (5000 row(s) affected)
6. Vergleichen Sie die Ergebnisse der Abfrage aus Schritt 4 dieses Verfahrens mit der ursprünglichen abgeleiteten Tabellenabfrage. Worin bestehen die Ähnlichkeiten zwischen den beiden Ergebnissen? Beide Abfragen geben die „expr_date“-Spalte zurück. ____________________________________________________________ Worin bestehen die Unterschiede zwischen den beiden Ergebnissen? Die vorherige Abfrage gibt 5.000 Zeilen zurück, während die Abfrage, die die abgeleitete Tabelle verwendet, 248 Zeilen zurückgibt. ____________________________________________________________ ____________________________________________________________
! So schreiben Sie die abgeleitete Tabellenabfrage mit Hilfe einer Verknüpfung neu
In diesem Verfahren werden Sie die ursprüngliche abgeleitete Tabellenabfrage als eine Verknüpfung von zwei getrennten Abfragen neu schreiben und ausführen, um zu zeigen, dass Sie die gleichen Ergebnisse wie mit Hilfe einer abgeleiteten Tabelle erhalten. 1. Geben Sie die folgende Abfrage ein. USE library SELECT j.adult_member_no, a.expr_date ,COUNT(*) AS No_Of_Children FROM adult AS a INNER JOIN juvenile AS j ON a.member_no = j.adult_member_no GROUP BY adult_member_no, expr_date HAVING COUNT(*) > 3 GO
2. Führen Sie die Abfrage aus, um zu überprüfen, ob die gewünschten Ergebnisse zurückgegeben werden.
Unterrichtseinheit 6: Arbeiten mit Unterabfragen
Ergebnis
21
Das Ergebnis ähnelt dem folgenden Resultset. Die Anzahl der zurückgegebenen Zeilen kann variieren. adult_member_no 1 3 5
expr_date 2000-06-22 12:43:51.800 2000-06-24 12:43:51.800 2000-06-27 12:43:51.800
No_Of_Children 4 4 4
(248 row(s) affected)
3. Vergleichen Sie die Ergebnisse der Abfrage aus Schritt 1 dieses Verfahrens mit den Ergebnissen der ursprünglichen abgeleiteten Tabellenabfrage. Wird von beiden Abfragen das gleiche Ergebnis zurückgegeben? Ja. ____________________________________________________________ ____________________________________________________________
22
Unterrichtseinheit 6: Arbeiten mit Unterabfragen
Übung 2 Verwenden einer Unterabfrage als Ausdruck In dieser Übung werden Sie Abfragen schreiben, die Unterabfragen mit einem einzigen Wert oder mit mehreren Werten verwenden, um das Resultset der äußeren Abfrage zu beschränken und um mehrere Verarbeitungsschritte zu einer SELECT-Anweisung zusammenzufassen. C:\Moc\2316B\Labfiles\L06\Answers enthält vollständige Skripts für diese Übung.
! So verwenden Sie eine Unterabfrage mit einem einzigen Wert In diesem Verfahren werden Sie eine Abfrage schreiben und ausführen, die member.firstname, member.lastname, loanhist.isbn und loanhist.fine_paid für die Mitglieder zurückgibt, die die höchsten aufgezeichneten Mahngebühren für alle Bücher bezahlt haben. Answer_Highpay.sql ist ein vollständiges Skript für dieses Verfahren. 1. Schreiben Sie eine Abfrage, die den höchsten aufgezeichneten Wert in der loanhist.fine_paid-Spalte zurückgibt. USE library SELECT MAX(fine_paid) FROM loanhist GO
2. Führen Sie die Abfrage aus, um zu überprüfen, ob die gewünschten Ergebnisse zurückgegeben werden. Ergebnis
Das Ergebnis ähnelt dem folgenden Resultset. 8.0000 (1 row(s) affected) Warnung: NULL-Wert wird durch eine Aggregat- oder eine andere SET-Operation gelöscht.
! So verwenden Sie eine Unterabfrage mit einem einzigen Wert als Teil einer Suchbedingung
In diesem Verfahren werden Sie eine Unterabfrage mit einem einzigen Wert als Teil einer Suchbedingung verwenden. 1. Schreiben Sie eine Abfrage, die die member- und loanhist-Tabellen verknüpft und für jede Zeile firstname, lastname, isbn und fine_paid zurückgibt. 2. Verwenden Sie die Abfrage aus Schritt 1 des vorherigen Verfahrens als Auswahlkriterium in der WHERE-Klausel, um nur die Zeilen der Verknüpfung zurückzugeben, in denen die bezahlte Mahngebühr dem höchsten Wert entspricht, der für alle Bücher jemals aufgezeichnet wurde.
Unterrichtseinheit 6: Arbeiten mit Unterabfragen
23
3. Schließen Sie in die Abfrage das DISTINCT-Schlüsselwort ein, um Einträge für Mitglieder zu entfernen, die diese Mahngebühr mehrmals bezahlt haben. USE library SELECT DISTINCT firstname, lastname, isbn, fine_paid FROM member AS m INNER JOIN loanhist AS lh ON m.member_no = lh.member_no WHERE lh.fine_paid = (SELECT MAX(fine_paid) FROM loanhist) GO
4. Führen Sie die Abfrage aus, um zu überprüfen, ob die gewünschten Ergebnisse zurückgegeben werden. Ergebnis
Das Ergebnis ähnelt dem folgenden Resultset. Die Anzahl der zurückgegebenen Zeilen kann variieren. Firstname
lastname
isbn
fine_paid
Michael Robert
Nash Rothenberg
883 330
8.0000 8.0000
(2 row(s) affected) Warnung: NULL-Wert wird durch eine Aggregat- oder eine andere SET-Operation gelöscht.
! So verwenden Sie eine Abfrage zum Erstellen einer Liste von Werten In diesem Verfahren werden Sie eine Abfrage für die title-, loan- und reservation-Tabellen schreiben und ausführen, die vier Spalten zurückgibt: title_no, title, isbn und Total Reserved. Die Total Reserved-Spalte enthält die vorbestellte Anzahl von Büchern nach ISBN-Nummer, für die mehr als 50 Vorbestellungen und weniger als fünf Exemplare vorliegen. Gruppieren Sie die Ergebnisse nach title_no, title und isbn. Answer_SubqIn.sql ist ein vollständiges Skript für dieses Verfahren. 1. Schreiben Sie eine Abfrage, die die ISBN-Nummern der Bücher aus der reservation-Tabelle zurückgibt, für die über 50 Vorbestellungen vorliegen. USE library SELECT isbn FROM reservation GROUP BY isbn HAVING COUNT(*)> 50 GO
24
Unterrichtseinheit 6: Arbeiten mit Unterabfragen
2. Führen Sie die Abfrage aus, um zu überprüfen, ob die gewünschten Ergebnisse zurückgegeben werden. Ergebnis
Das Ergebnis ähnelt dem folgenden Teil eines Resultsets. Die Anzahl der zurückgegebenen Zeilen kann variieren. Isbn 1 43 246 288 330 . . . (11 row(s) affected)
! So verwenden Sie eine Unterabfrage mit mehreren Werten 1. Schreiben Sie eine äußere Abfrage, die die title_no-, title-, isbn- und Total Reserved-Spalten zurückgibt und bei der die Total Reserved-Spalte die Anzahl der Datensätze für jede Gruppe von title_no, title und isbn darstellt. Gehen Sie dazu folgendermaßen vor: a. Beschränken Sie die Zeilen, die die Gruppen der äußeren Abfrage bilden, indem Sie Bücher mit weniger als fünf Exemplaren angeben. b. Verwenden Sie das IN-Schlüsselwort als Teil der WHERE-Klausel für die Liste von Werten, die durch die Abfrage aus Schritt 1 des vorherigen Verfahrens generiert wurde. USE library SELECT t.title_no, title, l.isbn ,count(*) AS 'Total Reserved' FROM title AS t INNER JOIN loan AS l ON t.title_no = l.title_no INNER JOIN reservation AS r ON r.isbn = l.isbn WHERE r.isbn IN ( SELECT isbn FROM reservation GROUP BY isbn HAVING COUNT(*)> 50 ) AND l.copy_no < 5 GROUP BY t.title_no, title, l.isbn GO
Unterrichtseinheit 6: Arbeiten mit Unterabfragen
25
2. Führen Sie die Abfrage aus, um zu überprüfen, ob die gewünschten Ergebnisse zurückgegeben werden. Ergebnis
Das Ergebnis ähnelt dem folgenden Teil eines Resultsets. Die Anzahl der zurückgegebenen Zeilen kann variieren. title_no
title
1 Last of the Mohicans 25 The Black Tulip 33 The First 100,000 Prime Numbers . . . 8 row(s) affected)
isbn
Total Reserved
1 246 330
197 196 196
26
Unterrichtseinheit 6: Arbeiten mit Unterabfragen
Übung 3 Verwenden einer Unterabfrage zum Korrelieren von Daten In der Übung werden Sie Abfragen schreiben, die korrelierte Unterabfragen verwenden, um das Resultset der äußeren Abfrage zu beschränken und um mehrere Verarbeitungsschritte zu einer SELECT-Anweisung zusammenzufassen. C:\Moc\2316B\Labfiles\L06\Answers enthält vollständige Skripts für diese Übung.
! So verwenden Sie eine korrelierte Unterabfrage In diesem Verfahren werden Sie eine Abfrage erstellen, die mit Hilfe einer korrelierten Unterabfrage einen Wert basierend auf Daten der äußeren Abfrage berechnet und diesen Wert dann als Teil eines Vergleichs verwendet. Sie werden die member- und loanhist-Tabellen abfragen, um eine Liste der Bibliotheksmitglieder zurückzugeben, für die Mahngebühren von insgesamt über 5,00 $ verhängt wurden. Eine korrelierte Unterabfrage berechnet die Mahngebühren für jedes Mitglied. Answer_Fineof5.sql ist ein vollständiges Skript für dieses Verfahren. Anmerkung Alternativ können Sie diese Abfrage anstatt mit einer korrelierten Unterabfrage auch mit einer Verknüpfung und einer GROUP BY- oder einer HAVING-Klausel schreiben. Answer_Finejoin.sql ist ein vollständiges Skript für diese alternative Lösung.
1. Schreiben Sie eine Abfrage, die die member_no- und lastname-Spalten der member-Tabelle zurückgibt, indem Sie einen Tabellenalias für die member-Tabelle verwenden. USE library SELECT member_no, lastname FROM member AS m GO
2. Führen Sie die Abfrage aus, um zu überprüfen, ob die gewünschten Ergebnisse zurückgegeben werden. 3. Schreiben Sie eine Abfrage, die die für die einzelnen Mitglieder verzeichneten Mahngebühren aus den Aufzeichnungen in der loanhist-Tabelle berechnet. Gehen Sie dazu folgendermaßen vor: a. Verwenden Sie für die loanhist-Tabelle einen Alias. b. Korrelieren Sie die member.member_no-Spalte der äußeren Abfrage mit der loanhist.member_no-Spalte der inneren Abfrage in einer Unterabfrage.
Unterrichtseinheit 6: Arbeiten mit Unterabfragen
27
c. Verwenden Sie in der WHERE-Klausel der äußeren Abfrage einen Vergleichsoperator, um die Mitglieder mit Gesamtmahngebühren über 5 $ auszuwählen. USE library SELECT member_no, lastname FROM member AS m WHERE 5 < ( SELECT SUM(fine_assessed) FROM loanhist AS lh WHERE m.member_no = lh.member_no ) GO
4. Führen Sie die Abfrage aus, um zu überprüfen, ob die gewünschten Ergebnisse zurückgegeben werden. Ergebnis
Das Ergebnis ähnelt dem folgenden Teil eines Resultsets. Die Anzahl der zurückgegebenen Zeilen kann variieren. member_no
lastname
204 Graff 372 Miksovsky 1054 Miksovsky 1094 O'Brian . . . (41 row(s) affected) Warnung: NULL-Wert wird durch eine Aggregat- oder eine andere SET-Operation gelöscht.
28
Unterrichtseinheit 6: Arbeiten mit Unterabfragen
Lernzielkontrolle Inhalt dieser Folie
Vertiefen Sie die Lernziele dieser Unterrichtseinheit, indem Sie die Kernpunkte wiederholen.
Einstieg
Die Fragen zur Lernzielkontrolle beziehen sich auf einige der Schlüsselkonzepte, die Inhalt dieser Unterrichtseinheit sind.
!
Einführung in Unterabfragen
!
Verwenden einer Unterabfrage als abgeleitete Tabelle
!
Verwenden einer Unterabfrage als Ausdruck
!
Verwenden einer Unterabfrage zum Korrelieren von Daten
!
Verwenden der EXISTS- und NOT EXISTS-Klauseln
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Verwenden Sie dieses Szenario, um die Fragen zu beantworten und die Themen der Unterrichtseinheit zu besprechen.
Fragen Sie die Kursteilnehmer, ob sie Erläuterungen zu den Themen benötigen. Die Krankenversicherung Duluth Mutual Life verfügt über eine Datenbank, in der Informationen zu Ärzten und zu deren Patienten nachverfolgt werden. Diese Datenbank enthält die folgenden Tabellen. Ärztetabelle Spalte
Datentyp und Einschränkungen
doc_id
char(9), PRIMARY KEY
fname
char(20)
lname
char(25)
specialty
char(25)
phone
char(10)
Patiententabelle Spalte
Datentyp und Einschränkungen
pat_id
char(9), PRIMARY KEY
fname
char(20)
lname
char(25)
insurance_company
char(25)
phone
char(10)
Unterrichtseinheit 6: Arbeiten mit Unterabfragen
29
Notfalltabelle Spalte
Datentyp und Einschränkungen
admission_date
datetime, PRIMARY KEY (composite)
pat_id
char(9), PRIMARY KEY (composite), FOREIGN KEY to patient.pat_id
doc_id
char(9), FOREIGN KEY to doctor.doc_id
diagnosis
varchar(150)
Beantworten Sie auf der Grundlage der Tabellenstruktur die folgenden Fragen. 1. Wie können Sie mit einer einzigen Abfrage eine Liste aller Fälle erstellen, die zum ersten Datum in der chronologischen Reihenfolge in die Datenbank aufgenommen wurden? Verwenden Sie eine Unterabfrage mit einem einzigen Wert zusammen mit der MIN-Funktion, um das früheste Aufnahmedatum zu ermitteln. Vergleichen Sie das Ergebnis der Unterabfrage mit dem Aufnahmedatum für die einzelnen Fälle mit der WHERE-Klausel.
2. Sie möchten die Gesamtzahl der Krankenhauseinlieferungen sortiert nach dem Patientennamen ermitteln. Wie können Sie dabei vorgehen? Wo liegen die Vor- oder Nachteile der jeweiligen Methode? Sie könnten eine SELECT-Anweisung mit einer korrelierten Unterabfrage schreiben, die die Gesamtzahl der Einlieferungen pro Patient mit Hilfe der COUNT-Funktion berechnet. SELECT pat_id, pat_name ,(SELECT count(*) FROM casefile C WHERE C.pat_id = P.pat_id) FROM patient AS P
Sie können aber auch eine Verknüpfung mit der GROUP BY-Klausel und der COUNT-Funktion verwenden. Die Methode mit der Unterabfrage ist möglicherweise nicht so effizient wie die GROUP BYMethode, sie ist aber klarer im Hinblick auf die Programmlogik.
2
Unterrichtseinheit 6: Arbeiten mit Unterabfragen
This page is intentionally left blank.
Unterrichtseinheit 7: Ändern von Daten Inhalt Übersicht
1
Verwenden von Transaktionen
2
Einfügen von Daten
4
Löschen von Daten
15
Aktualisieren von Daten
20
Leistungsaspekte
25
Empfohlene Methoden
26
Übungseinheit A: Ändern von Daten
27
Lernzielkontrolle
41
Die in diesen Unterlagen enthaltenen Angaben und Daten, einschließlich URLs und anderer Verweise auf Internetwebsites, können ohne vorherige Ankündigung geändert werden. Die in den Beispielen genannten Firmen, Organisationen, Produkte, Domänennamen, E-Mail-Adressen, Logos, Personen, Orte und Ereignisse sind frei erfunden und jede Ähnlichkeit mit bestehenden Firmen, Organisationen, Produkten, Domänennamen, E-Mail-Adressen, Logos, Personen, Orten oder Ereignissen ist rein zufällig, soweit nichts anderes angegeben ist. Die Benutzer sind verantwortlich für das Einhalten aller anwendbaren Urheberrechtsgesetze. Unabhängig von der Anwendbarkeit der entsprechenden Urheberrechtsgesetze darf ohne ausdrückliche schriftliche Erlaubnis der Microsoft Corporation kein Teil dieses Dokuments für irgendwelche Zwecke vervielfältigt oder in einem Datenempfangssystem gespeichert oder darin eingelesen werden, unabhängig davon, auf welche Art und Weise oder mit welchen Mitteln (elektronisch, mechanisch, durch Fotokopieren, Aufzeichnen, usw.) dies geschieht. Microsoft Corporation kann Inhaber von Patenten oder Patentanträgen, Marken, Urheberrechten oder anderen gewerblichen Schutzrechten sein, die den Inhalt dieses Dokuments betreffen. Die Bereitstellung dieses Dokuments gewährt keinerlei Lizenzrechte an diesen Patenten, Marken, Urheberrechten oder anderen gewerblichen Schutzrechten, es sei denn, dies wurde ausdrücklich durch einen schriftlichen Lizenzvertrag mit der Microsoft Corporation vereinbart. 2001 Microsoft Corporation. Alle Rechte vorbehalten. Microsoft, BackOffice, MS-DOS, PowerPoint, Visual Studio, Windows, Windows Media und Windows NT sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Die in diesem Dokument aufgeführten Namen tatsächlicher Firmen und Produkte sind möglicherweise Marken der jeweiligen Eigentümer.
Unterrichtseinheit 7: Ändern von Daten
iii
Hinweise für den Kursleiter Präsentation: 45 Minuten Übungseinheit: 60 Minuten
In dieser Unterrichtseinheit wird die Funktionsweise von Transaktionen beschrieben und erläutert, wie INSERT-, DELETE- und UPDATE-Anweisungen geschrieben werden, um Daten in Tabellen zu ändern. Am Ende dieser Unterrichtseinheit werden die Kursteilnehmer in der Lage sein, die folgenden Aufgaben auszuführen: !
Beschreiben der Funktionsweise von Transaktionen.
!
Schreiben von INSERT-, DELETE- und UPDATE-Anweisungen, um Daten in Tabellen zu ändern.
!
Beschreiben von Leistungsaspekten, die mit dem Ändern von Daten zusammenhängen.
Unterlagen und Vorbereitung In diesem Abschnitt werden die erforderlichen Unterlagen und vorbereitenden Aufgaben erläutert, die nötig sind, um diese Unterrichtseinheit zu unterrichten.
Erforderliche Unterlagen Um diese Unterrichtseinheit zu unterrichten, benötigen Sie folgende Unterlagen: !
Die Microsoft® PowerPoint®-Datei 2316B_07.ppt
!
Die Beispieldatei C:\Moc\2316B\Demo\Ex_07.sql, die alle Beispielskripts der Unterrichtseinheit enthält, soweit in der Unterrichtseinheit nichts anderes angegeben ist.
Vorbereitende Aufgaben Zur Vorbereitung dieser Unterrichtseinheit gehen Sie folgendermaßen vor: !
Lesen Sie alle Unterlagen.
!
Arbeiten Sie die Übungseinheit durch.
iv
Unterrichtseinheit 7: Ändern von Daten
Strategie für die Unterrichtseinheit Verwenden Sie die folgende Strategie, um diese Unterrichtseinheit zu präsentieren: !
Verwenden von Transaktionen Beschreiben Sie, wie die Kursteilnehmer Transaktionen verwenden können, um Daten zu ändern.
!
Einfügen von Daten Erläutern Sie, dass Zeilen bei der Dateneingabe zeitsparend eingefügt werden können, wenn die DEFAULT- und DEFALULT VALUESSchlüsselwörter verwendet werden. Beschreiben Sie, wie Daten mit Hilfe der INSERT…SELECT-Anweisung geändert werden und wie auf anderen Tabellen basierende Zeilen mit Hilfe von Unterabfragen gelöscht und aktualisiert werden.
!
Löschen von Daten Erläutern Sie die Verwendung der DELETE- und TRUNCATE TABLEAnweisungen zum Entfernen von Zeilen.
!
Aktualisieren von Daten Erläutern Sie, wie Daten mit der UPDATE-Anweisung aktualisiert werden. Vergleichen Sie die Verwendung von Unterabfragen in der UPDATE-Anweisung mit der Verwendung einer Verknüpfung. Erläutern Sie den Kursteilnehmern, dass Unterschiede in der Abfrageleistung bestehen können.
!
Leistungsaspekte Erläutern Sie die Leistungsaspekte, die mit dem Ändern von Daten zusammenhängen.
Anpassungsinformationen Dieser Abschnitt beschreibt die Anforderungen zum Einrichten der Übungseinheiten für eine Unterrichtseinheit sowie die Konfigurationsänderungen, die während der Übungseinheiten an den Kursteilnehmercomputern vorgenommen werden. Diese Informationen sollen Ihnen beim Replizieren oder Anpassen der Microsoft Official Curriculum-Courseware (MOC) helfen. Wichtig Die Übungseinheit in dieser Unterrichtseinheit hängt von der Schulungsraumkonfiguration ab, die im Abschnitt „Anpassungsinformationen“ am Ende des Dokuments Handbuch für das Einrichten von Schulungscomputern für Kurs 2316B, Abfragen von Microsoft SQL Server 2000 mit Hilfe von Transact-SQL, angegeben ist.
Einrichten der Übungseinheit Es gibt keine Anforderungen zum Einrichten der Übungseinheit, die die Replikation oder die Anpassung betreffen.
Ergebnisse der Übungseinheit Auf den Kursteilnehmercomputern gibt es keine Konfigurationsänderungen, die die Replikation oder die Anpassung betreffen.
Unterrichtseinheit 7: Ändern von Daten
1
Übersicht Inhalt dieser Folie
Geben Sie eine Übersicht über die Themen und Lernziele dieser Unterrichtseinheit.
Einstieg
In dieser Unterrichtseinheit lernen Sie, wie Daten geändert werden.
!
Verwenden von Transaktionen
!
Einfügen von Daten
!
Löschen von Daten
!
Aktualisieren von Daten
!
Leistungsaspekte
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** In dieser Unterrichtseinheit wird die Funktionsweise von Transaktionen beschrieben und erläutert, wie INSERT-, DELETE- und UPDATEAnweisungen geschrieben werden, um Daten in Tabellen zu ändern. Am Ende dieser Unterrichtseinheit werden Sie in der Lage sein, die folgenden Aufgaben auszuführen: !
Beschreiben der Funktionsweise von Transaktionen.
!
Schreiben von INSERT-, DELETE- und UPDATE-Anweisungen, um Daten in Tabellen zu ändern.
!
Beschreiben von Leistungsaspekten, die mit dem Ändern von Daten zusammenhängen.
2
Unterrichtseinheit 7: Ändern von Daten
Verwenden von Transaktionen Inhalt dieser Folie
Geben Sie eine Einführung in die Themen dieses Abschnitts.
!
Einstieg
Transaktionen werden verwendet, um Datenintegrität zu erzwingen.
Starten von Transaktionen
!
Beenden von Transaktionen
"
Explizit
"
COMMIT-Anweisung
"
Autocommit
"
ROLLBACK-Anweisung
"
Implizit BEGIN BEGIN TRANSACTION TRANSACTION UPDATE UPDATE savings savings .. .. .. UPDATE UPDATE checking checking .. .. .. COMMIT COMMIT TRANSACTION TRANSACTION
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Eine Transaktion ist eine Folge von Operationen, die als einzelne logische Arbeitseinheit ausgeführt wird. SQL-Programmierer sind dafür verantwortlich, Transaktionen an Punkten zu starten und zu beenden, die die logische Konsistenz der Daten erzwingen. Der Programmierer muss die Sequenz der Datenänderungen so definieren, dass die Daten hinsichtlich der Geschäftsregeln der Organisation in konsistentem Zustand bleiben.
Starten von Transaktionen Sie können Transaktionen in Microsoft® SQL Server™ 2000 in einem von drei Modi starten - Explizit, Autocommit oder Implizit. !
Explizite Transaktionen werden durch Eingeben einer BEGIN TRANSACTION-Anweisung gestartet.
!
Autocommit-Transaktionen sind der Standardmodus für SQL Server. Für jede einzelne Transact-SQL-Anweisung wird nach Beendigung ein Commit ausgeführt. Es ist nicht notwendig, dass Sie Anweisungen zum Steuern von Transaktionen angeben.
!
Der implizite Transaktionsmodus wird durch eine API-Funktion (Application Programming Interface, Schnittstelle für Anwendungsprogrammierung) oder durch die SET IMPLICIT_TRANSACTIONS ONAnweisung von Transact-SQL festgelegt. In diesem Modus startet die nächste Anweisung automatisch eine neue Transaktion. Wenn diese Transaktion abgeschlossen ist, startet die nächste Transact-SQL-Anweisung eine neue Transaktion.
Der Transaktionsmodus wird auf Sitzungsebene verwaltet. Wenn eine Sitzung von einem Transaktionsmodus zum anderen wechselt, hat dies keine Auswirkung auf den Transaktionsmodus anderer Sitzungen.
Unterrichtseinheit 7: Ändern von Daten
3
Beenden von Transaktionen Sie können Transaktionen entweder über eine COMMIT- oder über eine ROLLBACK-Anweisung beenden. Die COMMIT-Anweisung zeigt an, dass SQL Server einen Commit ausführen soll, wenn eine Transaktion erfolgreich ist. Durch eine COMMIT-Anweisung wird garantiert, dass alle Änderungen der Transaktion zum dauerhaften Bestandteil der Datenbank werden. Durch eine COMMIT-Anweisung werden auch Ressourcen, wie etwa Sperren, freigegeben, die von der Transaktion verwendet werden. Die ROLLBACK-Anweisung bricht eine Transaktion ab. Sie macht alle Änderungen rückgängig, die während der Transaktion vorgenommen wurden, sodass die Daten in ihren Ausgangszustand beim Transaktionsstart zurückversetzt werden. Durch eine ROLLBACK-Anweisung werden auch von der Transaktion beanspruchte Ressourcen freigegeben. Wenn ein fataler Fehler, wie z. B. ein Deadlock, in einer Transaktion auftritt, führt SQL Server automatisch einen Rollback für die Transaktion aus. Mittelschwere Fehler, wie z. B. die Verletzung einer CHECK-Einschränkung für UPDATE, führen nicht zu einem automatischen Rollback. Bei mittelschweren Fehlern muss der Entwickler @@error nach allen Anweisungen überprüfen, ein Rollback explizit starten und zum Ende derTransaktion springen. Beispiel
In diesem Beispiel werden 100 $ von einem Sparkonto eines Kunden auf sein Girokonto mit Hilfe einer Transaktion überwiesen. Die Transaktion macht alle Datenänderungen rückgängig, falls während der Ausführung der Transaktion ein Fehler auftritt. BEGIN TRANSACTION UPDATE savings SET balance = balance - 100 WHERE custid = 78910 IF @@ERROR 0 BEGIN RAISERROR ('Fehler, Transaktion nicht beendet!', 16, -1) ROLLBACK TRANSACTION END UPDATE checking SET balance = balance +100 WHERE custid = 78910 IF @@ERROR 0 BEGIN RAISERROR ('Fehler, Transaktion nicht beendet!', 16, -1) ROLLBACK TRANSACTION END COMMIT TRANSACTION
Anmerkung Dieses Beispiel dient nur der Erläuterung und führt zu keinen Ergebnissen.
4
Unterrichtseinheit 7: Ändern von Daten
# Einfügen von Daten Inhalt dieser Folie
Geben Sie eine Einführung in die Themen dieses Abschnitts.
!
Einfügen einer Datenzeile durch Angabe der Werte
Einstieg
!
Verwenden der INSERT…SELECT-Anweisung
!
Erstellen einer Tabelle mit Hilfe der SELECT INTOAnweisung
!
Einfügen von Teildaten
!
Einfügen von Daten mit Hilfe von Spaltenstandardwerten
Daten können mit Hilfe einer Transaktion eingefügt werden, indem Sie eine Wertemenge angeben oder die Ergebnisse einer SELECT-Anweisung einfügen.
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Daten können mit Hilfe einer Transaktion eingefügt werden, indem Sie eine Wertemenge angeben oder die Ergebnisse einer SELECT-Anweisung einfügen. Sie können eine Tabelle erstellen und gleichzeitig Daten einfügen. Es ist nicht notwendig, dass Sie Werte in alle Datenfelder einer Zeile einfügen.
Unterrichtseinheit 7: Ändern von Daten
5
Einfügen einer Datenzeile durch Angabe der Werte Inhalt dieser Folie
Zeigen Sie, wie eine Zeile mit Werten zu einer Tabelle mit Hilfe der INSERT-Anweisung hinzugefügt werden kann.
!
Die Zieleinschränkungen müssen eingehalten werden, sonst schlägt die INSERT-Transaktion fehl
!
Verwenden der Spaltenliste zum Angeben von Zielspalten
Einstieg
!
Angeben einer übereinstimmenden Werteliste
Die INSERT-Anweisung fügt Zeilen zu Tabellen hinzu.
USE USE Northwind Northwind INSERT INSERT customers customers (customerid, (customerid, companyname, companyname, contactname, contactname, contacttitle contacttitle ,address, ,address, city, city, region, region, postalcode, postalcode, country, country, phone phone ,fax) ,fax) VALUES VALUES ('PECOF', ('PECOF', 'Pecos 'Pecos Coffee Coffee Company', Company', 'Michael 'Michael Dunn' Dunn' ,'Owner', ,'Owner', '1900 '1900 Oak Oak Street', Street', 'Vancouver', 'Vancouver', 'BC' 'BC' ,'V3F ,'V3F 2K1', 2K1', 'Canada', 'Canada', '(604) '(604) 555-3392' 555-3392' ,'(604) ,'(604) 555-7293') 555-7293') GO GO
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Die INSERT-Anweisung fügt Zeilen zu einer Tabelle hinzu. Teilsyntax
Methodischer Hinweis
Betonen Sie anhand des Beispiels auf der Folie, dass alle Werte in der customers-Tabelle Zeichenwerte sind und daher in einfache Anführungszeichen eingeschlossen sind.
INSERT [INTO] { table_name | view_name} { [(column_list)] { VALUES ( { DEFAULT | NULL| expression}[,…n]) | DEFAULT VALUES Verwenden Sie die INSERT-Anweisung mit der VALUES-Klausel, um Zeilen zu einer Tabelle hinzuzufügen. Berücksichtigen Sie beim Einfügen von Zeilen die folgenden Aspekte und Richtlinien: !
Die Zieleinschränkungen müssen eingehalten werden, sonst schlägt die INSERT-Transaktion fehl.
!
Verwenden Sie die Spaltenliste (column_list) zum Angeben von Spalten, in denen die eingehenden Werte gespeichert werden. Sie müssen die column_list in Klammern einschließen und Kommas als Trennzeichen verwenden. Wenn Sie Werte für alle Spalten angeben, ist die Verwendung der column_list optional.
!
Geben Sie die einzufügenden Daten mit Hilfe der VALUES-Klausel an. Die VALUES-Klausel ist für jede Spalte in der Tabelle oder der column_list erforderlich. Die Spaltenreihenfolge und der Datentyp der neuen Daten müssen mit der Spaltenreihenfolge und dem Datentyp in der Tabelle übereinstimmen. Viele Datentypen haben ein bestimmtes Eingabeformat. Beispielsweise müssen Zeichendaten und Datumsangaben in einfache Anführungszeichen eingeschlossen werden.
6
Unterrichtseinheit 7: Ändern von Daten
Beispiel
Im folgenden Beispiel wird Pecos Coffee Company als neuer Kunde hinzugefügt. USE Northwind INSERT customers (customerid, companyname, contactname, contacttitle ,address, city, region, postalcode, country, phone ,fax) VALUES ('PECOF', 'Pecos Coffee Company','Michael Dunn' ,'Owner', '1900 Oak Street', 'Vancouver', 'BC' ,'V3F 2K1', 'Canada', '(604) 555-3392' ,'(604) 555-7293') GO
Sie können überprüfen, ob Pecos Coffee Company zur customers-Tabelle hinzugefügt wurde, indem Sie die folgende Anweisung ausführen. USE Northwind SELECT companyname, contactname FROM customers WHERE customerid = 'PECOF' GO
Ergebnis
companyname
contactname
Pecos Coffee Company
Michael Dunn
(1 row(s) affected)
Unterrichtseinheit 7: Ändern von Daten
7
Verwenden der INSERT…SELECT-Anweisung Inhalt dieser Folie
Zeigen Sie, wie Zeilen mit Hilfe geschachtelter SELECT-Anweisungen aus einer Tabelle in eine andere Tabelle eingefügt werden.
Einstieg
Es ist möglich, mit Hilfe geschachtelter SELECTAnweisungen Zeilen aus einer Tabelle in dieselbe oder eine andere Tabelle einzufügen.
!
Alle Zeilen, die die SELECT-Anweisung erfüllen, werden eingefügt
!
Überprüfen, ob die Tabelle, in der die neuen Zeilen eingefügt werden, vorhanden ist
!
Sicherstellen, dass die Datentypen kompatibel sind
!
Ermitteln, ob Standardwerte vorhanden oder NULL-Werte zulässig sind
USE USE Northwind Northwind INSERT INSERT customers customers SELECT SELECT substring substring (firstname, (firstname, 1, 1, 3) 3) ++ substring substring (lastname, (lastname, 1, 1, 2) 2) ,lastname, ,lastname, firstname, firstname, title, title, address, address, city city ,region, ,region, postalcode, postalcode, country, country, homephone, homephone, NULL NULL FROM FROM employees employees GO GO
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Die INSERT…SELECT-Anweisung fügt einer Tabelle Zeilen hinzu, indem das Resultset einer SELECT-Anweisung eingefügt wird. Verwenden Sie die INSERT…SELECT-Anweisung, um einer vorhandenen Tabelle aus anderen Quellen Zeilen hinzuzufügen. Das Verwenden der INSERT…SELECT-Anweisung ist effizienter als das Schreiben mehrerer einzeiliger INSERT-Anweisungen. Berücksichtigen Sie beim Verwenden der INSERT…SELECT-Anweisung die folgenden Aspekte und Richtlinien: !
Alle Zeilen, die die SELECT-Anweisung erfüllen, werden in die äußerste Tabelle der Abfrage eingefügt.
!
Sie müssen überprüfen, ob die Tabelle, in der die neuen Zeilen eingefügt werden, in der Datenbank vorhanden ist.
!
Sie müssen sicherstellen, dass die Spalten der Tabelle, in der die neuen Werte eingefügt werden, Datentypen aufweisen, die mit den Spalten der Tabellenquelle kompatibel sind.
!
Sie müssen ermitteln, ob ein Standardwert vorhanden ist oder ob für Spalten, die ausgelassen werden, NULL-Werte zulässig sind. Wenn NULLWerte nicht zulässig sind, müssen Sie Werte für diese Spalte angeben.
Syntax
INSERT table_name SELECT column_list FROM table_list WHERE search_conditions
Beispiel
In diesem Beispiel werden der customers-Tabelle neue Kunden hinzugefügt. Die Angestellten von Northwind Traders dürfen Firmenprodukte kaufen. Diese Abfrage enthält eine INSERT-Anweisung mit einer SELECT-Klausel, die der customers-Tabelle Informationen zu den Angestellten hinzufügt.
8
Unterrichtseinheit 7: Ändern von Daten
Die neue customerid-Spalte besteht aus den drei ersten Buchstaben des Vornamens des Angestellten, die mit den beiden ersten Buchstaben des Nachnamens verknüpft werden. Der Nachname des Angestellten wird als neuer Firmenname und der Vorname als Name der Kontaktperson verwendet. USE Northwind INSERT customers SELECT substring (firstname, 1, 3) + substring (lastname, 1, 2) ,lastname, firstname, title, address, city ,region, postalcode, country, homephone, NULL FROM employees GO
Unterrichtseinheit 7: Ändern von Daten
9
Erstellen einer Tabelle mit Hilfe der SELECT INTO-Anweisung Inhalt dieser Folie
Erklären Sie den Zweck und die Funktion der SELECT INTO-Anweisung.
!
Erstellen von Tabellen und Einfügen von Zeilen in eine Tabelle in einer einzigen Operation
!
Erstellen einer lokalen temporären Tabelle oder einer globalen temporären Tabelle
!
Erstellen von Spaltenaliasnamen oder Angeben von Spaltennamen für die neue Tabelle in der Auswahlliste
Einstieg
Mit Hilfe der SELECT INTOAnweisung kann das Resultset jeder Abfrage in einer neuen Tabelle dargestellt werden.
USE USE Northwind Northwind SELECT SELECT productname productname AS AS products products ,unitprice ,unitprice AS AS price price ,(unitprice ,(unitprice ** 1.1) 1.1) AS AS tax tax INTO INTO #PriceTable #PriceTable FROM FROM Products Products GO GO
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Mit Hilfe der SELECT INTO-Anweisung kann das Resultset jeder Abfrage in einer neuen Tabelle dargestellt werden. Verwenden Sie die SELECT INTO-Anweisung, um neue Tabellen einer Datenbank mit importierten Daten aufzufüllen. Die SELECT INTO-Anweisung bietet Ihnen außerdem die Möglichkeit, komplexe Vorgänge zu untergliedern, die ein Dataset aus verschiedenen Quellen erfordern. Wenn Sie zunächst eine temporäre Tabelle erstellen, sind die in dieser Tabelle ausgeführten Abfragen weniger kompliziert als die in mehreren Tabellen oder Datenbanken ausgeführten Abfragen. Berücksichtigen Sie beim Verwenden der SELECT INTO-Anweisung die folgenden Aspekte und Richtlinien: !
Mit der SELECT INTO-Anweisung können Sie in einer einzigen Operation eine Tabelle erstellen und Zeilen in die Tabelle einfügen. Stellen Sie sicher, dass der in der SELECT INTO-Anweisung angegebene Tabellenname eindeutig ist. Wenn eine weitere Tabelle mit demselben Namen vorhanden ist, schlägt die SELECT INTO-Anweisung fehl.
!
Sie können eine lokale temporäre Tabelle oder eine globale temporäre Tabelle erstellen. Erstellen Sie eine lokale temporäre Tabelle, indem Sie dem Tabellennamen ein Nummernzeichen (#) voranstellen. Beim Erstellen einer globalen temporären Tabelle geben Sie vor dem Tabellennamen zwei Nummernzeichen (##) ein. Eine lokale temporäre Tabelle ist nur in der aktuellen Sitzung sichtbar. Eine globale temporäre Tabelle ist in allen Sitzungen sichtbar. • Wenn Benutzer die Sitzung beenden, wird der Platz für eine lokale temporäre Tabelle wieder freigegeben.
10
Unterrichtseinheit 7: Ändern von Daten
• Der Platz für eine globale temporäre Tabelle wird erst dann wieder freigegeben, wenn die Sitzung beendet wird, durch die die Tabelle erstellt wurde, und wenn die letzte Transact-SQL-Anweisung abgeschlossen wird, die zu dem Zeitpunkt auf die Tabelle verwiesen hat. !
Das Erstellen von Spaltenaliasnamen oder das Angeben von Spaltennamen für die neue Tabelle muss in der Auswahlliste erfolgen.
Teilsyntax
SELECT select_list INTO new_table FROM {table_source}[,…n] WHERE search_condition
Beispiel
In diesem Beispiel wird eine lokale temporäre Tabelle auf der Basis einer Abfrage erstellt, die für die products-Tabelle ausgeführt wurde. Beachten Sie, dass mit Hilfe von Zeichenfolgefunktionen oder mathematischen Funktionen Änderungen am Resultset vorgenommen werden können.
Methodischer Hinweis
Führen Sie dieses Beispiel mit Hilfe von SQL Query Analyzer vor.
USE Northwind SELECT productname AS products ,unitprice AS price ,(unitprice * 1.1) AS tax INTO #PriceTable FROM Products GO
Um das Resultset anzuzeigen, muss die folgende Abfrage ausgeführt werden. USE Northwind SELECT * FROM #PriceTable GO
Ergebnis
products
price
tax
Chai Chang Aniseed Syrup Chef Anton's Cajun Seasoning Chef Anton's Gumbo Mix Grandma's Boysenberry Spread Uncle Bob's Organic Dried Pears Northwoods Cranberry Sauce Mishi Kobe Niku Ikura Queso Cabrales Queso Manchego La Pastora Konbu Tofu Genen Shouyu . . . (77 row(s) affected)
18 19 10 22 21.35 27.5 33 44 97 31 21 38 6 23.25 15.5
19.8 20.9 11 24.2 23.485 30.25 36.3 48.4 106.7 34.1 23.1 41.8 6.6 25.575 17.05
Unterrichtseinheit 7: Ändern von Daten
11
Einfügen von Teildaten Inhalt dieser Folie
Hinzufügen neuer Daten
Erläutern Sie, wie eine Zeile eingefügt wird, ohne sämtliche Datenelemente anzugeben.
USE USE Northwind Northwind INSERT INSERT shippers shippers (companyname) (companyname) VALUES VALUES ('Fitch ('Fitch && Mather') Mather') GO GO
Einstieg
Beispiel Beispiel 11
Überprüfen neuer Daten
Wenn eine Spalte über einen Standardwert verfügt oder NULL-Werte zulässt, kann die Spalte in der INSERT-Anweisung weggelassen werden. SQL Server fügt die Werte automatisch ein.
USE USE Northwind Northwind SELECT SELECT ** FROM FROM shippers shippers WHERE WHERE companyname companyname == 'Fitch 'Fitch && Mather‘ Mather‘ GO GO
Beispiel Beispiel 22
Zulassen von NULL-Werten shipperid shipperid 37 37
companyname companyname Fitch Fitch&&Mather Mather
phone phone NULL NULL
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Methodischer Hinweis
Vergleichen Sie Beispiel 1 mit Beispiel 2. Das DEFAULT-Schlüsselwort wird in Beispiel 1 nicht verwendet. Beide Beispiele geben dasselbe Ergebnis zurück.
Wenn eine Spalte über einen Standardwert verfügt oder NULL-Werte zulässt, kann die Spalte in der INSERT-Anweisung weggelassen werden. SQL Server fügt die Werte automatisch ein. Berücksichtigen Sie beim Einfügen von Teildaten die folgenden Aspekte und Richtlinien: !
Listen Sie nur die Spaltennamen für diejenigen Daten auf, die Sie in der INSERT-Anweisung angeben.
!
Geben Sie die Spalten, für die Sie einen Wert bereitstellen, in der column_list an. Die Daten in der VALUES-Klausel entsprechen den angegebenen Spalten. Unbenannte Spalten werden so ausgefüllt, als ob sie benannt worden wären und ein Standardwert angegeben worden wäre.
!
Geben Sie keine Spalten in der column_list an, die über die IDENTITYEigenschaft verfügen oder Standard- oder NULL-Werte zulassen.
!
Geben Sie einen NULL-Wert explizit ein, indem Sie 0 ohne einfache Anführungszeichen eingeben.
12
Unterrichtseinheit 7: Ändern von Daten
Beispiel 1
In diesem Beispiel wird das Unternehmen Fitch & Mather als neuer Spediteur zur shippers-Tabelle hinzugefügt. Für Spalten, die über eine IDENTITYEigenschaft verfügen oder Standard- oder NULL-Werte zulassen, werden keine Daten eingegeben. Vergleichen Sie dieses Beispiel mit Beispiel 2. Beachten Sie, dass das DEFAULT-Schlüsselwort weggelassen wird. USE Northwind INSERT shippers (companyname) VALUES ('Fitch & Mather') GO
Sie können überprüfen, ob Fitch & Mather zur shippers-Tabelle hinzugefügt wurde, indem Sie die folgende Anweisung ausführen. USE Northwind SELECT * FROM shippers WHERE companyname = 'Fitch & Mather' GO
Ergebnis
shipperid
CompanyName
phone
37
Fitch & Mather
NULL
(1 row(s) affected)
Beispiel 2
Auch in diesem Beispiel wird das Unternehmen Fitch & Mather als neuer Spediteur zur shippers-Tabelle hinzugefügt. Beachten Sie, dass das DEFAULT-Schlüsselwort für Spalten verwendet wird, die Standard- oder NULL-Werte zulassen. Vergleichen Sie dieses Beispiel mit Beispiel 1. USE Northwind INSERT shippers (companyname) VALUES ('Fitch & Mather') GO
Ergebnis
shipperid
companyname
phone
37
Fitch & Mather
NULL
(1 row(s) affected)
Unterrichtseinheit 7: Ändern von Daten
13
Einfügen von Daten mit Hilfe von Spaltenstandardwerten Inhalt dieser Folie
!
Erläutern Sie die Schlüsselwörter DEFAULT und DEFAULT VALUES.
DEFAULT-Schlüsselwort " "
Einstieg
Verwenden Sie eine INSERT-Anweisung mit dem DEFAULT-Schlüsselwort, um den Standardwert für bestimmte Spalten einzufügen, oder verwenden Sie das DEFAULT VALUES-Schlüsselwort, um eine ganze Zeile in eine Tabelle einzufügen.
Fügt Standardwerte für spezielle Zeilen ein Spalten müssen über einen Standardwert verfügen oder NULL-Werte zulassen
USE USE Northwind Northwind INSERT INSERT shippers shippers VALUES VALUES ('Kenya ('Kenya GO GO !
(companyname, (companyname, phone) phone) Coffee Coffee Co.', Co.', DEFAULT) DEFAULT)
DEFAULT VALUES-Schlüsselwort " "
Fügt Standardwerte für alle Zeilen ein Spalten müssen über einen Standardwert verfügen oder NULL-Werte zulassen
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Wenn Sie Zeilen in eine Tabelle einfügen, können Sie bei der Eingabe Zeit sparen, indem Sie die Schlüsselwörter DEFAULT oder DEFAULT VALUES in der INSERT-Anweisung angeben.
DEFAULT-Schlüsselwort Methodischer Hinweis
Lenken Sie die Aufmerksamkeit auf die Teilsyntax, und vergleichen Sie die Schlüsselwörter DEFAULT und DEFAULT VALUES in der Syntax miteinander.
Wenn eine Tabelle über DEFAULT-Einschränkungen verfügt oder wenn eine Tabelle über einen Standardwert verfügt, verwenden Sie das DEFAULTSchlüsselwort in der INSERT-Anweisung, damit SQL Server den Standardwert für Sie liefert. Berücksichtigen Sie beim Verwenden des DEFAULT-Schlüsselwortes die folgenden Aspekte und Richtlinien: !
SQL Server fügt einen NULL-Wert für Spalten ein, die NULL-Werte zulassen und nicht über Standardwerte verfügen.
!
Wenn Sie das DEFAULT-Schlüsselwort verwenden und die Spalten nicht über Standardwerte verfügen oder NULL-Werte nicht zulassen, schlägt die INSERT-Anweisung fehl.
!
Das DEFAULT-Schlüsselwort kann nicht für eine Spalte verwendet werden, die über die IDENTITY-Eigenschaft (ein automatisch zugewiesener und sich erhöhender Schrittweitenwert) verfügt. Geben Sie daher keine Spalten mit der IDENTITY-Eigenschaft in der column_list oder VALUES-Klausel an.
!
SQL Server fügt den nächsten verfügbaren Wert in Spalten ein, die mit dem Datentyp rowversion definiert wurden.
14
Beispiel
Unterrichtseinheit 7: Ändern von Daten
In diesem Beispiel wird eine neue Zeile für die Kenya Coffee Company ohne Verwendung einer column_list eingefügt. Die shippers.shipperid-Spalte verfügt über eine IDENTITY-Eigenschaft und ist daher nicht in der Spaltenliste eingeschlossen. Die phone-Spalte lässt NULL-Werte zu. USE Northwind INSERT shippers (companyname, phone) VALUES ('Kenya Coffee Co.', DEFAULT) GO
Sie können überprüfen, ob Kenya Coffee Company zur shippers-Tabelle hinzugefügt wurde, indem Sie die folgende Anweisung ausführen. USE Northwind SELECT * FROM shippers VALUES ('Kenya Coffee Co.', DEFAULT) GO
Ergebnis
shipperid
CompanyName
Phone
10
Kenya Coffee Co.
NULL
(1 row(s) affected)
DEFAULT VALUES-Schlüsselwort Verwenden Sie das DEFAULT VALUES-Schlüsselwort, um eine ganze Zeile in eine Tabelle einzufügen. Berücksichtigen Sie beim Verwenden des DEFAULT VALUES-Schlüsselwortes die folgenden Aspekte und Richtlinien: !
SQL Server fügt einen NULL-Wert für Spalten ein, die NULL-Werte zulassen und über nicht über einen Standardwert verfügen.
!
Wenn Sie das DEFAULT VALUES-Schlüsselwort verwenden und die Spalten nicht über Standardwerte verfügen oder NULL-Werte nicht zulassen, schlägt die INSERT-Anweisung fehl.
!
SQL Server fügt den nächsten verfügbaren Wert in Spalten ein, für die eine IDENTITY-Eigenschaft oder ein Datentyp rowversion definiert wurde.
!
Verwenden Sie das DEFAULT VALUES-Schlüsselwort, um Beispieldaten zu erzeugen und Tabellen mit Standardwerten aufzufüllen.
Unterrichtseinheit 7: Ändern von Daten
15
# Löschen von Daten Inhalt dieser Folie
Geben Sie eine Einführung in die Themen dieses Abschnitts.
!
Verwenden der DELETE-Anweisung
Einstieg
!
Verwenden der TRUNCATE TABLE-Anweisung
!
Löschen von Zeilen anhand anderer Tabellen
Sie können angeben, welche Daten gelöscht werden sollen.
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Sie können angeben, welche Daten gelöscht werden sollen. Die DELETE-Anweisung entfernt eine oder mehrere Zeilen aus einer Tabelle oder Sicht mit Hilfe einer Transaktion. Sie können angeben, welche Zeilen SQL Server löscht, indem Sie die Zieltabelle filtern, eine JOIN-Klausel oder eine Unterabfrage verwenden. Mit der TRUNCATE TABLE-Anweisung werden alle Zeilen aus einer Tabelle entfernt, ohne eine Transaktion zu verwenden.
16
Unterrichtseinheit 7: Ändern von Daten
Verwenden der DELETE-Anweisung Inhalt dieser Folie
Erläutern Sie, wie Zeilen in Tabellen gelöscht werden.
Einstieg
!
Die DELETE-Anweisung entfernt eine oder mehrere Zeilen aus Tabellen, sofern die WHERE-Klausel nicht verwendet wird
!
Jede gelöschte Zeile wird im Transaktionsprotokoll protokolliert
Die DELETE-Anweisung entfernt Zeilen aus Tabellen.
USE USE Northwind Northwind DELETE DELETE orders orders WHERE WHERE DATEDIFF(MONTH, DATEDIFF(MONTH, shippeddate, shippeddate, GETDATE()) GETDATE()) >= >= 66 GO GO
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Die DELETE-Anweisung entfernt Zeilen aus Tabellen. Verwenden Sie die DELETE-Anweisung, um eine oder mehrere Zeilen aus einer Tabelle zu entfernen. Teilsyntax
DELETE [from] {table_name|view_name} WHERE search_conditions
Beispiel
In diesem Beispiel werden alle Datensätze zu Bestellungen gelöscht, die mindestens sechs Monate alt sind. USE Northwind DELETE orders WHERE DATEDIFF(MONTH, shippeddate, GETDATE()) >= 6 GO
Anmerkung Dies wird nicht für die Northwind-Datenbank ausgeführt, wenn die Bedingung gilt, da dadurch die Fremdschlüsseleinschränkung zwischen Orders und Order Details verletzt wird. Unter normalen Umständen ist es nicht möglich, Zeilen aus einer Tabelle zu löschen oder eine TRUNCATE TABLE-Anweisung für eine Tabelle mit Fremdschlüsseleinschränkung auszuführen.
Berücksichtigen Sie beim Verwenden der DELETE-Anweisung die folgenden Aspekte: !
Mit der DELETE-Anweisung werden entsprechend der Bedingung in der WHERE-Klausel eine oder mehrere Zeilen in einer Tabelle gelöscht, falls eine solche Bedingung angegeben wurde. Anderenfalls werden durch die DELETE-Anweisung alle Zeilen entfernt.
!
Jede gelöschte Zeile wird im Transaktionsprotokoll protokolliert.
Unterrichtseinheit 7: Ändern von Daten
17
Verwenden der TRUNCATE TABLE-Anweisung Inhalt dieser Folie
Beschreiben Sie, wie die TRUNCATE TABLE-Anweisung verwendet wird.
!
Die TRUNCATE TABLE-Anweisung entfernt alle Zeilen aus einer Tabelle
!
SQL Server behält die Tabellenstruktur und die zugeordneten Objekte bei
!
Nur die Freigabe von Datenseiten wird im Transaktionsprotokoll protokolliert
Einstieg
Die TRUNCATE TABLEAnweisung entfernt alle Daten aus einer Tabelle.
USE USE Northwind Northwind TRUNCATE TRUNCATE TABLE TABLE orders orders GO GO
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Die TRUNCATE TABLE-Anweisung entfernt alle Daten aus einer Tabelle. Verwenden Sie die TRUNCATE TABLE-Anweisung, um ein nicht protokolliertes Löschen aller Zeilen durchzuführen. Syntax
TRUNCATE TABLE [[database.]owner.]table_name
Beispiel
In diesem Beispiel werden alle Daten aus der orders-Tabelle entfernt. USE Northwind TRUNCATE TABLE orders GO
Weitere Informationen
Die TRUNCATE TABLEAnweisung kann nicht auf eine Tabelle angewendet werden, auf die mit einer FOREIGN KEY-Einschränkung verwiesen wird. Verwenden Sie stattdessen die DELETE-Anweisung ohne eine WHERE-Klausel.
Anmerkung Aufgrund einer Fremdschlüsseleinschränkung zwischen Orders und Order Details dient dieses Beispiel nur der Erläuterung und führt zu einem Fehler.
Berücksichtigen Sie beim Verwenden der TRUNCATE TABLE-Anweisung die folgenden Aspekte: !
SQL Server löscht alle Zeilen, behält aber die Tabellenstruktur und die zugeordneten Objekte bei.
!
Die TRUNCATE TABLE-Anweisung wird schneller ausgeführt als die DELETE-Anweisung, da SQL Server nur die Freigabe von Datenseiten protokolliert.
!
Wenn eine Tabelle über eine IDENTITY-Spalte verfügt, setzt die TRUNCATE TABLE-Anweisung den Ausgangswert zurück.
18
Unterrichtseinheit 7: Ändern von Daten
Löschen von Zeilen anhand anderer Tabellen Inhalt dieser Folie
Veranschaulichen Sie, wie Daten in einer Tabelle anhand von Daten in anderen Tabellen gelöscht werden.
!
Verwenden einer zusätzlichen FROM-Klausel "
Einstieg
Verwenden Sie die DELETE-Anweisung mit einer zusätzlichen FROMKlausel (oder einer Unterabfrage in der WHEREKlausel), um Daten in anderen Tabellen zu überprüfen und zu entscheiden, ob eine Zeile gelöscht werden muss.
"
!
Die erste FROM-Klausel zeigt die zu ändernde Tabelle an Die zweite FROM-Klausel kann Einschränkungskriterien für die DELETE-Anweisung angeben
Angeben von Bedingungen in der WHERE-Klausel "
Unterabfragen bestimmen, welche Zeilen gelöscht werden sollen
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Methodischer Hinweis Vergleichen Sie die Beispiele 1 und 2.
Verwenden Sie die DELETE-Anweisung mit Verknüpfungen oder Unterabfragen, um anhand von Daten in anderen Tabellen Zeilen aus einer Tabelle zu entfernen. Diese Vorgehensweise ist effizienter als das Schreiben mehrerer einzelner DELETE-Anweisungen für jede Zeile.
Verwenden einer zusätzlichen FROM-Klausel In einer DELETE-Anweisung verweist die WHERE-Klausel auf Werte in der Tabelle selbst und wird verwendet, um zu entscheiden, welche Zeilen gelöscht werden sollen. Wenn Sie eine zusätzliche FROM-Klausel verwenden, können Sie auf andere Tabellen verweisen, um diese Entscheidung zu treffen. Berücksichtigen Sie beim Verwenden der DELETE-Anweisung mit einer zusätzlichen FROM-Klausel die folgenden Aspekte:
Syntax
!
Die erste FROM-Klausel zeigt die Tabelle an, in der die Zeilen gelöscht werden.
!
Die zweite FROM-Klausel kann eine Verknüpfung beinhalten und als Einschränkungskriterien für die DELETE-Anweisung dienen.
DELETE [FROM] {table_name | view_name} [FROM {} [,…n]] [WHERE search_conditions ]
Unterrichtseinheit 7: Ändern von Daten
Beispiel 1
Methodischer Hinweis
Verweisen Sie auf die zusätzliche FROM-Klausel in der Anweisung.
19
In diesem Beispiel wird eine Verknüpfungsoperation mit der DELETE-Anweisung verwendet, um aus der order details-Tabelle Zeilen für Bestellungen zu entfernen, die am 14.4.1998 entgegengenommen wurden. USE Northwind DELETE FROM [Order Details] FROM orders AS o INNER JOIN [order details] AS od ON o.OrderID = od.OrderID WHERE OrderDate = '4/14/1998' GO
Angeben von Bedingungen in der WHERE-Klausel Es besteht auch die Möglichkeit, Unterabfragen zu verwenden, um zu ermitteln, welche Zeilen in einer Tabelle anhand von Zeilen in einer anderen Tabelle gelöscht werden sollen. Sie können dabei anstelle einer zusätzlichen FROMKlausel die Bedingungen in der WHERE-Klausel angeben. Verwenden Sie eine geschachtelte oder korrelierte Unterabfrage in der WHERE-Klausel, um zu ermitteln, welche Zeilen gelöscht werden sollen. Beispiel 2
In diesem Beispiel werden dieselben Zeilen aus der order details-Tabelle entfernt wie in Beispiel 1, und es wird veranschaulicht, wie Sie eine Verknüpfungsoperation in eine geschachtelte Unterabfrage konvertieren können. USE Northwind DELETE FROM [Order Details] WHERE orderid IN ( SELECT orderid FROM Orders WHERE OrderDate = '4/14/1998' ) GO
20
Unterrichtseinheit 7: Ändern von Daten
# Aktualisieren von Daten Inhalt dieser Folie
Geben Sie eine Einführung in die Themen dieses Abschnitts.
!
Aktualisieren von Zeilen anhand dieser Tabelle
Einstieg
!
Aktualisieren von Zeilen anhand anderer Tabellen
Die UPDATE-Anweisung kann Datenwerte in einzelnen Zeilen, in Zeilengruppen oder in allen Zeilen einer Tabelle oder Sicht ändern.
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Die UPDATE-Anweisung kann Datenwerte in einzelnen Zeilen, in Zeilengruppen oder in allen Zeilen einer Tabelle oder Sicht ändern. Sie können eine Tabelle anhand von Daten in dieser oder in anderen Tabellen aktualisieren.
Unterrichtseinheit 7: Ändern von Daten
21
Aktualisieren von Zeilen anhand dieser Tabelle Inhalt dieser Folie
Veranschaulichen Sie, wie Zeilen mit Hilfe der UPDATE-Anweisung aktualisiert werden.
Einstieg
Mit der UPDATE-Anweisung können Sie Daten in vorhandenen Zeilen einer Tabelle ändern.
!
Die WHERE-Klausel gibt die zu ändernden Zeilen an
!
Die SET-Klausel gibt die neuen Werte an
!
Die Datentypen der Eingabewerte müssen mit den Datentypen der Spalten kompatibel sein
!
Aktualisierungen treten nicht in Zeilen auf, die Integritätseinschränkungen verletzen
USE USE Northwind Northwind UPDATE UPDATE products products SET SET unitprice unitprice == (unitprice (unitprice ** 1.1) 1.1) GO GO
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Mit der UPDATE-Anweisung werden vorhandene Daten geändert. Teilsyntax
UPDATE {table_name | view_name} SET {column_name={expression | DEFAULT | NULL} |@variable=expression}[,…n] WHERE {search_conditions} Verwenden Sie die UPDATE-Anweisung, um einzelne Zeilen, Zeilengruppen oder alle Zeilen in einer Tabelle zu ändern. Berücksichtigen Sie beim Aktualisieren von Zeilen die folgenden Aspekte und Richtlinien:
Beispiel
!
Geben Sie die zu aktualisierenden Zeilen mit der WHERE-Klausel an.
!
Geben Sie die neuen Werte mit der SET-Klausel an.
!
Überprüfen Sie, ob die Datentypen der Eingabewerte mit den für die Spalten definierten Datentypen kompatibel sind.
!
SQL Server aktualisiert keine Zeilen, die Integritätseinschränkungen verletzen. Die Änderungen werden nicht vorgenommen, und für die Anweisung wird ein Rollback ausgeführt.
!
Sie können Daten jeweils nur in einer Tabelle zur Zeit ändern.
!
Sie können für eine oder mehrere Spalten oder Variablen auch Ausdrücke festlegen. Ein Ausdruck kann beispielsweise eine Berechnung (wie z. B. price * 2) oder die Addition von zwei Spalten sein.
Im folgenden Beispiel werden die aktuellen Preise sämtlicher Produkte von Northwind Traders um 10 % erhöht. USE Northwind UPDATE products SET unitprice = (unitprice * 1.1) GO
22
Unterrichtseinheit 7: Ändern von Daten
Aktualisieren von Zeilen anhand anderer Tabellen Inhalt dieser Folie
Erläutern Sie, wie mit Hilfe von Verknüpfungen oder Unterabfragen Daten in einer Tabelle anhand von Daten in einer anderen Tabelle aktualisiert werden.
!
Einstieg
!
Verwenden der UPDATE-Anweisung " "
Mit der UPDATE-Anweisung können Sie Zeilen anhand von anderen Tabellen aktualisieren.
Erfordert Tabellenpräfixe auf mehrdeutigen Spaltennamen
Angeben der zu aktualisierenden Zeilen mit Hilfe von Verknüpfungen "
!
Aktualisiert eine Zeile nie zweimal
Verwenden der FROM-Klausel
Angeben der zu aktualisierenden Zeilen mit Hilfe von Unterabfragen "
Korrelieren der Unterabfrage mit der aktualisierten Tabelle
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Verwenden Sie die UPDATE-Anweisung mit einer FROM-Klausel, um eine Tabelle anhand von Werten aus anderen Tabellen zu ändern.
Verwenden der UPDATE-Anweisung Berücksichtigen Sie beim Verwenden von Verknüpfungen und Unterabfragen mit der UPDATE-Anweisung die folgenden Aspekte und Richtlinien:
Teilsyntax
!
SQL Server aktualisiert eine Zeile in einer UPDATE-Anweisung nie zweimal. Dies ist eine interne Einschränkung, die den Protokollierungsumfang bei Aktualisierungen reduziert.
!
Verwenden Sie das SET-Schlüsselwort, um die zu aktualisierenden Spalten oder Variablennamen zu benennen. Die Spalten, auf die das SET-Schlüsselwort verweist, müssen eindeutig sein. Beispielsweise können Sie ein Tabellenpräfix verwenden, um Mehrdeutigkeiten auszuschließen.
UPDATE {table_name | view_name} SET {column_name={expression | DEFAULT | NULL} |@variable=expression}[,…n] [FROM { } ] [WHERE search_conditions]
Angeben der zu aktualisierenden Zeilen mit Hilfe von Verknüpfungen Verwenden Sie beim Verwenden von Verknüpfungen zum Aktualisieren von Zeilen die FROM-Klausel, um Verknüpfungen in der UPDATE-Anweisung anzugeben.
Unterrichtseinheit 7: Ändern von Daten
Beispiel 1
In diesem Beispiel wird eine Verknüpfung zum Aktualisieren der productsTabelle verwendet, indem in der unitprice-Spalte für alle von Zulieferern in den USA gelieferten Produkte 2 $ addiert werden. UPDATE Products SET UnitPrice = UnitPrice + 2 FROM Products INNER JOIN suppliers ON Products.SupplierID = Suppliers.SupplierID WHERE Suppliers.Country = 'USA' GO
Angeben der zu aktualisierenden Zeilen mit Hilfe von Unterabfragen Berücksichtigen Sie beim Verwenden von Unterabfragen zum Aktualisieren von Zeilen die folgenden Aspekte und Richtlinien:
Beispiel 2
!
Sollte die Unterabfrage keinen einzelnen Wert zurückgeben, müssen Sie die Unterabfrage mit den Schlüsselwörtern IN, EXISTS, ANY oder ALL einleiten.
!
Ziehen Sie die Aggregatfunktionen mit korrelierten Unterabfragen in Betracht, da SQL Server die gleiche Zeile in einer UPDATE-Anweisung nie zweimal aktualisiert.
In diesem Beispiel wird eine Unterabfrage zum Aktualisieren der productsTabelle verwendet, indem in der unitprice-Spalte für alle von Zulieferern in den USA gelieferten Produkte 2 $ addiert werden. Beachten Sie, dass es für jedes Produkt nur einen Lieferanten gibt. UPDATE Products SET UnitPrice = UnitPrice + 2 WHERE orderid IN ( SELECT supplierid FROM suppliers WHERE country = 'USA' ) GO
23
24
Unterrichtseinheit 7: Ändern von Daten
Beispiel 3
In diesem Beispiel wird der Gesamtumsatz aus allen Bestellungen der einzelnen Produkte in der products-Tabelle aktualisiert. Pro Produkt können viele Bestellungen existieren. Da SQL Server die gleiche Zeile nie zweimal aktualisiert, müssen Sie eine Aggregatfunktion mit einer korrelierten Unterabfrage verwenden, um die Gesamtzahl der Verkäufe für die einzelnen Produkte zu aktualisieren. Wenn Sie das folgende Beispiel ausführen möchten, müssen Sie der products-Tabelle die todatesales-Spalte mit einem Standardwert von „0“ hinzufügen. USE Northwind UPDATE Products SET todatesales = ( SELECT SUM(Quantity) INNER JOIN [order details] AS od WHERE products.productid = od.productid ) GO
Unterrichtseinheit 7: Ändern von Daten
25
Leistungsaspekte Inhalt dieser Folie
Beschreiben Sie die Leistungsaspekte beim Verwenden von Sichten, Trigger oder gespeicherten Prozeduren.
Einstieg
Datenänderungen, die innerhalb von Transaktionen auftreten, können die Leistung von SQL Server beeinflussen.
!
Alle Datenänderungen treten innerhalb einer Transaktion auf
!
Es können Seitenreservierungen erforderlich werden
!
Das Ändern von indizierten Daten zieht zusätzlichen Aufwand nach sich
!
Indizes können Suchkriterien unterstützen
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Kernpunkte
Zu einem Zeitpunkt kann nur eine Transaktion eine bestimmte Zeile ändern. Eine aktuell ausgeführte Transaktion hindert andere Transaktionen so lange an der Ausführung, bis für sie ein Commit oder ein Rollback ausgeführt wird.
Datenänderungen, die innerhalb von Transaktionen auftreten, können die Leistung von SQL Server beeinflussen. Beachten Sie beim Ändern von Daten Folgendes: !
Eine Datensperrung während einer einzigen Transaktion kann verhindern, dass andere Transaktionen und Abfragen ausgeführt werden, bevor diese Transaktion abgeschlossen ist.
!
Das Ändern von Tabellen kann die Art und Weise der physischen Datenspeicherung beeinflussen, sodass Seitenreservierungen innerhalb der Transaktion erforderlich werden.
!
Beim Ändern von indizierten Datenspalten können sich die Indizes für diese Spalten als Folge der Transaktion ändern.
!
Das Platzieren von Indizes für Spalten, die in der WHERE-Klausel einer Datenänderungsanweisung verwendet werden, steigert die Leistung.
26
Unterrichtseinheit 7: Ändern von Daten
Empfohlene Methoden Inhalt dieser Folie
Listen Sie die empfohlenen Methoden zum Ausführen grundlegender Abfragen auf.
Erstellen Erstellen Sie Sie stets stets zuerst zuerst eine eine SELECT-Anweisung, SELECT-Anweisung, die die keine keine Daten Daten ändert, ändert, bevor bevor Sie Sie tatsächlich tatsächlich Daten Daten ändern ändern
Einstieg
Erhöhen Erhöhen Sie Sie die die Lesbarkeit Lesbarkeit der der Resultsets, Resultsets, indem indem Sie Sie SpaltenSpaltennamen namen in in Spaltenaliasnamen Spaltenaliasnamen ändern ändern oder oder Literale Literale verwenden verwenden
Die folgenden empfohlenen Methoden helfen Ihnen beim Ausführen grundlegender Abfragen.
Fügen Fügen Sie Sie immer immer eine eine WHERE-Klausel WHERE-Klausel in in die die DELETEDELETE- und und UPDATE-Anweisung UPDATE-Anweisung ein ein
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Die folgenden empfohlenen Methoden helfen Ihnen beim Ausführen grundlegender Abfragen: !
Erstellen Sie stets zuerst eine SELECT-Anweisung, die keine Daten ändert, bevor Sie tatsächlich Daten ändern. Mit diesem Test überprüfen Sie, welche Zeilen Ihre INSERT-, UPDATE- oder DELETE-Anweisung betrifft.
!
Erhöhen Sie die Lesbarkeit der Resultsets, indem Sie Spaltennamen in Spaltenaliasnamen ändern oder Literale verwenden, um Resultsetwerte zu ersetzen. Diese Formatierungsoptionen ändern die Datendarstellung, nicht die Daten selbst.
!
SQL Server löscht oder aktualisiert alle Zeilen in einer Tabelle, es sei denn, Sie fügen eine WHERE-Klausel in die DELETE- oder UPDATE-Anweisung ein.
Zusätzliche Informationen zu den folgenden Themen erhalten Sie in der SQL Server-Onlinedokumentation. Thema
Suchbegriff
Verwenden von Zeichenfolgen
“LIKE-Vergleich”
Sortieren von Resultsets
“Sortierreihenfolge”
Unterrichtseinheit 7: Ändern von Daten
27
Übungseinheit A: Ändern von Daten Inhalt dieser Folie
Geben Sie eine Einführung in die Übungseinheit.
Einstieg
In dieser Übungseinheit ändern Sie vorhandene Daten mit Hilfe von INSERT-, DELETE- und UPDATE-Anweisungen.
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Erläutern Sie die Lernziele der Übungseinheit.
Lernziele Am Ende dieser Übungseinheit werden Sie in der Lage sein, die folgenden Aufgaben auszuführen: !
Ändern von Daten in Tabellen mit Hilfe von INSERT-, DELETE - und UPDATE-Anweisungen.
!
Einfügen von Zeilen in eine Tabelle mit Hilfe der Schlüsselwörter DEFAULT und DEFAULT VALUES.
!
Ändern von Daten anhand von Daten in anderen Tabellen.
Voraussetzungen Um diese Übungseinheit zu bearbeiten, benötigen Sie Folgendes: !
Die Skriptdateien für diese Übungseinheit, die sich in C:\Moc\2316B\Labfiles\L07 befinden.
!
Die Antwortdateien für diese Übungseinheit, die sich in C:\Moc\2316B\Labfiles\L07\Answers befinden.
!
Die library-Datenbank muss installiert sein.
Einrichten der Übungseinheit Nicht erforderlich.
Weitere Informationen Wenn Sie Hilfe bei der Ausführung von Dateien benötigen, suchen Sie in der Hilfe zu SQL Query Analyzer nach „Ausführen einer Abfrage“. Daneben sind die folgenden Informationsquellen verfügbar: !
Das library-Datenbankschema.
!
Die Microsoft SQL Server-Onlinedokumentation.
28
Unterrichtseinheit 7: Ändern von Daten
Szenario Der Aufbau des Schulungsraumes soll die Organisation des weltweit agierenden Handelsunternehmens Northwind Traders widerspiegeln. Das Unternehmen hat den fiktiven Domänennamen nwtraders.msft. Der primäre DNS-Server für nwtraders.msft ist der Kursleitercomputer, dessen Internetprotokolladresse (IP-Adresse) 192.168.x.200 lautet (wobei x die zugewiesene Schulungsraumnummer ist). Der Name des Kursleitercomputers ist London. Die folgende Tabelle stellt den Benutzernamen, den Computernamen und die IP-Adresse für jeden Kursteilnehmercomputer in der fiktiven Domäne nwtraders.msft bereit. Suchen Sie den Benutzernamen Ihres Computers, und notieren Sie ihn. Benutzername
Computername
IP-Adresse
SQLAdmin1
Vancouver
192.168.x.1
SQLAdmin2
Denver
192.168.x.2
SQLAdmin3
Perth
192.168.x.3
SQLAdmin4
Brisbane
192.168.x.4
SQLAdmin5
Lisbon
192.168.x.5
SQLAdmin6
Bonn
192.168.x.6
SQLAdmin7
Lima
192.168.x.7
SQLAdmin8
Santiago
192.168.x.8
SQLAdmin9
Bangalore
192.168.x.9
SQLAdmin10
Singapore
192.168.x.10
SQLAdmin11
Casablanca
192.168.x.11
SQLAdmin12
Tunis
192.168.x.12
SQLAdmin13
Acapulco
192.168.x.13
SQLAdmin14
Miami
192.168.x.14
SQLAdmin15
Auckland
192.168.x.15
SQLAdmin16
Suva
192.168.x.16
SQLAdmin17
Stockholm
192.168.x.17
SQLAdmin18
Moscow
192.168.x.18
SQLAdmin19
Caracas
192.168.x.19
SQLAdmin20
Montevideo
192.168.x.20
SQLAdmin21
Manila
192.168.x.21
SQLAdmin22
Tokyo
192.168.x.22
SQLAdmin23
Khartoum
192.168.x.23
SQLAdmin24
Nairobi
192.168.x.24
Veranschlagte Zeit für die Übungseinheit: 60 Minuten
Unterrichtseinheit 7: Ändern von Daten
29
Übung 1 Verwenden der INSERT-Anweisung In dieser Übung fügen Sie mit der INSERT-Anweisung Zeilen zu Tabellen in der library-Datenbank hinzu. Dann führen Sie eine Abfrage aus, um zu überprüfen, ob die neuen Zeilen zu den Tabellen hinzugefügt wurden. C:\Moc\2316B\Labfiles\L07\Answers enthält die vollständigen Skripts für diese Übung.
! So fügen Sie Werte in die „item“-Tabelle ein In diesem Verfahren fügen Sie Zeilen in die item-Tabelle ein, die jeweils ein Buch aus der Bibliothek identifizieren. 1. Melden Sie sich an der Schulungsraumdomäne nwtraders mit Hilfe der Informationen in der folgenden Tabelle an. Option
Eingabe
Benutzername
SQLAdminx (wobei x die Ihrem Computernamen zugewiesene Nummer ist, wie in der Schulungsraumdomäne nwtraders.msft festgelegt)
Kennwort
password
2. Öffnen Sie SQL Query Analyzer, und melden Sie sich, falls erforderlich, am (lokalen) Server mit Microsoft Windows®-Authentifizierung an. Sie haben die Berechtigung, sich anzumelden und SQL Server zu verwalten, da Sie als SQLAdminx angemeldet sind - einem Mitglied der lokalen Windows 2000-Gruppe Administratoren. Alle Mitglieder dieser Gruppe werden automatisch der sysadmin-Rolle von SQL Server zugeordnet. 3. Klicken Sie in der Liste DB auf library. 4. Fügen Sie zwei Zeilen in die item-Tabelle für den Buchtitel mit der Nummer 8, The Cherry Orchard, ein. Geben Sie die Namen der Spalten an, für die Sie Werte bereitstellen. Definieren sie den Titel in der ersten Zeile als gebundene Ausgabe (HARDBACK) und den Titel in der zweiten Zeile als Taschenbuch (SOFTBACK). Verwenden Sie die nachstehenden Werte. Answer_InsValues1.sql ist ein vollständiges Skript für diesen Schritt. Spaltenname
Daten
isbn
10001 für HARDBACK; 10101 für SOFTBACK
title_no
8
cover
HARDBACK bzw. SOFTBACK
loanable
Y
translation
ENGLISH
USE library INSERT item (isbn, VALUES (10001, 8, INSERT item (isbn, VALUES (10101, 8, GO
title_no, cover, 'HARDBACK', 'Y', title_no, cover, 'SOFTBACK', 'Y',
loanable, translation) 'ENGLISH') loanable, translation) 'ENGLISH')
5. Führen Sie die Abfrage aus, und überprüfen Sie, ob zwei Zeilen eingefügt wurden.
30
Unterrichtseinheit 7: Ändern von Daten
! So fügen Sie Werte in die „copy“-Tabelle ein In diesem Verfahren fügen Sie Zeilen in die copy-Tabelle ein, die jeweils ein Buch aus der Bibliothek identifizieren. 1. Fügen Sie eine Zeile zu der copy-Tabelle für die gebundene Ausgabe hinzu, die Sie in Schritt 4 hinzugefügt haben. Verwenden Sie die nachstehenden Werte. Answer_InsValues2.sql ist ein vollständiges Skript für diesen Schritt. Spaltenname
Daten
isbn
10001 (die ISBN-Nummer für die gebundene Ausgabe, die Sie in Schritt 1 hinzugefügt haben)
copy_no
1
title_no
8 (die Titelnummer von The Cherry Orchard)
on_loan
N
USE library INSERT copy (isbn, copy_no, title_no, on_loan) VALUES (10001,1,8,'N') GO
2. Führen Sie die Abfrage aus, und überprüfen Sie, ob eine einzelne Zeile eingefügt wurde.
! So bestimmen Sie die Sprache eines Titels In diesem Verfahren schreiben Sie eine Abfrage, die die Sprache zurückgibt, in die ein Titel übersetzt wurde. 1. Schreiben Sie eine Abfrage, die die Sprache eines der Titel zurückgibt, die Sie in Schritt 4 in die item-Tabelle eingefügt haben. Answer_Translate.sql ist ein vollständiges Skript für diesen Schritt. USE library SELECT translation FROM item WHERE isbn = 10001 GO
2. Führen Sie die Abfrage aus, um zu überprüfen, ob sie das gewünschte Ergebnis zurückgibt.
Unterrichtseinheit 7: Ändern von Daten
31
Übung 2 Verwenden der INSERT-Anweisung mit dem DEFAULTSchlüsselwort In dieser Übung verwenden Sie die INSERT-Anweisung mit dem DEFAULTSchlüsselwort, um zwei Zeilen zur title-Tabelle hinzuzufügen und Teildaten für Spalten bereitzustellen, die NULL-Werte zulassen oder über Standardwerte verfügen. C:\Moc\2316B\Labfiles\L07\Answers enthält die vollständigen Skripts für diese Übung.
! So ermitteln Sie, welche Spalten NULL-Werte zulassen In diesem Verfahren ermitteln Sie, welche Spalten NULL-Werte zulassen. 1. Führen Sie die gespeicherte Systemprozedur sp_help aus, um zu ermitteln, welche Spalten in der title-Tabelle NULL-Werte zulassen. Sie brauchen keine Werte für Spalten anzugeben, die NULL-Werte zulassen, über Standardwerte verfügen oder die IDENTITY-Eigenschaft aufweisen. Answer_WhichNull.sql ist ein vollständiges Skript für diesen Schritt. USE library EXEC sp_help title GO
2. Überprüfen Sie das zweite zurückgegebene Ergebnis, um zu ermitteln, welche Spalten NULL-Werte zulassen.
! So fügen Sie Werte in die „title“-Tabelle ein In diesem Verfahren fügen Sie Werte in die title-Tabelle ein. 1. Fügen Sie eine Zeile in die title-Tabelle für das Buch The Art of Lawn Tennis von William T. Tilden ein. Verwenden Sie das DEFAULTSchlüsselwort für Spalten, die NULL-Werte zulassen oder Standardwerte besitzen. Geben Sie keinen Wert für die title_no-Spalte an, da diese Spalte über die IDENTITY-Eigenschaft verfügt. Answer_InsDefault1.sql ist ein vollständiges Skript für diesen Schritt. USE library INSERT title (title, author, synopsis) VALUES ('The Art of Lawn Tennis', 'William T. Tilden' ,DEFAULT ) GO
2. Führen Sie die Abfrage aus, und überprüfen Sie, ob eine einzelne Zeile eingefügt wurde.
! So ermitteln Sie den zuletzt verwendeten Identitätswert In diesem Verfahren ermitteln Sie den zuletzt verwendeten Identitätswert. 1. Schreiben Sie eine Abfrage, mit der die Nummer des Buchtitels (title_no) bestimmt wird, den Sie in Schritt 1 des vorherigen Verfahrens hinzugefügt haben. Answer_Identity.sql ist ein vollständiges Skript für diesen Schritt. USE library SELECT @@identity GO
2. Führen Sie die Abfrage aus, und notieren Sie den zurückgegebenen Wert.
32
Unterrichtseinheit 7: Ändern von Daten
! So rufen Sie die zuletzt in die „title“-Tabelle eingefügte Zeile ab In diesem Verfahren rufen Sie die Zeile ab, die zuletzt in die title-Tabelle eingefügt wurde. 1. Schreiben Sie eine Abfrage, die überprüft, ob der neue Titel zur titleTabelle hinzugefügt wurde. Verwenden Sie für die title_no-Spalte den Wert, der in Schritt 1 des vorherigen Verfahrens zurückgegeben wurde. Answer_LastRow.sql ist ein vollständiges Skript für diesen Schritt. USE library SELECT * FROM title WHERE title_no = @@identity GO
2. Führen Sie die Abfrage aus, um zu überprüfen, ob sie das gewünschte Ergebnis zurückgibt.
! So fügen Sie weitere Werte in die „title“-Tabelle ein In diesem Verfahren fügen Sie weitere Werte in die title-Tabelle ein. 1. Fügen Sie eine Zeile in die title-Tabelle für das Buch Riders of the Purple Sage von Zane Grey ein. Geben Sie eine column_list und Werte für Spalten an, die NULL-Werte nicht zulassen oder nicht über Standardwerte verfügen. Answer_InsValues3.sql ist ein vollständiges Skript für diesen Schritt. USE library INSERT title (title, author) VALUES ('Riders of the Purple Sage', 'Zane Grey') GO
2. Führen Sie die Abfrage aus, und überprüfen Sie, ob eine einzelne Zeile eingefügt wurde.
! So überprüfen Sie, ob Werte in die „title“-Tabelle eingefügt wurden In diesem Verfahren überprüfen Sie, ob Werte in die title-Tabelle eingefügt wurden. 1. Schreiben Sie eine Abfrage, die überprüft, ob der neue Titel und der neue Autor zur title-Tabelle hinzugefügt wurden, und führen Sie die Abfrage aus. Answer_ChkValues3.sql ist ein vollständiges Skript für diesen Schritt. USE library SELECT * FROM title WHERE title = 'Riders of the Purple Sage' GO
2. Führen Sie die Abfrage aus, um zu überprüfen, ob sie das gewünschte Ergebnis zurückgibt.
Unterrichtseinheit 7: Ändern von Daten
33
Übung 3 Verwenden der INSERT-Anweisung mit dem DEFAULT VALUESSchlüsselwort In dieser Übung verwenden Sie die INSERT-Anweisung mit dem DEFAULT VALUES-Schlüsselwort, um Zeilen zu einer Tabelle hinzuzufügen, ohne Werte bereitzustellen. Zuerst erstellen Sie eine Beispieltabelle in der library-Datenbank und arbeiten mit dieser Tabelle. C:\Moc\2316B\Labfiles\L07\Answers enthält die vollständigen Skripts für diese Übung.
! So erstellen Sie die Beispieltabelle „sample1“ In diesem Verfahren erstellen Sie eine neue Tabelle in der library-Datenbank, die NULL-Werte zulässt und für bestimmte Spalten Standardwerte angibt. 1. Führen Sie das Skript C:\Moc\2316B\Labfiles\L07\MakeSample1.sql aus, um eine neue Tabelle mit dem Namen sample1 in der library-Datenbank mit den folgenden Merkmalen zu erstellen. Spaltenname
Datentyp
IDENTITY-Eigenschaft?
NULL zulässig?
Cust_id
Int
Ja (100,5)
Nein
Name
char(10)
Nein
Ja
USE library CREATE TABLE sample1 ( Cust_id int ,Name char(10) ) GO
NOT NULL NULL
IDENTITY(100,5)
2. Führen Sie die Abfrage aus, um zu überprüfen, ob sie die sample1-Tabelle erstellt.
! So fügen Sie eine Zeile mit Standardwerten in die „sample1“-Tabelle ein
In diesem Verfahren fügen Sie eine Zeile mit Standardwerten in die sample1Tabelle mit Hilfe des DEFAULT VALUES-Schlüsselwortes ein. Dann schreiben Sie eine Abfrage, um zu überprüfen, ob die neuen Zeilen zur Tabelle hinzugefügt wurde, und führen die Abfrage aus. Answer_InsDefault2.sql ist ein vollständiges Skript für dieses Verfahren. 1. Schreiben Sie eine Abfrage, die eine neue Zeile in die sample1-Tabelle einfügt, ohne die Spaltennamen anzugeben. Verwenden Sie das DEFAULT VALUES-Schlüsselwort mit der INSERT-Anweisung. USE library INSERT sample1 DEFAULT VALUES GO
2. Führen Sie die Abfrage aus, und überprüfen Sie, ob eine einzelne Zeile eingefügt wurde.
34
Unterrichtseinheit 7: Ändern von Daten
! So überprüfen Sie, ob Werte in die „sample1“-Tabelle eingefügt wurden
In diesem Verfahren überprüfen Sie, ob Werte in die sample1-Tabelle eingefügt wurden. 1. Schreiben Sie eine Abfrage, die überprüft, ob die neue Zeile zur sample1Tabelle hinzugefügt wurde. Answer_ChkDefault2.sql ist ein vollständiges Skript für dieses Verfahren. USE library SELECT * FROM sample1 GO
2. Führen Sie die Abfrage aus, und vergleichen Sie das Ergebnis mit den für die Tabelle definierten Standardwerten. Ergebnis
Das Ergebnis ähnelt dem folgenden Resultset. cust_id
name
100
NULL
(1 row(s) affected)
Unterrichtseinheit 7: Ändern von Daten
35
Übung 4 Verwenden der DELETE-Anweisung In dieser Übung verwenden Sie die DELETE-Anweisung, um das Buch mit der ISBN-Nummer 10101 und der Titelnummer 8 aus der item-Tabelle in der library-Datenbank zu entfernen. C:\Moc\2316B\Labfiles\L07\Answers enthält die vollständigen Skripts für diese Übung.
! So rufen Sie eine Datenzeile ab, die Sie in der „item“-Tabelle löschen möchten
In diesem Verfahren rufen Sie eine Datenzeile ab, die Sie in der item-Tabelle löschen möchten. Answer_SelDelete1.sql ist ein vollständiges Skript für dieses Verfahren. 1. Schreiben Sie eine Abfrage, die die Zeile aus der item-Tabelle zurückgibt, durch die die Taschenbuchausgabe (isbn 10101) von The Cherry Orchard (title_no 8) identifiziert wird. USE library SELECT * FROM item WHERE isbn = 10101 AND title_no = 8 GO
2. Führen Sie die Abfrage aus, um zu überprüfen, ob sie das gewünschte Ergebnis zurückgibt.
! So löschen Sie eine bestimmte Datenzeile in der „item“-Tabelle In diesem Verfahren löschen Sie eine bestimmte Datenzeile in der itemTabelle. Answer_Delete1.sql ist ein vollständiges Skript für dieses Verfahren. 1. Ändern Sie die Abfrage aus Schritt 1 des vorherigen Verfahrens so, dass die Zeile in der item-Tabelle gelöscht wird, die die Taschenbuchausgabe (isbn 10101) von The Cherry Orchard (title_no 8) identifiziert. USE library DELETE FROM item WHERE isbn = 10101 AND title_no = 8 GO
2. Führen Sie die Abfrage aus, und überprüfen Sie, ob eine Zeile in der itemTabelle gelöscht wurde.
36
Unterrichtseinheit 7: Ändern von Daten
Übung 5 Verwenden der UPDATE-Anweisung In dieser Übung ändern Sie den Nachnamen des Mitglieds mit der Nummer 507 in der member-Tabelle der library-Datenbank. C:\Moc\2316B\Labfiles\L07\Answers enthält die vollständigen Skripts für diese Übung.
! So rufen Sie eine Datenzeile ab, die Sie in der „member“-Tabelle aktualisieren möchten
In diesem Verfahren rufen Sie eine Datenzeile ab, die Sie in der memberTabelle aktualisieren möchten. Answer_SelUpdate1.sql ist ein vollständiges Skript für dieses Verfahren. 1. Schreiben Sie eine Abfrage, die den Nachnamen des Mitglieds mit der Nummer 507 in der member-Tabelle abruft. USE library SELECT * FROM member WHERE member_no = 507 GO
2. Führen Sie die Abfrage aus, um zu überprüfen, ob sie das gewünschte Ergebnis zurückgibt.
! So aktualisieren Sie eine bestimmte Datenzeile in der „member“Tabelle
In diesem Verfahren aktualisieren Sie eine bestimmte Datenzeile in der member-Tabelle. Answer_Update1.sql ist ein vollständiges Skript für dieses Verfahren. 1. Schreiben Sie eine Abfrage, die den Nachnamen des Mitglieds mit der Nummer 507 in der member-Tabelle durch einen Namen Ihrer Wahl ersetzt. USE library UPDATE member SET lastname = 'BENSON' WHERE member_no = 507 GO
2. Führen Sie die Abfrage aus, und überprüfen Sie, ob eine Zeile in der member-Tabelle aktualisiert wurde.
Unterrichtseinheit 7: Ändern von Daten
37
Übung 6 Ändern von Tabellen anhand von Daten in anderen Tabellen In dieser Übung werden Sie Abfragen erstellen, die Werte aus Tabellen der Datenbank in eine vorhandene Tabelle einfügen. Außerdem werden Sie Zeilen in einer Tabelle anhand von Kriterien in anderen Tabellen löschen oder aktualisieren. C:\Moc\2316B\Labfiles\L07\Answers enthält die vollständigen Skripts für diese Übung.
! So fügen Sie der Datenbank ein neues jugendliches Mitglied hinzu In diesem Verfahren fügen Sie der library-Datenbank ein neues jugendliches Mitglied hinzu. 1. Überprüfen Sie die Skriptdatei C:\Moc\2316B\Labfiles\L07\AddJuvenile.sql, und führen Sie sie aus, um ein neues jugendliches Mitglied zur library-Datenbank hinzuzufügen. Für das Hinzufügen eines neuen jugendlichen Mitglieds sind zwei INSERTAnweisungen erforderlich. Deshalb wird dieser Vorgang als Transaktion behandelt. Anstatt den von der IDENTITY-Eigenschaft gelieferten Wert zu verwenden, wird mit der SET IDENTITY_INSERT-Anweisung für die member.member_no-Spalte ein bestimmter Wert geliefert. 2. Führen Sie die Abfrage aus, und überprüfen Sie, ob in zwei Tabellen jeweils eine Zeile eingefügt wurde.
! So bestimmen Sie, welche Datensätze aus der „juvenile“-Tabelle in die „adult“-Tabelle verschoben werden müssen
In diesem Verfahren rufen Sie Daten aus den adult- und juvenile-Tabellen für alle jugendlichen Mitglieder über 18 Jahren ab. Answer_SelNewAdult.sql ist ein vollständiges Skript für dieses Verfahren. 1. Schreiben Sie eine SELECT-Anweisung, die die member_no-Spalte aus der juvenile-Tabelle und die Spalten street, city, state, zip und phone_no aus der adult-Tabelle zurückgibt. Rufen Sie in der Abfrage außerdem mit dem folgenden Ausdruck das heutige Datum in einem Jahr ab: DATEADD( YY, 1, GETDATE() )
Die letzte Spalte wird später verwendet, um für die adult.expr_date-Spalte einen Wert zu liefern. Diese SELECT-Anweisung verknüpft die juvenileTabelle mit der member-Tabelle, also juvenile.adult_member_no = adult.member_no.
38
Unterrichtseinheit 7: Ändern von Daten
Fügen Sie eine WHERE-Klausel ein, damit nur die Zeilen derjenigen Mitglieder aus der juvenile-Tabelle hinzugefügt werden, die über 18 Jahre alt sind. Verwenden Sie in der WHERE-Klausel die DATEADD-Funktion in einem Ausdruck. Wenn Sie weitere Informationen benötigen, suchen Sie in der Onlinedokumentation unter „DATEADD“. USE library SELECT ju.member_no, ad.street, ad.city, ad.state ,ad.zip, ad.phone_no, DATEADD( YY, 1, GETDATE() ) FROM juvenile AS ju INNER JOIN adult AS ad ON ju.adult_member_no = ad.member_no WHERE ( DATEADD(YY, 18, ju.birth_date) < GETDATE() ) GO
2. Führen Sie die Abfrage aus, um zu überprüfen, ob sie das gewünschte Ergebnis zurückgibt. Achten Sie darauf, welche member_no-Werte zurückgegeben werden.
! So fügen Sie Zeilen aus der „juvenile“-Tabelle in die „adult“-Tabelle ein
1. Schreiben Sie eine INSERT-Anweisung, um Zeilen zur adult-Tabelle hinzuzufügen. Verwenden Sie hierbei die SELECT-Anweisung, die Sie in Schritt 1 des vorherigen Verfahrens erstellt haben. Answer_InsNewAdult.sql ist ein vollständiges Skript für dieses Verfahren. USE library INSERT adult( member_no, street, city, state ,zip, phone_no, expr_date ) SELECT ju.member_no, ad.street, ad.city, ad.state ,ad.zip, ad.phone_no, DATEADD( YY, 1, GETDATE() ) FROM juvenile AS ju INNER JOIN adult AS ad ON ju.adult_member_no = ad.member_no WHERE ( DATEADD(YY, 18, ju.birth_date) < GETDATE() ) GO
2. Führen Sie die Abfrage aus, und überprüfen Sie, ob eine Zeile eingefügt wurde.
Unterrichtseinheit 7: Ändern von Daten
39
! So überprüfen Sie, ob ein bestimmter „juvenile“-Datensatz zur „adult“Tabelle hinzugefügt wurde
1. Schreiben Sie eine Abfrage, um zu überprüfen, ob das jugendliche Mitglied mit der Nummer 16101 der adult-Tabelle hinzugefügt wurde. Answer_ChkNewAdult.sql ist ein vollständiges Skript für dieses Verfahren. USE library SELECT * FROM adult WHERE member_no = 16101 GO
2. Führen Sie die Abfrage aus, um zu überprüfen, ob sie das gewünschte Ergebnis zurückgibt. Ergebnis
Das Ergebnis ähnelt dem folgenden Teil eines Resultsets.
member_no
street
city
state
zip
phone_no
expr_date
16101
Bowery Estates
Montgomery
AL
36100
null
Feb 7 1998 2:58PM
(1 row(s) affected)
! So ermitteln Sie, welche Zeilen aus der „juvenile“-Tabelle entfernt werden müssen
In diesem Verfahren erstellen Sie eine Abfrage, die die Zeilen in der juvenileTabelle löscht, welche übereinstimmende Zeilen mit der adult-Tabelle aufweisen. Nach dem Konvertieren der jugendlichen Mitglieder in erwachsene Mitglieder müssen diese Mitglieder in der juvenile-Tabelle gelöscht werden. Answer_SelOldJuvenile.sql ist ein vollständiges Skript für dieses Verfahren. 1. Schreiben Sie eine SELECT-Anweisung, die die Tabellen adult und juvenile verknüpft, also juvenile.member_no = adult.member_no. USE library SELECT * FROM juvenile INNER JOIN adult ON juvenile.member_no = adult.member_no GO
2. Führen Sie die Abfrage aus, um zu überprüfen, ob sie das gewünschte Ergebnis zurückgibt.
40
Unterrichtseinheit 7: Ändern von Daten
! So löschen Sie Zeilen in der „juvenile“-Tabelle, die übereinstimmende Zeilen mit der „adult“-Tabelle aufweisen
1. Schreiben Sie eine DELETE-Anweisung, um Zeilen in der juvenile-Tabelle zu löschen. Verwenden Sie hierbei die SELECT-Anweisung, die Sie in Schritt 1 des vorherigen Verfahrens erstellt haben. Answer_DelOldJuvenile.sql ist ein vollständiges Skript für dieses Verfahren. USE library DELETE juvenile FROM juvenile INNER JOIN adult ON juvenile.member_no = adult.member_no GO
2. Führen Sie die Abfrage aus, und überprüfen Sie, ob eine Zeile gelöscht wurde.
! So überprüfen Sie, ob bestimmte Datensätze aus der „juvenile“-Tabelle entfernt wurden
1. Schreiben Sie eine SELECT-Anweisung, um zu überprüfen, ob das Mitglied mit der Nummer 16101 aus der juvenile-Tabelle entfernt wurde. Answer_ChkOldJuvenile.sql ist ein Beispiel für diese Abfrage. USE library SELECT * FROM juvenile WHERE member_no = 16101 GO
2. Führen Sie die Abfrage aus, und überprüfen Sie, ob keine Datensätze zurückgegeben werden.
Unterrichtseinheit 7: Ändern von Daten
41
Lernzielkontrolle Inhalt dieser Folie
Vertiefen Sie die Lernziele dieser Unterrichtseinheit, indem Sie die Kernpunkte wiederholen.
Einstieg
Die Fragen zur Lernzielkontrolle beziehen sich auf einige der Schlüsselkonzepte, die Inhalt dieser Unterrichtseinheit sind.
!
Verwenden von Transaktionen
!
Einfügen von Daten
!
Löschen von Daten
!
Aktualisieren von Daten
!
Leistungsaspekte
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Verwenden Sie dieses Szenario, um die Fragen zu beantworten und die Themen dieser Unterrichtseinheit zu wiederholen. Klären Sie offene Fragen der Kursteilnehmer zu diesen Themen.
Sie sind der Datenbankadministrator für einen Gesundheitsvorsorgeplan. Die physicians-Tabelle wurde mit Hilfe der folgenden Anweisung erstellt: CREATE TABLE dbo.physicians ( physician_no int IDENTITY (100, 2) NOT NULL ,f_name varchar (25) NOT NULL ,l_name varchar (25) NOT NULL ,street varchar (50) NULL ,street varchar (255) NULL ,street varchar (255) NULL ,postal_code varchar (7) NULL ,co_pay money NOT NULL CONSTRAINT phys_co_pay DEFAULT (10) ) GO
1. Wie viele Spaltenwerte müssen mindestens angegeben werden, um eine neue Zeile zur Tabelle hinzuzufügen? Sie müssen Daten für mindestens zwei Spalten angeben. Die INSERTAnweisung muss zumindest Werte für „f_name“ und „l_name“ enthalten. Alle anderen Spalten lassen NULL-Werte zu, oder es werden Standardwerte für sie erzeugt.
42
Unterrichtseinheit 7: Ändern von Daten
2. Die beteiligten Ärzte haben ihre Dienstleistungshonorare erhöht. Wie kann der Wert co_pay für alle Ärzte um 12 Prozent erhöht werden? Verwenden Sie eine UPDATE-Anweisung des folgenden Typs: UPDATE physicians SET co_pay = (co_pay + co_pay * .12)
3. Wie können alle Zeilen aus der physicians-Tabelle entfernt werden? Verwenden Sie eine DELETE-Anweisung oder eine TRUNCATE TABLE-Anweisung.
Unterrichtseinheit 8: Abfragen von Volltextindizes Inhalt Übersicht
1
Einführung in den Microsoft Search-Dienst
2
Komponenten des Microsoft Search-Dienstes
3
Zusammenstellen von Informationen zu Volltextindizes
5
Schreiben von Volltextabfragen
7
Empfohlene Methoden
15
Übungseinheit A: Abfragen von Volltextindizes
16
Lernzielkontrolle
23
Die in diesen Unterlagen enthaltenen Angaben und Daten, einschließlich URLs und anderer Verweise auf Internetwebsites, können ohne vorherige Ankündigung geändert werden. Die in den Beispielen genannten Firmen, Organisationen, Produkte, Domänennamen, E-Mail-Adressen, Logos, Personen, Orte und Ereignisse sind frei erfunden und jede Ähnlichkeit mit bestehenden Firmen, Organisationen, Produkten, Domänennamen, E-Mail-Adressen, Logos, Personen, Orten oder Ereignissen ist rein zufällig, soweit nichts anderes angegeben ist. Die Benutzer sind verantwortlich für das Einhalten aller anwendbaren Urheberrechtsgesetze. Unabhängig von der Anwendbarkeit der entsprechenden Urheberrechtsgesetze darf ohne ausdrückliche schriftliche Erlaubnis der Microsoft Corporation kein Teil dieses Dokuments für irgendwelche Zwecke vervielfältigt oder in einem Datenempfangssystem gespeichert oder darin eingelesen werden, unabhängig davon, auf welche Art und Weise oder mit welchen Mitteln (elektronisch, mechanisch, durch Fotokopieren, Aufzeichnen, usw.) dies geschieht. Microsoft Corporation kann Inhaber von Patenten oder Patentanträgen, Marken, Urheberrechten oder anderen gewerblichen Schutzrechten sein, die den Inhalt dieses Dokuments betreffen. Die Bereitstellung dieses Dokuments gewährt keinerlei Lizenzrechte an diesen Patenten, Marken, Urheberrechten oder anderen gewerblichen Schutzrechten, es sei denn, dies wurde ausdrücklich durch einen schriftlichen Lizenzvertrag mit der Microsoft Corporation vereinbart. 2001 Microsoft Corporation. Alle Rechte vorbehalten. Microsoft, BackOffice, MS-DOS, PowerPoint, Visual Studio, Windows, Windows Media und Windows NT sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Die in diesem Dokument aufgeführten Namen tatsächlicher Firmen und Produkte sind möglicherweise Marken der jeweiligen Eigentümer.
Unterrichtseinheit 8: Abfragen von Volltextindizes
iii
Hinweise für den Kursleiter Präsentation: 45 Minuten Übungseinheit: 60 Minuten
In dieser Unterrichtseinheit wird der Microsoft® Search-Dienst, das Zugreifen auf Informationen zu Indizes für Textfelder und das Abfragen der Volltextindizes beschrieben. Am Ende der Unterrichtseinheit sollten die Kursteilnehmer mit den Funktionen dieses Dienstes vertraut sein. Sie werden jedoch kein Experte sein, was die Verwendung des Dienstes angeht. Am Ende dieser Unterrichtseinheit werden die Kursteilnehmer in der Lage sein, die folgenden Aufgaben auszuführen: !
Beschreiben der Funktionen und Komponenten des Microsoft SearchDienstes.
!
Zusammenstellen von Informationen zu Volltextindizes.
!
Schreiben von Volltextabfragen.
Unterlagen und Vorbereitung In diesem Abschnitt werden die erforderlichen Unterlagen und vorbereitenden Aufgaben erläutert, die nötig sind, um diese Unterrichtseinheit zu unterrichten.
Unterlagen Um diese Unterrichtseinheit zu unterrichten, benötigen Sie folgende Unterlagen: !
Die Microsoft PowerPoint®-Datei 2316B_08.ppt
!
Die Beispieldatei C:\Moc\2316B\Demo\Ex_08.sql, die alle Beispielskripts der Unterrichtseinheit enthält, soweit in der Unterrichtseinheit nichts anderes angegeben ist.
Vorbereitung Zur Vorbereitung dieser Unterrichtseinheit gehen Sie folgendermaßen vor: !
Lesen Sie alle Unterlagen.
!
Arbeiten Sie die Übungseinheit durch.
iv
Unterrichtseinheit 8: Abfragen von Volltextindizes
Strategie für die Unterrichtseinheit Verwenden Sie die folgende Strategie, um diese Unterrichtseinheit zu präsentieren: !
Einführung in den Microsoft Search-Dienst Beschreiben Sie das Konzept und die Funktion des Microsoft SearchDienstes in Bezug auf Microsoft SQL Server™ 2000. Erläutern Sie die Vorteile der Verwendung des Microsoft Search-Dienstes zum Indizieren und Abfragen von Datenbanktabellen in SQL Server.
!
Komponenten des Microsoft Search-Dienstes Beschreiben Sie die Objekte, die der Microsoft Search-Dienst zum Implementieren der Volltextsuche verwendet: Volltextindex und Volltextkatalog.
!
Zusammenstellen von Informationen zu Volltextindizes Beschreiben Sie die verschiedenen Methoden und Informationen, mit denen Sie Informationen zur Volltextsuche zusammenstellen können, indem Sie gespeicherte Systemprozeduren für Volltext, Transact-SQL-Funktionen und SQL Server Enterprise Manager verwenden. Sie können Metadaten und Statusinformationen für jede Ebene (Datenbank, Katalog, Tabelle und Spalte) abrufen.
!
Schreiben von Volltextabfragen Erläutern Sie, wie Volltextabfragen mit Hilfe von Transact-SQLAnweisungen wie der CONTAINS- und FREETEXT-Prädikate und der CONSTAINSTABLE und FREETEXTTABLE-Funktionen, geschrieben werden. Erläutern Sie, in welchen Fällen die Prädikate anstelle der Funktionen verwendet werden.
Anpassungsinformationen Dieser Abschnitt beschreibt die Anforderungen zum Einrichten der Übungseinheiten für eine Unterrichtseinheit sowie die Konfigurationsänderungen, die während der Übungseinheiten an den Kursteilnehmercomputern vorgenommen werden. Diese Informationen sollen Ihnen beim Replizieren oder Anpassen der Microsoft Official Curriculum-Courseware (MOC) helfen. Wichtig Die Übungseinheit in dieser Unterrichtseinheit hängt von der Schulungsraumkonfiguration ab, die im Abschnitt „Anpassungsinformationen“ am Ende des Dokuments Handbuch für das Einrichten von Schulungscomputern für Kurs 2316B, Abfragen von Microsoft SQL Server 2000 mit Hilfe von Transact-SQL, angegeben ist.
Einrichten der Übungseinheit Es gibt keine Anforderungen zum Einrichten der Übungseinheit, die die Replikation oder die Anpassung betreffen.
Ergebnisse der Übungseinheit Auf den Kursteilnehmercomputern gibt es keine Konfigurationsänderungen, die die Replikation oder die Anpassung betreffen.
Unterrichtseinheit 8: Abfragen von Volltextindizes
1
Übersicht Inhalt dieser Folie
Geben Sie eine Übersicht über die Themen und Lernziele dieser Unterrichtseinheit.
Einstieg
In dieser Unterrichtseinheit lernen Sie den Microsoft Search-Dienst kennen und erfahren, wie Volltextindizes abgefragt werden.
!
Einführung in den Microsoft Search-Dienst
!
Komponenten des Microsoft Search-Dienstes
!
Zusammenstellen von Informationen zu Volltextindizes
!
Schreiben von Volltextabfragen
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Sie können in Microsoft® SQL Server™ Volltextabfragen für Nur-Text-Daten ausführen, einschließlich Wörtern, Ausdrücken und mehreren Formen eines Wortes oder eines Ausdrucks. Sie implementieren die Volltextsuchfunktion von SQL Server mit dem Microsoft Search-Dienst. Am Ende dieser Unterrichtseinheit werden Sie in der Lage sein, die folgenden Aufgaben auszuführen: !
Beschreiben der Funktionen und Komponenten des Microsoft SearchDienstes.
!
Zusammenstellen von Informationen zu Volltextindizes.
!
Schreiben von Volltextabfragen.
2
Unterrichtseinheit 8: Abfragen von Volltextindizes
Einführung in den Microsoft Search-Dienst Inhalt dieser Folie
Erläutern Sie das Konzept des Microsoft SearchDienstes in Bezug auf SQL Server.
!
Textbasiertes Suchen in SQL Server 2000 "
Einstieg
Mit dem Microsoft SearchDienst können Sie jetzt zeichenbasierte Daten in Tabellen mit einer Volltextsuche abfragen.
"
!
Komplexe Suchen auf unstrukturierten Textdaten nach Wörtern und Ausdrücken Umfassender als LIKE-Operator und Platzhalter
Verfügbarkeit in anderen Microsoft-Produkten "
Indexdienst, Exchange 2000, Commerce Server
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Mit dem Microsoft Search-Dienst können Sie jetzt zeichenbasierte Daten in Tabellen mit einer Volltextsuche abfragen. Bei einer Volltextabfrage wird in den zeichenbasierten Spalten (vom Datentyp char, varchar, text, ntext, nchar oder nvarchar) nach Wörtern, Ausdrücken oder mehreren Formen eines Wortes oder Ausdrucks gesucht.
Textbasiertes Suchen in SQL Server 2000 SQL Server enthielt schon immer ein Feature zum Abrufen von Text auf der Grundlage eines Mustervergleichs mit dem LIKE-Operator und mit Platzhaltern. Mit Hilfe des Microsoft Search-Dienstes können Sie nun komplexere Suchen erstellen. Mit einer Volltextabfrage können Sie eine linguistische Suche nach Zeichendaten in Tabellen durchführen. Bei einer linguistischen Suche werden Wörter und Ausdrücke verwendet, und es wird Ihnen so ermöglicht, nach ähnlichen Wörtern oder Ausdrücken, verschiedenen Formen eines Wortes oder nach nah beieinander stehenden Zielwörtern zu suchen.
Verfügbarkeit in anderen Microsoft-Produkten Der Microsoft Search-Dienst ist auch im Lieferumfang der folgenden Produkte enthalten: !
Microsoft Indexdienst
!
Microsoft Exchange 2000
!
Microsoft Commerce Server
Unterrichtseinheit 8: Abfragen von Volltextindizes
3
Komponenten des Microsoft Search-Dienstes Inhalt dieser Folie
Stellen Sie die Komponenten der Volltextsuche vor.
!
Einstieg
Strukturen des Search-Dienstes "
Der Microsoft Search-Dienst speichert Informationen zu Volltextdaten in Strukturen außerhalb von SQL Server. "
!
Volltextindex Verfolgt die wesentlichen Wörter einer Tabelle Erfordert eine Spalte mit einem eindeutigen Schlüssel oder einen Primärschlüssel Volltextkatalog Ist eine Zusammenstellung von Volltextindizes
Funktionen des Search-Dienstes "
Indizieren
"
Abfragen
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Der Microsoft Search-Dienst speichert Informationen zu Volltextdaten in Strukturen außerhalb von SQL Server.
Strukturen des Search-Dienstes SQL Server verwendet zwei Strukturen zum Nachverfolgen von Spalten, die für die Volltextsuche aktiviert sind. Diese Strukturen werden verwendet, um mit dem Microsoft Search-Dienst zum Erstellen von Indizes und zum Verarbeiten von Abfragen zu kommunizieren. Der Microsoft Search-Dienst verwendet zwei Strukturen zum Implementieren der Volltextsuche: Volltextindex und Volltextkatalog.
Volltextindex Bei einem Volltextindex handelt es sich um einen Index, der die wesentlichen Wörter einer Tabelle sowie deren Position verfolgt. Diese Indexstruktur unterstützt eine effiziente Suche nach allen Elementen, die indizierte Wörter enthalten, sowie erweiterte Suchoperationen, wie die Suche nach Ausdrücken und die NEAR-Suche. Die wichtigste Entwurfsanforderung für eine Volltextindizierung, für Volltextabfragen und für eine Volltextsynchronisierung ist das Vorhandensein einer Spalte mit einem eindeutigen Schlüssel (oder eines einspaltigen Primärschlüssels) in allen Tabellen, die für eine Volltextsuche registriert sind. Anmerkung Volltextindizes unterscheiden sich von SQL Server-Indizes, die durch die SQL Server-Datenbank gesteuert werden, in der sie definiert sind.
4
Unterrichtseinheit 8: Abfragen von Volltextindizes
Volltextkatalog Der Volltextkatalog ist der Speicherort für die Volltextindizes. Hierbei handelt es sich um ein Verzeichnis des NTFS-Dateisystems, auf das nur der Microsoft Windows NT®-Administrator und der Microsoft Search-Dienst zugreifen können. Die Volltextindizes sind in Volltextkatalogen organisiert. Normalerweise werden die Volltextindexdaten für eine komplette Datenbank in einem einzigen Volltextkatalog gespeichert. Administratoren haben jedoch die Möglichkeit, die Volltextindexdaten für eine Datenbank auf mehrere Volltextkataloge aufzuteilen. Dies ist besonders hilfreich, wenn eine große Anzahl von Zeilen in einer oder mehreren volltextindizierten Tabellen enthalten ist.
Funktionen des Search-Dienstes Der Microsoft Search-Dienst hat zwei Hauptfunktionen: Erstellen und Verwalten von Volltextindizes und Verwenden der Indizes zum Verarbeiten von Abfragen.
Indizieren Der Microsoft Search-Dienst erstellt und verwaltet Volltextindizes für Tabellen, die für Volltextindizierung eingerichtet sind. Er durchläuft die Zeilen der Tabelle und extrahiert Schlüsselwörter aus den für die Volltextsuche angegebenen Spalten. Die Werte werden in Betriebssystemdateien gespeichert und in Volltextkatalogen organisiert. Damit Sie für eine Tabelle einen Volltextindex erstellen können, muss für die Tabelle ein eindeutiger Index definiert sein.
Abfragen Der Microsoft Search-Dienst verarbeitet Volltextsuchabfragen. Er ermittelt, welche Einträge im Index die Volltextauswahlkriterien erfüllen. Für jeden Eintrag, der den Auswahlkriterien entspricht, gibt der Dienst die Zeilen-ID sowie einen Rangfolgenwert an den SQL Server-Dienst zurück, der mit Hilfe dieser Informationen das Resultset der Abfrage erstellt. Beim Verarbeiten einer Volltextabfrage gibt das Suchmodul die Schlüsselwerte der Zeilen, die den Suchkriterien entsprechen, an SQL Server zurück.
Unterrichtseinheit 8: Abfragen von Volltextindizes
5
Zusammenstellen von Informationen zu Volltextindizes Inhalt dieser Folie
Erläutern Sie, wie Informationen zur Volltextsuche zusammengestellt werden können.
!
Einstieg
Sie können Informationen zur Volltextsuche zusammenstellen.
!
Verwenden von gespeicherten Systemprozeduren "
sp_help_fulltext_catalogs
"
sp_help_fulltext_tables
"
sp_help_fulltext_columns
Verwenden von Transact-SQL-Funktionen "
Verwenden von Transact-SQL-Funktionen, die Informationen über Volltexteigenschaften abfragen
USE USE Northwind Northwind SELECT SELECT DATABASEPROPERTY('Northwind','IsFullTextEnabled') DATABASEPROPERTY('Northwind','IsFullTextEnabled') GO GO
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Sie können Informationen zur Volltextsuche zusammenstellen, indem Sie gespeicherte Systemprozeduren für Volltext, Transact-SQL-Funktionen und SQL Server Enterprise Manager verwenden. Sie können Metadaten und Statusinformationen für jede Ebene (Datenbank, Katalog, Tabelle und Spalte) abrufen.
Verwenden von gespeicherten Systemprozeduren Mit den in der folgenden Tabelle angegebenen gespeicherten Systemprozeduren für Volltext können Sie Informationen zu Volltextindizes zusammenstellen. Gespeicherte Prozedur
Funktion
sp_help_fulltext_catalogs
Gibt ID, Name, Stammverzeichnis, Status und Anzahl der volltextindizierten Tabellen für den angegebenen Volltextkatalog zurück.
sp_help_fulltext_tables
Gibt eine Liste von Tabellen zurück, die für die Volltextindizierung aktiviert sind.
sp_help_fulltext_columns
Gibt die Spalten zurück, die für die Volltextindizierung aktiviert sind.
6
Unterrichtseinheit 8: Abfragen von Volltextindizes
Verwenden von Transact-SQL-Funktionen Sie können auch mit Hilfe von Transact-SQL-Funktionen die Werte von Volltexteigenschaften abfragen. In der folgenden Tabelle sind häufig verwendete Eigenschaftswerte aufgelistet, die Sie verwenden können, um Informationen zur Volltextsuche zu erhalten. Funktion
Eigenschaftswert
Beschreibung der Eigenschaft
COLUMNPROPERTY
IsFullTextIndexed
Gibt an, dass eine Spalte für die Volltextsuche aktiviert ist.
DATABASEPROPERTY
IsFullTextEnabled
Gibt an, dass eine Datenbank für die Volltextsuche aktiviert ist.
INDEXPROPERTY
IsFulltextKey
Gibt an, dass der Index von Microsoft Search-Dienst verwendet wird.
OBJECTPROPERTY
TableHasActiveFulltextIndex
Gibt an, dass eine Tabelle für die Volltextsuche aktiviert ist.
FULLTEXTCATALOGPROPERTY
PopulateStatus
Gibt den aktuellen Status eines Microsoft Search-Katalogs zurück.
ItemCount
Gibt die Anzahl der Einträge in einem Microsoft Search-Katalog zurück.
IndexSize
Gibt die Größe des Volltextindexes in MB zurück.
UniqueKeyCount
Gibt die ungefähre Anzahl der Nichtfüllwörter zurück, die in einem Microsoft Search-Katalog eindeutig adressiert werden können.
LogSize
Gibt die Größe des letzten Volltextindexes in MB zurück.
PopulateCompletionAge
Gibt das aktuellste Datum und die aktuellste Uhrzeit zurück, an dem bzw. zu der der Microsoft Search-Katalog, auf den verwiesen wird, aktualisiert wurde.
ResourceUsage
Gibt eine relative Prioritätseinstellung der Betriebssystemausführung für den Microsoft Search-Dienst an.
IsFullTextInstalled
Gibt eine erfolgreiche Installation auf einem Organisationsserver an, auf dem SQL Server ausgeführt wird.
FULLTEXTSERVICEPROPERTY
Beispiel
Mit Hilfe der IsFullTextEnabled-Eigenschaft wird ermittelt, ob für die Northwind-Datenbank die Volltextabfrage aktiviert ist. USE Northwind SELECT DATABASEPROPERTY('Northwind', 'IsFullTextEnabled') GO
Wenn der Wert 1 zurückgegeben wird, ist die Northwind-Datenbank für die Volltextabfrage aktiviert. Der Wert 0 zeigt an, dass die Northwind-Datenbank nicht für die Volltextabfrage aktiviert ist.
Unterrichtseinheit 8: Abfragen von Volltextindizes
7
# Schreiben von Volltextabfragen Inhalt dieser Folie
Erläutern Sie, wie Volltextabfragen geschrieben werden.
!
CONTAINS-Prädikat
Einstieg
!
FREETEXT-Prädikat
!
Funktionen CONTAINSTABLE und FREETEXTTABLE
!
Verwenden von Volltextschlüsselwörtern
Mit einer Volltextabfrage können Sie eine linguistische Suche nach Zeichendaten in Tabellen durchführen, die für die Volltextsuche aktiviert sind.
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Methodischer Hinweis
Die neuen Transact-SQLErweiterungen entsprechen der funktionalen ISO SQL-3Methodik für Volltextsyntaxerweiterungen.
Mit einer Volltextabfrage können Sie eine linguistische Suche nach Zeichendaten in Tabellen durchführen, die für die Volltextsuche aktiviert sind. Der Microsoft Search-Dienst unterstützt zusätzliche Suchprädikate und -funktionen, die die Funktionalität von Transact-SQL erweitern. Diese Syntaxelemente sind identisch mit den für den Microsoft Search-Dienst in den OLE DB-Providern für Microsoft Index Server, Version 2.0, und Microsoft Site Server, Version 3.0, verwendeten Elementen. Die Transact-SQL-Erweiterungen für Volltext entsprechen der funktionalen ISO SQL-3-Methodik (International Standards Organization) für Volltextsyntaxerweiterungen. Es handelt sich um folgende Syntaxelemente: !
Das CONTAINS-Prädikat
!
Das FREETEXT-Prädikat
!
Die CONTAINSTABLE-Funktion
!
Die FREETEXTTABLE-Funktion
Anmerkung Suchprädikate sind Transact-SQL-Anweisungen, mit denen das Resultset auf eine Abfrage beschränkt wird. Die in einer WHERE-Klausel einer SELECT-Anweisung angewendeten Suchbedingungen dienen als Beispiel.
8
Unterrichtseinheit 8: Abfragen von Volltextindizes
CONTAINS-Prädikat Inhalt dieser Folie
Erläutern Sie, wie das CONTAINS-Prädikat verwendet wird.
!
Flexionsform eines bestimmten Wortes
!
Wort oder Ausdruck, beginnend mit einer angegebenen Zeichenfolge
!
Wort oder Ausdruck, das bzw. der in der Nähe eines anderen Wortes oder Ausdrucks steht
!
Ein oder mehrere spezielle Wörter und Ausdrücke
!
Wörter oder Ausdrücke mit gewichteten Werten
Einstieg
Mit dem CONTAINSPrädikat können Sie nach einem bestimmten Ausdruck suchen.
Beispiel Beispiel 11
SELECT SELECT plant_id, plant_id, common_name, common_name, price price FROM FROM plants plants WHERE WHERE CONTAINS( CONTAINS( *, *, '' "English "English Thyme" Thyme" '' )) GO GO
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Mit dem CONTAINS-Prädikat können Sie nach einem bestimmten Ausdruck suchen. Teilsyntax
Das CONTAINS-Prädikat verwendet eine funktionale Schreibweise, bei der der erste Parameter der Name der durchsuchten Spalte und der zweite Parameter eine Volltextsuchbedingung ist. …WHERE CONTAINS ( {column}, '' ) ::= {| | | | | }
Syntaxelemente für Suchbedingungen Das CONTAINS-Prädikat unterstützt eine komplexe Syntax, um zeichenbasierte Spalten nach Folgendem zu durchsuchen: !
Flexionsform eines bestimmten Wortes (Generierungsbegriff). Angenommen, Sie möchten nach der Flexionsform des Wortes „Ordner“ suchen. Wenn verschiedene Zeilen der Tabelle die Wörter „Ordner“, „Ordners“, „ordnete“, „ordnen“ und „geordnet“ enthalten, werden alle Wörter im Resultset ausgegeben, da jedes dieser Wörter aus dem Wort „Ordner“ durch Flexion generiert werden kann.
!
Ein Wort oder Ausdruck, in dem Wörter mit einer angegebenen Zeichenfolge beginnen (Präfixbegriff). In einem Ausdruck wird jedes darin enthaltene Wort als Präfix betrachtet, wie z. B. der Begriff „auto tran*“, der sowohl mit „automatic transmission“ als auch mit „automobile transducer“ übereinstimmt.
Unterrichtseinheit 8: Abfragen von Volltextindizes !
9
Ein Wort oder Ausdruck, das bzw. der in der Nähe eines anderen Wortes oder Ausdrucks steht (NEAR-Begriff). Sie suchen beispielsweise die Zeilen, in denen sich das Wort „ice“ in der Nähe des Wortes „hockey“ oder in denen sich der Ausdruck „ice skating“ in der Nähe des Ausdrucks „ice hockey“ befindet.
!
Ein oder mehrere spezielle Wörter und Ausdrücke (einfacher Begriff). Ein Wort besteht aus einem oder mehreren Zeichen ohne Leer- oder Satzzeichen. Ein gültiger Ausdruck kann aus mehreren Wörtern mit Leerzeichen und mit oder ohne Satzzeichen dazwischen bestehen. Beispielsweise ist „ice“ ein Wort und „ice skating“ ein Ausdruck. Solche Wörter und Ausdrücke werden als „einfache Begriffe“ bezeichnet. SQL Server entfernt Füllwörter aus den Suchkriterien.
!
Wörter oder Ausdrücke mit gewichteten Werten (gewichteter Begriff). Sie können die Ergebnisse einer Suche in einer bestimmten Rangfolge anzeigen lassen, indem Sie den gewichteten Wert der Wörter oder der Ausdrücke angeben. Abfrageergebnisse, die die höherwertigen Wörter oder Ausdrücke enthalten, werden vor den anderen zurückgegeben.
Ein CONTAINS-Prädikat kann mehrere dieser Begriffe mit Hilfe von AND und OR kombinieren, um z. B. alle Zeilen mit „latte“ und „New York-style bagel“ in derselben volltextfähigen Datenbankspalte zu finden. Außerdem können Begriffe durch AND NOT negiert werden, wie im folgenden Beispiel: bagel AND NOT cream cheese. Anmerkung Bei einer CONTAINS-Suche wird nie nach Groß-/Kleinschreibung unterschieden. Beispiel 1
Die folgende Abfrage gibt plant_id, common_name und price für alle Zeilen zurück, in denen der Ausdruck „English Thyme“ in einer der volltextfähigen Spalten enthalten ist. Wird ein Sternchen (*) anstelle eines Spaltennamens verwendet, werden alle volltextfähigen Spalten der Tabelle durchsucht. SELECT plant_id, common_name, price FROM plants WHERE CONTAINS( *, ' "English Thyme" ' ) GO
Beispiel 2
Die folgende Abfrage gibt Elemente wie „Jean LeDuc has always loved ice hockey“ und „Jean Leduc on Ice - Hockey at Its Best“ aus der Spalte description zurück. SELECT article_id FROM hockey_articles WHERE CONTAINS(description, '"Jean LeDuc" AND "ice hockey"' ) GO
Anmerkung Diese Beispiele dienen nur der Erläuterung und führen zu keinen Ergebnissen.
10
Unterrichtseinheit 8: Abfragen von Volltextindizes
FREETEXT-Prädikat Inhalt dieser Folie
Erläutern Sie, wie das FREETEXT-Prädikat verwendet wird.
!
Suche nach Wörtern, Ausdrücken und Sätzen extrahiert durch die anfängliche Abfrage
!
Weniger präzise als das CONTAINS-Prädikat
Einstieg
Wenn Sie ein FREETEXTPrädikat verwenden, können Sie eine beliebige Reihe von Wörtern oder Ausdrücken oder sogar einen vollständigen Satz eingeben.
SELECT SELECT ** FROM FROM news_table news_table WHERE WHERE FREETEXT( FREETEXT( description, description, '"The Fulton '"The Fulton County County Grand Grand Jury Jury said said Friday Friday an an investigation investigation of of Atlanta‘s Atlanta‘s recent recent primary primary election election produced produced no no evidence evidence that that any any irregularities irregularities took took place."') place."') GO GO
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Wenn Sie das FREETEXT-Prädikat verwenden, können Sie eine beliebige Reihe von Wörtern oder Ausdrücken oder sogar einen vollständigen Satz eingeben. Das Modul zur Volltextabfrage untersucht diesen Text, identifiziert alle signifikanten Wörter und Substantivausdrücke und erstellt intern eine Abfrage mit diesen Begriffen. Das FREETEXT-Prädikat ist weniger präzise als das CONTAINS-Prädikat. Syntax
…WHERE FREETEXT ( {columns | * }, 'free_text' )
Beispiel
Im folgenden Beispiel wird das FREETEXT-Prädikat für die descriptionSpalte verwendet. SELECT * FROM news_table WHERE FREETEXT( description, '"The Fulton County Grand Jury said Friday an investigation of Atlanta‘s recent primary election produced no evidence that any irregularities took place."') GO
Anmerkung Dieses Beispiel dient nur der Erläuterung und führt zu keinen Ergebnissen.
In diesem Beispiel identifiziert das Suchmodul die folgenden Wörter und Ausdrücke mit Substantiven: !
Wörter - Fulton, county, grand, jury, Friday, investigation, Atlanta, recent, primary, election, produce, evidence, irregularities.
!
Ausdrücke - Fulton county grand jury, primary election, grand jury, Atlanta’s recent primary election.
Die Wörter und Ausdrücke werden intern in einer Abfrage kombiniert und für die richtige Rangfolge gewichtet, bevor die eigentliche Suche durchgeführt wird.
Unterrichtseinheit 8: Abfragen von Volltextindizes
11
Funktionen CONTAINSTABLE und FREETEXTTABLE Inhalt dieser Folie
Stellen Sie die Funktionen CONTAINSTABLE und FREETEXTTABLE vor, und vergleichen Sie sie mit den beiden zuvor erläuterten Schlüsselwörtern.
!
Einstieg
Die Funktionen CONTAINSTABLE und FREETEXTTABLE unterscheiden sich geringfügig von den Schlüsselwörtern CONTAINS und FREETEXT.
!
Verwenden von CONTAINSTABLE und FREETEXTTABLE "
Geben Tabelle zurück
"
Geben Spalte zurück, die Volltextschlüsselwerte enthält
"
top_n_by_rank-Argument
Auswählen der Volltextsuchmethode "
"
Verwenden Sie die Prädikate CONTAINS und FREETEXT in jeder Suchbedingung Verwenden Sie die Funktionen CONTAINSTABLE und FREETEXTTABLE in der FROM-Klausel
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Methodischer Hinweis
Weisen Sie darauf hin, dass die Funktionen CONTAINSTABLE und FREETEXTTABLE in Wirklichkeit eine abgeleitete Tabelle erstellen.
Teilsyntax
Die Funktionen CONTAINSTABLE und FREETEXTTABLE unterscheiden sich geringfügig von den Prädikaten CONTAINS und FREETEXT. Die Funktionen CONTAINSTABLE und FREETEXTTABLE erstellen im Wesentlichen eine abgeleitete Tabelle.
Verwenden von CONTAINSTABLE und FREETEXTTABLE Die Funktionen CONTAINSTABLE und FREETEXTTABLE funktionieren ähnlich wie ihre entsprechenden Suchbedingungen, CONTAINS und FREETEXT. Sie geben jedoch eine Tabelle mit null, einer oder mehr Zeilen für Spalten zurück, die zeichenbasierte Datentypen enthalten. Außerdem kann auf die Funktionen CONTAINSTABLE und FREETEXTTABLE in der FROMKlausel einer SELECT-Anweisung so verwiesen werden, als handele es sich um reguläre Tabellennamen. CONTAINSTABLE ( table , { column | * } , ' < contains_search_condition > ' [ , top_n_by_rank ] ) Die CONTAINSTABLE-Funktion verwendet die gleichen Suchbedingungen wie das CONTAINS-Prädikat.
Teilsyntax
FREETEXTTABLE ( table , { column | * } , 'freetext_string' [ , top_n_by_rank ]) Berücksichtigen Sie beim Arbeiten mit diesen Funktionen die folgenden Aspekte und Richtlinien: !
Da CONTAINSTABLE und FREETEXTTABLE jeweils eine Tabelle von null, einer oder mehr Zeilen zurückgeben, müssen sie immer in einer FROM-Klausel angegeben werden.
!
CONTAINSTABLE und FREETEXTTABLE werden auch zum Angeben von Auswahlkriterien verwendet. In der zurückgegebenen Tabelle gibt es eine Spalte namens key, die Volltextschlüsselwerte enthält.
12
Unterrichtseinheit 8: Abfragen von Volltextindizes
Jede volltextfähige Tabelle enthält eine Spalte, deren Werte immer eindeutig sind. Die in der key-Spalte zurückgegebenen Werte sind die Volltextschlüsselwerte der Zeilen, die den in der Volltextsuchbedingung angegebenen Auswahlkriterien entsprechen. !
In der durch CONTAINSTABLE und FREETEXTTABLE erzeugten Tabelle gibt es eine Spalte namens rank, die Werte zwischen 0 und 1.000 enthält. Mit diesen Werten werden die zurückgegebenen Zeilen in einer Rangfolge angezeigt, die sich danach richtet, wie genau die Zeilen den Auswahlkriterien entsprechen. Sie haben keinen Vergleichswert außerhalb des Resultsets.
Tipp Geben Sie eine ganze Zahl für das top_n_by_rank-Argument an, damit nur n Übereinstimmungen mit den höchsten Rangfolgewerten in absteigender Reihenfolge zurückgegeben werden.
Auswählen der Volltextsuchmethode Obwohl die zum Angeben der Volltextsuchbedingung verwendete TransactSQL-Anweisung in den Prädikaten und Funktionen identisch ist, gibt es wichtige Unterschiede in Bezug auf die Art und Weise, in der sie verwendet werden sollten. !
Verwenden Sie die Prädikate CONTAINS und FREETEXT in jeder Suchbedingung (einschließlich einer WHERE-Klausel) einer SELECTAnweisung.
!
Verwenden Sie die Funktionen CONTAINSTABLE und FREETEXTTABLE in der FROM-Klausel einer SELECT-Anweisung.
Abfragen, bei denen die Funktionen CONTAINSTABLE und FREETEXTTABLE verwendet werden, sind komplexer als Abfragen, bei denen die Schlüsselwörter CONTAINS und FREETEXT verwendet werden. Sie müssen die von den Funktionen zurückgegebenen kennzeichnenden Zeilen explizit mit den Zeilen in der ursprünglichen SQL Server-Tabelle verknüpfen.
Unterrichtseinheit 8: Abfragen von Volltextindizes
13
Verwenden von Volltextschlüsselwörtern Inhalt dieser Folie
Beschreiben Sie, wie Volltextschlüsselwörter mit anderen Transact-SQLPrädikaten kombiniert werden.
Einstieg
Sie können Volltextschlüsselwörter auch mit anderen Transact-SQLAnweisungen verwenden.
Prädikate Prädikate CONTAINS CONTAINS und und FREETEXT FREETEXT USE USE Northwind Northwind SELECT SELECT Description Description FROM FROM Categories Categories WHERE WHERE CategoryName CategoryName 'Seafood‘ 'Seafood‘ AND AND CONTAINS(Description, CONTAINS(Description, '' sauces sauces AND AND seasonings seasonings ') ') GO GO
CONTAINS in einer Unterabfrage
CONTAINS in einer Unterabfrage USE USE pubs pubs SELECT T.title, P.pub_name SELECT T.title, P.pub_name FROM FROM publishers publishers AS AS PP INNER INNER JOIN JOIN titles titles AS AS TT ON ON P.pub_id P.pub_id == I.pub_id I.pub_id WHERE WHERE P.pub_id P.pub_id == (SELECT (SELECT pub_id pub_id FROM FROM pub_info pub_info WHERE WHERE CONTAINS CONTAINS (pr_info, (pr_info, '' moonbeam moonbeam AND AND ontario ontario AND AND "flying "flying saucer" saucer" ')) ')) GO GO
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Sie können die Prädikate CONTAINS und FREETEXT mit allen anderen Transact-SQL-Prädikaten, wie z. B. LIKE und BETWEEN, kombinieren. Sie können sie auch in einer Unterabfrage verwenden. Beispiel 1
Im folgenden Beispiel wird nach Beschreibungen gesucht, die nicht zur Kategorie „Seafood“ gehören und das Wort „sauces“ sowie das Wort „seasonings“ enthalten. USE Northwind GO SELECT Description FROM Categories WHERE CategoryName 'Seafood' AND CONTAINS(Description, ' sauces AND seasonings ') GO
14
Unterrichtseinheit 8: Abfragen von Volltextindizes
Beispiel 2
In diesem Beispiel wird CONTAINS in einer Unterabfrage verwendet. Die Abfrage gibt den title-Wert aller Bücher in der titles-Tabelle der pubs-Datenbank für den Verlag zurück, der in der Nähe der Fliegenden Untertasse („flying saucer“) in Moonbeam, Ontario, ansässig ist. (Die Informationen zum Verlag sind in der Spalte pr_info in der pub_info-Tabelle zu finden. Nur ein Verlag stimmt mit dieser Beschreibung überein.) USE pubs SELECT T.title, P.pub_name FROM publishers AS P INNER JOIN titles AS T ON P.pub_id = T.pub_id WHERE P.pub_id = ( SELECT pub_id FROM Pub_ID WHERE CONTAINS (pr_info, 'moonbeam AND ontario AND "flying saucer"') ) GO
Anmerkung Diese Beispiele dienen nur der Erläuterung und führen zu keinen Ergebnissen.
Unterrichtseinheit 8: Abfragen von Volltextindizes
15
Empfohlene Methoden Inhalt dieser Folie
Besprechen Sie empfohlenen Methoden zum Abfragen von Volltextindizes.
Verwenden Verwenden Sie Sie Volltextindizes Volltextindizes für für die die Datentypen Datentypen „char“, „char“, „nchar“, „nchar“, „nvarchar“, „nvarchar“, „varchar“, „varchar“, „text“, „text“, „ntext“ „ntext“ und und „image“ „image“
Einstieg
Die empfohlenen Methoden sollen Ihnen beim Abfragen von Volltextindizes helfen.
Verwenden Verwenden Sie Sie Volltextindex Volltextindex und und die die Katalogeigenschaften Katalogeigenschaften zur zur Problembehandlung Problembehandlung Verwenden Verwenden Sie Sie das das top_n_by_rank-Argument top_n_by_rank-Argument zur zur Beschränkung Beschränkung der Resultsetgröße der Resultsetgröße
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Die folgenden empfohlenen Methoden sollen Ihnen beim Abfragen von Volltextindizes helfen. !
Verwenden Sie Volltextindizes für Tabellen mit Spalten, die Textdaten enthalten, die Sie abfragen möchten. Dazu gehören Spalten mit den Datentypen char, nchar, nvarchar, varchar, text, ntext und image.
!
Überprüfen Sie den Volltextindex und die Katalogeigenschaften mit Hilfe von Systemfunktionen und gespeicherten Prozeduren, mit denen Sie Probleme bei fragwürdigen Abfrageergebnissen oder -fehlern beheben können. Stellen Sie sicher, dass die Volltextsuche für den Server, die Datenbank und die Tabelle, die Sie abfragen, aktiviert ist.
!
Verwenden Sie für die Funktionen CONTAINSTABLE und FREETEXTTABLE das top_n_by_rank-Argument, um die Anzahl von zurückgegebenen Reihen zu beschränken.
Zusätzliche Informationen zu den folgenden Themen erhalten Sie in der SQL Server-Onlinedokumentation. Thema
Suchbegriff
Verwenden der Volltextsuche
“Architektur von Volltextabfragen” “Volltextkataloge und -indizes”
Volltextabfrage
“Transact-SQL-Komponenten für die Volltextabfrage”
Verwenden von Füllwörtern
“Indexdienst”
16
Unterrichtseinheit 8: Abfragen von Volltextindizes
Übungseinheit A: Abfragen von Volltextindizes Inhalt dieser Folie
Geben Sie eine Einführung in die Übungseinheit.
Einstieg
In dieser Übungseinheit überprüfen Sie den Status eines Volltextindexes und führen eine Abfrage mit Hilfe von Volltextindizes aus.
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Erläutern Sie die Lernziele der Übungseinheit.
Lernziele Am Ende dieser Übungseinheit werden Sie in der Lage sein, die folgenden Aufgaben auszuführen: !
Überprüfen des Status eines Volltextindexes.
!
Schreiben von Volltextabfragen.
Voraussetzungen Um diese Übungseinheit zu bearbeiten, benötigen Sie Folgendes: • Die Antwortdateien für diese Übungseinheit, die sich in C:\Moc\2316B\Labfiles\L08\Answers befinden.
Einrichten der Übungseinheit Um diese Übungseinheit zu bearbeiten, benötigen Sie Folgendes: • Führen Sie die Skriptdatei C:\Moc\2316B\Batches\2316_R08.sql aus. Diese Datei wird normalerweise als Teil der Schulungsraumeinrichtung ausgeführt. Dieses Skript aktiviert den Microsoft Search-Dienst und erstellt einen Volltextindex für die Products.Productname-Spalte der NorthwindDatenbank. Wenn der Volltextindex bereits existiert, muss er vor dem erneuten Erstellen zunächst gelöscht werden.
Weitere Informationen Wenn Sie Hilfe bei der Ausführung von Dateien benötigen, suchen Sie in der Hilfe von SQL Query Analyzer nach „Ausführen einer Abfrage“.
Unterrichtseinheit 8: Abfragen von Volltextindizes
17
Daneben sind die folgenden Informationsquellen verfügbar: !
Das Northwind-Datenbankschema.
!
Die SQL Server-Onlinedokumentation.
Szenario Der Aufbau des Schulungsraumes soll die Organisation des weltweit agierenden Handelsunternehmens Northwind Traders widerspiegeln. Das Unternehmen hat den fiktiven Domänennamen ist nwtraders.msft. Der primäre DNS-Server für nwtraders.msft ist der Kursleitercomputer, der die Internetprotokolladresse (IP-Adresse) 192.168.x.200 besitzt (wobei x die zugewiesene Schulungsraumnummer ist). Der Name des Kursleitercomputers ist London. Die folgende Tabelle stellt den Benutzernamen, den Computernamen und die IP-Adresse für jeden Kursteilnehmercomputer in der fiktiven Domäne nwtraders.msft bereit. Suchen Sie den Benutzernamen Ihres Computers und notieren Sie ihn. Benutzername
Computername
IP-Adresse
SQLAdmin1
Vancouver
192.168.x.1
SQLAdmin2
Denver
192.168.x.2
SQLAdmin3
Perth
192.168.x.3
SQLAdmin4
Brisbane
192.168.x.4
SQLAdmin5
Lisbon
192.168.x.5
SQLAdmin6
Bonn
192.168.x.6
SQLAdmin7
Lima
192.168.x.7
SQLAdmin8
Santiago
192.168.x.8
SQLAdmin9
Bangalore
192.168.x.9
SQLAdmin10
Singapore
192.168.x.10
SQLAdmin11
Casablanca
192.168.x.11
SQLAdmin12
Tunis
192.168.x.12
SQLAdmin13
Acapulco
192.168.x.13
SQLAdmin14
Miami
192.168.x.14
SQLAdmin15
Auckland
192.168.x.15
SQLAdmin16
Suva
192.168.x.16
SQLAdmin17
Stockholm
192.168.x.17
SQLAdmin18
Moscow
192.168.x.18
SQLAdmin19
Caracas
192.168.x.19
SQLAdmin20
Montevideo
192.168.x.20
SQLAdmin21
Manila
192.168.x.21
SQLAdmin22
Tokyo
192.168.x.22
SQLAdmin23
Khartoum
192.168.x.23
SQLAdmin24
Nairobi
192.168.x.24
Veranschlagte Zeit für die Übungseinheit: 60 Minuten
18
Unterrichtseinheit 8: Abfragen von Volltextindizes
Übung 1 Abrufen von Informationen über Volltextindizes In dieser Übung erstellen Sie einen Volltextkatalog und Volltextindizes, damit Sie den Microsoft Search-Dienst für eine oder mehrere Spalten verwenden können. C:\Moc\2316B\Labfiles\L08\Answers enthält vollständige Skripts für diese Übung.
! So verwenden Sie Transact-SQL zum Abrufen von Informationen zu Volltextindizes
In diesem Verfahren richten Sie den Microsoft Search-Dienst für die Northwind-Datenbank mit Hilfe des Volltextindizierungs-Assistenten ein. Answer_FullText1.sql ist ein vollständiges Skript für dieses Verfahren. 1. Melden Sie sich an der Schulungsdomäne nwtraders mit Hilfe der Informationen in der folgenden Tabelle an. Option
Eingabe
Benutzername
SQLAdminx (wobei x die Ihrem Computernamen zugewiesene Nummer ist, wie in der Schulungsraumdomäne nwtraders.msft festgelegt)
Kennwort
password
2. Öffnen Sie SQL Query Analyzer, und melden Sie sich, wenn Sie dazu aufgefordert werden, mittels Microsoft Windows®-Authentifizierung am (lokalen) Server an. Sie verfügen über die Berechtigung, sich bei SQL Server anzumelden und SQL Server zu verwalten, da Sie als SQLAdminx angemeldet sind, und SQLAdminx ein Mitglied der lokalen Windows 2000-Gruppe Administratoren ist. Alle Mitglieder dieser Gruppe werden automatisch der SQL Server-Rolle sysadmin zugeordnet. 3. Führen Sie die folgende Anweisung aus, um zu ermitteln, ob das Feature Volltextsuche auf dem SQL Server-Computer installiert ist: USE Northwind SELECT fulltextserviceproperty('IsFullTextInstalled') GO
4. Führen Sie die folgende Anweisung aus, um zu ermitteln, ob die Volltextsuche für die Northwind-Datenbank aktiviert ist: USE Northwind SELECT databaseproperty('Northwind', 'IsFullTextEnabled') GO
5. Führen Sie die folgende gespeicherte Systemprozedur zum Auflisten der Tabellen aus, für die die Volltextsuche aktiviert ist: USE Northwind EXEC sp_help_fulltext_tables GO
Unterrichtseinheit 8: Abfragen von Volltextindizes
6. Führen Sie die folgende gespeicherte Systemprozedur zum Auflisten der Spalten aus, für die Volltextsuchindizes erstellt wurden: USE Northwind EXEC sp_help_fulltext_columns GO
19
20
Unterrichtseinheit 8: Abfragen von Volltextindizes
Übung 2 Schreiben von Volltextabfragen In dieser Übung schreiben Sie Volltextabfragen für einen Volltextindex und führen die Abfragen aus, um nach bestimmten Wörtern und Ausdrücken in der Northwind-Datenbank zu suchen. C:\Moc\2316B\Labfiles\L08\Answers enthält vollständige Skripts für diese Übung.
! So suchen Sie nach dem Wort „St. Andrews“, das in der Spalte „Employees.Notes“ in der Nähe des Wortes „Scotland“ steht
In diesem Verfahren schreiben Sie Volltextabfragen mit SELECT-Anweisungen, in denen die Suchfunktionen CONTAINS und FREETEXT verwendet werden. Anschließend führen Sie die Abfragen aus. Answer_FullText2.sql ist ein vollständiges Skript für dieses Verfahren. 1. Schreiben Sie eine SELECT-Anweisung mit der Suchfunktion CONTAINS, die die Spalten LastName, Title, HireDate und Notes aus der Tabelle Employees auswählt, in der die Spalte Employees.Notes das Wort „St. Andrews“ enthält, das in der Nähe des Wortes „Scotland“ steht. USE Northwind SELECT LastName, Title, HireDate, Notes FROM employees WHERE CONTAINS(notes, '"St. Andrews" NEAR() "Scotland"') GO
2. Führen Sie die Abfrage aus, um zu überprüfen, ob sie eine einzige Zeile zurückgibt.
! So suchen Sie in der „Employees.Notes“-Spalte nach allen Formen des Wortes „sale“
In diesem Verfahren suchen Sie in der Employees.Notes-Spalte nach allen Formen des Wortes „sale“. Answer_FullText3.sql ist ein vollständiges Skript für dieses Verfahren. 1. Schreiben Sie eine SELECT-Anweisung mit der Suchfunktion CONTAINS, die die Spalten LastName, Title, HireDate und Notes aus der Tabelle Employees auswählt, in der die Employees.Notes-Spalte alle Formen des Wortes „sale“ enthält. Answer_FullText3.sql ist ein vollständiges Skript für dieses Verfahren. USE Northwind SELECT LastName, Title, HireDate, Notes FROM employees WHERE CONTAINS(notes, 'FORMSOF(INFLECTIONAL, "sale")') GO
2. Führen Sie die Abfrage aus, um zu überprüfen, ob sie vier Zeilen zurückgibt.
Unterrichtseinheit 8: Abfragen von Volltextindizes
21
! So suchen Sie in der „Employees.Notes“-Spalte nach den Wörtern „cold“ und „toast“
In diesem Verfahren suchen Sie in der Employees.Notes-Spalte nach den Wörtern „cold“ und „toast“. Answer_FullText4.sql ist ein vollständiges Skript für dieses Verfahren. 1. Schreiben Sie eine SELECT-Anweisung mit der Suchfunktion FREETEXT, die die Spalten LastName, Title, HireDate und Notes aus der EmployeesTabelle auswählt, in der die Employees.Notes-Spalte die Wörter „cold“ und „toast“ enthält. Führen Sie die Anweisung anschließend aus. USE Northwind SELECT LastName, Title, HireDate, Notes FROM employees WHERE FREETEXT (notes, 'cold und toast') GO
2. Führen Sie die Abfrage aus, um zu überprüfen, ob sie eine einzige Zeile zurückgibt.
! So suchen Sie in der „Employees.Notes“-Spalte mit Einträgen zu
Bestellungen, die nach London geliefert wurden, nach den Wörtern „french“ und „university“
In diesem Verfahren suchen Sie in der Employees.Notes-Spalte mit Einträgen zu Bestellungen, die nach London geliefert wurden, nach den Wörtern „french“ und „university“. Answer_FullText5.sql ist ein vollständiges Skript für dieses Verfahren. 1. Schreiben Sie eine SELECT-Anweisung mit der Suchfunktion CONTAINS, die die eindeutigen Zeilen auswählt, die die Spalten LastName, Title und HireDate aus der Employees-Tabelle anzeigt, in der die Employees.notesSpalte die Wörter „french“ und „university“ enthält. Die Employees.notesSpalte enthält Einträge zu Bestellungen für London, die der Angestellte entgegengenommen hat. USE Northwind SELECT DISTINCT LastName, Title, HireDate FROM employees AS e INNER JOIN Orders as o ON e.EmployeeID = o.EmployeeID WHERE ShipCity = 'London' AND CONTAINS (notes, 'french and university') GO
2. Führen Sie die Abfrage aus, um zu überprüfen, ob sie vier Zeilen zurückgibt.
22
Unterrichtseinheit 8: Abfragen von Volltextindizes
! So verknüpfen Sie eine abgeleitete Tabelle, in der in den Einträgen zu Bestellungen, die nach London geliefert wurden, nach dem Wort „sales“ gesucht wird, das in der Nähe des Wortes „manager“ steht
In diesem Verfahren verknüpfen Sie eine abgeleitete Tabelle, in der in den Einträgen zu Bestellungen, die nach London geliefert wurden, nach dem Wort „sales“ gesucht wird, das in der Nähe des Wortes „manager“ steht. Answer_FullText6.sql ist ein vollständiges Skript für dieses Verfahren. 1. Schreiben Sie eine SELECT-Anweisung, die die OrderID und die EmployeeID aus der Orders-Tabelle anzeigt. Dabei sollen die FreetextSuchergebnisse in absteigender Reihenfolge beginnend mit der genauesten Übereinstimmung angezeigt werden. Es wird in der Notes-Spalte der Employees-Tabelle nach dem Wort „sales“ gesucht, das in der Nähe des Wortes „manager“ steht. USE Northwind SELECT [RANK], OrderID, EmployeeID FROM Orders AS o INNER JOIN CONTAINSTABLE (Employees, notes, '"sales" NEAR() "manager"') AS e ON o.EmployeeID = e.[KEY] WHERE ShipCity = 'London' ORDER BY [RANK] DESC GO
2. Führen Sie die Abfrage aus, um zu überprüfen, ob sie sechs Zeilen zurückgibt.
Unterrichtseinheit 8: Abfragen von Volltextindizes
23
Lernzielkontrolle Inhalt dieser Folie
Vertiefen Sie die Lernziele dieser Unterrichtseinheit, indem Sie die Kernpunkte wiederholen.
Einstieg
Die Fragen zur Lernzielkontrolle beziehen sich auf einige der Schlüsselkonzepte, die Inhalt dieser Unterrichtseinheit sind.
!
Einführung in den Microsoft Search-Dienst
!
Komponenten des Microsoft Search-Dienstes
!
Zusammenstellen von Informationen zu Volltextindizes
!
Schreiben von Volltextabfragen
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** 1. Warum sollten Sie die Volltextsucherweiterungen anstelle der standardmäßigen Transact-SQL-Syntax zum Abfragen von Textdaten verwenden? Die standardmäßige Transact-SQL-Syntax gibt nur Mustervergleiche für Textfelder zurück, und es können keine regulären Indizes genutzt werden. Volltextabfragen sind für Wortübereinstimmungen und für die NEAR-Suche indiziert und optimiert.
2. Sie führen eine Volltextsuchabfrage aus, und es wird ein leeres Recordset für Ergebnisse zurückgegeben. Sie wissen, dass die Tabelle Daten enthält, die übereinstimmen sollten. Was ist zu tun? Ermitteln Sie den Zeitpunkt, zu dem der Volltextindex zuletzt aktualisiert wurde, indem Sie den Eigenschaftswert „PopulateCompletionAge“ untersuchen. Überprüfen Sie auch die „PopulateStatus“-Einstellung und die „ItemCount“-Einstellung für die entsprechenden Werte.
3. Sie möchten den Inhalt der garden description-Spalte für alle Formen des Wortes „cultivate“ durchsuchen, die in der Nähe des Wortes „roses“ stehen. Welche Schlüsselwörter würden Sie in Ihrer SELECT-Anweisung zum Erstellen dieser Suche verwenden? CONTAINS, FORMSOF und NEAR.
24
Unterrichtseinheit 8: Abfragen von Volltextindizes
4. In Ihrem Resultset möchten Sie eine Rangfolge erstellen. Welche Form von CONTAINS verwenden Sie dazu? CONTAINSTABLE
5. Welches Tabellenmerkmal ist beim Erstellen eines neuen Projekts und beim Laden der Datenbankstruktur oder beim Einfügen einer neuen Tabelle in ein bestehendes Projekt erforderlich, um die semantischen Beziehungen für eine Tabelle zu definieren? Für alle Tabellen ist ein definierter Primärschlüssel erforderlich.
Unterrichtseinheit 9: Einführung zu Programmierobjekten Inhalt Übersicht
1
Anzeigen des Textes eines Programmierobjekts
2
Einführung zu Sichten
4
Vorteile von Sichten
6
Erstellen von Sichten
8
Einführung zu gespeicherten Prozeduren
13
Einführung zu Triggern
18
Einführung zu benutzerdefinierten Funktionen
19
Empfohlene Methoden
25
Übungseinheit A: Arbeiten mit Sichten
26
Lernzielkontrolle
33
Die in diesen Unterlagen enthaltenen Angaben und Daten, einschließlich URLs und anderer Verweise auf Internetwebsites, können ohne vorherige Ankündigung geändert werden. Die in den Beispielen genannten Firmen, Organisationen, Produkte, Domänennamen, E-Mail-Adressen, Logos, Personen, Orte und Ereignisse sind frei erfunden und jede Ähnlichkeit mit bestehenden Firmen, Organisationen, Produkten, Domänennamen, E-Mail-Adressen, Logos, Personen, Orten oder Ereignissen ist rein zufällig, soweit nichts anderes angegeben ist. Die Benutzer sind verantwortlich für das Einhalten aller anwendbaren Urheberrechtsgesetze. Unabhängig von der Anwendbarkeit der entsprechenden Urheberrechtsgesetze darf ohne ausdrückliche schriftliche Erlaubnis der Microsoft Corporation kein Teil dieses Dokuments für irgendwelche Zwecke vervielfältigt oder in einem Datenempfangssystem gespeichert oder darin eingelesen werden, unabhängig davon, auf welche Art und Weise oder mit welchen Mitteln (elektronisch, mechanisch, durch Fotokopieren, Aufzeichnen, usw.) dies geschieht. Microsoft Corporation kann Inhaber von Patenten oder Patentanträgen, Marken, Urheberrechten oder anderen gewerblichen Schutzrechten sein, die den Inhalt dieses Dokuments betreffen. Die Bereitstellung dieses Dokuments gewährt keinerlei Lizenzrechte an diesen Patenten, Marken, Urheberrechten oder anderen gewerblichen Schutzrechten, es sei denn, dies wurde ausdrücklich durch einen schriftlichen Lizenzvertrag mit der Microsoft Corporation vereinbart. 2001 Microsoft Corporation. Alle Rechte vorbehalten. Microsoft, BackOffice, MS-DOS, PowerPoint, Visual Studio, Windows, Windows Media und Windows NT sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Die in diesem Dokument aufgeführten Namen tatsächlicher Firmen und Produkte sind möglicherweise Marken der jeweiligen Eigentümer.
Unterrichtseinheit 9: Einführung zu Programmierobjekten
iii
Hinweise für den Kursleiter Präsentation: 60 Minuten Übungseinheit: 30 Minuten
Diese Unterrichtseinheit beschreibt die Erstellung von Programmierobjekten, die es dem Benutzer ermöglichen, Daten anzuzeigen und zu bearbeiten, ohne dass er die Komplexität der zugrunde liegenden Datenbankstruktur kennen muss. Die Unterrichtseinheit umfasst eine Einführung zu den Programmierobjekten, wie Sichten, gespeicherte Prozeduren, Trigger und benutzerdefinierte Funktionen, und beschreibt die Vorteile, die sich durch ihre Verwendung ergeben. Am Ende dieser Unterrichtseinheit werden die Kursteilnehmer in der Lage sein, die folgenden Aufgaben auszuführen: !
Anzeigen des Textes eines Programmierobjekts.
!
Beschreiben des Sichtenkonzepts.
!
Auflisten der Vorteile der Verwendung von Sichten.
!
Erstellen von Sichten.
!
Beschreiben gespeicherter Prozeduren.
!
Beschreiben der Trigger.
!
Beschreiben benutzerdefinierter Funktionen.
Unterlagen und Vorbereitung In diesem Abschnitt werden die erforderlichen Unterlagen und vorbereitenden Aufgaben erläutert, die nötig sind, um diese Unterrichtseinheit zu unterrichten.
Erforderliche Unterlagen Um diese Unterrichtseinheit zu unterrichten, benötigen Sie folgende Unterlagen: !
Die Microsoft® PowerPoint®-Datei 2316B_09.ppt
!
Die Beispieldatei C:\Moc\2316B\Demo\Ex_09.sql, die alle Beispielskripts der Unterrichtseinheit enthält, soweit in der Unterrichtseinheit nichts anderes angegeben ist.
Vorbereitende Aufgaben Zur Vorbereitung dieser Unterrichtseinheit gehen Sie folgendermaßen vor: !
Lesen Sie alle Unterlagen.
!
Arbeiten Sie die Übungseinheit durch.
iv
Unterrichtseinheit 9: Einführung zu Programmierobjekten
Strategie für die Unterrichtseinheit Verwenden Sie die folgende Strategie, um diese Unterrichtseinheit zu präsentieren: !
Die library-Datenbank wurde während der Installation des Kurses zufallsgesteuert aufgefüllt. Dies führt bei einigen Abfagen zu nicht vorhersagbaren Ergebnissen. Dies ist der Grund für Angaben wie „Es kommt zu etwa diesen Ergebnissen“.
!
Anzeigen des Textes eines Programmierobjekts Geben Sie eine Einführung zur gespeicherten Systemprozedur sp_helptext.
!
Einführung zu Sichten Beschreiben Sie das Sichtenkonzept. Betonen Sie, dass Sichten nichts anderes als gespeicherte Abfragen sind.
!
Vorteile von Sichten Listen Sie die Vorteile der Verwendung von Sichten auf.
!
Erstellen von Sichten Sichten ermöglichen das Speichern einer vordefinierten Abfrage als ein Objekt in der Datenbank, um es zu einem späteren Zeitpunkt zu verwenden. Sie bieten eine einfache Möglichkeit, vertrauliche Daten zu schützen oder die Komplexität einer Datenbankstruktur zu verbergen und Informationen bereitzustellen, ohne dass der Benutzer Transact-SQL-Anweisungen schreiben und ausführen muss. Erläutern Sie, wie Sichten erstellt, geändert und gelöscht werden. Weisen Sie darauf hin, dass es besonders wichtig ist, die Anweisung zum Erstellen der Sicht zu testen, bevor die Sicht tatsächlich damit erstellt wird. Besprechen Sie die Einschränkungen und Richtlinien, die von den Benutzern beachtet werden müssen. Beschreiben Sie, wie die Sichtdefinition verschlüsselt werden kann. Listen Sie die Systemtabellen mit den Sichtdefinitionsinformationen auf.
!
Einführung zu gespeicherten Prozeduren Dieser Abschnitt gibt eine Einführung zu gespeicherten Prozeduren und beschreibt, wie Anwendungsentwurf und -leistung mit Hilfe gespeicherter Prozeduren verbessert werden können, indem Geschäftregeln zum Verarbeiten allgemeiner Abfragen und Datenänderungen zusammengefasst werden. Weisen Sie darauf hin, dass in diesem Abschnitt die Funktion und die Vorteile der Verwendung von gespeicherten Prozeduren erläutert werden. Betonen Sie, dass dabei auf die Funktionsweise gespeicherter Prozeduren nicht im Einzelnen eingegangen wird. Geben Sie einen Überblick über die Elemente einer gespeicherten Prozedur. Da die Kursteilnehmer im Rahmen dieses Kurses bereits gespeicherte Systemprozeduren ausgeführt haben, sollte ihnen deren Funktionsweise bekannt sein. Betonen Sie, dass die Hauptaufgabe in diesem Abschnitt darin besteht, gespeicherte Prozeduren zu erstellen, die in der lokalen Datenbank eines Benutzers definiert sind.
Unterrichtseinheit 9: Einführung zu Programmierobjekten
v
Erläutern Sie, wie gespeicherte Prozeduren verarbeitet werden, um deutlich zu machen, warum sie schneller ausgeführt werden als Batches. Vergleichen Sie die Verarbeitungsleistung gespeicherter Prozeduren mit der von Batches. Ermuntern Sie die Kursteilnehmer dazu, in ihren Anwendungen gespeicherte Prozeduren zu erstellen, indem Sie noch einmal deren Vorteile betonen. !
Einführung zu Triggern Trigger sind ein hilfreiches Tool für Datenbankimplementierer, die möchten, dass vordefinierte Aktionen ausgeführt werden, sobald in einer bestimmten Tabelle Daten eingefügt, aktualisiert oder gelöscht werden. Das Ziel dieses Abschnitts ist es, auf die Funktionsweise von Triggern aufmerksam zu machen. Er gibt deshalb nur einen kurzen Überblick. Definieren Sie Trigger. Weisen Sie darauf hin, dass es sich bei einem Trigger um eine spezielle Form einer gespeicherten Prozedur handelt, der einer bestimmten Tabelle zugewiesen ist. Erläutern Sie abschließend die folgenden drei Kernpunkte: Trigger werden automatisch aufgerufen, Trigger werden nur durch eine Triggeraktion in der Triggertabelle aufgerufen, Trigger sind Transaktionen.
!
Einführung zu benutzerdefinierten Funktionen Zusätzlich zu den integrierten Systemfunktionen von Microsoft SQL Server™ 2000 können Benutzer eigene benutzerdefinierte Funktionen erstellen. Erläutern Sie die allgemeine Syntax zum Erstellen einer Funktion, insbesondere den Befehl CREATE FUNCTION, den Funktionsnamen, die Eingabeparameter und einige der Einschränkungen beim Erstellen einer benutzerdefinierten Funktion.
Anpassungsinformationen Dieser Abschnitt beschreibt die Anforderungen zum Einrichten der Übungseinheiten für eine Unterrichtseinheit sowie die Konfigurationsänderungen, die während der Übungseinheiten an den Kursteilnehmercomputern vorgenommen werden. Diese Informationen sollen Ihnen beim Replizieren oder Anpassen der Microsoft Official Curriculum-Courseware (MOC) helfen. Wichtig Die Übungseinheit in dieser Unterrichtseinheit hängt von der Schulungsraumkonfiguration ab, die im Abschnitt „Anpassungsinformationen“ am Ende des Dokuments Handbuch für das Einrichten von Schulungscomputern für Kurs 2316B, Abfragen von Microsoft SQL Server 2000 mit Hilfe von Transact-SQL, angegeben ist.
Einrichten der Übungseinheit Es gibt keine Anforderungen zum Einrichten der Übungseinheit, die die Replikation oder die Anpassung betreffen.
Ergebnisse der Übungseinheit Auf den Kursteilnehmercomputern gibt es keine Konfigurationsänderungen, die die Replikation oder die Anpassung betreffen.
ii
Unterrichtseinheit 9: Einführung zu Programmierobjekten
This page is intentionally left blank.
Unterrichtseinheit 9: Einführung zu Programmierobjekten
1
Übersicht Inhalt dieser Folie
Geben Sie eine Übersicht über die Themen und Lernziele dieser Unterrichtseinheit.
Einstieg
In dieser Unterrichtseinheit erhalten Sie Informationen zu Programmierobjekten.
!
Anzeigen des Textes eines Programmierobjekts
!
Einführung zu Sichten
!
Vorteile von Sichten
!
Erstellen von Sichten
!
Einführung zu gespeicherten Prozeduren
!
Einführung zu Triggern
!
Einführung zu benutzerdefinierten Funktionen
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Diese Unterrichtseinheit beschreibt die Erstellung von Programmierobjekten, die es dem Benutzer ermöglichen, Daten anzuzeigen und zu bearbeiten, ohne dass er die Komplexität der zugrunde liegenden Datenbankstruktur kennen muss. Die Unterrichtseinheit umfasst eine Einführung zu den Programmierobjekten, wie Sichten, gespeicherte Prozeduren, Trigger und benutzerdefinierte Funktionen, und beschreibt die Vorteile, die sich durch ihre Verwendung ergeben. Am Ende dieser Unterrichtseinheit werden Sie in der Lage sein, die folgenden Aufgaben auszuführen: !
Anzeigen des Textes eines Programmierobjekts.
!
Beschreiben des Sichtenkonzepts.
!
Auflisten der Vorteile der Verwendung von Sichten.
!
Erstellen von Sichten.
!
Beschreiben gespeicherter Prozeduren.
!
Beschreiben der Trigger.
!
Beschreiben benutzerdefinierter Funktionen.
2
Unterrichtseinheit 9: Einführung zu Programmierobjekten
Anzeigen des Textes eines Programmierobjekts Inhalt dieser Folie
Beschreiben Sie, wie der Test eines Programmierobjekts angezeigt wird.
!
EXEC sp_helptext [ @objname = ] 'name'
Einstieg
Sie können die Textdefinition eines Programmierobjekts mit Hilfe einer speziellen gespeicherten Systemprozedur anzeigen.
USE USE library library EXEC EXEC sp_helptext sp_helptext 'dbo.OverdueView' 'dbo.OverdueView' GO GO !
Nicht jedes Programmierobjekt verfügt über einen mit ihm verbundenen Text
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Viele Verwaltungs- und Informationsaktivitäten in Microsoft® SQL Server™ 2000 können mit Hilfe gespeicherter Systemprozeduren ausgeführt werden. Sie können zum Beispiel die gespeicherte Systemprozedur sp_helptext zum Abrufen des Textes eines Programmierobjekts verwenden. Syntax Methodischer Hinweis
Verwenden Sie in dieser Unterrichtseinheit immer sp_helptext zum Anzeigen der Definition von Programmierobjekten.
EXEC sp_helptext [ @objname = ] 'name'
Der Parameter ist der Name des Objekts in der aktuellen Datenbank, dessen Definitionstext von SQL Server angezeigt wird. Die gespeicherte Systemprozedur sp_helptext druckt den Text, der zum Erstellen eines Objekts verwendet wird, in mehreren Zeilen aus, wobei jede Zeile 255 Zeichen der Transact-SQL-Definition enthält. Die Definition ist nur im Text in der syscomments-Tabelle der aktuellen Datenbank enthalten.
Unterrichtseinheit 9: Einführung zu Programmierobjekten
Beispiel
3
In diesem Beispiel wird der Text zurückgegeben, der die dbo.OverdueViewSicht definiert. USE library EXEC sp_helptext 'dbo.OverdueView' GO
Ergebnis
Text -------------------------------------------------------------/* OverdueView: Fragt OnloanView (als Verknüpfung über 3 Tabellen) ab. Listet die Mitglieder-, Titel- und Ausleihinformationen eines zur Zeit ausgeliehenen und überfälligen Exemplares auf. */ CREATE VIEW dbo.OverdueView AS SELECT * FROM OnloanView WHERE OnloanView.due_date < GETDATE()
Tipp Verwenden Sie EXEC sp_helptext, um die Definitionen neu erstellter Programmierobjekte zu überprüfen.
4
Unterrichtseinheit 9: Einführung zu Programmierobjekten
Einführung zu Sichten Inhalt dieser Folie
Stellen Sie das Konzept von Sichten vor, und geben Sie ein Beispiel.
title title title_no title_no 11 22 33
Einstieg
Bei einer Sicht handelt es sich um eine alternative Methode zum Anzeigen der Daten aus einer oder mehreren Tabellen.
title title Last Lastofofthe theMohicans Mohicans The Village The VillageWatch-Tower Watch-Tower Poems Poems
TitleView TitleView title title Last Lastofofthe theMohicans Mohicans The TheVillage VillageWatch-Tower Watch-Tower Poems Poems
author author James JamesFenimore FenimoreCooper Cooper Kate Douglas Kate DouglasWiggin Wiggin Wilfred WilfredOwen Owen
synopsis synopsis ~~~ ~~~ ~~~ ~~~ ~~~ ~~~
USE USE library library GO GO CREATE CREATE VIEW VIEW dbo.TitleView dbo.TitleView AS AS SELECT SELECT title, title, author author FROM FROM title title GO GO
author author James JamesFenimore FenimoreCooper Cooper Kate KateDouglas DouglasWiggin Wiggin Wilfred WilfredOwen Owen
Sicht Sichtdes desBenutzers Benutzers
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Methodischer Hinweis
Vergegenwärtigen Sie den Kursteilnehmern, dass das Schreiben von Ad-hoc-Abfragen in anderen Unterrichtseinheiten dieses Kurses behandelt wird. Weisen Sie darauf hin, dass in dieser Unterrichtseinheit das Speichern von Abfragen als Objekte (Sichten, gespeicherte Prozeduren und Trigger) in der Datenbank beschrieben wird.
Bei einer Sicht handelt es sich um eine alternative Methode zum Anzeigen der Daten aus einer oder mehreren Tabellen. Eine Sicht ist mit einer virtuellen Tabelle oder einer gespeicherten Abfrage vergleichbar. Die Daten, auf die über eine Sicht zugegriffen wird, sind nicht als wirkliche Objekte in der Datenbank gespeichert. Was in der Datenbank gespeichert wird, ist eine SELECT-Anweisung. Das Resultset der SELECTAnweisung bildet die virtuelle Tabelle, die von der Sicht zurückgegeben wird. Sie können diese virtuelle Tabelle verwenden, indem Sie in Transact-SQLAnweisungen auf den Namen der Sicht wie auf einen Tabellennamen verweisen. Sie können eine Sicht zu folgenden Zwecken verwenden: !
Einschränken des Benutzerzugriffs auf bestimmte Zeilen einer Tabelle Sie können zum Beispiel festlegen, dass ein Mitarbeiter nur die Zeilen einer Arbeitsprotokolltabelle sieht, in denen seine Arbeitsdaten aufgezeichnet werden.
!
Einschränken des Benutzerzugriffs auf bestimmte Spalten Sie können zum Beispiel festlegen, dass Mitarbeiter ohne Festanstellung zwar die Spalten für Name, Büro, Rufnummer und Abteilung sehen, jedoch keine Spalten mit Gehältern oder persönlichen Informationen.
!
Verknüpfen von Spalten aus mehreren Tabellen zu einer einzigen Tabelle
!
Aggregieren von Informationen statt Bereitstellen von Detailinformationen Sie können zum Beispiel die Summe einer Spalte oder den höchsten bzw. niedrigsten Wert aus einer Spalte anzeigen.
Unterrichtseinheit 9: Einführung zu Programmierobjekten
Beispiel
In diesem Beispiel wird die TitleView-Sicht in der library-Datenbank erstellt. Die Sicht zeigt zwei Spalten der title-Tabelle an. USE library GO CREATE VIEW dbo.TitleView AS SELECT title, author FROM title GO
Abfrage
SELECT * from TitleView GO
Ergebnis
title
author
Last of the Mohicans The Village Watch-Tower Self Help; Conduct & Perseverance . . . (50 row(s) affected)
James Fenimore Cooper Kate Douglas Wiggin Samuel Smiles
5
6
Unterrichtseinheit 9: Einführung zu Programmierobjekten
Vorteile von Sichten Inhalt dieser Folie
Erläutern Sie, warum Benutzer Sichten erstellen oder verwenden.
!
"
Einstieg
Sichten bieten mehrere Vorteile.
Konzentrieren der Daten für Benutzer
"
!
Konzentrieren auf ausschließlich wichtige oder geeignete Daten Zugang zu vertraulichen Daten einschränken
Verbergen der Datenbankkomplexität " "
Verbergen komplexer Datenbankentwürfe Vereinfachen von Abfragen, einschließlich verteilter Abfragen für heterogene Daten
!
Vereinfachen der Verwaltung von Benutzerberechtigungen
!
Organisieren von Daten für den Export in andere Anwendungen
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Sichten bieten unter anderem die folgenden Vorteile: Sie konzentrieren Daten für Benutzer, verbergen die Komplexität von Daten, vereinfachen die Verwaltung von Berechtigungen und organisieren Daten für den Export in andere Anwendungen.
Konzentrieren der Daten für Benutzer Sichten schaffen eine kontrollierte Umgebung, die den Zugriff auf bestimmte Daten ermöglicht und andere Daten verbirgt. Es ist möglich, nicht benötigte, vertrauliche oder ungeeignete Daten aus einer Sicht auszuschließen. Benutzer können die Anzeige von Daten in einer Sicht ähnlich wie in einer Tabelle bearbeiten. Darüber hinaus können sie (mit den entsprechenden Berechtigungen und einigen Einschränkungen) die von einer Sicht erzeugten Daten ändern.
Verbergen der Datenbankkomplexität Sichten verbergen die Komplexität des Datenbankentwurfs vor dem Benutzer. Dies bietet Entwicklern die Möglichkeit, den Entwurf zu ändern, ohne dass sich dies auf den Benutzerdialog mit der Datenbank auswirkt. Darüber hinaus kann eine benutzerfreundlichere Anzeige der Daten erstellt werden, indem Namen verwendet werden, die einfacher zu verstehen sind als die in Datenbanken häufig verwendeten unverständlichen Namen. Komplexe Abfragen, einschließlich verteilter Abfragen für heterogene Daten, können ebenfalls durch Sichten verborgen werden. Der Benutzer fragt die Sicht ab, statt die Abfrage zu schreiben oder ein Skript auszuführen.
Unterrichtseinheit 9: Einführung zu Programmierobjekten
Vereinfachen der Verwaltung von Benutzerberechtigungen Statt Benutzern die Berechtigung zum Abfragen bestimmter Spalten in Basistabellen zu erteilen, können Datenbankbesitzer Benutzern die Berechtigung erteilen, Daten nur über Sichten abzufragen. Auf diese Weise werden auch Änderungen am Entwurf der zugrunde liegenden Basistabellen geschützt. Benutzer können die Sicht ohne Unterbrechung weiter abfragen.
Organisieren von Daten für den Export in andere Anwendungen Sie können eine Sicht auf der Basis einer komplexen Abfrage erstellen, die mehrere Tabellen miteinander verknüpft, und die Daten dann zur weiteren Analyse in eine andere Anwendung exportieren.
7
8
Unterrichtseinheit 9: Einführung zu Programmierobjekten
# Erstellen von Sichten Inhalt dieser Folie
Geben Sie einen Überblick über die Themen dieses Abschnitts.
!
Definieren von Sichten
Einstieg
!
Einschränkungen beim Erstellen von Sichten
!
Beispiel: Anzeigen von Informationen aus mehreren Tabellen
In diesem Abschnitt wird beschrieben, wie Sichten erstellt werden.
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Dieser Abschnitt beschreibt, wie Sichten erstellt werden, und erläutert Einschränkungen, die beim Erstellen von Sichten zu beachten sind. Er stellt darüber hinaus ein Beispiel für eine Anzeige von Informationen aus mehreren verknüpften Tabellen an einem zentralen Ort bereit.
Unterrichtseinheit 9: Einführung zu Programmierobjekten
9
Definieren von Sichten Inhalt dieser Folie
Beschreiben Sie, wie Sichten definiert werden.
Einstieg
Beim Erstellen einer Sicht überprüft SQL Server die Existenz der Objekte, auf die in der Sicht verwiesen wird.
Beispiel Beispiel 1: 1: Erstellen Erstellen einer einer Sicht Sicht
USE USE library library GO GO CREATE CREATE VIEW VIEW dbo.UnpaidFinesView dbo.UnpaidFinesView (Member, (Member, TotalUnpaidFines) TotalUnpaidFines) AS AS SELECT SELECT member_no, member_no, (sum(fine_assessed-fine_paid)) (sum(fine_assessed-fine_paid)) FROM FROM loanhist loanhist GROUP GROUP BY BY member_no member_no HAVING HAVING SUM(fine_assessed-fine_paid) SUM(fine_assessed-fine_paid) >> 00 GO GO
Beispiel Beispiel 2: 2: Abfragen Abfragen einer einer Sicht Sicht SELECT SELECT ** FROM FROM UnpaidFinesView UnpaidFinesView GO GO
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Methodischer Hinweis
Empfehlen Sie den Kursteilnehmern, eine konsistente Benennungskonvention zum Unterscheiden von Sichten und Tabellen zu entwickeln und dbo als Besitzername anzugeben.
Syntax
Beim Erstellen einer Sicht überprüft SQL Server die Existenz der Objekte, auf die in der Sicht verwiesen wird. Der Sichtname muss den Regeln für Bezeichner entsprechen. Die Angabe eines Besitzernamens für die Sicht ist optional. Sie sollten eine konsistente Benennungskonvention entwickeln, um Sichten von Tabellen zu unterscheiden. Sie können zum Beispiel das Wort „View“ als Suffix für jedes Objekt verwenden, das Sie erstellen. Auf diese Weise können Sie ähnliche Objekte (Tabellen und Sichten) beim Abfragen der INFORMATION_SCHEMA.TABLES-Sicht leicht unterscheiden. CREATE VIEW owner.view_name [(column[, n.])] [WITH ENCRYPTION] AS select_statement [WITH CHECK OPTION] Zum Ausführen der CREATE VIEW-Anweisung müssen Sie Mitglied der Rollen sysadmin (Systemadministratoren), db_owner (Datenbankbesitzer) oder db_ddladmin (Administrator für die Datendefinitionssprache) sein oder Ihnen muss die Berechtigung für CREATE VIEW erteilt worden sein. Außerdem müssen Sie die SELECT-Berechtigung für alle Tabellen oder Sichten haben, auf die in der Sicht verwiesen wird. Um Situationen zu vermeiden, in denen der Besitzer einer Sicht und der Besitzer einer zugrunde liegenden Tabelle nicht identisch sind, wird empfohlen, dass der dbo-Benutzer sämtliche Objekte in einer Datenbank besitzt. Geben Sie beim Erstellen eines Objekts immer den dbo-Benutzer als Besitzername an; andernfalls wird das Objekt mit Ihrem Benutzernamen als Objektbesitzer erstellt.
10
Unterrichtseinheit 9: Einführung zu Programmierobjekten
Der Inhalt einer Sicht wird mit einer SELECT-Anweisung angegeben. Von wenigen Einschränkungen abgesehen, können Sichten beliebig komplex sein. Spaltennamen müssen in den beiden folgenden Fällen angegeben werden: Methodischer Hinweis
Spaltennamen können auf zwei Arten angegeben werden: in der SELECTAnweisung unter Verwendung des Spaltenalias oder in der CREATE VIEWAnweisung.
Beispiel 1
!
Spalten der Sicht basieren auf einem arithmetischen Ausdruck, einer integrierten Funktion oder einer Konstante.
!
Spalten in zu verknüpfenden Tabellen haben identische Namen.
Wichtig Beim Erstellen von Sichten muss die SELECT-Anweisung zum Definieren der Sicht unbedingt getestet werden, um sicherzustellen, dass SQL Server das erwartete Resultset zurückgibt. Erstellen Sie die Sicht erst, nachdem Sie die SELECT-Anweisung geschrieben und getestet sowie die Ergebnisse überprüft haben.
Dies ist ein Beispiel für eine Sicht, die eine Spalte (TotalUnpaidFines) mit den Werten erstellt, die durch Subtrahieren des Wertes der fine_paid-Spalte von der fine_assessed-Spalte berechnet werden. USE library GO CREATE VIEW dbo.UnpaidFinesView (Member, TotalUnpaidFines) AS SELECT member_no, (sum(fine_assessed-fine_paid)) FROM loanhist GROUP BY member_no HAVING SUM(fine_assessed-fine_paid) > 0 GO
Beispiel 2
In diesem Beispiel wird die Sicht abgefragt, um die Ergebnisse anzuzeigen. SELECT * FROM UnpaidFinesView GO
Es kommt zu etwa den folgenden Ergebnissen. Ergebnis
Member
TotalUnpaidFines
7744
83.2
(1 row(s) affected) Warnung: NULL-Wert wird durch eine Aggregat-Operation gelöscht.
Unterrichtseinheit 9: Einführung zu Programmierobjekten
11
Einschränkungen beim Erstellen von Sichten Inhalt dieser Folie
Beschreiben Sie die Einschränkungen beim Erstellen von Sichten.
$ Können auf maximal 1024 Spalten verweisen
Einstieg
$ Können nicht die COMPUTE- oder COMPUTE BYKlausel enthalten
Beachten Sie diese Einschränkungen beim Definieren von Sichten.
$ Können die ORDER BY-Klausel nur in Verbindung mit einer TOP-Klausel enthalten $ Können nicht das Schlüsselwort INTO enthalten $ Können nicht auf temporäre Tabellen verweisen $ Muss als einzelner Transact-SQL Stapel ausgedrückt werden
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Beachten Sie beim Erstellen von Sichten die folgenden Einschränkungen: !
Sichten können auf maximal 1024 Spalten verweisen.
!
Die CREATE VIEW-Anweisung kann nicht die COMPUTE- oder COMPUTE BY-Klausel enthalten.
!
Die CREATE VIEW-Anweisung kann die ORDER BY-Klausel nur enthalten, wenn die SELECT-Anweisung eine TOP-Klausel enthält.
!
Die CREATE VIEW-Anweisung kann nicht das Schlüsselwort INTO enthalten.
!
Sichten können nicht auf temporäre Tabellen verweisen.
!
Die CREATE VIEW-Anweisung kann nicht mit anderen Transact-SQLAnweisungen in einem einzigen Batch zusammengefasst werden.
12
Unterrichtseinheit 9: Einführung zu Programmierobjekten
Beispiel: Anzeigen von Informationen aus mehreren Tabellen Inhalt dieser Folie
Geben Sie ein Beispiel für das Anzeigen von Informationen aus mehreren Tabellen.
member member_no member_no 11 11 12 12 13 13 14 14
juvenile
lastname lastname Thomas Thomas Thomas Thomas Funk Funk Rudd Rudd
firstname firstname Gary Gary Clair Clair Frank Frank Clair Clair
middleinitial middleinitial ~~~ ~~~ ~~~ ~~~ ~~~ ~~~ ~~~ ~~~
photograph photograph ~~~ ~~~ ~~~ ~~~ ~~~ ~~~ ~~~ ~~~
member_no member_no 12 12 13 13
adult_no adult_no birth_date birth_date 11 1992-01-16 11 1992-01-1600:00:00.000 00:00:00.000 66 1984-01-18 1984-01-1800:00:00.000 00:00:00.000
Einstieg
Sie werden häufig Sichten zum Anzeigen von Informationen aus mehreren verknüpften Tabellen an einem zentralen Ort erstellen.
USE USE library library GO GO CREATE CREATE VIEW VIEW dbo.birthdayview dbo.birthdayview (lastname, (lastname, firstname, firstname, birth_date) birth_date) AS AS SELECT SELECT lastname, lastname, firstname firstname ,CONVERT(char(8), ,CONVERT(char(8), birth_date, birth_date, 2) 2) FROM FROM member member INNER INNER JOIN JOIN juvenile juvenile ON ON member.member_no member.member_no == juvenile.member_no juvenile.member_no GO GO
BirthdayView lastname firstname Birth BirthDate Date lastname firstname Thomas Gary 92.01.16 Thomas Gary 92.01.16 Funk Frank 84.01.18 Funk Frank 84.01.18
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Sie werden häufig Sichten zum Anzeigen von Informationen aus mehreren verknüpften Tabellen an einem zentralen Ort erstellen. Beispiel
Methodischer Hinweis Die CONVERT-Funktion in der Abfrage ändert die birth_date-Spalte, die mit dem datetime-Datentyp definiert ist, in das ANSIFormat.
In diesem Beispiel wird die birthdayview-Sicht erstellt, die die Tabellen member und juvenile verknüpft. USE library GO CREATE VIEW dbo.birthdayview (lastname, firstname, birth_date) AS SELECT lastname, firstname ,CONVERT(char(8), birth_date, 2) FROM member INNER JOIN juvenile ON member.member_no = juvenile.member_no GO
Wenn Sie die Sicht nach NULL-Werten in der birthday-Spalte abfragen, werden korrekterweise keine Zeilen zurückgegeben. SELECT * FROM birthdayview WHERE birth_date is null GO
Ergebnis
lastname
firstname
(0 row(s) affected)
birthday
Unterrichtseinheit 9: Einführung zu Programmierobjekten
13
# Einführung zu gespeicherten Prozeduren Inhalt dieser Folie
Geben Sie einen Überblick über die Themen dieses Abschnitts.
!
Definieren gespeicherter Prozeduren
Einstieg
!
Vorteile der Verwendung gespeicherter Prozeduren
Dieser Abschnitt gibt eine Einführung zu gespeicherten Prozeduren und listet einige Vorteile der Verwendung gespeicherter Prozeduren auf.
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Kernpunkte
Betonen Sie, dass in diesem Abschnitt auf die Funktionsweise gespeicherter Prozeduren nicht im Einzelnen eingegangen wird. Verweisen Sie die Kursteilnehmer auf die Informationen in der SQL ServerOnlinedokumentation.
Dieser Abschnitt gibt eine Einführung zu gespeicherten Prozeduren und listet einige Vorteile der Verwendung gespeicherter Prozeduren auf.
14
Unterrichtseinheit 9: Einführung zu Programmierobjekten
Definieren gespeicherter Prozeduren Inhalt dieser Folie
Definieren Sie gespeicherte Prozeduren.
Einstieg
Eine gespeicherte Prozedur ist eine benannte Auflistung von vorkompilierten Transact-SQL-Anweisungen, die auf dem Server gespeichert ist.
!
Eine gespeicherte Prozedur ist eine benannte Auflistung von vorkompilierten Transact-SQL-Anweisungen
!
Eine gespeicherte Prozedur fasst sich wiederholende Aufgaben zusammen
!
Gespeicherte Prozeduren haben folgende Merkmale: "
Sie enthalten Anweisungen, die Operationen ausführen
"
Sie akzeptieren Eingabeparameter
"
"
Sie können einen Statuswert zurückgeben, der Erfolg oder Fehler meldet Sie können mehrere Ausgabeparameter zurückgeben
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Eine gespeicherte Prozedur ist eine benannte Auflistung von vorkompilierten Transact-SQL-Anweisungen, die auf dem Server gespeichert ist. Die Verwendung einer gespeicherten Prozedur ist eine Methode, sich wiederholende Aufgaben zusammenzufassen, um sie effizienter auszuführen. Gespeicherte Prozeduren unterstützen benutzerdeklarierte Variablen, ablaufgesteuerte Ausführung und andere erweiterte Programmierfunktionen. Gespeicherte Prozeduren in SQL Server entsprechen in vieler Hinsicht Prozeduren in anderen Programmiersprachen und bieten daher folgende Funktionalitäten und Merkmale: !
Sie können Anweisungen enthalten, die Operationen in der Datenbank ausführen, was auch die Möglichkeit einschließt, andere gespeicherte Prozeduren aufzurufen.
!
Sie akzeptieren Eingabeparameter.
!
Sie können einen Statuswert an eine aufrufende gespeicherte Prozedur oder ein Batch zurückgeben, der einen Erfolg oder Fehler (sowie den Grund für den Fehler) meldet.
!
Sie können mehrere Werte in Form von Ausgabeparametern an die aufrufende gespeicherte Prozedur oder den Batch zurückgeben.
Unterrichtseinheit 9: Einführung zu Programmierobjekten
Beispiel
15
Dieses Beispiel zeigt die Erstellung einer einfachen gespeicherten Prozedur mit einer komplexen SELECT-Anweisung. Die gespeicherte Prozedur gibt alle Autoren (mit Vor- und Nachnamen) sowie ihre Titel und Veröffentlichungen aus vier verknüpften Tabellen der pubs-Datenbank zurück. Die gespeicherte Prozedur verwendet keine Parameter. USE pubs GO CREATE PROCEDURE au_info_all AS SELECT au_lname, au_fname, title, pub_name FROM authors AS a INNER JOIN titleauthor AS ta ON a.au_id = ta.au_id INNER JOIN titles AS t ON t.title_id = ta.title_id INNER JOIN publishers AS p ON t.pub_id = p.pub_id GO
16
Unterrichtseinheit 9: Einführung zu Programmierobjekten
Vorteile der Verwendung gespeicherter Prozeduren Inhalt dieser Folie
Erläutern Sie die Vorteile von gespeicherten Prozeduren.
!
Gemeinsame Nutzung der Anwendungslogik
Einstieg
!
Verbergen von Details des Datenbankschemas
!
Bereitstellung von Sicherheitsmechanismen
!
Leistungsverbesserung
!
Reduzierung des Datenverkehrs im Netzwerk
Gespeicherte Prozeduren bieten zahlreiche Vorteile.
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Gespeicherte Prozeduren bieten zahlreiche Vorteile. Durch die Verwendung von gespeicherten Prozeduren kann die Auslastung der zur Ausführung benötigten Ressourcen erheblich verringert und die Ausführungszeit verkürzt werden. Sie bieten folgende Vorteile: !
Gemeinsame Nutzung der Anwendungslogik mit anderen Anwendungen und dadurch Gewährleistung der Datenkonsistenz bei Zugriffen und Änderungen. Geschäftsfunktionen können mit Hilfe gespeicherter Prozeduren zusammengefasst werden. Sie haben die Möglichkeit, in gespeicherten Prozeduren zusammengefasste Geschäftsregeln oder Richtlinien an einem einzigen Ort zu ändern. Auf allen Clients können dieselben gespeicherten Prozeduren verwendet werden, wodurch Datenkonsistenz bei Zugriffen und Änderungen gewährleistet ist.
!
Benutzer erhalten keinen Einblick in die Details der Datenbanktabelle. Wenn eine Gruppe von gespeicherten Prozeduren alle Geschäftsfunktionen unterstützt, die Benutzer ausführen müssen, müssen die Benutzer niemals direkt auf die Tabellen zugreifen.
!
Bereitstellung von Sicherheitsmechanismen. Benutzern können Berechtigungen zum Ausführen einer gespeicherten Prozedur erteilt werden, auch wenn sie nicht berechtigt sind, auf die in der gespeicherten Prozedur referenzierten Tabellen oder Sichten zuzugreifen.
!
Leistungsverbesserung. Mit gespeicherten Prozeduren werden mehrere Aufgaben als eine Reihe von Transact-SQL-Anweisungen implementiert. Auf die Ergebnisse der ersten Transact-SQL-Anweisungen kann eine Bedingungslogik angewendet werden, um zu ermitteln, welche der nachfolgenden Transact-SQL-Anweisungen ausgeführt wird. Diese TransactSQL-Anweisungen und die Bedingungslogik werden als Teil eines einzelnen Ausführungsplanes auf dem Server gespeichert.
Unterrichtseinheit 9: Einführung zu Programmierobjekten Der Datenverkehr im Netzwerk wird reduziert, da für das Senden von Anforderungen weniger Pakete benötigt werden.
!
Reduzierung des Datenverkehrs im Netzwerk. Anstatt mehrere hundert Transact-SQL-Anweisungen über das Netzwerk zu senden, können Benutzer eine komplexe Operation ausführen, indem Sie nur eine einzelne Anweisung senden. Dadurch wird die Anzahl der zwischen Server und Client übermittelten Anforderungen reduziert.
17
18
Unterrichtseinheit 9: Einführung zu Programmierobjekten
Einführung zu Triggern Inhalt dieser Folie
Erläutern Sie das Konzept eines Triggers.
Einstieg
Ein Trigger ist eine spezielle Form einer gespeicherten Prozedur.
!
Ein Trigger ist eine spezielle Form einer gespeicherten Prozedur
!
Trigger zeichnen sich durch folgende Merkmale aus: "
Trigger sind mit einer Tabelle verknüpft
"
Trigger werden automatisch aufgerufen
"
Trigger können nicht direkt aufgerufen werden
"
Trigger sind Teil der Transaktion, von der sie ausgelöst wurden
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Kernpunkte
Betonen Sie, dass in diesem Abschnitt auf die Funktionsweise von Triggern nicht im Einzelnen eingegangen wird. Verweisen Sie die Kursteilnehmer auf die Informationen in der SQL Server-Onlinedokumentation.
Ein Trigger ist eine spezielle Form einer gespeicherten Prozedur, der ausgeführt wird, sobald Daten in einer Tabelle geändert werden, die vom Trigger geschützt wird. Die beste Verwendungsmöglichkeit von Triggern liegt in der Aufrechterhaltung der Datenintegrität auf der unteren Ebene, nicht in der Ausgabe von Abfrageergebnissen. Der Hauptvorteil von Triggern besteht darin, dass sie eine komplexe Verarbeitungslogik enthalten können. Trigger zeichnen sich durch folgende Merkmale aus: Trigger sind mit einer Tabelle verknüpft Trigger werden für eine bestimmte Tabelle definiert, die als Triggertabelle bezeichnet wird. Trigger werden automatisch aufgerufen Bei einem Versuch, Daten in eine Tabelle einzufügen oder Daten in einer Tabelle zu aktualisieren oder zu löschen, wird der Trigger automatisch ausgeführt, wenn für die spezielle Aktion ein Trigger für die Tabelle definiert wurde. Der Trigger kann nicht umgangen werden. Trigger können nicht direkt aufgerufen werden Im Gegensatz zu gespeicherten Standardsystemprozeduren können Trigger nicht direkt aufgerufen werden und keine Parameter übergeben oder übernehmen. Trigger sind Teil der Transaktion, von der sie ausgelöst wurden Der Trigger und die den Trigger auslösende Anweisung werden als eine einzelne Transaktion behandelt, für die an einer beliebigen Stelle innerhalb des Triggers ein Rollback ausgeführt werden kann. Die Anweisung, die den Trigger auslöst, gilt als Anfang einer impliziten Transaktion, sofern keine explizite BEGIN TRANSACTION-Anweisung eingefügt wird. Der Benutzer, der den Trigger aufgerufen hat, muss außerdem berechtigt sein, alle Anweisungen für alle Tabellen auszuführen. Wenn der Trigger fehlschlägt, gilt das auch für die Transaktion, die ihn aufgerufen hat.
Unterrichtseinheit 9: Einführung zu Programmierobjekten
19
# Einführung zu benutzerdefinierten Funktionen Inhalt dieser Folie
Geben Sie einen Überblick über die Themen dieses Abschnitts.
!
Arten von benutzerdefinierten Funktionen
Einstieg
!
Erstellen einer benutzerdefinierten Funktion
Dieser Abschnitt gibt eine Übersicht über benutzerdefinierte Funktionen und erläutert, warum und wie sie verwendet werden.
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Kernpunkte
Betonen Sie, dass in diesem Abschnitt auf die Funktionsweise von benutzerdefinierten Funktionen nicht im Einzelnen eingegangen wird. Verweisen Sie die Kursteilnehmer auf die Informationen in der SQL ServerOnlinedokumentation.
Funktionen sind Teilroutinen, die aus einer oder mehreren Transact-SQLAnweisungen bestehen und die Sie dazu verwenden können, Code für eine erneute Verwendung zusammenzufassen. Zusätzlich zu den integrierten Systemfunktionen von Microsoft SQL Server 2000 können Benutzer eigene benutzerdefinierte Funktionen erstellen.
20
Unterrichtseinheit 9: Einführung zu Programmierobjekten
Arten von benutzerdefinierten Funktionen Inhalt dieser Folie
Stellen Sie das Konzept einer benutzerdefinierten Funktion vor, und erläutern Sie die Vorteile.
Einstieg
Es gibt drei Arten von benutzerdefinierten Funktionen.
!
Skalarfunktionen " "
!
!
Entsprechen einer integrierten Funktion Geben einen einzelnen Datenwert zurück, der aus einer Reihe von Anweisungen zusammengesetzt wird
Aus mehreren Anweisungen bestehende Funktionen mit Tabellenrückgabe "
Inhalt entspricht dem einer gespeicherten Prozedur
"
Verweise wie bei einer Sicht
Inline-Funktionen mit Tabellenrückgabe " "
Entsprechen einer Sicht mit Parametern Geben eine Tabelle als Ergebnis einer einzelnen SELECT-Anweisung zurück
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Mit SQL Server können Sie eigene Funktionen entwerfen und so die integrierten Systemfunktionen erweitern und neue hinzufügen. Sie können benutzerdefinierte Funktionen wie integrierte Systemfunktionen als Teil einer TransactSQL-Abfrage verwenden. An eine benutzerdefinierte Funktion können mehrere Eingabeparameter übergeben werden, sie kann aber auch ohne Eingabeparameter ausgeführt werden. Sie gibt entweder einen skalaren Wert oder eine Tabelle zurück. Als Eingabeparameter können alle Datentypen außer timestamp, cursor und table verwendet werden. Benutzerdefinierte Funktionen unterstützen keine Ausgabeparameter. SQL Server 2000 unterstützt drei Arten von benutzerdefinierten Funktionen:
Skalarfunktionen Diese Art der benutzerdefinierten Funktion gibt einen einzelnen Datenwert zurück, und zwar mit dem Datentyp, der in einer RETURNS-Klausel definiert wird. Der Hauptteil der Funktion, der in einem BEGIN-END-Block definiert ist, enthält die Reihe von Transact-SQL-Anweisungen, die den Wert zurückgeben. Es können alle Datentypen außer text, ntext, image, cursor und timestamp zurückgegeben werden.
Aus mehreren Anweisungen bestehende Funktionen mit Tabellenrückgabe Diese Art der benutzerdefinierten Funktion gibt eine Tabelle zurück, die von einer oder mehreren Transact-SQL-Anweisungen erstellt wurde. Der Hauptteil der Funktion ist in einem BEGIN-END-Block definiert und entspricht dem einer gespeicherten Prozedur. Im Gegensatz zu einer gespeicherten Prozedur kann auf eine aus mehreren Anweisungen bestehende Funktion mit Tabellenrückgabe jedoch wie auf eine Sicht in der FROM-Klausel einer SELECTAnweisung verwiesen werden.
Unterrichtseinheit 9: Einführung zu Programmierobjekten
21
Inline-Funktionen mit Tabellenrückgabe Diese Art der benutzerdefinierten Funktion gibt eine Tabelle zurück, die das Ergebnis einer einzelnen SELECT-Anweisung ist. Eine Inline-Funktion mit Tabellenrückgabe liefert eine Datendarstellung, die der einer Sicht entspricht. Diese Funktionsart bietet mehr Flexibilität bei der Verwendung von Parametern als Sichten und erweitert die Features von indizierten Sichten.
22
Unterrichtseinheit 9: Einführung zu Programmierobjekten
Erstellen einer benutzerdefinierten Funktion Inhalt dieser Folie
Beschreiben Sie die CREATE FUNCTIONAnweisung.
Einstieg
Sie erstellen eine benutzerdefinierte Funktion auf fast dieselbe Weise wie eine Sicht oder eine gespeicherte Prozedur.
!
Erstellen einer benutzerdefinierten Funktion
USE USE Northwind Northwind GO GO CREATE CREATE FUNCTION FUNCTION fn_NewRegion fn_NewRegion (( @myinput @myinput nvarchar(30) nvarchar(30) )) RETURNS RETURNS nvarchar(30) nvarchar(30) BEGIN BEGIN IF IF @myinput @myinput IS IS NULL NULL SET SET @myinput @myinput == 'Nicht 'Nicht anwendbar‘ anwendbar‘ RETURN RETURN @myinput @myinput END END GO GO !
Einschränkungen für benutzerdefinierte Funktionen
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Sie erstellen eine benutzerdefinierte Funktion auf fast dieselbe Weise wie eine Sicht oder eine gespeicherte Prozedur.
Erstellen einer benutzerdefinierten Funktion Benutzerdefinierte Funktionen werden mit der CREATE FUNCTION-Anweisung erstellt. Der voll gekennzeichnete Name einer benutzerdefinierten Funktion (database_name.owner_name.function_name) muss eindeutig sein. Die Anweisung gibt die Eingabeparameter mit ihrem jeweiligen Datentyp, die Verarbeitungsanweisungen und den Wert an, der mit jedem Datentyp zurückgegeben wird. Syntax
CREATE FUNCTION [ owner_name. ] function_name ( [ { @parameter_name scalar_parameter_data_type [ = default ] } [ ,...n ] ] ) RETURNS scalar_return_data_type [ WITH < function_option> [,...n] ] [ AS ] BEGIN function_body RETURN scalar_expression END
Unterrichtseinheit 9: Einführung zu Programmierobjekten
Beispiel
In diesem Beispiel wird eine benutzerdefinierte Funktion erstellt, die einen NULL-Wert durch die Wörter „Nicht anwendbar “ ersetzt. USE Northwind GO CREATE FUNCTION fn_NewRegion ( @myinput nvarchar(30) ) RETURNS nvarchar(30) BEGIN IF @myinput IS NULL SET @myinput = 'Nicht anwendbar' RETURN @myinput END GO
Geben Sie bei einem Verweis auf eine skalare benutzerdefinierte Funktion den Funktionsbesitzer und den Funktionsnamen in einer zweiteiligen Syntax an. SELECT LastName, City ,dbo.fn_NewRegion(Region) AS Region ,Country FROM Employees GO
Ergebnis
LastName
City
Region
Country
Davolio
Seattle
WA
USA
Fuller
Tacoma
WA
USA
Leverling
Kirkland
WA
USA
Peacock
Redmond
WA
USA
Buchanan
London
Nicht anwendbar
UK
Suyama
London
Nicht anwendbar
UK
King
London
Nicht anwendbar
UK
Callahan
Seattle
WA
USA
Dodsworth
London
Nicht anwendbar
UK
23
24
Unterrichtseinheit 9: Einführung zu Programmierobjekten
Einschränkungen für benutzerdefinierte Funktionen Nicht deterministische Funktionen, z. B. GETDATE(), können unterschiedliche Ergebniswerte zurückgeben, auch wenn Sie jedes Mal mit denselben Eingabewerten aufgerufen werden. Integrierte nicht deterministische Funktionen dürfen im Hauptteil von benutzerdefinierten Funktionen nicht verwendet werden. Bei den folgenden integrierten Funktionen aus anderen Kategorien handelt es sich immer um nicht deterministische Funktionen: @@ERROR
FORMATMESSAGE
IDENTITY
USER_NAME
@@IDENTITY
GETANSINULL
NEWID
@@ERROR
@@ROWCOUNT
GETDATE
PERMISSIONS
@@IDENTITY
@@TRANCOUNT
GetUTCDate
SESSION_USER
@@ROWCOUNT
APP_NAME
HOST_ID
STATS_DATE
@@TRANCOUNT
CURRENT_TIMESTAMP
HOST_NAME
SYSTEM_USER
CURRENT_USER
IDENT_INCR
TEXTPTR
DATENAME
IDENT_SEED
TEXTVALID
Unterrichtseinheit 9: Einführung zu Programmierobjekten
25
Empfohlene Methoden Inhalt dieser Folie
Stellen Sie die empfohlenen Methoden für Programmierobjekte vor.
Überprüfen Überprüfen Sie Sie Objektdefinitionen Objektdefinitionen mit mit Hilfe Hilfe von von „EXEC „EXEC sp_helptext“ sp_helptext“
Einstieg
Verwenden Verwenden Sie Sie Sichten Sichten zum zum Aufzeichnen Aufzeichnen und und erneuten erneuten Verwenden Verwenden von von Abfragen Abfragen
Dies sind empfohlene Methoden für die Verwendung von Programmierobjekten.
Verwenden Verwenden Sie Sie gespeicherte gespeicherte Prozeduren Prozeduren zum zum ZusammenZusammenfassen von komplexen Prozeduren fassen von komplexen Prozeduren Verwenden Verwenden Sie Sie benutzerdefinierte benutzerdefinierte Funktionen, Funktionen, um um Ausdrücke Ausdrücke zusammenzufassen zusammenzufassen
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Die im Folgenden aufgeführten empfohlenen Methoden sollen Sie bei der Verwendung von Programmierobjekten unterstützen: !
Überprüfen Sie Objektdefinitionen, indem Sie den mit dem Objekt verknüpften Text mit Hilfe der gespeicherten Systemfunktion EXEC sp_helptext anzeigen.
!
Verwenden Sie, aus Gründen der Konsistenz und Effizienz, Sichten zum Aufzeichnen und erneuten Verwenden von allgemeinen Abfragen
!
Verwenden Sie gespeicherte Prozeduren, um komplexe Prozeduren mit mehreren Anweisungen zusammenzufassen.
!
Verwenden Sie benutzerdefinierte Funktionen, um allgemeine Ausdrücke zusammenzufassen.
Zusätzliche Informationen zu den folgenden Themen erhalten Sie in der SQL Server-Onlinedokumentation. Thema
Suchbegriff
Verwenden gespeicherter Prozeduren
“Effekte von gespeicherten Prozeduren auf die Anwendungsleistung”
Verwenden von Sichten
“Gegenüberstellung von Abfragen und Sichten”
Verwenden von Triggern
“Erzwingen von Geschäftsregeln mit Triggern”
26
Unterrichtseinheit 9: Einführung zu Programmierobjekten
Übungseinheit A: Arbeiten mit Sichten Inhalt dieser Folie
Geben Sie eine Einführung in die Übungseinheit.
Einstieg
In dieser Übungseinheit werden Sie Sichten erstellen und ändern.
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Erläutern Sie die Lernziele der Übungseinheit.
Lernziele Am Ende dieser Übungseinheit werden Sie in der Lage sein, die folgenden Aufgaben auszuführen: !
Generieren einer Sicht mit Hilfe einer SQL Query Analyzer-Vorlage.
!
Ändern einer Sicht mit Hilfe des Objektkatalogs von SQL Query Analyzer.
Voraussetzungen Um diese Übungseinheit zu bearbeiten, benötigen Sie Folgendes: !
Die Skriptdateien für diese Übungseinheit, die sich in C:\Moc\2316B\Labfiles\L09 befinden.
!
Die Antwortdateien für diese Übungseinheit, die sich in C:\Moc\2316B\Labfiles\L09\Answers befinden.
!
Die library-Datenbank muss installiert sein.
Weitere Informationen Weitere Informationen finden Sie in der Hilfe zu SQL Query Analyzer unter „Verwenden von Vorlagen in SQL Query Analyzer“. Daneben sind die folgenden Informationsquellen verfügbar: !
Das library-Datenbankschema.
!
Die Microsoft SQL Server-Onlinedokumentation.
Unterrichtseinheit 9: Einführung zu Programmierobjekten
27
Szenario Der Aufbau des Schulungsraumes soll die Organisation des weltweit agierenden Handelsunternehmens Northwind Traders widerspiegeln. Das Unternehmen hat den fiktiven Domänennamen ist nwtraders.msft. Der primäre DNS-Server für nwtraders.msft ist der Kursleitercomputer, der die Internetprotokolladresse (IP-Adresse) 192.168.x.200 besitzt (wobei x die zugewiesene Schulungsraumnummer ist). Der Name des Kursleitercomputers ist London. Die folgende Tabelle stellt den Benutzernamen, den Computernamen und die IP-Adresse für jeden Kursteilnehmercomputer in der fiktiven Domäne nwtraders.msft bereit. Suchen Sie den Benutzernamen Ihres Computers und notieren Sie ihn. Benutzername
Computername
IP-Adresse
SQLAdmin1
Vancouver
192.168.x.1
SQLAdmin2
Denver
192.168.x.2
SQLAdmin3
Perth
192.168.x.3
SQLAdmin4
Brisbane
192.168.x.4
SQLAdmin5
Lisbon
192.168.x.5
SQLAdmin6
Bonn
192.168.x.6
SQLAdmin7
Lima
192.168.x.7
SQLAdmin8
Santiago
192.168.x.8
SQLAdmin9
Bangalore
192.168.x.9
SQLAdmin10
Singapore
192.168.x.10
SQLAdmin11
Casablanca
192.168.x.11
SQLAdmin12
Tunis
192.168.x.12
SQLAdmin13
Acapulco
192.168.x.13
SQLAdmin14
Miami
192.168.x.14
SQLAdmin15
Auckland
192.168.x.15
SQLAdmin16
Suva
192.168.x.16
SQLAdmin17
Stockholm
192.168.x.17
SQLAdmin18
Moscow
192.168.x.18
SQLAdmin19
Caracas
192.168.x.19
SQLAdmin20
Montevideo
192.168.x.20
SQLAdmin21
Manila
192.168.x.21
SQLAdmin22
Tokyo
192.168.x.22
SQLAdmin23
Khartoum
192.168.x.23
SQLAdmin24
Nairobi
192.168.x.24
Veranschlagte Zeit für die Übungseinheit: 30 Minuten
28
Unterrichtseinheit 9: Einführung zu Programmierobjekten
Übung 1 Generieren einer Sicht mit Hilfe einer SQL Query Analyzer-Vorlage In dieser Übung verwenden Sie eine SQL Query Analyzer-Vorlage, um eine Sicht zu erstellen und den Parametern in der Sicht Werte zuzuweisen. Das Verzeichnis C:\Moc\2316B\Labfiles\L09\Answers enthält fertige Skripts für diese Übung.
! So erstellen Sie eine Transact-SQL-Anweisung aus einer SQL Query Analyzer-Vorlage
In diesem Verfahren erstellen Sie eine Transact-SQL-Anweisung mit Hilfe einer SQL Query Analyzer-Vorlage. Answer_Template1.sql enthält ein fertiges Skript für diesen Schritt. 1. Melden Sie sich mit Hilfe der Informationen in der folgenden Tabelle an der Schulungsraumdomäne nwtraders an. Option
Eingabe
Benutzername
SQLAdminx (wobei x die Ihrem Computernamen zugewiesene Nummer ist, wie in der Schulungsraumdomäne nwtraders.msft festgelegt)
Kennwort
password
2. Öffnen Sie SQL Query Analyzer und melden Sie sich gegebenenfalls mit Microsoft Windows®-Authentifizierung am (lokalen) Server an. Sie sind berechtigt, sich an SQL Server anzumelden und SQL Server zu verwalten, da Sie als SQLAdminx angemeldet und damit Mitglied der lokalen Administratorgruppe von Windows 2000 sind. Alle Mitglieder dieser Gruppe werden automatisch der SQL Server-Rolle sysadmin zugeordnet. 3. Klicken Sie in der Liste DB auf library. 4. Klicken Sie auf der Symbolleiste auf Vorlage einfügen. 5. Doppelklicken Sie im Dialogfenster Vorlage einfügen auf Create View, und öffnen Sie dann die Basisvorlage zum Erstellen von Sichten (Create View Basic Template.tql). 6. Überprüfen Sie den Inhalt der Datei im Bearbeitungsbereich. Worin unterscheidet sich das generierte Skript von Standard-Transact-SQL? Das generierte Skript enthält Vorlagenparameter anstelle von erwarteten Bezeichnernamen, und zwar im Format . ____________________________________________________________ ____________________________________________________________
Unterrichtseinheit 9: Einführung zu Programmierobjekten
! So ersetzen Sie Vorlagenparameter In diesem Verfahren werden Sie Vorlagenparameter ersetzen. Answer_Template2.sql enthält ein fertiges Skript für diesen Schritt. 1. Klicken Sie im Menü Bearbeiten auf Vorlageparameter ersetzen. 2. Geben Sie im Dialogfeld Vorlageparameter ersetzen in der Wert-Spalte den Namen AustenTitlesView ein, um den view_name-Parameter zu ändern. 3. Geben Sie im Dialogfeld Vorlageparameter ersetzen in der Wert-Spalte die folgende Anweisung ein, um den select_statement-Parameter zu ändern. SELECT * FROM title WHERE author = 'Jane Austen'
4. Klicken Sie im Dialogfeld Vorlageparameter ersetzen auf Alle ersetzen, um alle auftretenden Parameter durch die neu zugewiesenen Werte zu ersetzen
! So überprüfen Sie die Syntax und erstellen Sie die Sicht In diesem Verfahren werden Sie Transact-SQL-Anweisungen überprüfen und ausführen, um die Sicht zu erstellen. Answer_View1.sql enthält ein fertiges Skript für diesen Schritt. 1. Klicken Sie im Menü Abfrage auf Analysieren. Es wird überprüft, ob die Syntax des neu erstellten Transact-SQL-Skripts gültig ist. 2. Erstellen Sie die Sicht, indem Sie das Skript im Bearbeitungsbereich ausführen. 3. Klicken Sie auf der Symbolleiste auf Neue Abfrage, um ein neues Abfragefenster zu öffnen. Es wird eine neue Verbindung mit SQL Server geöffnet. 4. Schreiben Sie eine Abfrage, die in der SELECT-Anweisung einen Stern enthält, um alle Daten der AustenTitlesView-Sicht abzurufen. USE library SELECT * FROM AustenTitlesView GO
29
30
Unterrichtseinheit 9: Einführung zu Programmierobjekten
5. Führen Sie die Abfrage aus, um zu überprüfen, ob die gewünschten Ergebnisse zurückgegeben werden. Welche Spalten werden von der Abfrage der Sicht zurückgegeben? Die Spalten „title_no“, „title“, „author“ und „synopsis“. ____________________________________________________________ ____________________________________________________________ Worin liegen die Vorteile bei der Verwendung von SQL Query AnalyzerVorlagen zum Generieren von Transact-SQL-Skripts? Durch die Verwendung von SQL Query Analyzer-Vorlagen zum Generieren von Transact-SQL-Skripts werden wiederholte Eingaben und Fehler vermieden sowie die Konsistenz durch erneute Verwendung von Standardcode und -syntax aufrechterhalten. ____________________________________________________________ ____________________________________________________________
Unterrichtseinheit 9: Einführung zu Programmierobjekten
31
Übung 2 Ändern einer Sicht mit Hilfe des Objektkatalogs von SQL Query Analyzer In dieser Übung verwenden Sie den Objektkatalog von SQL Query Analyzer zur Skripterstellung und Bearbeitung von Transact-SQL-Anweisungen, um die in Übung 1 erstellte Sicht zu ändern. C:\Moc\2316B\Labfiles\L09\Answers enthält fertige Skripts für diese Übung.
! So suchen Sie das Objekt „dbo.AustenTitlesView“ In diesem Verfahren suchen Sie das Objekt dbo.AustenTitlesView. 1. Erweitern Sie im Objektkatalogbereich den Ordner library. 2. Erweitern Sie Sichten und dann das Objekt dbo.AustenTitlesView.
! So generieren Sie ein Skript zum Ändern der Sicht In diesem Verfahren generieren Sie ein Skript, das eine Sicht ändert. Answer_View2.sql enthält ein fertiges Skript für diesen Schritt. 1. Klicken Sie mit der rechten Maustaste auf dbo.AustenTitlesView. 2. Wählen Sie Skript in neuem Fenster erstellen für die Objektausführung mit aus. 3. Klicken Sie auf ALTER. Es wird eine Reihe von Transact-SQL-Anweisungen erzeugt, die das Objekt dbo.AustenTitlesView ändern, das in einem neuen Fensterbereich erstellt wurde. Welche anderen Skripttypen können Sie für dieses Sichtobjekt erstellen? Sie können Skripts für das Sichtobjekt zum Erstellen, Ändern und Löschen erstellen. Darüber hinaus können Sie Skripts erstellen, die Operationen mit dem Objekt ausführen, z. B. SELECT, INSERT, UPDATE und DELETE. ____________________________________________________________ ____________________________________________________________
! So kopieren Sie eine Spaltenliste aus dem Objektkatalog In diesem Verfahren kopieren Sie eine Spaltenliste aus dem Objektkatalog. Answer_View3.sql enthält ein fertiges Skript für diesen Schritt. 1. Klicken Sie im Menü Abfrage auf Analysieren. Es wird überprüft, ob die Syntax des neu erstellten Transact-SQL-Skripts gültig ist. 2. Erweitern Sie dbo.AustenTitlesView und erweitern Sie dann Spalten. 3. Ziehen Sie den Ordner Spalten aus dem Objektkatalogbereich in den Bearbeitungsbereich, und platzieren Sie den Ordner hinter dem Stern in der SELECT-Anweisung der Sichtdefinition. 4. Löschen Sie den Stern in der SELECT-Anweisung.
32
Unterrichtseinheit 9: Einführung zu Programmierobjekten
! So kopieren Sie einen Objektnamen aus dem Objektkatalog In diesem Verfahren kopieren Sie einen Objektnamen aus dem Objektkatalog. Answer_View4.sql enthält ein fertiges Skript für diesen Schritt. 1. Löschen Sie im Bearbeitungsbereich den Sichtnamen AustenTitlesView direkt hinter der ALTER VIEW-Anweisung. 2. Ziehen Sie das Objekt dbo.AustenTitlesView aus dem Objektkatalogbereich in den Bearbeitungsbereich, und platzieren Sie das Objekt hinter die ALTER VIEW-Anweisung.
! So überprüfen Sie die Syntax und ändern Sie die Sicht In diesem Verfahren überprüfen Sie die Syntax und ändern Sie die Sicht. Answer_View5.sql enthält ein fertiges Skript für diesen Schritt. 1. Klicken Sie im Menü Abfrage auf Analysieren. Es wird überprüft, ob die Syntax des neu erstellten Transact-SQL-Skripts gültig ist. 2. Führen Sie das Skript im Bearbeitungsbereich aus, um die Sicht zu ändern. 3. Klicken Sie auf der Symbolleiste auf Neue Abfrage, um ein neues Abfragefenster zu öffnen. Es wird eine neue Verbindung mit SQL Server geöffnet. 4. Schreiben Sie eine SELECT-Anweisung zum Abrufen aller Daten aus der Sicht dbo.AustenTitlesView. USE library SELECT title_no, title, author, synopsis FROM dbo.AustenTitlesView GO
5. Führen Sie die Abfrage aus, um zu überprüfen, ob die gewünschten Ergebnisse zurückgegeben werden. Warum sollten Sie beim Erstellen von Transact-SQL-Anweisungen alle Spalten aufzählen? Sie sollten Spaltennamen immer ausdrücklich referenzieren, um ihre gewünschte Verwendung und relative Reihenfolge sicherzustellen. Die Syntax SELECT * ruft Spalten in der Reihenfolge ab, in der sie definiert wurden. Diese Reihenfolge kann von Tabelle zu Tabelle unterschiedlich sein oder sich nachträglich ändern. ____________________________________________________________ ____________________________________________________________
Unterrichtseinheit 9: Einführung zu Programmierobjekten
33
Lernzielkontrolle Inhalt dieser Folie
Vertiefen Sie die Lernziele dieser Unterrichtseinheit, indem Sie die Kernpunkte wiederholen.
Einstieg
Die Fragen zur Lernzielkontrolle beziehen sich auf einige der Schlüsselkonzepte, die Inhalt dieser Unterrichtseinheit sind.
!
Anzeigen des Textes eines Programmierobjekts
!
Einführung zu Sichten
!
Vorteile von Sichten
!
Erstellen von Sichten
!
Einführung zu gespeicherten Prozeduren
!
Einführung zu Triggern
!
Einführung zu benutzerdefinierten Funktionen
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Gehen Sie anhand dieser Fragen die Themen der Unterrichtseinheit durch. Klären Sie offene Fragen der Kursteilnehmer, bevor Sie mit der Lernzielkontrolle beginnen.
1. Welche Vorteile bieten Sichten? Benutzer konzentrieren sich nur auf die benötigten Daten; Benutzer können Daten einfacher bearbeiten; die Komplexität von Datenbanken und Abfragen wird vor den Benutzern verborgen, sodass verständlichere Namen angezeigt werden können; Sichten stellen einen Sicherheitsmechanismus bereit, weil Benutzer nur auf Daten in Sichten zugreifen können.
2. Welche Vorteile bieten gespeicherte Prozeduren? Zusammenfassen der gemeinsam benutzten Anwendungslogik, erhöhte Leistung, verbesserte Sicherheitsverwaltung und reduzierter Netzverkehr.
3. Warum würden Sie zum Zusammenfassen einer Abfrage eine Sicht und keine gespeicherte Prozedur verwenden? Wenn Sie eine Sicht zum Zusammenfassen einer Abfrage verwenden, können Sie die Sicht sofort erneut als Teil einer SELECT-Anweisung beim Schreiben einer anderen Abfrage verwenden.
34
Unterrichtseinheit 9: Einführung zu Programmierobjekten
4. Sie haben eine Abfrage entwickelt, die die Tabellen member, title und loanhist miteinander verknüpft, um die für jedes Mitglied festgesetzten, bezahlten und erlassenen Mahngebühren sowie den Titel jedes überfälligen Buches aufzulisten und um die Anzahl der Tage zu berechnen, die jedes Buch überfällig ist. Andere Entwickler möchten Ihre Vorarbeit für die Erstellung eigener Abfragen nutzen. Wie können Sie dies am besten erreichen? Erstellen Sie eine Sicht für Ihre Abfrage. Anschließend müssen die anderen Entwickler ihre Abfragen und Sichten gegen Ihre Sicht ausführen. Dadurch wird sichergestellt, dass alle Abfragen konsistente Ergebnisse zurückgeben und die Arbeit und das Geschäftswissen, das in der ursprünglichen Sicht zusammengefasst ist, nicht erneut erstellt werden muss.
5. Beschreiben Sie die drei Arten von benutzerdefinierten Funktionen. Skalarfunktionen entsprechen integrierten Funktionen. Aus mehreren Anweisungen bestehende Funktionen mit Tabellenrückgabe entsprechen gespeicherten Prozeduren. Inline-Funktionen mit Tabellenrückgabe entsprechen Sichten.
6. Was unterscheidet einen Trigger von einer gespeicherten Prozedur? Ein Trigger ist eine spezielle Form einer gespeicherten Prozedur, der mit einer Tabelle verknüpft ist und automatisch ausgeführt wird, sobald versucht wird, Daten in der Tabelle zu ändern. Trigger können nicht direkt aufgerufen werden und akzeptieren keine Parameter.
Anhang A: Fallstudie der libraryDatenbank Einführung Die Fallstudie der library-Datenbank gibt eine Übersicht über die Vorgänge in der Bibliothek West Municipal, beschreibt die täglichen Bibliotheksfunktionen und stellt eine Datenbank vor, die für die Bibliothek entworfen wurde.
Übersicht über Vorgänge in der Bibliothek Vor dem Implementieren einer Datenbank für Bibliothekare und Mitglieder wurden mit den Bibliothekaren der Bibliothek West Municipal Interviews durchgeführt, um die Geschäftsanforderungen der Bibliothek zu bewerten. In den folgenden Abschnitten werden die Entscheidungen erläutert, die die Datenbankentwickler während des Entwurfsvorgangs getroffen haben. In der folgenden Abbildung wird das Gesamtschema der Datenbank dargestellt, das für die Bibliothek entworfen wurde.
Diagramm der library-Datenbank member PK
loan
member_no
loanhist
PK,FK1 isbn PK,FK1 copy_no
lastname firstname middleinitial photograph
FK3 FK2 reservation
PK,FK1 isbn PK,FK1 copy_no PK out_date
title_no member_no out_date due_date
FK2
PK,FK1 isbn PK,FK2 member_no log_date remarks
adult PK,FK1 member_no street city state zip phone_no expr_date
copy
item PK
PK,FK1 isbn PK copy_no
isbn
FK1 title_no translation cover loanable
juvenile PK,FK2 member_no FK1
adult_member_no birth_date
FK2
title PK
title_no title author synopsis
title_no on_loan
title_no member_no due_date in_date fine_assessed fine_paid fine_waived remarks
2
Anhang A: Fallstudie der library-Datenbank
Tägliche Bibliotheksfunktionen Es gibt viele tägliche Bibliotheksfunktionen. Die folgenden Funktionen gehören zu den wichtigsten.
Eindeutiges Identifizieren von Büchern Einige Bücher können den gleichen Buchtitel haben, deshalb können Buchtitel nicht zur Identifikation verwendet werden. Bibliothekare nennen Bücher Titel. Titel werden durch die internationale Standardbuchnummer (ISBN) identifiziert. Bücher mit dem gleichen Buchtitel können unterschiedliche ISBN-Nummern haben, wenn sie in unterschiedlichen Sprachen oder mit verschiedenen Einbänden (mit oder ohne festen Einband) erhältlich sind.
Vorbestellen von Büchern Falls ein Mitglied ein Buch ausleihen möchte, das bereits verliehen ist, wird das Buch für das Mitglied vorbestellt. Wenn das Buch ankommt, muss der Bibliothekar das Mitglied benachrichtigen, das bereits am längsten wartet. Mitglieder können bis zu vier Bücher gleichzeitig vorbestellen.
Bestimmen der Verfügbarkeit eines Buches Bibliothekare müssen jederzeit bestimmen können, wie viele Exemplare eines Buches verliehen sind und für welche Bücher Vorbestellungen vorliegen. Für jeden Buchtitel in der Bibliothek ist eine Zusammenfassung vorhanden, die einen Satz oder auch mehrere Seiten umfassen kann. Bibliothekare möchten auf die Zusammenfassungen zugreifen können, wenn Mitglieder Informationen zu Büchern wünschen.
Registrieren von Mitgliedern Um ein Bibliotheksmitglied zu werden, müssen Personen Postanschriften und Telefonnummern angeben. Ein Bibliothekar gibt an die Person dann eine nummerierte, maschinenlesbare Karte aus. Diese Karte gilt ein Jahr. Jugendliche (Personen unter 18 Jahren) können Mitglieder einer Bibliothek werden, aber ein Erwachsener muss unterschreiben, wenn Jugendliche Mitglied der Bibliothek werden. Deshalb gilt die Mitgliedskarte eines Jugendlichen nur solange, bis die Mitgliedskarte des entsprechenden Erwachsenen abläuft. Die einzigen Informationen, die der Bibliothekar zu jugendlichen Mitgliedern behält, sind deren Name und Geburtsdatum. Der Bibliothekar muss erkennen können, wann ein jugendliches Mitglied 18 Jahre alt wird, und dann muss die Mitgliedschaft automatisch in die Mitgliedschaft eines Erwachsenen umgewandelt werden. Einen Monat vor Ablauf der Mitgliedskarte muss ein Bibliothekar das Mitglied benachrichtigen.
Anhang A: Fallstudie der library-Datenbank
3
Auschecken von Büchern Bücher können für 14 Tage ausgecheckt werden. Mitglieder dürfen nur vier Bücher gleichzeitig auschecken. Wenn ein Buch überfällig ist, haben Mitglieder eine Woche Zeit, bevor der Bibliothekar ihnen eine Benachrichtigung zusendet. Nachdem die Mitglieder die Bücher gefunden haben, die sie auschecken möchten, bringen Sie diese Bücher zum Ausleihtisch. Ein Bibliothekar zieht dann die Mitgliedskarte durch ein Gerät, das die Kartennummer magnetisch liest. Auf einem Bildschirm werden Informationen zum Konto des Mitglieds wie Name, Adresse, Telefonnummer und Ablaufdatum der Karte angezeigt. Idealerweise werden abgelaufene Karten und Karten, die bald ablaufen, hervorgehoben. Auf dem Bildschirm werden außerdem Informationen zu noch ausgeliehenen Büchern angezeigt, einschließlich des Buchtitels, des Auscheckdatums und des Fälligkeitsdatums. Diese Informationen sind nützlich, da sie in chronologischer Reihenfolge dargestellt werden, wobei das ausgeliehene Buch, das am überfälligsten ist, an erster Position und das zuletzt ausgeliehene Buch an letzter Position angezeigt wird. Durch Hervorheben wird außerdem angezeigt, dass ausgeliehene Bücher überfällig sind oder bald überfällig werden. Wenn bei einem Konto eines Mitglieds alles in Ordnung ist, dann checkt der Bibliothekar die Bücher aus. Bibliothekare checken Bücher aus, indem Sie einen Scanner über den Buchrücken führen (ISBN-Nummer und die Nummer des Exemplars sind auf den Buchrücken codiert). Die ISBN-Nummer, der Buchtitel und Informationen zum Autor werden auf dem Computerbildschirm angezeigt. Wenn Bücher nicht verliehen werden können, wird eine Warnmeldung angezeigt.
Einchecken von Büchern Wenn Bücher zurückgebracht werden, checken Bibliothekare sie ein, indem sie einen Scanner über die Buchrücken führen. Die ISBN-Nummer, der Buchtitel und Informationen zum Autor werden dann auf dem Computerbildschirm angezeigt. Außerdem wird die Mitgliedsnummer, der Mitgliedsname und das Fälligkeitsdatum des Buches angezeigt. Manchmal werden Bücher versehentlich ins Regal zurück gestellt, bevor Sie vom Bibliothekar eingecheckt wurden. Wenn ein Mitglied versucht, ein Buch auszuchecken, das in der Datenbank als ausgechecktes Buch aufgeführt ist, müssen Bibliothekare auf die Auscheckinformationen zugreifen können, einschließlich des Namens des Mitglieds, des Auscheckdatums und des Fälligkeitsdatums. Wenn ein Mitglied ein Buch auschecken möchte, das offiziell noch für ein anderes Mitglied ausgecheckt ist, informiert eine Meldung Bibliothekare darüber, dass das Buch bereits ausgecheckt ist. Dann können Bibliothekare die Datensätze sofort aktualisieren, da sie zunächst die vorherige Ausleihe löschen müssen, bevor sie mit dem Auschecken fortfahren können.
Generieren von Verwendungsberichten Gelegentlich müssen Bibliothekare Verwendungsinformationen zusammenstellen. Meist werden diese Informationen vom Stadtrat oder vom Planungsausschuss gefordert. Von diesen Gruppen werden im Allgemeinen Informationen zum Umfang der Zirkulation, zur Beliebtheit verschiedener Bücher, zur Zuverlässigkeit der Rückgabe und zur durchschnittlichen Länge der Ausleihdauer gewünscht. Deshalb müssen die Bibliothekare schnell Zusammenfassungen dieser Informationen vorbereiten können.
4
Anhang A: Fallstudie der library-Datenbank
Zu den häufig gestellten Fragen gehören die folgenden: !
Wie viele Bücher hat die Bibliothek im letzten Jahr verliehen?
!
Wie groß ist der Prozentsatz der Mitglieder, die im letzten Jahr ein Buch ausgeliehen haben?
!
Wie groß war die größte Anzahl von Büchern, die von einer Person ausgeliehen wurde?
!
Wie hoch ist der Prozentsatz der Bücher, die mindestens einmal im letzten Jahr ausgeliehen wurden?
!
Wie hoch ist der Prozentsatz aller ausgeliehenen Bücher, die überfällig werden?
!
Wie lange werden Bücher im Durchschnitt ausgeliehen?
!
Wann werden in der Bibliothek die meisten Bücher ausgeliehen?
Anhang A: Fallstudie der library-Datenbank
5
Entwurf der Bibliotheksdatenbank Basierend auf den Informationen der Bibliothekare hat der Datenbankentwickler des Projekts entschieden, die Entitäten des vorherigen Szenarios in drei Gruppen von Tabellen zu implementieren: Tabellen mit Informationen zu Mitgliedern, Tabellen mit Informationen zu Titeln (Büchern) und Tabellen mit Informationen zum Ausleihen.
Informationen zu Mitgliedern In der ersten Gruppe von Tabellen werden die zwei Arten von Mitgliedern dargestellt, die Bücher in der Bibliothek West Municipal ausleihen. Wie die folgende Abbildung zeigt, besteht die erste Gruppe aus drei Tabellen: member, adult und juvenile. member member_no lastname PK 1 2 3 4 5 6
adult
juvenile
member_no
street
PK, FK
NN
1 2 6
Elm St Bowery Ave Bowery Ave
firstname
NN Anderson Barr Barr Anderson Anderson Henson city
Andrew Andrew Bill Bill Sally Jack
state
zip
NN
NN
NN
Seattle WA Seattle WA Kent WA
member_no
adult_member_no
PK, FK
FK, NN
NN
3 4 5
2 1 1
Jun 01 1980 Mar 01 1978 Nov 05 1982
middle_i
photo
A R NULL B A NULL
~~~ ~~~ ~~~
NN
98022 98022 98206
~~~ ~~~
phone_no
expr_date
NULL (206)555-1212 NULL
Jun 06 1992 Aug 07 1992 Mar 03 1993
NN
birth_date
Die member-Tabelle ist die Mastertabelle, und adult und juvenile sind Untertabellen. Die drei Tabellen verwenden die member_no-Spalte als Primärschlüssel. Da die Werte in dieser Spalte für jedes Mitglied unterschiedlich sind und jede Zeile mit Informationen eindeutig identifizieren, stellt die member_no-Spalte eine gute Wahl für den Primärschlüssel dar. Die Entitäten können auf verschiedene Weise dargestellt werden: Als eine einzige Tabelle oder als member- und juvenile-Tabellen. Falls eine einzige Tabelle für alle Mitglieder verwendet werden würde, würden zahlreiche Adressen dupliziert werden, da die Jugendlichen in diesem Modell die gleiche Adresse wie ihre Eltern haben. Bibliothekare müssen die Möglichkeit haben, nur die Geburtsdaten der Jugendlichen nachzuverfolgen. Daher verhindert die Aufteilung der Informationen zur Mitgliedschaft auf mehrere Tabellen die Spalten mit NULL-Werten, die sich für die Geburtsdaten der Erwachsenen ergeben hätten. Die oben beschriebene Aufteilung der Tabellen stellt außerdem das Szenario so dar, dass die Mitgliedschaft in der Bibliothek widergespiegelt wird: Die Beziehung member-adult ist eine 1:1-Beziehung, während die Beziehung adultjuvenile eine 1:n-Beziehung ist.
6
Anhang A: Fallstudie der library-Datenbank
Informationen zu Titeln Die title-, item- und copy-Tabellen bilden eine logische zweite Gruppe. Die Mastertabelle dieser Gruppe ist die title-Tabelle. Für jede Auflistung in der title-Tabelle ist mindestens einen Eintrag in der item-Tabelle vorhanden, da ein Buch in mehreren Sprachen verfügbar, als Taschenbuch oder mit festem Einband vorhanden und ausleihbar bzw. nicht ausleihbar sein kann. Die Beziehung title-item ist eine 1:n-Beziehung. Außerdem kann es für jede Auflistung in der item-Tabelle ein oder mehrere Exemplare des Titels geben. Die Beziehung title-copy ist eine 1:n-Beziehung. title title_no PK 1 2 3 4
item isbn PK 1 2 3 4 5
copy isbn
title_no FK, NN 1 2 3 4 2
title NN
author NN
synopsis
Gone With the Wind Color Purple Hotel Winnie the Pooh
Mitchell W alker Hailey Milne
~~~ ~~~
language
cover
English French French NULL English
softback NULL hardback hardback softback
~~~
loanable Y N Y NULL Y
copy_no title_no on_loan
PK, FK
PK
FK, NN
NN
1 1 2 3 4 4
1 2 1 1 1 2
1 1 2 3 4 4
Y Y N Y Y Y
Die item-Tabelle enthält die loanable-Spalte. Anstatt die Informationen aus dieser Spalte in die copy-Tabelle einzuschließen, geht der Datenbankentwickler davon aus, dass alle Exemplare eines bestimmten Titels ausgeliehen werden können oder nicht. Beachten Sie, dass die copy-Tabelle einen Primärschlüssel aufweist, der aus zwei Spalten besteht. Diese Art von Primärschlüssel wird als zusammengesetzter Schlüssel bezeichnet. Die Kombination aus isbn und copy_no identifiziert jede Zeile in der Tabelle eindeutig. Die copy-Tabelle enthält eine duplizierte title_no-Spalte. Für diese Tabellengruppe wurde die Normalisierung aufgehoben, um die Anzahl der zum Abrufen von Informationen erforderlichen Verknüpfungen zu verringern. Die on_loan-Spalte der copy-Tabelle enthält abgeleitete Daten. Dies sind Daten, die jedes Mal mit einer Abfrage generiert werden könnten, wenn die Informationen benötigt werden. Aber diese Informationen sind in der Tabelle enthalten, damit sie immer verfügbar sind und die Anzahl von Berechnungen reduziert wird, die durchgeführt werden müssen. Die on_loan-Spalte wird mit Hilfe von Informationen aus der loan-Tabelle (unten) aufgefüllt. Da die loanTabelle häufig geändert wird, könnten Sperren verhindern, dass ein Benutzer diese Informationen erhält. Die copy-Tabelle wird sehr wahrscheinlich nur für Lesezugriffe verwendet, sodass nicht verhindert werden muss, dass Benutzer auf in dieser Tabelle gespeicherte Informationen zugreifen.
Anhang A: Fallstudie der library-Datenbank
7
Informationen zum Ausleihen Die reservation-, loan- und loanhist-Tabellen enthalten die Bibliotheksinformationen zum Ausleihen. In der reservation-Tabelle werden die aktuellen Vorbestellungen für jedes Buch nachverfolgt; in der loan-Tabelle werden Informationen zu derzeit ausgeliehenen Büchern nachverfolgt, und in der loanhist-Tabelle werden Informationen zu Büchern gespeichert, die ausgeliehen und wieder zurückgebracht wurden. Anmerkung In der folgenden Abbildung steht FK1 für einen zusammengesetzten Fremdschlüssel. FK definiert einen einspaltigen Fremdschlüssel.
reservation reservation
loan loan
isbn member_no log_date log_date state state remarks remarks isbn member_no PK,FK NN PK,FK PK, PK, FK FK NN 11 22 3/7/1992 3/7/1992 WA WA ~~~ ~~~ 11 33 NULL WA NULL WA NULL NULL 44 33 3/17/1992 3/17/1992 WA WA ~~~ ~~~
isbn copy_no title_no title_no member_no member_no isbn copy_no PK,FK1 PK,FK1 PK, PK, FK1 FK1 FK,NN FK,NN FK, FK, NN NN 11 11 11 11 44 11 44 11 44 22 44 22 33 11 33 33 11 22 11 11
out_date out_date NN NN 03/18/92 03/18/92 03/15/92 03/15/92 03/17/92 03/17/92 03/18/92 03/18/92 03/15/92 03/15/92
due_date due_date NN NN 03/29/92 03/29/92 03/29/92 03/29/92 04/01/92 04/01/92 04/02/92 04/02/92 03/29/92 03/29/92
loanhist loanhist isbn copy_no out_date out_date title_no isbn copy_no title_no member_no member_no due_date due_date PK,FK1 PK,FK1 PK, FK,NN FK, FK, NN NN PK, FK1 FK1 NN NN FK,NN 11 11 10/13/91 11 44 10/27/91 10/27/91 10/13/91 22 11 07/07/91 22 22 07/21/91 07/21/91 07/07/91 22 11 10/13/91 22 44 10/27/91 10/27/91 10/13/91 11 22 11/06/91 11 33 11/20/91 11/20/91 11/06/91 11 11 10/30/91 11 11 11/13/91 11/13/91 10/30/91
in_date in_date fine_assessed fine_assessed fine_paid fine_paid fine_waived fine_waived 10/26/91 10/26/91 NULL NULL 10/28/91 10/28/91 11/14/91 11/14/91 11/15/91 11/15/91
0.00 0.00 0.10 0.10 0.00 0.00 0.20 0.20 0.00 0.00
0.00 0.00 0.00 0.00 0.00 0.00 0.20 0.20 0.00 0.00
0.00 0.00 0.10 0.10 0.00 0.00 0.00 0.00 0.00 0.00
remarks remarks ~~~ ~~~ ~~~ ~~~ ~~~ ~~~ ~~~ ~~~
Die loan- und loanhist-Tabellen können kombiniert werden, um die Redundanz zu reduzieren; allerdings kann dies zu anderen Problemen führen. Die loanhistTabelle enthält den Verlauf aller Ausleihen und könnte daher eine unhandliche Größe erreichen. Im Verlauf der Zeit möchten Bibliothekare möglicherweise Informationen aus diesen Dateien sichern. Daher ist es sinnvoll, diese Informationen in einer eigenen Tabelle zu speichern. Darüber hinaus erfordert dieses Geschäftsmodell mehrere Abfragen der loanhist-Tabelle. Diese Abfragen können leichter implementiert und schneller ausgeführt werden, wenn die Verlaufsinformationen getrennt von den Informationen zum Ausleihen gespeichert werden. Die loan- und loanhist-Tabellen stellen außerdem unterschiedliche Funktionen der Anwendung dar. Wenn ein Mitglied ein Buch auscheckt wird, wird ein Eintrag in der loan-Tabelle vorgenommen. Wenn ein Mitglied ein Buch zurückgibt, wird ein Eintrag in der loanhist-Tabelle vorgenommen, und der entsprechende Eintrag wird aus der loan-Tabelle gelöscht. Durch Verwalten getrennter Tabellen für jede Funktion und Aufheben der Normalisierung der Tabellen können Benutzer schneller auf die Informationen zugreifen. Allerdings führt die Aufhebung der Normalisierung für die Tabellen auch zu einem erhöhten Verwaltungsaufwand. Wenn z. B. item.title_no aktualisiert wird, muss die title_no-Spalte in den loan-, loanhist- und copy-Tabellen aktualisiert werden. Da Aktualisierungen der title_no-Spalte möglicherweise unregelmäßig durchgeführt werden, kann die Aufhebung der Normalisierung Abfragen beschleunigen.
2
This page is intentionally left blank.
Anhang B: Datenbankschemas
Region
Suppliers PK
SupplierID CompanyName ContactName ContactTitle Address City Region PostalCode Country Phone Fax HomePage
PK
RegionID RegionDescription
Employees PK
LastName FirstName Title TitleOfCourtesy BirthDate HireDate Address City Region PostalCode Country HomePhone Extension Photo Notes ReportsTo PhotoPath
Territories PK
TerritoryID
FK1
TerritoryDescription RegionID
EmployeeTerritories Products PK FK2 FK1
ProductID ProductName SupplierID CategoryID QuantityPerUnit UnitPrice UnitsInStock UnitsOnOrder ReorderLevel Discontinued
PK,FK1 EmployeeID PK,FK2 TerritoryID
UnitPrice Quantity Discount
PK
OrderID
FK1 FK2
CustomerID EmployeeID OrderDate RequiredDate ShippedDate ShipVia Freight ShipName ShipAddress ShipCity ShipRegion ShipPostalCode ShipCountry
FK3 Categories PK
CategoryID CategoryName Description Picture
Shippers PK
ShipperID CompanyName Phone
CustomerDemographics PK
CustomerTypeID CustomerDesc
CustomerCustomerDemo PK,FK2 CustomerID PK,FK1 CustomerTypeID
Orders
Order Details PK,FK1 OrderID PK,FK2 ProductID
EmployeeID
Diagramm der NorthwindDatenbank
Customers PK
CustomerID CompanyName ContactName ContactTitle Address City Region PostalCode Country Phone Fax
Diagramm der library-Datenbank member PK
loan
member_no
loanhist
PK,FK1 isbn PK,FK1 copy_no
lastname firstname middleinitial photograph
FK3 FK2 reservation
PK,FK1 isbn PK,FK1 copy_no PK out_date
title_no member_no out_date due_date
FK2
PK,FK1 isbn PK,FK2 member_no log_date remarks
adult PK,FK1 member_no street city state zip phone_no expr_date
juvenile PK,FK2 member_no FK1
adult_member_no birth_date
copy
item PK
isbn
FK1
title_no translation cover loanable title PK
title_no title author synopsis
PK,FK1 PK
isbn copy_no
FK2
title_no on_loan
title_no member_no due_date in_date fine_assessed fine_paid fine_waived remarks
Diagramm der pubsDatenbank
stores PK
discounts
stor_id stor_name stor_address city state zip
FK1
discounttype stor_id lowqty highqty discount
pub_info PK,FK1 pub_id logo pr_info
titles PK
title_id
I1
title type pub_id price advance royalty ytd_sales notes pubdate
sales PK,FK1 stor_id PK ord_num PK,FK2,I1 title_id ord_date qty payterms
FK1
employee publishers PK
pub_id pub_name city state country
PK
emp_id
I1 I1 I1 FK1
fname minit lname job_id job_lvl pub_id hire_date
FK2
jobs PK
job_id job_desc min_lvl max_lvl
authors
roysched FK1,I1
title_id lorange hirange royalty
titleauthor PK,FK1,I1 PK,FK2,I2
au_id title_id au_ord royaltyper
PK
au_id
I1 I1
au_lname au_fname phone address city state zip contract
Diagramm der joindbDatenbank
Buyers
Produce PK
Sales
prod_id prod_name
PK
buyer_id buyer_name
FK1 FK2
buyer_id prod_id qty