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
<
Kleiner als
>=
Größer als oder gleich
<=
Kleiner als oder gleich
<>
Ungleich
Verkettung von Zeichenfolgen Der Operator für die Verkettung von Zeichenfolgen (+) verkettet Zeichenfolgenwerte. Alle übrigen Änderungen an Zeichenfolgen erfolgen mit Hilfe von Zeichenfolgenfunktionen. Eine leere Zeichenfolge wird nie als NULL-Wert ausgewertet.
Logisch Die logischen Operatoren AND, OR und NOT verbinden Suchbedingungen in WHERE-Klauseln. Methodischer Hinweis
Weisen Sie darauf hin, dass sich die Rangfolgenebenen logischer Operatoren in SQL Server von anderen Programmiersprachen unterscheiden.
Rangfolgenebenen von Operatoren Wenn Sie mehrere Operatoren (logische oder arithmetische) verwenden, um Ausdrücke zu kombinieren, verarbeitet SQL Server die Operatoren gemäß ihrer Rangfolge, wodurch der Ergebniswert beeinflusst werden kann. Operatoren verfügen über die folgenden Rangfolgenebenen (von der höchsten zur niedrigsten Ebene). Typ
Operator
Symbol
Gruppierend
Primäre Gruppierung
()
Arithmetisch
Multiplikativ
*/%
Arithmetisch
Additiv
-+
Sonstiges
Verkettung von Zeichenfolgen
+
Logisch
NOT
NOT
Logisch
AND
AND
Logisch
OR
OR
SQL Server verarbeitet zunächst den am tiefsten verschachtelten Ausdruck. Wenn darüber hinaus alle arithmetischen Operatoren in einem Ausdruck dieselbe Rangfolgenebene haben, werden sie von links nach rechts ausgewertet. Anmerkung Die Rangfolgenebenen logischer Operatoren in SQL Server unterscheiden sich von anderen Programmiersprachen.
26
Unterrichtseinheit 1 : Einführung in Transact-SQL
Ausdrücke Inhalt dieser Folie
Geben Sie den Kursteilnehmern eine Einführung in Ausdrücke.
!
Kombination aus Symbolen und Operatoren
Einstieg
!
Auswertung zu einem einzelnen Skalarwert
!
Der Datentyp des Ergebnisses hängt von den Elementen im Ausdruck ab
Ausdrücke sind eine Kombination aus Symbolen und Operatoren, die zu einem einzelnen Datenwert ausgewertet werden.
USE Northwind USE Northwind SELECT SELECT OrderID, OrderID, ProductID ProductID ,(UnitPrice ,(UnitPrice ** Quantity) Quantity) as as ExtendedAmount ExtendedAmount FROM FROM [Order [Order Details] Details] WHERE WHERE (UnitPrice (UnitPrice ** Quantity) Quantity) >> 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 <Parametername, Datentyp, Wert>
****************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: <Parametername, Datentyp, Wert>
Die folgende Tabelle beschreibt das Format und die Definition der Vorlagenparameter: Format
Definition des Vorlagenparameters
<Parametername>
Name des Skriptparameters.
Datentyp des Parameters.
<Wert>
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.
-o Ausgabedatei
Identifiziert die Datei, in die osql Ausgabedaten schreibt. Anstelle von -o kann das Größer 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] <select_list> <select_list> FROM {} FROM {} [,…n] [,…n] WHERE WHERE <search_condition> <search_condition>
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Verwenden Sie die SELECT-Anweisung zum Abrufen von Daten. Teilsyntax
SELECT [ ALL | DISTINCT ] <select_list> FROM {} [,...n] [ WHERE <search_condition> ] 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
<select_list> ::= {
* | { 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. <search_condition> ::= { [ NOT ] <predicate> | ( <search_condition> ) } [ {AND | OR} [NOT] {<predicate> | ( <search_condition> ) } ] } [,...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: <predicate> ::= { expression { = | <> | > | >= | < | <= } expression | string_expression [NOT] LIKE string_expression [ESCAPE 'escape_character'] | expression [NOT] BETWEEN expression AND expression | expression IS [NOT] NULL | CONTAINS ( {column | * }, '' ) | FREETEXT ( {column | * }, 'freetext_string' ) | expression [NOT] IN (subquery | expression [,...n]) | expression { = | <> | > | >= | < | <= } {ALL | SOME | ANY} (subquery) | EXISTS (subquery) }
Unterrichtseinheit 3: Abrufen von Daten
Beachten Sie beim Angeben von Zeilen in der WHERE-Klausel die folgenden Festlegungen und Richtlinien:
Beispiel
!
Setzen Sie alle Daten vom Typ char, nchar, varchar, nvarchar, text, datetime und smalldatetime in einfache Anführungszeichen.
!
Geben Sie bei Verwendung der SELECT-Anweisung eine WHERE-Klausel an, um die Anzahl der zurückgegebenen Zeilen einzuschränken.
In diesem Beispiel werden die Spalten employeeid, lastname, firstname und title aus der employees-Tabelle für Mitarbeiter mit der employeeid 5 abgerufen. USE Northwind SELECT employeeid, lastname, firstname, title FROM employees WHERE employeeid = 5 GO
Ergebnis
employeeid
lastname
firstname
title
5
Buchanan
Steven
Sales Manager
(1 row(s) affected)
7
8
Unterrichtseinheit 3: Abrufen von Daten
" Filtern von Daten Inhalt dieser Folie
Beschreiben Sie die verschiedenen Arten von Suchbedingungen, die in der WHERE-Klausel verwendet werden können.
!
Verwenden von Vergleichsoperatoren
!
Verwenden von Zeichenfolgevergleichen
Einstieg
!
Verwenden von logischen Operatoren
!
Abrufen eines Wertebereichs
!
Verwenden einer Werteliste als Suchkriterium
!
Abrufen von unbekannten Werten
Sie wollen die Ergebnisse, die eine Abfrage zurückgibt, einschränken.
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Sie wollen die Ergebnisse, die von einer Abfrage zurückgegeben werden, einschränken. Sie können die Ergebnisse einschränken, indem Sie in einer WHERE-Klausel Suchbedingungen zum Filtern von Daten angeben. Die Anzahl der Suchbedingungen, die Sie in eine SELECT-Anweisung einschließen können, ist unbegrenzt. Die folgende Tabelle enthält eine Beschreibung der Filtertypen und die jeweilige Suchbedingung zum Filtern von Daten. Filtertyp
Suchbedingung
Vergleichsoperatoren
=, >, <, >=, <= und <>
Zeichenfolgevergleiche
LIKE und NOT LIKE
Logische Operatoren: Kombination von Bedingungen
AND, OR
Logischer Operator: Verneinungen
NOT
Wertebereiche
BETWEEN und NOT BETWEEN
Wertelisten
IN und NOT IN
Unbekannte Werte
IS NULL und IS NOT NULL
Unterrichtseinheit 3: Abrufen von Daten
9
Verwenden von Vergleichsoperatoren Inhalt dieser Folie
Zeigen Sie, wie mit Hilfe von Vergleichsoperatoren Teilmengen von Zeilen abgerufen werden.
Beispiel Beispiel 11
USE USE Northwind Northwind SELECT SELECT lastname, lastname, city city FROM FROM employees employees WHERE WHERE country country == 'USA' 'USA' GO GO
Einstieg
Verwenden Sie Vergleichsoperatoren, z. B. Größer als (>), Kleiner als (<) und Gleich (=), um Zeilen abhängig von Vergleichsbedingungen auszuwählen.
lastname lastname Davolio Davolio Fuller Fuller
city city Seattle Seattle Tacoma Tacoma
Leverling Leverling Peacock Peacock
Kirkland Kirkland Redmond Redmond
Callahan Callahan
Seattle Seattle
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Verwenden Sie Vergleichsoperatoren, um die Werte in einer Tabelle mit einem vorgegebenen Wert oder Ausdruck zu vergleichen. Sie können Vergleichsoperatoren auch zum Überprüfen einer Bedingung verwenden. Mit Vergleichsoperatoren können Spalten oder Variablen mit kompatiblen Datentypen miteinander verglichen werden. In der folgenden Tabelle sind die Vergleichsoperatoren aufgelistet: Operator
Beschreibung
= > < >= <= <>
Gleich Größer als Kleiner als Größer als oder gleich Kleiner als oder gleich Ungleich
Anmerkung Vermeiden Sie die Verwendung von NOT in Suchbedingungen. Durch diesen Operator kann das Abrufen von Daten verzögert werden, weil alle Zeilen einer Tabelle ausgewertet werden.
10
Unterrichtseinheit 3: Abrufen von Daten
Beispiel 1
In diesem Beispiel werden der Nachname und der Wohnort von Mitarbeitern in den USA aus der employees-Tabelle abgerufen. USE Northwind SELECT lastname, city FROM employees WHERE country = 'USA' GO
Ergebnis
lastname
city
Davolio Fuller Leverling Peacock Callahan
Seattle Tacoma Kirkland Redmond Seattle
(5 row(s) affected)
Beispiel 2
In diesem Beispiel werden die orderid-Spalte und die customerid-Spalte mit einem Auftragsdatum, das vor dem 1.8.96 liegt, aus der orders-Tabelle abgerufen. USE Northwind SELECT orderid, customerid FROM orders WHERE orderdate < '8/1/96' GO
Ergebnis
orderid
customerid
10248 10249 10250 10251 10252 10253 . . . (22 row(s) affected)
VINET TOMSP HANAR VICTE SUPRD HANAR . . .
Unterrichtseinheit 3: Abrufen von Daten
11
Verwenden von Zeichenfolgevergleichen Inhalt dieser Folie
Zeigen Sie, wie Zeilen mit Hilfe der Suchbedingung LIKE unter Verwendung von Platzhalterzeichen abgerufen werden.
USE USE Northwind Northwind SELECT SELECT companyname companyname FROM FROM customers customers WHERE WHERE companyname companyname LIKE LIKE '%Restaurant%‘ '%Restaurant%‘ GO GO
Einstieg
Verwenden Sie die Suchbedingung LIKE zum Auswählen von Zeilen durch Vergleichen von Zeichenfolgen.
companyname companyname GROSELLA-Restaurante GROSELLA-Restaurante Lonesome LonesomePine PineRestaurant Restaurant Tortuga TortugaRestaurante Restaurante
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Verwenden Sie die Suchbedingung LIKE in Verbindung mit Platzhalterzeichen zum Auswählen von Zeilen durch Vergleichen von Zeichenfolgen. Beachten Sie bei Verwendung der Suchbedingung LIKE die folgenden Festlegungen: !
Alle Zeichen in der Musterzeichenfolge werden ausgewertet, einschließlich der führenden und der nachstehenden Leerzeichen.
!
LIKE kann nur für Daten des Typs char, nchar, varchar, nvarchar, binary, varbinary, smalldatetime oder datetime verwendet werden. Außerdem kann LIKE unter bestimmten Bedingungen für Daten des Typs text, ntext und image verwendet werden.
Typen von Platzhalterzeichen Verwenden Sie die folgenden vier Platzhalterzeichen in Ihren Suchkriterien für Zeichenfolgen. Platzhalter
Beschreibung
%
Alle Zeichenfolgen mit beliebig vielen Zeichen.
_
Ein einzelnes beliebiges Zeichen.
[]
Ein einzelnes Zeichen aus der angegebenen Zeichengruppe.
[^]
Ein einzelnes Zeichen, das nicht der angegebenen Zeichengruppe angehört.
12
Unterrichtseinheit 3: Abrufen von Daten
Beispiele für die Verwendung von Platzhalterzeichen Die folgende Tabelle enthält Beispiele für die Verwendung von Platzhalterzeichen mit der Suchbedingung LIKE.
Beispiel
Ausdruck
Rückgabe
LIKE 'BR%'
Alle Namen, die mit den Buchstaben BR beginnen.
LIKE 'Br%'
Alle Namen, die mit den Buchstaben Br beginnen.
LIKE '%een'
Alle Namen, die mit den Buchstaben een enden.
LIKE '%en%'
Alle Namen, die die Buchstaben en enthalten.
LIKE '_en'
Alle dreistelligen Namen, die mit den Buchstaben en enden.
LIKE '[CK]%'
Alle Namen, die mit dem Buchstaben C oder K beginnen.
LIKE '[S-V]ing'
Alle vierstelligen Namen, die mit den Buchstaben ing enden und mit einem Buchstaben zwischen S und V beginnen.
LIKE 'S[^c]%'
Alle Namen, die mit dem Buchstaben S beginnen und deren zweiter Buchstabe nicht c ist.
In diesem Beispiel werden alle Firmennamen, die das Wort „Restaurant“ enthalten, aus der customers-Tabelle abgerufen. USE Northwind SELECT companyname FROM customers WHERE companyname LIKE '%Restaurant%' GO
Ergebnis
companyname GROSELLA-Restaurante Lonesome Pine Restaurant Tortuga Restaurante (3 row(s) affected)
Unterrichtseinheit 3: Abrufen von Daten
13
Verwenden von logischen Operatoren Inhalt dieser Folie
Zeigen Sie, wie mehrere Ausdrücke mit Hilfe logischer Operatoren miteinander kombiniert werden.
Beispiel Beispiel 11
USE USE Northwind Northwind SELECT SELECT productid, productid, productname, productname, supplierid, supplierid, unitprice unitprice FROM products FROM products WHERE WHERE (productname (productname LIKE LIKE 'T%' 'T%' OR OR productid productid == 46) 46) AND AND (unitprice (unitprice >> 16.00) 16.00) GO GO
Einstieg
Sie wollen die Anzahl der Zeilen, die beim Ausführen einer Abfrage von SQL Server zurückgegeben werden, einschränken. Verwenden Sie dazu logische Operatoren, um zwei oder mehrere Ausdrücke miteinander zu kombinieren.
productid productid 14 14 29 29 62 62
productname productname Tofu Tofu Thüringer ThüringerRostbratwurst Rostbratwurst Tarte Tarteau ausucre sucre
supplierid supplierid 66 12 12 29 29
unitprice unitprice 23.25 23.25 123.79 123.79 49.3 49.3
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Verwenden Sie die logischen Operatoren AND, OR und NOT, um mehrere Ausdrücke miteinander zu kombinieren und so den Abfragevorgang zu optimieren. Die Ergebnisse einer Abfrage können abhängig von der Gruppierung der Ausdrücke und der Reihenfolge der Suchbedingungen variieren. Beachten Sie bei Verwendung von logischen Operatoren die folgenden Richtlinien: !
Verwenden Sie den Operator AND zum Abrufen von Zeilen, die alle Suchkriterien erfüllen.
!
Verwenden Sie den Operator OR zum Abrufen von Zeilen, die eines der Suchkriterien erfüllen.
!
Verwenden Sie den Operator NOT, um den Ausdruck hinter dem Operator zu verneinen.
Verwenden von Klammern Verwenden Sie Klammern, wenn das Suchkriterium aus mehr als einem Ausdruck besteht. Die Verwendung von Klammern ermöglicht Ihnen Folgendes: !
Gruppieren von Ausdrücken.
!
Ändern der Reihenfolge der Auswertung.
!
Übersichtlicheres Gestalten von Ausdrücken.
Reihenfolge der Suchbedingungen Beachten Sie bei der Verwendung von mehreren logischen Operatoren in einer Anweisung die folgenden Festlegungen: !
Microsoft SQL Server 2000 führt zunächst den Operator NOT, dann den Operator AND und zum Schluss den Operator OR aus.
!
Befinden sich alle Operatoren in einem Ausdruck auf derselben Ebene, gilt bei der Auswertung die Reihenfolge von links nach rechts.
14
Unterrichtseinheit 3: Abrufen von Daten
Beispiel 1
Methodischer Hinweis
Vergleichen Sie die Abfragen in den Beispielen 1 und 2. Weisen Sie darauf hin, dass die Ausdrücke unterschiedlich gruppiert und deshalb die Resultsets unterschiedlich sind.
Ergebnis
In diesem Beispiel werden alle Produkte abgerufen, deren Name mit dem Buchstaben T beginnt oder die die Product ID 46 haben und teurer als 16.00 $ sind. USE Northwind SELECT productid, productname, supplierid, unitprice FROM products WHERE (productname LIKE 'T%' OR productid = 46) AND (unitprice > 16.00) GO
productid
productname
supplierid
unitprice
14 29 62
Tofu Thüringer Rostbratwurst Tarte au sucre
6 12 29
23.25 123.79 49.3
(3 row(s) affected)
Beispiel 2
In diesem Beispiel werden Produkte abgerufen, deren Namen mit dem Buchstaben T beginnen oder die die Product ID 46 haben und teurer als 16.00 $ sind. Vergleichen Sie die Abfrage in Beispiel 1 mit der in Beispiel 2. Beachten Sie, dass die Abfragen unterschiedlich ausgeführt werden und unterschiedliche Resultsets zurückgeben, weil die Ausdrücke unterschiedlich gruppiert sind. USE Northwind SELECT productid, productname, supplierid, unitprice FROM products WHERE (productname LIKE 'T%') OR (productid = 46 AND unitprice > 16.00) GO
Ergebnis
productid
productname
supplierid
unitprice
54 62 23 19 14 29
Tourtière Tarte au sucre Tunnbröd Teatime Chocolate Biscuits Tofu Thüringer Rostbratwurst
25 29 9 8 6 12
7.45 49.3 9 9.2 23.25 123.79
(6 row(s) affected)
Unterrichtseinheit 3: Abrufen von Daten
15
Abrufen eines Wertebereichs Inhalt dieser Folie
USE USE Northwind Northwind SELECT SELECT productname, productname, unitprice unitprice FROM FROM products products WHERE WHERE unitprice unitprice BETWEEN BETWEEN 10 10 AND AND 20 20 GO GO
Zeigen Sie, wie Daten mit Hilfe der Suchbedingung BETWEEN abgerufen werden.
Einstieg
Verwenden Sie die Suchbedingung BETWEEN zum Abrufen von Zeilen, die in einem Wertebereich liegen.
productname productname Chai Chai
Beispiel Beispiel 11
unitprice unitprice 18 18
Chang Chang Aniseed AniseedSyrup Syrup
19 19 10 10
Genen GenenShouyu Shouyu Pavlova Pavlova
15.5 15.5 17.45 17.45
Sir SirRodney’s Rodney’sScones Scones … …
10 10 … …
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Verwenden Sie die Suchbedingung BETWEEN in der WHERE-Klausel zum Abrufen von Zeilen, die in einem bestimmten Wertebereich liegen. Beachten Sie bei Verwendung der Suchbedingung BETWEEN die folgenden Festlegungen und Richtlinien: !
SQL Server schließt die angegebenen Grenzwerte in das Resultset ein.
!
Verwenden Sie zur Vereinfachung der Syntax die Suchbedingung BETWEEN anstelle eines Ausdrucks mit dem Operator AND und zwei Vergleichsoperatoren (> = x AND < = y). Verwenden Sie jedoch für die Suche in einem exklusiven Bereich, bei der die zurückgegebenen Zeilen die Grenzwerte nicht enthalten sollen, einen Ausdruck mit dem Operator AND und zwei Vergleichsoperatoren (> x AND < y).
!
Verwenden Sie die Suchbedingung NOT BETWEEN zum Abrufen von Zeilen, die sich außerhalb des angegebenen Bereichs befinden. Beachten Sie, dass sich das Abrufen von Daten bei Verwendung des Operators NOT verzögern kann.
16
Unterrichtseinheit 3: Abrufen von Daten
Beispiel 1
In diesem Beispiel werden der Produktname und der Einzelpreis von allen Produkten abgerufen, deren Einzelpreis zwischen 10 $ und 20 $ liegt. Beachten Sie, dass das Resultset die angegebenen Grenzwerte einschließt. USE Northwind SELECT productname, unitprice FROM products WHERE unitprice BETWEEN 10 AND 20 GO
Ergebnis
Beispiel 2
productname
unitprice
Chai Chang Aniseed Syrup Genen Shouyu Pavlova Sir Rodney's Scones . . . (29 row(s) affected)
18 19 10 15.5 17.45 10
In diesem Beispiel werden der Produktname und der Einzelpreis von allen Produkten abgerufen, deren Einzelpreis zwischen 10 $ und 20 $ liegt. Beachten Sie, dass das Resultset die angegebenen Grenzwerte ausschließt. USE Northwind SELECT productname, unitprice FROM products WHERE (unitprice > 10) AND (unitprice < 20) GO
Ergebnis
productname
unitprice
Chai Chang Genen Shouyu Pavlova . . . (25 row(s) affected)
18 19 15.5 17.45
Unterrichtseinheit 3: Abrufen von Daten
17
Verwenden einer Werteliste als Suchkriterium Inhalt dieser Folie
Zeigen Sie, wie Zeilen mit Hilfe der Suchbedingung IN abgerufen werden.
USE USE Northwind Northwind SELECT SELECT companyname, companyname, country country FROM suppliers FROM suppliers WHERE WHERE country country IN IN ('Japan', ('Japan', 'Italy') 'Italy') GO GO
Einstieg
Sie möchten Zeilen abrufen, die mit einer bestimmten Werteliste übereinstimmen. Verwenden Sie dazu in der WHERE-Klausel die Suchbedingung IN.
companyname companyname Tokyo TokyoTraders Traders
Beispiel Beispiel 11
country country Japan Japan
Mayumi’s Mayumi’s Formaggi FormaggiFortini Fortinis.r.l. s.r.l.
Japan Japan Italy Italy
Pasta PastaButtini Buttinis.r.l. s.r.l.
Italy Italy
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Methodischer Hinweis
Weisen Sie darauf hin, dass SQL Server die Beispiele 1 und 2 auf dieselbe Weise auflöst und dasselbe Resultset zurückgibt. In Beispiel 1 wird die Suchbedingung IN verwendet, während in Beispiel 2 zwei Vergleichsoperatoren (=), die mit dem Operator OR verbunden sind, verwendet werden.
Verwenden Sie in der WHERE-Klausel die Suchbedingung IN zum Abrufen von Zeilen, die mit einer bestimmten Werteliste übereinstimmen. Beachten Sie bei Verwendung der Suchbedingung IN die folgenden Richtlinien: !
Verwenden Sie entweder die Suchbedingung IN oder eine Reihe von Vergleichsausdrücken, die durch einen Operator OR verbunden sind. SQL Server löst sie in derselben Weise auf und gibt identische Resultsets zurück.
!
Schließen Sie keinen NULL-Wert in die Suchbedingung ein. Ein NULLWert in der Liste der Suchbedingungen wird zum Ausdruck "= NULL". Wenn ON für ANSI_NULLS festgelegt ist, führt ein Vergleich mit NULL immer zu UNKNOWN. Dies kann zu unerwarteten Resultsets führen. Wenn OFF für ANSI_NULLS festgelegt ist, führt ein Vergleich mit NULL zu TRUE oder FASLE. Dies hängt von den Inhalten der verglichenen Spalten ab. Um Probleme zu vermeiden, verwenden Sie stattdessen die Funktionen IS NULL oder IS NOT NULL.
!
Verwenden Sie die Suchbedingung NOT IN zum Abrufen von Zeilen, die nicht in der Werteliste enthalten sind. Beachten Sie, dass sich das Abrufen von Daten bei Verwendung des Operators NOT verzögern kann.
18
Unterrichtseinheit 3: Abrufen von Daten
Beispiel 1
In diesem Beispiel wird aus der suppliers-Tabelle eine Liste von Firmen erstellt, die in Japan oder Italien ansässig sind. USE Northwind SELECT companyname, country FROM suppliers WHERE country IN ('Japan', 'Italy') GO
Ergebnis
Beispiel 2
companyname
country
Tokyo Traders Mayumi's Formaggi Fortini s.r.l. Pasta Buttini s.r.l.
Japan Japan Italy Italy
(4 row(s) affected)
Auch in diesem Beispiel wird aus der suppliers-Tabelle eine Liste von Firmen erstellt, die in Japan oder Italien ansässig sind. Beachten Sie, dass hier statt der Suchbedingung IN zwei Ausdrücke, die durch den Operator OR verbunden sind, mit dem Vergleichsoperator verwendet werden. Das Resultset ist identisch mit dem Resultset in Beispiel 1. USE Northwind SELECT companyname, country FROM suppliers WHERE country = 'Japan' OR country = 'Italy' GO
Ergebnis
companyname
country
Tokyo Traders Mayumi's Formaggi Fortini s.r.l. Pasta Buttini s.r.l.
Japan Japan Italy Italy
(4 row(s) affected)
Unterrichtseinheit 3: Abrufen von Daten
19
Abrufen von unbekannten Werten Inhalt dieser Folie
Zeigen Sie, wie Zeilen mit unbekannten Werten abgerufen werden.
USE USE Northwind Northwind SELECT SELECT companyname, companyname, fax fax FROM suppliers FROM suppliers WHERE WHERE fax fax IS IS NULL NULL GO GO
Einstieg
Sie können Zeilen mit unbekannten Werten abrufen, indem Sie in der WHEREKlausel die Bedingung IS NULL angeben.
companyname companyname Exotic ExoticLiquids Liquids
fax fax NULL NULL
New NewOrleans OrleansCajun CajunDelights Delights Tokyo TokyoTraders Traders
NULL NULL NULL NULL
Cooperativa Cooperativade deQuesos Quesos‘Las ‘LasCabras’ Cabras’ … …
NULL NULL … …
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Eine Spalte enthält einen NULL-Wert, wenn bei der Dateneingabe kein Wert eingegeben wurde und für die Spalte keine Standardwerte definiert sind. Ein NULL-Wert ist nicht dasselbe wie ein Eintrag mit der Zahl 0 oder mit einer Zeichenfolge aus Leerzeichen. Verwenden Sie die Suchbedingung IS NULL zum Abrufen von Zeilen, die eine Spalte mit unbekannten Werten enthalten. Beachten Sie beim Abrufen von Zeilen mit unbekannten Werten die folgenden Festlegungen und Richtlinien: !
Vergleichsoperationen mit NULL-Werten sind nicht möglich, weil sie nicht aus vergleichbaren Werten bestehen.
!
Sie definieren in der CREATE TABLE-Anweisung, ob Spalten NULLWerte enthalten können.
!
Verwenden Sie die Suchbedingung IS NOT NULL zum Abrufen von Zeilen, deren Spalten bekannte Werte enthalten.
20
Beispiel
Unterrichtseinheit 3: Abrufen von Daten
In diesem Beispiel wird aus der suppliers-Tabelle eine Liste von Firmen abgerufen, deren fax-Spalte einen NULL-Wert enthält. USE Northwind SELECT companyname, fax FROM suppliers WHERE fax IS NULL GO
Ergebnis
companyname
fax
Exotic Liquids New Orleans Cajun Delights Tokyo Traders Cooperativa de Quesos 'Las Cabras' . . . (16 row(s) affected)
NULL NULL NULL NULL
Unterrichtseinheit 3: Abrufen von Daten
21
" Formatieren von Resultsets Inhalt dieser Folie
Zeigen Sie, wie Resultsets formatiert werden.
Einstieg
Sie können Ihre Resultsets übersichtlicher gestalten, indem Sie Daten sortieren, doppelte Zeilen löschen, Spaltennamen ändern oder Literale verwenden.
!
Sortieren der Daten
!
Doppelte Zeilen löschen
!
Ändern der Spaltennamen
!
Verwenden von Literalen
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Sie können die Übersichtlichkeit eines Resultsets verbessern, indem Sie die Reihenfolge der Daten im Resultset sortieren, doppelte Zeilen löschen, Spaltennamen in Aliasnamen ändern oder Werte im Resultset durch Literale ersetzen. Diese Formatierungsoptionen ändern nicht die Daten selbst, sondern nur die Darstellung der Daten.
22
Unterrichtseinheit 3: Abrufen von Daten
Sortieren der Daten Inhalt dieser Folie
Zeigen Sie, wie die ORDER BY-Klausel verwendet wird.
Beispiel Beispiel 11
USE USE Northwind Northwind SELECT SELECT productid, productid, productname, productname, categoryid, categoryid, unitprice unitprice FROM products FROM products ORDER ORDER BY BY categoryid, categoryid, unitprice unitprice DESC DESC GO GO
Einstieg
Nachdem Sie die abzurufenden Spalten und Zeilen ausgewählt haben, können Sie die Reihenfolge des Resultsets mit Hilfe der ORDER BY-Klausel sortieren.
productid productid 38 38 43 43 22 … … 63 63 88 61 61 … …
productname categoryid productname categoryid unitprice unitprice Cote 11 263.5000 Cotede deBlaye Blaye 263.5000 Ipoh 11 46.0000 IpohCoffee Coffee 46.0000 Chang 11 19.0000 Chang 19.0000 … … … … … … Vegie-spread 22 43.9000 Vegie-spread 43.9000 Northwoods 40.0000 NorthwoodsCranberry CranberrySauce Sauce 22 40.0000 Sirop 22 28.5000 Siropd'érable d'érable 28.5000 … … … … … …
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Methodischer Hinweis
Vergleichen Sie die in der ORDER BY-Klausel in den Beispielen 1 und 2 angegebenen Spalten. In Beispiel 2 werden die in der ORDER BY-Klausel angegebenen Spalten durch ihre jeweilige Position in der Auswahlliste ersetzt. Die Resultsets in den Beispielen 1 und 2 sind identisch.
Verwenden Sie die ORDER BY-Klausel zum Sortieren von Zeilen im Resultset in aufsteigender (ASC) oder absteigender (DESC) Reihenfolge. Beachten Sie bei Verwendung der ORDER BY-Klausel die folgenden Festlegungen und Richtlinien: !
Die Sortierreihenfolge wird beim Installieren von SQL Server festgelegt. Führen Sie die gespeicherte Systemprozedur sp_helpsort aus, um festzustellen, welche Sortierreihenfolge bei der Installation für die Datenbank definiert wurde.
!
SQL Server übergibt nur dann ein sortiertes Resultset, wenn die Sortierreihenfolge mit einer ORDER BY-Klausel festgelegt wurde.
!
SQL Server sortiert standardmäßig in aufsteigender Reihenfolge.
!
Spalten, die in die ORDER BY-Klausel eingeschlossen sind, müssen nicht in der Auswahlliste enthalten sein.
!
Sie können nach Spaltennamen, berechneten Werten oder Ausdrücken sortieren.
!
Sie können in der ORDER BY-Klausel statt des Spaltennamens die Nummer der Position der Spalte in der Auswahlliste angeben. Die Spalten werden auf dieselbe Weise ausgewertet, und es wird dasselbe Resultset zurückgegeben.
!
Sie können in der ORDER BY-Klausel nicht die Spalten text, ntext oder image verwenden.
Tipp Durch eine geeignete Indizierung kann die Sortierung mit Hilfe der ORDER BY-Klausel weiter verbessert werden.
Unterrichtseinheit 3: Abrufen von Daten
Beispiel 1
23
In diesem Beispiel werden Product ID, Produktname, Kategorie und Einzelpreis jedes einzelnen Produkts aus der products-Tabelle abgerufen. Standardmäßig wird das Resultset nach Kategorien aufsteigend und die Zeilen innerhalb der einzelnen Kategorien nach Einzelpreisen absteigend sortiert. USE Northwind SELECT productid, productname, categoryid, unitprice FROM products ORDER BY categoryid, unitprice DESC GO
Ergebnis
Beispiel 2
productid
productname
categoryid unitprice
38 43 2 1 35 39 76 70 34 67 75 24 63 8 61 6 . . . (77 row(s)
Côte de Blaye Ipoh Coffee Chang Chai Steeleye Stout Chartreuse verte Lakkalikööri Outback Lager Sasquatch Ale Laughing Lumberjack Lager Rhönbräu Klosterbier Guaraná Fantástica Vegie-spread Northwoods Cranberry Sauce Sirop d'érable Grandma's Boysenberry Spread
1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2
263.5000 46.0000 19.0000 18.0000 18.0000 18.0000 18.0000 15.0000 14.0000 14.0000 7.7500 4.5000 43.9000 40.0000 28.5000 25.0000
affected)
Dieses Beispiel ähnelt Beispiel 1. Der einzige Unterschied ist, dass in der ORDER BY-Klausel statt der Spaltennamen die Nummern der Position der Spalten in der Auswahlliste angegeben ist. SQL Server löst beide Abfragen auf dieselbe Weise auf und gibt dasselbe Resultset zurück. USE Northwind SELECT productid, productname, categoryid, unitprice FROM products ORDER BY 3, 4 DESC GO
24
Unterrichtseinheit 3: Abrufen von Daten
Doppelte Zeilen löschen Inhalt dieser Folie
Zeigen Sie, wie doppelte Zeilen mit Hilfe der Suchbedingung DISTINCT gelöscht werden.
Beispiel Beispiel 11
USE USE Northwind Northwind SELECT SELECT DISTINCT DISTINCT country country FROM FROM suppliers suppliers ORDER ORDER BY BY country country GO GO
Einstieg
Geben Sie zum Löschen doppelter Zeilen aus dem Resultset in der SELECTAnweisung die DISTINCTKlausel an.
country country Australia Australia Brazil Brazil Canada Canada Denmark Denmark Finland Finland France France Germany Germany Italy Italy Japan Japan Netherlands Netherlands Norway Norway Singapore Singapore Spain Spain Sweden Sweden UK UK USA USA
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Methodischer Hinweis
Führen Sie eine Abfrage wie im Bild angezeigt aus, jedoch ohne die DISTINCTKlausel. Fordern Sie die Kursteilnehmer auf, die Anzahl der zurückgegebenen Zeilen zu vergleichen.
Beispiel 1
Wenn Sie eine Liste ohne Mehrfachnennungen einzelner Werte benötigen, verwenden Sie die DISTINCT-Klausel zum Löschen doppelter Zeilen im Resultset. Beachten Sie bei Verwendung der DISTINCT-Klausel die folgenden Festlegungen: !
Ist die DISTINCT-Klausel nicht angegeben, werden im Resultset alle Zeilen zurückgegeben, die die in der SELECT-Anweisung festgelegte Suchbedingung erfüllen.
!
Die Kombination der Werte in der Auswahlliste bestimmt die Aussagekraft des Resultsets.
!
Zeilen mit einer einmaligen Kombination von Werten werden abgerufen und im Resultset zurückgegeben.
!
Ist keine ORDER BY-Klausel angegeben, wird das Resultset von der DISTINCT-Klausel unsortiert zurückgegeben.
!
Wenn eine DISTINCT-Klausel angegeben ist, müssen die ORDER BYSpalten in der SELECT-Liste angezeigt werden.
In diesem Beispiel werden alle Reihen aus der suppliers-Tabelle abgerufen, jeder Ländername wird jedoch nur einmal angezeigt. USE Northwind SELECT DISTINCT country FROM suppliers ORDER BY country GO
Unterrichtseinheit 3: Abrufen von Daten
Ergebnis
country Australia Brazil Canada Denmark Finland France Germany Italy Japan Netherlands Norway Singapore Spain Sweden UK USA (16 row(s) affected)
Beispiel 2
In diesem Beispiel ist die DISTINCT-Klausel nicht angegeben. Es werden alle Zeilen aus der suppliers-Tabelle abgerufen und in absteigender Reihenfolge aufgelistet. Beachten Sie, dass alle gefundenen Instanzen eines Ländernamens angezeigt werden. USE Northwind SELECT country FROM suppliers ORDER BY country GO
Ergebnis
country Australia Australia Brazil Canada Canada Denmark Finland France France France Germany Germany Germany Italy Italy Japan Japan Netherlands
25
26
Unterrichtseinheit 3: Abrufen von Daten (Fortsetzung) country Norway Singapore Spain . . . (29 row(s) affected)
Unterrichtseinheit 3: Abrufen von Daten
27
Ändern der Spaltennamen Inhalt dieser Folie
USE USE Northwind Northwind SELECT SELECT firstname firstname AS AS First, First, lastname lastname AS AS Last Last ,employeeid AS 'Employee ID:' ,employeeid AS 'Employee ID:' FROM FROM employees employees GO GO
Zeigen Sie, wie Spaltennamen geändert werden, damit sie besser verständlich sind.
Einstieg
Verwenden Sie Aliasnamen statt der eigentlichen Spaltennamen, damit das Resultset besser verständlich ist.
First First Nancy Nancy Andrew Andrew Janet Janet Margaret Margaret Steven Steven Michael Michael Robert Robert Laura Laura Anne Anne
Last Last Davolio Davolio Fuller Fuller Leverling Leverling Peacock Peacock Buchanan Buchanan Suyama Suyama King King Callahan Callahan Dodsworth Dodsworth
Employee EmployeeID: ID: 11 22 33 44 55 66 77 88 99
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Erstellen Sie für das Resultset besser verständliche Spaltennamen, indem Sie die Standardspaltennamen mit Hilfe des Schlüsselwortes AS durch Aliasnamen ersetzen. Teilsyntax
SELECT column_name | expression AS column_heading FROM table_name Beachten Sie beim Ändern von Spaltennamen die folgenden Festlegungen und Richtlinien: !
Standardmäßig werden im Resultset die Spaltennamen angezeigt, die beim Erstellen der Tabelle in der CREATE TABLE-Anweisung angegeben wurden.
!
Schließen Sie Spaltennamen, die Leerzeichen enthalten oder nicht den Benennungskonventionen für SQL Server-Objekte entsprechen, in einfache Anführungszeichen ein.
!
Sie können Spaltenaliasnamen für berechnete Spalten, die Funktionen oder Zeichenfolgeliterale enthalten, erstellen.
!
Ein Spaltenaliasname darf maximal 128 Zeichen lang sein.
28
Beispiel
Unterrichtseinheit 3: Abrufen von Daten
In diesem Beispiel wird eine Liste der Mitarbeiter aus der employees-Tabelle abgerufen. Die angegebenen Spaltenaliasnamen ersetzen die Spaltennamen firstname, lastname und employeeid. Beachten Sie, dass der Aliasname Employee ID: in einfache Anführungszeichen eingeschlossen ist, weil er ein Leerzeichen enthält. USE Northwind SELECT firstname AS First, lastname AS Last ,employeeid AS 'Employee ID:' FROM employees GO
Ergebnis
First
Last
Employee ID:
Nancy Andrew Janet Margaret Steven Michael Robert Laura Anne
Davolio Fuller Leverling Peacock Buchanan Suyama King Callahan Dodsworth
1 2 3 4 5 6 7 8 9
(9 row(s) affected)
Unterrichtseinheit 3: Abrufen von Daten
29
Verwenden von Literalen Inhalt dieser Folie
Zeigen Sie, wie das Resultset durch die Verwendung von Literalen in der SELECT-Anweisung besser verständlich gemacht werden kann.
Einstieg
Sie können das Resultset mit Hilfe von Literalen besser verständlich machten.
USE USE Northwind Northwind SELECT SELECT firstname, firstname, lastname lastname ,'Identification ,'Identification number:', number:', employeeid employeeid FROM employees FROM employees GO GO First First Nancy Nancy Andrew Andrew Janet Janet Margaret Margaret Steven Steven Michael Michael Robert Robert Laura Laura Anne Anne
Last Last Davolio Davolio Fuller Fuller Leverling Leverling Peacock Peacock Buchanan Buchanan Suyama Suyama King King Callahan Callahan Dodsworth Dodsworth
Employee EmployeeID: ID: Identification Identificationnumber: number: 11 Identification Identificationnumber: number: 22 Identification number: Identification number: 33 Identification Identificationnumber: number: 44 Identification Identificationnumber: number: 55 Identification Identificationnumber: number: 66 Identification Identificationnumber: number: 77 Identification number: Identification number: 88 Identification Identificationnumber: number: 99
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Literale sind Buchstaben, Zahlen oder Symbole, die in einem Resultset als besondere Werte verwendet werden. Sie können Literale in die Auswahlliste einschließen, um Resultsets besser verständlich zu machen. Teilsyntax
SELECT column_name | 'string literal' [, column_name | 'string_literal'...] FROM table_name
Beispiel
In diesem Beispiel wird eine Liste der Mitarbeiter aus der employees-Tabelle abgerufen. Beachten Sie, dass die Zeichenfolge Identification number: im Resultset vor dem Namen der employeeid-Spalte steht. USE Northwind SELECT firstname, lastname ,' Identification number:', employeeid FROM employees GO
Ergebnis
firstname
lastname
Nancy Andrew Janet Margaret Steven Michael Robert Laura Anne
Davolio Fuller Leverling Peacock Buchanan Suyama King Callahan Dodsworth
(9 row(s) affected)
employeeid Identification Identification Identification Identification Identification Identification Identification Identification Identification
number: number: number: number: number: number: number: number: number:
1 2 3 4 5 6 7 8 9
30
Unterrichtseinheit 3: Abrufen von Daten
" Verarbeiten von Abfragen Inhalt dieser Folie
Erläutern Sie die Verarbeitung von Abfragen.
Nicht zwischengespeicherte Abfragen (Ad-hoc )
Einstieg
Alle Abfragen werden auf dieselbe Weise verarbeitet, bevor sie ausgeführt werden.
Analysieren Analysieren
Auflösen Auflösen
Optimieren Optimieren
Kompilieren Kompilieren
Ausführen Ausführen
Kompilieren Kompilieren
Ausführen Ausführen
ProzedurProzedurcache cache
Ausführen Ausführen
Zwischengespeicherte Abfragen Erstes Ausführen Analysieren Analysieren
Auflösen Auflösen
Optimieren Optimieren
Späteres Ausführen
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Alle Abfragen werden auf dieselbe Weise verarbeitet, bevor sie ausgeführt werden. SQL Server kann einen Teil der Verarbeitung für spätere Ausführungen derselben Abfrage speichern.
Nicht zwischengespeicherte Abfragen (Ad-hoc) Alle Abfragen werden analysiert, aufgelöst, optimiert und kompiliert, bevor sie ausgeführt werden. Sichten werden zu einer einzelnen Anweisung reduziert (aufgelöst). Die Anweisung, die auf die Sicht verweist, bildet zusammen mit der Sichtdefinition eine SELECT-Anweisung.
Prozess
Beschreibung
Analysieren
Überprüft, ob die Syntax korrekt ist.
Auflösen
Stellt fest, ob die Namen der Objekte verfügbar sind, und bestimmt die Objektbesitzberechtigung.
Optimieren
Bestimmt die zu verwendenden Indizes und die Verknüpfungsstrategien.
Kompilieren
Übersetzt die Abfrage in ein ausführbares Format.
Ausführen
Sendet kompilierte Verarbeitungsanforderungen.
Zwischengespeicherte Abfragen Zur Verbesserung des Leistungsverhaltens kann SQL Server kompilierte Abfragepläne zur Wiederverwendung speichern. Abfragepläne sind optimierte Anweisungen für die Verarbeitung von Abfragen und den Zugriff auf Daten. Die Abfragepläne werden im Prozedurcache, einem temporären Speicherort für die gerade ausgeführte Version einer bestimmten Abfrage, gespeichert.
Unterrichtseinheit 3: Abrufen von Daten
31
Automatisches Zwischenspeichern von Abfragen Inhalt dieser Folie
Beschreiben Sie, wie SQL Server Abfragen automatisch zwischenspeichert.
Einstieg
Abfragen werden unter zwei Bedingungen automatisch zwischengespeichert.
!
Ad-hoc-Batches
USE USE Northwind Northwind SELECT SELECT ** FROM FROM SELECT SELECT ** FROM FROM SELECT SELECT ** FROM FROM GO GO !
products products products products products products
WHERE WHERE WHERE WHERE WHERE WHERE
unitprice unitprice unitprice unitprice unitprice unitprice
== == ==
$12.5 $12.5 12.5 12.5 $12.5 $12.5
Automatische Parametrisierung
USE USE library library SELECT SELECT ** FROM FROM SELECT SELECT ** FROM FROM SELECT SELECT ** FROM FROM GO GO
member member member member member member
WHERE WHERE WHERE WHERE WHERE WHERE
member_no member_no member_no member_no member_no member_no
== == ==
7890 7890 1234 1234 7890 7890
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Zwischengespeicherte Abfragen werden in einem Speicherbereich abgelegt, der als Prozedurcache bezeichnet wird. Abfragedefinitionen werden automatisch zwischengespeichert, wenn zwei Bedingungen erfüllt sind: Ad-hoc-Batches und automatische Parametrisierung. Das automatische Zwischenspeichern kann nicht direkt angegeben werden.
Ad-hoc-Batches SQL Server speichert die Pläne von Ad-hoc-Batches. Wenn ein nachfolgender Batch mit dem Text des ersten Batches übereinstimmt, verwendet SQL Server den zwischengespeicherten Plan. Dieser Plan ist auf genaue Textübereinstimmungen beschränkt. Beispiel 1
Methodischer Hinweis
Für eine genaue Textübereinstimmung müssen sowohl die Daten als auch die Datentypen übereinstimmen. In diesem Beispiel wird „$12.5“ als Währungsdatentyp, „12.5“ dagegen als Datentyp mit Gleitkomma übergeben.
Für die erste und dritte Anweisung wird derselbe Abfrageplan verwendet. Für die zweite Anweisung wird ein anderer Abfrageplan verwendet. USE Northwind SELECT * FROM products WHERE unitprice = $12.5 SELECT * FROM products WHERE unitprice = 12.5 SELECT * FROM products WHERE unitprice = $12.5 GO
Automatische Parametrisierung SQL Server versucht, die Konstanten zu ermitteln, bei denen es sich tatsächlich um Parameter handelt, und wandelt sie automatisch in Parameter um. Bei Erfolg können spätere Abfragen, die derselben Vorlage folgen, denselben Plan verwenden.
32
Unterrichtseinheit 3: Abrufen von Daten
Beispiel 2
Bei der automatischen Parametrisierung wird für alle drei der folgenden Anweisungen derselbe Abfrageplan verwendet. USE library SELECT * FROM member WHERE member_no = 7890 SELECT * FROM member WHERE member_no = 1234 SELECT * FROM member WHERE member_no = 7890 GO
Unterrichtseinheit 3: Abrufen von Daten
33
Aspekte der Systemleistung Inhalt dieser Folie
Erläutern Sie die Leistungsaspekte, die beim Ausführen einfacher Abfragen zu berücksichtigen sind.
Einstieg
Betrachten Sie einige der Aspekte, die sich beim Ausführen von einfachen Abfragen auf die Leistung von SQL Server auswirken.
!
NOT-Suchbedingungen können das Abrufen von Daten verzögern
!
Suchbedingung LIKE verzögert das Abrufen von Daten
!
Genaue Übereinstimmungen oder Bereiche können das Abrufen von Daten beschleunigen
!
ORDER BY-Klausel kann das Abrufen von Daten verzögern
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Sie sollten in Ihrer Vorgehensweise einige Aspekte berücksichtigen, die sich beim Ausführen von einfachen Abfragen auf die Leistung von SQL Server auswirken. !
Verwenden Sie möglichst keine negativen, sondern positive Suchbedingungen. Negative Suchbedingungen, z. B. NOT BETWEEN, NOT IN und IS NOT NULL, können das Abrufen von Daten verzögern, weil alle Zeilen ausgewertet werden.
!
Vermeiden Sie die Suchbedingung LIKE, wenn die Abfrage auf andere Weise präziser formuliert werden kann. Das Abrufen der Daten kann länger dauern, wenn Sie die Suchbedingung LIKE verwenden.
!
Verwenden Sie, wenn möglich, genaue Übereinstimmungen oder Bereiche als Suchbedingungen. Auch hier gilt, dass präzise formulierte Abfragen schneller ausgeführt werden.
!
Das Abrufen von Daten verzögert sich, wenn Sie die ORDER BY-Klausel verwenden, weil SQL Server das Resultset ermitteln und sortieren muss, bevor die erste Zeile zurückgegeben wird.
34
Unterrichtseinheit 3: Abrufen von Daten
Empfohlene Methoden Inhalt dieser Folie
Nennen Sie die empfohlenen Methoden zum Ausführen einfacher Abfragen.
Verwenden Verwenden Sie Sie die die DISTINCT-Klausel DISTINCT-Klausel zum zum Löschen Löschen doppelter doppelter Zeilen Zeilen im im Resultset Resultset
Einstieg
Die im Folgenden genannten empfohlenen Methoden sollen Sie bei der Ausführung einfacher Abfragen unterstützen.
Verbessern Verbessern Sie Sie die die Verständlichkeit Verständlichkeit eines eines Resultsets, Resultsets, indem indem Sie Sie Spaltennamen Spaltennamen ändern ändern oder oder Literale Literale benutzen benutzen Setzen Setzen Sie Sie in in einer einer mehrzeiligen mehrzeiligen Liste Liste mit mit Spaltennamen Spaltennamen ein ein Komma Komma vor vor alle alle Spaltennamen, Spaltennamen, nicht nicht aber aber vor vor den den ersten ersten
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Die im Folgenden aufgeführten empfohlenen Methoden sollen Sie bei der Ausführung einfacher Abfragen unterstützen: !
Verwenden Sie die DISTINCT-Klausel zum Löschen doppelter Zeilen im Resultset. Wenn Sie die DISTINCT-Klausel nicht verwenden, werden im Resultset alle Zeilen zurückgegeben, die die in der SELECT-Anweisung festgelegten Suchbedingungen erfüllen.
!
Verbessern Sie die Verständlichkeit von Resultsets, indem sie Spaltennamen durch Aliasnamen oder Werte im Resultset durch Literale ersetzen. Mit diesen Formatierungsoptionen wird nur die Darstellung der Daten geändert, die Daten selbst bleiben unverändert.
!
Setzen Sie in den mehrzeiligen Listen mit Spaltennamen Kommas vor alle Spaltennamen, nicht aber vor den ersten Spaltennamen. Bei diesem Format können Sie einzelne Zeilen leicht auskommentieren oder ausschneiden und einfügen. Verwenden Sie zum Beispiel folgendes Format: USE Northwind SELECT firstname AS First ,lastname AS Last ,employeeid AS 'Employee ID:' FROM employees GO
Zusätzliche Informationen zu den folgenden Themen erhalten Sie in der SQL Server-Onlinedokumentation. Thema
Suchbegriff
Verwenden von Zeichenfolgen
“Musterübereinstimmung”
Sortieren der Resultsets
“Sortierreihenfolge”
Unterrichtseinheit 3: Abrufen von Daten
35
Übungseinheit A: Abrufen von Daten und Bearbeiten der Resultsets Inhalt dieser Folie
Geben Sie eine Einführung in die Übungseinheit.
Einstieg
In dieser Übungseinheit werden Sie mit Hilfe der SELECT-Anweisung SQL Server-Datenbanken abfragen und dann die Resultsets formatieren.
****************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: !
Abfragen von Datenbanken mit Hilfe der SELECT-Anweisung.
!
Sortieren der Daten und Löschen doppelter Werte in einem Resultset.
!
Formatieren des Resultsets mit Hilfe von Spaltenaliasnamen und Literalen.
Voraussetzungen Um diese Übungseinheit zu bearbeiten, benötigen Sie Folgendes: !
Die Antwortdateien für diese Übungseinheit, die sich in C:\Moc\2316B\Labfiles\L03\Answers befinden.
!
Die installierte library-Datenbank.
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 SQL Server-Onlinedokumentation.
36
Unterrichtseinheit 3: Abrufen 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, 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: 45 Minuten
Unterrichtseinheit 3: Abrufen von Daten
37
Übung 1 Abrufen von Daten In dieser Übung wählen Sie bestimmte Daten aus Tabellen in der libraryDatenbank aus. Das Verzeichnis C:\Moc\2316B\Labfiles\L03\Answers enthält fertige Skripts für diese Übung.
! So wählen Sie bestimmte Spalten aus In diesem Verfahren werden Sie eine SELECT-Anweisung schreiben und ausführen, die die Spalten title und title_no aus der title-Tabelle abruft. 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. Zeigen und klicken Sie im Menü Abfrage auf Ergebnisse in Text. 4. Klicken Sie in der Liste DB auf library. 5. Schreiben Sie eine SELECT-Anweisung, die die Spalten title und title_no aus der title-Tabelle abruft, und führen Sie sie aus. Answer_Columns.sql enthält ein fertiges Skript für diesen Schritt. USE library SELECT title, title_no FROM title GO
6. Speichern Sie die SELECT-Anweisung als ANSI-Textdatei mit der Erweiterung SQL. 7. Speichern Sie das Resultset in einer Datei mit der Erweiterung RPT. 8. Zeigen und klicken Sie im Menü Abfrage auf Ergebnisse in Raster, um das Format der Ergebnisse zurückzusetzen.
38
Ergebnis
Unterrichtseinheit 3: Abrufen von Daten
Ihr Resultset sollte etwa aussehen wie der folgende Teil eines Resultsets. Title ---------------------------------
title_no --------
Last of the Mohicans The Village Watch-Tower Self Help; Conduct & Perseverance Songs of a Savoyard . . .
1 2 3 4
(50 row(s) affected)
! So wählen Sie Zeilen mit Hilfe eines Vergleichsoperators aus In diesem Verfahren werden Sie eine SELECT-Anweisung schreiben und ausführen, die mit Hilfe einer WHERE-Klausel mit einem Vergleichsoperator Daten aus bestimmten Zeilen abruft. Answer_Comparison.sql enthält ein fertiges Skript für dieses Verfahren. • Schreiben Sie eine SELECT-Anweisung, die den Titel von Titelnummer 10 aus der title-Tabelle abruft, und führen Sie sie aus. Sie können die gespeicherte Systemprozedur sp_help für die title-Tabelle ausführen, um den korrekten Spaltennamen zu ermitteln. USE library SELECT title FROM title WHERE title_no = 10 GO
Ergebnis
Ihr Resultset sollte etwa aussehen wie das folgende Resultset. title The Night-Born (1 row(s) affected)
! So wählen Sie Zeilen mit Hilfe eines Bereichs aus In diesem Verfahren werden Sie eine SELECT-Anweisung schreiben und ausführen, die mit Hilfe einer WHERE-Klausel mit einer Bereichsangabe Daten aus bestimmten Zeilen abruft. Answer_Range.sql enthält ein fertiges Skript für dieses Verfahren. • Schreiben Sie eine SELECT-Anweisung, die die Mitgliedsnummern und festgelegten Mahngebühren für alle Mitglieder mit Mahngebühren zwischen 8 $ und 9 $ aus der loanhist-Tabelle abruft, und führen Sie sie aus. Sie können die gespeicherte Systemprozedur sp_help für die loanhistTabelle ausführen, um den korrekten Spaltennamen zu ermitteln. USE library SELECT member_no, fine_assessed FROM loanhist WHERE (fine_assessed BETWEEN $8.00 AND $9.00) GO
Unterrichtseinheit 3: Abrufen von Daten
Ergebnis
Ihr Resultset sollte etwa aussehen wie der folgende Teil eines Resultsets. Die tatsächliche Anzahl der zurückgegebenen Zeilen kann variieren. member_no
fine_assessed
7399 9.0000 7399 9.0000 7399 9.0000 7399 9.0000 . . . . . . (312 row(s) affected)
! So wählen Sie Zeilen mit Hilfe einer Werteliste aus In diesem Verfahren werden Sie eine SELECT-Anweisung schreiben und ausführen, die mit Hilfe einer WHERE-Klausel, die eine Werteliste enthält, Daten aus bestimmten Zeilen abruft. Answer_InList.sql enthält ein fertiges Skript für dieses Verfahren. • Schreiben Sie eine SELECT-Anweisung, die die Titelnummer und den Autoren aller Bücher von Charles Dickens und Jane Austen aus der titleTabelle abruft, und führen Sie sie aus. Verwenden Sie in der SELECTAnweisung den Operator IN. USE library SELECT author, title_no FROM title WHERE author IN ('Charles Dickens','Jane Austen') GO
Ergebnis
Ihr Resultset sollte etwa aussehen wie das folgende Resultset. author
title_no
Jane Austen Charles Dickens Charles Dickens Jane Austen Jane Austen
27 30 31 41 43
(5 row(s) affected)
! So wählen Sie Zeilen mit Hilfe eines Zeichenfolgevergleichs aus In diesem Verfahren werden Sie eine SELECT-Anweisung schreiben und ausführen, die Daten aus bestimmten Zeilen abruft, die eine Zeichenfolge enthalten, die einer anderen Zeichenfolge entspricht. Answer_String.sql enthält ein fertiges Skript für dieses Verfahren.
39
40
Unterrichtseinheit 3: Abrufen von Daten
• Schreiben Sie eine SELECT-Anweisung, die die Titelnummer und den Titel aus allen Zeilen der title-Tabelle abruft, die einen Titel enthalten, in dem die Zeichenfolge „Adventures“ vorkommt. Verwenden Sie in der Abfrage den Operator LIKE. USE library SELECT title_no, title FROM title WHERE title LIKE ('%Adventures%') GO
Ergebnis
Ihr Resultset sollte etwa aussehen wie das folgende Resultset. title_no
title
26 44
The Adventures of Robin Hood Adventures of Huckleberry Finn
(2 row(s) affected)
! So wählen Sie Zeilen mit NULL-Werten aus In diesem Verfahren werden Sie eine SELECT-Anweisung schreiben und ausführen, die mit Hilfe einer WHERE-Klausel, die nach NULL-Werten sucht, Daten aus bestimmten Zeilen abruft. Answer_IsNull.sql enthält ein fertiges Skript für dieses Verfahren. • Schreiben Sie eine SELECT-Anweisung, die aus der loanhist-Tabelle die Mitgliedsnummer, die festgelegte Mahngebühr und die Mahngebühr für Ausleihungen mit unbezahlten Mahngebühren abruft, und führen Sie sie aus. Rufen Sie Zeilen ab, in denen in der fine_assessed-Spalte Mahngebühren eingegeben wurden und die in der fine_paid-Spalte NULL-Werte enthalten. USE library SELECT member_no, fine_assessed, fine_paid FROM loanhist WHERE (fine_assessed IS NOT NULL) AND (fine_paid IS NULL) GO
Ergebnis
Ihr Resultset sollte etwa aussehen wie das folgende Resultset. Die Anzahl der zurückgegebenen Zeilen kann variieren. member_no
fine_assessed
fine_paid
4645 4240 3821 3389 . . . (1118 row(s) affected)
5.0000 .0000 1.0000 9.0000
NULL NULL NULL NULL
Unterrichtseinheit 3: Abrufen von Daten
41
Übung 2 Bearbeiten der Resultsets In dieser Übung werden Sie Abfragen schreiben und ausführen, mit denen die Anzeige der Daten in den Resultsets geändert wird. Sie werden mit dem DISTINCT-Schlüsselwort doppelte Zeilen löschen und mit dem Schlüsselwort ORDER BY das Resultset sortieren. Außerdem werden Sie die Spaltennamen und die Darstellung der Daten in Resultsets mit Hilfe von Aliasnamen und Literalen ändern. Das Verzeichnis C:\Moc\2316B\Labfiles\L03\Answers enthält fertige Skripts für diese Übung.
! So löschen Sie doppelte Zeilen aus dem Resultset In diesem Verfahren werden Sie eine Abfrage für die adult-Tabelle schreiben und ausführen, die nur eindeutige Stadt/Staat-Kombinationen in Ihrem Resultset zurückgibt. Answer_Duplicates.sql enthält ein fertiges Skript für dieses Verfahren. • Schreiben Sie eine Abfrage, die alle eindeutigen Stadt/Staat-Kombinationen aus der adult-Tabelle abruft, und führen Sie sie aus. Das Resultset darf für jede der Stadt/Staat-Kombinationen nur eine einzige Zeile enthalten. USE library SELECT DISTINCT city, state FROM adult GO
Ergebnis
Ihr Resultset sollte etwa aussehen wie der folgende Teil eines Resultsets. City
state
Salt Lake City Atlanta Tallahassee Washington . . . (23 row(s) affected)
UT GA FL DC
! So sortieren Sie Daten In diesem Verfahren werden sie eine Abfrage schreiben und ausführen, die Titel aus der Tabelle title abruft und sie in alphabetischer Reihenfolge auflistet. Answer_Sort.sql enthält ein fertiges Skript für dieses Verfahren. • Schreiben Sie eine Abfrage, die eine sortierte Liste aller Titel aus der titleTabelle abruft, und führen Sie sie aus. USE library SELECT title FROM title ORDER BY title GO
42
Ergebnis
Unterrichtseinheit 3: Abrufen von Daten
Ihr Resultset sollte etwa aussehen wie der folgende Teil eines Resultsets. Title A Tale of Two Cities Adventures of Huckleberry Finn Ballads of a Bohemian Candide . . . (50 row(s) affected)
! So berechnen Sie Daten, geben Sie berechnete Werte zurück und verwenden Sie einen Spaltenalias
In dieser Übung werden Sie eine Abfrage schreiben und ausführen, die die Spalten member_no, isbn und fine_assessed aus der loanhist-Tabelle von allen archivierten Ausleihungen zurückgibt, die in der fine_assessed-Spalte keinen NULL-Wert enthalten. Danach werden Sie eine neue Spalte im Resultset erstellen, die den berechneten Wert der fine_assessed-Spalte multipliziert mit 2 enthält, und dafür den double fine-Spaltenalias verwenden. Answer_Computed.sql enthält ein fertiges Skript für dieses Verfahren. 1. Schreiben Sie eine Abfrage, die die Spalten member_no, isbn und fine_assessed aus der loanhist-Tabelle von allen archivierten Ausleihungen abruft, die in der fine_assessed-Spalte keinen NULL-Wert enthalten, und führen Sie sie aus. 2. Erstellen Sie eine berechnete Spalte, die den Wert der fine_assessed-Spalte multipliziert mit 2 enthält. 3. Verwenden Sie für die berechnete Spalte den double fine-Spaltenalias. Schließen Sie den Spaltenalias in einfache Anführungszeichen ein, weil er nicht den Benennungskonventionen für SQL Server-Objekte entspricht. USE library SELECT member_no, isbn, fine_assessed ,(fine_assessed * 2) AS 'double fine' FROM loanhist WHERE (fine_assessed IS NOT NULL) GO
Ergebnis
Ihr Resultset sollte etwa aussehen wie das folgende Resultset. Die tatsächliche Anzahl der zurückgegebenen Zeilen kann variieren. member_no
isbn
7399 101 6709 102 . . . (1300 row(s) affected)
fine_assessed
double fine
9.0000 9.0000
18.0000 18.0000
Unterrichtseinheit 3: Abrufen von Daten
43
! So formatieren Sie das Resultset einer Spalte mit Hilfe von Zeichenfolgefunktionen
In diesem Verfahren werden Sie eine Abfrage schreiben und ausführen, die alle Mitglieder in der member-Tabelle mit dem Nachnamen Anderson auflistet. Formatieren Sie das Resultset in Kleinbuchstaben und zeigen Sie eine Spalte mit E-Mail-Namen an, die aus dem Vornamen, dem Anfangsbuchstaben des zweiten Vornamens und den ersten beiden Buchstaben des Nachnamens bestehen. Answer_Formatting.sql enthält ein fertiges Skript für dieses Verfahren. 1. Schreiben Sie eine Abfrage, die eine einzelne Spalte aus den Spalten firstname, middleinitial und lastname aus der member-Tabelle für alle Mitglieder mit dem Namen „Anderson“ generiert. 2. Verwenden Sie den email_name-Spaltenalias. 3. Ändern Sie die Abfrage so, dass eine Liste mit E-Mail-Namen in Kleinbuchstaben bestehend aus dem Vornamen, Anfangsbuchstaben des zweiten Vornamens und den ersten beiden Buchstaben des Nachnamens der Mitglieder zurückgegeben wird. Verwenden Sie die SUBSTRING-Funktion, um Teile einer Zeichenfolgespalte abzurufen. Verwenden Sie die LOWERFunktion, um das Ergebnis in Kleinbuchstaben zurückzugeben. Verketten Sie die Zeichenfolgen mit dem Additionsoperator (+). USE library SELECT LOWER(firstname + middleinitial +SUBSTRING(lastname, 1, 2) ) AS email_name FROM member WHERE lastname = 'anderson' GO
Ergebnis
Ihr Resultset sollte etwa aussehen wie der folgende Teil eines Resultsets. Die Anzahl der zurückgegebenen Zeilen kann variieren. email_name amyaan angelaaan brianaan clairaan . . . (390 row(s) affected)
44
Unterrichtseinheit 3: Abrufen von Daten
! So formatieren Sie das Resultset einer Spalte mit Hilfe von Literalen In diesem Verfahren werden Sie das Resultset einer Abfrage mit Hilfe der CONVERT-Funktion und mit Hilfe von Zeichenfolgeliteralen formatieren, damit es besser verständlich ist. Answer_Literals.sql enthält ein fertiges Skript für dieses Verfahren. 1. Schreiben Sie eine Abfrage, die die Spalten title und title_no aus der titleTabelle abruft, und führen Sie sie aus. Das Resultset sollte aus einer einzigen Spalte bestehen und folgendes Format haben: The title is: title, title number X
Die Abfrage gibt eine einzelne Spalte zurück, deren Inhalt sich aus der Verkettung von vier Elementen ergibt: • The title is: Zeichenfolgekonstante • title.title-Spalte • title number-Zeichenfolgekonstante • title.title_no-Spalte 2. Verwenden Sie die CONVERT-Funktion zum Formatieren der title.title_no-Spalte und den Additionsoperator (+) zum Verketten der Zeichenfolgen. USE library SELECT 'The title is: ' + title + ', title number ' + CONVERT(char(6),title_no) FROM title GO
Ergebnis
Ihr Resultset sollte etwa aussehen wie der folgende Teil eines Resultsets. The The The The The . . . (50
title title title title title
is: is: is: is: is:
Last of the Mohicans, title number 1 The Village Watch-Tower, title number 2 Self Help; Conduct & Perseverance, title number 3 Songs of a Savoyard, title number 4 Fall of the House of Usher, title number 5
row(s) affected)
Unterrichtseinheit 3: Abrufen von Daten
45
Übung 3 Verwenden von Systemfunktionen In dieser Übung sammeln Sie Systeminformationen mit Hilfe von Systemfunktionen. Das Verzeichnis C:\Moc\2316B\Labfiles\L03\Answers enthält fertige Skripts für diese Übung.
! So ermitteln Sie die Serverprozess-ID Bei diesem Verfahren beobachten Sie die aktuelle Serveraktivität und ermitteln die Aktivität, die durch Ihre Sitzung generiert wird. Answer_SPID.sql enthält ein fertiges Skript für dieses Verfahren. 1. Führen Sie die gespeicherte Systemprozedur sp_who aus. SQL Server zeigt alle Aktivitäten auf dem Server an. 2. Um zu ermitteln, welche Aktivität Ihre ist, können Sie die folgende Anweisung ausführen: SELECT @@spid GO
Die Serverprozess-ID (SPID) Ihres Prozesses wird in den Ergebnissen zurückgegeben. 3. Führen Sie die gespeicherte Systemprozedur sp_who erneut aus, wobei Sie Ihre SPID als zusätzlichen Parameter verwenden. (In der folgenden Anweisung steht n für Ihre SPID.) EXEC sp_who n GO
Die mit Ihrer SPID verbundene Aktivität wird angezeigt.
! So rufen Sie Umgebungsinformationen ab Bei diesem Verfahren wird ermittelt, welche Version von SQL Server ausgeführt wird, und Sie rufen Informationen über die Verbindung, den Datenbankkontext und den Server ab. Sie führen diese Aufgaben mit Hilfe von Systemfunktionen aus. Answer_Environment.sql enthält ein fertiges Skript für dieses Verfahren. 1. Führen Sie die folgende Anweisung aus: SELECT @@version GO
2. Führen Sie die folgende Anweisung aus: SELECT USER_NAME(), DB_NAME(), @@servername GO
46
Unterrichtseinheit 3: Abrufen von Daten
! So rufen Sie Metadaten ab Bei diesem Verfahren führen Sie mehrere Abfragen aus, die Metadaten von bestimmten Datenbankobjekten zurückgeben, indem Informationsschemasichten verwendet werden. Zur Erinnerung: information_schema ist ein vordefinierter Datenbankbenutzer, der alle Informationsschemasichten besitzt. Answer_Metadata.sql enthält ein fertiges Skript für dieses Verfahren. 1. Führen Sie die folgende Anweisung aus, um eine Liste aller benutzerdefinierten Tabellen in einer Datenbank zurückzugeben: USE library SELECT * FROM information_schema.tables WHERE table_type = 'base table' GO
2. Führen Sie die folgende Anweisung aus, um die Primärschlüssel- und Fremdschlüsselspalten für die orders-Tabelle zurückzugeben: USE Northwind SELECT * FROM information_schema.key_column_usage WHERE table_name = 'orders' GO
Für welche Spalte ist ein Primärschlüssel definiert? orderid ____________________________________________________________ ____________________________________________________________
Unterrichtseinheit 3: Abrufen von Daten
47
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.
!
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**************** Verwenden Sie dieses Szenario, um die Fragen zu beantworten und die Themen der Unterrichtseinheit durchzugehen. Klären Sie offene Fragen der Kursteilnehmer zu Themen der Unterrichtseinheit.
Sie sind der Datenbankadministrator für einen Gesundheitsfürsorgeplan. Die physicians-Tabelle wurde mit folgenden Anweisungen 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 , city varchar (255) NULL , state varchar (255) NULL , postal_code varchar (7) NULL , co_pay money NOT NULL CONSTRAINT phys_co_pay DEFAULT (10) )
1. Wie rufen Sie Informationen über Ärzte ab, die eine Praxis in den Staaten New York (NY), Washington (WA), Virginia (VA) oder Kalifornien (CA) haben? Schreiben Sie eine SELECT-Anweisung mit der folgenden WHEREKlausel: WHERE state = 'NY' OR state = 'WA' OR state = …
Oder verwenden Sie eine WHERE-Klausel mit dem Schlüsselwort IN. WHERE state IN ('NY', 'WA', 'VA', 'CA')
48
Unterrichtseinheit 3: Abrufen von Daten
2. Wie können Sie eine Liste von Staaten generieren, die im Resultset keine Staaten doppelt enthält? Verwenden Sie in der SELECT-Anweisung das DISTINCT-Schlüsselwort.
3. Wie können Sie in Ihrem Resultset eine Spalte generieren, die den co_payWert plus einer Servicegebühr in Höhe von 5 $ für jeden Arzt auflistet, und dieser Spalte den Amt_Due-Aliasnamen geben? Verwenden Sie in der Auswahlliste eine berechnete Spalte. Verwenden Sie anstelle des Spaltennamens einen Alias: ‘Amt_Due’ = (co_pay + 5)
Inhalt
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
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 4: Gruppieren und Zusammenfassen von Daten
iii
Hinweise für den Kursleiter Präsentation: 45 Minuten Übungseinheit: 45 Minuten
Diese Unterrichtseinheit vermittelt den Kursteilnehmern die Fähigkeiten, Daten mit Hilfe von Aggregatfunktionen zu gruppieren und zusammenzufassen. Diese Fähigkeiten schließen das Verwenden der GROUP BY- und HAVINGKlauseln zum Zusammenfassen und Gruppieren von Daten ein. Außerdem gehört zu diesen Fähigkeiten das Verwenden der ROLLUP- und CUBEOperatoren zusammen mit der GROUPING-Funktion zum Gruppieren von Daten und zum Zusammenfassen von Werten für diese Gruppen. In dieser Unterrichtseinheit wird außerdem vorgestellt, wie die COMPUTE- und COMPUTE BY-Klauseln verwendet werden, um Zusammenfassungsberichte zu generieren und um die TOP n-Werte in einem Resultset aufzulisten. Am Ende dieser Unterrichtseinheit werden die Kursteilnehmer in der Lage sein, die folgenden Aufgaben auszuführen: !
Verwenden des TOP n-Schlüsselwortes, um eine Liste der angegebenen oberen Werte in einer Tabelle abzufragen.
!
Generieren eines einzelnen zusammenfassenden Wertes mit Hilfe von Aggregatfunktionen.
!
Organisieren von Zusammenfassungsdaten für eine Spalte mit Hilfe von Aggregatfunktionen zusammen mit den GROUP BY- und HAVINGKlauseln.
!
Generieren von Zusammenfassungsdaten für eine Tabelle mit Hilfe von Aggregatfunktionen zusammen mit der GROUP BY-Klausel und dem ROLLUP- oder CUBE-Operator.
!
Generieren von Berichten mit Gruppenwechseln mit Hilfe der COMPUTEund der COMPUTE BY-Klauseln.
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 diesen Kurs zu unterrichten, benötigen Sie folgende Unterlagen: !
Die Microsoft® PowerPoint®-Datei 2316B_04.ppt
!
Die Beispieldatei C:\Moc\2316B\Demo\Ex_04.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.
!
Bearbeiten Sie alle Vorführungen.
!
Arbeiten Sie die Übungseinheit durch.
iv
Unterrichtseinheit 4: Gruppieren und Zusammenfassen von Daten
Strategie für die Unterrichtseinheit Verwenden Sie die folgende Strategie, um diese Unterrichtseinheit zu präsentieren: !
Auflisten der TOP n-Werte Stellen Sie dieses Thema vor, indem Sie das TOP n-Schlüsselwort verwenden, um nur die ersten n Zeilen oder n Prozent eines Resultsets aufzulisten. Das TOP n-Schlüsselwort entspricht zwar nicht dem ANSI-Standard, es kann jedoch z. B. zum Auflisten der am besten verkauften Produkte eines Unternehmens nützlich sein.
!
Verwenden von Aggregatfunktionen Erläutern Sie die Verwendung von Aggregatfunktionen beim Zusammenfassen von Daten. Weisen Sie darauf hin, dass beim Verwenden von Aggregatfunktionen mit NULL-Werten Vorsicht geboten ist, da die Resultsets möglicherweise nicht repräsentativ für die Daten sind. Das Verwenden von Aggregatfunktionen ist die Grundlage für die verbleibenden Themen, die in dieser Unterrichtseinheit vorgestellt werden.
!
Grundlagen der GROUP BY-Klausel Erläutern Sie die Vorteile des Verwendens von Aggregatfunktionen zusammen mit der GROUP BY-Klausel zum Organisieren von Zeilen in Gruppen und zum Zusammenfassen dieser Gruppen. Die HAVING-Klausel wird zusammen mit der GROUP BY-Klausel verwendet, um die Zeilen zu beschränken, die zurückgegeben werden. Verwenden Sie die Tabellen auf der Folie, um die Verwendung der GROUP BY-Klausel mit der Verwendung der HAVING-Klausel zu vergleichen.
!
Generieren von Aggregatwerten in Resultsets Stellen Sie die Verwendung der ROLLUP- und CUBE-Operatoren zum Generieren von detaillierten und zusammenfassenden Werten im Resultset vor. Beide Operatoren stellen Daten in einem relationalen Standardformat bereit, das für andere Anwendungen verwendet werden kann. Erläutern Sie, wie die GROUPING-Funktion verwendet werden kann, um zu ermitteln, ob die Werte im Resultset detaillierte Werte oder eine Zusammenfassung darstellen. Weisen Sie darauf hin, dass auf den Folien die im Resultset angezeigten NULL-Werte zusammenfassende Werte darstellen.
!
Verwenden der COMPUTE- und COMPUTE BY-Klauseln Erwähnen Sie, dass die COMPUTE- und COMPUTE BY-Klauseln auch zum Drucken von einfachen Berichten oder zum Überprüfen von Clientergebnissen verwendet werden können. Beschäftigen Sie sich nicht zu lange mit diesen Klauseln, da sie nicht dem ANSI-Standard entsprechen und da sie Resultsets in einem nicht relationalen Format generieren. Verwenden Sie die Tabelle auf der Folie, um die Resultsets zu vergleichen, die bei der Verwendung der COMPUTE- und COMPUTE BY-Klauseln generiert werden.
Unterrichtseinheit 4: Gruppieren und Zusammenfassen von Daten
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 Unterrichtseinheit Das Skript C:\Moc\2316B\Batches\2316_R04.sql, mit dem die orderhistTabelle zur Northwind-Datenbank hinzugefügt wird, wird normalerweise beim Einrichten der Schulungscomputer 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 besonderen Anforderungen für das 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 4: Gruppieren und Zusammenfassen von Daten
This page is intentionally left blank.
Unterrichtseinheit 4: Gruppieren und Zusammenfassen von Daten
1
Übersicht Inhalt dieser Folie
Geben Sie eine Übersicht über die Themen und Lernziele dieser Unterrichtseinheit.
Einstieg
Beim Abrufen von Daten kann es sinnvoll sein, die Daten zu gruppieren oder zusammenzufassen.
!
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**************** Beim Abrufen von Daten kann es sinnvoll sein, die Daten zu gruppieren oder zusammenzufassen. Diese Unterrichtseinheit vermittelt den Kursteilnehmern die Fähigkeiten, Daten mit Hilfe von Aggregatfunktionen zu gruppieren und zusammenzufassen. Diese Fähigkeiten schließen das Verwenden der GROUP BY- und HAVINGKlauseln zum Zusammenfassen und Gruppieren von Daten ein. Außerdem gehört zu diesen Fähigkeiten das Verwenden der ROLLUP- und CUBEOperatoren zusammen mit der GROUPING-Funktion zum Gruppieren von Daten und zum Zusammenfassen der Werte für diese Gruppen. In dieser Unterrichtseinheit wird außerdem vorgestellt, wie die COMPUTE- und COMPUTE BY-Klauseln verwendet werden, um Zusammenfassungsberichte zu generieren und um die TOP n-Werte in einem Resultset aufzulisten. Am Ende dieser Unterrichtseinheit werden Sie in der Lage sein, die folgenden Aufgaben auszuführen: !
Verwenden des TOP n-Schlüsselwortes, um eine Liste der angegebenen oberen Werte in einer Tabelle abzufragen.
!
Generieren eines einzelnen zusammenfassenden Wertes mit Hilfe von Aggregatfunktionen.
!
Organisieren von Zusammenfassungsdaten für eine Spalte mit Hilfe von Aggregatfunktionen zusammen mit den GROUP BY- und HAVINGKlauseln.
!
Generieren von Zusammenfassungsdaten für eine Tabelle mit Hilfe von Aggregatfunktionen zusammen mit der GROUP BY-Klausel und dem ROLLUP- oder CUBE-Operator.
!
Generieren von Berichten mit Gruppenwechseln mit Hilfe der COMPUTEund der COMPUTE BY-Klauseln.
2
Unterrichtseinheit 4: Gruppieren und Zusammenfassen von Daten
Auflisten der TOP n-Werte Inhalt dieser Folie
!
Beschreiben Sie, wie die oberen n zusammenfassenden Werte aufgelistet werden.
!
!
Einstieg
Verwenden Sie das TOP nSchlüsselwort, um nur die ersten n Zeilen eines Resultsets aufzulisten.
Nur die ersten n Zeilen eines Resultsets werden aufgelistet Angeben des Bereichs der Werte in der ORDER BY-Klausel Übereinstimmende Werte werden zurückgegeben, wenn WITH TIES verwendet wird Beispiel Beispiel 11
USE USE Northwind Northwind SELECT SELECT TOP TOP 55 orderid, orderid, productid, productid, quantity quantity FROM [order details] FROM [order details] ORDER ORDER BY BY quantity quantity DESC DESC GO GO
Beispiel 2
Beispiel 2 USE USE Northwind Northwind SELECT SELECT TOP TOP 55 WITH WITH TIES TIES orderid, orderid, productid, productid, quantity quantity FROM FROM [order [order details] details] ORDER ORDER BY BY quantity quantity DESC DESC GO GO
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Hinweis für den Kursleiter
Geeignete Indizes können die Leistungsfähigkeit von Sortierungen und Gruppierungen erhöhen. In diesem Kurs wird das Erstellen von Indizes nicht ausführlich behandelt. Weitere Informationen zum Erstellen von Indizes finden Sie in Kurs 2328A, Programmieren einer Microsoft SQL Server 2000-Datenbank.
Verwenden Sie das TOP n-Schlüsselwort, um nur die ersten n Zeilen oder n Prozent eines Resultsets aufzulisten. Das TOP n-Schlüsselwort entspricht zwar nicht dem ANSI-Standard, es kann jedoch z. B. zum Auflisten der am besten verkauften Produkte eines Unternehmens nützlich sein. Wenn Sie das TOP n-Schlüsselwort oder das TOP n PERCENT-Schlüsselwort verwenden, beachten Sie die folgenden Aspekte und Richtlinien: !
Geben Sie den Bereich der Werte in der ORDER BY-Klausel an. Wenn Sie keine ORDER BY-Klausel verwenden, gibt Microsoft® SQL Server™ 2000 Zeilen zurück, die die WHERE-Klausel erfüllen, ohne dass eine bestimmte Reihenfolge verwendet wird.
!
Verwenden Sie hinter dem TOP-Schlüsselwort eine ganze Zahl ohne Vorzeichen.
!
Wenn das TOP n PERCENT-Schlüsselwort eine Zeile mit Dezimalstellen ergibt, rundet SQL Server auf die nächste ganze Zahl auf.
!
Verwenden Sie die WITH TIES-Klausel, um Übereinstimmungen im Resultset einzuschließen. Übereinstimmungen entstehen, wenn zwei oder mehr Werte mit der letzten Zeile gleich sind, die in der ORDER BY-Klausel zurückgegeben wird. Aus diesem Grund kann das Resultset eine beliebige Anzahl von Zeilen enthalten. Anmerkung Die WITH TIES-Klausel kann nur in Verbindung mit einer ORDER BY-Klausel verwendet werden.
Unterrichtseinheit 4: Gruppieren und Zusammenfassen von Daten
Beispiel 1
In diesem Beispiel wird das TOP n-Schlüsselwort verwendet, um die fünf Produkte mit den höchsten Bestellmengen in einer einzelnen Bestellung zu ermitteln. Übereinstimmende Werte werden aus dem Resultset ausgeschlossen. USE Northwind SELECT TOP 5 orderid, productid, quantity FROM [order details] ORDER BY quantity DESC GO
Ergebnis
orderid
productid
quantity
10764 11072 10398 10451 10515
39 64 55 55 27
130 130 120 120 120
(5 row(s) affected)
Beispiel 2
Methodischer Hinweis
Vergleichen Sie das folgende Resultset mit dem Resultset aus Beispiel 1.
Ergebnis
In diesem Beispiel wird das TOP n-Schlüsselwort und die WITH TIES-Klausel verwendet, um die fünf Produkte mit den höchsten Bestellmengen in einer einzelnen Bestellung zu ermitteln. Das Resultset listet insgesamt 10 Produkte auf, da zusätzliche Zeilen eingeschlossen sind, die dieselben Werte wie die letzte Zeile enthalten. Vergleichen Sie das folgende Resultset mit dem Resultset aus Beispiel 1. USE Northwind SELECT TOP 5 WITH TIES orderid, productid, quantity FROM [order details] ORDER BY quantity DESC GO orderid
productid
quantity
10764 11072 10398 10451 10515 10595 10678 10711 10776 10894
39 64 55 55 27 61 41 53 51 75
130 130 120 120 120 120 120 120 120 120
(10 row(s) affected)
3
4
Unterrichtseinheit 4: Gruppieren und Zusammenfassen von Daten
" Verwenden von Aggregatfunktionen Inhalt dieser Folie
Führen Sie die Verwendung von Aggregatfunktionen beim Erstellen von Zusammenfassungsdaten vor.
Aggregatfunktion Aggregatfunktion
Einstieg
Verwenden Sie Aggregatfunktionen, um Spaltenwerte zu berechnen und um diese Werte ins Resultset einzuschließen.
Beschreibung Beschreibung
AVG AVG
Durchschnittswert Durchschnittswerteines einesnumerischen numerischenAusdrucks Ausdrucks
COUNT COUNT
Anzahl Anzahlder derWerte Werteinineinem einemAusdruck Ausdruck
COUNT COUNT(*) (*)
Anzahl Anzahlder derausgewählten ausgewähltenZeilen Zeilen
MAX MAX
Höchster HöchsterWert Wertinnerhalb innerhalbdes desAusdrucks Ausdrucks
MIN MIN
Niedrigster NiedrigsterWert Wertinnerhalb innerhalbdes desAusdrucks Ausdrucks
SUM SUM
Gesamtwert Gesamtwerteines einesnumerischen numerischenAusdrucks Ausdrucks
STDEV STDEV
Statistische StatistischeAbweichung Abweichungaller allerWerte Werte
STDEVP STDEVP
Statistische StatistischeAbweichung Abweichungfür fürdie dieAuffüllung Auffüllung
VAR VAR
Statistische StatistischeVarianz Varianzaller allerWerte Werte
VARP VARP
Statistische StatistischeVarianz Varianzaller allerWerte Wertefür fürdie dieAuffüllung Auffüllung
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Funktionen, die Mittelwerte und Summen berechnen, werden Aggregatfunktionen genannt. Wenn eine Aggregatfunktion ausgeführt wird, fasst SQL Server Werte für eine gesamte Tabelle oder für Gruppen von Spalten in der Tabelle zusammen, wobei ein einzelner Wert für jede Zeilengruppe der angegebenen Spalten erstellt wird: !
Aggregatfunktionen können mit der SELECT-Anweisung oder in Kombination mit der GROUP BY-Klausel verwendet werden.
!
Mit Ausnahme der COUNT(*)-Funktion geben alle Aggregatfunktionen NULL zurück, wenn keine Zeile die WHERE-Klausel erfüllt. Die COUNT(*)-Funktion gibt den Wert Null zurück, wenn keine Zeile die WHERE-Klausel erfüllt.
Tipp Indizieren Sie häufig aggregierte Spalten, um die Abfrageleistung zu verbessern. Wenn Sie z. B. in der quantity-Spalte häufig Aggregatfunktionen verwenden, werden durch Indizieren der quantity-Spalte die Aggregatoperationen verbessert. Durch den Datentyp einer Spalte werden die Funktionen ermittelt, die für diese Spalte verwendet werden können. In der folgenden Tabelle werden die Beziehungen zwischen Funktionen und Datentypen beschrieben.
Unterrichtseinheit 4: Gruppieren und Zusammenfassen von Daten
5
Funktion
Datentyp
COUNT
COUNT ist die einzige Aggregatfunktion, die bei Spalten mit text-, ntext- oder image-Datentypen verwendet werden kann.
MIN und MAX
MIN- und MAX-Funktionen können bei Spalten mit bit-Datentypen nicht verwendet werden.
SUM und AVG
SUM- und AVG-Aggregatfunktionen können nur bei Spalten mit int-, smallint-, tinyint-, decimal-, numeric-, float-, real-, moneyund smallmoney-Datentypen verwendet werden. Wenn Sie die SUM- oder AVG-Funktion verwenden, behandelt SQL Server die smallint- oder tinyint-Datentypen im Resultset wie einen int-Datentypwert.
Teilsyntax
SELECT [ ALL | DISTINCT ] [ TOP n [PERCENT] [ WITH TIES] ] <select_list> [ INTO new_table ] [ FROM ] [ WHERE <search_conditions> ] [ [ GROUP BY [ALL] group_by_expression [,…n]] [HAVING <search_conditions> ] [ WITH { CUBE | ROLLUP } ] ] [ ORDER BY { column_name [ ASC | DESC ] } [,…n] ] [ COMPUTE { { AVG | COUNT | MAX | MIN | SUM } (expression) } [,…n] [ BY expression [,…n] ]
Beispiel 1
In diesem Beispiel wird der durchschnittliche Einheitenpreis aller Produkte in der products-Tabelle berechnet. USE Northwind SELECT AVG(unitprice) FROM products GO
Ergebnis 28,8663 (1 row(s) affected)
Beispiel 2
In diesem Beispiel werden alle Zeilen in der quantity-Spalte zur order detailsTabelle hinzugefügt. USE Northwind SELECT SUM(quantity) FROM [order details] GO
Ergebnis 51317 (1 row(s) affected)
6
Unterrichtseinheit 4: Gruppieren und Zusammenfassen von Daten
Verwenden von Aggregatfunktionen mit NULL-Werten Inhalt dieser Folie
Erläutern Sie die Verhaltensweise von NULLWerten, wenn sie in Aggregatfunktionen verwendet werden.
Einstieg
!
Die meisten Aggregatfunktionen ignorieren NULL-Werte
!
Die Funktion COUNT(*) zählt auch Zeilen mit NULL-Werten
USE USE Northwind Northwind SELECT SELECT COUNT COUNT (*) (*) FROM FROM employees employees GO GO
Bei der Verwendung von Aggregatfunktionen mit NULL-Werten kann es zu unerwarteten Ergebnissen kommen.
USE USE Northwind Northwind SELECT SELECT COUNT(reportsto) COUNT(reportsto) FROM FROM employees employees GO GO
Beispiel Beispiel 11
Beispiel Beispiel 22
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Bei der Verwendung von Aggregatfunktionen mit NULL-Werten kann es zu unerwarteten Ergebnissen kommen. Wenn Sie z. B. eine SELECT-Anweisung ausführen, in die eine COUNT-Funktion für eine Spalte mit 18 Zeilen eingeschlossen ist, von denen zwei Zeilen NULL-Werte enthalten, gibt das Resultset insgesamt 16 Zeilen zurück. SQL Server ignoriert die zwei Zeilen, die NULLWerte enthalten. Daher ist beim Verwenden von Aggregatfunktionen in Spalten mit NULL-Werten Vorsicht geboten, da das Resultset unter Umständen nicht repräsentativ für die Daten ist. Wenn Sie dennoch Aggregatfunktionen mit NULL-Werten verwenden möchten, beachten Sie folgende Aspekte:
Beispiel 1
!
Alle SQL Server-Aggregatfunktionen, mit Ausnahme der COUNT(*)-Funktion, ignorieren NULL-Werte in Spalten.
!
Die COUNT(*)-Funktion zählt alle Zeilen, auch wenn jede Zeile einen NULL-Wert enthält. Wenn Sie z. B. eine SELECT-Anweisung mit COUNT(*)-Funktion in einer Spalte mit 18 Zeilen ausführen, von denen zwei Zeilen NULL-Werte enthalten, gibt das Resultset insgesamt 18 Zeilen zurück.
In diesem Beispiel wird die Anzahl der Angestellten in der employees-Tabelle aufgelistet. USE Northwind SELECT COUNT(*) FROM employees GO
Ergebnis 9 (1 row(s) affected)
Unterrichtseinheit 4: Gruppieren und Zusammenfassen von Daten
Beispiel 2
7
In diesem Beispiel wird die Anzahl der Angestellten aufgelistet, für die in der reportsto-Spalte in der employees-Tabelle kein NULL-Wert steht, d. h., für die ein zuständiger Manager definiert ist. USE Northwind SELECT COUNT(reportsto) FROM employees GO
Ergebnis 8 (1 row(s) affected)
8
Unterrichtseinheit 4: Gruppieren und Zusammenfassen von Daten
" Grundlagen der GROUP BY-Klausel Inhalt dieser Folie
Geben Sie eine Übersicht über die Klauseln, mit denen Werte für eine Spalte zusammengefasst werden.
Einstieg
In der Regel werden Aggregatfunktionen in Verbindung mit der GROUP BY- und der HAVING-Klausel verwendet.
!
Verwenden der GROUP BY-Klausel
!
Verwenden der GROUP BY-Klausel mit der HAVING-Klausel
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Eine Aggregatfunktion erstellt automatisch einen einzelnen zusammenfassenden Wert für alle Zeilen in einer Spalte. Wenn Sie zusammenfassende Werte für eine Spalte generieren möchten, verwenden Sie Aggregatfunktionen mit der GROUP BY-Klausel. Durch Verwenden der HAVING-Klausel mit der GROUP BY-Klausel können die Gruppen der Zeilen, die im Resultset zurückgegeben werden, eingeschränkt werden. Anmerkung Das Verwenden der GROUP BY-Klausel stellt keine Sortierreihenfolge sicher. Wenn die Ergebnisse sortiert werden sollen, schließen Sie die ORDER BY-Klausel ein.
Unterrichtseinheit 4: Gruppieren und Zusammenfassen von Daten
9
Verwenden der GROUP BY-Klausel USE USE Northwind Northwind SELECT SELECT productid, productid, orderid orderid ,quantity ,quantity FROM FROM orderhist orderhist GO GO
Inhalt dieser Folie
Erläutern Sie, wie Daten mit der GROUP BY-Klausel zusammengefasst werden.
Einstieg
USE USE Northwind Northwind SELECT SELECT productid productid ,SUM(quantity) ,SUM(quantity) AS AS total_quantity total_quantity FROM FROM orderhist orderhist GROUP GROUP BY BY productid productid GO GO
productid orderid quantity quantity productid orderid
Die GROUP BY-Klausel kann in Spalten oder Ausdrücken verwendet werden, um Zeilen in Gruppen zu organisieren und um diese Gruppen zusammenzufassen.
11 11
11 11
55 10 10
22 22
11 22
10 10 25 25
33 33
11 22
15 15 30 30
productid total_quantity productid total_quantity Nur Zeilen, die die Bedingungen der WHERE-Klausel erfüllen, werden gruppiert
11
15 15
22 33
35 35 45 45
productid productid total_quantity total_quantity 22
35 35
USE USE Northwind Northwind SELECT SELECT productid productid ,SUM(quantity) ,SUM(quantity) AS AS total_quantity total_quantity FROM FROM orderhist orderhist WHERE WHERE productid productid == 22 GROUP GROUP BY BY productid productid GO GO
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Die GROUP BY-Klausel kann in Spalten oder Ausdrücken verwendet werden, um Zeilen in Gruppen zu organisieren und um diese Gruppen zusammenzufassen. Mit der GROUP BY-Klausel können Sie z. B. die Menge jedes einzelnen bestellten Produkts für alle Bestellungen ermitteln. Methodischer Hinweis
Die orderhist-Tabelle wurde speziell für die Beispiele in dieser Unterrichtseinheit erstellt. Sie befindet sich auch auf der Kursteilnehmer-CD. Vergleichen Sie die Resultsets auf der Folie. Die linke Tabelle listet alle Zeilen in der orderhist-Tabelle auf. In der Tabelle oben rechts wird die GROUP BY-Klausel verwendet, um die Daten nach der productid-Spalte zu gruppieren und die Gesamtmenge anzugeben, die von jeder Gruppe bestellt wurde. In der Tabelle unten rechts werden die GROUP BYKlausel und die WHEREKlausel verwendet, um die Anzahl der zurückgegebenen Zeilen weiter einzuschränken.
Wenn Sie die GROUP BY-Klausel verwenden, beachten Sie die folgenden Aspekte und Richtlinien: !
SQL Server erstellt eine Spalte mit Werten für jede definierte Gruppe.
!
SQL Server gibt nur einzelne Zeilen für jede angegebene Gruppe zurück; detaillierte Informationen werden nicht zurückgeben.
!
Alle in der GROUP BY-Klausel angegebenen Spalten müssen in der Auswahlliste eingeschlossen sein.
!
Wenn eine WHERE-Klausel eingeschlossen wird, gruppiert SQL Server nur die Zeilen, die die Bedingungen in der WHERE-Klausel erfüllen.
!
Die Anzahl von Spaltenelementen wird durch die Größe der GROUP BYSpalte, die aggregierten Spalten und die aggregierten Werte in der Abfrage beschränkt. Dies resultiert aus der Beschränkung auf 8.060 Bytes für die temporäre Arbeitstabelle, die für die temporären Abfrageergebnisse erforderlich ist.
!
Die GROUP BY-Klausel kann bei Spalten, die mehrere NULL-Werte enthalten, nicht verwendet werden, da die NULL-Werte als Gruppe verarbeitet werden.
10
Unterrichtseinheit 4: Gruppieren und Zusammenfassen von Daten !
Verwenden Sie das ALL-Schlüsselwort mit der GROUP BY-Klausel, damit alle Zeilen mit NULL-Werten in den Aggregatspalten angezeigt werden, unabhängig davon, ob die Zeilen die WHERE-Klausel erfüllen.
Anmerkung Die orderhist-Tabelle wurde speziell für die Beispiele in dieser Unterrichtseinheit erstellt. Das Skript 2316_R04.sql, das sich im Ordner Batches auf der Kursteilnehmer-CD befindet, kann ausgeführt werden, um die orderhist-Tabelle zur Northwind-Datenbank hinzuzufügen. Beispiel 1
Dieses Beispiel gibt Informationen zu den Bestellungen aus der orderhistTabelle zurück. Durch die Abfrage werden alle Product IDs gruppiert und aufgelistet sowie die gesamte Bestellmenge berechnet. Die Gesamtsumme wird mit der SUM-Aggregatfunktion berechnet, und es wird ein Wert für jedes Produkt im Resultset angezeigt. USE Northwind SELECT productid, SUM(quantity) AS total_quantity FROM orderhist GROUP BY productid GO
Ergebnis
productid
total_quantity
1 2 3
15 35 45
(3 row(s) affected)
Beispiel 2
In diesem Beispiel wird eine WHERE-Klausel zur Abfrage aus Beispiel 1 hinzugefügt. Die Abfrage beschränkt die Zeilen auf die Product ID 2, gruppiert anschließend diese Zeilen und berechnet die gesamte Bestellmenge. Vergleichen Sie das Resultset mit dem aus Beispiel 1. USE Northwind SELECT productid, SUM(quantity) AS total_quantity FROM orderhist WHERE productid = 2 GROUP BY productid GO
Ergebnis
productid
total_quantity
2
35
(1 row(s) affected)
Unterrichtseinheit 4: Gruppieren und Zusammenfassen von Daten
Beispiel 3
In diesem Beispiel werden Informationen zu Bestellungen aus der order details-Tabelle zurückgegeben. In dieser Abfrage werden alle Product IDs gruppiert und aufgelistet, danach wird die gesamte Bestellmenge berechnet. Die Gesamtsumme wird mit der SUM-Aggregatfunktion berechnet, und es wird ein Wert für jedes Produkt im Resultset angezeigt. In dieses Beispiel ist keine WHERE-Klausel eingeschlossen, sodass für jede Product ID eine Summe zurückgegeben wird. USE Northwind SELECT productid, SUM(quantity) AS total_quantity FROM [order details] GROUP BY productid GO
Ergebnis
11
productid
total_quantity
61 3 32 . . . (77 row(s) affected)
603 328 297
12
Unterrichtseinheit 4: Gruppieren und Zusammenfassen von Daten
Verwenden der GROUP BY-Klausel mit der HAVING-Klausel Inhalt dieser Folie
USE USE Northwind Northwind SELECT SELECT productid, productid, orderid orderid ,quantity ,quantity FROM FROM orderhist orderhist GO GO
Erklären Sie die Verwendung der HAVING-Klausel beim weiteren Zusammenfassen von Daten auf der Grundlage von Gruppen.
productid productid orderid orderid quantity quantity
Einstieg
Mit der HAVING-Klausel können Sie Bedingungen für Gruppen festlegen, die in ein Resultset eingeschlossen werden sollen.
11 11
11 11
55 10 10
22 22
11 22
10 10 25 25
33 33
11 22
15 15 30 30
USE Northwind SELECT productid, productid, SUM(quantity) SUM(quantity) AS total_quantity total_quantity FROM orderhist GROUP BY productid productid HAVING SUM(quantity)>=30 SUM(quantity)>=30 GO
productid total_quantity productid total_quantity 22 33
35 35 45 45
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Verwenden Sie die HAVING-Klausel bei Spalten und Ausdrücken, um Bedingungen für die in ein Resultset eingeschlossenen Gruppen festzulegen. Durch die HAVING-Klausel werden Bedingungen für die GROUP BY-Klausel festgelegt. Dies ist vergleichbar mit der Interaktion der WHERE-Klausel mit der SELECT-Anweisung. Methodischer Hinweis
Weisen Sie auf die Suchbedingung hin, die in der HAVING-Klausel im Beispiel auf der Folie definiert ist. In der rechten Tabelle werden die gesamten Daten der productid-Spalte gruppiert, es wird jedoch nur die Gesamtsumme angezeigt, die für die Gruppen bestellt wird, die die Suchbedingung in der HAVINGKlausel erfüllen.
Wenn Sie die HAVING-Klausel verwenden, beachten Sie die folgenden Aspekte und Richtlinien: !
Die HAVING-Klausel kann nur mit der GROUP BY-Klausel zum Einschränken der Gruppierung verwendet werden. Das Verwenden der HAVING-Klausel ohne die GROUP BY-Klausel ist nicht sinnvoll.
!
Auf jede in der Auswahlliste angezeigte Spalte kann verwiesen werden.
!
Das ALL-Schlüsselwort sollte nicht zusammen mit der HAVING-Klausel verwendet werden, da die HAVING-Klausel das ALL-Schlüsselwort außer Kraft setzt und Gruppen zurückgibt, die lediglich die HAVING-Klausel erfüllen.
Unterrichtseinheit 4: Gruppieren und Zusammenfassen von Daten
Beispiel 1
In diesem Beispiel werden alle Gruppen von Produkten aus der orderhistTabelle aufgelistet, für die 30 oder mehr Einheiten bestellt wurden. USE Northwind SELECT productid, SUM(quantity) AS total_quantity FROM orderhist GROUP BY productid HAVING SUM(quantity) >=30 GO
Ergebnis
productid
total_quantity
2 3
35 45
(2 row(s) affected)
Beispiel 2
In diesem Beispiel werden alle Product IDs und die Menge der Produkte aufgelistet, von denen mehr als 1.200 Einheiten bestellt wurden. USE Northwind SELECT productid, SUM(quantity) AS total_quantity FROM [order details] GROUP BY productid HAVING SUM(quantity) > 1200 GO
Ergebnis
productid
total_quantity
59 56 60 31
1496 1263 1577 1397
(4 row(s) affected)
13
14
Unterrichtseinheit 4: Gruppieren und Zusammenfassen von Daten
" Generieren von Aggregatwerten in Resultsets Inhalt dieser Folie
Geben Sie eine Übersicht über das Zusammenfassen von Werten für eine Tabelle mit Hilfe des ROLLUP- und CUBE-Operators.
Einstieg
Verwenden Sie die GROUP BY-Klausel mit dem ROLLUP- und dem CUBE-Operator, um Aggregatwerte in Resultsets zu generieren. Dabei werden Sie wahrscheinlich die GROUPING-Funktion zum Interpretieren des Resultsets verwenden.
!
Verwenden der GROUP BY-Klausel mit dem ROLLUP-Operator
!
Verwenden der GROUP BY-Klausel mit dem CUBE-Operator
!
Verwenden der GROUPING-Funktion
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Verwenden Sie die GROUP BY-Klausel mit dem ROLLUP- und dem CUBEOperator, um Aggregatwerte in Resultsets zu generieren. Der ROLLUP- oder der CUBE-Operator ist bei Querverweisen auf Informationen innerhalb einer Tabelle nützlich, denn so müssen keine zusätzlichen Skripts geschrieben werden. Bei Verwendung des ROLLUP- oder des CUBE-Operators verwenden Sie die GROUPING-Funktion, um die detaillierten und zusammenfassenden Werte im Resultset zu identifizieren.
Unterrichtseinheit 4: Gruppieren und Zusammenfassen von Daten
15
Verwenden der GROUP BY-Klausel mit dem ROLLUP-Operator USE USE Northwind Northwind SELECT SELECT productid, productid, orderid, orderid, SUM(quantity) SUM(quantity) AS AS total_quantity total_quantity FROM FROM orderhist orderhist GROUP GROUP BY BY productid, productid, orderid orderid WITH WITH ROLLUP ROLLUP ORDER BY productid, orderid ORDER BY productid, orderid GO GO
Inhalt dieser Folie
Erläutern Sie die Verwendung des ROLLUP-Operators zum Zusammenfassen von Daten in einer Tabelle.
productid productid orderid orderid total_quantity total_quantity
Einstieg
Verwenden Sie den ROLLUP-Operator zum Zusammenfassen von Daten in einer Tabelle.
NULL NULL 11
NULL NULL NULL NULL
95 95 15 15
11 11
11 22
55 10 10
22 22
NULL NULL 11
35 35 10 10
22 33
22 NULL NULL
25 25 45 45
33 33
11 22
15 15 30 30
Beschreibung Gesamtsumme Gesamtsumme Zusammenfassen Zusammenfassennur nurvon vonZeilen Zeilenfür fürproductid productid11 Detaillierter DetaillierterWert Wertfür fürproductid productid1,1,orderid orderid11 Detaillierter DetaillierterWert Wertfür fürproductid productid1,1,orderid orderid22 Zusammenfassen Zusammenfassennur nurvon vonZeilen Zeilenfür fürproductid productid22 Detaillierter DetaillierterWert Wertfür fürproductid productid2,2,orderid orderid11 Zusammenfassen Zusammenfassennur nurvon vonZeilen Zeilenfür fürproductid productid33 Detaillierter DetaillierterWert Wertfür fürproductid productid3,3,orderid orderid11 Detaillierter DetaillierterWert Wertfür fürproductid productid3,3,orderid orderid22
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Methodischer Hinweis
Weisen Sie darauf hin, dass die NULL-Werte im Beispiel auf der Folie anzeigen, dass diese speziellen Zeilen nur erstellt wurden, weil der ROLLUP-Operator verwendet wurde.
Verwenden Sie die GROUP BY-Klausel mit dem ROLLUP-Operator, um Gruppenwerte zusammenzufassen. Bei Verwendung der GROUP BY-Klausel mit dem ROLLUP-Operator werden Daten in einem relationalen Standardformat zur Verfügung gestellt. Sie können z. B. ein Resultset generieren, das die für jedes Produkt bei jeder Bestellung bestellte Menge, die für jedes Produkt bestellte Gesamtmenge und die Gesamtsumme aller Produkte einschließt. Wenn Sie die GROUP BY-Klausel mit dem ROLLUP-Operator verwenden, beachten Sie die folgenden Aspekte und Richtlinien: !
SQL Server verarbeitet Daten von rechts nach links entlang der Liste von Spalten, die in der GROUP BY-Klausel angegeben sind. Dann wendet SQL Server die Aggregatfunktion auf jede Gruppe an.
!
SQL Server fügt eine Zeile zum Resultset hinzu, die kumulierte Aggregate wie eine Zwischensumme oder einen laufenden Mittelwert anzeigt. Diese kumulierten Aggregate werden mit einem NULL-Wert im Resultset angezeigt.
!
Das ALL-Schlüsselwort kann nicht mit dem ROLLUP-Operator verwendet werden.
!
Stellen Sie bei Verwendung des ROLLUP-Operators sicher, dass die auf die GROUP BY-Klausel folgenden Spalten in einer für Ihre Unternehmensumgebung sinnvollen Beziehung zueinander stehen.
16
Unterrichtseinheit 4: Gruppieren und Zusammenfassen von Daten
Beispiel 1
Methodischer Hinweis
Die Beispiele zu diesem Thema bauen aufeinander auf, sodass die Kursteilnehmer nachvollziehen können, wie ROLLUP auf GROUP BY aufbaut.
Ergebnis
In diesem Beispiel werden alle Zeilen aus der orderhist-Tabelle und die zusammengefassten Mengenwerte für jedes Produkt aufgelistet. USE Northwind SELECT productid, orderid, SUM(quantity) AS total_quantity FROM orderhist GROUP BY productid, orderid WITH ROLLUP ORDER BY productid, orderid GO productid
orderid
total_quantity
NULL 1 1 1 2 2 2 3 3 3
NULL NULL 1 2 NULL 1 2 NULL 1 2
95 15 5 10 35 10 25 45 15 30
(10 row(s) affected)
Beispiel 2
In diesem Beispiel werden Informationen zu Bestellungen aus der order details-Tabelle zurückgegeben. Diese Abfrage enthält eine SELECTAnweisung mit einer GROUP BY-Klausel ohne ROLLUP-Operator. Das Beispiel gibt eine Liste der Gesamtmenge zurück, die für jedes Produkt bei jeder Bestellung bestellt wurde, deren orderid kleiner als 10.250 ist. USE Northwind SELECT orderid, productid, SUM(quantity) AS total_quantity FROM [order details] WHERE orderid < 10250 GROUP BY orderid, productid ORDER BY orderid, productid GO
Ergebnis
orderid
productid
total_quantity
10248 10248 10248 10249 10249
11 42 72 14 51
12 10 5 9 40
(5 row(s) affected)
Unterrichtseinheit 4: Gruppieren und Zusammenfassen von Daten
Beispiel 3
17
In diesem Beispiel wird der ROLLUP-Operator zur Anweisung aus Beispiel 2 hinzugefügt. Das Resultset enthält folgende Gesamtsummen: !
Jedes Produkt für jede Bestellung (dies wird auch ohne den ROLLUPOperator von der GROUP BY-Klausel zurückgegeben).
!
Alle Produkte für jede Bestellung.
!
Alle Produkte für alle Bestellungen (Gesamtsumme).
Beachten Sie, dass im Resultset die Zeile, die sowohl in der productid- als auch in der orderid-Spalte einen NULL-Wert enthält, die Gesamtsumme für alle Bestellungen und alle Produkte darstellt. Die Zeilen mit einem NULL-Wert in der productid-Spalte stellen die Gesamtmenge eines Produkts für die Bestellung in der orderid-Spalte dar. USE Northwind SELECT orderid, productid, SUM(quantity) AS total_quantity FROM [order details] WHERE orderid < 10250 GROUP BY orderid, productid WITH ROLLUP ORDER BY orderid, productid GO
Ergebnis
orderid
productid
total_quantity
NULL 10248 10248 10248 10248 10249 10249 10249
NULL NULL 11 42 72 NULL 14 51
76 27 12 10 5 49 9 40
(8 row(s) affected)
18
Unterrichtseinheit 4: Gruppieren und Zusammenfassen von Daten
Verwenden der GROUP BY-Klausel mit dem CUBE-Operator USE USE Northwind Northwind SELECT SELECT productid, productid, orderid, orderid, SUM(quantity) SUM(quantity) AS AS total_quantity total_quantity FROM FROM orderhist orderhist GROUP GROUP BY BY productid, productid, orderid orderid WITH WITH CUBE CUBE ORDER ORDER BY BY productid, productid, orderid orderid GO GO productid productid orderid orderid total_quantity total_quantity Beschreibung Gesamtsumme NULL NULL 95 Gesamtsumme NULL 95 NULL
Inhalt dieser Folie
Erläutern Sie die Verwendung des CUBE-Operators zum Zusammenfassen von Daten in einer Tabelle.
Einstieg
Der CUBE-Operator unterscheidet sich vom ROLLUPOperator dahingehend, dass er auf der Grundlage der GROUP BY-Klausel alle möglichen Kombinationen von Gruppen erstellt und dann die Aggregatfunktionen anwendet.
Der CUBE-Operator erzeugt zwei Zusammenfassungswerte mehr als der ROLLUP-Operator
NULL NULL NULL NULL 11 11 11 22 22 22 33 33 33
11 22
30 30 65 65
Zusammenfassen Zusammenfassennur nurvon vonZeilen Zeilenfürfürorderid orderid1 1 Zusammenfassen nur von Zeilen für orderid Zusammenfassen nur von Zeilen für orderid2 2
22 NULL NULL 11
10 10 35 35
Detaillierter DetaillierterWert Wertfür fürproductid productid1,1,orderid orderid2 2 Zusammenfassen nur von Zeilen für Zusammenfassen nur von Zeilen fürproductid productid2 2
NULL NULL 11
22 NULL NULL 11 22
15 15 55
10 10 25 25 45 45 15 15 30 30
Zusammenfassen Zusammenfassennur nurvon vonZeilen Zeilenfürfürproductid productid1 1 Detaillierter DetaillierterWert Wertfür fürproductid productid1,1,orderid orderid1 1
Detaillierter DetaillierterWert Wertfür fürproductid productid2,2,orderid orderid1 1 Detaillierter Wert für productid 2, orderid Detaillierter Wert für productid 2, orderid2 2 Zusammenfassen Zusammenfassennur nurvon vonZeilen Zeilenfürfürproductid productid3 3 Detaillierter Wert für productid 3, orderid Detaillierter Wert für productid 3, orderid1 1 Detaillierter DetaillierterWert Wertfür fürproductid productid3,3,orderid orderid2 2
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Methodischer Hinweis
Weisen Sie darauf hin, dass die NULL-Werte im Resultset des Beispiels auf der Folie anzeigen, dass diese speziellen Zeilen erstellt wurden, da der CUBEOperator verwendet wurde.
Verwenden Sie die GROUP BY-Klausel mit dem CUBE-Operator, um auf der Grundlage der GROUP BY-Klausel alle möglichen Kombinationen von Gruppen zu erstellen und zusammenzufassen. Durch Verwendung der GROUP BYKlausel mit dem ROLLUP-Operator werden Daten in einem relationalen Standardformat zur Verfügung gestellt. Wenn Sie die GROUP BY-Klausel mit dem CUBE-Operator verwenden, beachten Sie die folgenden Aspekte und Richtlinien: !
Wenn n Spalten oder Ausdrücke in der GROUP BY-Klausel enthalten sind, gibt SQL Server 2n mögliche Kombinationen im Resultset zurück.
!
Die NULL-Werte im Resultset zeigen an, dass diese speziellen Zeilen nur erstellt wurden, weil der CUBE-Operator verwendet wurde.
!
Das ALL-Schlüsselwort kann nicht mit dem CUBE-Operator verwendet werden.
!
Stellen Sie bei Verwendung des CUBE-Operators sicher, dass die auf die GROUP BY-Klausel folgenden Spalten in einer für Ihre Unternehmensumgebung sinnvollen Beziehung zueinander stehen.
Unterrichtseinheit 4: Gruppieren und Zusammenfassen von Daten
Beispiel
In diesem Beispiel wird ein Ergebnis zurückgegeben, das die Menge für jedes Produkt für jede Bestellung, die Gesamtmenge aller Produkte für jede Bestellung, die Gesamtmenge jedes Produkts für alle Bestellungen und die Gesamtmenge aller Produkte für alle Bestellungen bereitstellt. USE Northwind SELECT productid, orderid, SUM(quantity) AS total_quantity FROM orderhist GROUP BY productid, orderid WITH CUBE ORDER BY productid, orderid GO
Ergebnis
productid
orderid
total_quantity
NULL NULL NULL 1 1 1 2 2 2 3 3 3
NULL 1 2 NULL 1 2 NULL 1 2 NULL 1 2
95 30 65 15 5 10 35 10 25 45 15 30
(12 row(s) affected)
19
20
Unterrichtseinheit 4: Gruppieren und Zusammenfassen von Daten
Verwenden der GROUPING-Funktion SELECT SELECT productid, productid, GROUPING GROUPING (productid) (productid) ,orderid, ,orderid, GROUPING GROUPING (orderid) (orderid) ,SUM(quantity) ,SUM(quantity) AS AS total_quantity total_quantity FROM FROM orderhist orderhist GROUP GROUP BY BY productid, productid, orderid orderid WITH WITH CUBE CUBE ORDER ORDER BY BY productid, productid, orderid orderid GO GO
Inhalt dieser Folie
Erklären Sie die Funktionsweise der GROUPINGFunktion.
Einstieg
productid
Verwenden Sie die GROUPING-Funktion entweder mit dem ROLLUPoder dem CUBE-Operator, um die detaillierten und zusammenfassenden Werte im Resultset zu unterscheiden.
1 steht für zusammenfassende Werte in der vorhergehenden Spalte 0 steht für detaillierte Werte in der vorhergehenden Spalte
NULL NULL NULL 1 1 1 2 2 2 3 3 3
1 1 1 0 0 0 0 0 0 0 0 0
orderid NULL 1 2 NULL 1 2 NULL 1 2 NULL 1 2
total_quantity 1 0 0 1 0 0 1 0 0 1 0 0
95 30 65 15 5 10 35 10 25 45 15 30
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Methodischer Hinweis
Weisen Sie darauf hin, dass sich das Resultset im Beispiel auf der Folie nur in einem wichtigen Punkt vom Resultset der vorherigen Folie unterscheidet: Die GROUPING-Funktion wird verwendet, und zwei zusätzliche Spalten sind im Resultset eingeschlossen. Der Wert 1 steht für zusammenfassende Werte und 0 für detaillierte Werte in der vorherigen Spalte.
Verwenden Sie die GROUPING-Funktion entweder mit dem ROLLUP- oder dem CUBE-Operator, um die detaillierten und zusammenfassenden Werte im Resultset zu unterscheiden. Durch Verwendung der GROUPING-Funktion können Sie ermitteln, ob die NULL-Werte im Resultset tatsächlich NULLWerten in den Basistabellen entsprechen oder ob der ROLLUP- bzw. der CUBE-Operator die Zeile generiert hat. Wenn Sie die GROUPING-Funktion verwenden, beachten Sie die folgenden Aspekte und Richtlinien: !
SQL Server erstellt im Resultset neue Spalten für jede in der GROUPINGFunktion angegebene Spalte.
!
SQL Server gibt den Wert 1 zurück, um von ROLLUP oder CUBE erstellte zusammenfassende Werte im Resultset darzustellen.
!
SQL Server gibt den Wert 0 zurück, um detaillierte Werte im Resultset darzustellen.
!
Die GROUPING-Funktion kann nur für Spalten angegeben werden, die in der GROUP BY-Klausel vorhanden sind.
!
Verwenden Sie die GROUPING-Funktion als Hilfe bei programmgesteuerten Verweisen auf die Resultsets.
Unterrichtseinheit 4: Gruppieren und Zusammenfassen von Daten
Beispiel 1
In diesem Beispiel wird ein Ergebnis zurückgegeben, das die Menge für jedes Produkt für jede Bestellung, die Gesamtmenge aller Produkte für jede Bestellung, die Gesamtmenge jedes Produkts für alle Bestellungen und die Gesamtmenge aller Produkte für alle Bestellungen bereitstellt. Durch die GROUPINGFunktion können die vom CUBE-Operator generierten Zeilen im Resultset von den übrigen Zeilen unterschieden werden. USE Northwind SELECT productid, GROUPING (productid) ,orderid, GROUPING (orderid) ,SUM(quantity) AS total_quantity FROM orderhist GROUP BY productid, orderid WITH CUBE ORDER BY productid, orderid GO
Ergebnis
21
productid NULL NULL NULL 1 1 1 2 2 2 3 3 3 (12 row(s) affected)
orderid 1 1 1 0 0 0 0 0 0 0 0 0
NULL 1 2 NULL 1 2 NULL 1 2 NULL 1 2
total_quantity 1 0 0 1 0 0 1 0 0 1 0 0
95 30 65 15 5 10 35 10 25 45 15 30
22
Unterrichtseinheit 4: Gruppieren und Zusammenfassen von Daten
Beispiel 2
In diesem Beispiel wird die GROUPING-Funktion in der productid- und in der orderid-Spalte verwendet, die in der GROUP BY-Klausel aufgelistet sind. Das Resultset enthält eine zusätzliche Spalte hinter der productid- und der orderidSpalte. Die GROUPING-Funktion gibt 1 zurück, wenn die Werte in dieser bestimmten Spalte durch den CUBE-Operator gruppiert wurden. Das Resultset enthält die Gesamtmenge für jedes Produkt für jede Bestellung, jedes Produkt für alle Bestellungen, alle Produkte für jede Bestellung und die Gesamtmenge aller Produkte für alle Bestellungen. Beachten Sie, dass im Resultset die Zeilen mit einem NULL-Wert sowohl in der productid- als auch in der orderid-Spalte die Gesamtsumme aller Produkte für alle Bestellungen darstellen. Zeilen mit einem NULL-Wert in der productid-Spalte stellen die Gesamtmenge aller Produkte für jede Bestellung dar. Zeilen mit einem NULL-Wert in der orderid-Spalte stellen die Gesamtmenge für ein Produkt für alle Bestellungen dar. USE Northwind SELECT orderid, GROUPING(orderid), productid ,GROUPING(productid), SUM(quantity) AS total_quantity FROM [order details] WHERE orderid < 10250 GROUP BY orderid, productid WITH CUBE ORDER BY orderid, productid GO
Ergebnis
orderid NULL NULL NULL NULL NULL NULL 10248 10248 10248 10248 10249 10249 10249
productid 1 1 1 1 1 1 0 0 0 0 0 0 0
NULL 11 14 42 51 72 NULL 11 42 72 NULL 14 51
(13 row(s) affected)
total_quantity 1 0 0 0 0 0 1 0 0 0 1 0 0
76 12 9 10 40 5 27 12 10 5 49 9 40
Unterrichtseinheit 4: Gruppieren und Zusammenfassen von Daten
23
Verwenden der COMPUTE- und COMPUTE BY-Klauseln COMPUTE
Inhalt dieser Folie
COMPUTE BY
USE USE USE Northwind Northwind USE Northwind Northwind SELECT SELECT SELECT productid, productid, orderid orderid SELECT productid, productid, orderid, orderid, quantity quantity ,quantity FROM ,quantity FROM orderhist orderhist FROM ORDER FROM orderhist orderhist ORDER BY BY productid, productid, orderid orderid ORDER COMPUTE ORDER BY BY productid, productid, orderid orderid COMPUTE SUM(quantity) SUM(quantity) BY BY productid productid COMPUTE COMPUTE COMPUTE SUM(quantity) SUM(quantity) COMPUTE SUM(quantity) SUM(quantity) GO GO GO GO productid orderid quantity
Erläutern Sie, zu welchem Zweck die COMPUTE- und COMPUTE BY-Klauseln verwendet werden.
Einstieg
productid orderid quantity quantity productid orderid
Obwohl die COMPUTE- und die COMPUTE BY-Klausel nicht dem ANSI-Standard entsprechen, möchten Sie sie möglicherweise beim Drucken einfacher Berichte oder beim Überprüfen der Ergebnisse von Anwendungen verwenden, die Sie schreiben.
11 11
11 22
55 10 10
22 22
11 22
10 10 25 25
33 33
11 22
15 15 30 30
sum sum
95 95
productid orderid quantity 11 11 22 22 33 33
11 22 sum sum 11 22 sum sum 11 22 sum sum sum sum
55 10 10 15 15 10 10 25 25 35 35 15 15 30 30 45 45 95 95
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Methodischer Hinweis
Diese Klauseln sollten nicht beim Erstellen von Anwendungen verwendet werden. Sie können jedoch beim Testen von Anwendungen nützlich sein.
Die COMPUTE- und die COMPUTE BY-Klausel generieren zusätzliche zusammenfassende Zeilen mit Daten in einem nicht relationalen Format, das nicht dem ANSI-Standard entspricht. Während dies beim Anzeigen nützlich sein kann, eignet sich die Ausgabe nicht gut zum Generieren von Resultsets, die mit anderen Anwendungen verwendet werden sollen. Sie können beispielsweise mit COMPUTE und COMPUTE BY in kurzer Zeit einfache Berichte drucken oder Ergebnisse von Anwendungen überprüfen, die Sie schreiben. Andere Tools, wie Crystal Reports oder Microsoft Access, bieten Ihnen beim Erstellen von Berichten jedoch mehr Möglichkeiten der Berichterstellung. Wenn Sie die COMPUTE- und COMPUTE BY-Klauseln verwenden, beachten Sie die folgenden Aspekte:
Methodischer Hinweis
Die text-, ntext- oder image-Datentypen können nur in einer COMPUTEoder COMPUTE BY-Klausel verwendet werden, wenn die Klausel Teil einer Skalarfunktion ist.
!
Die text-, ntext- oder image-Datentypen können nicht in eine COMPUTEoder eine COMPUTE BY-Klausel eingeschlossen werden.
!
Das Format des Resultsets kann nicht angepasst werden. Wenn z. B. die SUM-Aggregatfunktion verwendet wird, zeigt SQL Server das Wort „sum“ im Resultset an. Sie können es nicht in „summary“ ändern.
24
Unterrichtseinheit 4: Gruppieren und Zusammenfassen von Daten
Generieren eines Berichts mit detaillierten und zusammenfassenden Werten für eine Spalte Die COMPUTE-Klausel generiert detaillierte Zeilen und einen einzelnen Aggregatwert für eine Spalte. Wenn Sie die COMPUTE-Klausel verwenden, beachten Sie die folgenden Aspekte und Richtlinien:
Beispiel 1
!
Es können mehrere COMPUTE-Klauseln mit der COMPUTE BY-Klausel in einer einzelnen Anweisung verwendet werden.
!
Dazu müssen Sie in SQL Server in der COMPUTE-Klausel dieselben Spalten angeben, die in der Auswahlliste aufgelistet sind.
!
Die SELECT INTO-Anweisung sollte nicht in derselben Anweisung wie die COMPUTE-Klausel verwendet werden, da Anweisungen mit COMPUTE keine relationale Ausgabe generieren.
Dieses Beispiel listet alle Zeilen in der orderhist-Tabelle auf und generiert die Gesamtsumme aller bestellten Produkte. USE Northwind SELECT productid, orderid, quantity FROM orderhist ORDER BY productid, orderid COMPUTE SUM(quantity) GO
Ergebnis
productid
orderid
total_quantity
1 1 2 2 3 3
1 2 1 2 1 2
5 10 10 25 15 30 sum ========== 95
7 row(s) affected
Generieren eines Berichts mit detaillierten und zusammenfassenden Werten für Teilmengen von Gruppen Die COMPUTE BY-Klausel generiert Detailzeilen und mehrere zusammenfassende Werte. Zusammenfassende Werte werden generiert, wenn Spaltenwerte geändert werden. Verwenden Sie COMPUTE BY bei Daten, die leicht kategorisiert werden können. Wenn Sie die COMPUTE BY-Klausel verwenden, beachten Sie die folgenden Aspekte und Richtlinien: !
Die COMPUTE BY-Klausel sollte immer mit der ORDER BY-Klausel verwendet werden, sodass Zeilen gruppiert werden.
!
Geben Sie die Spaltennamen hinter der COMPUTE BY-Klausel an, um zu ermitteln, welche zusammenfassenden Werte SQL Server generiert.
Unterrichtseinheit 4: Gruppieren und Zusammenfassen von Daten !
Beispiel 2
Die hinter der COMPUTE BY-Klausel aufgelisteten Spalten müssen mit denen identisch sein, die hinter der ORDER BY-Klausel aufgelistet sind, bzw. es muss sich um eine Teilmenge davon handeln. Sie müssen in derselben Reihenfolge (von links nach rechts) aufgelistet sein und mit demselben Ausdruck beginnen, wobei kein Ausdruck ausgelassen werden darf.
In diesem Beispiel werden alle Zeilen in der orderhist-Tabelle aufgelistet, die bestellte Gesamtmenge für jedes Produkt generiert sowie die Gesamtsumme aller Produkte, die bestellt wurden. USE Northwind SELECT productid, orderid, quantity FROM orderhist ORDER BY productid, orderid COMPUTE SUM(quantity) BY productid COMPUTE SUM(quantity) GO
Ergebnis
productid
orderid
total_quantity
1 1
1 2
5 10 sum ========== 15
2 2
1 2
10 25 sum ========== 35
3 3
1 2
15 30 sum ========== 45
sum ========== 95 10 row(s) affected
25
26
Unterrichtseinheit 4: Gruppieren und Zusammenfassen von Daten
Empfohlene Methoden Inhalt dieser Folie
Listen Sie die empfohlenen Methoden zum Zusammenfassen von Daten auf.
Indizieren Indizieren Sie Sie häufig häufig aggregierte aggregierte Spalten Spalten
Einstieg
Vermeiden Vermeiden Sie Sie das das Verwenden Verwenden von von Aggregatfunktionen Aggregatfunktionen bei bei Spalten Spalten mit mit NULL-Werten NULL-Werten
Um Klauseln und Operatoren beim Zusammenfassen von Daten optimal nutzen zu können, sollten Sie die folgenden empfohlenen Methoden berücksichtigen.
Verwenden Verwenden Sie Sie die die ORDER ORDER BY-Klausel, BY-Klausel, um um eine eine Sortierreihenfolge Sortierreihenfolge sicherzustellen sicherzustellen Verwenden Verwenden Sie Sie den den ROLLUP-Operator ROLLUP-Operator anstelle anstelle des des CUBE-Operators CUBE-Operators Vermeiden Vermeiden Sie Sie das das Verwenden Verwenden der der COMPUTECOMPUTE- oder oder COMPUTE COMPUTE BY-Klauseln BY-Klauseln
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Hinweis für den Kursleiter
In diesem Kurs wird das Erstellen von Indizes nicht ausführlich behandelt. Weitere Informationen zum Erstellen von Indizes finden Sie im Kurs 2328A, Programmieren einer Microsoft SQL Server 2000Datenbank.
Wenn Sie Klauseln und Operatoren zum Zusammenfassen von Daten verwenden, sollten Sie die folgenden empfohlenen Methoden berücksichtigen: !
Indizieren Sie häufig aggregierte Spalten, um die Abfrageleistung zu verbessern. Wenn Sie z. B. die quantity-Spalte zu einem Index hinzufügen, werden Aggregatoperationen wie die in den Beispielen dieser Unterrichtseinheit verwendeten Operationen verbessert, auch wenn Sie den ROLLUPOperator verwenden.
!
Vermeiden Sie es Aggregatfunktionen bei Spalten mit NULL-Werten zu verwenden, da das Resultset unter Umständen nicht repräsentativ für die Daten ist.
!
Verwenden Sie die ORDER BY-Klausel, um sicherzustellen, dass im Resultset eine Sortierreihenfolge verwendet wird. Wenn die ORDER BYKlausel nicht verwendet wird, stellt SQL Server keine Sortierreihenfolge sicher.
!
Verwenden Sie möglichst den ROLLUP-Operator, denn er ist effizienter als der CUBE-Operator. Der ROLLUP-Operator ist effizienter, da er Daten zusammenfasst, während Detaildaten verarbeitet werden. Der CUBEOperator kann sehr ressourcenintensiv sein, da eine Vielzahl von Berechnungen durchgeführt werden.
!
Vermeiden Sie das Verwenden der COMPUTE- oder der COMPUTE BYKlausel, es sei denn, Sie möchten Ihre Anwendungen testen. Diese Klauseln sind beim Anzeigen und Drucken von Resultsets hilfreich. Da sie jedoch zusätzliche Summenzeilen mit Daten in einem nicht relationalen Format generieren, ist die Ausgabe für Produktionsdatenbanken nicht gut geeignet.
Zusätzliche Informationen zu den folgenden Themen erhalten Sie in der SQL Server-Onlinedokumentation. Thema
Suchbegriff
Zusammenfassen von Daten
„Aggregatfunktionen“
Unterrichtseinheit 4: Gruppieren und Zusammenfassen von Daten
27
Übungseinheit A: Gruppieren und Zusammenfassen von Daten Inhalt dieser Folie
Bereiten Sie die Kursteilnehmer auf die Übungseinheit vor.
Einstieg
In den folgenden Übungen werden Sie Daten gruppieren und zusammenfassen, indem Sie Aggregatfunktionen zusammen mit den GROUP BY-, HAVING-, COMPUTE- und COMPUTE BY-Klauseln und den ROLLUP- und CUBE-Operatoren verwenden.
****************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 der GROUP BY- und der HAVING-Klausel zum Zusammenfassen von Daten nach Gruppen.
!
Verwenden des ROLLUP- und des CUBE-Operators sowie der GROUPING-Funktion zum Generieren von Zusammenfassungsdaten.
!
Verwenden der COMPUTE- und der COMPUTE BY-Klausel zum Generieren von Berichten mit Gruppenwechseln, Gesamtsummen und Mittelwerten.
Voraussetzungen Um diese Übungseinheit zu bearbeiten, benötigen Sie Folgendes: !
Die Skriptdateien für diese Übungseinheit, die sich in C:\Moc\2316B\Labfiles\L04 befinden.
!
Die Antwortdateien für diese Übungseinheit, die sich in C:\Moc\2316B\Labfiles\L04\Answers befinden.
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“.
28
Unterrichtseinheit 4: Gruppieren und Zusammenfassen von Daten
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 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: 45 Minuten
Unterrichtseinheit 4: Gruppieren und Zusammenfassen von Daten
29
Übung 1 Verwenden des TOP n-Schlüsselwortes In dieser Übung verwenden Sie das TOP n-Schlüsselwort und die WITH TIESKlausel, um die obere Anzahl von Zeilen oder den Prozentanteil der Zeilen eines Resultsets zurückzugeben. C:\Moc\2316B\Labfiles\L04\Answers enthält vollständige Skripts für diese Übung.
! So verwenden Sie das TOP n-Schlüsselwort zum Auflisten der oberen Zeilen eines Resultsets
In diesem Verfahren werden Sie ein Skript ändern, sodass es die ersten zehn Zeilen einer Abfrage zurückgibt. Answer_TopN1.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, 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. Klicken Sie in der Liste DB auf Northwind. 4. Öffnen und überprüfen Sie C:\Moc\2316B\Labfiles\L04\TopN.sql script. Es handelt sich um eine Abfrage, die den Gesamtumsatz jeder Bestellung in der order details-Tabelle berechnet, und die Ergebnisse in absteigender Reihenfolge zurückgibt. 5. Ändern Sie die in Schritt 4 beschriebene Abfrage so, dass die die Abfrage die ersten zehn Zeilen zurückgibt. USE Northwind SELECT TOP 10 orderid ,(unitprice * quantity) AS totalsale FROM [order details] ORDER BY (unitprice * quantity) DESC GO
6. Führen Sie die Abfrage aus, um zu überprüfen, ob zehn Zeilen zurückgegeben werden.
30
Ergebnis
Unterrichtseinheit 4: Gruppieren und Zusammenfassen von Daten
Das Ergebnis ähnelt dem folgenden Resultset. orderid
totalsale
10865 10981 10353 10417 10889 10424 10897 10372 10540 10816
15810.0000 15810.0000 10540.0000 10540.0000 10540.0000 10329.2000 9903.2000 8432.0000 7905.0000 7905.0000
(10 row(s) affected)
! So listen Sie die oberen Werte eines Resultsets mit Hilfe des TOP nSchlüsselwortes auf
In diesem Verfahren verwenden Sie das TOP n-Schlüsselwort, um die oberen Werte eines Resultsets aufzulisten. Answer_TopN2.sql ist ein vollständiges Skript für dieses Verfahren. 1. Ändern Sie die in Schritt 5 des vorherigen Verfahrens beschriebene Abfrage so, dass die oberen zehn Produkte (einschließlich gleichen Werten) mit der höchsten Gesamtmenge zurückgegeben werden. USE Northwind SELECT TOP 10 WITH TIES orderid ,(unitprice * quantity) AS totalsale FROM [order details] ORDER BY (unitprice * quantity) DESC GO
2. Führen Sie die Abfrage aus, um zu überprüfen, ob elf Zeilen zurückgegeben werden. Ergebnis
Das Ergebnis ähnelt dem folgenden Resultset. orderid
totalsale
10865 10981 10353 10417 10889 10424 10897 10372 10540 10816 10817
15810.0000 15810.0000 10540.0000 10540.0000 10540.0000 10329.2000 9903.2000 8432.0000 7905.0000 7905.0000 7905.0000
(11 row(s) affected)
Unterrichtseinheit 4: Gruppieren und Zusammenfassen von Daten
31
3. Warum wurden von der Abfrage, in der die oberen 10 Werte einschließlich gleichen Werten abgefragt wurden, mehr Zeilen zurückgegeben? Der TOP 10-Operator gibt an, dass nur die ersten zehn Zeilen zurückgegeben werden sollen. Der TOP 10 WITH TIES-Operator gibt an, dass alle Zeilen zurückgegeben werden, deren Werte in der Liste der oberen zehn Werte enthalten sind, unabhängig von der Anzahl von Zeilen. ____________________________________________________________ ____________________________________________________________
32
Unterrichtseinheit 4: Gruppieren und Zusammenfassen von Daten
Übung 2 Verwenden der GROUP BY- und HAVING-Klausel In dieser Übung verwenden Sie die GROUP BY- und HAVING-Klauseln, um Daten aus der Northwind-Datenbank zusammenzufassen. C:\Moc\2316B\Labfiles\L04\Answers enthält vollständige Skripts für diese Übung.
! So verwenden Sie die GROUP BY-Klausel zum Zusammenfassen von Daten
In diesem Verfahren öffnen Sie ein Skript, das eine Abfrage mit der GROUP BY-Klausel einschließt. Dann ändern Sie die Abfrage, um andere Ergebnisse zu erhalten. 1. Öffnen und überprüfen Sie das Skript C:\Moc\2316B\Labfiles\L04\Groupby.sql. Dies ist eine Abfrage, mit der die Gesamtmenge der bestellten Elemente für zwei unterschiedliche Kategorien von Elementen in der order details-Tabelle berechnet wird. 2. Führen Sie die Abfrage aus, und überprüfen Sie die Ergebnisse. Ergebnis
Das Ergebnis ähnelt dem folgenden Resultset. categoryid
total_quantity
1 2
9532 5298
(2 row(s) affected)
! So berechnen Sie die Gesamtmenge für jede Kategorie Answer_Groupby1.sql ist ein vollständiges Skript für dieses Verfahren. 1. Ändern Sie das Skript aus Schritt 1 des vorherigen Verfahrens, um die Menge je Kategorie für alle Produkte unabhängig von der Kategorie zusammenzufassen. USE Northwind SELECT categoryid, SUM(quantity) AS total_quantity FROM [order details] AS od INNER JOIN products AS p ON od.productid = p.productid GROUP BY categoryid GO
2. Führen Sie die Abfrage aus, und überprüfen Sie die Ergebnisse.
Unterrichtseinheit 4: Gruppieren und Zusammenfassen von Daten
Ergebnis
Das Ergebnis ähnelt dem folgenden Resultset. categoryid
total_quantity
1 2 3 4 5 6 7 8
9532 5298 7906 9149 4562 4199 2990 7681
(8 row(s) affected)
! So berechnen Sie die Gesamtmenge für jede Bestellung In diesem Verfahren berechnen Sie die Gesamtmenge für jede Bestellung. Answer_Groupby2.sql ist ein vollständiges Skript für dieses Verfahren. 1. Ändern Sie das Skript aus Schritt 1 des vorherigen Verfahrens, um die Menge nach orderid für alle Produkte unabhängig von der Kategorie zusammenzufassen. USE Northwind SELECT orderid, SUM(quantity) AS total_quantity FROM [order details] AS od INNER JOIN products AS p ON od.productid = p.productid GROUP BY orderid GO
2. Führen Sie die Abfrage aus, und überprüfen Sie die Ergebnisse. Ergebnis
Das Ergebnis ähnelt dem folgenden Teil eines Resultsets. ordered
total_quantity
10248 10249 10250 . . . 11075 11076 11077
27 49 60
42 50 72
(830 row(s) affected)
33
34
Unterrichtseinheit 4: Gruppieren und Zusammenfassen von Daten
! So berechnen Sie die Anzahl von Bestellungen mit mehr als 250 bestellten Einheiten
In diesem Verfahren berechnen Sie die Anzahl von Bestellungen mit mehr als 250 bestellten Einheiten. Answer_Groupby3.sql ist ein vollständiges Skript für dieses Verfahren. 1. Ändern Sie das Skript aus Schritt 1 des vorherigen Verfahren, um die Menge nach orderid für alle Produkte unabhängig von der Kategorie zusammenzufassen und nur die Bestellungen zurückzugeben, die mehr als 250 bestellte Einheiten umfassen. USE Northwind SELECT orderid, SUM(quantity) AS total_quantity FROM [order details] AS od INNER JOIN products AS p ON od.productid = p.productid GROUP BY orderid HAVING SUM(quantity) > 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] <join_type> ::= [ INNER | { { LEFT | RIGHT | FULL } [OUTER] } ] [ <join_hint> ] JOIN <joined_table> ::= <join_type> ON <search_condition> | CROSS JOIN | <joined_table>
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 (<) gelöscht werden.
Ergebnis
Beachten Sie, dass alle doppelten Zeilen gelöscht werden, wenn die WHEREKlausel den Operator Größer 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 (<) einschließt, werden Zeilen, die mit sich selbst übereinstimmen, sowie doppelte Zeilen gelöscht. USE Northwind SELECT a.employeeid, LEFT(a.lastname,10) AS name, ,LEFT(a.title,10) AS title ,b.employeeid, LEFT(b.lastname,10) AS name ,LEFT(b.title,10) AS title FROM employees AS a INNER JOIN employees AS b ON a.Title = b.Title WHERE a.employeeid < b.employeeid GO
Ergebnis employeeid
name
title
1 1 1 1 1 3 3 3 3 4 4 4 6 6 7
Davolio Davolio Davolio Davolio Davolio Leverling Leverling Leverling Leverling Peacock Peacock Peacock Suyama Suyama King
Sales Sales Sales Sales Sales Sales Sales Sales Sales Sales Sales Sales Sales Sales Sales
(15 row(s) affected)
Repr Repr Repr Repr Repr Repr Repr Repr Repr Repr Repr Repr Repr Repr Repr
employeeid
name
title
3 4 6 7 9 4 6 7 9 6 7 9 7 9 9
Leverling Peacock Suyama King Dodsworth Peacock Suyama King Dodsworth Suyama King Dodsworth King Dodsworth Dodsworth
Sales Sales Sales Sales Sales Sales Sales Sales Sales Sales Sales Sales Sales Sales Sales
Repr Repr Repr Repr Repr Repr Repr Repr Repr Repr Repr Repr Repr Repr Repr
Unterrichtseinheit 5: Verknüpfen von mehreren Tabellen
19
Kombinieren mehrerer Resultsets Inhalt dieser Folie
Erklären Sie Zweck und Funktion des UNIONOperators.
!
Verwenden des UNION-Operators, um ein einzelnes Resultset aus mehreren Abfragen zu erstellen
Einstieg
!
Jede der Abfragen benötigt: # Den gleichen Datentypen # Die gleiche Spaltenanzahl # Die gleiche Spaltenreihenfolge in der Auswahlliste
Mit Hilfe des UNIONOperators können die Ergebnisse von zwei oder mehreren SELECTAnweisungen in einem einzigen Resultset kombiniert werden.
USE USE Northwind Northwind SELECT SELECT (firstname (firstname ++ '' '' ++ lastname) lastname) AS AS name name ,city, ,city, postalcode postalcode FROM FROM employees employees UNION UNION SELECT SELECT companyname, companyname, city, city, postalcode postalcode FROM FROM customers customers GO GO
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Der UNION-Operator kombiniert die Ergebnisse von zwei oder mehreren SELECT-Anweisungen in einem einzigen Resultset. Verwenden Sie den UNION-Operator, wenn sich die abzurufenden Daten an verschiedenen Stellen befinden und auf die Daten nicht über eine einzelne Abfrage zugegriffen werden kann. Wenn Sie den UNION-Operator verwenden, beachten Sie folgende Aspekte und Richtlinien:
Kernpunkt
Wenn Sie den UNIONOperator verwenden, müssen die Tabellen, auf die verwiesen wird, über die gleichen Datentypen, die gleiche Spaltenanzahl und die gleiche Spaltenreihenfolge in der Auswahlliste jeder Abfrage verfügen.
!
In SQL Server müssen die Tabellen, auf die verwiesen wird, über die gleichen Datentypen, die gleiche Spaltenanzahl und die gleiche Spaltenreihenfolge in der Auswahlliste jeder Abfrage verfügen.
!
SQL Server entfernt doppelte Zeilen im Resultset. Wird jedoch die ALLOption verwendet, werden alle Zeilen (einschließlich der Duplikate) im Resultset eingeschlossen.
!
In der ersten SELECT-Anweisung müssen die Spaltennamen angegeben werden. Wenn Sie neue Spaltenüberschriften für das Resultset definieren möchten, müssen Sie die Spaltenaliasnamen daher in der ersten SELECTAnweisung erstellen.
!
Wenn das gesamte Resultset in einer bestimmten Reihenfolge zurückgegeben werden soll, müssen Sie eine Sortierreihenfolge angeben, indem Sie eine ORDER BY-Klausel am Ende der letzten Anweisung einschließen, die durch den UNION-Operator beeinflusst wird. Andernfalls werden die Daten im Resultset möglicherweise nicht in der gewünschten Reihenfolge zurückgegeben.
!
Unter Umständen lässt sich eine bessere Leistung erzielen, wenn Sie eine komplexe Abfrage in mehrere SELECT-Anweisungen aufspalten und diese anschließend mit dem UNION-Operator kombinieren.
20
Unterrichtseinheit 5: Verknüpfen von mehreren Tabellen
Syntax
select_Anweisung UNION [ALL] select_Anweisung
Beispiel
In diesem Beispiel werden zwei Resultsets kombiniert. Das erste Resultset gibt den Namen, die Stadt und die Postleitzahl für jeden Kunden aus der customersTabelle zurück. Das zweite Resultset gibt den Namen, die Stadt und die Postleitzahl für jeden Angestellten aus der employees-Tabelle zurück. Wenn Sie den UNION-Operator zum Kombinieren dieser Resultsets verwenden, beachten Sie, dass der Spaltenaliasname der ersten Auswahlliste zurückgegeben wird.
Methodischer Hinweis
Führen Sie dieses Beispiel mit SQL Query Analyzer vor.
Ergebnis
USE Northwind SELECT (firstname + ' ' + lastname) AS name, city, postalcode FROM employees UNION SELECT companyname, city, postalcode FROM customers GO name
city
postalcode
Alfreds Futterkiste Ana Trujillo Emparedados y helados Antonio Moreno Taquería Around the Horn B's Beverages . . . Andrew Fuller Robert King Janet Leverling Anne Dodsworth
Berlin México D.F. México D.F. London London
12209 05021 05023 WA1 1DP EC2 5NT
Tacoma London Kirkland London
98401 RG 19SP 98033 WG2 7LT
(100 row(s) affected)
Methodischer Hinweis
Stellen Sie folgende Frage: Warum werden im Resultset die Kunden vor den Angestellten aufgelistet und nicht umgekehrt, wie dies der Syntax zufolge der Fall sein müsste? Antwort: SQL Server gewährleistet keine spezielle Reihenfolge, es sei denn, dies wird durch eine ORDER BY-Klausel angegeben.
Unterrichtseinheit 5: Verknüpfen von mehreren Tabellen
21
Empfohlene Methoden Inhalt dieser Folie
Listen Sie die empfohlenen Methoden zum Abrufen und Ändern von Daten auf.
Verknüpfen Verknüpfen Sie Sie Tabellen Tabellen mit mit PrimärPrimär- und und Fremdschlüsseln Fremdschlüsseln
Einstieg
Die folgenden empfohlenen Methoden helfen Ihnen beim Ausführen erweiterter Abfragen.
Verweisen Verweisen Sie Sie auf auf alle alle Spalten Spalten eines eines zusammengesetzten zusammengesetzten PrimärPrimärschlüssels schlüssels in in der der ON-Klausel, ON-Klausel, wenn wenn die die Beziehung Beziehung zwischen zwischen Tabellen Tabellen über über einen einen zusammengesetzten zusammengesetzten Schlüssel Schlüssel hergestellt hergestellt wird wird Begrenzen Begrenzen Sie Sie die die Anzahl Anzahl von von Tabellen Tabellen in in einer einer Verknüpfung Verknüpfung
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Die nachfolgend aufgeführten empfohlenen Methoden sollen Ihnen beim Ausführen von Abfragen helfen. !
Verknüpfen Sie Tabellen mit Primär- und Fremdschlüsseln.
!
Verweisen Sie auf alle Spalten eines zusammengesetzten Primärschlüssels in der ON-Klausel, wenn die Beziehung zwischen Tabellen über einen zusammengesetzten Schlüssel hergestellt wird.
!
Begrenzen Sie die Anzahl von Tabellen in einer Verknüpfung. Je größer die Anzahl der verknüpften Tabellen ist, desto länger braucht SQL Server zum Verarbeiten der Abfrage.
Zusätzliche Informationen zu den folgenden Themen erhalten Sie in der SQL Server-Onlinedokumentation. Thema
Suchbegriff
Arbeiten mit Verknüpfungen
„Grundlegende Informationen zu Verknüpfungen“ „Verwenden mehrerer Tabellen“
22
Unterrichtseinheit 5: Verknüpfen von mehreren Tabellen
Übungseinheit A: Abfragen mehrerer Tabellen Inhalt dieser Folie
Geben Sie eine Einführung in die Übungseinheit.
Einstieg
In diesen Übungseinheit führen Sie verschiedene Arten von Verknüpfungen durch, um Daten aus mehreren Tabellen zu kombinieren.
****************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: !
Verknüpfen von Tabellen mit Hilfe verschiedener Verknüpfungstypen.
!
Kombinieren von Resultsets mit dem UNION-Operator.
Voraussetzungen Um diese Übungseinheit zu bearbeiten, benötigen Sie Folgendes: !
Die Antwortdateien für diese Übungseinheit, die sich in C:\Moc\2316B \Labfiles\L05\Answers befinden.
!
Die Installation der library-Datenbank.
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 Microsoft SQL Server-Onlinedokumentation.
Unterrichtseinheit 5: Verknüpfen von mehreren Tabellen
23
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: 45 Minuten
24
Unterrichtseinheit 5: Verknüpfen von mehreren Tabellen
Übung 1 Verknüpfen von Tabellen In dieser Übung werden Sie Abfragen erstellen und ausführen, die Tabellen in der library-Datenbank miteinander verknüpfen. C:\Moc\2316B\Labfiles\L05\Answers enthält vollständige Skripts für diese Übung.
! So erstellen Sie eine Mailingliste mit Hilfe einer Verknüpfung In diesem Verfahren erstellen Sie eine Mailingliste mit den Bibliotheksmitgliedern, die vollständige Namens- und Adressdaten der Mitglieder enthält. Answer_Mailing.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
Wert
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. Klicken Sie in der Liste DB auf library. 4. Erstellen Sie eine Abfrage für die Tabellen member und adult, die die Werte firstname, middleinitial, lastname, street, city, state und zip zurückgibt. Verketten Sie die Spalten firstname, middleinitial und lastname zu einer Zeichenfolge und legen Sie für die Spalte den Aliasnamen name fest. USE library SELECT firstname +' '+ middleinitial +' '+ lastname AS name ,street, city, state, zip FROM member INNER JOIN adult ON member.member_no = adult.member_no GO
5. Führen Sie die Abfrage aus, um zu überprüfen, ob die gewünschten Ergebnisse zurückgegeben werden.
Unterrichtseinheit 5: Verknüpfen von mehreren Tabellen
Ergebnis
Das Ergebnis ähnelt dem folgenden Teil eines Resultsets.
name
street
city
state
zip
Amy A Anderson Brian A Anderson Daniel A Anderson Eva A Anderson Gary A Anderson . . . 5000 row(s) affected
Bowery Estates Dogwood Drive Fir Street The Highlands James Road
Montgomery Sacramento Washington Atlanta Springfield
AL CA DC GA IL
36100 94203 20510-0001 30026 62700
25
! So verknüpfen Sie mehrere Tabellen und sortieren die Ergebnisse In diesem Verfahren erstellen Sie zunächst eine Abfrage, die Sie dann für die Tabellen title, item und copy ausführen. Die Abfrage gibt die Spalten isbn, copy_no, on_loan, title, translation und cover sowie Werte für Zeilen der copy-Tabelle mit der ISBN-Nummer 1, 500 oder 1000 zurück. Sortieren Sie die Ergebnisse nach der isbn-Spalte. Answer_Serveral.sql ist ein vollständiges Skript für dieses Verfahren. 1. Erstellen Sie die Auswahlliste der Abfrage. Kennzeichnen Sie den Namen jeder Spalte mit einem Tabellenaliasnamen, der aus mindestens zwei Zeichen besteht (z. B. ti.title_no für title.title_no). 2. Schreiben Sie eine FROM-Klausel, die eine innere Verknüpfung zwischen den Tabellen title und copy in der Spalte title_no erstellt. Richten Sie die in der Auswahlliste verwendeten Tabellenaliasnamen in der FROM-Klausel ein. 3. Fügen Sie eine zweite INNER JOIN-Klausel hinzu, um eine Verknüpfung zwischen den Tabellen item und copy in der isbn-Spalte zu erstellen. 4. Erstellen Sie eine WHERE-Klausel, um die aus der copy-Tabelle abgerufenen Zeilen auf jene zu beschränken, deren ISBN-Nummer 1, 500 oder 1000 lautet. 5. Schreiben Sie die ORDER BY-Klausel, um das Ergebnis anhand der ISBN-Nummer zu sortieren. 6. Führen Sie das Skript aus. USE library SELECT co.isbn, co.copy_no, co.on_loan ,ti.title, it.translation, it.cover FROM copy co INNER JOIN title AS ti ON co.title_no = ti.title_no INNER JOIN item AS it ON co.isbn = it.isbn WHERE co.isbn IN ( 1, 500, 1000) ORDER BY co.isbn GO
7. Führen Sie die Abfrage aus, um zu überprüfen, ob die gewünschten Ergebnisse zurückgegeben werden.
26
Unterrichtseinheit 5: Verknüpfen von mehreren Tabellen
Ergebnis
Das Ergebnis ähnelt dem folgenden Teil eines Resultsets.
isbn
copy_no
on_loan
title
1 1 1 1 . . . (30 row(s)
1 2 3 4
N N N N
Last Last Last Last
of of of of
the the the the
Mohicans Mohicans Mohicans Mohicans
translation
cover
ARABIC ARABIC ARABIC ARABIC
HARDBACK HARDBACK HARDBACK HARDBACK
affected)
! So verknüpfen Sie mehrere Tabellen mit Hilfe einer äußeren Verknüpfung
In diesem Verfahren erstellen Sie eine Abfrage und führen sie aus, um für die Mitgliedsnummern 250, 341 und 1675 den vollständigen Namen des jeweiligen Mitglieds sowie die Mitgliedsnummer member_no in der member-Tabelle und die Werte für isbn und log_date in der reservation-Tabelle abrufen. Sortieren Sie die Ergebnisse nach member_no. Zeigen Sie die Daten für diese Mitglieder an, auch wenn sie keine Bücher reserviert haben. Answer_LeftOuter.sql ist ein vollständiges Skript für dieses Verfahren. 1. Erstellen Sie die Auswahlliste der Abfrage. a. Erstellen Sie die name-Spalte, indem Sie die Spalten lastname, firstname und middleinitial für jedes Mitglied verketten. b. Erstellen Sie die date-Spalte, indem Sie den Wert für log_date in den Datentyp char(8) konvertieren. 2. Schreiben Sie eine FROM-Klausel, die eine linke äußere Verknüpfung zwischen den Tabellen member und reservation in den member_noSpalten erstellt. 3. Erstellen Sie eine WHERE-Klausel, mit der die Mitgliedsnummern 250, 341 und 1675 aus der member-Tabelle abgerufen werden. 4. Schreiben Sie die ORDER BY-Klausel, um das Ergebnis nach den Mitgliedsnummern zu sortieren. USE library SELECT me.member_no ,me.lastname + ', ' + me.firstname + ' ' + me.middleinitial AS name ,re.isbn ,CONVERT(char(8),re.log_date,1) AS date FROM member AS me LEFT OUTER JOIN reservation AS re ON me.member_no = re.member_no WHERE me.member_no IN ( 250, 341, 1675 ) ORDER BY me.member_no GO
Unterrichtseinheit 5: Verknüpfen von mehreren Tabellen
27
5. Führen Sie die Abfrage aus, um zu überprüfen, ob die gewünschten Ergebnisse zurückgegeben werden. Welche Mitglieder haben keine Bücher reserviert? 250 und 1675 ____________________________________________________________ ____________________________________________________________ Ergebnis
Das Ergebnis ähnelt dem folgenden Teil eines Resultsets. member_no
name
isbn
date
250 341 341 341 341 1675
Hightower, Michael A Martin, Brian A Martin, Brian A Martin, Brian A Martin, Brian A LaBrie, Joshua B
NULL 43 330 617 904 NULL
NULL 11/21/98 11/21/98 11/21/98 11/21/98 NULL
(6 row(s) affected)
28
Unterrichtseinheit 5: Verknüpfen von mehreren Tabellen
Übung 2 Verwenden des UNION-Operators zum Kombinieren von Resultsets In dieser Übung erstellen Sie ein einzelnes Resultset mit Hilfe des UNIONOperators, um die Ergebnisse von zwei ähnlichen SELECT-Anweisungen zu verketten. C:\Moc\2316B\Labfiles\L05\Answers enthält vollständige Skripts für diese Übung.
! So ermitteln Sie, welche in Arizona lebenden Mitglieder mehr als zwei Kinder mit Leserausweisen haben
In diesem Verfahren ermitteln Sie, welche in Arizona lebenden Mitglieder mehr als zwei Kinder mit Leserausweisen haben. Answer_Union1.sql ist ein vollständiges Skript für dieses Verfahren. 1. Schreiben Sie eine SELECT-Anweisung, die die Mitgliedsnummer member_no und die Anzahl von juvenile-Einträgen zurückgibt, die jedes Mitglied in einem berechneten Feld mit dem Namen numkids hat. Es sollen nur Einträge für Bibliotheksmitglieder zurückgegeben werden, die in Arizona leben und mehr als zwei Kinder haben. USE library SELECT a.member_no ,count(*) AS numkids FROM juvenile AS j INNER JOIN adult AS a ON j.adult_member_no = a.member_no WHERE a.state = 'AZ' GROUP BY a.member_no HAVING COUNT(*) > 2 GO
2. Führen Sie die Abfrage aus, um zu überprüfen, ob die gewünschten Ergebnisse zurückgegeben werden. Notieren Sie die Anzahl der Zeilen, die zurückgegeben werden. 3. Löschen Sie die Abfrage nicht.
! So ermitteln Sie, welche in California lebenden Mitglieder mehr als drei Kinder mit Leserausweisen haben
In diesem Verfahren ermitteln Sie, welche in California lebenden Mitglieder mehr als drei Kinder mit Leserausweisen haben. Answer_Union2.sql ist ein vollständiges Skript für dieses Verfahren. 1. Drücken Sie STRG+N, und erstellen Sie ein neues Abfragefenster. 2. Kopieren Sie die Abfrage aus dem ersten Verfahren dieser Übung, und fügen Sie sie in das neue Abfragefenster ein.
Unterrichtseinheit 5: Verknüpfen von mehreren Tabellen
29
3. Ändern Sie die Abfrage in Schritt 2 so, dass sie nur Einträge für Bibliotheksmitglieder zurückgibt, die in California leben und mehr als drei Kinder mit Leserausweisen haben. USE library SELECT a.member_no ,count(*) AS numkids FROM juvenile AS j INNER JOIN adult AS a ON j.adult_member_no = a.member_no WHERE a.state = 'CA' GROUP BY a.member_no HAVING COUNT(*) > 3 GO
4. Führen Sie die Abfrage aus, um zu überprüfen, ob die gewünschten Ergebnisse zurückgegeben werden. Notieren Sie die Anzahl der Zeilen, die zurückgegeben werden.
! So kombinieren Sie die Resultsets separater Abfragen In diesem Verfahren kombinieren Sie die Resultsets separater Abfragen. Answer_Union3.sql ist ein vollständiges Skript für dieses Verfahren. 1. Drücken Sie STRG+N, und erstellen Sie ein neues Abfragefenster. 2. Kopieren Sie die Abfrage aus dem ersten Verfahren dieser Übung, und fügen Sie sie in das neue Fenster ein. 3. Fügen Sie in einer neuen Zeile am Ende der Abfrage die UNIONAnweisung hinzu. 4. Kopieren Sie die Abfrage des zweiten Verfahrens dieser Übung, und fügen Sie sie in das neue Fenster ein, und zwar in die Zeile, die auf die in Schritt 3 dieses Verfahrens hinzugefügte UNION-Anweisung folgt. USE library SELECT a.member_no ,count(*) AS numkids FROM juvenile AS j INNER JOIN adult AS a ON j.adult_member_no = a.member_no WHERE a.state = 'AZ' GROUP BY a.member_no HAVING COUNT(*) > 2 UNION SELECT a.member_no ,count(*) AS numkids FROM juvenile AS j INNER JOIN adult AS a ON j.adult_member_no = a.member_no WHERE a.state = 'CA' GROUP BY a.member_no HAVING COUNT(*) > 3 GO
30
Unterrichtseinheit 5: Verknüpfen von mehreren Tabellen
5. Führen Sie die Abfrage aus, um zu überprüfen, ob die gewünschten Ergebnisse zurückgegeben werden. Notieren Sie die Anzahl der Zeilen, die zurückgegeben werden. Vergleichen Sie die Anzahl der Zeilen, die diese Abfrage zurückgibt, mit der Anzahl der Zeilen, die die Abfragen der ersten beiden Verfahren zurückgeben. Zu welchem Ergebnis kommen Sie? Die UNION-Anweisung kombiniert die Resultsets der ersten beiden Abfragen in einem einzelnen Recordset. Die Anzahl der Zeilen, die im letzten Verfahren zurückgegeben werden, sollten mit der Summe der Zeilen übereinstimmen, die in den ersten beiden Verfahren zurückgegeben werden. ____________________________________________________________ ____________________________________________________________
Unterrichtseinheit 5: Verknüpfen von mehreren Tabellen
31
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 Aliasnamen für Tabellennamen
!
Kombinieren von Daten aus mehreren Tabellen
!
Kombinieren mehrerer Resultsets
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Die Krankenkasse Duluth Mutual Life verfügt über eine Datenbank, in der Informationen zu Ärzten und 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)
Notfalltabelle Spalte
Datentyp und Einschränkungen
admission_date
datetime, PRIMARY KEY (zusammengesetzt)
pat_id
char(9), PRIMARY KEY (zusammengesetzt), FOREIGN KEY to patient.pat_id
doc_id
char(9), FOREIGN KEY to doctor.doc_id
diagnosis
varchar(150)
32
Unterrichtseinheit 5: Verknüpfen von mehreren Tabellen
Beantworten Sie auf der Grundlage dieser Tabellenstruktur die folgenden Fragen. 1. Wie wird eine Liste der Patientennamen mit ihrem Einlieferungsdatum ins Krankenhaus generiert? Verknüpfen Sie die Patiententabelle mit der Notfalltabelle über die Spalte „pat_id“.
2. Wie wird eine Liste mit Patientennamen für einen bestimmten Arzt erstellt? Alle drei Tabellen müssen miteinander verknüpft werden. Bei der Beziehung zwischen Arzt und Patient handelt es sich um eine n:nBeziehung. Obwohl Sie lediglich Informationen aus der Arzt- und der Patiententabelle benötigen, müssen Sie auch die Notfalltabelle verwenden, da Arzt und Patient in dieser Tabelle in Beziehung zueinander gesetzt werden. Verknüpfen Sie die Ärztetabelle mit der Notfalltabelle über die Spalte „doc_id“ und die Patiententabelle mit der Notfalltabelle über die Spalte „pat_id“. Verwenden Sie eine WHERE-Klausel, um die Ergebnisse auf einen bestimmten Arzt zu beschränken.
3. Wie wird eine Liste mit Paaren von Ärzten erstellt, die im gleichen Fachgebiet tätig sind? Verknüpfen Sie die Ärztetabelle mit sich selbst. Verknüpfen Sie die beiden Kopien der Tabelle in die „specialty“-Spalte. Beschränken Sie die Ergebnisse auf Zeilen, in denen die „doc_id“-Spalte nicht übereinstimmt. Löschen Sie auf jeden Fall Spiegelbildpaare mit Hilfe des Operators Größer als (>) in der WHERE-Klausel.
4. Wie wird eine Liste mit Namen und Telefonnummern erstellt, die sowohl Ärzte als auch Patienten enthält? Erstellen Sie eine Abfrage, die Namen und Telefonnummern aus der Ärztetabelle abruft. Erstellen Sie eine zweite Abfrage, die dieselben Daten aus der Patiententabelle abruft. Kombinieren Sie die Abfragen mit Hilfe des UNION-Operators.
Unterrichtseinheit 6: Arbeiten mit Unterabfragen Inhalt Ü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
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 6: Arbeiten mit Unterabfragen
iii
Hinweise für den Kursleiter Präsentation: 45 Minuten Übungseinheit: 30 Minuten
In dieser Unterrichtseinheit werden erweiterte Abfragetechniken vorgestellt, zu denen geschachtelte und korrelierte Unterabfragen gehören. Es wird beschrieben, wann und wie eine Unterabfrage verwendet wird und wie Unterabfragen zum Untergliedern und Ausführen komplexer Abfragen verwendet werden. Am Ende dieser Unterrichtseinheit werden die Kursteilnehmer in der Lage sein, die folgenden Aufgaben auszuführen: !
Beschreiben, wann und wie eine Unterabfrage verwendet wird.
!
Verwenden von Unterabfragen, um komplexe Abfragen zu untergliedern und auszuführen.
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_06.ppt
!
Die Beispieldatei C:\Moc\2316B\Demo\Ex_06.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 6: Arbeiten mit Unterabfragen
Strategie für die Unterrichtseinheit Verwenden Sie die folgende Strategie, um diese Unterrichtseinheit zu präsentieren: !
Einführung in Unterabfragen Definieren Sie Unterabfragen, und stellen Sie die grundlegenden Aspekte und Richtlinien ihrer Verwendung vor. Weisen Sie darauf hin, dass Unterabfragen möglicherweise weniger effizient als Verknüpfungen sind, da Unterabfragen die Reihenfolge angeben, in der Daten abgerufen werden sollen. Mit Verknüpfungen kann der Abfrageoptimierer in Microsoft SQL Server™ 2000 auf die effizienteste Weise Daten abrufen.
!
Verwenden einer Unterabfrage als abgeleitete Tabelle Beschreiben Sie, auf welche Art und Weise eine abgeleitete Tabelle eine besondere Verwendung einer Unterabfrage in einer FROM-Klausel darstellt, auf die ein Alias oder ein vom Benutzer angegebener Name verweist. Erläutern Sie, wann sie verwendet wird. Besprechen Sie das Beispiel.
!
Verwenden einer Unterabfrage als Ausdruck Beschreiben Sie, wann und wie eine Unterabfrage als Ausdruck verwendet wird. Besprechen Sie das Beispiel.
!
Verwenden einer Unterabfrage zum Korrelieren von Daten Erläutern Sie, wie korrelierte Abfragen verarbeitet werden. Verwenden Sie die Grafik, um darzustellen, wie korrelierte Unterabfragen ausgewertet werden. Weisen Sie auf den Unterschied zwischen einer korrelierten und einer geschachtelten Unterabfrage hin. In einer korrelierten Unterabfrage wird die innere Abfrage wiederholt ausgewertet. Dies geschieht einmal für jede Zeile der äußeren Abfrage. Beschreiben Sie, wie eine Unterabfrage zum Korrelieren von Daten verwendet wird, indem JOIN- und HAVING-Klauseln imitiert werden. Besprechen Sie die Beispiele.
!
Verwenden der EXISTS- und NOT EXISTS-Klauseln Stellen Sie die EXIST- und NOT EXISTS-Schlüsselwörter im Kontext ihrer Verwendung zusammen mit korrelierten Unterabfragen vor. Besprechen Sie das Beispiel.
Unterrichtseinheit 6: Arbeiten mit Unterabfragen
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 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.
iv
Unterrichtseinheit 6: Arbeiten mit Unterabfragen
This page is intentionally left blank.
Unterrichtseinheit 6: Arbeiten mit Unterabfragen
1
Übersicht Inhalt dieser Folie
Geben Sie eine kurze Übersicht über die Themen dieser Unterrichtseinheit.
!
Einführung in Unterabfragen
Einstieg
!
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
In dieser Unterrichtseinheit lernen Sie die erweiterten Abfragetechniken kennen.
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** In dieser Unterrichtseinheit werden erweiterte Abfragetechniken vorgestellt, zu denen geschachtelte und korrelierte Unterabfragen gehören. Außerdem wird erläutert, wie diese Techniken zum Ändern von Daten verwendet werden können. Es wird beschrieben, wann und wie eine Unterabfrage verwendet wird und wie Unterabfragen zum Untergliedern und Ausführen komplexer Abfragen verwendet werden. Am Ende dieser Unterrichtseinheit werden Sie in der Lage sein, die folgenden Aufgaben auszuführen: !
Beschreiben, wann und wie eine Unterabfrage verwendet wird.
!
Verwenden von Unterabfragen, um komplexe Abfragen zu untergliedern und auszuführen.
2
Unterrichtseinheit 6: Arbeiten mit Unterabfragen
Einführung in Unterabfragen Inhalt dieser Folie
Erläutern Sie, wann Unterabfragen verwendet werden sollten.
!
Einstieg
Unterabfragen bestehen aus einer Reihe von SELECTAnweisungen. In vielen Fällen können Sie Unterabfragen als Verknüpfungen neu schreiben.
Gründe für die Verwendung von Unterabfragen "
"
!
Beantworten von Abfragen, die von den Ergebnissen einer anderen Abfrage abhängen
Gründe für die Verwendung von Verknüpfungen anstelle von Unterabfragen "
!
Untergliedern komplexer Abfragen in eine Reihe logischer Schritte
SQL Server führt Verknüpfungen effizienter aus als Unterabfragen
Verwendung von Unterabfragen
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Bei einer Unterabfrage handelt es sich um eine SELECT-Anweisung, die in eine SELECT-, INSERT-, UPDATE- oder DELETE-Anweisung oder in eine andere Unterabfrage geschachtelt ist. In vielen Fällen können Sie Unterabfragen als Verknüpfungen neu schreiben und Unterabfragen anstelle von Ausdrücken verwenden. Bei einem Ausdruck handelt es sich um eine Kombination aus Bezeichnern, Werten und Operatoren, die Microsoft® SQL Server™ auswertet, um ein Ergebnis zu erhalten.
Gründe für die Verwendung von Unterabfragen Verwenden Sie Unterabfragen, um eine komplexe Abfrage in eine Reihe logischer Schritte zu untergliedern und so ein Problem mit einer einzigen Anweisung zu lösen. Unterabfragen sind hilfreich, wenn die Abfrage vom Ergebnis einer anderen Abfrage abhängt.
Gründe für die Verwendung von Verknüpfungen anstelle von Unterabfragen In vielen Fällen kann eine Abfrage, die Unterabfragen enthält, als Verknüpfung geschrieben werden. Die Abfrageleistung kann bei Verknüpfungen und Unterabfragen ähnlich sein. Der Abfrageoptimierer optimiert normalerweise Unterabfragen so, dass die Unterabfrage den beispielhaften Ausführungsplan verwendet, den eine semantisch gleichwertige Verknüpfung verwenden würde. Der Unterschied besteht darin, dass bei einer Unterabfrage der Abfrageoptimierer eventuell zusätzliche Schritte durchführen muss (z. B. Sortieren), die einen Einfluss auf die Verarbeitungsstrategie haben können. Durch die Verwendung von Verknüpfungen kann der Abfrageoptimierer Daten auf die effizienteste Weise abfragen. Bei Abfragen, für die mehrere Schritte nicht erforderlich sind, muss möglicherweise keine Unterabfrage verwendet werden.
Unterrichtseinheit 6: Arbeiten mit Unterabfragen
Methodischer Hinweis
Besprechen Sie alle Aspekte und Richtlinien, die beim Verwenden von Unterabfragen berücksichtigt werden sollten.
3
Verwendung von Unterabfragen Berücksichtigen Sie bei der Verwendung von Unterabfragen die folgenden Aspekte und Richtlinien: !
Unterabfragen müssen in Klammern eingeschlossen werden.
!
Eine Unterabfrage kann anstelle eines Ausdrucks verwendet werden, vorausgesetzt ein Wert oder eine Liste von Werten wird zurückgegeben. Eine Unterabfrage, die ein mehrspaltiges Recordset zurückgibt, kann anstelle einer Tabelle oder zum Ausführen der gleichen Funktionen wie eine Verknüpfung verwendet werden.
!
Unterabfragen können nicht dazu verwendet werden, um Spalten mit textoder image-Datentypen abzurufen.
!
Unterabfragen können in Unterabfragen enthalten sein. Es ist eine Schachtelung bis zu 32 Ebenen möglich. Der Höchstwert hängt vom verfügbaren Arbeitsspeicher und der Komplexität anderer Ausdrücke in der Abfrage ab. Einzelne Abfragen unterstützen möglicherweise keine Schachtelung bis zu 32 Ebenen.
4
Unterrichtseinheit 6: Arbeiten mit Unterabfragen
Verwenden einer Unterabfrage als abgeleitete Tabelle Inhalt dieser Folie
Beschreiben Sie, wie eine Unterabfrage als abgeleitete Tabelle verwendet wird.
Einstieg
Sie erstellen eine abgeleitete Tabelle, indem Sie in einer FROM-Klausel eine Unterabfrage anstelle einer Tabelle verwenden.
!
Die Unterabfrage ist ein Recordset in der Abfrage, das wie eine Tabelle funktioniert
!
Die Unterabfrage wird in der FROM-Klausel anstelle einer Tabelle verwendet
!
Die Unterabfrage wird mit dem Rest der Abfrage optimiert
USE USE Northwind Northwind SELECT SELECT T.orderid, T.orderid, T.customerid T.customerid FROM FROM (( SELECT SELECT orderid, orderid, customerid customerid FROM FROM orders orders )) AS AS TT GO GO
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Sie erstellen eine abgeleitete Tabelle, indem Sie in einer FROM-Klausel eine Unterabfrage anstelle einer Tabelle verwenden. Eine abgeleitete Tabelle ist eine besondere Verwendung einer Unterabfrage in einer FROM-Klausel, auf die ein Alias oder ein vom Benutzer angegebener Name verweist. Das Resultset der Unterabfrage in der FROM-Klausel bildet eine Tabelle, die von der äußeren SELECT-Anweisung verwendet wird. Beispiel
In diesem Beispiel wird eine Unterabfrage verwendet, um eine abgeleitete Tabelle im inneren Teil der Abfrage zu erstellen, die vom äußeren Teil abgefragt wird. Die abgeleitete Tabelle funktioniert wie die gesamte Abfrage, sie wird aber zu Illustrationszwecken getrennt. USE Northwind SELECT T.orderid, T.customerid FROM ( SELECT orderid, customerid FROM orders ) AS T GO
Wenn eine Unterabfrage als abgeleitete Tabelle verwendet wird, beachten Sie Folgendes: !
Die Unterabfrage ist ein Recordset in der Abfrage, das wie eine Tabelle funktioniert.
!
Die Unterabfrage wird in der FROM-Klausel anstelle einer Tabelle verwendet.
!
Die Unterabfrage wird mit dem Rest der Abfrage optimiert.
Unterrichtseinheit 6: Arbeiten mit Unterabfragen
5
Verwenden einer Unterabfrage als Ausdruck Inhalt dieser Folie
Beschreiben Sie, wie eine Unterabfrage als Ausdruck verwendet wird.
!
Die Unterabfrage wird wie ein Ausdruck ausgewertet und bearbeitet
!
Die Unterabfrage wird einmal für die gesamte Abfrage ausgewertet
Einstieg
Sie können eine Unterabfrage immer ersetzen, wenn Sie einen Ausdruck in SELECT-, UPDATE-, INSERT- und DELETEAnweisungen verwenden.
USE USE pubs pubs SELECT SELECT title, title, price price ,(SELECT ,(SELECT AVG(price) AVG(price) FROM FROM titles) titles) AS AS average average ,price-(SELECT ,price-(SELECT AVG(price) AVG(price) FROM FROM titles) titles) AS AS difference difference FROM FROM titles titles WHERE WHERE type='popular_comp' type='popular_comp' GO GO
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Methodischer Hinweis
Weisen Sie darauf hin, dass Unterabfragen, die eine Liste von Werten zurückgeben, einen Ausdruck in einer WHERE-Klausel ersetzen, die das INSchlüsselwort aufweist, oder in der FROM-Klausel als abgeleitete Tabelle verwendet werden können.
Beispiel
In Transact-SQL können Sie eine Unterabfrage immer ersetzen, wenn Sie einen Ausdruck verwenden. Die Unterabfrage muss einen skalaren Wert oder eine einzige Spaltenliste von Werten ergeben. Unterabfragen, die eine Liste von Werten zurückgeben, ersetzen einen Ausdruck in einer WHERE-Klausel, der das IN-Schlüsselwort enthält. Wenn eine Unterabfrage als Ausdruck verwendet wird, beachten Sie Folgendes: !
Die Unterabfrage wird wie ein Ausdruck ausgewertet und bearbeitet. Der Abfrageoptimierer wertet häufig einen Ausdruck anstelle einer Verknüpfung aus, die eine Verbindung zu einer Tabelle mit einer Zeile herstellt.
!
Die Unterabfrage wird einmal für die gesamte Abfrage ausgewertet.
In diesem Beispiel gibt die Abfrage den Preis eines beliebten Computerbuches, den Durchschnittspreis aller Bücher und die Differenz zwischen dem Preis des Buches und dem Durchschnittspreis aller Bücher zurück. USE pubs SELECT title, price ,(SELECT AVG(price) FROM titles) AS average ,price-(SELECT AVG(price) FROM titles) AS difference FROM titles WHERE type='popular_comp' GO
6
Unterrichtseinheit 6: Arbeiten mit Unterabfragen
# Verwenden einer Unterabfrage zum Korrelieren von Daten Inhalt dieser Folie
Beschreiben Sie, wie eine Unterabfrage zum Korrelieren von Daten verwendet wird.
Einstieg
Eine korrelierte Unterabfrage kann als dynamischer Ausdruck verwendet werden, der sich für jede Zeile einer äußeren Abfrage ändert.
!
Auswerten einer korrelierten Unterabfrage
!
Imitieren einer JOIN-Klausel
!
Imitieren einer HAVING-Klausel
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Sie können eine korrelierte Unterabfrage als dynamischen Ausdruck verwenden, der sich für jede Zeile einer äußeren Abfrage ändert. Der Abfrageprozessor führt die Unterabfrage für jede Zeile in der äußeren Abfrage einzeln aus, dies wird wiederum als Ausdruck für die Zeile ausgewertet und an die äußere Abfrage übergeben. Die korrelierte Unterabfrage ist tatsächlich eine JOIN-Klausel zwischen der dynamisch ausgeführten Unterabfrage und der Zeile der äußeren Abfrage. Sie können normalerweise eine Abfrage auf verschiedene Arten neu schreiben und dennoch das gleiche Ergebnis erhalten. Korrelierte Unterabfragen untergliedern komplexe Abfragen in zwei oder mehr einfache, zusammenhängende Abfragen. Tipp Sie können korrelierte Unterabfragen leicht erkennen. Eine Spalte einer Tabelle in der Unterabfrage wird mit einer Spalte einer Tabelle außerhalb der Unterabfrage verglichen.
Unterrichtseinheit 6: Arbeiten mit Unterabfragen
7
Auswerten einer korrelierten Unterabfrage Inhalt dieser Folie
Die Dieäußere äußereAbfrage Abfrageübergibt übergibtdie die Spaltenwerte Spaltenwertean andie dieinnere innere Abfrage Abfrage
Erläutern Sie, wie korrelierte Unterabfragen verarbeitet werden.
Die Dieinnere innereAbfrage Abfrageverwendet verwendet diesen , um Wert diesenWert, Wert, umdie dieinnere innere Abfrage üllen erf Abfragezu zuerfü erfüllen
USE USE Northwind Northwind SELECT SELECT orderid, orderid, customerid customerid FROM FROM orders orders AS AS or1 or1 WHERE WHERE 20 20 << (SELECT (SELECT quantity quantity FROM FROM [order [order details] details] AS AS od od WHERE WHERE or1.orderid or1.orderid == od.orderid od.orderid AND AND od.productid od.productid == 23) 23) GO GO
Einstieg
Wenn Sie eine korrelierte Unterabfrage erstellen, werden die inneren Unterabfragen wiederholt ausgewertet, einmal für jede Zeile der äußeren Abfrage.
Die Dieinnere innereAbfrage Abfragegibt gibteinen einen Wert ußere Abfrage Wertan andie dieääußere Abfrage zurü ück zur zurück
Beispiel Beispiel 11
Dieser r die fü DieserVorgang Vorgangwird wirdfü für die nnächste ächste Zeile ußeren Zeileder derääußeren Abfrage Abfragewiederholt wiederholt
Zurück Zurückzu zuSchritt Schritt11
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Methodischer Hinweis
Vergleichen Sie korrelierte Unterabfragen mit geschachtelten Unterabfragen.
Beispiel 1
Wenn Sie eine korrelierte Unterabfrage erstellen, werden die inneren Unterabfragen wiederholt ausgewertet, einmal für jede Zeile der äußeren Abfrage: !
SQL Server führt die innere Abfrage für jede Zeile aus, die die äußere Abfrage auswählt.
!
SQL Server vergleicht die Ergebnisse der Unterabfrage mit den Ergebnissen außerhalb der Unterabfrage.
In diesem Beispiel wird eine Liste der Kunden zurückgegeben, die mehr als 20 Einheiten des Produkts mit der Nummer 23 bestellt haben. USE Northwind SELECT orderid, customerid FROM orders AS or1 WHERE 20 < (SELECT quantity FROM [order details] AS od WHERE or1.orderid = od.orderid AND od.productid = 23) GO
Ergebnis
orderid
customerid
10337 10348 10396 10402 10462 . . . (11 row(s) affected)
FRANK WANDK FRANK ERNSH CONSH
8
Unterrichtseinheit 6: Arbeiten mit Unterabfragen
Korrelierte Unterabfragen geben einen einzelnen Wert oder eine Liste von Werten für jede Zeile zurück, die von der FROM-Klausel der äußeren Abfrage angegeben wird. In den folgenden Schritten wird beschrieben, wie die korrelierte Unterabfrage in Beispiel 1 ausgewertet wird: 1. Die äußere Abfrage übergibt einen Spaltenwert an die innere Abfrage. Der Spaltenwert, den die äußere Abfrage an die innere Abfrage übergibt, ist die orderid. Die äußere Abfrage übergibt die erste orderid in der orders-Tabelle an die innere Abfrage. 2. Die innere Abfrage verwendet die von der äußeren Abfrage übergebenen Werte. Jede orderid in der orders-Tabelle wird ausgewertet, um zu ermitteln, ob eine identische orderid in der order details-Tabelle vorhanden ist. Wenn die erste orderid mit einer orderid in der order details-Tabelle übereinstimmt und diese orderid das Produkt mit der Nummer 23 gekauft hat, dann gibt die innere Abfrage diese orderid an die äußere Abfrage zurück. 3. Die innere Abfrage gibt einen Wert an die äußere Abfrage zurück. Die WHERE-Klausel der äußeren Abfrage wertet die orderid, die das Produkt mit der Nummer 23 gekauft hat, weiter aus, um zu ermitteln, ob die Bestellmenge den Wert 20 überschreitet. 4. Dieser Vorgang wird für die nächste Zeile der äußeren Abfrage wiederholt. Die äußere Abfrage übergibt die zweite orderid in der orders-Tabelle an die innere Abfrage, und SQL Server wiederholt die Auswertung für diese Zeile. Beispiel 2
In diesem Beispiel wird eine Liste von Produkten und die für jedes Produkt in der order details-Tabelle jemals aufgegebene größte Bestellung zurückgegeben. Beachten Sie, dass diese korrelierte Unterabfrage auf die gleiche Tabelle verweist wie die äußere Abfrage. Dies wird vom Optimierer im Allgemeinen wie eine Selbstverknüpfung behandelt. USE Northwind SELECT DISTINCT productid, quantity FROM [order details] AS ord1 WHERE quantity = ( SELECT MAX(quantity) FROM [order details] AS ord2 WHERE ord1.productid = ord2.productid ) GO
Ergebnis
productid
quantity
50 67 4 9 11 . . . (77 row(s) affected)
40 40 50 50 50
Unterrichtseinheit 6: Arbeiten mit Unterabfragen
9
Imitieren einer JOIN-Klausel Inhalt dieser Folie
Beschreiben Sie, wie eine korrelierte Abfrage zum Imitieren einer JOIN-Klausel verwendet wird.
Einstieg
Sie können eine korrelierte Unterabfrage verwenden, um die gleichen Ergebnisse wie mit einer JOIN-Klausel zu erzielen.
!
Mit korrelierten Unterabfragen können die gleichen Ergebnisse wie mit einer JOIN-Klausel erzielt werden
!
Durch Verknüpfungen kann der Abfrageoptimierer die effizienteste Methode zum Korrelieren von Daten bestimmen
USE USE pubs pubs SELECT SELECT DISTINCT DISTINCT t1.type t1.type FROM titles FROM titles AS AS t1 t1 WHERE WHERE t1.type t1.type IN IN (SELECT (SELECT t2.type t2.type FROM FROM titles titles AS AS t2 t2 WHERE WHERE t1.pub_id t1.pub_id <> <> t2.pub_id) t2.pub_id) GO GO
Beispiel Beispiel 11
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Methodischer Hinweis
Wichtig für das Verstehen der Syntax einer korrelierten Unterabfrage sind Kenntnisse im Verwenden von Tabellenaliasnamen. Die Tabellenaliasnamen zeigen Ihnen, welche Tabellen korrelieren.
Beispiel 1
Sie können eine korrelierte Unterabfrage verwenden, um die gleichen Ergebnisse wie mit einer JOIN-Klausel zu erzielen. Dazu kann z. B. das Auswählen von Daten aus einer Tabelle gehören, auf die in der äußeren Abfrage verwiesen wird. Anmerkung Sie können normalerweise korrelierte Unterabfragen als Verknüpfungen umschreiben. Durch das Verwenden von Verknüpfungen anstelle von korrelierten Unterabfragen kann der Abfrageoptimierer die effizienteste Methode zum Korrelieren von Daten bestimmen. In diesem Beispiel wird eine korrelierte Unterabfrage verwendet, um die Arten von Büchern zu ermitteln, die von mehreren Verlagen herausgegeben werden. Um Mehrdeutigkeit zu vermeiden, sind Aliasnamen erforderlich, um die beiden Rollen zu unterscheiden, in denen die titles-Tabelle angezeigt wird. USE pubs SELECT DISTINCT t1.type FROM titles AS t1 WHERE t1.type IN (SELECT t2.type FROM titles AS t2 WHERE t1.pub_id <> t2.pub_id) GO
Ergebnis
Type business psychology (2 row(s) affected)
10
Unterrichtseinheit 6: Arbeiten mit Unterabfragen
Beispiel 2
In diesem Beispiel wird das gleiche Ergebnis zurückgegeben wie in Beispiel 1, indem eine Selbstverknüpfung anstelle einer korrelierten Unterabfrage verwendet wird. USE pubs SELECT DISTINCT t1.type FROM titles AS t1 INNER JOIN titles AS t2 ON t1.type = t2.type WHERE t1.pub_id <> t2.pub_id GO
Methodischer Hinweis
Verwenden Sie SQL Query Analyzer, um beide JOINBeispiele auszuführen, und zeigen Sie die unterschiedlichen Ausführungspläne.
Unterrichtseinheit 6: Arbeiten mit Unterabfragen
11
Imitieren einer HAVING-Klausel Inhalt dieser Folie
Beschreiben Sie, wie eine HAVING-Klausel imitiert werden kann.
Einstieg
Sie können eine korrelierte Unterabfrage verwenden, um die gleichen Ergebnisse wie durch eine Abfrage mit einer HAVING-Klausel zu erzielen.
!
Unterabfrage mit dem gleichen Ergebnis wie eine HAVING-Klausel
USE USE pubs pubs SELECT SELECT t1.type, t1.type, FROM FROM titles titles AS AS WHERE WHERE t1.price t1.price GO GO
!
Beispiel Beispiel 11
t1.title, t1.title, t1.price t1.price t1 t1 >> (( SELECT SELECT AVG(t2.price) AVG(t2.price) FROM FROM titles titles AS AS t2 t2 WHERE WHERE t1.type t1.type == t2.type t2.type ))
Verwenden einer HAVING-Klausel ohne Unterabfrage
USE USE pubs pubs SELECT SELECT t1.type, t1.type, t1.title, t1.title, t1.price t1.price FROM FROM titles titles AS AS t1 t1 INNER INNER JOIN JOIN titles titles AS AS t2 t2 ON ON t1.type t1.type == t2.type t2.type GROUP GROUP BY BY t1.type, t1.type, t1.title, t1.title, t1.price t1.price HAVING HAVING t1.price t1.price >> AVG(t2.price) AVG(t2.price) GO GO
Beispiel Beispiel 22
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Sie können eine korrelierte Unterabfrage verwenden, um die gleichen Ergebnisse wie durch eine Abfrage mit einer HAVING-Klausel zu erzielen. Beispiel 1
Methodischer Hinweis
Verwenden Sie SQL Query Analyzer, um beide Beispiele auszuführen und um zu überprüfen, ob sie zum gleichen Ergebnis führen.
In diesem Beispiel werden alle Titel ermittelt, deren Preis über dem Durchschnittspreis für Bücher der gleichen Art liegt. SQL Server wertet die Unterabfrage für jeden möglichen Wert von t1 aus und schließt die Zeile in die Ergebnisse ein, wenn der Wert in der price-Spalte der Zeile größer als der berechnete Durchschnittswert ist. Es ist nicht notwendig, die Spalten explizit nach der Art zu gruppieren, da die Zeilen, aus deren Werten der Durchschnittspreis berechnet wird, durch die WHERE-Klausel in der Unterabfrage beschränkt werden. USE pubs SELECT t1.type, t1.title, t1.price FROM titles AS t1 WHERE t1.price > ( SELECT AVG(t2.price) FROM titles AS t2 WHERE t1.type = t2.type ) GO Resulttype
title
Business Business mod_cook popular_comp Psychology
The Busy Executive's Database Guide Straight Talk About Computers Silicon Valley Gastronomic Treats But Is It User Friendly? Computer Phobic AND Non-Phobic Individuals: Behavior Variations Prolonged Data Deprivation: Four Case Studies Onions, Leeks, and Garlic: Cooking Secrets of the Mediterranean
Psychology trad_cook
(7 row(s) affected)
12
Unterrichtseinheit 6: Arbeiten mit Unterabfragen
Beispiel 2
In diesem Beispiel wird das gleiche Resultset wie in Beispiel 1 erzeugt, es wird aber eine Selbstverknüpfung mit der GROUP BY- und der HAVING-Klausel verwendet. USE pubs SELECT t1.type, t1.title, t1.price FROM titles AS t1 INNER JOIN titles AS t2 ON t1.type = t2.type GROUP BY t1.type, t1.title, t1.price HAVING t1.price > 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}, '' ) ::= {| | <prefix_term>| <proximity_term> | <simple_term>| <weighted_term>}
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 <Parametername, Datentyp, Wert>. ____________________________________________________________ ____________________________________________________________
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