Hinweise für den Kursleiter

Werbung
brought to you by
FS:Company
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
$EIUDJHQYRQ0LFURVRIW64/6HUYHUPLW+LOIHYRQ7UDQVDFW64/
,QKDOW
LLL
(LQIKUXQJ
Einführung ...............................................................................................................1
Kursunterlagen.........................................................................................................2
Voraussetzungen......................................................................................................3
Kursbeschreibung ....................................................................................................4
Anhänge ...................................................................................................................7
Microsoft Official Curriculum .................................................................................8
Microsoft Certified Professional-Programm............................................................9
Einrichtungen.........................................................................................................11
8QWHUULFKWVHLQKHLW(LQIKUXQJLQ7UDQVDFW64/
Ü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
8QWHUULFKWVHLQKHLW9HUZHQGHQYRQ7UDQVDFW64/$EIUDJHWRROV
Ü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
8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ
Ü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
LY
$EIUDJHQYRQ0LFURVRIW64/6HUYHUPLW+LOIHYRQ7UDQVDFW64/
8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ
Ü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
8QWHUULFKWVHLQKHLW9HUNQSIHQYRQPHKUHUHQ7DEHOOHQ
Ü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
8QWHUULFKWVHLQKHLW$UEHLWHQPLW8QWHUDEIUDJHQ
Ü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
8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ
Ü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
8QWHUULFKWVHLQKHLW$EIUDJHQYRQ9ROOWH[WLQGL]HV
Ü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
$EIUDJHQYRQ0LFURVRIW64/6HUYHUPLW+LOIHYRQ7UDQVDFW64/
Y
8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ
Ü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
$QKDQJ$)DOOVWXGLHGHUOLEUDU\'DWHQEDQN
$QKDQJ%'DWHQEDQNVFKHPDV
YL
$EIUDJHQYRQ0LFURVRIW64/6HUYHUPLW+LOIHYRQ7UDQVDFW64/
This page is intentionally left blank.
$EIUDJHQYRQ0LFURVRIW64/6HUYHUPLW+LOIHYRQ7UDQVDFW64/
YLL
hEHUGLHVHQ.XUV
Dieser Abschnitt bietet eine kurze Beschreibung des Kurses, der Zielgruppe,
der empfohlenen Voraussetzungen und der Lernziele.
%HVFKUHLEXQJ
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.
=LHOJUXSSH
Dieser Kurs richtet sich an SQL Server-Datenbankadministratoren, Implementierer, Systemtechniker und Entwickler, die für das Schreiben von Abfragen
verantwortlich sind.
9RUDXVVHW]XQJHQIUGLH.XUVWHLOQHKPHU
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.
YLLL
$EIUDJHQYRQ0LFURVRIW64/6HUYHUPLW+LOIHYRQ7UDQVDFW64/
/HUQ]LHOH
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.
$EIUDJHQYRQ0LFURVRIW64/6HUYHUPLW+LOIHYRQ7UDQVDFW64/
L[
=HLWSODQIUGHQ.XUV
Der folgende Zeitplan zeigt eine ungefähre Schätzung der für die einzelnen
Unterrichtseinheiten benötigten Zeit. Der Zeitplan kann sich leicht verschieben.
7DJ
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
7DJ
[
$EIUDJHQYRQ0LFURVRIW64/6HUYHUPLW+LOIHYRQ7UDQVDFW64/
,QKDOWGHU.XUVOHLWHU&'
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.
$EIUDJHQYRQ0LFURVRIW64/6HUYHUPLW+LOIHYRQ7UDQVDFW64/
[L
,QKDOWGHU.XUVWHLOQHKPHU&'
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.
[LL
$EIUDJHQYRQ0LFURVRIW64/6HUYHUPLW+LOIHYRQ7UDQVDFW64/
7\SRJUDILVFKH9HUHLQEDUXQJHQ
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.
)HVWEUHLWHQVFKULIW
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.
(LQIKUXQJ
LLL
+LQZHLVHIUGHQ.XUVOHLWHU
3UlVHQWDWLRQ
0LQXWHQ
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.
.XUVXQWHUODJHQXQG9RUEHUHLWXQJ
(UIRUGHUOLFKH8QWHUODJHQ
Um diesen Kurs zu unterrichten, benötigen Sie folgende Unterlagen:
„
Arbeitsbuch für Kursleiter
„
Kursleiter-CD
9RUEHUHLWHQGH$XIJDEHQ
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.
LY
(LQIKUXQJ
6WUDWHJLHIUGLH8QWHUULFKWVHLQKHLW
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.
(LQIKUXQJ
(LQIKUXQJ
,QKDOWGLHVHU)ROLH
6WHOOHQ6LHVLFKYRUZHFNHQ
6LH9HUWUDXHQLQ,KUH.RP
SHWHQ]DOV.XUVOHLWHUXQG
IRUGHUQ6LHGLH.XUVWHLOQHK
PHUDXIVLFKYRU]XVWHOOHQ
XQGLKUH(UZDUWXQJHQDQ
GHQ.XUV]XGHILQLHUHQ
(LQVWLHJ
*XWHQ0RUJHQ:LOONRPPHQ
]X.XUV%$EIUDJHQ
YRQ0LFURVRIW64/
6HUYHUPLW+LOIHYRQ
7UDQVDFW64/
,FKKHL‰H
„
1DPH
„
)LUPHQ]XJHK|ULJNHLW
„
7LWHO)XQNWLRQ
„
%HUXIOLFKHU9HUDQWZRUWXQJVEHUHLFK
„
(UIDKUXQJHQPLW'DWHQEDQNHQ
„
(UIDKUXQJHQPLW64/ 6HUYHU
„
(UZDUWXQJHQDQGHQ.XUV
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG****************
6WHOOHQ6LHVLFKYRU
*HEHQ6LHHLQHNXU]HhEHU
VLFKWEHU,KUHQEHUXIOLFKHQ
:HUGHJDQJXP,KUH.RP
SHWHQ]DOV.XUVOHLWHUIU
64/6HUYHU]XXQWHU
VWUHLFKHQ
%LWWHQ6LHGLH.XUVWHLO
QHKPHUVLFKDQKDQGGHU
DXIJHIKUWHQ6WLFKSXQNWH
YRU]XVWHOOHQ
0HWKRGLVFKHU+LQZHLV
1RWLHUHQ6LHZlKUHQGGHU
9RUVWHOOXQJGHU.XUVWHLO
QHKPHUGHUHQ(UZDUWXQJHQ
DQGHQ.XUVDXIHLQHU7DIHO
RGHUHLQHP)OLSFKDUW
(LQIKUXQJ
.XUVXQWHUODJHQ
,QKDOWGLHVHU)ROLH
=HLJHQXQGEHVFKUHLEHQ6LH
GLH.XUVXQWHUODJHQ
(LQVWLHJ
:LUKDEHQDOOHIUGHQ.XUV
HUIRUGHUOLFKHQ8QWHUODJHQ
IU6LH]XVDPPHQJHVWHOOW
$XI,KUHQ7LVFKHQILQGHQ6LH
GLHIROJHQGHQ8QWHUODJHQ
„
1DPHQVVFKLOG
„
$UEHLWVEXFKIU.XUVWHLOQHKPHU
„
.XUVWHLOQHKPHU&'
„
)HHGEDFNERJHQ
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG****************
%HVFKUHLEHQ6LHGHQ,QKDOW
GHV$UEHLWVEXFKHVXQGGHU
.XUVWHLOQHKPHU&'
%LWWHQ6LHGLH.XUVWHLOQHK
PHULKUH1DPHQDXIEHLGH
6HLWHQGHV1DPHQVVFKLOGHV
]XVFKUHLEHQ
:HLVHQ6LHGLH.XUVWHLOQHK
PHUGDUDXIKLQGDVV6LHDP
(QGHGHV.XUVHVHLQHQ
)HHGEDFNERJHQDXVIOOHQ
PVVHQ
7HLOHQ6LHGHQ.XUVWHLOQHK
PHUQGLH$GUHVVHPLWDQ
GLHVLH.RPPHQWDUHVHQGHQ
N|QQHQ
0HWKRGLVFKHU+LQZHLV
)KUHQ6LHYRUZLHGLHDXI
GHU.XUVWHLOQHKPHU&'
EHUHLWJHVWHOOWH:HEVHLWH
JH|IIQHWZLUG'RSSHONOLFNHQ
6LHDXIGHU.XUVOHLWHU&'LP
2UGQHU6WXGHQW&'DXI
'HIDXOWKWP
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.
$QPHUNXQJ 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.
„
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]
(LQIKUXQJ
9RUDXVVHW]XQJHQ
,QKDOWGLHVHU)ROLH
%HQHQQHQXQGEHVFKUHLEHQ
6LHGLH9RUDXVVHW]XQJHQIU
GLHVHQ.XUV
„
(UIDKUXQJLP9HUZHQGHQHLQHV0LFURVRIW:LQGRZV
%HWULHEVV\VWHPV
„
.HQQWQLVVHGHUJUXQGOHJHQGHQ.RQ]HSWHUHODWLRQDOHU
'DWHQEDQNHQ
„
.HQQWQLVGHU5ROOHGHV'DWHQEDQNDGPLQLVWUDWRUV
(LQVWLHJ
)UGLHVHQ.XUVPVVHQ6LH
EHUGLHIROJHQGHQ
.HQQWQLVVHYHUIJHQ
****************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.
(LQIKUXQJ
.XUVEHVFKUHLEXQJ
,QKDOWGLHVHU)ROLH
*HEHQ6LHHLQHhEHUVLFKW
EHUGLHHLQ]HOQHQ8QWHU
ULFKWVHLQKHLWHQXQG/HUQ
]LHOH
(LQVWLHJ
,QGLHVHP.XUVZHUGHQ
IROJHQGH7KHPHQ
EHKDQGHOW
„
8QWHUULFKWVHLQKHLW(LQIKUXQJLQ7UDQVDFW64/
„
8QWHUULFKWVHLQKHLW9HUZHQGHQYRQ7UDQVDFW64/
$EIUDJHWRROV
„
8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ
„
8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQ
YRQ'DWHQ
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG****************
*HEHQ6LHHLQHNXU]H%H
VFKUHLEXQJMHGHU8QWHU
ULFKWVHLQKHLW
*HKHQ6LHEHLGHU%H
VFKUHLEXQJGHUHLQ]HOQHQ
8QWHUULFKWVHLQKHLWHQDXIDOOH
%HUHLFKHHLQGLHGHQ]XYRU
JHlX‰HUWHQ(UZDUWXQJHQ
GHU.XUVWHLOQHKPHU
HQWVSUHFKHQ
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.
(LQIKUXQJ
.XUVEHVFKUHLEXQJ)RUWVHW]XQJ
„
8QWHUULFKWVHLQKHLW9HUNQSIHQYRQPHKUHUHQ7DEHOOHQ
„
8QWHUULFKWVHLQKHLW$UEHLWHQPLW8QWHUDEIUDJHQ
„
8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ
„
8QWHUULFKWVHLQKHLW$EIUDJHQYRQ9ROOWH[WLQGL]HV
****************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.
(LQIKUXQJ
.XUVEHVFKUHLEXQJ)RUWVHW]XQJ
„
8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHU
REMHNWHQ
****************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.
(LQIKUXQJ
$QKlQJH
,QKDOWGLHVHU)ROLH
%HVFKUHLEHQ6LHGLH$Q
KlQJHGLHLQGLHVHP.XUV
YHUZHQGHWZHUGHQ
„
$QKDQJ $)DOOVWXGLHGHUOLEUDU\'DWHQEDQN
(LQVWLHJ
„
$QKDQJ %'DWHQEDQNVFKHPDV
,QGHQ$QKlQJHQGLHVLFK
DP(QGHGHV$UEHLWVEXFKHV
EHILQGHQVLQGZHLWHUH
,QIRUPDWLRQHQHQWKDOWHQGLH
LQGLHVHP.XUVYHUZHQGHW
ZHUGHQ
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG****************
$QKDQJ$)DOOVWXGLHGHUOLEUDU\'DWHQEDQN
Dieser Anhang enthält eine Beschreibung der library-Beispieldatenbank, die in
diesem Kurs verwendet wird.
$QKDQJ%'DWHQEDQNVFKHPDV
Dieser Anhang enthält schematische Diagramme der Datenbanken, die in
diesem Kurs verwendet werden.
(LQIKUXQJ
0LFURVRIW2IILFLDO&XUULFXOXP
,QKDOWGLHVHU)ROLH
%HVFKUHLEHQ6LHGDV
0LFURVRIW2IILFLDO
&XUULFXOXP3URJUDPPXQG
VWHOOHQ6LH,QIRUPDWLRQHQ]X
GHQ&XUULFXOXP3IDGHQ
EHUHLW
(LQVWLHJ
6SUHFKHQZLUNXU]EHUGDV
0LFURVRIW2IILFLDO
&XUULFXOXP3URJUDPP
„
:LQGRZV
%HWULHEVV\VWHPH
„
0LFURVRIW2IILFH
„
0LFURVRIW%DFN2IILFH
6PDOO%XVLQHVV6HUYHU
„
0LFURVRIW64/6HUYHU
„
0LFURVRIW([FKDQJH
„
0LFURVRIW%DFN2IILFH6HUYHU
,QIUDVWUXNWXUXQG/|VXQJHQ
„
0LFURVRIW)URQW3DJH
„
0LFURVRIW6\VWHPV
0DQDJHPHQW6HUYHU
„
.QRZOHGJH0DQDJHPHQW
/|VXQJHQ
****************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.
(LQIKUXQJ
0LFURVRIW&HUWLILHG3URIHVVLRQDO3URJUDPP
,QKDOWGLHVHU)ROLH
,QIRUPLHUHQ6LHGLH.XUV
WHLOQHKPHUEHUGDV
0LFURVRIW&HUWLILHG
3URIHVVLRQDO3URJUDPP
(LQVWLHJ
'DV0LFURVRIW&HUWLILHG
3URIHVVLRQDO3URJUDPP
YHUIJWEHUGLHIROJHQGHQ
=HUWLIL]LHUXQJHQ
„
0LFURVRIW &HUWLILHG6\VWHPV(QJLQHHU0&6(
„
0LFURVRIW&HUWLILHG'DWDEDVH$GPLQLVWUDWRU0&'%$
„
0LFURVRIW&HUWLILHG6ROXWLRQ'HYHORSHU0&6'
„
0LFURVRIW&HUWLILHG3URIHVVLRQDO6LWH%XLOGLQJ
0&36LWH%XLOGLQJ
„
0LFURVRIW&HUWLILHG3URIHVVLRQDO0&3
„
0LFURVRIW&HUWLILHG7UDLQHU0&7
****************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.
(LQIKUXQJ
(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.
=HUWLIL]LHUXQJVDQIRUGHUXQJHQ
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.
:HLWHUH,QIRUPDWLRQHQ 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.
9RUEHUHLWHQDXIHLQH0&33UIXQJ
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/
(LQIKUXQJ
(LQULFKWXQJHQ
,QKDOWGLHVHU)ROLH
,QIRUPLHUHQ6LHGLH.XUV
WHLOQHKPHUEHUGLH|UWOLFKHQ
(LQULFKWXQJHQXQGGLH]X
EHDFKWHQGHQ5HJHOQDXI
GHP6FKXOXQJVJHOlQGH
Kurszeiten
Öffnungszeiten
Telefone
Parkplätze
Nachrichten
Toiletten
Raucherzonen
Kantine
Recycling
(LQVWLHJ
%HYRUZLUPLWGHU6FKXOXQJ
EHJLQQHQP|FKWHLFK6LH
EHUGLH(LQULFKWXQJHQLP
6FKXOXQJVJHElXGH
LQIRUPLHUHQ
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG****************
,QIRUPLHUHQ6LHGLH.XUVWHLO
QHKPHUEHUGLH.XUV]HLWHQ
0DKO]HLWHQgIIQXQJV]HLWHQ
GHV*HElXGHVIUGLH%H
DUEHLWXQJGHUhEXQJVHLQ
KHLWHQ3DUNP|JOLFKNHLWHQ
7RLOHWWHQ5DXFKHU]RQHQ
7HOHIRQHXQG0|JOLFKNHLWHQ
]XUhEHUPLWWOXQJYRQ1DFK
ULFKWHQ
,QIRUPLHUHQ6LHGLH.XUVWHLO
QHKPHUJHJHEHQHQIDOOV
DXFKEHUGDV5HF\FOLQJ
SURJUDPP
(LQIKUXQJ
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.
8QWHUULFKWVHLQKHLW(LQIKUXQJLQ7UDQVDFW64/
LLL
+LQZHLVHIUGHQ.XUVOHLWHU
3UlVHQWDWLRQ
0LQXWHQ
hEXQJVHLQKHLW
0LQXWHQ
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.
8QWHUODJHQXQG9RUEHUHLWXQJ
In diesem Abschnitt werden die erforderlichen Unterlagen und vorbereitenden
Aufgaben erläutert, die nötig sind, um diese Unterrichtseinheit zu unterrichten.
(UIRUGHUOLFKH8QWHUODJHQ
Um diese Unterrichtseinheit zu unterrichten, benötigen Sie folgende
Unterlagen:
• Die Microsoft® PowerPoint®-Datei 2316B_01.ppt
9RUEHUHLWHQGH$XIJDEHQ
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.
6WUDWHJLHIUGLH8QWHUULFKWVHLQKHLW
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.
LY
8QWHUULFKWVHLQKHLW(LQIKUXQJLQ7UDQVDFW64/
„
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.
$QSDVVXQJVLQIRUPDWLRQHQ
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.
:LFKWLJ 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.
(LQULFKWHQGHUhEXQJVHLQKHLW
Es gibt keine Anforderungen zum Einrichten der Übungseinheiten, die die
Replikation oder die Anpassung betreffen.
(UJHEQLVVHGHUhEXQJVHLQKHLW
Auf den Kursteilnehmercomputern gibt es keine Konfigurationsänderungen, die
die Replikation oder die Anpassung betreffen.
8QWHUULFKWVHLQKHLW(LQIKUXQJLQ7UDQVDFW64/
hEHUVLFKW
,QKDOWGLHVHU)ROLH
*HEHQ6LHHLQHhEHUVLFKW
EHUGLH7KHPHQXQG/HUQ
]LHOHGLHVHU8QWHUULFKWV
HLQKHLW
(LQVWLHJ
,QGLHVHU8QWHUULFKWVHLQKHLW
OHUQHQ6LH7UDQVDFW64/
NHQQHQ
„
'LH3URJUDPPLHUVSUDFKH7UDQVDFW64/
„
7\SHQYRQ7UDQVDFW64/$QZHLVXQJHQ
„
7UDQVDFW64/6\QWD[HOHPHQWH
****************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.
8QWHUULFKWVHLQKHLW(LQIKUXQJLQ7UDQVDFW64/
'LH3URJUDPPLHUVSUDFKH7UDQVDFW64/
,QKDOWGLHVHU)ROLH
6WHOOHQ6LHGLH7DWVDFKH
KHUDXVGDVV64/6HUYHU
EHUHLQHHLJHQH3URJUDP
PLHUVSUDFKHYHUIJW
(LQVWLHJ
%HL7UDQVDFW64/KDQGHOW
HVVLFKXPHLQH9HUVLRQGHU
64/3URJUDPPLHUVSUDFKH
GLHDXVVFKOLH‰OLFKLQ
64/6HUYHUYHUZHQGHWZLUG
„
,PSOHPHQWLHUXQJGHU(LQJDQJVVWXIH(QWU\/HYHOGHV
$16,64/,626WDQGDUGV
„
.DQQ YRQMHGHPPLWGHU$16,64/(LQJDQJVVWXIH
NRPSDWLEOHQ3URGXNWDXVJHIKUWZHUGHQ
„
(QWKlOW]XVlW]OLFKHHLQ]LJDUWLJH)XQNWLRQDOLWlW
****************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.
8QWHUULFKWVHLQKHLW(LQIKUXQJLQ7UDQVDFW64/
‹ 7\SHQYRQ7UDQVDFW64/$QZHLVXQJHQ
,QKDOWGLHVHU)ROLH
6WHOOHQ6LHGLHJUXQGOHJHQ
GHQ7\SHQYRQ7UDQVDFW
64/$QZHLVXQJHQYRU
„
''/$QZHLVXQJHQ'DWD'HILQLWLRQ/DQJXDJH
(LQVWLHJ
„
'&/$QZHLVXQJHQ'DWD&RQWURO/DQJXDJH
„
'0/$QZHLVXQJHQ'DWD0DQLSXODWLRQ/DQJXDJH
%HLP6FKUHLEHQXQG$XV
IKUHQYRQ7UDQVDFW64/
$QZHLVXQJHQYHUZHQGHQ
6LHHLQLJHGLHVHU7\SHQYRQ
7UDQVDFW64/
$QZHLVXQJHQ
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG****************
0HWKRGLVFKHU+LQZHLV
:HLVHQ6LHGDUDXIKLQGDVV
GHU6FKZHUSXQNWGLHVHV
.XUVHVDXIGHU9HUZHQGXQJ
YRQ'0/$QZHLVXQJHQ
'DWD0DQLSXODWLRQ
/DQJXDJHOLHJW
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.
$QPHUNXQJ In diesem Kurs wird schwerpunktmäßig das Verwenden von
DML-Anweisungen zum Abfragen von Daten in SQL Server behandelt.
8QWHUULFKWVHLQKHLW(LQIKUXQJLQ7UDQVDFW64/
''/$QZHLVXQJHQ
,QKDOWGLHVHU)ROLH
*HEHQ6LHGHQ.XUVWHLO
QHKPHUQHLQH(LQIKUXQJLQ
''/$QZHLVXQJHQ
„
(LQVWLHJ
''/$QZHLVXQJHQGHILQLH
UHQHLQH'DWHQEDQNLQGHP
'DWHQEDQNHQ7DEHOOHQXQG
EHQXW]HUGHILQLHUWH'DWHQ
W\SHQHUVWHOOWZHUGHQ
„
'HILQLHUHQGHU'DWHQEDQNREMHNWH
z
&5($7(REMHFWBQDPH
z
$/7(5REMHFWBQDPH
z
'523REMHFWBQDPH
(QWVSUHFKHQGH%HUHFKWLJXQJHQZHUGHQEHQ|WLJW
86(1RUWKZLQG
86(1RUWKZLQG
&5($7(7$%/(FXVWRPHU
&5($7(7$%/(FXVWRPHU
FXVWBLGLQWFRPSDQ\YDUFKDU
FXVWBLGLQWFRPSDQ\YDUFKDU
FRQWDFWYDUFKDUSKRQHFKDU
FRQWDFWYDUFKDUSKRQHFKDU
*2
*2
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG****************
:HLWHUH,QIRUPDWLRQHQ
:HLWHUH,QIRUPDWLRQHQ]X
''/$QZHLVXQJHQILQGHQ
6LHLP.XUV$
9HUZDOWHQHLQHU0LFURVRIW
64/6HUYHU
'DWHQEDQN
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.
%HLVSLHO
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.
86(1RUWKZLQG
&5($7(7$%/(FXVWRPHU
FXVWBLGLQWFRPSDQ\YDUFKDUFRQWDFWYDUFKDU
SKRQHFKDU
*2
8QWHUULFKWVHLQKHLW(LQIKUXQJLQ7UDQVDFW64/
'&/$QZHLVXQJHQ
,QKDOWGLHVHU)ROLH
*HEHQ6LHGHQ.XUVWHLO
QHKPHUQHLQH(LQIKUXQJLQ
'&/$QZHLVXQJHQ
„
(LQVWLHJ
'&/$QZHLVXQJHQVWHXHUQ
GHQ=XJULIIDXI'DWHQEDQN
REMHNWHXQGDXIGLH
%HUHFKWLJXQJEHVWLPPWH
$QZHLVXQJHQDXV]XIKUHQ
„
6HW]HQRGHUbQGHUQYRQ%HUHFKWLJXQJHQ
z
*5$17
z
'(1<
z
5(92.(
(QWVSUHFKHQGH%HUHFKWLJXQJHQZHUGHQEHQ|WLJW
86(1RUWKZLQG
86(1RUWKZLQG
*5$176(/(&721SURGXFWV72SXEOLF
*5$176(/(&721SURGXFWV72SXEOLF
*2
*2
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG****************
0HWKRGLVFKHU+LQZHLV
:HLWHUH,QIRUPDWLRQHQ]X
'&/$QZHLVXQJHQILQGHQ
6LHLP.XUV$
9HUZDOWHQHLQHU0LFURVRIW
64/6HUYHU
'DWHQEDQN
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.
%HLVSLHO
In diesem Beispiel wird der public-Rolle die Berechtigung erteilt, die
products-Tabelle abzufragen.
86(1RUWKZLQG
*5$176(/(&721SURGXFWV72SXEOLF
*2
8QWHUULFKWVHLQKHLW(LQIKUXQJLQ7UDQVDFW64/
'0/$QZHLVXQJHQ
,QKDOWGLHVHU)ROLH
*HEHQ6LHGHQ.XUVWHLO
QHKPHUQHLQH(LQIKUXQJLQ
'0/$QZHLVXQJHQ
„
%HQXW]HQ6LH'0/$QZHLVXQJHQXP'DWHQ]XlQGHUQ
RGHU,QIRUPDWLRQHQDE]XUXIHQ
z 6(/(&7
z ,16(57
z 83'$7(
z '(/(7(
„
(QWVSUHFKHQGH%HUHFKWLJXQJHQZHUGHQEHQ|WLJW
(LQVWLHJ
'0/$QZHLVXQJHQDUEHLWHQ
PLWGHQ'DWHQLQGHU
'DWHQEDQN
86(1RUWKZLQG
86(1RUWKZLQG
6(/(&7FDWHJRU\LGSURGXFWQDPHSURGXFWLGXQLWSULFH
6(/(&7FDWHJRU\LGSURGXFWQDPHSURGXFWLGXQLWSULFH
)520SURGXFWV
)520SURGXFWV
*2
*2
****************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:
%HLVSLHO
„
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.
86(1RUWKZLQG
6(/(&7FDWHJRU\LGSURGXFWQDPHSURGXFWLGXQLWSULFH
)520SURGXFWV
*2
8QWHUULFKWVHLQKHLW(LQIKUXQJLQ7UDQVDFW64/
‹ 7UDQVDFW64/6\QWD[HOHPHQWH
,QKDOWGLHVHU)ROLH
6WHOOHQ6LHYHUVFKLHGHQH
6\QWD[HOHPHQWHYRQ
7UDQVDFW64/YRU
„
%DWFKDQZHLVXQJHQ
„
6\VWHPIXQNWLRQHQ
(LQVWLHJ
„
.RPPHQWDUH
„
2SHUDWRUHQ
„
%H]HLFKQHU
„
$XVGUFNH
„
'DWHQW\SHQ
„
„
9DULDEOHQ
6SUDFKHOHPHQWH]XU
$EODXIVWHXHUXQJ
„
5HVHUYLHUWH
6FKOVVHOZ|UWHU
'0/$QZHLVXQJHQZHUGHQ
PLW+LOIHHLQHU5HLKHYRQ
7UDQVDFW64/6\QWD[
HOHPHQWHQHUVWHOOW
****************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
8QWHUULFKWVHLQKHLW(LQIKUXQJLQ7UDQVDFW64/
%DWFKDQZHLVXQJHQ
,QKDOWGLHVHU)ROLH
)KUHQ6LHYRUZLH%DWFKHV
YRQ7UDQVDFW64/DXVJH
IKUWZHUGHQ
„
(LQVWLHJ
*2
z
:HOFKHV7RRO6LHDXFK
YHUZHQGHQ6LHPVVHQ
ZLVVHQDXIZHOFKH$UWXQG
:HLVHGHU7UDQVDFW64/
&RGHYHUDUEHLWHWZHUGHQ
VROO
z
„
.HQQ]HLFKQHW%DWFKHVYRQ7UDQVDFW64/$QZHLVXQJHQ
IU7RROVXQG'LHQVWSURJUDPPH
,VWNHLQHZLUNOLFKH7UDQVDFW64/$QZHLVXQJ
(;(&
z
z
)KUWHLQHEHQXW]HUGHILQLHUWH)XQNWLRQHLQH6\VWHP
SUR]HGXUHLQHEHQXW]HUGHILQLHUWHJHVSHLFKHUWH3UR]HGXU
RGHUHLQHHUZHLWHUWHJHVSHLFKHUWH3UR]HGXUGXUFK
6WHXHUWGLH$XVIKUXQJHLQHU=HLFKHQIROJHLQHLQHP
7UDQVDFW64/%DWFK
****************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.
*2
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.
$QPHUNXQJ GO ist keine wirkliche Transact-SQL-Anweisung; der GO-Befehl
wird verwendet, um Batches für Tools und Dienstprogramme zu kennzeichnen.
8QWHUULFKWVHLQKHLW(LQIKUXQJLQ7UDQVDFW64/
(;(&
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.
8QWHUULFKWVHLQKHLW(LQIKUXQJLQ7UDQVDFW64/
.RPPHQWDUH
,QKDOWGLHVHU)ROLH
*HEHQ6LHGHQ.XUVWHLO
QHKPHUQHLQH(LQIKUXQJLQ
GLHDOOJHPHLQH9HUZHQGXQJ
YRQ.RPPHQWDUHQ
(LQVWLHJ
.RPPHQWDUHVLQGQLFKW
DXV]XIKUHQGH=HLFKHQ
IROJHQGLHLQ$QZHLVXQJHQ
SODW]LHUWZHUGHQN|QQHQ
XPGLH$QZHLVXQJ]X
NRPPHQWLHUHQRGHU7HLOH
GDYRQZlKUHQGGHV7HVWHQV
]XGHDNWLYLHUHQ
„
,QOLQH.RPPHQWDUH
Beispiel
Beispiel 11
6(/(&7SURGXFWQDPH
6(/(&7SURGXFWQDPH
XQLWVLQVWRFN
XQLWVLQVWRFN XQLWVRQRUGHU
XQLWVRQRUGHU %HUHFKQHWGDV,QYHQWDU
%HUHFKQHWGDV,QYHQWDU
VXSSOLHU,'
VXSSOLHU,'
)520SURGXFWV
)520SURGXFWV
*2
*2
„
%ORFNNRPPHQWDUH
Beispiel
Beispiel 33
'LHVHV&RGHEHLVSLHOUXIWDOOH=HLOHQGHU
'LHVHV&RGHEHLVSLHOUXIWDOOH=HLOHQGHU
SURGXFWV7DEHOOHDEXQG]HLJWGHQ(LQKHLWVSUHLVGHQ
SURGXFWV7DEHOOHDEXQG]HLJWGHQ(LQKHLWVSUHLVGHQ
(LQKHLWVSUHLVHUK|KWXP3UR]HQWXQGGHQ1DPHQGHV
(LQKHLWVSUHLVHUK|KWXP3UR]HQWXQGGHQ1DPHQGHV
3URGXNWVDQ
3URGXNWVDQ
86(1RUWKZLQG
86(1RUWKZLQG
6(/(&7XQLWSULFHXQLWSULFHSURGXFWQDPH
6(/(&7XQLWSULFHXQLWSULFHSURGXFWQDPH
)520SURGXFWV
)520SURGXFWV
*2
*2
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG****************
0HWKRGLVFKHU+LQZHLV
,QOLQH.RPPHQWDUHDP$Q
IDQJGHU=HLOHN|QQHQEHL
GHU%HKDQGOXQJYRQ3UR
EOHPHQPLW6NULSWVKHOIHQ
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.
,QOLQH.RPPHQWDUH
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.
%HLVSLHO
In diesem Beispiel wird in einem Inline-Kommentar erklärt, welche Art von
Berechnung durchgeführt wird.
86(1RUWKZLQG
6(/(&7SURGXFWQDPH
XQLWVLQVWRFNXQLWVRQRUGHU%HUHFKQHWGDV,QYHQWDU
VXSSOLHULG
)520SURGXFWV
*2
%HLVSLHO
8QWHUULFKWVHLQKHLW(LQIKUXQJLQ7UDQVDFW64/
In diesem Beispiel wird mit einem Inline-Kommentar verhindert, dass ein Teil
einer Anweisung ausgeführt wird.
86(1RUWKZLQG
6(/(&7SURGXFWQDPH
XQLWVLQVWRFNXQLWVRQRUGHU%HUHFKQHWGDV,QYHQWDU
VXSSOLHULG
)520SURGXFWV
*2
%ORFNNRPPHQWDUH
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.
%HLVSLHO
Dieses Beispiel zeigt einen Kommentarheader, der mehrere Zeilen umfasst.
'LHVHV&RGHEHLVSLHOUXIWDOOH=HLOHQGHUSURGXFWV7DEHOOH
DEXQG]HLJWGHQ(LQKHLWVSUHLVGHQ(LQKHLWVSUHLVHUK|KWXP
3UR]HQWXQGGHQ1DPHQGHV3URGXNWVDQ
86(1RUWKZLQG
6(/(&7XQLWSULFHXQLWSULFHSURGXFWQDPH
)520SURGXFWV
*2
$QPHUNXQJ 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.
%HLVSLHO
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.
'(&/$5(#YLQW
6(7#Y :+,/(#Y
%(*,1
6(/(&7#Y #Y
6(/(&7#Y
(1'
8QWHUULFKWVHLQKHLW(LQIKUXQJLQ7UDQVDFW64/
‹ %H]HLFKQHU
,QKDOWGLHVHU)ROLH
6WHOOHQ6LHGLH5HJHOQ]XP
%HQHQQHQYRQ64/6HUYHU
2EMHNWHQ5HJHOQIU
%H]HLFKQHUYRU
„
6WDQGDUGPl‰LJH%H]HLFKQHU
z 'DVHUVWH=HLFKHQPXVVHLQDOSKDEHWLVFKHV=HLFKHQVHLQ
z $QGHUH=HLFKHQN|QQHQDXV%XFKVWDEHQ=DKOHQRGHU
6\PEROHQEHVWHKHQ
z %H]HLFKQHUGLHPLWHLQHP6\PEROEHJLQQHQZHUGHQLQ
EHVRQGHUHQ)lOOHQYHUZHQGHW
„
%HJUHQ]WH%H]HLFKQHU
z :HUGHQ EHQXW]WZHQQ 1DPHQHLQJHEHWWHWH/HHU]HLFKHQ
HQWKDOWHQ
z :HUGHQ EHQXW]WZHQQ UHVHUYLHUWH :|UWHU 7HLOH YRQ1DPHQ
VLQG
z 0VVHQLQ.ODPPHUQ>@ RGHU
GRSSHOWH$QIKUXQJV]HLFKHQ JHVHW]WZHUGHQ
(LQVWLHJ
64/6HUYHUVWHOOWHLQH5HLKH
VWDQGDUGPl‰LJHU%H
QHQQXQJVUHJHOQIU2EMHNW
EH]HLFKQHUEHUHLWVRZLHHLQH
0HWKRGH]XP9HUZHQGHQ
YRQ7UHQQ]HLFKHQIU
%H]HLFKQHUGLHQLFKWGHP
6WDQGDUGHQWVSUHFKHQ
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG****************
0HWKRGLVFKHU+LQZHLV
)KUHQ6LHYRUZLH
64/6HUYHU4XHU\$QDO\]HU
GLH$QZHLVXQJVHOHPHQWH
DXWRPDWLVFKIDUEFRGLHUWXP
UHVHUYLHUWH:|UWHU=HLFKHQ
IROJHQXVZDQ]X]HLJHQ
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.
6WDQGDUGPl‰LJH%H]HLFKQHU
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.
$QPHUNXQJ 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.
8QWHUULFKWVHLQKHLW(LQIKUXQJLQ7UDQVDFW64/
:HLWHUH,QIRUPDWLRQHQ
2EMHNWQDPHQN|QQHQHUVW
VHLWGHUDNWXHOOHQ9HUVLRQ
YRQ64/6HUYHU/HHU
]HLFKHQHQWKDOWHQ
%HJUHQ]WH%H]HLFKQHU
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:
6(/(&7)520>%ODQNV,Q7DEOH1DPH@
$QPHUNXQJ Trennzeichen in Klammern können unabhängig vom Status
der SET QUOTED_IDENTIFIER-Option verwendet werden.
:HLWHUH,QIRUPDWLRQHQ
'LH6WDQGDUGHLQVWHOOXQJLQ
64/6HUYHULVW21
$NWLYLHUHQ6LHMHGRFKGLHVH
(LQVWHOOXQJXP*HQDXLJNHLW
]XJHZlKUOHLVWHQ
„
Bezeichner in Anführungszeichen werden durch doppelte Anführungszeichen ("") begrenzt:
6(/(&7)520%ODQNVLQ7DEOH1DPH
Bezeichner in Anführungszeichen können nur verwendet werden, wenn die
SET QUOTED_IDENTIFIER-Option auf ON festgelegt ist.
8QWHUULFKWVHLQKHLW(LQIKUXQJLQ7UDQVDFW64/
%HQHQQXQJVULFKWOLQLHQIU%H]HLFKQHU
,QKDOWGLHVHU)ROLH
6WHOOHQ6LHHPSIRKOHQH
%HQHQQXQJVULFKWOLQLHQYRU
(LQVWLHJ
1DPHQYRQ'DWHQEDQN
REMHNWHQVROOWHQP|JOLFKVW
NXU]VHLQ
„
9HUZHQGHQ6LHNXU]H1DPHQ
„
9HUZHQGHQ6LHQDFK0|JOLFKNHLWDXVVDJHNUlIWLJH1DPHQ
„
9HUZHQGHQ6LHHLQHNODUHXQGHLQIDFKH%HQHQQXQJV
NRQYHQWLRQ
„
9HUZHQGHQ6LHHLQHQ%H]HLFKQHUGHUGHQ2EMHNWW\S
NHQQ]HLFKQHW
„
z
6LFKWHQ
z
*HVSHLFKHUWH3UR]HGXUHQ
9HUZHQGHQ6LHHLQGHXWLJH2EMHNW XQG%HQXW]HUQDPHQ
z
VDOHV7DEHOOHXQGVDOHV5ROOH
****************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.
8QWHUULFKWVHLQKHLW(LQIKUXQJLQ7UDQVDFW64/
'DWHQW\SHQ
,QKDOWGLHVHU)ROLH
6WHOOHQ6LHJUXQGOHJHQGH
7UDQVDFW64/'DWHQW\SHQ
YRU
„
=DKOHQ
„
64/9DULDQWHQ
(LQVWLHJ
„
'DWXPVDQJDEHQ
„
,PDJHXQG7H[W
„
=HLFKHQ
„
7DEHOOHQ
„
%LQlUH'DWHQW\SHQ
„
&XUVRU
„
(LQGHXWLJH%H]HLFKQHU
*OREDOO\8QLTXH
,GHQWLILHU *8,'
„
%HQXW]HUGHILQLHUW
'DWHQW\SHQVFKUlQNHQGHQ
:HUWHW\SHLQGHULQHLQHU
'DWHQEDQNJHVSHLFKHUW
ZHUGHQNDQQ
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG****************
0HWKRGLVFKHU+LQZHLV
,QGHUOLQNHQ6SDOWHGHU
)ROLHVLQGUHODWLYHLQIDFKH
XQGKlXILJH'DWHQW\SHQXQG
LQGHUUHFKWHQ6SDOWH
NRPSOH[HUH'DWHQW\SHQ
DXIJHIKUW
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:
=DKOHQ
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.
'DWXPVDQJDEHQ
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).
=HLFKHQ
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.
8QWHUULFKWVHLQKHLW(LQIKUXQJLQ7UDQVDFW64/
:HLWHUH,QIRUPDWLRQHQ
'HUURZYHUVLRQ'DWHQW\S
LVWGHU64/6HUYHU
$OLDVIUGHQWLPHVWDPS
'DWHQW\S'HUURZYHUVLRQ
'DWHQW\SKDWGLHJOHLFKH
)XQNWLRQZLHWLPHVWDPS
'LH'HILQLWLRQYRQ
WLPHVWDPSZLUGLQHLQHU
]XNQIWLJHQ9HUVLRQYRQ
64/6HUYHUJHlQGHUWGDPLW
VLHPLWGHU64/
'HILQLWLRQYRQWLPHVWDPS
EHUHLQVWLPPW
%LQlUH'DWHQW\SHQ
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.
(LQGHXWLJH%H]HLFKQHU
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.
64/9DULDQWHQ
Dieser Datentyp kann Werte unterschiedlicher, von SQL Server unterstützter
Datentypen darstellen, mit Ausnahme von text, ntext, image, timestamp und
rowversion.
,PDJHXQG7H[W
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.
7DEHOOHQ
Der Datentyp Tabelle kann nur verwendet werden, um lokale Variablen vom
Typ Tabelle zu definieren oder um Werte einer benutzerdefinierten Funktion
zurückzugeben.
&XUVRU
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.
%HQXW]HUGHILQLHUWH'DWHQW\SHQ
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.
8QWHUULFKWVHLQKHLW(LQIKUXQJLQ7UDQVDFW64/
9DULDEOHQ
,QKDOWGLHVHU)ROLH
'HILQLHUHQ6LHHLQH9DULDEOH
XQGHUOlXWHUQ6LHZLHVLH
YHUZHQGHWZLUG
„
%HQXW]HUGHILQLHUWPLWHLQHU'(&/$5(#$QZHLVXQJ
(LQVWLHJ
„
:HUWH]XZHLVXQJPLWHLQHU6(7 RGHU6(/(&7#$QZHLVXQJ
„
9DULDEOHQKDEHQHLQHQORNDOHQ*OWLJNHLWVEHUHLFK
0LW+LOIHGHU'(&/$5(
$QZHLVXQJZHUGHQORNDOH
9DULDEOHQLQHLQHP%DWFK
RGHUHLQHU3UR]HGXUGHNOD
ULHUWXQGPLWHLQHU6(/(&7
$QZHLVXQJZHUGHQGHQ9D
ULDEOHQ:HUWH]XJHZLHVHQ
86(1RUWKZLQG
86(1RUWKZLQG
'(&/$5(#(PS,'YDUFKDU
'(&/$5(#(PS,'YDUFKDU
#YO1DPH
#YO1DPH FKDU
FKDU
6(7#YOQDPH
6(7#YOQDPH 'RGVZRUWK
'RGVZRUWK
6(/(&7#(PS,'
6(/(&7#(PS,' HPSOR\HHLG
HPSOR\HHLG
)520HPSOR\HHV
)520HPSOR\HHV
:+(5(/DVW1DPH
:+(5(/DVW1DPH #YOQDPH
#YOQDPH
6(/(&7#(PS,'
6(/(&7#(PS,' $6(PSOR\HH,'
$6(PSOR\HH,'
*2
*2
****************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.
$QPHUNXQJ 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.
8QWHUULFKWVHLQKHLW(LQIKUXQJLQ7UDQVDFW64/
6\QWD[
DECLARE {@local_variable data_type} [,...n]
SET @local_variable_name = expression
%HLVSLHO
(UJHEQLV
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.
86(1RUWKZLQG
'(&/$5(#(PS,'YDUFKDU
#YO1DPHFKDU
6(7#YOQDPH 'RGVZRUWK
6(/(&7#(PS,' HPSOR\HHLG
)520HPSOR\HHV
:+(5(/DVW1DPH #YOQDPH
6(/(&7#(PS,'$6(PSOR\HH,'
*2
(PSOR\HH,'
URZVDIIHFWHG
8QWHUULFKWVHLQKHLW(LQIKUXQJLQ7UDQVDFW64/
‹ 6\VWHPIXQNWLRQHQ
,QKDOWGLHVHU)ROLH
*HEHQ6LHHLQHhEHUVLFKW
EHUGLHLQ64/6HUYHU
YHUIJEDUHQ)XQNWLRQHQ
(LQVWLHJ
7UDQVDFW64/VWHOOW]DKO
UHLFKH)XQNWLRQHQEHUHLWGLH
'DWHQ]XUFNJHEHQ
„
$JJUHJDWIXQNWLRQHQ
86(1RUWKZLQG
86(1RUWKZLQG
6(/(&7$9*XQLWSULFH$6$YJ3ULFH
6(/(&7$9*XQLWSULFH$6$YJ3ULFH )520SURGXFWV
)520SURGXFWV
*2
*2
„
6NDODUIXQNWLRQHQ
86(1RUWKZLQG
86(1RUWKZLQG
6(/(&7'%B1$0($6
GDWDEDVH©
6(/(&7'%B1$0($6
GDWDEDVH©
*2
*2
„
5RZVHWIXQNWLRQHQ
6(/(&7
6(/(&7
)52023(148(5<
)52023(148(5<
2UDFOH6YU
6(/(&7QDPHLG)520RZQHUWLWOHV
2UDFOH6YU
6(/(&7QDPHLG)520RZQHUWLWOHV
****************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.
0HWKRGLVFKHU+LQZHLV
(VJLEWZHLWHUH)XQNWLRQV
W\SHQ'LH.XUVWHLOQHKPHU
VROOWHQLQGHU2QOLQH
GRNXPHQWDWLRQXQWHU
)XQNWLRQHQQDFKOHVHQ
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:
$QPHUNXQJ Weitere Informationen dazu finden Sie auf der Registerkarte
Inhalt unter dem Thema „Transact-SQL-Referenz“, „Funktionen“ in der
SQL Server-Onlinedokumentation.
$JJUHJDWIXQNWLRQHQ Verarbeiten die Werte einer ausgewählten Spalte in einem
Resultset, und geben einen einzelnen zusammengefassten Wert zurück.
%HLVSLHO
(UJHEQLV
In diesem Beispiel wird der Durchschnitt der unitprice-Spalte für alle Produkte
in der products-Tabelle ermittelt.
86(1RUWKZLQG
6(/(&7$9*XQLWSULFH$6$YJ3ULFH
)520SURGXFWV
*2
$YJ3ULFH
URZVDIIHFWHG
8QWHUULFKWVHLQKHLW(LQIKUXQJLQ7UDQVDFW64/
6NDODUIXQNWLRQHQ 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.
%HLVSLHO
(UJHEQLV
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.
86(1RUWKZLQG
6(/(&7'%B1$0($6
GDWDEDVH
*2
GDWDEDVH
1RUWKZLQG
URZVDIIHFWHG
8QWHUULFKWVHLQKHLW(LQIKUXQJLQ7UDQVDFW64/
5RZVHWIXQNWLRQHQ Können wie Tabellenverweise in einer Transact-SQLAnweisung verwendet werden.
%HLVSLHO
0HWKRGLVFKHU+LQZHLV
'LHVHV%HLVSLHONDQQQXUPLW
=XJULIIDXIHLQHQ2UDFOH
6HUYHURUGQXQJVJHPl‰
DXVJHIKUWZHUGHQ
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.
6(/(&7
)52023(148(5<2UDFOH6YU
6(/(&7QDPHLG)520RZQHUWLWOHV
*2
8QWHUULFKWVHLQKHLW(LQIKUXQJLQ7UDQVDFW64/
%HLVSLHOHIU6\VWHPIXQNWLRQHQ
,QKDOWGLHVHU)ROLH
)KUHQ6LHHLQLJHGHUDOOJH
PHLQHQ9HUZHQGXQJVP|J
OLFKNHLWHQGHU)XQNWLRQHQ
YRU
(LQVWLHJ
6\VWHPIXQNWLRQHQZHUGHQ
LP$OOJHPHLQHQ]XP.RQ
YHUWLHUHQYRQ'DWXPV
DQJDEHQDXVGHP)RUPDW
HLQHV/DQGHVLQGDVHLQHV
DQGHUHQ/DQGHVYHUZHQGHW
Beispiel 1
6(/(&7
$16,
&219(57YDUFKDU*(7'$7($6
6(/(&7
$16,
&219(57YDUFKDU*(7'$7($6
6W\OH
6W\OH
81,21
81,21
6(/(&7
-DSDQHVH
&219(57YDUFKDU*(7'$7(
6(/(&7
-DSDQHVH
&219(57YDUFKDU*(7'$7(
81,21
81,21
6(/(&7
(XURSHDQ
&219(57YDUFKDU*(7'$7(
6(/(&7
(XURSHDQ
&219(57YDUFKDU*(7'$7(
*2
*2
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****************
0HWKRGLVFKHU+LQZHLV
:HLVHQ6LHDXIGLH)RUPDW
RSWLRQHQLP7KHPD
Ä&219(57³LQGHU
64/6HUYHU2QOLQH
GRNXPHQWDWLRQKLQ
%HLVSLHO
(UJHEQLV
Systemfunktionen werden im Allgemeinen zum Konvertieren von Datumsangaben aus dem Format eines Landes in das eines anderen Landes verwendet.
$QPHUNXQJ 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.
6(/(&7
$16,
&219(57YDUFKDU*(7'$7($66W\OH
81,21
6(/(&7
-DSDQHVH
&219(57YDUFKDU*(7'$7(
81,21
6(/(&7
(XURSHDQ
&219(57YDUFKDU*(7'$7(
*2
6W\OH
(XURSHDQ
-DSDQHVH
$16,
1RY
%HLVSLHO
(UJHEQLV
%HLVSLHO
(UJHEQLV
%HLVSLHO
8QWHUULFKWVHLQKHLW(LQIKUXQJLQ7UDQVDFW64/
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.
6(7'$7()250$7GP\
*2
'(&/$5(#YGDWHGDWHWLPH
6(7#YGDWH 6(/(&7#YGDWH
*2
URZVDIIHFWHG
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.
86(OLEUDU\
6(/(&7XVHUBQDPHDSSBQDPH
*2
GER
0664/4XHU\$QDO\]HU
URZVDIIHFWHG
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.
(UJHEQLV
86(OLEUDU\
6(/(&7&2/8013523(57<2%-(&7B,'
PHPEHU
ILUVWQDPH
$OORZV1XOO
*2
URZVDIIHFWHG
8QWHUULFKWVHLQKHLW(LQIKUXQJLQ7UDQVDFW64/
2SHUDWRUHQ
,QKDOWGLHVHU)ROLH
=HLJHQ6LHZLH2SHUDWRUHQ
]XPbQGHUQYRQ5HVXOWVHWV
YHUZHQGHWZHUGHQN|QQHQ
„
(LQVWLHJ
0LW2SHUDWRUHQN|QQHQ6LH
%HUHFKQXQJHQGXUFKIKUHQ
RGHU:HUWHYHUJOHLFKHQ
„
7\SHQYRQ2SHUDWRUHQ
z
$ULWKPHWLVFK
z
9HUJOHLFK
z
9HUNHWWXQJYRQ=HLFKHQIROJHQ
z
/RJLVFK
5DQJIROJHQHEHQHQYRQ2SHUDWRUHQ
****************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.
7HLOV\QWD[
{constant | column_name | function | (subquery)}
[{arithmetic_operator | string_operator |
AND | OR | NOT}
{constant | column_name | function | (subquery)}…]
7\SHQYRQ2SHUDWRUHQ
SQL Server unterstützt vier Typen von Operatoren: arithmetische Operatoren,
Vergleichsoperatoren, Operatoren für die Verkettung von Zeichenfolgen und
logische Operatoren.
0HWKRGLVFKHU+LQZHLV
7UDQVDFW64/XQWHUVWW]W
DXFKELWZHLVH2SHUDWRUHQ
6LHZHUGHQKLHUQLFKW
EHKDQGHOWGDVLHQXUVHKU
VHOWHQYHUZHQGHWZHUGHQ
$ULWKPHWLVFK
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.
8QWHUULFKWVHLQKHLW(LQIKUXQJLQ7UDQVDFW64/
9HUJOHLFK
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
9HUNHWWXQJYRQ=HLFKHQIROJHQ
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.
/RJLVFK
Die logischen Operatoren AND, OR und NOT verbinden Suchbedingungen in
WHERE-Klauseln.
0HWKRGLVFKHU+LQZHLV
:HLVHQ6LHGDUDXIKLQGDVV
VLFKGLH5DQJIROJHQHEHQHQ
ORJLVFKHU2SHUDWRUHQLQ
64/6HUYHUYRQDQGHUHQ
3URJUDPPLHUVSUDFKHQ
XQWHUVFKHLGHQ
5DQJIROJHQHEHQHQYRQ2SHUDWRUHQ
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.
$QPHUNXQJ Die Rangfolgenebenen logischer Operatoren in SQL Server
unterscheiden sich von anderen Programmiersprachen.
8QWHUULFKWVHLQKHLW(LQIKUXQJLQ7UDQVDFW64/
$XVGUFNH
,QKDOWGLHVHU)ROLH
*HEHQ6LHGHQ.XUVWHLO
QHKPHUQHLQH(LQIKUXQJLQ
$XVGUFNH
„
.RPELQDWLRQDXV6\PEROHQXQG2SHUDWRUHQ
(LQVWLHJ
„
$XVZHUWXQJ]XHLQHPHLQ]HOQHQ6NDODUZHUW
„
'HU'DWHQW\SGHV(UJHEQLVVHVKlQJWYRQGHQ(OHPHQWHQ
LP$XVGUXFNDE
$XVGUFNHVLQGHLQH.RPEL
QDWLRQDXV6\PEROHQXQG
2SHUDWRUHQGLH]XHLQHP
HLQ]HOQHQ'DWHQZHUW
DXVJHZHUWHWZHUGHQ
86(1RUWKZLQG
86(1RUWKZLQG
6(/(&72UGHU,'3URGXFW,'
6(/(&72UGHU,'3URGXFW,'
8QLW3ULFH
8QLW3ULFH 4XDQWLW\DV([WHQGHG$PRXQW
4XDQWLW\DV([WHQGHG$PRXQW
)520>2UGHU'HWDLOV@
)520>2UGHU'HWDLOV@
:+(5(8QLW3ULFH
:+(5(8QLW3ULFH 4XDQWLW\!
4XDQWLW\!
*2
*2
****************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.
%HLVSLHO
(UJHEQLV
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.
86(1RUWKZLQG
6(/(&72UGHU,'3URGXFW,'
8QLW3ULFH4XDQWLW\DV([WHQGHG$PRXQW
)520>2UGHU'HWDLOV@
:+(5(8QLW3ULFH4XDQWLW\!
*2
2UGHU,'
3URGXFW,'
([WHQGHG$PRXQW
URZVDIIHFWHG
8QWHUULFKWVHLQKHLW(LQIKUXQJLQ7UDQVDFW64/
6SUDFKHOHPHQWH]XU$EODXIVWHXHUXQJ
,QKDOWGLHVHU)ROLH
6WHOOHQ6LHGLH6SUDFK
HOHPHQWHYRQ7UDQVDFW64/
YRUGLHGLH9HUDUEHLWXQJ
YRQ$QZHLVXQJHQVWHXHUQ
Beispiel
Beispiel 22
„
(LQVWLHJ
7UDQVDFW64/XQWHUVWW]W
6SUDFKHOHPHQWHGLHGHQ
$EODXIGHU/RJLNLQ
$QZHLVXQJHQVWHXHUQ
„
$QZHLVXQJVHEHQH
z
%(*,1«(1'%O|FNH
z
,)«(/6(%O|FNH
z
:+,/(.RQVWUXNWH
=HLOHQHEHQH
z
&$6()XQNWLRQ
'(&/$5(#QWLQ\LQW
'(&/$5(#QWLQ\LQW
6(7#Q
6(7#Q ,)#Q%(7:((1DQG
,)#Q%(7:((1DQG
%(*,1
%(*,1
:+,/(#Q!
:+,/(#Q!
%(*,1
%(*,1
6(/(&7#Q$6
1XPEHU
6(/(&7#Q$6
1XPEHU
&$6(
&$6(
:+(1#Q
:+(1#Q 7+(1
(9(1
7+(1
(9(1
(/6(
2''
(/6(
2''
(1'$6
7\SH
(1'$6
7\SH
6(7#Q
6(7#Q #Q
#Q (1'
(1'
(1'
(1'
(/6(
(/6(
35,17
.HLQH$QDO\VH©
35,17
.HLQH$QDO\VH©
*2
*2
****************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.
$QZHLVXQJVHEHQH
Mit den folgenden Sprachelementen können Sie den Ablauf der Logik innerhalb eines Skripts steuern:
%(*,1ž(1'%O|FNH Diese Elemente schließen eine Reihe von
Transact-SQL-Anweisungen ein, sodass sie als Einheit behandelt werden.
,)ž(/6(%O|FNH 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.
:+,/(.RQVWUXNWH 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.
7LSS Rücken Sie für eine bessere Lesbarkeit die Transact-SQL-Anweisungen
innerhalb eines Blockes zur Ablaufsteuerung ein.
8QWHUULFKWVHLQKHLW(LQIKUXQJLQ7UDQVDFW64/
%HLVSLHO
In diesem Beispiel wird ermittelt, ob für einen Kunden noch Bestellungen offen
sind, bevor dieser Kunde aus der Kundenliste gelöscht wird.
86(1RUWKZLQG
,)(;,6766(/(&7)520RUGHUV
:+(5(FXVWRPHU,' IUDQN
35,17
.XQGHNDQQQLFKWJHO|VFKWZHUGHQ
(/6(
%(*,1
'(/(7(FXVWRPHUV:+(5(FXVWRPHU,' IUDQN
35,17
.XQGHJHO|VFKW
(1'
*2
=HLOHQHEHQH
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.
6\QWD[
CASE expression
{WHEN expression THEN result} [,…n]
[ELSE result]
END
%HLVSLHO
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.
0HWKRGLVFKHU+LQZHLV
:HLVHQ6LHGDUDXIKLQGDVV
GXUFKGHQLQ%HLVSLHO
YHUZHQGHWHQ(LQ]XJGHV
%ORFNHVGLH/HVEDUNHLW
YHUEHVVHUWZLUG
'(&/$5( #QWLQ\LQW
6(7 #Q ,)#Q%(7:((1DQG
%(*,1
:+,/(#Q!
%(*,1
6(/(&7#Q$6
1XPEHU
&$6(
:+(1#Q 7+(1
2''
(/6(
(9(1
(1'$6
7\SH
6(7#Q #Q
(1'
(1'
(/6(
35,17
.HLQH$QDO\VH
*2
(UJHEQLV
8QWHUULFKWVHLQKHLW(LQIKUXQJLQ7UDQVDFW64/
1XPEHU
7\SH
URZVDIIHFWHG
1XPEHU
(9(1
7\SH
URZVDIIHFWHG
1XPEHU
2''
7\SH
URZVDIIHFWHG
1XPEHU
(9(1
7\SH
URZVDIIHFWHG
1XPEHU
2''
7\SH
URZVDIIHFWHG
(9(1
8QWHUULFKWVHLQKHLW(LQIKUXQJLQ7UDQVDFW64/
5HVHUYLHUWH6FKOVVHOZ|UWHU
,QKDOWGLHVHU)ROLH
0DFKHQ6LHGLH.XUVWHLO
QHKPHUPLWGHP.RQ]HSW
UHVHUYLHUWHU6FKOVVHOZ|UWHU
YHUWUDXW
„
(LQVWLHJ
64/6HUYHUUHVHUYLHUW
EHVWLPPWH6FKOVVHOZ|UWHU
IUGLH9HUZHQGXQJGXUFK
GDV6\VWHPYHUPHLGHQ6LH
HVGLHVH6FKOVVHOZ|UWHU
IUGLH1DPHQYRQ
%H]HLFKQHUQ]XYHUZHQGHQ
„
%H]HLFKQHUQDPHQGLHHLQHVSH]LHOOH%HGHXWXQJKDEHQ
z
7UDQVDFW64/6FKOVVHOZ|UWHU
z
$16,64/6FKOVVHOZ|UWHU
z
2'%&UHVHUYLHUWH6FKOVVHOZ|UWHU
9HUZHQGHQ6LHNHLQHUHVHUYLHUWHQ6FKOVVHOZ|UWHUIU
%H]HLFKQHUQDPHQ
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG****************
0HWKRGLVFKHU+LQZHLV
=HLJHQ6LHGLHHUZHLWHUH
/LVWHYRQ6FKOVVHOZ|UWHUQ
DQGLHLQGHU64/6HUYHU
2QOLQHGRNXPHQWDWLRQ]X
ILQGHQLVW
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.
$FKWXQJ 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.
8QWHUULFKWVHLQKHLW(LQIKUXQJLQ7UDQVDFW64/
hEXQJVHLQKHLW$9HUZHQGHQGHU64/6HUYHU
2QOLQHGRNXPHQWDWLRQ
,QKDOWGLHVHU)ROLH
*HEHQ6LHHLQH(LQIKUXQJ
LQGLHhEXQJVHLQKHLW
(LQVWLHJ
,QGLHVHUhEXQJVHLQKHLWYHU
ZHQGHQ6LHGLH64/6HUYHU
2QOLQHGRNXPHQWDWLRQXP
,QIRUPDWLRQHQ]X
64/6HUYHUDE]XUXIHQ
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG****************
(UOlXWHUQ6LHGLH/HUQ]LHOH
GHUhEXQJVHLQKHLW
/HUQ]LHOH
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.
9RUDXVVHW]XQJHQ
Keine
(LQULFKWHQGHUhEXQJVHLQKHLW
Nicht erforderlich.
:HLWHUH,QIRUPDWLRQHQ
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.
8QWHUULFKWVHLQKHLW(LQIKUXQJLQ7UDQVDFW64/
6]HQDULR
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
9HUDQVFKODJWH=HLWIUGLHhEXQJVHLQKHLW0LQXWHQ
8QWHUULFKWVHLQKHLW(LQIKUXQJLQ7UDQVDFW64/
hEXQJ
9HUZHQGHQGHU64/6HUYHU2QOLQHGRNXPHQWDWLRQ
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.
$QPHUNXQJ 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.
8QWHUULFKWVHLQKHLW(LQIKUXQJLQ7UDQVDFW64/
Ç 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.
$QPHUNXQJ 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.
8QWHUULFKWVHLQKHLW(LQIKUXQJLQ7UDQVDFW64/
/HUQ]LHONRQWUROOH
,QKDOWGLHVHU)ROLH
9HUWLHIHQ6LHGLH/HUQ]LHOH
GLHVHU8QWHUULFKWVHLQKHLW
LQGHP6LHGLH.HUQSXQNWH
ZLHGHUKROHQ
(LQVWLHJ
'LH)UDJHQ]XU/HUQ]LHO
NRQWUROOHEH]LHKHQVLFKDXI
HLQLJHGHU6FKOVVHONRQ
]HSWHGLH,QKDOWGLHVHU
8QWHUULFKWVHLQKHLWVLQG
„
'LH3URJUDPPLHUVSUDFKH7UDQVDFW64/
„
7\SHQYRQ7UDQVDFW64/$QZHLVXQJHQ
„
7UDQVDFW64/6\QWD[HOHPHQWH
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG****************
*HKHQ6LHDQKDQGGLHVHU
)UDJHQGLH7KHPHQGHU
8QWHUULFKWVHLQKHLWGXUFK
.OlUHQ6LHDQGHUHRIIHQH
)UDJHQGHU.XUVWHLOQHKPHU
EHYRU6LHIRUWIDKUHQ
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.
8QWHUULFKWVHLQKHLW(LQIKUXQJLQ7UDQVDFW64/
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
9
Empfohlene Methoden
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.
8QWHUULFKWVHLQKHLW9HUZHQGHQYRQ7UDQVDFW64/$EIUDJHWRROV
LLL
+LQZHLVHIUGHQ.XUVOHLWHU
3UlVHQWDWLRQ
0LQXWHQ
hEXQJVHLQKHLW
0LQXWHQ
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.
8QWHUODJHQXQG9RUEHUHLWXQJ
In diesem Abschnitt werden die erforderlichen Unterlagen und vorbereitenden
Aufgaben erläutert, die nötig sind, um diese Unterrichtseinheit zu unterrichten.
(UIRUGHUOLFKH8QWHUODJHQ
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.
9RUEHUHLWHQGH$XIJDEHQ
Zur Vorbereitung dieser Unterrichtseinheit gehen Sie folgendermaßen vor:
„
Lesen Sie alle Unterlagen für diese Unterrichtseinheit.
„
Arbeiten Sie die Übungseinheit durch.
LY
8QWHUULFKWVHLQKHLW9HUZHQGHQYRQ7UDQVDFW64/$EIUDJHWRROV
6WUDWHJLHIUGLH8QWHUULFKWVHLQKHLW
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.
8QWHUULFKWVHLQKHLW9HUZHQGHQYRQ7UDQVDFW64/$EIUDJHWRROV
Y
$QSDVVXQJVLQIRUPDWLRQHQ
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.
:LFKWLJ 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.
(LQULFKWHQGHUhEXQJVHLQKHLW
Es gibt keine Anforderungen zum Einrichten der Übungseinheit, die die Replikation oder die Anpassung betreffen.
(UJHEQLVVHGHUhEXQJVHLQKHLW
Auf den Kursteilnehmercomputern gibt es keine Konfigurationsänderungen, die
die Replikation oder die Anpassung betreffen.
YL
8QWHUULFKWVHLQKHLW9HUZHQGHQYRQ7UDQVDFW64/$EIUDJHWRROV
This page is intentionally left blank.
8QWHUULFKWVHLQKHLW9HUZHQGHQYRQ7UDQVDFW64/$EIUDJHWRROV
hEHUVLFKW
,QKDOWGLHVHU)ROLH
*HEHQ6LHHLQHhEHUVLFKW
EHUGLH7KHPHQXQG/HUQ
]LHOHGLHVHU8QWHUULFKWV
HLQKHLW
(LQVWLHJ
,QGLHVHU8QWHUULFKWVHLQKHLW
OHUQHQ6LHHLQLJH$EIUDJH
WRROVNHQQHQGLH
64/6HUYHU]XP$XVIKUHQ
YRQ7UDQVDFW64/6NULSWV
EHUHLWVWHOOW
„
64/4XHU\$QDO\]HU
„
9HUZHQGHQGHV2EMHNWNDWDORJVLQ64/4XHU\ $QDO\]HU
„
9HUZHQGHQYRQ9RUODJHQLQ64/4XHU\ $QDO\]HU
„
9HUZHQGHQGHV'LHQVWSURJUDPPV µRVTO§
„
$XVIKUHQYRQ 7UDQVDFW64/$QZHLVXQJHQ
****************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.
8QWHUULFKWVHLQKHLW9HUZHQGHQYRQ7UDQVDFW64/$EIUDJHWRROV
64/4XHU\$QDO\]HU
,QKDOWGLHVHU)ROLH
*HEHQ6LHHLQH(LQIKUXQJ
LQ64/4XHU\$QDO\]HU
(LQVWLHJ
0LW64/4XHU\$QDO\]HULQ
64/6HUYHUN|QQHQ
$EIUDJHDQZHLVXQJHQXQG
(UJHEQLVVHJUDILVFKDQJH
]HLJWZHUGHQ
„
(GLWRUIUGLHIUHLH7H[WHLQJDEH
„
)DUELJH.HQQ]HLFKQXQJ YRQ7UDQVDFW64/6\QWD[
„
0HKUHUH $EIUDJHIHQVWHU PLW5DVWHU RGHU7H[WDXVJDEH
„
$XVIKUXQJYRQ7HLOVNULSWV
„
$EIUDJHDXVIKUXQJVLQIRUPDWLRQHQ
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG****************
0HWKRGLVFKHU+LQZHLV
)KUHQ6LH64/4XHU\
$QDO\]HUYRU=HLJHQ6LH
GHQ.XUVWHLOQHKPHUQGLH
*UXQGHOHPHQWHGHV64/
4XHU\$QDO\]HU)HQVWHUV
GLHGUHL$UWHQGHU$EIUDJH
DXVIKUXQJGLHIDUELJH
.HQQ]HLFKQXQJGHU6\QWD[
XQGGDVgIIQHQXQG
6SHLFKHUQHLQHV6NULSWV
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.
8QWHUULFKWVHLQKHLW9HUZHQGHQYRQ7UDQVDFW64/$EIUDJHWRROV
9HUZHQGHQGHV2EMHNWNDWDORJVLQ64/4XHU\$QDO\]HU
,QKDOWGLHVHU)ROLH
*HEHQ6LHHLQH(LQIKUXQJ
LQGHQ2EMHNWNDWDORJLQ64/
4XHU\$QDO\]HU
„
'HU2EMHNWNDWDORJHUP|JOLFKWGDV1DYLJLHUHQ LQGHU
%DXPDQVLFKWGHU2EMHNWHLQHLQHU'DWHQEDQN
„
0LW+LOIHGHV2EMHNWNDWDORJVN|QQHQ6LH)ROJHQGHVWXQ
(LQVWLHJ
0LWGHP2EMHNWNDWDORJLQ
64/4XHU\$QDO\]HUN|Q
QHQ6LHLQGHU%DXPDQVLFKW
GHU2EMHNWHLQHLQHU'DWHQ
EDQNQDYLJLHUHQXQGHLQHQ
'ULOOGRZQDXIHLQEHVWLPP
WHV2EMHNWDXVIKUHQ
z
(UVWHOOHQYRQ6NULSWVIU2EMHNWH
z
$XVIKUHQJHVSHLFKHUWHU3UR]HGXUHQ
z
gIIQHQYRQ7DEHOOHQ
z
bQGHUQYRQ2EMHNWHQLQGHU'DWHQEDQN
z
9HUZHQGHQYRQ7UDQVDFW64/9RUODJHQ
****************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.
8QWHUULFKWVHLQKHLW9HUZHQGHQYRQ7UDQVDFW64/$EIUDJHWRROV
„
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.
8QWHUULFKWVHLQKHLW9HUZHQGHQYRQ7UDQVDFW64/$EIUDJHWRROV
9HUZHQGHQYRQ9RUODJHQLQ64/4XHU\$QDO\]HU
,QKDOWGLHVHU)ROLH
%HVFKUHLEHQ6LHZLH9RU
ODJHQLQ64/4XHU\
$QDO\]HUYHUZHQGHWZHUGHQ
„
(LQVWLHJ
9RUODJHQ
z
64/4XHU\$QDO\]HU
VFKOLH‰W9RUODJHQHLQGLH
6LHDOV$XVJDQJVSXQNWEHLP
(UVWHOOHQYRQ2EMHNWHQLQ
HLQHU'DWHQEDQNYHUZHQGHQ
N|QQHQ
z
„
6LQG$XVJDQJVSXQNWHEHLP(UVWHOOHQYRQ2EMHNWHQLQ
HLQHU'DWHQEDQN
(QWKDOWHQ3DUDPHWHUGLHGDV$QSDVVHQYRQ6NULSWV
XQWHUVWW]HQ
)RUPDWIU GLH'HILQLWLRQHQ GHU 9RUODJHQSDUDPHWHU
3DUDPHWHUQDPH'DWHQW\S:HUW!
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG****************
0HWKRGLVFKHU+LQZHLV
%HVFKUHLEHQ6LHGHQ=ZHFN
XQGGLH9HUZHQGXQJGHU
9RUODJHQGLH64/4XHU\
$QDO\]HUEHUHLWVWHOOW
)KUHQ6LHNXU]YRUZLHGHU
=XJULIIDXIGLH9RUODJHQ
HUIROJWXQG]HLJHQ6LHGLH
$UEHLWVZHLVHGHUJUDILVFKHQ
%HQXW]HUREHUIOlFKH
9HUZHLVHQ6LHGLH.XUVWHLO
QHKPHUIUZHLWHUH,QIRUPD
WLRQHQDXIGLH64/6HUYHU
2QOLQHGRNXPHQWDWLRQ
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:
3DUDPHWHUQDPH'DWHQW\S:HUW!
Die folgende Tabelle beschreibt das Format und die Definition der Vorlagenparameter:
Format
Definition des Vorlagenparameters
<Parametername>
Name des Skriptparameters.
<Datentyp>
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.
8QWHUULFKWVHLQKHLW9HUZHQGHQYRQ7UDQVDFW64/$EIUDJHWRROV
9HUZHQGHQGHV'LHQVWSURJUDPPVµRVTO§
,QKDOWGLHVHU)ROLH
*HEHQ6LHHLQH(LQIKUXQJ
LQGDV'LHQVWSURJUDPP
RVTO
„
6WDUWHQGHV %HIHKOV]HLOHQGLHQVWSURJUDPPVµRVTO§
(LQVWLHJ
„
9HUZHQGHQGHVLQWHUDNWLYHQ0RGXV
„
9HUZHQGHQGHV6NULSWDXVIKUXQJVPRGXV
„
9HUZHQGHQYRQHUZHLWHUWHQ RVTO6NULSWEHIHKOHQ
'DV'LHQVWSURJUDPPRVTO
LVWHLQ%HIHKOV]HLOHQGLHQVW
SURJUDPP]XP$EIUDJHQ
YRQ64/6HUYHU
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG****************
:HLWHUH,QIRUPDWLRQHQ
'DV'LHQVWSURJUDPPLVTO
ZLUGLQGLHVHP.XUVQLFKW
EHKDQGHOWGDHV'%/LEUDU\
IUGHQ'DWHQDXVWDXVFKPLW
GHP6HUYHUYHUZHQGHWXQG
8QLFRGH'DWHQW\SHQQLFKW
XQWHUVWW]W
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).
6WDUWHQGHV%HIHKOV]HLOHQGLHQVWSURJUDPPVµRVTO§
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.
9HUZHQGHQGHVLQWHUDNWLYHQ0RGXV
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.
8QWHUULFKWVHLQKHLW9HUZHQGHQYRQ7UDQVDFW64/$EIUDJHWRROV
9HUZHQGHQGHV6NULSWDXVIKUXQJVPRGXV
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.
7HLOV\QWD[
osql [-S Server] [-E] [-U Benutzername] [-P Kennwort]
[-i Eingabedatei] [-o Ausgabedatei] [-?]
$QPHUNXQJ Bei den Parametern in osql-Anweisungen wird zwischen Großund Kleinschreibung unterschieden.
0HWKRGLVFKHU+LQZHLV
:HLVHQ6LHGDUDXIKLQGDVV
$UJXPHQWHPLWHLQHP
*HGDQNHQVWULFKRGHU
HLQHP6FKUlJVWULFK
EHJLQQHQN|QQHQ
9HUZHLVHQ6LHGLH.XUVWHLO
QHKPHUIUZHLWHUH,QIRUPD
WLRQHQDXIGLH64/6HUYHU
2QOLQHGRNXPHQWDWLRQ6XFK
EHJULIIÄRVTO'LHQVW
SURJUDPP³
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.
8QWHUULFKWVHLQKHLW9HUZHQGHQYRQ7UDQVDFW64/$EIUDJHWRROV
9HUZHQGHQYRQHUZHLWHUWHQRVTO6NULSWEHIHKOHQ
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.
8QWHUULFKWVHLQKHLW9HUZHQGHQYRQ7UDQVDFW64/$EIUDJHWRROV
‹ $XVIKUHQYRQ7UDQVDFW64/$QZHLVXQJHQ
,QKDOWGLHVHU)ROLH
*HEHQ6LHHLQHhEHUVLFKW
EHUGLH$UWHQGHU$XV
IKUXQJYRQ7UDQVDFW64/
$QZHLVXQJHQ
(LQVWLHJ
7UDQVDFW64/$QZHLVXQJHQ
N|QQHQDXIYHUVFKLHGHQH
$UWHQDXVJHIKUWZHUGHQ
„
'\QDPLVFKHV(UVWHOOHQYRQ$QZHLVXQJHQ
„
9HUZHQGHQYRQ%DWFKHV
„
9HUZHQGHQYRQ6NULSWV
****************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.
8QWHUULFKWVHLQKHLW9HUZHQGHQYRQ7UDQVDFW64/$EIUDJHWRROV
'\QDPLVFKHV(UVWHOOHQYRQ$QZHLVXQJHQ
,QKDOWGLHVHU)ROLH
(UOlXWHUQ6LHGHQ.XUVWHLO
QHKPHUQGLHG\QDPLVFKH
$XVIKUXQJYRQ$QZHL
VXQJHQ
„
9HUZHQGXQJYRQ(;(&87($QZHLVXQJPLW=HLFKHQ
IROJHQOLWHUDOHQ XQG9DULDEOHQ
(LQVWLHJ
„
9HUZHQGXQJZHQQGHU:HUWGHU9DULDEOHQ]XU$XV
IKUXQJV]HLWGHU$QZHLVXQJ]XJHZLHVHQZHUGHQVROO
$QZHLVXQJHQN|QQHQG\QD
PLVFKHUVWHOOWZHUGHQ
VRGDVVVLHJOHLFK]HLWLJPLW
GHU$XVIKUXQJHLQHV
6NULSWVHUVWHOOWZHUGHQ
Beispiel
Beispiel 11
86(OLEUDU\
86(OLEUDU\
'(&/$5(#GEQDPHYDUFKDU#WEOQDPHYDUFKDU
'(&/$5(#GEQDPHYDUFKDU#WEOQDPHYDUFKDU
6(7#GEQDPH
6(7#GEQDPH 1RUWKZLQG
1RUWKZLQG
6(7#WEOQDPH
6(7#WEOQDPH SURGXFWV
SURGXFWV
(;(&87(
(;(&87(
86(
#GEQDPH
6(/(&7)520ª#WEOQDPH
86(
#GEQDPH
6(/(&7)520ª#WEOQDPH
*2
*2
****************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.
6\QWD[
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.
%HLVSLHO
8QWHUULFKWVHLQKHLW9HUZHQGHQYRQ7UDQVDFW64/$EIUDJHWRROV
„
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.
(UJHEQLV
86(OLEUDU\
'(&/$5(#GEQDPHYDUFKDU#WDEOHQDPHYDUFKDU
6(7#GEQDPH 1RUWKZLQG
6(7#WDEOHQDPH 3URGXFWV
(;(&87(
86(
#GEQDPH
6(/(&73URGXFW1DPH)520
#WDEOHQDPH
*2
3URGXFW1DPH
&KDL
&KDQJ
$QLVHHG6\UXS
%HLVSLHO
(UJHEQLV
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.
86(1RUWKZLQG
(;(&87(
6(712&281721
6(/(&7/DVW1DPH5HSRUWV7R)520
(PSOR\HHV:+(5(5HSRUWV7R,618//
*2
/DVW1DPH
5HSRUWV7R
)XOOHU
18//
8QWHUULFKWVHLQKHLW9HUZHQGHQYRQ7UDQVDFW64/$EIUDJHWRROV
9HUZHQGHQYRQ%DWFKHV
,QKDOWGLHVHU)ROLH
(UOlXWHUQ6LHGHQ.XUVWHLO
QHKPHUQGLH9HUZHQGXQJ
YRQ%DWFKHV
(LQVWLHJ
%HLHLQHP%DWFKKDQGHOWHV
VLFKXPHLQH*UXSSHYRQ
7UDQVDFW64/$QZHLVXQ
JHQGLHJHPHLQVDPEHU
JHEHQXQGDOV*UXSSH
DXVJHIKUWZHUGHQ
„
(LQHRGHUPHKUHUH 7UDQVDFW64/$QZHLVXQJHQZHUGHQ
]XVDPPHQEHUJHEHQ
„
'HILQLHUHQHLQHV%DWFKHVPLW+LOIHGHU*2$QZHLVXQJ
„
%DWFKYHUDUEHLWXQJEHL64/ 6HUYHU
„
$QZHLVXQJHQGLHQLFKWLPVHOEHQ%DWFKYHUZHQGHW
ZHUGHQN|QQHQ
z
&5($7(352&('85(
z
&5($7(9,(:
z
&5($7(75,**(5
&5($7(58/( $6
z
&5($7('()$8/7
z
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG****************
Eine oder mehrere Anweisungen können auch in einem Batch übergeben
werden.
(LQHRGHUPHKUHUH7UDQVDFW64/$QZHLVXQJHQZHUGHQ]XVDPPHQ
EHUJHEHQ
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.
'HILQLHUHQHLQHV%DWFKHVPLW+LOIHGHU*2$QZHLVXQJ
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.
%DWFKYHUDUEHLWXQJEHL64/6HUYHU
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.
$QPHUNXQJ 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.
8QWHUULFKWVHLQKHLW9HUZHQGHQYRQ7UDQVDFW64/$EIUDJHWRROV
$QZHLVXQJHQGLHQLFKWLPVHOEHQ%DWFKYHUZHQGHWZHUGHQN|QQHQ
0HWKRGLVFKHU+LQZHLV
%HVFKUHLEHQ6LHGLH%HL
VSLHOHXQGYHUJOHLFKHQ6LH
VLHPLWHLQDQGHU
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:
%HLVSLHO
%HLVSLHO
„
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.
&5($7('$7$%$6(
&5($7(7$%/(
&5($7(9,(:
&5($7(9,(:
*2
In diesem Beispiel sind die in Beispiel 1 verwendeten Anweisungen so zu
Batches gruppiert, dass sie korrekt ausgeführt werden.
&5($7('$7$%$6(
&5($7(7$%/(
*2
&5($7(9,(:
*2
&5($7(9,(:
*2
8QWHUULFKWVHLQKHLW9HUZHQGHQYRQ7UDQVDFW64/$EIUDJHWRROV
9HUZHQGHQYRQ6NULSWV
,QKDOWGLHVHU)ROLH
(UOlXWHUQ6LHGLH9HUZHQ
GXQJYRQ6NULSWV]XP$XV
IKUHQYRQ7UDQVDFW64/
$QZHLVXQJHQ
(LQVWLHJ
,QGHQPHLVWHQ)lOOHQZHU
GHQ6NULSWV]XP$XVIKUHQ
YRQ7UDQVDFW64/$QZHL
VXQJHQYHUZHQGHW
„
(LQ6NULSW LVWHLQHRGHUPHKUHUH 7UDQVDFW64/$QZHLVXQJ
GLHDOV 'DWHLPLWGHU'DWHLQDPHQHUZHLWHUXQJ64/
JHVSHLFKHUWZLUG
„
6NULSWV
z
(QWKDOWHQJHVSHLFKHUWH $QZHLVXQJHQ
z
.|QQHQPLW MHGHP EHOLHELJHQ7H[W(GLWRUHUVWHOOWZHUGHQ
z
z
.|QQHQ'DWHQEDQNREMHNWH RGHU $XVIKUXQJVDQZHLVXQJHQ
ZLHGHUKROW DXVIKUHQ
:HUGHQ LQ64/4XHU\$QDO\]HURGHU PLWGHP'LHQVW
SURJUDPP RVTO DXVJHIKUW
****************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.
8QWHUULFKWVHLQKHLW9HUZHQGHQYRQ7UDQVDFW64/$EIUDJHWRROV
(PSIRKOHQH0HWKRGHQ
,QKDOWGLHVHU)ROLH
(UOlXWHUQ6LHGLHHPSIRKOH
QHQ0HWKRGHQ]XU9HUZHQ
GXQJGHU7UDQVDFW64/
$EIUDJHWRROV
9HUZHQGHQ6LH64/4XHU\$QDO\]HU
9HUZHQGHQ6LH64/4XHU\$QDO\]HU IUJUDILVFKHV
IUJUDILVFKHV
XQGLQWHUDNWLYHV$UEHLWHQ
XQGLQWHUDNWLYHV$UEHLWHQ
(LQVWLHJ
9HUZHQGHQ6LHGHQ
9HUZHQGHQ6LHGHQ 2EMHNWNDWDORJ]XP6XFKHQXQG(UVWHOOHQ
2EMHNWNDWDORJ]XP6XFKHQXQG(UVWHOOHQ
YRQ2EMHNWHQ
YRQ2EMHNWHQ
'LHHPSIRKOHQHQ0HWKRGHQ
HUOHLFKWHUQ,KQHQGLH9HU
ZHQGXQJGHU7UDQVDFW64/
$EIUDJHWRROV
9HUZHQGHQ
9HUZHQGHQ 6LH9RUODJHQ
6LH9RUODJHQ DOV
DOV $XVJDQJVSXQNW
$XVJDQJVSXQNW EHLP(UVWHOOHQ
EHLP(UVWHOOHQ
YRQ2EMHNWHQ
YRQ2EMHNWHQ
9HUZHQGHQ6LHGDV
9HUZHQGHQ6LHGDV %HIHKOV]HLOHQGLHQVWSURJUDPPµRVTO§
%HIHKOV]HLOHQGLHQVWSURJUDPPµRVTO§ IU
IU
%DWFKGDWHLHQ
%DWFKGDWHLHQ XQG=HLWSODQXQJHQ
XQG=HLWSODQXQJHQ
6SHLFKHUQ6LHKlXILJYHUZHQGHWH
6SHLFKHUQ6LHKlXILJYHUZHQGHWH 7UDQVDFW64/6NULSWVLQ'DWHLHQ
7UDQVDFW64/6NULSWVLQ'DWHLHQ
****************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)”
8QWHUULFKWVHLQKHLW9HUZHQGHQYRQ7UDQVDFW64/$EIUDJHWRROV
hEXQJVHLQKHLW$(UVWHOOHQXQG$XVIKUHQYRQ7UDQVDFW
64/6NULSWV
,QKDOWGLHVHU)ROLH
*HEHQ6LHHLQH(LQIKUXQJ
LQGLHhEXQJVHLQKHLW
(LQVWLHJ
,QGLHVHU8QWHUULFKWVHLQKHLW
HUVWHOOHQ6LHHLQ7UDQVDFW
64/6NULSWVSHLFKHUQHV
XQGIKUHQHVGDQQLQ
64/4XHU\$QDO\]HUXQG
PLW+LOIHGHV'LHQVW
SURJUDPPVRVTODXV
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG****************
(UOlXWHUQ6LHGLH/HUQ]LHOH
GHUhEXQJVHLQKHLW
/HUQ]LHOH
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.
9RUDXVVHW]XQJHQ
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.
:HLWHUH,QIRUPDWLRQHQ
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.
8QWHUULFKWVHLQKHLW9HUZHQGHQYRQ7UDQVDFW64/$EIUDJHWRROV
6]HQDULR
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
9HUDQVFKODJWH=HLWIUGLHhEXQJVHLQKHLW0LQXWHQ
8QWHUULFKWVHLQKHLW9HUZHQGHQYRQ7UDQVDFW64/$EIUDJHWRROV
hEXQJ
6FKUHLEHQJUXQGOHJHQGHU6(/(&7$QZHLVXQJHQ
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.
6(/(&7)520SURGXFWV25'(5%<SURGXFWQDPH
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.
8QWHUULFKWVHLQKHLW9HUZHQGHQYRQ7UDQVDFW64/$EIUDJHWRROV
Ç 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.
6(/(&7)520SURGXFWV:+(5(FDWHJRU\LG *2
7LSS 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.
8QWHUULFKWVHLQKHLW9HUZHQGHQYRQ7UDQVDFW64/$EIUDJHWRROV
hEXQJ
bQGHUQHLQHU6NULSWGDWHL
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.
0<6&5,3764/
'LHVHV6NULSWIUDJWGLHFXVWRPHU7DEHOOHDEXQG
JLEWHLQH/LVWHYRQ)LUPHQQDPHQFXVWRPHUQDPH
]XUFN'LHVHV6NULSWVROOWHLQGHU
1RUWKZLQG'DWHQEDQNDXVJHIKUWZHUGHQ
3. Fügen Sie eine Anweisung hinzu, die angibt, dass das Skript im Kontext der
Northwind-Datenbank ausgeführt wird.
86(1RUWKZLQG
4. Fügen Sie Kennzeichen für das Ende des Batches (GO-Anweisungen) an
den richtigen Stellen innerhalb des Skripts ein.
6(/(&7&RPSDQ\1DPH)520FXVWRPHUV
*2
5. Speichern Sie das Skript, und führen Sie es dann aus.
6. Minimieren Sie SQL Query Analyzer.
8QWHUULFKWVHLQKHLW9HUZHQGHQYRQ7UDQVDFW64/$EIUDJHWRROV
hEXQJ
$XVIKUHQHLQHV6NULSWVPLW+LOIHGHV'LHQVWSURJUDPPVRVTO
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.
RVTO"
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.
RVTO(LF?PRF?%?ODEILOHV?O?P\VFULSWVTO
$QPHUNXQJ 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.
8QWHUULFKWVHLQKHLW9HUZHQGHQYRQ7UDQVDFW64/$EIUDJHWRROV
/HUQ]LHONRQWUROOH
,QKDOWGLHVHU)ROLH
9HUWLHIHQ6LHGLH/HUQ]LHOH
GLHVHU8QWHUULFKWVHLQKHLW
LQGHP6LHGLH.HUQSXQNWH
ZLHGHUKROHQ
(LQVWLHJ
'LH)UDJHQ]XU/HUQ]LHO
NRQWUROOHEH]LHKHQVLFKDXI
HLQLJHGHU6FKOVVHONRQ
]HSWHGLH,QKDOWGLHVHU
8QWHUULFKWVHLQKHLWVLQG
„
64/4XHU\ $QDO\]HU
„
9HUZHQGHQGHV2EMHNWNDWDORJVLQ64/4XHU\ $QDO\]HU
„
9HUZHQGHQYRQ9RUODJHQLQ64/4XHU\ $QDO\]HU
„
9HUZHQGHQGHV'LHQVWSURJUDPPV µRVTO§
„
$XVIKUHQYRQ 7UDQVDFW64/$QZHLVXQJHQ
****************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.
8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ
LLL
+LQZHLVHIUGHQ.XUVOHLWHU
3UlVHQWDWLRQ
0LQXWHQ
hEXQJVHLQKHLWHQ
0LQXWHQ
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.
8QWHUODJHQXQG9RUEHUHLWXQJ
In diesem Abschnitt werden die erforderlichen Unterlagen und vorbereitenden
Aufgaben erläutert, die nötig sind, um diese Unterrichtseinheit zu unterrichten.
(UIRUGHUOLFKH8QWHUODJHQ
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.
9RUEHUHLWHQGH$XIJDEHQ
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.
LY
8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ
6WUDWHJLHIUGLH8QWHUULFKWVHLQKHLW
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.
$QSDVVXQJVLQIRUPDWLRQHQ
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.
:LFKWLJ 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.
8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ
(LQULFKWHQGHUhEXQJVHLQKHLW
Es gibt keine Anforderungen zum Einrichten der Übungseinheit, die die
Replikation oder die Anpassung betreffen.
(UJHEQLVVHGHUhEXQJVHLQKHLW
Auf den Kursteilnehmercomputern gibt es keine Konfigurationsänderungen,
die die Replikation oder die Anpassung betreffen.
Y
LY
8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ
This page is intentionally left blank.
8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ
hEHUVLFKW
,QKDOWGLHVHU)ROLH
*HEHQ6LHHLQHhEHUVLFKW
EHUGLH7KHPHQXQG/HUQ
]LHOHGLHVHU8QWHUULFKWV
HLQKHLW
(LQVWLHJ
,QGLHVHU8QWHUULFKWVHLQKHLW
OHUQHQ6LHZLH'DWHQPLW
+LOIHHLQIDFKHU$EIUDJHQ
DEJHUXIHQZHUGHQ
„
$EUXIHQYRQ'DWHQPLW+LOIHGHU6(/(&7$QZHLVXQJ
„
)LOWHUQYRQ'DWHQ
„
)RUPDWLHUHQYRQ 5HVXOWVHWV
„
9HUDUEHLWHQYRQ$EIUDJHQ
„
$VSHNWHGHU6\VWHPOHLVWXQJ
****************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.
8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ
‹ $EUXIHQYRQ'DWHQPLW+LOIHGHU6(/(&7$QZHLVXQJ
,QKDOWGLHVHU)ROLH
/LVWHQ6LHGLH7KHPHQDXI
GLHLPIROJHQGHQ$EVFKQLWW
EHKDQGHOWZHUGHQ
(LQVWLHJ
'DV$EUXIHQYRQ'DWHQDXV
7DEHOOHQHUIROJWPLW+LOIHGHU
6(/(&7$QZHLVXQJLQGHU
6SDOWHQXQG=HLOHQDQJH
JHEHQZHUGHQ
„
9HUZHQGHQGHU6(/(&7$QZHLVXQJ
„
$QJHEHQGHU6SDOWHQ
„
$QJHEHQYRQ=HLOHQPLW+LOIHGHU:+(5(.ODXVHO
****************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.
8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ
9HUZHQGHQGHU6(/(&7$QZHLVXQJ
,QKDOWGLHVHU)ROLH
(UOlXWHUQ6LHZLH'DWHQPLW
GHU6(/(&7$QZHLVXQJ
DXVHLQHU7DEHOOHDEJHUXIHQ
ZHUGHQ
(LQVWLHJ
9HUZHQGHQ6LHGLH
6(/(&7$QZHLVXQJ]XP
$EUXIHQYRQ'DWHQ
„
'LH6(/(&7/LVWHJLEWGLH6SDOWHQDQ
„
'LH:+(5(.ODXVHOJLEWGLH%HGLQJXQJDQGLHGLH
$EIUDJHHLQVFKUlQNW
„
'LH)520.ODXVHOJLEWGLH7DEHOOHDQ
Teilsyntax
6(/(&7>$//_',67,1&7@VHOHFWBOLVW!
6(/(&7>$//_',67,1&7@VHOHFWBOLVW!
)520^WDEOHBVRXUFH!`>žQ@
)520^WDEOHBVRXUFH!`>žQ@
:+(5(VHDUFKBFRQGLWLRQ!
:+(5(VHDUFKBFRQGLWLRQ!
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG****************
Verwenden Sie die SELECT-Anweisung zum Abrufen von Daten.
7HLOV\QWD[
SELECT [ ALL | DISTINCT ] <select_list>
FROM {<table_source>} [,...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.
8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ
$QJHEHQGHU6SDOWHQ
,QKDOWGLHVHU)ROLH
86(1RUWKZLQG
86(1RUWKZLQG
6(/(&7HPSOR\HHLGODVWQDPHILUVWQDPHWLWOH
6(/(&7HPSOR\HHLGODVWQDPHILUVWQDPHWLWOH
)520HPSOR\HHV
)520HPSOR\HHV
*2
*2
=HLJHQ6LHZLH6SDOWHQLQ
HLQHU7DEHOOHDXVJHZlKOW
ZHUGHQ
(LQVWLHJ
6LHN|QQHQHLQ]HOQH6SDOWHQ
DXVHLQHU7DEHOOHDEUXIHQ
LQGHP6LHVLHLQGHU$XV
ZDKOOLVWHDXIIKUHQ
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:
7HLOV\QWD[
<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.
%HLVSLHO
(UJHEQLV
8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ
In diesem Beispiel werden die Spalten employeeid, lastname, firstname und
title für alle Mitarbeiter aus der employees-Tabelle abgerufen.
86(1RUWKZLQG
6(/(&7HPSOR\HHLGODVWQDPHILUVWQDPHWLWOH
)520HPSOR\HHV
*2
HPSOR\HHLG ODVWQDPH
ILUVWQDPH WLWOH
'DYROLR
)XOOHU
/HYHUOLQJ
3HDFRFN
%XFKDQDQ
6X\DPD
.LQJ
&DOODKDQ
'RGVZRUWK
URZVDIIHFWHG
1DQF\
$QGUHZ
-DQHW
0DUJDUHW
6WHYHQ
0LFKDHO
5REHUW
/DXUD
$QQH
6DOHV5HSUHVHQWDWLYH
9LFH3UHVLGHQW6DOHV
6DOHV5HSUHVHQWDWLYH
6DOHV5HSUHVHQWDWLYH
6DOHV0DQDJHU
6DOHV5HSUHVHQWDWLYH
6DOHV5HSUHVHQWDWLYH
,QVLGH6DOHV&RRUGLQDWRU
6DOHV5HSUHVHQWDWLYH
8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ
$QJHEHQYRQ=HLOHQPLW+LOIHGHU:+(5(.ODXVHO
,QKDOWGLHVHU)ROLH
(UOlXWHUQ6LHZLH=HLOHQPLW
+LOIHGHU:+(5(.ODXVHO
DEJHUXIHQZHUGHQ
(LQVWLHJ
0LWGHU:+(5(.ODXVHO
N|QQHQ6LHEHVWLPPWH
=HLOHQDEKlQJLJYRQ
6XFKEHGLQJXQJHQDEUXIHQ
86(1RUWKZLQG
86(1RUWKZLQG
6(/(&7HPSOR\HHLGODVWQDPHILUVWQDPHWLWOH
6(/(&7HPSOR\HHLGODVWQDPHILUVWQDPHWLWOH
)520HPSOR\HHV
)520HPSOR\HHV
:+(5(HPSOR\HHLG
:+(5(HPSOR\HHLG *2
*2
employeeid
employeeid
55
lastname
lastname firstname
firstname
Buchanan
Buchanan Steven
Steven
title
title
Sales
SalesManager
Manager
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG****************
0HWKRGLVFKHU+LQZHLV
9HUJOHLFKHQ6LHGDV5HVXOW
VHWDXIGHUYRUKHUJHKHQGHQ
)ROLHPLWGHPDXIGLHVHU
)ROLH
:HLVHQ6LHGDUDXIKLQGDVV
PLW+LOIHGHU:+(5(.ODX
VHOGLH$Q]DKOGHU]XUFN
JHJHEHQHQ=HLOHQHLQJH
VFKUlQNWZHUGHQNDQQ
'LHKLHUYHUZHQGHWH6\QWD[
ILQGHQ6LHQLFKWLP$EVFKQLWW
Ä6(/(&7$QZHLVXQJ³
VRQGHUQLP$EVFKQLWW
Ä6XFKEHGLQJXQJ764/³LQ
GHU64/6HUYHU2QOLQH
GRNXPHQWDWLRQ
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 | * }, '<contains_search_condition>' )
| FREETEXT ( {column | * }, 'freetext_string' )
| expression [NOT] IN (subquery | expression [,...n])
| expression { = | <> | > | >= | < | <= }
{ALL | SOME | ANY} (subquery)
| EXISTS (subquery)
}
8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ
Beachten Sie beim Angeben von Zeilen in der WHERE-Klausel die folgenden
Festlegungen und Richtlinien:
%HLVSLHO
(UJHEQLV
„
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.
86(1RUWKZLQG
6(/(&7HPSOR\HHLGODVWQDPHILUVWQDPHWLWOH
)520HPSOR\HHV
:+(5(HPSOR\HHLG *2
HPSOR\HHLG
ODVWQDPH
ILUVWQDPH
WLWOH
%XFKDQDQ
URZVDIIHFWHG
6WHYHQ
6DOHV0DQDJHU
8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ
‹ )LOWHUQYRQ'DWHQ
,QKDOWGLHVHU)ROLH
%HVFKUHLEHQ6LHGLHYHU
VFKLHGHQHQ$UWHQYRQ6XFK
EHGLQJXQJHQGLHLQGHU
:+(5(.ODXVHOYHUZHQGHW
ZHUGHQN|QQHQ
„
9HUZHQGHQYRQ9HUJOHLFKVRSHUDWRUHQ
„
9HUZHQGHQYRQ =HLFKHQIROJHYHUJOHLFKHQ
(LQVWLHJ
„
9HUZHQGHQ YRQ ORJLVFKHQ2SHUDWRUHQ
„
$EUXIHQHLQHV :HUWHEHUHLFKV
„
9HUZHQGHQHLQHU :HUWHOLVWH DOV6XFKNULWHULXP
„
$EUXIHQYRQXQEHNDQQWHQ:HUWHQ
6LHZROOHQGLH(UJHEQLVVH
GLHHLQH$EIUDJH]XUFNJLEW
HLQVFKUlQNHQ
****************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
8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ
9HUZHQGHQYRQ9HUJOHLFKVRSHUDWRUHQ
,QKDOWGLHVHU)ROLH
=HLJHQ6LHZLHPLW+LOIHYRQ
9HUJOHLFKVRSHUDWRUHQ7HLO
PHQJHQYRQ=HLOHQDEJH
UXIHQZHUGHQ
Beispiel
Beispiel 11
86(1RUWKZLQG
86(1RUWKZLQG
6(/(&7ODVWQDPHFLW\
6(/(&7ODVWQDPHFLW\
)520HPSOR\HHV
)520HPSOR\HHV
:+(5(FRXQWU\
:+(5(FRXQWU\ 86$
86$
*2
*2
(LQVWLHJ
9HUZHQGHQ6LH9HUJOHLFKV
RSHUDWRUHQ]%*U|‰HUDOV
!.OHLQHUDOVXQG
*OHLFK XP=HLOHQDE
KlQJLJYRQ9HUJOHLFKV
EHGLQJXQJHQDXV]XZlKOHQ
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
$QPHUNXQJ 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.
8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ
%HLVSLHO
(UJHEQLV
In diesem Beispiel werden der Nachname und der Wohnort von Mitarbeitern in
den USA aus der employees-Tabelle abgerufen.
86(1RUWKZLQG
6(/(&7ODVWQDPHFLW\
)520HPSOR\HHV
:+(5(FRXQWU\ 86$
*2
ODVWQDPH
'DYROLR
)XOOHU
/HYHUOLQJ
3HDFRFN
&DOODKDQ
URZVDIIHFWHG
%HLVSLHO
(UJHEQLV
FLW\
6HDWWOH
7DFRPD
.LUNODQG
5HGPRQG
6HDWWOH
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.
86(1RUWKZLQG
6(/(&7RUGHULGFXVWRPHULG
)520RUGHUV
:+(5(RUGHUGDWH
*2
RUGHULG
FXVWRPHULG
URZVDIIHFWHG
9,1(7
72063
+$1$5
9,&7(
6835'
+$1$5
8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ
9HUZHQGHQYRQ=HLFKHQIROJHYHUJOHLFKHQ
,QKDOWGLHVHU)ROLH
=HLJHQ6LHZLH=HLOHQPLW
+LOIHGHU6XFKEHGLQJXQJ
/,.(XQWHU9HUZHQGXQJYRQ
3ODW]KDOWHU]HLFKHQDEJH
UXIHQZHUGHQ
86(1RUWKZLQG
86(1RUWKZLQG
6(/(&7FRPSDQ\QDPH
6(/(&7FRPSDQ\QDPH
)520FXVWRPHUV
)520FXVWRPHUV
:+(5(FRPSDQ\QDPH/,.(
5HVWDXUDQW©
:+(5(FRPSDQ\QDPH/,.(
5HVWDXUDQW©
*2
*2
(LQVWLHJ
9HUZHQGHQ6LHGLH6XFK
EHGLQJXQJ/,.(]XP$XV
ZlKOHQYRQ=HLOHQGXUFK
9HUJOHLFKHQYRQ=HLFKHQ
IROJHQ
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.
7\SHQYRQ3ODW]KDOWHU]HLFKHQ
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.
8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ
%HLVSLHOHIUGLH9HUZHQGXQJYRQ3ODW]KDOWHU]HLFKHQ
Die folgende Tabelle enthält Beispiele für die Verwendung von Platzhalterzeichen mit der Suchbedingung LIKE.
%HLVSLHO
(UJHEQLV
Ausdruck
Rückgabe
/,.(
%5
Alle Namen, die mit den Buchstaben BR beginnen.
/,.(
%U
Alle Namen, die mit den Buchstaben Br beginnen.
/,.(
HHQ
Alle Namen, die mit den Buchstaben een enden.
/,.(
HQ
Alle Namen, die die Buchstaben en enthalten.
/,.(
BHQ
Alle dreistelligen Namen, die mit den Buchstaben en enden.
/,.(
>&.@
Alle Namen, die mit dem Buchstaben C oder K beginnen.
/,.(
>69@LQJ
Alle vierstelligen Namen, die mit den Buchstaben ing enden
und mit einem Buchstaben zwischen S und V beginnen.
/,.(
6>AF@
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.
86(1RUWKZLQG
6(/(&7FRPSDQ\QDPH
)520FXVWRPHUV
:+(5(FRPSDQ\QDPH/,.(
5HVWDXUDQW
*2
FRPSDQ\QDPH
*526(//$5HVWDXUDQWH
/RQHVRPH3LQH5HVWDXUDQW
7RUWXJD5HVWDXUDQWH
URZVDIIHFWHG
8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ
9HUZHQGHQYRQORJLVFKHQ2SHUDWRUHQ
,QKDOWGLHVHU)ROLH
=HLJHQ6LHZLHPHKUHUH
$XVGUFNHPLW+LOIH
ORJLVFKHU2SHUDWRUHQPLW
HLQDQGHUNRPELQLHUWZHUGHQ
Beispiel
Beispiel 11
86(1RUWKZLQG
86(1RUWKZLQG
6(/(&7SURGXFWLGSURGXFWQDPHVXSSOLHULGXQLWSULFH
6(/(&7SURGXFWLGSURGXFWQDPHVXSSOLHULGXQLWSULFH
)520SURGXFWV
)520SURGXFWV
:+(5(
:+(5( SURGXFWQDPH
SURGXFWQDPH /,.(
7
25SURGXFWLG
/,.(
7
25SURGXFWLG $1'XQLWSULFH
$1'XQLWSULFH !
!
*2
*2
(LQVWLHJ
6LHZROOHQGLH$Q]DKOGHU
=HLOHQGLHEHLP$XVIKUHQ
HLQHU$EIUDJHYRQ
64/6HUYHU]XUFNJHJHEHQ
ZHUGHQHLQVFKUlQNHQ9HU
ZHQGHQ6LHGD]XORJLVFKH
2SHUDWRUHQXP]ZHLRGHU
PHKUHUH$XVGUFNHPLW
HLQDQGHU]XNRPELQLHUHQ
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.
9HUZHQGHQYRQ.ODPPHUQ
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.
5HLKHQIROJHGHU6XFKEHGLQJXQJHQ
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.
8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ
%HLVSLHO
0HWKRGLVFKHU+LQZHLV
9HUJOHLFKHQ6LHGLH$E
IUDJHQLQGHQ%HLVSLHOHQ
XQG:HLVHQ6LHGDUDXI
KLQGDVVGLH$XVGUFNH
XQWHUVFKLHGOLFKJUXSSLHUW
XQGGHVKDOEGLH5HVXOWVHWV
XQWHUVFKLHGOLFKVLQG
(UJHEQLV
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.
86(1RUWKZLQG
6(/(&7SURGXFWLGSURGXFWQDPHVXSSOLHULGXQLWSULFH
)520SURGXFWV
:+(5(SURGXFWQDPH/,.(
7
25SURGXFWLG $1'XQLWSULFH!
*2
SURGXFWLG
SURGXFWQDPH
VXSSOLHULG XQLWSULFH
7RIX
7KULQJHU5RVWEUDWZXUVW
7DUWHDXVXFUH
URZVDIIHFWHG
%HLVSLHO
(UJHEQLV
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.
86(1RUWKZLQG
6(/(&7SURGXFWLGSURGXFWQDPHVXSSOLHULGXQLWSULFH
)520SURGXFWV
:+(5(SURGXFWQDPH/,.(
7
25SURGXFWLG $1'XQLWSULFH!
*2
SURGXFWLG
SURGXFWQDPH
VXSSOLHULG XQLWSULFH
7RXUWLqUH
7DUWHDXVXFUH
7XQQEU|G
7HDWLPH&KRFRODWH%LVFXLWV
7RIX
7KULQJHU5RVWEUDWZXUVW
URZVDIIHFWHG
8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ
$EUXIHQHLQHV:HUWHEHUHLFKV
,QKDOWGLHVHU)ROLH
86(1RUWKZLQG
86(1RUWKZLQG
6(/(&7SURGXFWQDPHXQLWSULFH
6(/(&7SURGXFWQDPHXQLWSULFH
)520SURGXFWV
)520SURGXFWV
:+(5(XQLWSULFH%(7:((1$1'
:+(5(XQLWSULFH%(7:((1$1'
*2
*2
=HLJHQ6LHZLH'DWHQPLW
+LOIHGHU6XFKEHGLQJXQJ
%(7:((1DEJHUXIHQ
ZHUGHQ
(LQVWLHJ
9HUZHQGHQ6LHGLH6XFK
EHGLQJXQJ%(7:((1]XP
$EUXIHQYRQ=HLOHQGLHLQ
HLQHP:HUWHEHUHLFKOLHJHQ
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.
8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ
%HLVSLHO
(UJHEQLV
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.
86(1RUWKZLQG
6(/(&7SURGXFWQDPHXQLWSULFH
)520SURGXFWV
:+(5(XQLWSULFH%(7:((1$1'
*2
SURGXFWQDPH
XQLWSULFH
&KDL
&KDQJ
$QLVHHG6\UXS
*HQHQ6KRX\X
3DYORYD
6LU5RGQH\
V6FRQHV
URZVDIIHFWHG
%HLVSLHO
(UJHEQLV
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.
86(1RUWKZLQG
6(/(&7SURGXFWQDPHXQLWSULFH
)520SURGXFWV
:+(5(XQLWSULFH!
$1'XQLWSULFH
*2
SURGXFWQDPH
XQLWSULFH
&KDL
&KDQJ
*HQHQ6KRX\X
3DYORYD
URZVDIIHFWHG
8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ
9HUZHQGHQHLQHU:HUWHOLVWHDOV6XFKNULWHULXP
,QKDOWGLHVHU)ROLH
=HLJHQ6LHZLH=HLOHQPLW
+LOIHGHU6XFKEHGLQJXQJ,1
DEJHUXIHQZHUGHQ
86(1RUWKZLQG
86(1RUWKZLQG
6(/(&7FRPSDQ\QDPHFRXQWU\
6(/(&7FRPSDQ\QDPHFRXQWU\
)520VXSSOLHUV
)520VXSSOLHUV
:+(5(FRXQWU\,1
-DSDQ
,WDO\
:+(5(FRXQWU\,1
-DSDQ
,WDO\
*2
*2
(LQVWLHJ
6LHP|FKWHQ=HLOHQDEUXIHQ
GLHPLWHLQHUEHVWLPPWHQ
:HUWHOLVWHEHUHLQVWLPPHQ
9HUZHQGHQ6LHGD]XLQGHU
:+(5(.ODXVHOGLH6XFK
EHGLQJXQJ,1
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****************
0HWKRGLVFKHU+LQZHLV
:HLVHQ6LHGDUDXIKLQGDVV
64/6HUYHUGLH%HLVSLHOH
XQGDXIGLHVHOEH:HLVH
DXIO|VWXQGGDVVHOEH5HVXOW
VHW]XUFNJLEW,Q%HLVSLHO
ZLUGGLH6XFKEHGLQJXQJ,1
YHUZHQGHWZlKUHQGLQ
%HLVSLHO]ZHL9HUJOHLFKV
RSHUDWRUHQ GLHPLWGHP
2SHUDWRU25YHUEXQGHQ
VLQGYHUZHQGHWZHUGHQ
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.
8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ
%HLVSLHO
(UJHEQLV
%HLVSLHO
(UJHEQLV
In diesem Beispiel wird aus der suppliers-Tabelle eine Liste von Firmen
erstellt, die in Japan oder Italien ansässig sind.
86(1RUWKZLQG
6(/(&7FRPSDQ\QDPHFRXQWU\
)520VXSSOLHUV
:+(5(FRXQWU\,1
-DSDQ
,WDO\
*2
FRPSDQ\QDPH
FRXQWU\
7RN\R7UDGHUV
0D\XPL
V
)RUPDJJL)RUWLQLVUO
3DVWD%XWWLQLVUO
URZVDIIHFWHG
-DSDQ
-DSDQ
,WDO\
,WDO\
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.
86(1RUWKZLQG
6(/(&7FRPSDQ\QDPHFRXQWU\
)520VXSSOLHUV
:+(5(FRXQWU\ -DSDQ
25FRXQWU\ ,WDO\
*2
FRPSDQ\QDPH
FRXQWU\
7RN\R7UDGHUV
0D\XPL
V
)RUPDJJL)RUWLQLVUO
3DVWD%XWWLQLVUO
URZVDIIHFWHG
-DSDQ
-DSDQ
,WDO\
,WDO\
8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ
$EUXIHQYRQXQEHNDQQWHQ:HUWHQ
,QKDOWGLHVHU)ROLH
=HLJHQ6LHZLH=HLOHQPLW
XQEHNDQQWHQ:HUWHQDEJH
UXIHQZHUGHQ
86(1RUWKZLQG
86(1RUWKZLQG
6(/(&7FRPSDQ\QDPHID[
6(/(&7FRPSDQ\QDPHID[
)520VXSSOLHUV
)520VXSSOLHUV
:+(5(ID[,618//
:+(5(ID[,618//
*2
*2
(LQVWLHJ
6LHN|QQHQ=HLOHQPLWXQ
EHNDQQWHQ:HUWHQDEUXIHQ
LQGHP6LHLQGHU:+(5(
.ODXVHOGLH%HGLQJXQJ,6
18//DQJHEHQ
companyname
companyname
Exotic
ExoticLiquids
Liquids
fax
fax
NULL
NULL
New
NewOrleans
OrleansCajun
CajunDelights
Delights
Tokyo
Traders
Tokyo 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.
8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ
%HLVSLHO
(UJHEQLV
In diesem Beispiel wird aus der suppliers-Tabelle eine Liste von Firmen
abgerufen, deren fax-Spalte einen NULL-Wert enthält.
86(1RUWKZLQG
6(/(&7FRPSDQ\QDPHID[
)520VXSSOLHUV
:+(5(ID[,618//
*2
FRPSDQ\QDPH
ID[
([RWLF/LTXLGV
1HZ2UOHDQV&DMXQ'HOLJKWV
7RN\R7UDGHUV
&RRSHUDWLYDGH4XHVRV
/DV&DEUDV
URZVDIIHFWHG
18//
18//
18//
18//
8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ
‹ )RUPDWLHUHQYRQ5HVXOWVHWV
,QKDOWGLHVHU)ROLH
=HLJHQ6LHZLH5HVXOWVHWV
IRUPDWLHUWZHUGHQ
(LQVWLHJ
6LHN|QQHQ,KUH5HVXOWVHWV
EHUVLFKWOLFKHUJHVWDOWHQ
LQGHP6LH'DWHQVRUWLHUHQ
GRSSHOWH=HLOHQO|VFKHQ
6SDOWHQQDPHQlQGHUQRGHU
/LWHUDOHYHUZHQGHQ
„
6RUWLHUHQGHU'DWHQ
„
'RSSHOWH=HLOHQO|VFKHQ
„
bQGHUQGHU6SDOWHQQDPHQ
„
9HUZHQGHQYRQ /LWHUDOHQ
****************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.
8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ
6RUWLHUHQGHU'DWHQ
,QKDOWGLHVHU)ROLH
=HLJHQ6LHZLHGLH25'(5
%<.ODXVHOYHUZHQGHWZLUG
Beispiel
Beispiel 11
86(1RUWKZLQG
86(1RUWKZLQG
6(/(&7SURGXFWLGSURGXFWQDPHFDWHJRU\LGXQLWSULFH
6(/(&7SURGXFWLGSURGXFWQDPHFDWHJRU\LGXQLWSULFH
)520SURGXFWV
)520SURGXFWV
25'(5%<FDWHJRU\LGXQLWSULFH'(6&
25'(5%<FDWHJRU\LGXQLWSULFH'(6&
*2
*2
(LQVWLHJ
1DFKGHP6LHGLHDE]XUXIHQ
GHQ6SDOWHQXQG=HLOHQDXV
JHZlKOWKDEHQN|QQHQ6LH
GLH5HLKHQIROJHGHV5HVXOW
VHWVPLW+LOIHGHU25'(5
%<.ODXVHOVRUWLHUHQ
productid
productid
38
38
43
43
22
…
…
63
63
88
61
61
…
…
productname
categoryid
productname
categoryid unitprice
unitprice
Cote
de
Blaye
11
263.5000
Cote de Blaye
263.5000
Ipoh
Coffee
1
46.0000
Ipoh Coffee
1
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****************
0HWKRGLVFKHU+LQZHLV
9HUJOHLFKHQ6LHGLHLQGHU
25'(5%<.ODXVHOLQGHQ
%HLVSLHOHQXQGDQJH
JHEHQHQ6SDOWHQ,Q%HL
VSLHOZHUGHQGLHLQGHU
25'(5%<.ODXVHODQJH
JHEHQHQ6SDOWHQGXUFKLKUH
MHZHLOLJH3RVLWLRQLQGHU
$XVZDKOOLVWHHUVHW]W'LH
5HVXOWVHWVLQGHQ%HL
VSLHOHQXQGVLQG
LGHQWLVFK
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.
7LSS Durch eine geeignete Indizierung kann die Sortierung mit Hilfe der
ORDER BY-Klausel weiter verbessert werden.
%HLVSLHO
(UJHEQLV
8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ
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.
86(1RUWKZLQG
6(/(&7SURGXFWLGSURGXFWQDPHFDWHJRU\LGXQLWSULFH
)520SURGXFWV
25'(5%<FDWHJRU\LGXQLWSULFH'(6&
*2
SURGXFWLG SURGXFWQDPH
FDWHJRU\LGXQLWSULFH
&{WHGH%OD\H
,SRK&RIIHH
&KDQJ
&KDL
6WHHOH\H6WRXW
&KDUWUHXVHYHUWH
/DNNDOLN||UL
2XWEDFN/DJHU
6DVTXDWFK$OH
/DXJKLQJ/XPEHUMDFN/DJHU
5K|QEUlX.ORVWHUELHU
*XDUDQi)DQWiVWLFD
9HJLHVSUHDG
1RUWKZRRGV&UDQEHUU\6DXFH
6LURSG
pUDEOH
*UDQGPD
V%R\VHQEHUU\6SUHDG
URZVDIIHFWHG
%HLVSLHO
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.
86(1RUWKZLQG
6(/(&7SURGXFWLGSURGXFWQDPHFDWHJRU\LGXQLWSULFH
)520SURGXFWV
25'(5%<'(6&
*2
8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ
'RSSHOWH=HLOHQO|VFKHQ
,QKDOWGLHVHU)ROLH
=HLJHQ6LHZLHGRSSHOWH
=HLOHQPLW+LOIHGHU6XFKEH
GLQJXQJ',67,1&7JHO|VFKW
ZHUGHQ
Beispiel
Beispiel 11
86(1RUWKZLQG
86(1RUWKZLQG
6(/(&7',67,1&7FRXQWU\
6(/(&7',67,1&7FRXQWU\
)520VXSSOLHUV
)520VXSSOLHUV
25'(5%<FRXQWU\
25'(5%<FRXQWU\
*2
*2
(LQVWLHJ
*HEHQ6LH]XP/|VFKHQ
GRSSHOWHU=HLOHQDXVGHP
5HVXOWVHWLQGHU6(/(&7
$QZHLVXQJGLH',67,1&7
.ODXVHODQ
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****************
Wenn Sie eine Liste ohne Mehrfachnennungen einzelner Werte benötigen, verwenden Sie die DISTINCT-Klausel zum Löschen doppelter Zeilen im Result)KUHQ6LHHLQH$EIUDJHZLH
set. Beachten Sie bei Verwendung der DISTINCT-Klausel die folgenden FestLP%LOGDQJH]HLJWDXVMH
legungen:
GRFKRKQHGLH',67,1&7
0HWKRGLVFKHU+LQZHLV
.ODXVHO
)RUGHUQ6LHGLH.XUVWHLO
QHKPHUDXIGLH$Q]DKOGHU
]XUFNJHJHEHQHQ=HLOHQ]X
YHUJOHLFKHQ
%HLVSLHO
„
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.
86(1RUWKZLQG
6(/(&7',67,1&7FRXQWU\
)520VXSSOLHUV
25'(5%<FRXQWU\
*2
(UJHEQLV
8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ
FRXQWU\
$XVWUDOLD
%UD]LO
&DQDGD
'HQPDUN
)LQODQG
)UDQFH
*HUPDQ\
,WDO\
-DSDQ
1HWKHUODQGV
1RUZD\
6LQJDSRUH
6SDLQ
6ZHGHQ
8.
86$
URZVDIIHFWHG
%HLVSLHO
(UJHEQLV
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.
86(1RUWKZLQG
6(/(&7FRXQWU\
)520VXSSOLHUV
25'(5%<FRXQWU\
*2
FRXQWU\
$XVWUDOLD
$XVWUDOLD
%UD]LO
&DQDGD
&DQDGD
'HQPDUN
)LQODQG
)UDQFH
)UDQFH
)UDQFH
*HUPDQ\
*HUPDQ\
*HUPDQ\
,WDO\
,WDO\
-DSDQ
-DSDQ
1HWKHUODQGV
8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ
(Fortsetzung)
FRXQWU\
1RUZD\
6LQJDSRUH
6SDLQ
URZVDIIHFWHG
8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ
bQGHUQGHU6SDOWHQQDPHQ
,QKDOWGLHVHU)ROLH
86(1RUWKZLQG
86(1RUWKZLQG
6(/(&7
6(/(&7 ILUVWQDPH$6)LUVWODVWQDPH$6/DVW
ILUVWQDPH$6)LUVWODVWQDPH$6/DVW
HPSOR\HHLG
HPSOR\HHLG $6
(PSOR\HH,'
$6
(PSOR\HH,'
)520HPSOR\HHV
)520HPSOR\HHV
*2
*2
=HLJHQ6LHZLH6SDOWHQ
QDPHQJHlQGHUWZHUGHQ
GDPLWVLHEHVVHUYHUVWlQG
OLFKVLQG
(LQVWLHJ
9HUZHQGHQ6LH$OLDVQDPHQ
VWDWWGHUHLJHQWOLFKHQ
6SDOWHQQDPHQGDPLWGDV
5HVXOWVHWEHVVHUYHUVWlQG
OLFKLVW
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.
7HLOV\QWD[
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.
8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ
%HLVSLHO
(UJHEQLV
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
(PSOR\HH,' in einfache Anführungszeichen eingeschlossen ist, weil er ein
Leerzeichen enthält.
86(1RUWKZLQG
6(/(&7ILUVWQDPH$6)LUVWODVWQDPH$6/DVW
HPSOR\HHLG$6
(PSOR\HH,'
)520HPSOR\HHV
*2
)LUVW
/DVW
(PSOR\HH,'
1DQF\
$QGUHZ
-DQHW
0DUJDUHW
6WHYHQ
0LFKDHO
5REHUW
/DXUD
$QQH
URZVDIIHFWHG
'DYROLR
)XOOHU
/HYHUOLQJ
3HDFRFN
%XFKDQDQ
6X\DPD
.LQJ
&DOODKDQ
'RGVZRUWK
8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ
9HUZHQGHQYRQ/LWHUDOHQ
,QKDOWGLHVHU)ROLH
=HLJHQ6LHZLHGDV5HVXOW
VHWGXUFKGLH9HUZHQGXQJ
YRQ/LWHUDOHQLQGHU
6(/(&7$QZHLVXQJEHVVHU
YHUVWlQGOLFKJHPDFKW
ZHUGHQNDQQ
(LQVWLHJ
6LHN|QQHQGDV5HVXOWVHW
PLW+LOIHYRQ/LWHUDOHQEHV
VHUYHUVWlQGOLFKPDFKWHQ
86(1RUWKZLQG
86(1RUWKZLQG
6(/(&7
6(/(&7 ILUVWQDPHODVWQDPH
ILUVWQDPHODVWQDPH
,GHQWLILFDWLRQQXPEHU
HPSOR\HHLG
,GHQWLILFDWLRQQXPEHU
HPSOR\HHLG
)520HPSOR\HHV
)520HPSOR\HHV
*2
*2
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
number:
1
Identification number: 1
Identification
Identificationnumber:
number: 22
Identification
Identificationnumber:
number: 33
Identification
Identificationnumber:
number: 44
Identification
number:
Identification 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.
7HLOV\QWD[
SELECT column_name | 'string literal' [, column_name | 'string_literal'...]
FROM table_name
%HLVSLHO
In diesem Beispiel wird eine Liste der Mitarbeiter aus der employees-Tabelle
abgerufen. Beachten Sie, dass die Zeichenfolge ,GHQWLILFDWLRQQXPEHU im
Resultset vor dem Namen der employeeid-Spalte steht.
(UJHEQLV
86(1RUWKZLQG
6(/(&7ILUVWQDPHODVWQDPH
,GHQWLILFDWLRQQXPEHU
HPSOR\HHLG
)520HPSOR\HHV
*2
ILUVWQDPH
ODVWQDPH
HPSOR\HHLG
1DQF\
'DYROLR
$QGUHZ
)XOOHU
-DQHW
/HYHUOLQJ
0DUJDUHW
3HDFRFN
6WHYHQ
%XFKDQDQ
0LFKDHO
6X\DPD
5REHUW
.LQJ
/DXUD
&DOODKDQ
$QQH
'RGVZRUWK
URZVDIIHFWHG
,GHQWLILFDWLRQQXPEHU
,GHQWLILFDWLRQQXPEHU
,GHQWLILFDWLRQQXPEHU
,GHQWLILFDWLRQQXPEHU
,GHQWLILFDWLRQQXPEHU
,GHQWLILFDWLRQQXPEHU
,GHQWLILFDWLRQQXPEHU
,GHQWLILFDWLRQQXPEHU
,GHQWLILFDWLRQQXPEHU
8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ
‹ 9HUDUEHLWHQYRQ$EIUDJHQ
,QKDOWGLHVHU)ROLH
(UOlXWHUQ6LHGLH9HUDUEHL
WXQJYRQ$EIUDJHQ
1LFKW ]ZLVFKHQJHVSHLFKHUWH $EIUDJHQ$GKRF (LQVWLHJ
$OOH$EIUDJHQZHUGHQDXI
GLHVHOEH:HLVHYHUDUEHLWHW
EHYRUVLHDXVJHIKUW
ZHUGHQ
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
=ZLVFKHQJHVSHLFKHUWH $EIUDJHQ
(UVWHV$XVIKUHQ
Analysieren
Analysieren
Auflösen
Auflösen
Optimieren
Optimieren
6SlWHUHV$XVIKUHQ
****************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.
1LFKW]ZLVFKHQJHVSHLFKHUWH$EIUDJHQ$GKRF
Alle Abfragen werden analysiert, aufgelöst, optimiert und kompiliert, bevor sie
ausgeführt werden.
6LFKWHQZHUGHQ]XHLQHUHLQ
]HOQHQ$QZHLVXQJUHGX]LHUW
DXIJHO|VW'LH$QZHLVXQJ
GLHDXIGLH6LFKWYHUZHLVW
ELOGHW]XVDPPHQPLWGHU
6LFKWGHILQLWLRQHLQH
6(/(&7$QZHLVXQJ
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.
=ZLVFKHQJHVSHLFKHUWH$EIUDJHQ
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.
8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ
$XWRPDWLVFKHV=ZLVFKHQVSHLFKHUQYRQ$EIUDJHQ
,QKDOWGLHVHU)ROLH
%HVFKUHLEHQ6LHZLH
64/6HUYHU$EIUDJHQDXWR
PDWLVFK]ZLVFKHQVSHLFKHUW
(LQVWLHJ
$EIUDJHQZHUGHQXQWHU]ZHL
%HGLQJXQJHQDXWRPDWLVFK
]ZLVFKHQJHVSHLFKHUW
„
$GKRF%DWFKHV
86(1RUWKZLQG
86(1RUWKZLQG
6(/(&7)520SURGXFWV:+(5(XQLWSULFH
6(/(&7)520SURGXFWV:+(5(XQLWSULFH 6(/(&7)520SURGXFWV:+(5(XQLWSULFH
6(/(&7)520SURGXFWV:+(5(XQLWSULFH 6(/(&7)520SURGXFWV:+(5(XQLWSULFH
6(/(&7)520SURGXFWV:+(5(XQLWSULFH *2
*2
„
$XWRPDWLVFKH 3DUDPHWULVLHUXQJ
86(OLEUDU\
86(OLEUDU\
6(/(&7)520PHPEHU:+(5(PHPEHUBQR
6(/(&7)520PHPEHU:+(5(PHPEHUBQR
6(/(&7)520PHPEHU:+(5(PHPEHUBQR
6(/(&7)520PHPEHU:+(5(PHPEHUBQR
6(/(&7)520PHPEHU:+(5(PHPEHUBQR
6(/(&7)520PHPEHU:+(5(PHPEHUBQR
*2
*2
****************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.
$GKRF%DWFKHV
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.
%HLVSLHO
0HWKRGLVFKHU+LQZHLV
)UHLQHJHQDXH7H[WEHU
HLQVWLPPXQJPVVHQVR
ZRKOGLH'DWHQDOVDXFKGLH
'DWHQW\SHQEHUHLQVWLP
PHQ,QGLHVHP%HLVSLHO
ZLUGijDOV:lKUXQJV
GDWHQW\SijGDJHJHQ
DOV'DWHQW\SPLW*OHLW
NRPPDEHUJHEHQ
Für die erste und dritte Anweisung wird derselbe Abfrageplan verwendet. Für
die zweite Anweisung wird ein anderer Abfrageplan verwendet.
86(1RUWKZLQG
6(/(&7)520SURGXFWV:+(5(XQLWSULFH 6(/(&7)520SURGXFWV:+(5(XQLWSULFH 6(/(&7)520SURGXFWV:+(5(XQLWSULFH *2
$XWRPDWLVFKH3DUDPHWULVLHUXQJ
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.
8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ
%HLVSLHO
Bei der automatischen Parametrisierung wird für alle drei der folgenden
Anweisungen derselbe Abfrageplan verwendet.
86(OLEUDU\
6(/(&7)520PHPEHU:+(5(PHPEHUBQR 6(/(&7)520PHPEHU:+(5(PHPEHUBQR 6(/(&7)520PHPEHU:+(5(PHPEHUBQR *2
8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ
$VSHNWHGHU6\VWHPOHLVWXQJ
,QKDOWGLHVHU)ROLH
(UOlXWHUQ6LHGLH/HLVWXQJV
DVSHNWHGLHEHLP$XVIKUHQ
HLQIDFKHU$EIUDJHQ]XEH
UFNVLFKWLJHQVLQG
(LQVWLHJ
%HWUDFKWHQ6LHHLQLJHGHU
$VSHNWHGLHVLFKEHLP
$XVIKUHQYRQHLQIDFKHQ
$EIUDJHQDXIGLH/HLVWXQJ
YRQ64/6HUYHUDXVZLUNHQ
„
1276XFKEHGLQJXQJHQ N|QQHQGDV$EUXIHQYRQ'DWHQ
YHU]|JHUQ
„
6XFKEHGLQJXQJ/,.( YHU]|JHUWGDV$EUXIHQYRQ'DWHQ
„
*HQDXH hEHUHLQVWLPPXQJHQRGHU%HUHLFKHN|QQHQGDV
$EUXIHQYRQ'DWHQEHVFKOHXQLJHQ
„
25'(5%<.ODXVHONDQQ GDV$EUXIHQYRQ'DWHQ
YHU]|JHUQ
****************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.
8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ
(PSIRKOHQH0HWKRGHQ
,QKDOWGLHVHU)ROLH
1HQQHQ6LHGLHHPSIRKOH
QHQ0HWKRGHQ]XP$XV
IKUHQHLQIDFKHU$EIUDJHQ
9HUZHQGHQ6LHGLH',67,1&7.ODXVHO]XP/|VFKHQGRSSHOWHU
9HUZHQGHQ6LHGLH',67,1&7.ODXVHO]XP/|VFKHQGRSSHOWHU
=HLOHQLP
=HLOHQLP 5HVXOWVHW
5HVXOWVHW
(LQVWLHJ
'LHLP)ROJHQGHQJHQDQQ
WHQHPSIRKOHQHQ0HWKRGHQ
VROOHQ6LHEHLGHU$XVIK
UXQJHLQIDFKHU$EIUDJHQ
XQWHUVWW]HQ
9HUEHVVHUQ6LHGLH9HUVWlQGOLFKNHLWHLQHV
9HUEHVVHUQ6LHGLH9HUVWlQGOLFKNHLWHLQHV 5HVXOWVHWVLQGHP
5HVXOWVHWVLQGHP
6LH6SDOWHQQDPHQ
6LH6SDOWHQQDPHQ lQGHUQ
lQGHUQ RGHU/LWHUDOHEHQXW]HQ
RGHU/LWHUDOHEHQXW]HQ
6HW]HQ6LHLQHLQHUPHKU]HLOLJHQ/LVWHPLW6SDOWHQQDPHQHLQ
6HW]HQ6LHLQHLQHUPHKU]HLOLJHQ/LVWHPLW6SDOWHQQDPHQHLQ
.RPPDYRUDOOH6SDOWHQQDPHQQLFKWDEHUYRUGHQ
.RPPDYRUDOOH6SDOWHQQDPHQQLFKWDEHUYRUGHQ HUVWHQ
HUVWHQ
****************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:
86(1RUWKZLQG
6(/(&7ILUVWQDPH$6)LUVW
ODVWQDPH$6/DVW
HPSOR\HHLG$6
(PSOR\HH,'
)520HPSOR\HHV
*2
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”
8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ
hEXQJVHLQKHLW$$EUXIHQYRQ'DWHQXQG%HDUEHLWHQGHU
5HVXOWVHWV
,QKDOWGLHVHU)ROLH
*HEHQ6LHHLQH(LQIKUXQJ
LQGLHhEXQJVHLQKHLW
(LQVWLHJ
,QGLHVHUhEXQJVHLQKHLW
ZHUGHQ6LHPLW+LOIHGHU
6(/(&7$QZHLVXQJ
64/6HUYHU'DWHQEDQNHQ
DEIUDJHQXQGGDQQGLH
5HVXOWVHWVIRUPDWLHUHQ
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG****************
(UOlXWHUQ6LHGLH/HUQ]LHOH
GHUhEXQJVHLQKHLW
/HUQ]LHOH
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.
9RUDXVVHW]XQJHQ
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.
(LQULFKWHQGHUhEXQJVHLQKHLW
Nicht erforderlich.
:HLWHUH,QIRUPDWLRQHQ
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.
8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ
6]HQDULR
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
9HUDQVFKODJWH=HLWIUGLHhEXQJVHLQKHLW0LQXWHQ
8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ
hEXQJ
$EUXIHQYRQ'DWHQ
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.
86(OLEUDU\
6(/(&7WLWOHWLWOHBQR
)520WLWOH
*2
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.
8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ
(UJHEQLV
Ihr Resultset sollte etwa aussehen wie der folgende Teil eines Resultsets.
7LWOH
WLWOHBQR
/DVWRIWKH0RKLFDQV
7KH9LOODJH:DWFK7RZHU
6HOI+HOS&RQGXFW3HUVHYHUDQFH
6RQJVRID6DYR\DUG
URZVDIIHFWHG
Ç 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.
86(OLEUDU\
6(/(&7WLWOH
)520WLWOH
:+(5(WLWOHBQR *2
(UJHEQLV
Ihr Resultset sollte etwa aussehen wie das folgende Resultset.
WLWOH
7KH1LJKW%RUQ
URZVDIIHFWHG
Ç 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.
86(OLEUDU\
6(/(&7PHPEHUBQRILQHBDVVHVVHG
)520ORDQKLVW
:+(5(ILQHBDVVHVVHG%(7:((1$1'
*2
(UJHEQLV
8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ
Ihr Resultset sollte etwa aussehen wie der folgende Teil eines Resultsets. Die
tatsächliche Anzahl der zurückgegebenen Zeilen kann variieren.
PHPEHUBQR
ILQHBDVVHVVHG
URZVDIIHFWHG
Ç 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.
86(OLEUDU\
6(/(&7DXWKRUWLWOHBQR
)520WLWOH
:+(5(DXWKRU,1
&KDUOHV'LFNHQV
-DQH$XVWHQ
*2
(UJHEQLV
Ihr Resultset sollte etwa aussehen wie das folgende Resultset.
DXWKRU
WLWOHBQR
-DQH$XVWHQ
&KDUOHV'LFNHQV
&KDUOHV'LFNHQV
-DQH$XVWHQ
-DQH$XVWHQ
URZVDIIHFWHG
Ç 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.
8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ
• 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.
86(OLEUDU\
6(/(&7WLWOHBQRWLWOH
)520WLWOH
:+(5(WLWOH/,.(
$GYHQWXUHV
*2
(UJHEQLV
Ihr Resultset sollte etwa aussehen wie das folgende Resultset.
WLWOHBQR
WLWOH
URZVDIIHFWHG
7KH$GYHQWXUHVRI5RELQ+RRG
$GYHQWXUHVRI+XFNOHEHUU\)LQQ
Ç 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.
86(OLEUDU\
6(/(&7PHPEHUBQRILQHBDVVHVVHGILQHBSDLG
)520ORDQKLVW
:+(5(ILQHBDVVHVVHG,612718//$1'ILQHBSDLG,618//
*2
(UJHEQLV
Ihr Resultset sollte etwa aussehen wie das folgende Resultset. Die Anzahl der
zurückgegebenen Zeilen kann variieren.
PHPEHUBQR
ILQHBDVVHVVHG
ILQHBSDLG
URZVDIIHFWHG
18//
18//
18//
18//
8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ
hEXQJ
%HDUEHLWHQGHU5HVXOWVHWV
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.
86(OLEUDU\
6(/(&7',67,1&7FLW\VWDWH
)520DGXOW
*2
(UJHEQLV
Ihr Resultset sollte etwa aussehen wie der folgende Teil eines Resultsets.
&LW\
VWDWH
6DOW/DNH&LW\
$WODQWD
7DOODKDVVHH
:DVKLQJWRQ
URZVDIIHFWHG
87
*$
)/
'&
Ç 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.
86(OLEUDU\
6(/(&7WLWOH
)520WLWOH
25'(5%<WLWOH
*2
8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ
(UJHEQLV
Ihr Resultset sollte etwa aussehen wie der folgende Teil eines Resultsets.
7LWOH
$7DOHRI7ZR&LWLHV
$GYHQWXUHVRI+XFNOHEHUU\)LQQ
%DOODGVRID%RKHPLDQ
&DQGLGH
URZVDIIHFWHG
Ç 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.
86(OLEUDU\
6(/(&7PHPEHUBQRLVEQILQHBDVVHVVHG
ILQHBDVVHVVHG$6
GRXEOHILQH
)520ORDQKLVW
:+(5(ILQHBDVVHVVHG,612718//
*2
(UJHEQLV
Ihr Resultset sollte etwa aussehen wie das folgende Resultset. Die tatsächliche
Anzahl der zurückgegebenen Zeilen kann variieren.
PHPEHUBQR
LVEQ
URZVDIIHFWHG
ILQHBDVVHVVHG
GRXEOHILQH
8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ
Ç 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 (+).
86(OLEUDU\
6(/(&7/2:(5ILUVWQDPHPLGGOHLQLWLDO
68%675,1*ODVWQDPH$6HPDLOBQDPH
)520PHPEHU
:+(5(ODVWQDPH DQGHUVRQ
*2
(UJHEQLV
Ihr Resultset sollte etwa aussehen wie der folgende Teil eines Resultsets. Die
Anzahl der zurückgegebenen Zeilen kann variieren.
HPDLOBQDPH
DP\DDQ
DQJHODDDQ
EULDQDDQ
FODLUDDQ
URZVDIIHFWHG
8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ
Ç 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:
7KHWLWOHLVWLWOHWLWOHQXPEHU;
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.
86(OLEUDU\
6(/(&7
7KHWLWOHLV
WLWOH
WLWOHQXPEHU
&219(57FKDUWLWOHBQR
)520WLWOH
*2
(UJHEQLV
Ihr Resultset sollte etwa aussehen wie der folgende Teil eines Resultsets.
7KHWLWOHLV/DVWRIWKH0RKLFDQVWLWOHQXPEHU
7KHWLWOHLV7KH9LOODJH:DWFK7RZHUWLWOHQXPEHU
7KHWLWOHLV6HOI+HOS&RQGXFW3HUVHYHUDQFHWLWOHQXPEHU
7KHWLWOHLV6RQJVRID6DYR\DUGWLWOHQXPEHU
7KHWLWOHLV)DOORIWKH+RXVHRI8VKHUWLWOHQXPEHU
URZVDIIHFWHG
8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ
hEXQJ
9HUZHQGHQYRQ6\VWHPIXQNWLRQHQ
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:
6(/(&7##VSLG
*2
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.)
(;(&VSBZKRQ
*2
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:
6(/(&7##YHUVLRQ
*2
2. Führen Sie die folgende Anweisung aus:
6(/(&786(5B1$0('%B1$0(##VHUYHUQDPH
*2
8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ
Ç 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:
86(OLEUDU\
6(/(&7
)520LQIRUPDWLRQBVFKHPDWDEOHV
:+(5(WDEOHBW\SH EDVHWDEOH
*2
2. Führen Sie die folgende Anweisung aus, um die Primärschlüssel- und
Fremdschlüsselspalten für die orders-Tabelle zurückzugeben:
86(1RUWKZLQG
6(/(&7
)520LQIRUPDWLRQBVFKHPDNH\BFROXPQBXVDJH
:+(5(WDEOHBQDPH RUGHUV
*2
Für welche Spalte ist ein Primärschlüssel definiert?
orderid
____________________________________________________________
____________________________________________________________
8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ
/HUQ]LHONRQWUROOH
,QKDOWGLHVHU)ROLH
9HUWLHIHQ6LHGLH/HUQ]LHOH
GLHVHU8QWHUULFKWVHLQKHLW
LQGHP6LHGLH.HUQSXQNWH
ZLHGHUKROHQ
(LQVWLHJ
'LH)UDJHQ]XU/HUQ]LHO
NRQWUROOHEH]LHKHQVLFKDXI
HLQLJHGHU6FKOVVHONRQ
]HSWHGLH,QKDOWGLHVHU
8QWHUULFKWVHLQKHLWVLQG
„
$EUXIHQYRQ'DWHQPLW+LOIHGHU6(/(&7$QZHLVXQJ
„
)LOWHUQYRQ'DWHQ
„
)RUPDWLHUHQYRQ5HVXOWVHWV
„
9HUDUEHLWHQYRQ$EIUDJHQ
„
$VSHNWHGHU6\VWHPOHLVWXQJ
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG****************
9HUZHQGHQ6LHGLHVHV6]H
QDULRXPGLH)UDJHQ]XEH
DQWZRUWHQXQGGLH7KHPHQ
GHU8QWHUULFKWVHLQKHLWGXUFK
]XJHKHQ
.OlUHQ6LHRIIHQH)UDJHQ
GHU.XUVWHLOQHKPHU]X
7KHPHQGHU8QWHUULFKWV
HLQKHLW
Sie sind der Datenbankadministrator für einen Gesundheitsfürsorgeplan. Die
physicians-Tabelle wurde mit folgenden Anweisungen erstellt:
&5($7(7$%/(GERSK\VLFLDQV
SK\VLFLDQBQRLQW,'(17,7<12718//
IBQDPHYDUFKDU12718//
OBQDPHYDUFKDU12718//
VWUHHWYDUFKDU18//
FLW\YDUFKDU18//
VWDWHYDUFKDU18//
SRVWDOBFRGHYDUFKDU18//
FRBSD\PRQH\12718//&21675$,17SK\VBFRBSD\'()$8/7
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:
:+(5(VWDWH 1<
25VWDWH :$
25VWDWH ž
Oder verwenden Sie eine WHERE-Klausel mit dem Schlüsselwort IN.
:+(5(VWDWH,1
1<
:$
9$
&$
8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ
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.
8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ
LLL
+LQZHLVHIUGHQ.XUVOHLWHU
3UlVHQWDWLRQ
0LQXWHQ
hEXQJVHLQKHLW
0LQXWHQ
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.
8QWHUODJHQXQG9RUEHUHLWXQJ
In diesem Abschnitt werden die erforderlichen Unterlagen und vorbereitenden
Aufgaben erläutert, die nötig sind, um diese Unterrichtseinheit zu unterrichten.
(UIRUGHUOLFKH8QWHUODJHQ
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.
9RUEHUHLWHQGH$XIJDEHQ
Zur Vorbereitung dieser Unterrichtseinheit gehen Sie folgendermaßen vor:
„
Lesen Sie alle Unterlagen.
„
Bearbeiten Sie alle Vorführungen.
„
Arbeiten Sie die Übungseinheit durch.
LY
8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ
6WUDWHJLHIUGLH8QWHUULFKWVHLQKHLW
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.
8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ
Y
$QSDVVXQJVLQIRUPDWLRQHQ
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.
:LFKWLJ 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.
(LQULFKWHQGHU8QWHUULFKWVHLQKHLW
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.
(LQULFKWHQGHUhEXQJVHLQKHLW
Es gibt keine besonderen Anforderungen für das Einrichten der Übungseinheit,
die die Replikation oder die Anpassung betreffen.
(UJHEQLVVHGHUhEXQJVHLQKHLW
Auf den Kursteilnehmercomputern gibt es keine Konfigurationsänderungen, die
die Replikation oder die Anpassung betreffen.
YL
8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ
This page is intentionally left blank.
8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ
hEHUVLFKW
,QKDOWGLHVHU)ROLH
*HEHQ6LHHLQHhEHUVLFKW
EHUGLH7KHPHQXQG/HUQ
]LHOHGLHVHU8QWHUULFKWV
HLQKHLW
(LQVWLHJ
%HLP$EUXIHQYRQ'DWHQ
NDQQHVVLQQYROOVHLQGLH
'DWHQ]XJUXSSLHUHQRGHU
]XVDPPHQ]XIDVVHQ
„
$XIOLVWHQGHU 723Q:HUWH
„
9HUZHQGHQYRQ$JJUHJDWIXQNWLRQHQ
„
*UXQGODJHQGHU*5283%<.ODXVHO
„
*HQHULHUHQYRQ$JJUHJDWZHUWHQLQ5HVXOWVHWV
„
9HUZHQGHQGHU&20387( XQG&20387( %<.ODXVHOQ
****************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.
8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ
$XIOLVWHQGHU723Q:HUWH
,QKDOWGLHVHU)ROLH
„
%HVFKUHLEHQ6LHZLHGLH
REHUHQQ]XVDPPHQIDVVHQ
GHQ:HUWHDXIJHOLVWHW
ZHUGHQ
„
„
(LQVWLHJ
9HUZHQGHQ6LHGDV723Q
6FKOVVHOZRUWXPQXUGLH
HUVWHQQ=HLOHQHLQHV
5HVXOWVHWVDXI]XOLVWHQ
1XUGLHHUVWHQ Q =HLOHQHLQHV 5HVXOWVHWV ZHUGHQDXIJHOLVWHW
$QJHEHQGHV%HUHLFKVGHU:HUWH LQGHU
25'(5%<.ODXVHO
hEHUHLQVWLPPHQGH:HUWH ZHUGHQ]XUFNJHJHEHQZHQQ
:,7+7,(6YHUZHQGHWZLUG
Beispiel
Beispiel 11
86(1RUWKZLQG
86(1RUWKZLQG
6(/(&7723RUGHULGSURGXFWLGTXDQWLW\
6(/(&7723RUGHULGSURGXFWLGTXDQWLW\
)520>RUGHUGHWDLOV@
)520>RUGHUGHWDLOV@
25'(5%<TXDQWLW\'(6&
25'(5%<TXDQWLW\'(6&
*2
*2
Beispiel 2
Beispiel 2
86(1RUWKZLQG
86(1RUWKZLQG
6(/(&7723:,7+7,(6RUGHULGSURGXFWLGTXDQWLW\
6(/(&7723:,7+7,(6RUGHULGSURGXFWLGTXDQWLW\
)520>RUGHUGHWDLOV@
)520>RUGHUGHWDLOV@
25'(5%<TXDQWLW\'(6&
25'(5%<TXDQWLW\'(6&
*2
*2
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG****************
+LQZHLVIUGHQ
.XUVOHLWHU
*HHLJQHWH,QGL]HVN|QQHQ
GLH/HLVWXQJVIlKLJNHLWYRQ
6RUWLHUXQJHQXQG*UXSSLH
UXQJHQHUK|KHQ,QGLHVHP
.XUVZLUGGDV(UVWHOOHQYRQ
,QGL]HVQLFKWDXVIKUOLFK
EHKDQGHOW:HLWHUH,QIRUPD
WLRQHQ]XP(UVWHOOHQYRQ
,QGL]HVILQGHQ6LHLQ.XUV
$3URJUDPPLHUHQ
HLQHU0LFURVRIW
64/6HUYHU'DWHQ
EDQN
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.
$QPHUNXQJ Die WITH TIES-Klausel kann nur in Verbindung mit einer
ORDER BY-Klausel verwendet werden.
8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ
%HLVSLHO
(UJHEQLV
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.
86(1RUWKZLQG
6(/(&7723RUGHULGSURGXFWLGTXDQWLW\
)520>RUGHUGHWDLOV@
25'(5%<TXDQWLW\'(6&
*2
RUGHULG
SURGXFWLG
TXDQWLW\
URZVDIIHFWHG
%HLVSLHO
0HWKRGLVFKHU+LQZHLV
9HUJOHLFKHQ6LHGDV
IROJHQGH5HVXOWVHWPLWGHP
5HVXOWVHWDXV%HLVSLHO
(UJHEQLV
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.
86(1RUWKZLQG
6(/(&7723:,7+7,(6RUGHULGSURGXFWLGTXDQWLW\
)520>RUGHUGHWDLOV@
25'(5%<TXDQWLW\'(6&
*2
RUGHULG
SURGXFWLG
TXDQWLW\
URZVDIIHFWHG
8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ
‹ 9HUZHQGHQYRQ$JJUHJDWIXQNWLRQHQ
,QKDOWGLHVHU)ROLH
)KUHQ6LHGLH9HUZHQGXQJ
YRQ$JJUHJDWIXQNWLRQHQ
EHLP(UVWHOOHQYRQ=XVDP
PHQIDVVXQJVGDWHQYRU
Aggregatfunktion
Aggregatfunktion
(LQVWLHJ
9HUZHQGHQ6LH$JJUHJDW
IXQNWLRQHQXP6SDOWHQZHUWH
]XEHUHFKQHQXQGXPGLHVH
:HUWHLQV5HVXOWVHWHLQ]X
VFKOLH‰HQ
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.
7LSS 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.
8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ
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.
7HLOV\QWD[
SELECT [ ALL | DISTINCT ]
[ TOP n [PERCENT] [ WITH TIES] ] <select_list>
[ INTO new_table ]
[ FROM <table_sources> ]
[ 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]
]
%HLVSLHO
In diesem Beispiel wird der durchschnittliche Einheitenpreis aller Produkte in
der products-Tabelle berechnet.
(UJHEQLV
86(1RUWKZLQG
6(/(&7$9*XQLWSULFH
)520SURGXFWV
*2
URZVDIIHFWHG
%HLVSLHO
(UJHEQLV
In diesem Beispiel werden alle Zeilen in der quantity-Spalte zur order detailsTabelle hinzugefügt.
86(1RUWKZLQG
6(/(&7680TXDQWLW\
)520>RUGHUGHWDLOV@
*2
URZVDIIHFWHG
8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ
9HUZHQGHQYRQ$JJUHJDWIXQNWLRQHQPLW18//:HUWHQ
,QKDOWGLHVHU)ROLH
(UOlXWHUQ6LHGLH9HUKDO
WHQVZHLVHYRQ18//
:HUWHQZHQQVLHLQ
$JJUHJDWIXQNWLRQHQ
YHUZHQGHWZHUGHQ
(LQVWLHJ
„
'LHPHLVWHQ$JJUHJDWIXQNWLRQHQLJQRULHUHQ18//:HUWH
„
'LH)XQNWLRQ &2817]lKOWDXFK=HLOHQPLW
18//:HUWHQ
86(1RUWKZLQG
86(1RUWKZLQG
6(/(&7&2817
6(/(&7&2817
)520HPSOR\HHV
)520HPSOR\HHV
*2
*2
%HLGHU9HUZHQGXQJYRQ
$JJUHJDWIXQNWLRQHQPLW
18//:HUWHQNDQQHV]X
XQHUZDUWHWHQ(UJHEQLVVHQ
NRPPHQ
86(1RUWKZLQG
86(1RUWKZLQG
6(/(&7&2817UHSRUWVWR
6(/(&7&2817UHSRUWVWR
)520HPSOR\HHV
)520HPSOR\HHV
*2
*2
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:
%HLVSLHO
(UJHEQLV
„
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.
86(1RUWKZLQG
6(/(&7&2817
)520HPSOR\HHV
*2
URZVDIIHFWHG
%HLVSLHO
(UJHEQLV
8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ
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.
86(1RUWKZLQG
6(/(&7&2817UHSRUWVWR
)520HPSOR\HHV
*2
URZVDIIHFWHG
8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ
‹ *UXQGODJHQGHU*5283%<.ODXVHO
,QKDOWGLHVHU)ROLH
*HEHQ6LHHLQHhEHUVLFKW
EHUGLH.ODXVHOQPLWGHQHQ
:HUWHIUHLQH6SDOWH]X
VDPPHQJHIDVVWZHUGHQ
(LQVWLHJ
,QGHU5HJHOZHUGHQ$JJUH
JDWIXQNWLRQHQLQ9HUELQGXQJ
PLWGHU*5283%<XQGGHU
+$9,1*.ODXVHOYHUZHQGHW
„
9HUZHQGHQGHU*5283%<.ODXVHO
„
9HUZHQGHQGHU*5283 %<.ODXVHOPLWGHU
+$9,1*.ODXVHO
****************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.
$QPHUNXQJ Das Verwenden der GROUP BY-Klausel stellt keine Sortierreihenfolge sicher. Wenn die Ergebnisse sortiert werden sollen, schließen Sie
die ORDER BY-Klausel ein.
8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ
9HUZHQGHQGHU*5283%<.ODXVHO
86(1RUWKZLQG
86(1RUWKZLQG
6(/(&7SURGXFWLGRUGHULG
6(/(&7SURGXFWLGRUGHULG
TXDQWLW\
TXDQWLW\
)520RUGHUKLVW
)520RUGHUKLVW
*2
*2
,QKDOWGLHVHU)ROLH
(UOlXWHUQ6LHZLH'DWHQPLW
GHU*5283%<.ODXVHO
]XVDPPHQJHIDVVWZHUGHQ
(LQVWLHJ
86(1RUWKZLQG
86(1RUWKZLQG
6(/(&7SURGXFWLG
6(/(&7SURGXFWLG
680TXDQWLW\$6WRWDOBTXDQWLW\
680TXDQWLW\$6WRWDOBTXDQWLW\
)520RUGHUKLVW
)520RUGHUKLVW
*5283%<SURGXFWLG
*5283%<SURGXFWLG
*2
*2
productid
orderid quantity
quantity
productid orderid
'LH*5283%<.ODXVHO
NDQQLQ6SDOWHQRGHU$XV
GUFNHQYHUZHQGHWZHUGHQ
XP=HLOHQLQ*UXSSHQ]X
RUJDQLVLHUHQXQGXPGLHVH
*UXSSHQ]XVDPPHQ]X
IDVVHQ
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
1XU=HLOHQGLHGLH
%HGLQJXQJHQGHU
:+(5(.ODXVHO
HUIOOHQZHUGHQ
JUXSSLHUW
11
15
15
22
33
35
35
45
45
productid
productid total_quantity
total_quantity
22
35
35
86(1RUWKZLQG
86(1RUWKZLQG
6(/(&7SURGXFWLG
6(/(&7SURGXFWLG
680TXDQWLW\$6WRWDOBTXDQWLW\
680TXDQWLW\$6WRWDOBTXDQWLW\
)520RUGHUKLVW
)520RUGHUKLVW
:+(5(SURGXFWLG
:+(5(SURGXFWLG *5283%<SURGXFWLG
*5283%<SURGXFWLG
*2
*2
****************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.
0HWKRGLVFKHU+LQZHLV
'LHRUGHUKLVW7DEHOOH
ZXUGHVSH]LHOOIUGLH%HL
VSLHOHLQGLHVHU8QWHUULFKWV
HLQKHLWHUVWHOOW6LHEHILQGHW
VLFKDXFKDXIGHU.XUVWHLO
QHKPHU&'
9HUJOHLFKHQ6LHGLH5HVXOW
VHWVDXIGHU)ROLH'LHOLQNH
7DEHOOHOLVWHWDOOH=HLOHQLQ
GHURUGHUKLVW7DEHOOHDXI
,QGHU7DEHOOHREHQUHFKWV
ZLUGGLH*5283%<.ODXVHO
YHUZHQGHWXPGLH'DWHQ
QDFKGHUSURGXFWLG6SDOWH
]XJUXSSLHUHQXQGGLH*H
VDPWPHQJHDQ]XJHEHQGLH
YRQMHGHU*UXSSHEHVWHOOW
ZXUGH
,QGHU7DEHOOHXQWHQUHFKWV
ZHUGHQGLH*5283%<
.ODXVHOXQGGLH:+(5(
.ODXVHOYHUZHQGHWXPGLH
$Q]DKOGHU]XUFNJHJH
EHQHQ=HLOHQZHLWHUHLQ]X
VFKUlQNHQ
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.
8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ
„
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.
$QPHUNXQJ 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.
%HLVSLHO
(UJHEQLV
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.
86(1RUWKZLQG
6(/(&7SURGXFWLG680TXDQWLW\$6WRWDOBTXDQWLW\
)520RUGHUKLVW
*5283%<SURGXFWLG
*2
SURGXFWLG
WRWDOBTXDQWLW\
URZVDIIHFWHG
%HLVSLHO
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.
86(1RUWKZLQG
6(/(&7SURGXFWLG680TXDQWLW\$6WRWDOBTXDQWLW\
)520RUGHUKLVW
:+(5(SURGXFWLG *5283%<SURGXFWLG
*2
(UJHEQLV
SURGXFWLG
WRWDOBTXDQWLW\
URZVDIIHFWHG
%HLVSLHO
(UJHEQLV
8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ
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.
86(1RUWKZLQG
6(/(&7SURGXFWLG680TXDQWLW\$6WRWDOBTXDQWLW\
)520>RUGHUGHWDLOV@
*5283%<SURGXFWLG
*2
SURGXFWLG
WRWDOBTXDQWLW\
URZVDIIHFWHG
8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ
9HUZHQGHQGHU*5283%<.ODXVHOPLWGHU+$9,1*.ODXVHO
,QKDOWGLHVHU)ROLH
86(1RUWKZLQG
86(1RUWKZLQG
6(/(&7SURGXFWLGRUGHULG
6(/(&7SURGXFWLGRUGHULG
TXDQWLW\
TXDQWLW\
)520RUGHUKLVW
)520RUGHUKLVW
*2
*2
(UNOlUHQ6LHGLH9HUZHQ
GXQJGHU+$9,1*.ODXVHO
EHLPZHLWHUHQ=XVDPPHQ
IDVVHQYRQ'DWHQDXIGHU
*UXQGODJHYRQ*UXSSHQ
productid
productid orderid
orderid quantity
quantity
(LQVWLHJ
0LWGHU+$9,1*.ODXVHO
N|QQHQ6LH%HGLQJXQJHQIU
*UXSSHQIHVWOHJHQGLHLQ
HLQ5HVXOWVHWHLQJH
VFKORVVHQZHUGHQVROOHQ
11
11
11
11
55
10
10
22
22
11
22
10
10
25
25
33
33
11
22
15
15
30
30
86(1RUWKZLQG
6(/(&7SURGXFWLG680TXDQWLW\
6(/(&7SURGXFWLG680TXDQWLW\
$6WRWDOBTXDQWLW\
$6WRWDOBTXDQWLW\
)520RUGHUKLVW
*5283%<SURGXFWLG
*5283%<SURGXFWLG
+$9,1*680TXDQWLW\!
+$9,1*680TXDQWLW\! *2
productid
productid total_quantity
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.
0HWKRGLVFKHU+LQZHLV
:HLVHQ6LHDXIGLH6XFK
EHGLQJXQJKLQGLHLQGHU
+$9,1*.ODXVHOLP%HLVSLHO
DXIGHU)ROLHGHILQLHUWLVW
,QGHUUHFKWHQ7DEHOOH
ZHUGHQGLHJHVDPWHQ'DWHQ
GHUSURGXFWLG6SDOWH
JUXSSLHUWHVZLUGMHGRFKQXU
GLH*HVDPWVXPPHDQJH
]HLJWGLHIUGLH*UXSSHQ
EHVWHOOWZLUGGLHGLH6XFK
EHGLQJXQJLQGHU+$9,1*
.ODXVHOHUIOOHQ
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.
%HLVSLHO
(UJHEQLV
8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ
In diesem Beispiel werden alle Gruppen von Produkten aus der orderhistTabelle aufgelistet, für die 30 oder mehr Einheiten bestellt wurden.
86(1RUWKZLQG
6(/(&7SURGXFWLG680TXDQWLW\$6WRWDOBTXDQWLW\
)520RUGHUKLVW
*5283%<SURGXFWLG
+$9,1*680TXDQWLW\! *2
SURGXFWLG
WRWDOBTXDQWLW\
URZVDIIHFWHG
%HLVSLHO
(UJHEQLV
In diesem Beispiel werden alle Product IDs und die Menge der Produkte aufgelistet, von denen mehr als 1.200 Einheiten bestellt wurden.
86(1RUWKZLQG
6(/(&7SURGXFWLG680TXDQWLW\$6WRWDOBTXDQWLW\
)520>RUGHUGHWDLOV@
*5283%<SURGXFWLG
+$9,1*680TXDQWLW\!
*2
SURGXFWLG
WRWDOBTXDQWLW\
URZVDIIHFWHG
8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ
‹ *HQHULHUHQYRQ$JJUHJDWZHUWHQLQ5HVXOWVHWV
,QKDOWGLHVHU)ROLH
*HEHQ6LHHLQHhEHUVLFKW
EHUGDV=XVDPPHQIDVVHQ
YRQ:HUWHQIUHLQH7DEHOOH
PLW+LOIHGHV52//83XQG
&8%(2SHUDWRUV
(LQVWLHJ
9HUZHQGHQ6LHGLH
*5283%<.ODXVHOPLW
GHP52//83XQGGHP
&8%(2SHUDWRUXP
$JJUHJDWZHUWHLQ5HVXOWVHWV
]XJHQHULHUHQ'DEHL
ZHUGHQ6LHZDKUVFKHLQOLFK
GLH*5283,1*)XQNWLRQ
]XP,QWHUSUHWLHUHQGHV
5HVXOWVHWVYHUZHQGHQ
„
9HUZHQGHQGHU*5283 %<.ODXVHOPLWGHP
52//832SHUDWRU
„
9HUZHQGHQGHU*5283 %<.ODXVHOPLWGHP
&8%(2SHUDWRU
„
9HUZHQGHQGHU*5283,1*)XQNWLRQ
****************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.
8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ
9HUZHQGHQGHU*5283%<.ODXVHOPLWGHP52//832SHUDWRU
86(1RUWKZLQG
86(1RUWKZLQG
6(/(&7SURGXFWLGRUGHULG680TXDQWLW\$6WRWDOBTXDQWLW\
6(/(&7SURGXFWLGRUGHULG680TXDQWLW\$6WRWDOBTXDQWLW\
)520RUGHUKLVW
)520RUGHUKLVW
*5283%<SURGXFWLGRUGHULG
*5283%<SURGXFWLGRUGHULG
:,7+52//83
:,7+52//83
25'(5%<SURGXFWLGRUGHULG
25'(5%<SURGXFWLGRUGHULG
*2
*2
,QKDOWGLHVHU)ROLH
(UOlXWHUQ6LHGLH9HUZHQ
GXQJGHV52//832SHUD
WRUV]XP=XVDPPHQIDVVHQ
YRQ'DWHQLQHLQHU7DEHOOH
productid
orderid total_quantity
total_quantity
productid orderid
(LQVWLHJ
9HUZHQGHQ6LHGHQ
52//832SHUDWRU]XP
=XVDPPHQIDVVHQYRQ
'DWHQLQHLQHU7DEHOOH
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
*HVDPWVXPPH
*HVDPWVXPPH
=XVDPPHQIDVVHQQXUYRQ=HLOHQIUSURGXFWLG
=XVDPPHQIDVVHQQXUYRQ=HLOHQIUSURGXFWLG
'HWDLOOLHUWHU:HUWIUSURGXFWLG
'HWDLOOLHUWHU:HUWIUSURGXFWLGRUGHULG
RUGHULG
'HWDLOOLHUWHU:HUWIUSURGXFWLG
'HWDLOOLHUWHU:HUWIUSURGXFWLGRUGHULG
RUGHULG
=XVDPPHQIDVVHQQXU
=XVDPPHQIDVVHQQXUYRQ=HLOHQIUSURGXFWLG
YRQ=HLOHQIUSURGXFWLG
'HWDLOOLHUWHU:HUWIUSURGXFWLG
'HWDLOOLHUWHU:HUWIUSURGXFWLGRUGHULG
RUGHULG
=XVDPPHQIDVVHQQXU
=XVDPPHQIDVVHQQXUYRQ=HLOHQIUSURGXFWLG
YRQ=HLOHQIUSURGXFWLG
'HWDLOOLHUWHU:HUWIUSURGXFWLG
'HWDLOOLHUWHU:HUWIUSURGXFWLGRUGHULG
RUGHULG
'HWDLOOLHUWHU:HUWIUSURGXFWLG
'HWDLOOLHUWHU:HUWIUSURGXFWLGRUGHULG
RUGHULG
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG****************
0HWKRGLVFKHU+LQZHLV
:HLVHQ6LHGDUDXIKLQGDVV
GLH18//:HUWHLP%HLVSLHO
DXIGHU)ROLHDQ]HLJHQGDVV
GLHVHVSH]LHOOHQ=HLOHQQXU
HUVWHOOWZXUGHQZHLOGHU
52//832SHUDWRUYHU
ZHQGHWZXUGH
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.
8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ
%HLVSLHO
0HWKRGLVFKHU+LQZHLV
'LH%HLVSLHOH]XGLHVHP
7KHPDEDXHQDXIHLQDQGHU
DXIVRGDVVGLH.XUVWHLO
QHKPHUQDFKYROO]LHKHQ
N|QQHQZLH52//83DXI
*5283%<DXIEDXW
(UJHEQLV
In diesem Beispiel werden alle Zeilen aus der orderhist-Tabelle und die
zusammengefassten Mengenwerte für jedes Produkt aufgelistet.
86(1RUWKZLQG
6(/(&7SURGXFWLGRUGHULG680TXDQWLW\$6WRWDOBTXDQWLW\
)520RUGHUKLVW
*5283%<SURGXFWLGRUGHULG
:,7+52//83
25'(5%<SURGXFWLGRUGHULG
*2
SURGXFWLG
RUGHULG
WRWDOBTXDQWLW\
18//
URZVDIIHFWHG
%HLVSLHO
(UJHEQLV
18//
18//
18//
18//
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.
86(1RUWKZLQG
6(/(&7RUGHULGSURGXFWLG680TXDQWLW\$6WRWDOBTXDQWLW\
)520>RUGHUGHWDLOV@
:+(5(RUGHULG
*5283%<RUGHULGSURGXFWLG
25'(5%<RUGHULGSURGXFWLG
*2
RUGHULG
SURGXFWLG
WRWDOBTXDQWLW\
URZVDIIHFWHG
%HLVSLHO
8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ
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.
(UJHEQLV
86(1RUWKZLQG
6(/(&7RUGHULGSURGXFWLG680TXDQWLW\$6WRWDOBTXDQWLW\
)520>RUGHUGHWDLOV@
:+(5(RUGHULG
*5283%<RUGHULGSURGXFWLG
:,7+52//83
25'(5%<RUGHULGSURGXFWLG
*2
RUGHULG
SURGXFWLG
WRWDOBTXDQWLW\
18//
URZVDIIHFWHG
18//
18//
18//
8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ
9HUZHQGHQGHU*5283%<.ODXVHOPLWGHP&8%(2SHUDWRU
86(1RUWKZLQG
86(1RUWKZLQG
6(/(&7SURGXFWLGRUGHULG680TXDQWLW\$6WRWDOBTXDQWLW\
6(/(&7SURGXFWLGRUGHULG680TXDQWLW\$6WRWDOBTXDQWLW\
)520RUGHUKLVW
)520RUGHUKLVW
*5283%<SURGXFWLGRUGHULG
*5283%<SURGXFWLGRUGHULG
:,7+&8%(
:,7+&8%(
25'(5%<SURGXFWLGRUGHULG
25'(5%<SURGXFWLGRUGHULG
*2
*2
productid
orderid total_quantity
total_quantity Beschreibung
productid orderid
*HVDPWVXPPH
NULL
NULL
95
*HVDPWVXPPH
NULL
95
NULL
,QKDOWGLHVHU)ROLH
(UOlXWHUQ6LHGLH9HUZHQ
GXQJGHV&8%(2SHUDWRUV
]XP=XVDPPHQIDVVHQYRQ
'DWHQLQHLQHU7DEHOOH
(LQVWLHJ
'HU&8%(2SHUDWRUXQWHU
VFKHLGHWVLFKYRP52//83
2SHUDWRUGDKLQJHKHQGGDVV
HUDXIGHU*UXQGODJHGHU
*5283%<.ODXVHODOOH
P|JOLFKHQ.RPELQDWLRQHQ
YRQ*UXSSHQHUVWHOOWXQG
GDQQGLH$JJUHJDW
IXQNWLRQHQDQZHQGHW
'HU &8%(2SHUDWRU
HU]HXJW]ZHL
=XVDPPHQIDVVXQJV
ZHUWHPHKUDOVGHU
52//832SHUDWRU
NULL
NULL
NULL
NULL
11
11
11
22
22
22
33
33
33
11
22
30
30
65
65
=XVDPPHQIDVVHQQXU
=XVDPPHQIDVVHQQXUYRQ=HLOHQIURUGHULG
YRQ=HLOHQIURUGHULG =XVDPPHQIDVVHQQXU
=XVDPPHQIDVVHQQXUYRQ=HLOHQIURUGHULG
YRQ=HLOHQIURUGHULG 22
NULL
NULL
11
10
10
35
35
'HWDLOOLHUWHU:HUWIUSURGXFWLG
'HWDLOOLHUWHU:HUWIUSURGXFWLGRUGHULG
RUGHULG =XVDPPHQIDVVHQQXU
=XVDPPHQIDVVHQQXUYRQ=HLOHQIUSURGXFWLG
YRQ=HLOHQIUSURGXFWLG NULL
NULL
11
22
NULL
NULL
11
22
15
15
55
10
10
25
25
45
45
15
15
30
30
=XVDPPHQIDVVHQQXU
=XVDPPHQIDVVHQQXUYRQ=HLOHQIUSURGXFWLG
YRQ=HLOHQIUSURGXFWLG 'HWDLOOLHUWHU:HUWIUSURGXFWLG
'HWDLOOLHUWHU:HUWIUSURGXFWLGRUGHULG
RUGHULG 'HWDLOOLHUWHU:HUWIUSURGXFWLG
'HWDLOOLHUWHU:HUWIUSURGXFWLGRUGHULG
RUGHULG 'HWDLOOLHUWHU:HUWIUSURGXFWLG
RUGHULG
'HWDLOOLHUWHU:HUWIUSURGXFWLG RUGHULG =XVDPPHQIDVVHQQXU
=XVDPPHQIDVVHQQXUYRQ=HLOHQIUSURGXFWLG
YRQ=HLOHQIUSURGXFWLG 'HWDLOOLHUWHU:HUWIUSURGXFWLG
'HWDLOOLHUWHU:HUWIUSURGXFWLGRUGHULG
RUGHULG 'HWDLOOLHUWHU:HUWIUSURGXFWLG
'HWDLOOLHUWHU:HUWIUSURGXFWLGRUGHULG
RUGHULG ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG****************
0HWKRGLVFKHU+LQZHLV
:HLVHQ6LHGDUDXIKLQGDVV
GLH18//:HUWHLP5HVXOW
VHWGHV%HLVSLHOVDXIGHU
)ROLHDQ]HLJHQGDVVGLHVH
VSH]LHOOHQ=HLOHQHUVWHOOW
ZXUGHQGDGHU&8%(
2SHUDWRUYHUZHQGHWZXUGH
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.
%HLVSLHO
(UJHEQLV
8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ
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.
86(1RUWKZLQG
6(/(&7SURGXFWLGRUGHULG680TXDQWLW\$6WRWDOBTXDQWLW\
)520RUGHUKLVW
*5283%<SURGXFWLGRUGHULG
:,7+&8%(
25'(5%<SURGXFWLGRUGHULG
*2
SURGXFWLG
RUGHULG
WRWDOBTXDQWLW\
18//
18//
18//
URZVDIIHFWHG
18//
18//
18//
18//
8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ
9HUZHQGHQGHU*5283,1*)XQNWLRQ
6(/(&7SURGXFWLG*5283,1*SURGXFWLG
6(/(&7SURGXFWLG*5283,1*SURGXFWLG
RUGHULG*5283,1*RUGHULG
RUGHULG*5283,1*RUGHULG
680TXDQWLW\$6WRWDOBTXDQWLW\
680TXDQWLW\$6WRWDOBTXDQWLW\
)520RUGHUKLVW
)520RUGHUKLVW
*5283%<SURGXFWLGRUGHULG
*5283%<SURGXFWLGRUGHULG
:,7+&8%(
:,7+&8%(
25'(5%<SURGXFWLGRUGHULG
25'(5%<SURGXFWLGRUGHULG
*2
*2
,QKDOWGLHVHU)ROLH
(UNOlUHQ6LHGLH)XQNWLRQV
ZHLVHGHU*5283,1*
)XQNWLRQ
(LQVWLHJ
productid
9HUZHQGHQ6LHGLH
*5283,1*)XQNWLRQ
HQWZHGHUPLWGHP52//83
RGHUGHP&8%(2SHUDWRU
XPGLHGHWDLOOLHUWHQXQG]X
VDPPHQIDVVHQGHQ:HUWH
LP5HVXOWVHW]X
XQWHUVFKHLGHQ
VWHKWIU]XVDPPHQIDVVHQGH
:HUWH LQGHUYRUKHUJHKHQGHQ
6SDOWH
VWHKW IUGHWDLOOLHUWH:HUWH
LQ GHUYRUKHUJHKHQGHQ6SDOWH
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****************
0HWKRGLVFKHU+LQZHLV
:HLVHQ6LHGDUDXIKLQGDVV
VLFKGDV5HVXOWVHWLP%HL
VSLHODXIGHU)ROLHQXULQ
HLQHPZLFKWLJHQ3XQNWYRP
5HVXOWVHWGHUYRUKHULJHQ
)ROLHXQWHUVFKHLGHW'LH
*5283,1*)XQNWLRQZLUG
YHUZHQGHWXQG]ZHL]XVlW]
OLFKH6SDOWHQVLQGLP5HVXOW
VHWHLQJHVFKORVVHQ'HU
:HUWVWHKWIU]XVDPPHQ
IDVVHQGH:HUWHXQGIU
GHWDLOOLHUWH:HUWHLQGHU
YRUKHULJHQ6SDOWH
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.
%HLVSLHO
(UJHEQLV
8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ
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.
86(1RUWKZLQG
6(/(&7SURGXFWLG*5283,1*SURGXFWLG
RUGHULG*5283,1*RUGHULG
680TXDQWLW\$6WRWDOBTXDQWLW\
)520RUGHUKLVW
*5283%<SURGXFWLGRUGHULG
:,7+&8%(
25'(5%<SURGXFWLGRUGHULG
*2
SURGXFWLG
RUGHULG
WRWDOBTXDQWLW\
18//
18//
18//
URZVDIIHFWHG
18//
18//
18//
18//
8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ
%HLVSLHO
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.
(UJHEQLV
86(1RUWKZLQG
6(/(&7RUGHULG*5283,1*RUGHULGSURGXFWLG
*5283,1*SURGXFWLG680TXDQWLW\$6WRWDOBTXDQWLW\
)520>RUGHUGHWDLOV@
:+(5(RUGHULG
*5283%<RUGHULGSURGXFWLG
:,7+&8%(
25'(5%<RUGHULGSURGXFWLG
*2
RUGHULG
SURGXFWLG
WRWDOBTXDQWLW\
18//
18//
18//
18//
18//
18//
18//
18//
18//
URZVDIIHFWHG
8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ
9HUZHQGHQGHU&20387(XQG&20387(%<.ODXVHOQ
COMPUTE
,QKDOWGLHVHU)ROLH
COMPUTE BY
86(1RUWKZLQG
86(1RUWKZLQG
86(1RUWKZLQG
86(1RUWKZLQG
6(/(&7SURGXFWLGRUGHULG
6(/(&7SURGXFWLGRUGHULGTXDQWLW\
6(/(&7SURGXFWLGRUGHULGTXDQWLW\
6(/(&7SURGXFWLGRUGHULG
TXDQWLW\
)520RUGHUKLVW
TXDQWLW\
)520RUGHUKLVW
)520RUGHUKLVW
25'(5%<SURGXFWLGRUGHULG
)520RUGHUKLVW
25'(5%<SURGXFWLGRUGHULG
25'(5%<SURGXFWLGRUGHULG
&20387(680TXDQWLW\%<SURGXFWLG
&20387(680TXDQWLW\%<SURGXFWLG
25'(5%<SURGXFWLGRUGHULG
&20387(680TXDQWLW\
&20387(680TXDQWLW\
&20387(680TXDQWLW\
&20387(680TXDQWLW\
*2
*2
*2
*2
productid orderid quantity
(UOlXWHUQ6LH]XZHOFKHP
=ZHFNGLH&20387(XQG
&20387(%<.ODXVHOQ
YHUZHQGHWZHUGHQ
(LQVWLHJ
productid
orderid quantity
quantity
productid orderid
2EZRKOGLH&20387(XQG
GLH&20387(%<.ODXVHO
QLFKWGHP$16,6WDQGDUG
HQWVSUHFKHQP|FKWHQ6LH
VLHP|JOLFKHUZHLVHEHLP
'UXFNHQHLQIDFKHU%HULFKWH
RGHUEHLPhEHUSUIHQGHU
(UJHEQLVVHYRQ$QZHQGXQ
JHQYHUZHQGHQGLH6LH
VFKUHLEHQ
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****************
0HWKRGLVFKHU+LQZHLV
'LHVH.ODXVHOQVROOWHQQLFKW
EHLP(UVWHOOHQYRQ$QZHQ
GXQJHQYHUZHQGHWZHUGHQ
6LHN|QQHQMHGRFKEHLP
7HVWHQYRQ$QZHQGXQJHQ
QW]OLFKVHLQ
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:
0HWKRGLVFKHU+LQZHLV
'LHWH[WQWH[WRGHU
LPDJH'DWHQW\SHQN|QQHQ
QXULQHLQHU&20387(
RGHU&20387(%<.ODXVHO
YHUZHQGHWZHUGHQZHQQ
GLH.ODXVHO7HLOHLQHU
6NDODUIXQNWLRQLVW
„
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.
8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ
*HQHULHUHQHLQHV%HULFKWVPLWGHWDLOOLHUWHQXQG]XVDPPHQIDVVHQGHQ
:HUWHQIUHLQH6SDOWH
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:
%HLVSLHO
(UJHEQLV
„
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.
86(1RUWKZLQG
6(/(&7SURGXFWLGRUGHULGTXDQWLW\
)520RUGHUKLVW
25'(5%<SURGXFWLGRUGHULG
&20387(680TXDQWLW\
*2
SURGXFWLG
RUGHULG
URZVDIIHFWHG
WRWDOBTXDQWLW\
VXP
*HQHULHUHQHLQHV%HULFKWVPLWGHWDLOOLHUWHQXQG]XVDPPHQIDVVHQGHQ
:HUWHQIU7HLOPHQJHQYRQ*UXSSHQ
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.
8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ
„
%HLVSLHO
(UJHEQLV
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.
86(1RUWKZLQG
6(/(&7SURGXFWLGRUGHULGTXDQWLW\
)520RUGHUKLVW
25'(5%<SURGXFWLGRUGHULG
&20387(680TXDQWLW\%<SURGXFWLG
&20387(680TXDQWLW\
*2
SURGXFWLG
RUGHULG
WRWDOBTXDQWLW\
VXP
URZVDIIHFWHG
VXP
VXP
VXP
8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ
(PSIRKOHQH0HWKRGHQ
,QKDOWGLHVHU)ROLH
/LVWHQ6LHGLHHPSIRKOHQHQ
0HWKRGHQ]XP=XVDPPHQ
IDVVHQYRQ'DWHQDXI
,QGL]LHUHQ6LH
,QGL]LHUHQ6LH KlXILJDJJUHJLHUWH6SDOWHQ
KlXILJDJJUHJLHUWH6SDOWHQ
(LQVWLHJ
9HUPHLGHQ6LHGDV9HUZHQGHQYRQ$JJUHJDWIXQNWLRQHQEHL
9HUPHLGHQ6LHGDV9HUZHQGHQYRQ$JJUHJDWIXQNWLRQHQEHL
6SDOWHQPLW
6SDOWHQPLW 18//:HUWHQ
18//:HUWHQ
8P.ODXVHOQXQG2SHUD
WRUHQEHLP=XVDPPHQ
IDVVHQYRQ'DWHQRSWLPDO
QXW]HQ]XN|QQHQVROOWHQ
6LHGLHIROJHQGHQHPSIRK
OHQHQ0HWKRGHQEHUFN
VLFKWLJHQ
9HUZHQGHQ6LHGLH
9HUZHQGHQ6LHGLH 25'(5%<.ODXVHOXPHLQH6RUWLHUUHLKHQIROJH
25'(5%<.ODXVHOXPHLQH6RUWLHUUHLKHQIROJH
VLFKHU]XVWHOOHQ
VLFKHU]XVWHOOHQ
9HUZHQGHQ6LHGHQ
9HUZHQGHQ6LHGHQ 52//832SHUDWRUDQVWHOOH
52//832SHUDWRUDQVWHOOH GHV&8%(2SHUDWRUV
GHV&8%(2SHUDWRUV
9HUPHLGHQ6LHGDV
9HUPHLGHQ6LHGDV 9HUZHQGHQGHU
9HUZHQGHQGHU &20387(
&20387( RGHU
RGHU
&20387(%<.ODXVHOQ
&20387(%<.ODXVHOQ
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG****************
+LQZHLVIUGHQ
.XUVOHLWHU
,QGLHVHP.XUVZLUGGDV
(UVWHOOHQYRQ,QGL]HVQLFKW
DXVIKUOLFKEHKDQGHOW:HL
WHUH,QIRUPDWLRQHQ]XP(U
VWHOOHQYRQ,QGL]HVILQGHQ
6LHLP.XUV$
3URJUDPPLHUHQHLQHU
0LFURVRIW64/6HUYHU
'DWHQEDQN
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“
8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ
hEXQJVHLQKHLW$*UXSSLHUHQXQG=XVDPPHQIDVVHQ
YRQ'DWHQ
,QKDOWGLHVHU)ROLH
%HUHLWHQ6LHGLH.XUVWHLO
QHKPHUDXIGLHhEXQJV
HLQKHLWYRU
(LQVWLHJ
,QGHQIROJHQGHQhEXQJHQ
ZHUGHQ6LH'DWHQJUXSSLH
UHQXQG]XVDPPHQIDVVHQ
LQGHP6LH$JJUHJDWIXQN
WLRQHQ]XVDPPHQPLWGHQ
*5283%<+$9,1*
&20387(XQG
&20387(%<.ODXVHOQ
XQGGHQ52//83XQG
&8%(2SHUDWRUHQYHU
ZHQGHQ
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG****************
(UOlXWHUQ6LHGLH/HUQ]LHOH
GHUhEXQJVHLQKHLW
/HUQ]LHOH
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.
9RUDXVVHW]XQJHQ
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.
(LQULFKWHQGHUhEXQJVHLQKHLW
Nicht erforderlich.
:HLWHUH,QIRUPDWLRQHQ
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“.
8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ
Daneben sind die folgenden Informationsquellen verfügbar:
„
Das Northwind-Datenbankschema.
„
Die SQL Server-Onlinedokumentation.
6]HQDULR
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
9HUDQVFKODJWH=HLWIUGLHhEXQJVHLQKHLW0LQXWHQ
8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ
hEXQJ
9HUZHQGHQGHV723Q6FKOVVHOZRUWHV
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.
86(1RUWKZLQG
6(/(&7723
RUGHULG
XQLWSULFHTXDQWLW\$6WRWDOVDOH
)520>RUGHUGHWDLOV@
25'(5%<XQLWSULFHTXDQWLW\'(6&
*2
6. Führen Sie die Abfrage aus, um zu überprüfen, ob zehn Zeilen zurückgegeben werden.
8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ
(UJHEQLV
Das Ergebnis ähnelt dem folgenden Resultset.
RUGHULG
WRWDOVDOH
URZVDIIHFWHG
Ç 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.
86(1RUWKZLQG
6(/(&7723:,7+7,(6
RUGHULG
XQLWSULFHTXDQWLW\$6WRWDOVDOH
)520>RUGHUGHWDLOV@
25'(5%<XQLWSULFHTXDQWLW\'(6&
*2
2. Führen Sie die Abfrage aus, um zu überprüfen, ob elf Zeilen zurückgegeben
werden.
(UJHEQLV
Das Ergebnis ähnelt dem folgenden Resultset.
RUGHULG
WRWDOVDOH
URZVDIIHFWHG
8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ
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.
____________________________________________________________
____________________________________________________________
8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ
hEXQJ
9HUZHQGHQGHU*5283%<XQG+$9,1*.ODXVHO
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.
(UJHEQLV
Das Ergebnis ähnelt dem folgenden Resultset.
FDWHJRU\LG
WRWDOBTXDQWLW\
URZVDIIHFWHG
Ç 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.
86(1RUWKZLQG
6(/(&7FDWHJRU\LG680TXDQWLW\$6WRWDOBTXDQWLW\
)520>RUGHUGHWDLOV@$6RG
,11(5-2,1SURGXFWV$6S
21RGSURGXFWLG SSURGXFWLG
*5283%<FDWHJRU\LG
*2
2. Führen Sie die Abfrage aus, und überprüfen Sie die Ergebnisse.
(UJHEQLV
8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ
Das Ergebnis ähnelt dem folgenden Resultset.
FDWHJRU\LG
WRWDOBTXDQWLW\
URZVDIIHFWHG
Ç 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.
86(1RUWKZLQG
6(/(&7RUGHULG680TXDQWLW\$6WRWDOBTXDQWLW\
)520>RUGHUGHWDLOV@$6RG
,11(5-2,1SURGXFWV$6S
21RGSURGXFWLG SSURGXFWLG
*5283%<RUGHULG
*2
2. Führen Sie die Abfrage aus, und überprüfen Sie die Ergebnisse.
(UJHEQLV
Das Ergebnis ähnelt dem folgenden Teil eines Resultsets.
RUGHUHG
WRWDOBTXDQWLW\
URZVDIIHFWHG
8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ
Ç 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.
86(1RUWKZLQG
6(/(&7RUGHULG680TXDQWLW\$6WRWDOBTXDQWLW\
)520>RUGHUGHWDLOV@$6RG
,11(5-2,1SURGXFWV$6S
21RGSURGXFWLG SSURGXFWLG
*5283%<RUGHULG
+$9,1*680TXDQWLW\!
*2
2. Führen Sie die Abfrage aus, und überprüfen Sie die Ergebnisse.
(UJHEQLV
Das Ergebnis ähnelt dem folgenden Resultset.
RUGHUHG
WRWDOBTXDQWLW\
URZVDIIHFWHG
8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ
hEXQJ
9HUZHQGHQGHV52//83XQG&8%(2SHUDWRUV
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.
86(1RUWKZLQG
6(/(&7SURGXFWLGRUGHULG680TXDQWLW\$6WRWDOBTXDQWLW\
)520>RUGHUGHWDLOV@
:+(5(SURGXFWLG *5283%<SURGXFWLGRUGHULG
:,7+52//83
25'(5%<SURGXFWLGRUGHULG
*2
3. Führen Sie die Abfrage aus, und überprüfen Sie die Ergebnisse. Notieren
Sie sich die Zeilen mit NULL-Werten.
(UJHEQLV
Das Ergebnis ähnelt dem folgenden Resultset.
SURGXFWLG
RUGHULG
18//
18//
18//
URZVDIIHFWHG
WRWDOBTXDQWLW\
8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ
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.
86(1RUWKZLQG
6(/(&7SURGXFWLG
*5283,1*SURGXFWLG
RUGHULG
*5283,1*RUGHULG
680TXDQWLW\$6WRWDOBTXDQWLW\
)520>RUGHUGHWDLOV@
:+(5(SURGXFWLG *5283%<SURGXFWLGRUGHULG
:,7+&8%(
25'(5%<SURGXFWLGRUGHULG
*2
3. Führen Sie die Abfrage aus, und überprüfen Sie die Ergebnisse.
(UJHEQLV
8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ
Das Ergebnis ähnelt dem folgenden Resultset.
SURGXFWLG
RUGHULG
18//
18//
18//
18//
18//
18//
18//
18//
18//
18//
18//
18//
18//
URZVDIIHFWHG
WRWDOBTXDQWLW\
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.
____________________________________________________________
____________________________________________________________
8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ
hEXQJ
9HUZHQGHQGHU&20387(XQG&20387(%<.ODXVHO
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.
86(1RUWKZLQG
6(/(&7RUGHULGTXDQWLW\
)520>RUGHUGHWDLOV@
:+(5(RUGHULG! &20387(680TXDQWLW\
*2
3. Führen Sie die Abfrage aus, und überprüfen Sie die Ergebnisse.
(UJHEQLV
Das Ergebnis ähnelt dem folgenden Teil eines Resultsets.
RUGHUHG
TXDQWLW\
6XP
URZVDIIHFWHG
8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ
Ç 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.
86(1RUWKZLQG
6(/(&7RUGHULGTXDQWLW\
)520>RUGHUGHWDLOV@
:+(5(RUGHULGLQ
25'(5%<RUGHULG
&20387(680TXDQWLW\%<RUGHULG
*2
3. Führen Sie die Abfrage aus, und überprüfen Sie die Ergebnisse.
(UJHEQLV
Das Ergebnis ähnelt dem folgenden Resultset.
RUGHUHG
TXDQWLW\
6XP
6XP
URZVDIIHFWHG
8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ
Ç 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.
86(1RUWKZLQG
6(/(&7RUGHULGTXDQWLW\
)520>RUGHUGHWDLOV@
:+(5(RUGHULGLQ
25'(5%<RUGHULG
&20387(680TXDQWLW\%<RUGHULG
&20387(680TXDQWLW\
&20387($9*TXDQWLW\
*2
2. Führen Sie die Abfrage aus, und überprüfen Sie die Ergebnisse.
(UJHEQLV
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.
RUGHULG
TXDQWLW\
6XP
6XP
6XP
$YJ
URZVDIIHFWHG
8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ
/HUQ]LHONRQWUROOH
,QKDOWGLHVHU)ROLH
9HUWLHIHQ6LHGLH/HUQ]LHOH
GLHVHU8QWHUULFKWVHLQKHLW
LQGHP6LHGLHZLFKWLJVWHQ
3XQNWHZLHGHUKROHQ
(LQVWLHJ
'LH)UDJHQ]XU/HUQ]LHO
NRQWUROOHEH]LHKHQVLFKDXI
HLQLJHGHU6FKOVVHONRQ
]HSWHGLH,QKDOWGLHVHU
8QWHUULFKWVHLQKHLWVLQG
„
$XIOLVWHQGHU 723Q:HUWH
„
9HUZHQGHQ YRQ$JJUHJDWIXQNWLRQHQ
„
*UXQGODJHQGHU*5283%<.ODXVHO
„
*HQHULHUHQYRQ$JJUHJDWZHUWHQLQ5HVXOWVHWV
„
9HUZHQGHQGHU&20387( XQG&20387( %<.ODXVHOQ
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG****************
*HKHQ6LHDQKDQGGLHVHU
)UDJHQGLH7KHPHQGHU
8QWHUULFKWVHLQKHLWGXUFK
.OlUHQ6LHDQGHUHRIIHQH
)UDJHQGHU.XUVWHLOQHKPHU
EHYRU6LHIRUWIDKUHQ
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.
8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ
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.
8QWHUULFKWVHLQKHLW9HUNQSIHQYRQPHKUHUHQ7DEHOOHQ
LLL
+LQZHLVHIUGHQ.XUVOHLWHU
3UlVHQWDWLRQ
0LQXWHQ
hEXQJVHLQKHLW
0LQXWHQ
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.
8QWHUODJHQXQG9RUEHUHLWXQJ
In diesem Abschnitt werden die erforderlichen Unterlagen und vorbereitenden
Aufgaben erläutert, die nötig sind, um diese Unterrichtseinheit zu unterrichten.
(UIRUGHUOLFKH8QWHUODJHQ
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.
9RUEHUHLWHQGH$XIJDEHQ
Zur Vorbereitung dieser Unterrichtseinheit gehen Sie folgendermaßen vor:
„
Lesen Sie alle Unterlagen.
„
Arbeiten Sie die Übungseinheit durch.
6WUDWHJLHIUGLH8QWHUULFKWVHLQKHLW
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.
LY
8QWHUULFKWVHLQKHLW9HUNQSIHQYRQPHKUHUHQ7DEHOOHQ
„
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.
$QSDVVXQJVLQIRUPDWLRQHQ
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.
:LFKWLJ 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.
(LQULFKWHQGHU8QWHUULFKWVHLQKHLW
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.
(LQULFKWHQGHUhEXQJVHLQKHLW
Es gibt keine Anforderungen zum Einrichten der Übungseinheit, die die
Replikation oder die Anpassung betreffen.
(UJHEQLVVHGHUhEXQJVHLQKHLW
Auf den Kursteilnehmercomputern gibt es keine Konfigurationsänderungen, die
die Replikation oder die Anpassung betreffen.
8QWHUULFKWVHLQKHLW9HUNQSIHQYRQPHKUHUHQ7DEHOOHQ
hEHUVLFKW
,QKDOWGLHVHU)ROLH
*HEHQ6LHHLQHhEHUVLFKW
EHUGLH7KHPHQXQG/HUQ
]LHOHGLHVHU8QWHUULFKWV
HLQKHLW
(LQVWLHJ
,QGLHVHU8QWHUULFKWVHLQKHLW
OHUQHQ6LHZLHPHKUHUH
7DEHOOHQYHUNQSIWZHUGHQ
„
9HUZHQGHQYRQ $OLDVQDPHQ IU7DEHOOHQQDPHQ
„
.RPELQLHUHQYRQ'DWHQDXVPHKUHUHQ7DEHOOHQ
„
.RPELQLHUHQPHKUHUHU5HVXOWVHWV
****************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.
8QWHUULFKWVHLQKHLW9HUNQSIHQYRQPHKUHUHQ7DEHOOHQ
9HUZHQGHQYRQ$OLDVQDPHQIU7DEHOOHQQDPHQ
,QKDOWGLHVHU)ROLH
%HVFKUHLEHQ6LHZLH$OLDV
QDPHQIU7DEHOOHQQDPHQ
YHUZHQGHWZHUGHQ
(LQVWLHJ
'XUFKGDV9HUZHQGHQYRQ
$OLDVQDPHQIU7DEHOOHQ
QDPHQZLUGGLH/HVEDUNHLW
YRQ6NULSWVYHUEHVVHUWGDV
6FKUHLEHQYRQNRPSOH[HQ
9HUNQSIXQJHQHUOHLFKWHUW
XQGGLH9HUZDOWXQJYRQ
7UDQVDFW64/YHUHLQIDFKW
„
%HLVSLHO RKQH $OLDVQDPHQ
86(MRLQGE
86(MRLQGE
6(/(&7EX\HUBQDPHVDOHVEX\HUBLGTW\
6(/(&7EX\HUBQDPHVDOHVEX\HUBLGTW\
)520EX\HUV,11(5-2,1VDOHV
)520EX\HUV,11(5-2,1VDOHV
21EX\HUVEX\HUBLG
21EX\HUVEX\HUBLG VDOHVEX\HUBLG
VDOHVEX\HUBLG
*2
*2
„
%HLVSLHO PLW $OLDVQDPHQ
86(MRLQGE
86(MRLQGE
6(/(&7EX\HUBQDPHVEX\HUBLGTW\
6(/(&7EX\HUBQDPHVEX\HUBLGTW\
)520EX\HUV$6E,11(5-2,1VDOHV$6V
)520EX\HUV$6E,11(5-2,1VDOHV$6V
21EEX\HUBLG
21EEX\HUBLG VEX\HUBLG
VEX\HUBLG
*2
*2
****************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.
7HLOV\QWD[
SELECT * FROM server.database.schema.table AS table_alias
%HLVSLHO
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.
86(MRLQGE
6(/(&7EX\HUBQDPH6DOHVEX\HUBLGTW\
)520EX\HUV
,11(5-2,1VDOHV
21EX\HUVEX\HUBLG VDOHVEX\HUBLG
*2
%HLVSLHO
8QWHUULFKWVHLQKHLW9HUNQSIHQYRQPHKUHUHQ7DEHOOHQ
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.
86(MRLQGE
6(/(&7EX\HUBQDPHVEX\HUBLGTW\
)520EX\HUV$6E
,11(5-2,1VDOHV$6V
21EEX\HUBLG VEX\HUBLG
*2
$QPHUNXQJ 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.
8QWHUULFKWVHLQKHLW9HUNQSIHQYRQPHKUHUHQ7DEHOOHQ
‹ .RPELQLHUHQYRQ'DWHQDXVPHKUHUHQ7DEHOOHQ
,QKDOWGLHVHU)ROLH
(UNOlUHQ6LHGLHXQWHU
VFKLHGOLFKHQ9HUIDKUHQ]XP
.RPELQLHUHQYRQ'DWHQDXV
]ZHLRGHUPHKUHUHQ7DEHO
OHQRGHU5HVXOWVHWV
„
(LQIKUXQJLQ9HUNQSIXQJHQ
„
9HUZHQGHQYRQLQQHUHQ9HUNQSIXQJHQ
(LQVWLHJ
„
9HUZHQGHQYRQlX‰HUHQ9HUNQSIXQJHQ
„
9HUZHQGHQYRQ&5266-2,16
„
9HUNQSIHQYRQPHKUDOV]ZHL7DEHOOHQ
„
9HUNQSIHQHLQHU7DEHOOHPLWVLFKVHOEVW
'DWHQDXV]ZHLRGHU
PHKUHUHQ7DEHOOHQN|QQHQ
DXFKGDQQNRPELQLHUW
ZHUGHQZHQQVLFKGLH
7DEHOOHQLQYHUVFKLHGHQHQ
'DWHQEDQNHQEHILQGHQ
****************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.
8QWHUULFKWVHLQKHLW9HUNQSIHQYRQPHKUHUHQ7DEHOOHQ
(LQIKUXQJLQ9HUNQSIXQJHQ
,QKDOWGLHVHU)ROLH
(UNOlUHQ6LHZLH9HUNQS
IXQJHQLPSOHPHQWLHUW
ZHUGHQ
„
$XVZlKOHQEHVWLPPWHU6SDOWHQLQPHKUHUHQ7DEHOOHQ
z
(LQVWLHJ
7DEHOOHQZHUGHQYHUNQSIW
XPHLQHLQ]HOQHV5HVXOWVHW
]XHUVWHOOHQGDV(OHPHQWH
DXV]ZHLRGHUPHKUHUHQ
7DEHOOHQXPIDVVW
z
„
'DV-2,16FKOVVHOZRUWJLEWDQGDVV7DEHOOHQYHUNQSIW
VLQGXQGDXIZHOFKH:HLVHVLHYHUNQSIWZHUGHQ
'DV216FKOVVHOZRUWJLEWGLH9HUNQSIXQJVEHGLQJXQJHQ
DQ
$EIUDJHQ]ZHLHURGHUPHKUHUHU7DEHOOHQXPHLQ 5HVXOWVHW
]XHUVWHOOHQ
z
z
9HUZHQGHQ YRQ3ULPlU XQG)UHPGVFKOVVHOQ DOV
9HUNQSIXQJVEHGLQJXQJHQ
9HUZHQGHQ6LH]XP9HUNQSIHQYRQ7DEHOOHQGLH6SDOWHQ
GLHLQGHQDQJHJHEHQHQ7DEHOOHQEHUHLQVWLPPHQ
****************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.
7HLOV\QWD[
0HWKRGLVFKHU+LQZHLV
=LHKHQ6LHGLH64/6HUYHU
2QOLQHGRNXPHQWDWLRQKHUDQ
XPGLHYROOVWlQGLJH
6(/(&7$QZHLVXQJ]X
]HLJHQXQGGLH9HUNQSIXQ
JHQKHUYRU]XKHEHQ
SELECT column_name [, column_name …]
FROM {<table_source>} [,...n]
<join_type> ::=
[ INNER | { { LEFT | RIGHT | FULL } [OUTER] } ]
[ <join_hint> ]
JOIN
<joined_table> ::=
<table_source> <join_type> <table_source> ON <search_condition>
| <table_source> CROSS JOIN <table_source>
| <joined_table>
$XVZlKOHQEHVWLPPWHU6SDOWHQLQPHKUHUHQ7DEHOOHQ
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.
8QWHUULFKWVHLQKHLW9HUNQSIHQYRQPHKUHUHQ7DEHOOHQ
$EIUDJHQ]ZHLHURGHUPHKUHUHU7DEHOOHQXPHLQ
5HVXOWVHW]XHUVWHOOHQ
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:
:HLWHUH,QIRUPDWLRQHQ
9HUNQSIXQJHQZHUGHQ
PHLVWIUHLQIDFKHXQG
]XVDPPHQJHVHW]WH3ULPlU
XQG)UHPGVFKOVVHO
GXUFKJHIKUW9HUNQS
IXQJHQN|QQHQDEHUDXFK
IUDQGHUH6SDOWHQGXUFK
JHIKUWZHUGHQ
„
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.
8QWHUULFKWVHLQKHLW9HUNQSIHQYRQPHKUHUHQ7DEHOOHQ
9HUZHQGHQYRQLQQHUHQ9HUNQSIXQJHQ
86(MRLQGE
86(MRLQGE
6(/(&7EX\HUBQDPHVDOHVEX\HUBLGTW\
6(/(&7EX\HUBQDPHVDOHVEX\HUBLGTW\
)520EX\HUV,11(5-2,1VDOHV
)520EX\HUV,11(5-2,1VDOHV
21EX\HUVEX\HUBLG
21EX\HUVEX\HUBLG VDOHVEX\HUBLG
VDOHVEX\HUBLG
*2
*2
,QKDOWGLHVHU)ROLH
'HILQLHUHQ6LHLQQHUH
9HUNQSIXQJHQXQGIKUHQ
6LHLKUH)XQNWLRQVZHLVHYRU
buyers
(LQVWLHJ
sales
buyer_name
buyer_name buyer_id
buyer_id
Adam
11
AdamBarr
Barr
Sean
Chai
22
Sean Chai
Eva
Corets
33
Eva Corets
Erin
44
ErinO’Melia
O’Melia
0LWLQQHUHQ9HUNQSIXQJHQ
N|QQHQ7DEHOOHQNRPELQLHUW
ZHUGHQLQGHQHQ:HUWHLQ
YHUJOLFKHQHQ6SDOWHQEHU
HLQVWLPPHQ
Beispiel
Beispiel 11
buyer_id
prod_id
buyer_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_name buyer_id
buyer_id qty
qty
Adam
Barr
1
15
Adam Barr
1
15
Adam
11
55
AdamBarr
Barr
Erin
44
37
ErinO’Melia
O’Melia
37
Eva
EvaCorets
Corets
Erin
ErinO’Melia
O’Melia
33
44
11
11
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.
$QPHUNXQJ 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.
0HWKRGLVFKHU+LQZHLV
'LH%HLVSLHOHDXIGHQ)ROLHQ
LQGLHVHU8QWHUULFKWVHLQKHLW
VWDPPHQDXVGHUMRLQGE
'DWHQEDQN'LHVH'DWHQ
EDQNZXUGHVSH]LHOO]XP
(UOlXWHUQGHUYHUVFKLHGHQHQ
9HUNQSIXQJVW\SHQHUVWHOOW
'LHMRLQGE'DWHQEDQNLVW
DXIGHU.XUVWHLOQHKPHU&'
HQWKDOWHQ
:HLVHQ6LHGDUDXIKLQGDVV
64/6HUYHUNHLQHVSH]LHOOH
5HLKHQIROJHLP5HVXOWVHW
JHZlKUOHLVWHWHVVHLGHQQ
GLHVZLUGGXUFKHLQH
25'(5%<.ODXVHO
DQJHJHEHQ
*UQGHIUGLH9HUZHQGXQJYRQLQQHUHQ9HUNQSIXQJHQ
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.
$QPHUNXQJ SQL Server gewährleistet keine spezielle Reihenfolge im Resultset, es sei denn dies wird durch eine ORDER BY-Klausel angegeben.
8QWHUULFKWVHLQKHLW9HUNQSIHQYRQPHKUHUHQ7DEHOOHQ
%HLVSLHO
0HWKRGLVFKHU+LQZHLV
:HLVHQ6LHGDUDXIKLQGDVV
DXIGLHEX\HUBLG6SDOWH
MHGHU7DEHOOHLQGHU
$XVZDKOOLVWHYHUZLHVHQ
ZHUGHQNDQQ
(UJHEQLV
%HLVSLHO
(UJHEQLV
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.
86(MRLQGE
6(/(&7EX\HUBQDPH6DOHVEX\HUBLGTW\
)520EX\HUV
,11(5-2,1VDOHV
21%X\HUVEX\HUBLG 6DOHVEX\HUBLG
*2
EX\HUBQDPH
EX\HUBLG
TW\
$GDP%DUU
$GDP%DUU
(ULQ2
0HOLD
(YD&RUHWV
(ULQ2
0HOLD
URZVDIIHFWHG
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.
86(1RUWKZLQG
6(/(&73URGXFW1DPH&RPSDQ\1DPH
)520SURGXFWV
,11(5-2,1VXSSOLHUV
21SURGXFWVVXSSOLHULG VXSSOLHUVVXSSOLHULG
*2
3URGXFW1DPH
&RPSDQ\1DPH
&KDL
&KDQJ
$QLVHHG6\UXS
&KHI$QWRQ
V&DMXQ6HDVRQLQJ
URZVDIIHFWHG
%HLVSLHO
([RWLF/LTXLGV
([RWLF/LTXLGV
([RWLF/LTXLGV
1HZ2UOHDQV&DMXQ'HOLJKWV
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.
86(1RUWKZLQG
6(/(&7',67,1&7FRPSDQ\QDPHRUGHUGDWH
)520RUGHUV,11(5-2,1FXVWRPHUV
21RUGHUVFXVWRPHULG FXVWRPHUVFXVWRPHULG
:+(5(RUGHUGDWH!
*2
8QWHUULFKWVHLQKHLW9HUNQSIHQYRQPHKUHUHQ7DEHOOHQ
(UJHEQLV
%HLVSLHO
0HWKRGLVFKHU+LQZHLV
,QGLHVHP%HLVSLHOZLUGGLH
OLEUDU\'DWHQEDQNYHUZHQ
GHWGDGLH1RUWKZLQG
'DWHQEDQNQLFKWEHU]ZHL
7DEHOOHQPLW]XVDPPHQJH
VHW]WHQ3ULPlUVFKOVVHOQ
YHUIJWGLHVLFKDXIHLQDQGHU
EH]LHKHQ
(UJHEQLV
FRPSDQ\QDPH
RUGHUGDWH
$OIUHGV)XWWHUNLVWH
$OIUHGV)XWWHUNLVWH
$OIUHGV)XWWHUNLVWH
$QD7UXMLOOR(PSDUHGDGRV\KHODGRV
URZVDIIHFWHG
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.
86(OLEUDU\
6(/(&7FRS\WLWOHBQRORDQPHPEHUBQR
)520FRS\
,11(5-2,1ORDQ
21FRS\LVEQ ORDQLVEQ
$1'FRS\FRS\BQR ORDQFRS\BQR
:+(5(FRS\RQBORDQ <
*2
WLWOHBQR
PHPEHUBQR
URZVDIIHFWHG
8QWHUULFKWVHLQKHLW9HUNQSIHQYRQPHKUHUHQ7DEHOOHQ
9HUZHQGHQYRQlX‰HUHQ9HUNQSIXQJHQ
86(MRLQGE
86(MRLQGE
6(/(&7EX\HUBQDPHVDOHVEX\HUBLGTW\
6(/(&7EX\HUBQDPHVDOHVEX\HUBLGTW\
)520EX\HUV/()7287(5-2,1VDOHV
)520EX\HUV/()7287(5-2,1VDOHV
21EX\HUVEX\HUBLG
21EX\HUVEX\HUBLG VDOHVEX\HUBLG
VDOHVEX\HUBLG
*2
*2
,QKDOWGLHVHU)ROLH
'HILQLHUHQ6LHlX‰HUH
9HUNQSIXQJHQXQGEH
VFKUHLEHQ6LHGLHGUHL
7\SHQ
(LQVWLHJ
0LW+LOIHYRQOLQNHQUHFKWHQ
RGHUYROOVWlQGLJHQlX‰HUHQ
9HUNQSIXQJHQN|QQHQ
=HLOHQGLHGHU9HUNQS
IXQJVEHGLQJXQJQLFKW
HQWVSUHFKHQLQHLQHP
5HVXOWVHWHLQJHVFKORVVHQ
ZHUGHQ
Beispiel
Beispiel 11
buyers
sales
buyer_name
buyer_id
buyer_name buyer_id
Adam
11
AdamBarr
Barr
Sean
Chai
22
Sean 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_name buyer_id
buyer_id qty
qty
Adam
Barr
11
15
15
Adam Barr
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****************
0HWKRGLVFKHU+LQZHLV
:HLVHQ6LHDXIGLH18//
:HUWHIU6HDQ&KDLDXIGHU
)ROLHKLQ)U=HLOHQGLHGHU
9HUNQSIXQJVEHGLQJXQJ
QLFKWHQWVSUHFKHQZLUGLP
5HVXOWVHW18//DQJH]HLJW
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.
*UQGHIUGLH9HUZHQGXQJYRQOLQNHQRGHUUHFKWHQ
lX‰HUHQ9HUNQSIXQJHQ
0HWKRGLVFKHU+LQZHLV
6WHOOHQ6LHIROJHQGH
)UDJH:HOFKHbQGHUXQJHQ
ZUGHQ6LHLQGHU%HLVSLHO
DEIUDJHDXIGHU)ROLHYRU
QHKPHQXPGDVVHOEH
(UJHEQLVPLWHLQHU5,*+7
287(5-2,1.ODXVHO]X
HU]LHOHQ"
$QWZRUW.HKUHQ6LHGLH
5HLKHQIROJHGHU7DEHOOHQLQ
GHU)520.ODXVHOXPXQG
YHUZHQGHQ6LHGLH5,*+7
287(5-2,1.ODXVHO
0HWKRGLVFKHU+LQZHLV
9HUZHQGHQ6LHLPPHUGLH
$16,64/9HUNQS
IXQJVV\QWD[ZREHL
$16,B18//6DXI21IHVW
JHOHJWLVW
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.
%HLVSLHO
(UJHEQLV
8QWHUULFKWVHLQKHLW9HUNQSIHQYRQPHKUHUHQ7DEHOOHQ
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.
86(MRLQGE
6(/(&7EX\HUBQDPHVDOHVEX\HUBLGTW\
)520EX\HUV
/()7287(5-2,1VDOHV
21EX\HUVEX\HUBLG VDOHVEX\HUBLG
*2
EX\HUBQDPH
EX\HUBLG
TW\
$GDP%DUU
$GDP%DUU
(ULQ2
0HOLD
(YD&RUHWV
(ULQ2
0HOLD
6HDQ&KDL
URZVDIIHFWHG
18//
18//
$QPHUNXQJ Die Sortierreihenfolge des Resultsets kann unterschiedlich sein, da
die ORDER BY-Klausel im Beispiel nicht verwendet wurde.
%HLVSLHO
(UJHEQLV
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.
86(1RUWKZLQG
6(/(&7FRPSDQ\QDPHFXVWRPHUVFXVWRPHULGRUGHUGDWH
)520FXVWRPHUV
/()7287(5-2,1RUGHUV
21FXVWRPHUVFXVWRPHULG RUGHUVFXVWRPHULG
*2
FRPSDQ\QDPH
FXVWRPHULG RUGHUGDWH
9LQVHWDOFRROV&KHYDOLHU
7RPV6SH]LDOLWlWHQ
+DQDUL&DUQHV
9LFWXDLOOHVHQVWRFN
),66$)DEULFD,QWHU6DOLFKLFKDV6$
3DULVVSHFLDOLWLHV
URZVDIIHFWHG
9,1,7
72063
+$1$5
9,&7(
),66$
3$5,6
18//
18//
8QWHUULFKWVHLQKHLW9HUNQSIHQYRQPHKUHUHQ7DEHOOHQ
9HUZHQGHQYRQ&5266-2,16
86(MRLQGE
86(MRLQGE
6(/(&7EX\HUBQDPHTW\
6(/(&7EX\HUBQDPHTW\
)520EX\HUV
)520EX\HUV
&5266-2,1VDOHV
&5266-2,1VDOHV
*2
*2
,QKDOWGLHVHU)ROLH
=HLJHQ6LHGLH)XQNWLRQV
ZHLVHYRQ&5266-2,16
XQGEHVFKUHLEHQ6LHGDV
5HVXOWVHW
(LQVWLHJ
0LW&5266-2,16N|QQHQ
DOOHP|JOLFKHQ=HLOHQNRPEL
QDWLRQHQGHUDXVJHZlKOWHQ
6SDOWHQLQGHQYHUNQSIWHQ
7DEHOOHQDQJH]HLJWZHUGHQ
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****************
0HWKRGLVFKHU+LQZHLV
:HLVHQ6LHGDUDXIKLQGDVV
GDV216FKOVVHOZRUWXQG
GLH]XJHRUGQHWH6SDOWHQOLVWH
QLFKWLQGHU6(/(&7$Q
ZHLVXQJYHUZHQGHWZHUGHQ
GD&5266-2,16DOOHP|J
OLFKHQ=HLOHQNRPELQDWLRQHQ
MHGHUDQJHJHEHQHQ7DEHOOH
]XUFNJHEHQ
8PHLQHQ&5266-2,1
YHUZHQGHQ]XN|QQHQLVW
NHLQHJHPHLQVDPH6SDOWH
HUIRUGHUOLFK
%HLVSLHO
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.
*UQGHIUGLH9HUZHQGXQJYRQ&5266-2,16
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.
86(MRLQGE
6(/(&7EX\HUBQDPHTW\
)520EX\HUV
&5266-2,1VDOHV
*2
8QWHUULFKWVHLQKHLW9HUNQSIHQYRQPHKUHUHQ7DEHOOHQ
(UJHEQLV
%HLVSLHO
0HWKRGLVFKHU+LQZHLV
)KUHQ6LHGLH$EIUDJHDXV
XQGHUNOlUHQ6LHGDVVLQ
GLHVHP%HLVSLHODOOH
0|JOLFKNHLWHQDXIJHOLVWHW
ZHUGHQGLH/LHIHUDQWHQIU
GHQ9HUVDQGLKUHU3URGXNWH
]XU9HUIJXQJVWHKHQ
(UJHEQLV
EX\HUBQDPH
TW\
$GDP%DUU
$GDP%DUU
$GDP%DUU
$GDP%DUU
$GDP%DUU
6HDQ&KDL
6HDQ&KDL
URZVDIIHFWHG
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.
86(1RUWKZLQG
6(/(&7VXSSOLHUVFRPSDQ\QDPHVKLSSHUVFRPSDQ\QDPH
)520VXSSOLHUV
&5266-2,1VKLSSHUV
*2
FRPSDQ\QDPH
FRPSDQ\QDPH
$X[MR\HX[HFFOpVLDVWLTXHV
%LJIRRW%UHZHULHV
&RRSHUDWLYDGH4XHVRV
/DV&DEUDV
(VFDUJRWV1RXYHDX[
$X[MR\HX[HFFOpVLDVWLTXHV
%LJIRRW%UHZHULHV
&RRSHUDWLYDGH4XHVRV
/DV&DEUDV
(VFDUJRWV1RXYHDX[
$X[MR\HX[HFFOpVLDVWLTXHV
%LJIRRW%UHZHULHV
&RRSHUDWLYDGH4XHVRV
/DV&DEUDV
(VFDUJRWV1RXYHDX[
URZVDIIHFWHG
6SHHG\([SUHVV
6SHHG\([SUHVV
6SHHG\([SUHVV
6SHHG\([SUHVV
8QLWHG3DFNDJH
8QLWHG3DFNDJH
8QLWHG3DFNDJH
8QLWHG3DFNDJH
)HGHUDO6KLSSLQJ
)HGHUDO6KLSSLQJ
)HGHUDO6KLSSLQJ
)HGHUDO6KLSSLQJ
8QWHUULFKWVHLQKHLW9HUNQSIHQYRQPHKUHUHQ7DEHOOHQ
9HUNQSIHQYRQPHKUDOV]ZHL7DEHOOHQ
6(/(&7EX\HUBQDPHSURGBQDPHTW\
6(/(&7EX\HUBQDPHSURGBQDPHTW\
)520EX\HUV
)520EX\HUV
,11(5-2,1VDOHV
,11(5-2,1VDOHV
21EX\HUVEX\HUBLG
21EX\HUVEX\HUBLG VDOHVEX\HUBLG
VDOHVEX\HUBLG
,11(5-2,1SURGXFH
,11(5-2,1SURGXFH
21VDOHVSURGBLG
21VDOHVSURGBLG SURGXFHSURGBLG
SURGXFHSURGBLG
*2
*2
buyers
sales
buyer_id
buyer_id
buyer_id prod_id
buyer_idbuyer_name
buyer_name
prod_id qty
qty
11
Adam
11
22
15
AdamBarr
Barr
15
11
33
55
22
Sean
SeanChai
Chai
11
33
Eva
33
37
EvaCorets
Corets
37
,QKDOWGLHVHU)ROLH
(UNOlUHQ6LHZLHPHKUDOV
]ZHL7DEHOOHQPLWHLQDQGHU
YHUNQSIWZHUGHQN|QQHQ
(LQVWLHJ
%LVKHUZXUGHQLPPHUQXU
]ZHL7DEHOOHQPLWHLQDQGHU
YHUNQSIW(VLVWMHGRFK
P|JOLFKPHKUDOV]ZHL
7DEHOOHQPLWHLQDQGHU]X
YHUNQSIHQ
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****************
0HWKRGLVFKHU+LQZHLV
=XQlFKVWZHUGHQGLH7D
EHOOHQEX\HUVXQGVDOHV
PLWHLQDQGHUYHUNQSIW'D
QDFKHUIROJWGLH9HUNQS
IXQJGHU7DEHOOHQVDOHVXQG
SURGXFH
%HWRQHQ6LHGDVVMHGH
7DEHOOHDXIGLHLQHLQHU
9HUNQSIXQJVRSHUDWLRQ
YHUZLHVHQZLUGEHUHLQH
JHPHLQVDPH6SDOWHPLW
HLQHUDQGHUHQ7DEHOOH
YHUNQSIWZHUGHQNDQQ
%HLVSLHO
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.
*UQGHIUGDV9HUNQSIHQYRQPHKUDOV]ZHL7DEHOOHQ
Ü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.
(UJHEQLV
8QWHUULFKWVHLQKHLW9HUNQSIHQYRQPHKUHUHQ7DEHOOHQ
86(MRLQGE
6(/(&7EX\HUBQDPHSURGBQDPHTW\
)520EX\HUV
,11(5-2,1VDOHV
21%X\HUVEX\HUBLG 6DOHVEX\HUBLG
,11(5-2,1SURGXFH
216DOHVSURGBLG 3URGXFHSURGBLG
*2
EX\HUBQDPH
SURGBQDPH
TW\
(ULQ2
0HOLD
$GDP%DUU
(ULQ2
0HOLD
$GDP%DUU
(YD&RUHWV
URZVDIIHFWHG
%HLVSLHO
$SSOHV
3HDUV
3HDUV
2UDQJHV
3HDFKHV
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.
(UJHEQLV
86(1RUWKZLQG
6(/(&7RUGHUGDWHSURGXFWQDPH
)520RUGHUV$62
,11(5-2,1>RUGHUGHWDLOV@$62'
212RUGHULG 2'RUGHULG
,11(5-2,1SURGXFWV$63
212'SURGXFWLG 3SURGXFWLG
:+(5(RUGHUGDWH RUGHUGDWH
SURGXFWQDPH
URZVDIIHFWHG
-DFN
V1HZ(QJODQG&ODP&KRZGHU
0DQMLPXS'ULHG$SSOHV
/RXLVLDQD)LHU\+RW3HSSHU6DXFH
*XVWDI
V.QDNHEURG
5DYLROL$QJHOR
/RXLVLDQD)LHU\+RW3HSSHU6DXFH
8QWHUULFKWVHLQKHLW9HUNQSIHQYRQPHKUHUHQ7DEHOOHQ
9HUNQSIHQHLQHU7DEHOOHPLWVLFKVHOEVW
86(MRLQGE
86(MRLQGE
6(/(&7DEX\HUBLG$6EX\HUDSURGBLG
6(/(&7DEX\HUBLG$6EX\HUDSURGBLG
EEX\HUBLG$6EX\HU
EEX\HUBLG$6EX\HU
)520VDOHV$6D
)520VDOHV$6D
,11(5-2,1VDOHV$6E
,11(5-2,1VDOHV$6E
21DSURGBLG
21DSURGBLG ESURGBLG
ESURGBLG
:+(5(DEX\HUBLG!EEX\HUBLG
:+(5(DEX\HUBLG!EEX\HUBLG
*2
*2
,QKDOWGLHVHU)ROLH
(UNOlUHQ6LHGLH6HOEVW
YHUNQSIXQJ
(LQVWLHJ
9HUNQSIXQJHQZHUGHQ
]ZDULQGHQPHLVWHQ)lOOHQ
]XP.RPELQLHUHQPHKUHUHU
7DEHOOHQYHUZHQGHWHLQH
7DEHOOHNDQQMHGRFKDXFK
EHUHLQH6HOEVWYHUNQS
IXQJPLWVLFKVHOEVW
YHUNQSIWZHUGHQ
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
prod_id buyer2
buyer1 prod_id
buyer2
44
22
11
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG****************
0HWKRGLVFKHU+LQZHLV
'DV%HLVSLHODXIGHU)ROLH
]HLJWGDVJHZQVFKWH(U
JHEQLVZHQQHLQH7DEHOOH
PLWVLFKVHOEVWYHUNQSIW
ZLUG=LHKHQ6LHGLH
%HLVSLHOUHLKHLP$UEHLWVEXFK
IU.XUVWHLOQHKPHUKHUDQ
XP]XHUOlXWHUQZLHHLQH
7DEHOOHPLWVLFKVHOEVW
YHUNQSIWZLUG
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.
*UQGHIUGLH9HUZHQGXQJYRQ6HOEVWYHUNQSIXQJHQ
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.
8QWHUULFKWVHLQKHLW9HUNQSIHQYRQPHKUHUHQ7DEHOOHQ
%HLVSLHO
0HWKRGLVFKHU+LQZHLV
:HLVHQ6LHDXIGLH'XSOL
NDWHKLQEHLGHQHQGLH=HL
OHQPLWVLFKVHOEVWEHUHLQ
VWLPPHQ=HLOHXQG
9HUZHQGHQ6LHHLQH
:+(5(.ODXVHOPLWGHP
8QJOHLFK2SHUDWRU!XP
GLHVHQ'XSOLNDWVW\S]X
O|VFKHQ
(UJHEQLV
0HWKRGLVFKHU+LQZHLV
:HLVHQ6LHGDUDXIKLQGDVV
LQGHQ%HLVSLHOHQGRSSHOWH
=HLOHQEHLGHQHQHVVLFK
XP6SLHJHOELOGHUGHUMHZHLOV
DQGHUHQ=HLOHKDQGHOWQLFKW
JHO|VFKWZHUGHQ
(UJHEQLV
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.
86(MRLQGE
6(/(&7DEX\HUBLG$6EX\HUDSURGBLGEEX\HUBLG$6EX\HU
)520VDOHV$6D
,11(5-2,1VDOHV$6E
21$SURGBLG %SURGBLG
*2
EX\HU
SURGBLG
EX\HU
URZVDIIHFWHG
%HLVSLHO
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.
86(MRLQGE
6(/(&7DEX\HUBLG$6EX\HUDSURGBLGEEX\HUBLG$6EX\HU
)520VDOHV$6D
,11(5-2,1VDOHV$6E
21DSURGBLG ESURGBLG
:+(5(DEX\HUBLG!EEX\HUBLG
*2
EX\HU
SURGBLG
EX\HU
URZVDIIHFWHG
8QWHUULFKWVHLQKHLW9HUNQSIHQYRQPHKUHUHQ7DEHOOHQ
%HLVSLHO
In diesem Beispiel wird eine Liste von Käufern angezeigt, die die gleichen
Produkte gekauft haben.
0HWKRGLVFKHU+LQZHLV
:HLVHQ6LHGDUDXIKLQGDVV
GLH'XSOLNDWHLQ%HLVSLHO
EHL9HUZHQGXQJGHU
:+(5(.ODXVHOPLWGHQ
2SHUDWRUHQ*U|‰HUDOV!
XQG.OHLQHUDOVJHO|VFKW
ZHUGHQ
(UJHEQLV
Beachten Sie, dass alle doppelten Zeilen gelöscht werden, wenn die WHEREKlausel den Operator Größer als (>) einschließt.
86(MRLQGE
6(/(&7DEX\HUBLG$6EX\HUDSURGBLGEEX\HUBLG$6EX\HU
)520VDOHV$6D
,11(5-2,1VDOHV$6E
21DSURGBLG ESURGBLG
:+(5(DEX\HUBLG!EEX\HUBLG
*2
EX\HU
SURGBLG
EX\HU
URZVDIIHFWHG
%HLVSLHO
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.
(UJHEQLV
HPSOR\HHLG
QDPH
86(1RUWKZLQG
6(/(&7DHPSOR\HHLG/()7DODVWQDPH$6QDPH
/()7DWLWOH$6WLWOH
EHPSOR\HHLG/()7EODVWQDPH$6QDPH
/()7EWLWOH$6WLWOH
)520HPSOR\HHV$6D
,11(5-2,1HPSOR\HHV$6E
21D7LWOH E7LWOH
:+(5(DHPSOR\HHLGEHPSOR\HHLG
*2
WLWOH
HPSOR\HHLG
QDPH
WLWOH
'DYROLR
'DYROLR
'DYROLR
'DYROLR
'DYROLR
/HYHUOLQJ
/HYHUOLQJ
/HYHUOLQJ
/HYHUOLQJ
3HDFRFN
3HDFRFN
3HDFRFN
6X\DPD
6X\DPD
.LQJ
URZVDIIHFWHG
6DOHV5HSU
6DOHV5HSU
6DOHV5HSU
6DOHV5HSU
6DOHV5HSU
6DOHV5HSU
6DOHV5HSU
6DOHV5HSU
6DOHV5HSU
6DOHV5HSU
6DOHV5HSU
6DOHV5HSU
6DOHV5HSU
6DOHV5HSU
6DOHV5HSU
/HYHUOLQJ
3HDFRFN
6X\DPD
.LQJ
'RGVZRUWK
3HDFRFN
6X\DPD
.LQJ
'RGVZRUWK
6X\DPD
.LQJ
'RGVZRUWK
.LQJ
'RGVZRUWK
'RGVZRUWK
6DOHV5HSU
6DOHV5HSU
6DOHV5HSU
6DOHV5HSU
6DOHV5HSU
6DOHV5HSU
6DOHV5HSU
6DOHV5HSU
6DOHV5HSU
6DOHV5HSU
6DOHV5HSU
6DOHV5HSU
6DOHV5HSU
6DOHV5HSU
6DOHV5HSU
8QWHUULFKWVHLQKHLW9HUNQSIHQYRQPHKUHUHQ7DEHOOHQ
.RPELQLHUHQPHKUHUHU5HVXOWVHWV
,QKDOWGLHVHU)ROLH
(UNOlUHQ6LH=ZHFNXQG
)XQNWLRQGHV81,21
2SHUDWRUV
„
9HUZHQGHQGHV81,212SHUDWRUVXPHLQ HLQ]HOQHV
5HVXOWVHW DXVPHKUHUHQ$EIUDJHQ]XHUVWHOOHQ
(LQVWLHJ
„
-HGHGHU$EIUDJHQEHQ|WLJW
z 'HQJOHLFKHQ'DWHQW\SHQ
z 'LHJOHLFKH6SDOWHQDQ]DKO
z 'LHJOHLFKH6SDOWHQUHLKHQIROJHLQGHU$XVZDKOOLVWH
0LW+LOIHGHV81,21
2SHUDWRUVN|QQHQGLH
(UJHEQLVVHYRQ]ZHLRGHU
PHKUHUHQ6(/(&7
$QZHLVXQJHQLQHLQHP
HLQ]LJHQ5HVXOWVHW
NRPELQLHUWZHUGHQ
86(1RUWKZLQG
86(1RUWKZLQG
6(/(&7
6(/(&7 ILUVWQDPH
ODVWQDPH
ILUVWQDPH
ODVWQDPH $6QDPH
$6QDPH
FLW\SRVWDOFRGH
FLW\SRVWDOFRGH
)520HPSOR\HHV
)520HPSOR\HHV
81,21
81,21
6(/(&7FRPSDQ\QDPHFLW\SRVWDOFRGH
6(/(&7FRPSDQ\QDPHFLW\SRVWDOFRGH
)520FXVWRPHUV
)520FXVWRPHUV
*2
*2
****************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:
.HUQSXQNW
:HQQ6LHGHQ81,21
2SHUDWRUYHUZHQGHQ
PVVHQGLH7DEHOOHQDXI
GLHYHUZLHVHQZLUGEHUGLH
JOHLFKHQ'DWHQW\SHQGLH
JOHLFKH6SDOWHQDQ]DKOXQG
GLHJOHLFKH6SDOWHQUHLKHQ
IROJHLQGHU$XVZDKOOLVWH
MHGHU$EIUDJHYHUIJHQ
„
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.
8QWHUULFKWVHLQKHLW9HUNQSIHQYRQPHKUHUHQ7DEHOOHQ
6\QWD[
select_Anweisung UNION [ALL] select_Anweisung
%HLVSLHO
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.
0HWKRGLVFKHU+LQZHLV
)KUHQ6LHGLHVHV%HLVSLHO
PLW64/4XHU\$QDO\]HU
YRU
(UJHEQLV
86(1RUWKZLQG
6(/(&7ILUVWQDPH
ODVWQDPH$6QDPHFLW\SRVWDOFRGH
)520HPSOR\HHV
81,21
6(/(&7FRPSDQ\QDPHFLW\SRVWDOFRGH
)520FXVWRPHUV
*2
QDPH
FLW\
SRVWDOFRGH
$OIUHGV)XWWHUNLVWH
$QD7UXMLOOR(PSDUHGDGRV\KHODGRV
$QWRQLR0RUHQR7DTXHUtD
$URXQGWKH+RUQ
%
V%HYHUDJHV
$QGUHZ)XOOHU
5REHUW.LQJ
-DQHW/HYHUOLQJ
$QQH'RGVZRUWK
URZVDIIHFWHG
0HWKRGLVFKHU+LQZHLV
6WHOOHQ6LHIROJHQGH
)UDJH:DUXPZHUGHQLP
5HVXOWVHWGLH.XQGHQYRU
GHQ$QJHVWHOOWHQDXIJHOLVWHW
XQGQLFKWXPJHNHKUWZLH
GLHVGHU6\QWD[]XIROJHGHU
)DOOVHLQPVVWH"
$QWZRUW64/6HUYHUJH
ZlKUOHLVWHWNHLQHVSH]LHOOH
5HLKHQIROJHHVVHLGHQQ
GLHVZLUGGXUFKHLQH
25'(5%<.ODXVHO
DQJHJHEHQ
%HUOLQ
0p[LFR')
0p[LFR')
/RQGRQ
/RQGRQ
7DFRPD
/RQGRQ
.LUNODQG
/RQGRQ
:$'3
(&17
5*63
:*/7
8QWHUULFKWVHLQKHLW9HUNQSIHQYRQPHKUHUHQ7DEHOOHQ
(PSIRKOHQH0HWKRGHQ
,QKDOWGLHVHU)ROLH
/LVWHQ6LHGLHHPSIRKOHQHQ
0HWKRGHQ]XP$EUXIHQXQG
bQGHUQYRQ'DWHQDXI
9HUNQSIHQ6LH7DEHOOHQPLW3ULPlU
9HUNQSIHQ6LH7DEHOOHQPLW3ULPlU XQG)UHPGVFKOVVHOQ
XQG)UHPGVFKOVVHOQ
(LQVWLHJ
'LHIROJHQGHQHPSIRKOHQHQ
0HWKRGHQKHOIHQ,KQHQEHLP
$XVIKUHQHUZHLWHUWHU
$EIUDJHQ
9HUZHLVHQ6LHDXIDOOH6SDOWHQHLQHV]XVDPPHQJHVHW]WHQ3ULPlU
9HUZHLVHQ6LHDXIDOOH6SDOWHQHLQHV]XVDPPHQJHVHW]WHQ3ULPlU
VFKOVVHOVLQGHU21.ODXVHOZHQQGLH%H]LHKXQJ]ZLVFKHQ
VFKOVVHOVLQGHU21.ODXVHOZHQQGLH%H]LHKXQJ]ZLVFKHQ
7DEHOOHQEHUHLQHQ]XVDPPHQJHVHW]WHQ6FKOVVHOKHUJHVWHOOWZLUG
7DEHOOHQEHUHLQHQ]XVDPPHQJHVHW]WHQ6FKOVVHOKHUJHVWHOOWZLUG
%HJUHQ]HQ6LHGLH$Q]DKOYRQ7DEHOOHQLQHLQHU9HUNQSIXQJ
%HJUHQ]HQ6LHGLH$Q]DKOYRQ7DEHOOHQLQHLQHU9HUNQSIXQJ
****************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“
8QWHUULFKWVHLQKHLW9HUNQSIHQYRQPHKUHUHQ7DEHOOHQ
hEXQJVHLQKHLW$$EIUDJHQPHKUHUHU7DEHOOHQ
,QKDOWGLHVHU)ROLH
*HEHQ6LHHLQH(LQIKUXQJ
LQGLHhEXQJVHLQKHLW
(LQVWLHJ
,QGLHVHQhEXQJVHLQKHLW
IKUHQ6LHYHUVFKLHGHQH
$UWHQYRQ9HUNQSIXQJHQ
GXUFKXP'DWHQDXV
PHKUHUHQ7DEHOOHQ]X
NRPELQLHUHQ
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG****************
(UOlXWHUQ6LHGLH/HUQ]LHOH
GHUhEXQJVHLQKHLW
/HUQ]LHOH
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.
9RUDXVVHW]XQJHQ
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.
(LQULFKWHQGHUhEXQJVHLQKHLW
Nicht erforderlich.
:HLWHUH,QIRUPDWLRQHQ
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.
8QWHUULFKWVHLQKHLW9HUNQSIHQYRQPHKUHUHQ7DEHOOHQ
6]HQDULR
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
9HUDQVFKODJWH=HLWIUGLHhEXQJVHLQKHLW0LQXWHQ
8QWHUULFKWVHLQKHLW9HUNQSIHQYRQPHKUHUHQ7DEHOOHQ
hEXQJ
9HUNQSIHQYRQ7DEHOOHQ
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.
86(OLEUDU\
6(/(&7ILUVWQDPH
PLGGOHLQLWLDO
ODVWQDPH$6QDPH
VWUHHWFLW\VWDWH]LS
)520PHPEHU
,11(5-2,1DGXOW
21PHPEHUPHPEHUBQR DGXOWPHPEHUBQR
*2
5. Führen Sie die Abfrage aus, um zu überprüfen, ob die gewünschten
Ergebnisse zurückgegeben werden.
8QWHUULFKWVHLQKHLW9HUNQSIHQYRQPHKUHUHQ7DEHOOHQ
(UJHEQLV
Das Ergebnis ähnelt dem folgenden Teil eines Resultsets.
QDPH
VWUHHW
$P\$$QGHUVRQ
%RZHU\(VWDWHV
%ULDQ$$QGHUVRQ
'RJZRRG'ULYH
'DQLHO$$QGHUVRQ
)LU6WUHHW
(YD$$QGHUVRQ
7KH+LJKODQGV
*DU\$$QGHUVRQ
-DPHV5RDG
URZVDIIHFWHG
FLW\
VWDWH
]LS
0RQWJRPHU\
6DFUDPHQWR
:DVKLQJWRQ
$WODQWD
6SULQJILHOG
$/
&$
'&
*$
,/
Ç 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.
86(OLEUDU\
6(/(&7FRLVEQFRFRS\BQRFRRQBORDQ
WLWLWOHLWWUDQVODWLRQLWFRYHU
)520FRS\FR
,11(5-2,1WLWOH$6WL
21FRWLWOHBQR WLWLWOHBQR
,11(5-2,1LWHP$6LW
21FRLVEQ LWLVEQ
:+(5(FRLVEQ,1
25'(5%<FRLVEQ
*2
7. Führen Sie die Abfrage aus, um zu überprüfen, ob die gewünschten
Ergebnisse zurückgegeben werden.
8QWHUULFKWVHLQKHLW9HUNQSIHQYRQPHKUHUHQ7DEHOOHQ
(UJHEQLV
LVEQ
Das Ergebnis ähnelt dem folgenden Teil eines Resultsets.
FRS\BQR
URZVDIIHFWHG
RQBORDQ
WLWOH
WUDQVODWLRQ
FRYHU
1
1
1
1
/DVWRIWKH0RKLFDQV
/DVWRIWKH0RKLFDQV
/DVWRIWKH0RKLFDQV
/DVWRIWKH0RKLFDQV
$5$%,&
$5$%,&
$5$%,&
$5$%,&
+$5'%$&.
+$5'%$&.
+$5'%$&.
+$5'%$&.
Ç 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.
86(OLEUDU\
6(/(&7PHPHPEHUBQR
PHODVWQDPH
PHILUVWQDPH
PHPLGGOHLQLWLDO$6QDPH
UHLVEQ
&219(57FKDUUHORJBGDWH$6GDWH
)520PHPEHU$6PH
/()7287(5-2,1UHVHUYDWLRQ$6UH
21PHPHPEHUBQR UHPHPEHUBQR
:+(5(PHPHPEHUBQR,1
25'(5%<PHPHPEHUBQR
*2
8QWHUULFKWVHLQKHLW9HUNQSIHQYRQPHKUHUHQ7DEHOOHQ
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
____________________________________________________________
____________________________________________________________
(UJHEQLV
Das Ergebnis ähnelt dem folgenden Teil eines Resultsets.
PHPEHUBQR
QDPH
+LJKWRZHU0LFKDHO$
0DUWLQ%ULDQ$
0DUWLQ%ULDQ$
0DUWLQ%ULDQ$
0DUWLQ%ULDQ$
/D%ULH-RVKXD%
URZVDIIHFWHG
LVEQ
GDWH
18//
18//
18//
18//
8QWHUULFKWVHLQKHLW9HUNQSIHQYRQPHKUHUHQ7DEHOOHQ
hEXQJ
9HUZHQGHQGHV81,212SHUDWRUV]XP.RPELQLHUHQYRQ5HVXOWVHWV
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.
86(OLEUDU\
6(/(&7DPHPEHUBQR
FRXQW$6QXPNLGV
)520MXYHQLOH$6M
,11(5-2,1DGXOW$6D
21MDGXOWBPHPEHUBQR DPHPEHUBQR
:+(5(DVWDWH $=
*5283%<DPHPEHUBQR
+$9,1*&2817!
*2
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.
8QWHUULFKWVHLQKHLW9HUNQSIHQYRQPHKUHUHQ7DEHOOHQ
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.
86(OLEUDU\
6(/(&7DPHPEHUBQR
FRXQW$6QXPNLGV
)520MXYHQLOH$6M
,11(5-2,1DGXOW$6D
21MDGXOWBPHPEHUBQR DPHPEHUBQR
:+(5(DVWDWH &$
*5283%<DPHPEHUBQR
+$9,1*&2817!
*2
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.
86(OLEUDU\
6(/(&7DPHPEHUBQR
FRXQW$6QXPNLGV
)520MXYHQLOH$6M
,11(5-2,1DGXOW$6D
21MDGXOWBPHPEHUBQR DPHPEHUBQR
:+(5(DVWDWH $=
*5283%<DPHPEHUBQR
+$9,1*&2817!
81,21
6(/(&7DPHPEHUBQR
FRXQW$6QXPNLGV
)520MXYHQLOH$6M
,11(5-2,1DGXOW$6D
21MDGXOWBPHPEHUBQR DPHPEHUBQR
:+(5(DVWDWH &$
*5283%<DPHPEHUBQR
+$9,1*&2817!
*2
8QWHUULFKWVHLQKHLW9HUNQSIHQYRQPHKUHUHQ7DEHOOHQ
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.
____________________________________________________________
____________________________________________________________
8QWHUULFKWVHLQKHLW9HUNQSIHQYRQPHKUHUHQ7DEHOOHQ
/HUQ]LHONRQWUROOH
,QKDOWGLHVHU)ROLH
9HUWLHIHQ6LHGLH/HUQ]LHOH
GLHVHU8QWHUULFKWVHLQKHLW
LQGHP6LHGLH.HUQSXQNWH
ZLHGHUKROHQ
(LQVWLHJ
'LH)UDJHQ]XU/HUQ]LHO
NRQWUROOHEH]LHKHQVLFKDXI
HLQLJHGHU6FKOVVHONRQ
]HSWHGLH,QKDOWGLHVHU
8QWHUULFKWVHLQKHLWVLQG
„
9HUZHQGHQYRQ $OLDVQDPHQ IU7DEHOOHQQDPHQ
„
.RPELQLHUHQYRQ'DWHQDXVPHKUHUHQ7DEHOOHQ
„
.RPELQLHUHQPHKUHUHU 5HVXOWVHWV
****************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)
8QWHUULFKWVHLQKHLW9HUNQSIHQYRQPHKUHUHQ7DEHOOHQ
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.
8QWHUULFKWVHLQKHLW$UEHLWHQPLW8QWHUDEIUDJHQ
LLL
+LQZHLVHIUGHQ.XUVOHLWHU
3UlVHQWDWLRQ
0LQXWHQ
hEXQJVHLQKHLW
0LQXWHQ
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.
8QWHUODJHQXQG9RUEHUHLWXQJ
In diesem Abschnitt werden die erforderlichen Unterlagen und vorbereitenden
Aufgaben erläutert, die nötig sind, um diese Unterrichtseinheit zu unterrichten.
(UIRUGHUOLFKH8QWHUODJHQ
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.
9RUEHUHLWHQGH$XIJDEHQ
Zur Vorbereitung dieser Unterrichtseinheit gehen Sie folgendermaßen vor:
„
Lesen Sie alle Unterlagen.
„
Arbeiten Sie die Übungseinheit durch.
LY
8QWHUULFKWVHLQKHLW$UEHLWHQPLW8QWHUDEIUDJHQ
6WUDWHJLHIUGLH8QWHUULFKWVHLQKHLW
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.
8QWHUULFKWVHLQKHLW$UEHLWHQPLW8QWHUDEIUDJHQ
Y
$QSDVVXQJVLQIRUPDWLRQHQ
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.
:LFKWLJ 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.
(LQULFKWHQGHUhEXQJVHLQKHLW
Es gibt keine Anforderungen zum Einrichten der Übungseinheit, die die
Replikation oder die Anpassung betreffen.
(UJHEQLVVHGHUhEXQJVHLQKHLW
Auf den Kursteilnehmercomputern gibt es keine Konfigurationsänderungen, die
die Replikation oder die Anpassung betreffen.
LY
8QWHUULFKWVHLQKHLW$UEHLWHQPLW8QWHUDEIUDJHQ
This page is intentionally left blank.
8QWHUULFKWVHLQKHLW$UEHLWHQPLW8QWHUDEIUDJHQ
hEHUVLFKW
,QKDOWGLHVHU)ROLH
*HEHQ6LHHLQHNXU]H
hEHUVLFKWEHUGLH7KHPHQ
GLHVHU8QWHUULFKWVHLQKHLW
„
(LQIKUXQJLQ8QWHUDEIUDJHQ
(LQVWLHJ
„
9HUZHQGHQHLQHU8QWHUDEIUDJHDOVDEJHOHLWHWH7DEHOOH
„
9HUZHQGHQHLQHU8QWHUDEIUDJHDOV$XVGUXFN
„
9HUZHQGHQHLQHU8QWHUDEIUDJH]XP.RUUHOLHUHQ
YRQ'DWHQ
„
9HUZHQGHQGHU(;,676 XQG127(;,676.ODXVHOQ
,QGLHVHU8QWHUULFKWVHLQKHLW
OHUQHQ6LHGLHHUZHLWHUWHQ
$EIUDJHWHFKQLNHQNHQQHQ
****************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.
8QWHUULFKWVHLQKHLW$UEHLWHQPLW8QWHUDEIUDJHQ
(LQIKUXQJLQ8QWHUDEIUDJHQ
,QKDOWGLHVHU)ROLH
(UOlXWHUQ6LHZDQQ8QWHU
DEIUDJHQYHUZHQGHWZHUGHQ
VROOWHQ
„
(LQVWLHJ
8QWHUDEIUDJHQEHVWHKHQDXV
HLQHU5HLKHYRQ6(/(&7
$QZHLVXQJHQ,QYLHOHQ
)lOOHQN|QQHQ6LH8QWHU
DEIUDJHQDOV9HUNQSIXQJHQ
QHXVFKUHLEHQ
*UQGHIUGLH9HUZHQGXQJYRQ8QWHUDEIUDJHQ
z
z
„
%HDQWZRUWHQ YRQ$EIUDJHQGLHYRQGHQ (UJHEQLVVHQ
HLQHUDQGHUHQ $EIUDJH DEKlQJHQ
*UQGHIUGLH9HUZHQGXQJYRQ9HUNQSIXQJHQDQVWHOOH
YRQ8QWHUDEIUDJHQ
z
„
8QWHUJOLHGHUQ NRPSOH[HU $EIUDJHQ LQHLQH 5HLKH
ORJLVFKHU 6FKULWWH
64/6HUYHUIKUW9HUNQSIXQJHQHIIL]LHQWHUDXVDOV
8QWHUDEIUDJHQ
9HUZHQGXQJYRQ8QWHUDEIUDJHQ
****************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.
*UQGHIUGLH9HUZHQGXQJYRQ8QWHUDEIUDJHQ
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.
*UQGHIUGLH9HUZHQGXQJYRQ9HUNQSIXQJHQDQVWHOOH
YRQ8QWHUDEIUDJHQ
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.
8QWHUULFKWVHLQKHLW$UEHLWHQPLW8QWHUDEIUDJHQ
0HWKRGLVFKHU+LQZHLV
%HVSUHFKHQ6LHDOOH$V
SHNWHXQG5LFKWOLQLHQGLH
EHLP9HUZHQGHQYRQ8QWHU
DEIUDJHQEHUFNVLFKWLJW
ZHUGHQVROOWHQ
9HUZHQGXQJYRQ8QWHUDEIUDJHQ
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.
8QWHUULFKWVHLQKHLW$UEHLWHQPLW8QWHUDEIUDJHQ
9HUZHQGHQHLQHU8QWHUDEIUDJHDOVDEJHOHLWHWH7DEHOOH
,QKDOWGLHVHU)ROLH
%HVFKUHLEHQ6LHZLHHLQH
8QWHUDEIUDJHDOVDEJHOHLWHWH
7DEHOOHYHUZHQGHWZLUG
(LQVWLHJ
6LHHUVWHOOHQHLQHDEJH
OHLWHWH7DEHOOHLQGHP6LHLQ
HLQHU)520.ODXVHOHLQH
8QWHUDEIUDJHDQVWHOOHHLQHU
7DEHOOHYHUZHQGHQ
„
'LH8QWHUDEIUDJHLVWHLQ 5HFRUGVHW LQGHU$EIUDJHGDV
ZLHHLQH7DEHOOHIXQNWLRQLHUW
„
'LH8QWHUDEIUDJHZLUGLQGHU)520.ODXVHODQVWHOOH
HLQHU7DEHOOHYHUZHQGHW
„
'LH8QWHUDEIUDJHZLUGPLWGHP5HVWGHU$EIUDJH
RSWLPLHUW
86(1RUWKZLQG
86(1RUWKZLQG
6(/(&77RUGHULG7FXVWRPHULG
6(/(&77RUGHULG7FXVWRPHULG
)5206(/(&7RUGHULGFXVWRPHULG
)5206(/(&7RUGHULGFXVWRPHULG
)520RUGHUV
)520RUGHUV $67
$67
*2
*2
****************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.
%HLVSLHO
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.
86(1RUWKZLQG
6(/(&77RUGHULG7FXVWRPHULG
)5206(/(&7RUGHULGFXVWRPHULG
)520RUGHUV$67
*2
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.
8QWHUULFKWVHLQKHLW$UEHLWHQPLW8QWHUDEIUDJHQ
9HUZHQGHQHLQHU8QWHUDEIUDJHDOV$XVGUXFN
,QKDOWGLHVHU)ROLH
%HVFKUHLEHQ6LHZLHHLQH
8QWHUDEIUDJHDOV$XVGUXFN
YHUZHQGHWZLUG
„
'LH8QWHUDEIUDJHZLUGZLHHLQ$XVGUXFNDXVJHZHUWHW
XQGEHDUEHLWHW
„
'LH8QWHUDEIUDJHZLUGHLQPDOIUGLHJHVDPWH$EIUDJH
DXVJHZHUWHW
(LQVWLHJ
6LHN|QQHQHLQH8QWHU
DEIUDJHLPPHUHUVHW]HQ
ZHQQ6LHHLQHQ$XVGUXFNLQ
6(/(&783'$7(
,16(57XQG'(/(7(
$QZHLVXQJHQYHUZHQGHQ
86(SXEV
86(SXEV
6(/(&7WLWOHSULFH
6(/(&7WLWOHSULFH
6(/(&7$9*SULFH)520WLWOHV$6DYHUDJH
6(/(&7$9*SULFH)520WLWOHV$6DYHUDJH
SULFH6(/(&7$9*SULFH)520WLWOHV$6GLIIHUHQFH
SULFH6(/(&7$9*SULFH)520WLWOHV$6GLIIHUHQFH
)520WLWOHV
)520WLWOHV
:+(5(W\SH
:+(5(W\SH SRSXODUBFRPS
SRSXODUBFRPS
*2
*2
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG****************
0HWKRGLVFKHU+LQZHLV
:HLVHQ6LHGDUDXIKLQGDVV
8QWHUDEIUDJHQGLHHLQH
/LVWHYRQ:HUWHQ]XUFN
JHEHQHLQHQ$XVGUXFNLQ
HLQHU:+(5(.ODXVHO
HUVHW]HQGLHGDV,1
6FKOVVHOZRUWDXIZHLVWRGHU
LQGHU)520.ODXVHODOV
DEJHOHLWHWH7DEHOOHYHU
ZHQGHWZHUGHQN|QQHQ
%HLVSLHO
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.
86(SXEV
6(/(&7WLWOHSULFH
6(/(&7$9*SULFH)520WLWOHV$6DYHUDJH
SULFH6(/(&7$9*SULFH)520WLWOHV$6GLIIHUHQFH
)520WLWOHV
:+(5(W\SH SRSXODUBFRPS
*2
8QWHUULFKWVHLQKHLW$UEHLWHQPLW8QWHUDEIUDJHQ
‹ 9HUZHQGHQHLQHU8QWHUDEIUDJH]XP.RUUHOLHUHQ
YRQ'DWHQ
,QKDOWGLHVHU)ROLH
%HVFKUHLEHQ6LHZLHHLQH
8QWHUDEIUDJH]XP.RUUHOLH
UHQYRQ'DWHQYHUZHQGHW
ZLUG
(LQVWLHJ
(LQHNRUUHOLHUWH8QWHUDE
IUDJHNDQQDOVG\QDPLVFKHU
$XVGUXFNYHUZHQGHW
ZHUGHQGHUVLFKIUMHGH
=HLOHHLQHUlX‰HUHQ$EIUDJH
lQGHUW
„
$XVZHUWHQHLQHUNRUUHOLHUWHQ8QWHUDEIUDJH
„
,PLWLHUHQHLQHU-2,1.ODXVHO
„
,PLWLHUHQHLQHU+$9,1*.ODXVHO
****************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.
7LSS 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.
8QWHUULFKWVHLQKHLW$UEHLWHQPLW8QWHUDEIUDJHQ
$XVZHUWHQHLQHUNRUUHOLHUWHQ8QWHUDEIUDJH
,QKDOWGLHVHU)ROLH
Die
Dieäußere
äußereAbfrage
Abfrageübergibt
übergibtdie
die
Spaltenwerte
Spaltenwertean
andie
dieinnere
innere
Abfrage
Abfrage
(UOlXWHUQ6LHZLHNRUUHOLHUWH
8QWHUDEIUDJHQYHUDUEHLWHW
ZHUGHQ
Die
Dieinnere
innereAbfrage
Abfrageverwendet
verwendet
diesen
, um
Wert
diesenWert,
Wert,
umdie
dieinnere
innere
Abfrage
üllen
erf
Abfragezu
zuerfü
erfüllen
86(1RUWKZLQG
86(1RUWKZLQG
6(/(&7RUGHULGFXVWRPHULG
6(/(&7RUGHULGFXVWRPHULG
)520RUGHUV$6RU
)520RUGHUV$6RU
:+(5(6(/(&7TXDQWLW\
:+(5(6(/(&7TXDQWLW\
)520>RUGHUGHWDLOV@$6RG
)520>RUGHUGHWDLOV@$6RG
:+(5(RURUGHULG
:+(5(RURUGHULG RGRUGHULG
RGRUGHULG
$1'RGSURGXFWLG
$1'RGSURGXFWLG *2
*2
(LQVWLHJ
:HQQ6LHHLQHNRUUHOLHUWH
8QWHUDEIUDJHHUVWHOOHQ
ZHUGHQGLHLQQHUHQ8QWHU
DEIUDJHQZLHGHUKROWDXV
JHZHUWHWHLQPDOIUMHGH
=HLOHGHUlX‰HUHQ$EIUDJH
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
der
ä
u
ß
eren
Zeile der äußeren
Abfrage
Abfragewiederholt
wiederholt
Zurück
Zurückzu
zuSchritt
Schritt11
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG****************
0HWKRGLVFKHU+LQZHLV
9HUJOHLFKHQ6LHNRUUHOLHUWH
8QWHUDEIUDJHQPLWJH
VFKDFKWHOWHQ8QWHUDEIUDJHQ
%HLVSLHO
(UJHEQLV
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.
86(1RUWKZLQG
6(/(&7RUGHULGFXVWRPHULG
)520RUGHUV$6RU
:+(5(6(/(&7TXDQWLW\
)520>RUGHUGHWDLOV@$6RG
:+(5(RURUGHULG RGRUGHULG
$1'RGSURGXFWLG *2
RUGHULG
FXVWRPHULG
URZVDIIHFWHG
)5$1.
:$1'.
)5$1.
(516+
&216+
8QWHUULFKWVHLQKHLW$UEHLWHQPLW8QWHUDEIUDJHQ
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.
%HLVSLHO
(UJHEQLV
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.
86(1RUWKZLQG
6(/(&7',67,1&7SURGXFWLGTXDQWLW\
)520>RUGHUGHWDLOV@$6RUG
:+(5(TXDQWLW\ 6(/(&70$;TXDQWLW\
)520>RUGHUGHWDLOV@$6RUG
:+(5(RUGSURGXFWLG RUGSURGXFWLG
*2
SURGXFWLG
TXDQWLW\
URZVDIIHFWHG
8QWHUULFKWVHLQKHLW$UEHLWHQPLW8QWHUDEIUDJHQ
,PLWLHUHQHLQHU-2,1.ODXVHO
,QKDOWGLHVHU)ROLH
%HVFKUHLEHQ6LHZLHHLQH
NRUUHOLHUWH$EIUDJH]XP
,PLWLHUHQHLQHU-2,1.ODXVHO
YHUZHQGHWZLUG
(LQVWLHJ
6LHN|QQHQHLQHNRUUHOLHUWH
8QWHUDEIUDJHYHUZHQGHQ
XPGLHJOHLFKHQ(UJHEQLVVH
ZLHPLWHLQHU-2,1.ODXVHO
]XHU]LHOHQ
„
0LWNRUUHOLHUWHQ8QWHUDEIUDJHQN|QQHQGLHJOHLFKHQ
(UJHEQLVVHZLHPLWHLQHU-2,1.ODXVHO HU]LHOWZHUGHQ
„
'XUFK 9HUNQSIXQJHQNDQQ GHU $EIUDJHRSWLPLHUHU GLH
HIIL]LHQWHVWH 0HWKRGH ]XP .RUUHOLHUHQ YRQ'DWHQ
EHVWLPPHQ
86(SXEV
86(SXEV
6(/(&7',67,1&7WW\SH
6(/(&7',67,1&7WW\SH
)520WLWOHV$6W
)520WLWOHV$6W
:+(5(WW\SH,1
:+(5(WW\SH,1
6(/(&7WW\SH
6(/(&7WW\SH
)520WLWOHV$6W
)520WLWOHV$6W
:+(5(WSXEBLG!WSXEBLG
:+(5(WSXEBLG!WSXEBLG
*2
*2
Beispiel
Beispiel 11
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG****************
0HWKRGLVFKHU+LQZHLV
:LFKWLJIUGDV9HUVWHKHQ
GHU6\QWD[HLQHUNRUUHOLHUWHQ
8QWHUDEIUDJHVLQG.HQQW
QLVVHLP9HUZHQGHQYRQ
7DEHOOHQDOLDVQDPHQ'LH
7DEHOOHQDOLDVQDPHQ]HLJHQ
,KQHQZHOFKH7DEHOOHQ
NRUUHOLHUHQ
%HLVSLHO
(UJHEQLV
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.
$QPHUNXQJ 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.
86(SXEV
6(/(&7',67,1&7WW\SH
)520WLWOHV$6W
:+(5(WW\SH,1
6(/(&7WW\SH
)520WLWOHV$6W
:+(5(WSXEBLG!WSXEBLG
*2
7\SH
EXVLQHVV
SV\FKRORJ\
URZVDIIHFWHG
8QWHUULFKWVHLQKHLW$UEHLWHQPLW8QWHUDEIUDJHQ
%HLVSLHO
In diesem Beispiel wird das gleiche Ergebnis zurückgegeben wie in Beispiel 1,
indem eine Selbstverknüpfung anstelle einer korrelierten Unterabfrage verwendet wird.
86(SXEV
6(/(&7',67,1&7WW\SH
)520WLWOHV$6W
,11(5-2,1WLWOHV$6W
21WW\SH WW\SH
:+(5(WSXEBLG!WSXEBLG
*2
0HWKRGLVFKHU+LQZHLV
9HUZHQGHQ6LH64/4XHU\
$QDO\]HUXPEHLGH-2,1
%HLVSLHOHDXV]XIKUHQXQG
]HLJHQ6LHGLHXQWHUVFKLHG
OLFKHQ$XVIKUXQJVSOlQH
8QWHUULFKWVHLQKHLW$UEHLWHQPLW8QWHUDEIUDJHQ
,PLWLHUHQHLQHU+$9,1*.ODXVHO
,QKDOWGLHVHU)ROLH
%HVFKUHLEHQ6LHZLHHLQH
+$9,1*.ODXVHOLPLWLHUW
ZHUGHQNDQQ
(LQVWLHJ
6LHN|QQHQHLQHNRUUHOLHUWH
8QWHUDEIUDJHYHUZHQGHQ
XPGLHJOHLFKHQ(UJHEQLVVH
ZLHGXUFKHLQH$EIUDJHPLW
HLQHU+$9,1*.ODXVHO]X
HU]LHOHQ
„
8QWHUDEIUDJHPLWGHPJOHLFKHQ(UJHEQLVZLHHLQH
+$9,1*.ODXVHO
Beispiel
86(SXEV
Beispiel 11
86(SXEV
6(/(&7WW\SHWWLWOHWSULFH
6(/(&7WW\SHWWLWOHWSULFH
)520WLWOHV$6W
)520WLWOHV$6W
:+(5(WSULFH!6(/(&7$9*WSULFH)520WLWOHV$6W
:+(5(WSULFH!6(/(&7$9*WSULFH)520WLWOHV$6W
:+(5(WW\SH
:+(5(WW\SH WW\SH
WW\SH
*2
*2
„
9HUZHQGHQHLQHU+$9,1*.ODXVHORKQH8QWHUDEIUDJH
86(SXEV
86(SXEV
6(/(&7WW\SHWWLWOHWSULFH
6(/(&7WW\SHWWLWOHWSULFH
)520WLWOHV$6W
)520WLWOHV$6W
,11(5-2,1WLWOHV$6W21WW\SH
,11(5-2,1WLWOHV$6W21WW\SH WW\SH
WW\SH
*5283%<WW\SHWWLWOHWSULFH
*5283%<WW\SHWWLWOHWSULFH
+$9,1*WSULFH!$9*WSULFH
+$9,1*WSULFH!$9*WSULFH
*2
*2
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.
%HLVSLHO
0HWKRGLVFKHU+LQZHLV
9HUZHQGHQ6LH64/4XHU\
$QDO\]HUXPEHLGH%HL
VSLHOHDXV]XIKUHQXQGXP
]XEHUSUIHQREVLH]XP
JOHLFKHQ(UJHEQLVIKUHQ
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.
86(SXEV
6(/(&7WW\SHWWLWOHWSULFH
)520WLWOHV$6W
:+(5(WSULFH!6(/(&7$9*WSULFH
)520WLWOHV$6W
:+(5(WW\SH WW\SH
*2
5HVXOWW\SH
WLWOH
%XVLQHVV
%XVLQHVV
PRGBFRRN
SRSXODUBFRPS
3V\FKRORJ\
3V\FKRORJ\
WUDGBFRRN
URZVDIIHFWHG
7KH%XV\([HFXWLYH
V'DWDEDVH*XLGH
6WUDLJKW7DON$ERXW&RPSXWHUV
6LOLFRQ9DOOH\*DVWURQRPLF7UHDWV
%XW,V,W8VHU)ULHQGO\"
&RPSXWHU3KRELF$1'1RQ3KRELF
,QGLYLGXDOV%HKDYLRU9DULDWLRQV
3URORQJHG'DWD'HSULYDWLRQ)RXU&DVH
6WXGLHV
2QLRQV/HHNVDQG*DUOLF&RRNLQJ
6HFUHWVRIWKH0HGLWHUUDQHDQ
8QWHUULFKWVHLQKHLW$UEHLWHQPLW8QWHUDEIUDJHQ
%HLVSLHO
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.
86(SXEV
6(/(&7WW\SHWWLWOHWSULFH
)520WLWOHV$6W
,11(5-2,1WLWOHV$6W
21WW\SH WW\SH
*5283%<WW\SHWWLWOHWSULFH
+$9,1*WSULFH!$9*WSULFH
*2
$QPHUNXQJ 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.
8QWHUULFKWVHLQKHLW$UEHLWHQPLW8QWHUDEIUDJHQ
9HUZHQGHQGHU(;,676XQG127(;,676.ODXVHOQ
,QKDOWGLHVHU)ROLH
(UOlXWHUQ6LHZLHGLH
(;,676XQG127(;,676
2SHUDWRUHQ]XVDPPHQPLW
NRUUHOLHUWHQ8QWHUDEIUDJHQ
YHUZHQGHWZHUGHQ
(LQVWLHJ
„
9HUZHQGHQPLWNRUUHOLHUWHQ8QWHUDEIUDJHQ
„
%HVWLPPHQGHV9RUKDQGHQVHLQVYRQ'DWHQLQHLQHU
/LVWHYRQ:HUWHQ
„
64/ 6HUYHU3UR]HVV
z
0LWGHQ(;,676XQG127
(;,6762SHUDWRUHQN|QQHQ
6LHHUPLWWHOQRE'DWHQLQ
HLQHU/LVWHYRQ:HUWHQ
YRUKDQGHQVLQG
z
z
'LHlX‰HUH$EIUDJHEHUSUIWRE=HLOHQYRUKDQGHQVLQG
'LHLQQHUH$EIUDJHJLEW 758(RGHU )$/6(]XUFN
(VZHUGHQNHLQH'DWHQ]XUFNJHJHEHQ
Beispiel
Beispiel 11
86(1RUWKZLQG
86(1RUWKZLQG
6(/(&7ODVWQDPHHPSOR\HHLG
6(/(&7ODVWQDPHHPSOR\HHLG
)520HPSOR\HHV$6H
)520HPSOR\HHV$6H
:+(5((;,676
:+(5((;,676 6(/(&7)520RUGHUV
6(/(&7)520RUGHUV $6R
$6R
:+(5(HHPSOR\HHLG
:+(5(HHPSOR\HHLG RHPSOR\HHLG
RHPSOR\HHLG
$1'
$1' RRUGHUGDWH
RRUGHUGDWH *2
*2
****************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.
9HUZHQGHQPLWNRUUHOLHUWHQ8QWHUDEIUDJHQ
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.
%HVWLPPHQGHV9RUKDQGHQVHLQVYRQ'DWHQLQHLQHU/LVWH
YRQ:HUWHQ
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.
64/6HUYHU3UR]HVV
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.
8QWHUULFKWVHLQKHLW$UEHLWHQPLW8QWHUDEIUDJHQ
7HLOV\QWD[
WHERE [NOT] EXISTS (subquery)
%HLVSLHO
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.
0HWKRGLVFKHU+LQZHLV
)KUHQ6LHGLHEHLGHQ
%HLVSLHOHDXVZREHL
67$7,67,&67,0(DXI21
IHVWJHOHJWLVWXPGLH9HU
DUEHLWXQJV]HLW]XYHU
JOHLFKHQ
(UJHEQLV
86(1RUWKZLQG
6(/(&7ODVWQDPHHPSOR\HHLG
)520HPSOR\HHV$6H
:+(5((;,6766(/(&7)520RUGHUV$6R
:+(5(HHPSOR\HHLG RHPSOR\HHLG
$1'RRUGHUGDWH *2
ODVWQDPH
HPSOR\HHLG
3HDFRFN
.LQJ
URZVDIIHFWHG
%HLVSLHO
(UJHEQLV
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.
86(1RUWKZLQG
6(/(&7',67,1&7ODVWQDPHHHPSOR\HHLG
)520RUGHUV$6R
,11(5-2,1HPSOR\HHV$6H
21RHPSOR\HHLG HHPSOR\HHLG
:+(5(RRUGHUGDWH *2
ODVWQDPH
HPSOR\HHLG
3HDFRFN
.LQJ
URZVDIIHFWHG
8QWHUULFKWVHLQKHLW$UEHLWHQPLW8QWHUDEIUDJHQ
(PSIRKOHQH0HWKRGHQ
,QKDOWGLHVHU)ROLH
/LVWHQ6LHGLHHPSIRKOHQHQ
0HWKRGHQ]XP$EUXIHQXQG
bQGHUQYRQ'DWHQDXI
9HUZHQGHQ6LH8QWHUDEIUDJHQXPNRPSOH[H$EIUDJHQ
9HUZHQGHQ6LH8QWHUDEIUDJHQXPNRPSOH[H$EIUDJHQ
]XXQWHUJOLHGHUQ
]XXQWHUJOLHGHUQ
(LQVWLHJ
'LHIROJHQGHQHPSIRKOHQHQ
0HWKRGHQKHOIHQ,KQHQEHLP
$XVIKUHQHUZHLWHUWHU
$EIUDJHQ
9HUZHQGHQ6LH
9HUZHQGHQ6LH 7DEHOOHQDOLDVQDPHQ
7DEHOOHQDOLDVQDPHQ IUNRUUHOLHUWH8QWHUDEIUDJHQ
IUNRUUHOLHUWH8QWHUDEIUDJHQ
9HUZHQGHQ6LHGLH,16(57ž6(/(&7$QZHLVXQJXP]XHLQHU
9HUZHQGHQ6LHGLH,16(57ž6(/(&7$QZHLVXQJXP]XHLQHU
YRUKDQGHQHQ7DEHOOHDXVDQGHUHQ4XHOOHQ=HLOHQKLQ]X]XIJHQ
YRUKDQGHQHQ7DEHOOHDXVDQGHUHQ4XHOOHQ=HLOHQKLQ]X]XIJHQ
9HUZHQGHQ6LHP|JOLFKVWLPPHUGHQ(;,6762SHUDWRUDQVWHOOHGHV
9HUZHQGHQ6LHP|JOLFKVWLPPHUGHQ(;,6762SHUDWRUDQVWHOOHGHV
,12SHUDWRUV
,12SHUDWRUV
****************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”
8QWHUULFKWVHLQKHLW$UEHLWHQPLW8QWHUDEIUDJHQ
hEXQJVHLQKHLW$$UEHLWHQPLW8QWHUDEIUDJHQ
,QKDOWGLHVHU)ROLH
*HEHQ6LHHLQH(LQIKUXQJ
LQGLHhEXQJVHLQKHLW
(LQVWLHJ
,QGLHVHUhEXQJVHLQKHLW
VFKUHLEHQ6LH8QWHUDE
IUDJHQXQGIKUHQ8QWHUDE
IUDJHQDXVGLHDOV$XV
GUXFN9HUNQSIXQJXQG
]XP.RUUHOLHUHQYRQ'DWHQ
YHUZHQGHWZHUGHQ
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG****************
(UOlXWHUQ6LHGLH/HUQ]LHOH
GHUhEXQJVHLQKHLW
/HUQ]LHOH
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.
9RUDXVVHW]XQJHQ
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.
(LQULFKWHQGHUhEXQJVHLQKHLW
Nicht erforderlich.
:HLWHUH,QIRUPDWLRQHQ
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.
8QWHUULFKWVHLQKHLW$UEHLWHQPLW8QWHUDEIUDJHQ
6]HQDULR
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
9HUDQVFKODJWH=HLWIUGLHhEXQJVHLQKHLW0LQXWHQ
8QWHUULFKWVHLQKHLW$UEHLWHQPLW8QWHUDEIUDJHQ
hEXQJ
9HUZHQGHQHLQHU8QWHUDEIUDJHDOVDEJHOHLWHWH7DEHOOH
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.
86(OLEUDU\
6(/(&7GDGXOWBPHPEHUBQRDH[SUBGDWHG1RB2IB&KLOGUHQ
)520DGXOW$6D
,11(5-2,1
6(/(&7DGXOWBPHPEHUBQR&2817$61RB2IB&KLOGUHQ
)520MXYHQLOH
*5283%<DGXOWBPHPEHUBQR
+$9,1*&2817!
$6G
21DPHPEHUBQR GDGXOWBPHPEHUBQR
*2
5. Führen Sie die Abfrage aus, um zu überprüfen, ob die gewünschten Ergebnisse zurückgegeben werden.
(UJHEQLV
8QWHUULFKWVHLQKHLW$UEHLWHQPLW8QWHUDEIUDJHQ
Das Ergebnis ähnelt dem folgenden Resultset. Die Anzahl der zurückgegebenen
Zeilen kann variieren.
DGXOWBPHPEHUBQR H[SUBGDWH
URZVDIIHFWHG
1RB2IB&KLOGUHQ
$QPHUNXQJ 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.
86(OLEUDU\
6(/(&7DGXOWBPHPEHUBQR&2817$61RB2IB&KLOGUHQ
)520MXYHQLOH
*5283%<DGXOWBPHPEHUBQR
+$9,1*&2817!
*2
2. Führen Sie die Abfrage aus, um zu überprüfen, ob die gewünschten Ergebnisse zurückgegeben werden.
(UJHEQLV
Das Ergebnis ähnelt dem folgenden Resultset. Die Anzahl der zurückgegebenen Zeilen kann variieren.
$GXOWBPHPEHUBQR
1RB2IB&KLOGUHQ
URZVDIIHFWHG
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.
____________________________________________________________
____________________________________________________________
8QWHUULFKWVHLQKHLW$UEHLWHQPLW8QWHUDEIUDJHQ
4. Geben Sie die folgende Abfrage ein, die Daten der expr_date-Spalte aus
der adult-Tabelle abruft.
86(OLEUDU\
6(/(&7DH[SUBGDWH
)520DGXOW$6D
*2
5. Führen Sie die Abfrage aus, um zu überprüfen, ob die gewünschten Ergebnisse zurückgegeben werden.
(UJHEQLV
Das Ergebnis ähnelt dem folgenden Resultset.
H[SUBGDWH
URZVDIIHFWHG
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.
86(OLEUDU\
6(/(&7MDGXOWBPHPEHUBQRDH[SUBGDWH
&2817$61RB2IB&KLOGUHQ
)520DGXOW$6D
,11(5-2,1MXYHQLOH$6M
21DPHPEHUBQR MDGXOWBPHPEHUBQR
*5283%<DGXOWBPHPEHUBQRH[SUBGDWH
+$9,1*&2817!
*2
2. Führen Sie die Abfrage aus, um zu überprüfen, ob die gewünschten Ergebnisse zurückgegeben werden.
(UJHEQLV
8QWHUULFKWVHLQKHLW$UEHLWHQPLW8QWHUDEIUDJHQ
Das Ergebnis ähnelt dem folgenden Resultset. Die Anzahl der zurückgegebenen Zeilen kann variieren.
DGXOWBPHPEHUBQR
H[SUBGDWH
URZVDIIHFWHG
1RB2IB&KLOGUHQ
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.
____________________________________________________________
____________________________________________________________
8QWHUULFKWVHLQKHLW$UEHLWHQPLW8QWHUDEIUDJHQ
hEXQJ
9HUZHQGHQHLQHU8QWHUDEIUDJHDOV$XVGUXFN
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.
86(OLEUDU\
6(/(&70$;ILQHBSDLG
)520ORDQKLVW
*2
2. Führen Sie die Abfrage aus, um zu überprüfen, ob die gewünschten Ergebnisse zurückgegeben werden.
(UJHEQLV
Das Ergebnis ähnelt dem folgenden Resultset.
URZVDIIHFWHG
:DUQXQJ18//:HUWZLUGGXUFKHLQH$JJUHJDWRGHUHLQH
DQGHUH6(72SHUDWLRQJHO|VFKW
Ç 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.
8QWHUULFKWVHLQKHLW$UEHLWHQPLW8QWHUDEIUDJHQ
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.
86(OLEUDU\
6(/(&7',67,1&7ILUVWQDPHODVWQDPHLVEQILQHBSDLG
)520PHPEHU$6P
,11(5-2,1ORDQKLVW$6OK
21PPHPEHUBQR OKPHPEHUBQR
:+(5(OKILQHBSDLG 6(/(&70$;ILQHBSDLG)520ORDQKLVW
*2
4. Führen Sie die Abfrage aus, um zu überprüfen, ob die gewünschten Ergebnisse zurückgegeben werden.
(UJHEQLV
Das Ergebnis ähnelt dem folgenden Resultset. Die Anzahl der zurückgegebenen Zeilen kann variieren.
)LUVWQDPH
ODVWQDPH
LVEQ
ILQHBSDLG
0LFKDHO
1DVK
5REHUW
5RWKHQEHUJ
URZVDIIHFWHG
:DUQXQJ18//:HUWZLUGGXUFKHLQH$JJUHJDWRGHUHLQH
DQGHUH6(72SHUDWLRQJHO|VFKW
Ç 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.
86(OLEUDU\
6(/(&7LVEQ
)520UHVHUYDWLRQ
*5283%<LVEQ
+$9,1*&2817!
*2
8QWHUULFKWVHLQKHLW$UEHLWHQPLW8QWHUDEIUDJHQ
2. Führen Sie die Abfrage aus, um zu überprüfen, ob die gewünschten Ergebnisse zurückgegeben werden.
(UJHEQLV
Das Ergebnis ähnelt dem folgenden Teil eines Resultsets. Die Anzahl der
zurückgegebenen Zeilen kann variieren.
,VEQ
URZVDIIHFWHG
Ç 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.
86(OLEUDU\
6(/(&7WWLWOHBQRWLWOHOLVEQ
FRXQW$6
7RWDO5HVHUYHG
)520WLWOH$6W
,11(5-2,1ORDQ$6O
21WWLWOHBQR OWLWOHBQR
,11(5-2,1UHVHUYDWLRQ$6U
21ULVEQ OLVEQ
:+(5(ULVEQ,1
6(/(&7LVEQ
)520UHVHUYDWLRQ
*5283%<LVEQ
+$9,1*&2817!
$1'OFRS\BQR
*5283%<WWLWOHBQRWLWOHOLVEQ
*2
8QWHUULFKWVHLQKHLW$UEHLWHQPLW8QWHUDEIUDJHQ
2. Führen Sie die Abfrage aus, um zu überprüfen, ob die gewünschten Ergebnisse zurückgegeben werden.
(UJHEQLV
Das Ergebnis ähnelt dem folgenden Teil eines Resultsets. Die Anzahl der
zurückgegebenen Zeilen kann variieren.
WLWOHBQR WLWOH
LVEQ 7RWDO5HVHUYHG
/DVWRIWKH0RKLFDQV
7KH%ODFN7XOLS
7KH)LUVW3ULPH1XPEHUV
URZVDIIHFWHG
8QWHUULFKWVHLQKHLW$UEHLWHQPLW8QWHUDEIUDJHQ
hEXQJ
9HUZHQGHQHLQHU8QWHUDEIUDJH]XP.RUUHOLHUHQYRQ'DWHQ
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.
$QPHUNXQJ 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.
86(OLEUDU\
6(/(&7PHPEHUBQRODVWQDPH
)520PHPEHU$6P
*2
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.
8QWHUULFKWVHLQKHLW$UEHLWHQPLW8QWHUDEIUDJHQ
c. Verwenden Sie in der WHERE-Klausel der äußeren Abfrage einen Vergleichsoperator, um die Mitglieder mit Gesamtmahngebühren über 5 $
auszuwählen.
86(OLEUDU\
6(/(&7PHPEHUBQRODVWQDPH
)520PHPEHU$6P
:+(5(6(/(&7680ILQHBDVVHVVHG
)520ORDQKLVW$6OK
:+(5(PPHPEHUBQR OKPHPEHUBQR
*2
4. Führen Sie die Abfrage aus, um zu überprüfen, ob die gewünschten Ergebnisse zurückgegeben werden.
(UJHEQLV
Das Ergebnis ähnelt dem folgenden Teil eines Resultsets. Die Anzahl der
zurückgegebenen Zeilen kann variieren.
PHPEHUBQR
ODVWQDPH
*UDII
0LNVRYVN\
0LNVRYVN\
2
%ULDQ
URZVDIIHFWHG
:DUQXQJ18//:HUWZLUGGXUFKHLQH$JJUHJDWRGHUHLQH
DQGHUH6(72SHUDWLRQJHO|VFKW
8QWHUULFKWVHLQKHLW$UEHLWHQPLW8QWHUDEIUDJHQ
/HUQ]LHONRQWUROOH
,QKDOWGLHVHU)ROLH
9HUWLHIHQ6LHGLH/HUQ]LHOH
GLHVHU8QWHUULFKWVHLQKHLW
LQGHP6LHGLH.HUQSXQNWH
ZLHGHUKROHQ
(LQVWLHJ
'LH)UDJHQ]XU/HUQ]LHO
NRQWUROOHEH]LHKHQVLFKDXI
HLQLJHGHU6FKOVVHONRQ
]HSWHGLH,QKDOWGLHVHU
8QWHUULFKWVHLQKHLWVLQG
„
(LQIKUXQJLQ8QWHUDEIUDJHQ
„
9HUZHQGHQHLQHU8QWHUDEIUDJHDOVDEJHOHLWHWH7DEHOOH
„
9HUZHQGHQHLQHU8QWHUDEIUDJHDOV$XVGUXFN
„
9HUZHQGHQHLQHU8QWHUDEIUDJH]XP.RUUHOLHUHQ
YRQ'DWHQ
„
9HUZHQGHQGHU(;,676 XQG127(;,676.ODXVHOQ
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG****************
9HUZHQGHQ6LHGLHVHV
6]HQDULRXPGLH)UDJHQ]X
EHDQWZRUWHQXQGGLH
7KHPHQGHU8QWHUULFKWV
HLQKHLW]XEHVSUHFKHQ
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)
8QWHUULFKWVHLQKHLW$UEHLWHQPLW8QWHUDEIUDJHQ
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.
6(/(&7SDWBLGSDWBQDPH
6(/(&7FRXQW)520FDVHILOH&:+(5(&SDWBLG 3SDWBLG
)520SDWLHQW$63
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.
8QWHUULFKWVHLQKHLW$UEHLWHQPLW8QWHUDEIUDJHQ
This page is intentionally left blank.
Unterrichtseinheit 7:
Ändern von Daten
Inhalt
Übersicht
1
Verwenden von Transaktionen
2
Einfügen von Daten
Löschen von Daten
4
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.
8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ
LLL
+LQZHLVHIUGHQ.XUVOHLWHU
3UlVHQWDWLRQ
0LQXWHQ
hEXQJVHLQKHLW
0LQXWHQ
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.
8QWHUODJHQXQG9RUEHUHLWXQJ
In diesem Abschnitt werden die erforderlichen Unterlagen und vorbereitenden
Aufgaben erläutert, die nötig sind, um diese Unterrichtseinheit zu unterrichten.
(UIRUGHUOLFKH8QWHUODJHQ
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.
9RUEHUHLWHQGH$XIJDEHQ
Zur Vorbereitung dieser Unterrichtseinheit gehen Sie folgendermaßen vor:
„
Lesen Sie alle Unterlagen.
„
Arbeiten Sie die Übungseinheit durch.
LY
8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ
6WUDWHJLHIUGLH8QWHUULFKWVHLQKHLW
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.
$QSDVVXQJVLQIRUPDWLRQHQ
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.
:LFKWLJ 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.
(LQULFKWHQGHUhEXQJVHLQKHLW
Es gibt keine Anforderungen zum Einrichten der Übungseinheit, die die Replikation oder die Anpassung betreffen.
(UJHEQLVVHGHUhEXQJVHLQKHLW
Auf den Kursteilnehmercomputern gibt es keine Konfigurationsänderungen, die
die Replikation oder die Anpassung betreffen.
8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ
hEHUVLFKW
,QKDOWGLHVHU)ROLH
*HEHQ6LHHLQHhEHUVLFKW
EHUGLH7KHPHQXQG
/HUQ]LHOHGLHVHU8QWHU
ULFKWVHLQKHLW
(LQVWLHJ
,QGLHVHU8QWHUULFKWVHLQKHLW
OHUQHQ6LHZLH'DWHQ
JHlQGHUWZHUGHQ
„
9HUZHQGHQYRQ7UDQVDNWLRQHQ
„
(LQIJHQYRQ'DWHQ
„
/|VFKHQYRQ'DWHQ
„
$NWXDOLVLHUHQYRQ'DWHQ
„
/HLVWXQJVDVSHNWH
****************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.
8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ
9HUZHQGHQYRQ7UDQVDNWLRQHQ
,QKDOWGLHVHU)ROLH
*HEHQ6LHHLQH(LQIKUXQJ
LQGLH7KHPHQGLHVHV
$EVFKQLWWV
„
(LQVWLHJ
7UDQVDNWLRQHQZHUGHQYHU
ZHQGHWXP'DWHQLQWHJULWlW
]XHU]ZLQJHQ
6WDUWHQYRQ7UDQVDNWLRQHQ
„
%HHQGHQYRQ7UDQVDNWLRQHQ
z
([SOL]LW
z
&200,7$QZHLVXQJ
z
$XWRFRPPLW
z
52//%$&.$QZHLVXQJ
z
,PSOL]LW
%(*,175$16$&7,21
%(*,175$16$&7,21
83'$7(VDYLQJV
83'$7(VDYLQJV
83'$7(FKHFNLQJ
83'$7(FKHFNLQJ
&200,775$16$&7,21
&200,775$16$&7,21
****************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.
6WDUWHQYRQ7UDQVDNWLRQHQ
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.
8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ
%HHQGHQYRQ7UDQVDNWLRQHQ
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.
%HLVSLHO
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.
%(*,175$16$&7,21
83'$7(VDYLQJV
6(7EDODQFH EDODQFH
:+(5(FXVWLG ,)##(5525!
%(*,1
5$,6(5525
)HKOHU7UDQVDNWLRQQLFKWEHHQGHW
52//%$&.75$16$&7,21
(1'
83'$7(FKHFNLQJ
6(7EDODQFH EDODQFH
:+(5(FXVWLG ,)##(5525!
%(*,1
5$,6(5525
)HKOHU7UDQVDNWLRQQLFKWEHHQGHW
52//%$&.75$16$&7,21
(1'
&200,775$16$&7,21
$QPHUNXQJ Dieses Beispiel dient nur der Erläuterung und führt zu keinen
Ergebnissen.
8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ
‹(LQIJHQYRQ'DWHQ
,QKDOWGLHVHU)ROLH
*HEHQ6LHHLQH(LQIKUXQJ
LQGLH7KHPHQGLHVHV
$EVFKQLWWV
„
(LQIJHQHLQHU'DWHQ]HLOHGXUFK$QJDEHGHU:HUWH
(LQVWLHJ
„
9HUZHQGHQGHU,16(57ž6(/(&7$QZHLVXQJ
„
(UVWHOOHQHLQHU7DEHOOHPLW+LOIHGHU6(/(&7,172
$QZHLVXQJ
„
(LQIJHQYRQ7HLOGDWHQ
„
(LQIJHQYRQ'DWHQPLW+LOIHYRQ
6SDOWHQVWDQGDUGZHUWHQ
'DWHQN|QQHQPLW+LOIHHLQHU
7UDQVDNWLRQHLQJHIJW
ZHUGHQLQGHP6LHHLQH
:HUWHPHQJHDQJHEHQRGHU
GLH(UJHEQLVVHHLQHU
6(/(&7$QZHLVXQJ
HLQIJHQ
****************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.
8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ
(LQIJHQHLQHU'DWHQ]HLOHGXUFK$QJDEHGHU:HUWH
,QKDOWGLHVHU)ROLH
=HLJHQ6LHZLHHLQH=HLOH
PLW:HUWHQ]XHLQHU7DEHOOH
PLW+LOIHGHU,16(57$QZHL
VXQJKLQ]XJHIJWZHUGHQ
NDQQ
„
'LH=LHOHLQVFKUlQNXQJHQPVVHQHLQJHKDOWHQZHUGHQ
VRQVWVFKOlJWGLH,16(577UDQVDNWLRQIHKO
„
9HUZHQGHQGHU6SDOWHQOLVWH ]XP$QJHEHQYRQ
=LHOVSDOWHQ
(LQVWLHJ
„
$QJHEHQHLQHUEHUHLQVWLPPHQGHQ :HUWHOLVWH
'LH,16(57$QZHLVXQJIJW
=HLOHQ]X7DEHOOHQKLQ]X
86(1RUWKZLQG
86(1RUWKZLQG
,16(57FXVWRPHUV
,16(57FXVWRPHUV
FXVWRPHULGFRPSDQ\QDPHFRQWDFWQDPH
FXVWRPHULGFRPSDQ\QDPHFRQWDFWQDPH
FRQWDFWWLWOH
FRQWDFWWLWOH
DGGUHVVFLW\UHJLRQSRVWDOFRGHFRXQWU\SKRQH
DGGUHVVFLW\UHJLRQSRVWDOFRGHFRXQWU\SKRQH
ID[
ID[
9$/8(6
3(&2)
3HFRV&RIIHH&RPSDQ\
0LFKDHO'XQQ
9$/8(6
3(&2)
3HFRV&RIIHH&RPSDQ\
0LFKDHO'XQQ
2ZQHU
2DN6WUHHW
9DQFRXYHU
%&
2ZQHU
2DN6WUHHW
9DQFRXYHU
%&
9).
&DQDGD
9).
&DQDGD
*2
*2
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG****************
Die INSERT-Anweisung fügt Zeilen zu einer Tabelle hinzu.
7HLOV\QWD[
0HWKRGLVFKHU+LQZHLV
%HWRQHQ6LHDQKDQGGHV
%HLVSLHOVDXIGHU)ROLHGDVV
DOOH:HUWHLQGHU
FXVWRPHUV7DEHOOH
=HLFKHQZHUWHVLQGXQG
GDKHULQHLQIDFKH
$QIKUXQJV]HLFKHQ
HLQJHVFKORVVHQVLQG
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.
8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ
%HLVSLHO
Im folgenden Beispiel wird Pecos Coffee Company als neuer Kunde hinzugefügt.
86(1RUWKZLQG
,16(57FXVWRPHUV
FXVWRPHULGFRPSDQ\QDPHFRQWDFWQDPHFRQWDFWWLWOH
DGGUHVVFLW\UHJLRQSRVWDOFRGHFRXQWU\SKRQH
ID[
9$/8(6
3(&2)
3HFRV&RIIHH&RPSDQ\
0LFKDHO'XQQ
2ZQHU
2DN6WUHHW
9DQFRXYHU
%&
9).
&DQDGD
*2
Sie können überprüfen, ob Pecos Coffee Company zur customers-Tabelle
hinzugefügt wurde, indem Sie die folgende Anweisung ausführen.
(UJHEQLV
86(1RUWKZLQG
6(/(&7FRPSDQ\QDPHFRQWDFWQDPH
)520FXVWRPHUV
:+(5(FXVWRPHULG 3(&2)
*2
FRPSDQ\QDPH
FRQWDFWQDPH
3HFRV&RIIHH&RPSDQ\
URZVDIIHFWHG
0LFKDHO'XQQ
8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ
9HUZHQGHQGHU,16(57ž6(/(&7$QZHLVXQJ
,QKDOWGLHVHU)ROLH
=HLJHQ6LHZLH=HLOHQPLW
+LOIHJHVFKDFKWHOWHU
6(/(&7$QZHLVXQJHQDXV
HLQHU7DEHOOHLQHLQHDQGHUH
7DEHOOHHLQJHIJWZHUGHQ
(LQVWLHJ
(VLVWP|JOLFKPLW+LOIH
JHVFKDFKWHOWHU6(/(&7
$QZHLVXQJHQ=HLOHQDXV
HLQHU7DEHOOHLQGLHVHOEH
RGHUHLQHDQGHUH7DEHOOH
HLQ]XIJHQ
„
$OOH=HLOHQGLHGLH6(/(&7$QZHLVXQJHUIOOHQZHUGHQ
HLQJHIJW
„
hEHUSUIHQREGLH7DEHOOHLQGHUGLHQHXHQ=HLOHQ
HLQJHIJWZHUGHQYRUKDQGHQLVW
„
6LFKHUVWHOOHQ GDVV GLH'DWHQW\SHQ NRPSDWLEHO VLQG
„
(UPLWWHOQ RE6WDQGDUGZHUWHYRUKDQGHQRGHU18//:HUWH
]XOlVVLJVLQG
86(1RUWKZLQG
86(1RUWKZLQG
,16(57FXVWRPHUV
,16(57FXVWRPHUV
6(/(&7VXEVWULQJ
6(/(&7VXEVWULQJ ILUVWQDPH
ILUVWQDPH
VXEVWULQJODVWQDPH
VXEVWULQJODVWQDPH
ODVWQDPH
ODVWQDPH ILUVWQDPH
ILUVWQDPH WLWOH
WLWOH DGGUHVVFLW\
DGGUHVVFLW\
UHJLRQSRVWDOFRGH
UHJLRQSRVWDOFRGH FRXQWU\KRPHSKRQH18//
FRXQWU\KRPHSKRQH18//
)520HPSOR\HHV
)520HPSOR\HHV
*2
*2
****************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.
6\QWD[
INSERT table_name
SELECT column_list
FROM table_list
WHERE search_conditions
%HLVSLHO
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.
8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ
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.
86(1RUWKZLQG
,16(57FXVWRPHUV
6(/(&7VXEVWULQJILUVWQDPH
VXEVWULQJODVWQDPH
ODVWQDPHILUVWQDPHWLWOHDGGUHVVFLW\
UHJLRQSRVWDOFRGHFRXQWU\KRPHSKRQH18//
)520HPSOR\HHV
*2
8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ
(UVWHOOHQHLQHU7DEHOOHPLW+LOIHGHU6(/(&7,172$QZHLVXQJ
,QKDOWGLHVHU)ROLH
(UNOlUHQ6LHGHQ=ZHFNXQG
GLH)XQNWLRQGHU6(/(&7
,172$QZHLVXQJ
„
(UVWHOOHQYRQ7DEHOOHQXQG(LQIJHQYRQ=HLOHQLQHLQH
7DEHOOHLQHLQHUHLQ]LJHQ2SHUDWLRQ
„
(UVWHOOHQ HLQHUORNDOHQWHPSRUlUHQ7DEHOOHRGHUHLQHU
JOREDOHQWHPSRUlUHQ7DEHOOH
„
(UVWHOOHQYRQ6SDOWHQDOLDVQDPHQRGHU$QJHEHQYRQ
6SDOWHQQDPHQIUGLHQHXH7DEHOOHLQGHU$XVZDKOOLVWH
(LQVWLHJ
0LW+LOIHGHU6(/(&7,172
$QZHLVXQJNDQQGDV
5HVXOWVHWMHGHU$EIUDJHLQ
HLQHUQHXHQ7DEHOOH
GDUJHVWHOOWZHUGHQ
86(1RUWKZLQG
86(1RUWKZLQG
6(/(&7
6(/(&7 SURGXFWQDPH$6SURGXFWV
SURGXFWQDPH$6SURGXFWV
XQLWSULFH$6SULFH
XQLWSULFH$6SULFH
XQLWSULFH$6WD[
XQLWSULFH$6WD[
,1723ULFH7DEOH
,1723ULFH7DEOH
)5203URGXFWV
)5203URGXFWV
*2
*2
****************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.
8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ
• 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.
7HLOV\QWD[
SELECT select_list
INTO new_table
FROM {table_source}[,…n]
WHERE search_condition
%HLVSLHO
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.
0HWKRGLVFKHU+LQZHLV
)KUHQ6LHGLHVHV%HLVSLHO
PLW+LOIHYRQ64/4XHU\
$QDO\]HUYRU
86(1RUWKZLQG
6(/(&7SURGXFWQDPH$6SURGXFWV
XQLWSULFH$6SULFH
XQLWSULFH$6WD[
,1723ULFH7DEOH
)5203URGXFWV
*2
Um das Resultset anzuzeigen, muss die folgende Abfrage ausgeführt werden.
(UJHEQLV
86(1RUWKZLQG
6(/(&7)5203ULFH7DEOH
*2
SURGXFWV
&KDL
&KDQJ
$QLVHHG6\UXS
&KHI$QWRQ
V&DMXQ6HDVRQLQJ
&KHI$QWRQ
V*XPER0L[
*UDQGPD
V%R\VHQEHUU\6SUHDG
8QFOH%RE
V2UJDQLF'ULHG3HDUV
1RUWKZRRGV&UDQEHUU\6DXFH
0LVKL.REH1LNX
,NXUD
4XHVR&DEUDOHV
4XHVR0DQFKHJR/D3DVWRUD
.RQEX
7RIX
*HQHQ6KRX\X
URZVDIIHFWHG
SULFH
WD[
8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ
(LQIJHQYRQ7HLOGDWHQ
,QKDOWGLHVHU)ROLH
Hinzufügen neuer Daten
(UOlXWHUQ6LHZLHHLQH=HLOH
HLQJHIJWZLUGRKQHVlPW
OLFKH'DWHQHOHPHQWHDQ]X
JHEHQ
86(1RUWKZLQG
86(1RUWKZLQG
,16(57VKLSSHUVFRPSDQ\QDPH
,16(57VKLSSHUVFRPSDQ\QDPH
9$/8(6
)LWFK0DWKHU
9$/8(6
)LWFK0DWKHU
*2
*2
(LQVWLHJ
Beispiel
Beispiel 11
Überprüfen neuer Daten
:HQQHLQH6SDOWHEHU
HLQHQ6WDQGDUGZHUWYHUIJW
RGHU18//:HUWH]XOlVVW
NDQQGLH6SDOWHLQGHU
,16(57$QZHLVXQJZHJ
JHODVVHQZHUGHQ
64/6HUYHUIJWGLH:HUWH
DXWRPDWLVFKHLQ
86(1RUWKZLQG
86(1RUWKZLQG
6(/(&7
6(/(&7
)520VKLSSHUV
)520VKLSSHUV
:+(5(FRPSDQ\QDPH
:+(5(FRPSDQ\QDPH )LWFK0DWKHU©
)LWFK0DWKHU©
*2
*2
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****************
0HWKRGLVFKHU+LQZHLV
9HUJOHLFKHQ6LH%HLVSLHO
PLW%HLVSLHO'DV
'()$8/76FKOVVHOZRUW
ZLUGLQ%HLVSLHOQLFKW
YHUZHQGHW%HLGH%HLVSLHOH
JHEHQGDVVHOEH(UJHEQLV
]XUFN
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.
8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ
%HLVSLHO
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.
86(1RUWKZLQG
,16(57VKLSSHUVFRPSDQ\QDPH
9$/8(6
)LWFK0DWKHU
*2
Sie können überprüfen, ob Fitch & Mather zur shippers-Tabelle hinzugefügt
wurde, indem Sie die folgende Anweisung ausführen.
(UJHEQLV
%HLVSLHO
(UJHEQLV
86(1RUWKZLQG
6(/(&7
)520VKLSSHUV
:+(5(FRPSDQ\QDPH )LWFK0DWKHU
*2
VKLSSHULG
&RPSDQ\1DPH
SKRQH
URZVDIIHFWHG
18//
)LWFK0DWKHU
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.
86(1RUWKZLQG
,16(57VKLSSHUVFRPSDQ\QDPH
9$/8(6
)LWFK0DWKHU
*2
VKLSSHULG
FRPSDQ\QDPH
SKRQH
URZVDIIHFWHG
18//
)LWFK0DWKHU
8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ
(LQIJHQYRQ'DWHQPLW+LOIHYRQ6SDOWHQVWDQGDUGZHUWHQ
,QKDOWGLHVHU)ROLH
„
(UOlXWHUQ6LHGLH6FKOVVHO
Z|UWHU'()$8/7XQG
'()$8/79$/8(6
'()$8/76FKOVVHOZRUW
z
z
(LQVWLHJ
9HUZHQGHQ6LHHLQH
,16(57$QZHLVXQJPLW
GHP'()$8/76FKOVVHO
ZRUWXPGHQ6WDQGDUGZHUW
IUEHVWLPPWH6SDOWHQHLQ
]XIJHQRGHUYHUZHQGHQ
6LHGDV'()$8/7
9$/8(66FKOVVHOZRUWXP
HLQHJDQ]H=HLOHLQHLQH
7DEHOOHHLQ]XIJHQ
)JW6WDQGDUGZHUWH IUVSH]LHOOH=HLOHQHLQ
6SDOWHQPVVHQ EHUHLQHQ6WDQGDUGZHUW YHUIJHQ RGHU
18//:HUWH ]XODVVHQ
86(1RUWKZLQG
86(1RUWKZLQG
,16(57VKLSSHUVFRPSDQ\QDPHSKRQH
,16(57VKLSSHUVFRPSDQ\QDPHSKRQH
9$/8(6
.HQ\D&RIIHH&R
'()$8/7
9$/8(6
.HQ\D&RIIHH&R
'()$8/7
*2
*2
„
'()$8/79$/8(66FKOVVHOZRUW
z
z
)JW6WDQGDUGZHUWHIUDOOH=HLOHQHLQ
6SDOWHQPVVHQEHUHLQHQ6WDQGDUGZHUWYHUIJHQRGHU
18//:HUWH ]XODVVHQ
****************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.
'()$8/76FKOVVHOZRUW
0HWKRGLVFKHU+LQZHLV
/HQNHQ6LHGLH$XIPHUN
VDPNHLWDXIGLH7HLOV\QWD[
XQGYHUJOHLFKHQ6LHGLH
6FKOVVHOZ|UWHU'()$8/7
XQG'()$8/79$/8(6LQ
GHU6\QWD[PLWHLQDQGHU
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.
8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ
%HLVSLHO
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.
86(1RUWKZLQG
,16(57VKLSSHUVFRPSDQ\QDPHSKRQH
9$/8(6
.HQ\D&RIIHH&R
'()$8/7
*2
Sie können überprüfen, ob Kenya Coffee Company zur shippers-Tabelle
hinzugefügt wurde, indem Sie die folgende Anweisung ausführen.
(UJHEQLV
86(1RUWKZLQG
6(/(&7
)520VKLSSHUV
9$/8(6
.HQ\D&RIIHH&R
'()$8/7
*2
VKLSSHULG
&RPSDQ\1DPH
3KRQH
URZVDIIHFWHG
18//
.HQ\D&RIIHH&R
'()$8/79$/8(66FKOVVHOZRUW
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.
8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ
‹/|VFKHQYRQ'DWHQ
,QKDOWGLHVHU)ROLH
*HEHQ6LHHLQH(LQIKUXQJ
LQGLH7KHPHQGLHVHV$E
VFKQLWWV
„
9HUZHQGHQGHU'(/(7($QZHLVXQJ
(LQVWLHJ
„
9HUZHQGHQGHU7581&$7(7$%/($QZHLVXQJ
„
/|VFKHQYRQ=HLOHQDQKDQGDQGHUHU7DEHOOHQ
6LHN|QQHQDQJHEHQ
ZHOFKH'DWHQJHO|VFKW
ZHUGHQVROOHQ
****************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.
8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ
9HUZHQGHQGHU'(/(7($QZHLVXQJ
,QKDOWGLHVHU)ROLH
(UOlXWHUQ6LHZLH=HLOHQLQ
7DEHOOHQJHO|VFKWZHUGHQ
(LQVWLHJ
„
'LH'(/(7($QZHLVXQJHQWIHUQWHLQHRGHUPHKUHUH
=HLOHQDXV7DEHOOHQVRIHUQGLH:+(5(.ODXVHOQLFKW
YHUZHQGHWZLUG
„
-HGHJHO|VFKWH=HLOHZLUGLP7UDQVDNWLRQVSURWRNROO
SURWRNROOLHUW
'LH'(/(7($QZHLVXQJ
HQWIHUQW=HLOHQDXV7DEHOOHQ
86(1RUWKZLQG
86(1RUWKZLQG
'(/(7(RUGHUV
'(/(7(RUGHUV
:+(5('$7(',))0217+VKLSSHGGDWH*(7'$7(!
:+(5('$7(',))0217+VKLSSHGGDWH*(7'$7(! *2
*2
****************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.
7HLOV\QWD[
DELETE [from] {table_name|view_name}
WHERE search_conditions
%HLVSLHO
In diesem Beispiel werden alle Datensätze zu Bestellungen gelöscht, die
mindestens sechs Monate alt sind.
86(1RUWKZLQG
'(/(7(RUGHUV
:+(5('$7(',))0217+VKLSSHGGDWH*(7'$7(! *2
$QPHUNXQJ 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.
8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ
9HUZHQGHQGHU7581&$7(7$%/($QZHLVXQJ
,QKDOWGLHVHU)ROLH
%HVFKUHLEHQ6LHZLHGLH
7581&$7(7$%/($Q
ZHLVXQJYHUZHQGHWZLUG
„
'LH7581&$7(7$%/($QZHLVXQJHQWIHUQWDOOH=HLOHQ
DXVHLQHU7DEHOOH
„
64/6HUYHUEHKlOWGLH7DEHOOHQVWUXNWXUXQGGLH
]XJHRUGQHWHQ2EMHNWHEHL
„
1XU GLH)UHLJDEH YRQ'DWHQVHLWHQ ZLUG LP
7UDQVDNWLRQVSURWRNROOSURWRNROOLHUW
(LQVWLHJ
'LH7581&$7(7$%/(
$QZHLVXQJHQWIHUQWDOOH
'DWHQDXVHLQHU7DEHOOH
86(1RUWKZLQG
86(1RUWKZLQG
7581&$7(7$%/(RUGHUV
7581&$7(7$%/(RUGHUV
*2
*2
****************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.
6\QWD[
TRUNCATE TABLE [[database.]owner.]table_name
%HLVSLHO
In diesem Beispiel werden alle Daten aus der orders-Tabelle entfernt.
86(1RUWKZLQG
7581&$7(7$%/(RUGHUV
*2
:HLWHUH,QIRUPDWLRQHQ
'LH7581&$7(7$%/(
$QZHLVXQJNDQQQLFKWDXI
HLQH7DEHOOHDQJHZHQGHW
ZHUGHQDXIGLHPLWHLQHU
)25(,*1.(<(LQVFKUlQ
NXQJYHUZLHVHQZLUG9HU
ZHQGHQ6LHVWDWWGHVVHQGLH
'(/(7($QZHLVXQJRKQH
HLQH:+(5(.ODXVHO
$QPHUNXQJ 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.
8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ
/|VFKHQYRQ=HLOHQDQKDQGDQGHUHU7DEHOOHQ
,QKDOWGLHVHU)ROLH
9HUDQVFKDXOLFKHQ6LHZLH
'DWHQLQHLQHU7DEHOOHDQ
KDQGYRQ'DWHQLQDQGHUHQ
7DEHOOHQJHO|VFKWZHUGHQ
„
9HUZHQGHQHLQHU]XVlW]OLFKHQ)520.ODXVHO
z
(LQVWLHJ
9HUZHQGHQ6LHGLH
'(/(7($QZHLVXQJPLW
HLQHU]XVlW]OLFKHQ)520
.ODXVHORGHUHLQHU8QWHU
DEIUDJHLQGHU:+(5(
.ODXVHOXP'DWHQLQDQGH
UHQ7DEHOOHQ]XEHUSUIHQ
XQG]XHQWVFKHLGHQREHLQH
=HLOHJHO|VFKWZHUGHQPXVV
z
„
'LHHUVWH)520.ODXVHO]HLJWGLH]XlQGHUQGH
7DEHOOH DQ
'LH]ZHLWH)520.ODXVHONDQQ(LQVFKUlQNXQJVNULWHULHQ
IUGLH'(/(7($QZHLVXQJDQJHEHQ
$QJHEHQYRQ%HGLQJXQJHQLQGHU:+(5(.ODXVHO
z
8QWHUDEIUDJHQEHVWLPPHQZHOFKH=HLOHQ JHO|VFKW
ZHUGHQVROOHQ
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG****************
0HWKRGLVFKHU+LQZHLV
9HUJOHLFKHQ6LHGLH
%HLVSLHOHXQG
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.
9HUZHQGHQHLQHU]XVlW]OLFKHQ)520.ODXVHO
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:
6\QWD[
„
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 {<table_source>} [,…n]]
[WHERE search_conditions ]
8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ
%HLVSLHO
0HWKRGLVFKHU+LQZHLV
9HUZHLVHQ6LHDXIGLH
]XVlW]OLFKH)520.ODXVHO
LQGHU$QZHLVXQJ
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.
86(1RUWKZLQG
'(/(7()520>2UGHU'HWDLOV@
)520RUGHUV$6R
,11(5-2,1>RUGHUGHWDLOV@$6RG
21R2UGHU,' RG2UGHU,'
:+(5(2UGHU'DWH *2
$QJHEHQYRQ%HGLQJXQJHQLQGHU:+(5(.ODXVHO
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.
%HLVSLHO
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.
86(1RUWKZLQG
'(/(7()520>2UGHU'HWDLOV@
:+(5(RUGHULG,1
6(/(&7RUGHULG
)5202UGHUV
:+(5(2UGHU'DWH *2
8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ
‹$NWXDOLVLHUHQYRQ'DWHQ
,QKDOWGLHVHU)ROLH
*HEHQ6LHHLQH(LQIKUXQJ
LQGLH7KHPHQGLHVHV
$EVFKQLWWV
„
$NWXDOLVLHUHQYRQ=HLOHQDQKDQGGLHVHU7DEHOOH
(LQVWLHJ
„
$NWXDOLVLHUHQYRQ=HLOHQDQKDQGDQGHUHU7DEHOOHQ
'LH83'$7($QZHLVXQJ
NDQQ'DWHQZHUWHLQHLQ
]HOQHQ=HLOHQLQ=HLOHQ
JUXSSHQRGHULQDOOHQ=HLOHQ
HLQHU7DEHOOHRGHU6LFKW
lQGHUQ
****************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.
8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ
$NWXDOLVLHUHQYRQ=HLOHQDQKDQGGLHVHU7DEHOOH
,QKDOWGLHVHU)ROLH
9HUDQVFKDXOLFKHQ6LHZLH
=HLOHQPLW+LOIHGHU
83'$7($QZHLVXQJ
DNWXDOLVLHUWZHUGHQ
(LQVWLHJ
0LWGHU83'$7($QZHLVXQJ
N|QQHQ6LH'DWHQLQ
YRUKDQGHQHQ=HLOHQHLQHU
7DEHOOHlQGHUQ
„
'LH:+(5(.ODXVHOJLEWGLH]XlQGHUQGHQ=HLOHQDQ
„
'LH6(7.ODXVHOJLEWGLHQHXHQ:HUWHDQ
„
'LH'DWHQW\SHQGHU(LQJDEHZHUWHPVVHQPLWGHQ
'DWHQW\SHQGHU 6SDOWHQNRPSDWLEHOVHLQ
„
$NWXDOLVLHUXQJHQ WUHWHQQLFKWLQ=HLOHQDXIGLH
,QWHJULWlWVHLQVFKUlQNXQJHQYHUOHW]HQ
86(1RUWKZLQG
86(1RUWKZLQG
83'$7(SURGXFWV
83'$7(SURGXFWV
6(7XQLWSULFH
6(7XQLWSULFH XQLWSULFH
XQLWSULFH
*2
*2
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG****************
Mit der UPDATE-Anweisung werden vorhandene Daten geändert.
7HLOV\QWD[
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:
%HLVSLHO
„
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.
86(1RUWKZLQG
83'$7(SURGXFWV
6(7XQLWSULFH XQLWSULFH
*2
8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ
$NWXDOLVLHUHQYRQ=HLOHQDQKDQGDQGHUHU7DEHOOHQ
,QKDOWGLHVHU)ROLH
(UOlXWHUQ6LHZLHPLW+LOIH
YRQ9HUNQSIXQJHQRGHU
8QWHUDEIUDJHQ'DWHQLQ
HLQHU7DEHOOHDQKDQGYRQ
'DWHQLQHLQHUDQGHUHQ
7DEHOOHDNWXDOLVLHUWZHUGHQ
„
(LQVWLHJ
„
9HUZHQGHQGHU83'$7($QZHLVXQJ
z
z
0LWGHU83'$7($QZHLVXQJ
N|QQHQ6LH=HLOHQDQKDQG
YRQDQGHUHQ7DEHOOHQ
DNWXDOLVLHUHQ
(UIRUGHUW7DEHOOHQSUlIL[H DXIPHKUGHXWLJHQ
6SDOWHQQDPHQ
$QJHEHQGHU]XDNWXDOLVLHUHQGHQ=HLOHQPLW+LOIHYRQ
9HUNQSIXQJHQ
z
„
$NWXDOLVLHUWHLQH=HLOHQLH]ZHLPDO
9HUZHQGHQGHU )520.ODXVHO
$QJHEHQGHU]XDNWXDOLVLHUHQGHQ=HLOHQPLW+LOIHYRQ
8QWHUDEIUDJHQ
z
.RUUHOLHUHQ GHU 8QWHUDEIUDJH PLW GHU DNWXDOLVLHUWHQ
7DEHOOH
****************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.
9HUZHQGHQGHU83'$7($QZHLVXQJ
Berücksichtigen Sie beim Verwenden von Verknüpfungen und Unterabfragen
mit der UPDATE-Anweisung die folgenden Aspekte und Richtlinien:
7HLOV\QWD[
„
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 { <table_source>}
]
[WHERE search_conditions]
$QJHEHQGHU]XDNWXDOLVLHUHQGHQ=HLOHQPLW+LOIHYRQ
9HUNQSIXQJHQ
Verwenden Sie beim Verwenden von Verknüpfungen zum Aktualisieren von
Zeilen die FROM-Klausel, um Verknüpfungen in der UPDATE-Anweisung
anzugeben.
%HLVSLHO
8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ
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.
83'$7(3URGXFWV
6(78QLW3ULFH 8QLW3ULFH
)5203URGXFWV
,11(5-2,1VXSSOLHUV
213URGXFWV6XSSOLHU,' 6XSSOLHUV6XSSOLHU,'
:+(5(6XSSOLHUV&RXQWU\ 86$
*2
$QJHEHQGHU]XDNWXDOLVLHUHQGHQ=HLOHQPLW+LOIHYRQ
8QWHUDEIUDJHQ
Berücksichtigen Sie beim Verwenden von Unterabfragen zum Aktualisieren
von Zeilen die folgenden Aspekte und Richtlinien:
%HLVSLHO
„
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.
83'$7(3URGXFWV
6(78QLW3ULFH 8QLW3ULFH
:+(5(RUGHULG,1
6(/(&7VXSSOLHULG
)520VXSSOLHUV
:+(5(FRXQWU\ 86$
*2
8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ
%HLVSLHO
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.
86(1RUWKZLQG
83'$7(3URGXFWV
6(7WRGDWHVDOHV 6(/(&76804XDQWLW\
,11(5-2,1>RUGHUGHWDLOV@$6RG
:+(5(SURGXFWVSURGXFWLG RGSURGXFWLG
*2
8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ
/HLVWXQJVDVSHNWH
,QKDOWGLHVHU)ROLH
%HVFKUHLEHQ6LHGLH
/HLVWXQJVDVSHNWHEHLP
9HUZHQGHQYRQ6LFKWHQ
7ULJJHURGHUJHVSHLFKHUWHQ
3UR]HGXUHQ
(LQVWLHJ
'DWHQlQGHUXQJHQGLH
LQQHUKDOEYRQ7UDQVDNWLRQHQ
DXIWUHWHQN|QQHQGLH
/HLVWXQJYRQ64/6HUYHU
EHHLQIOXVVHQ
„
$OOH 'DWHQlQGHUXQJHQ WUHWHQ LQQHUKDOE HLQHU
7UDQVDNWLRQ DXI
„
(VN|QQHQ 6HLWHQUHVHUYLHUXQJHQHUIRUGHUOLFKZHUGHQ
„
'DVbQGHUQ YRQLQGL]LHUWHQ 'DWHQ ]LHKW]XVlW]OLFKHQ
$XIZDQGQDFKVLFK
„
,QGL]HVN|QQHQ6XFKNULWHULHQXQWHUVWW]HQ
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG****************
.HUQSXQNWH
=XHLQHP=HLWSXQNWNDQQ
QXUHLQH7UDQVDNWLRQHLQH
EHVWLPPWH=HLOHlQGHUQ
(LQHDNWXHOODXVJHIKUWH
7UDQVDNWLRQKLQGHUWDQGHUH
7UDQVDNWLRQHQVRODQJHDQ
GHU$XVIKUXQJELVIUVLH
HLQ&RPPLWRGHUHLQ
5ROOEDFNDXVJHIKUWZLUG
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.
8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ
(PSIRKOHQH0HWKRGHQ
,QKDOWGLHVHU)ROLH
/LVWHQ6LHGLHHPSIRKOHQHQ
0HWKRGHQ]XP$XVIKUHQ
JUXQGOHJHQGHU$EIUDJHQ
DXI
(UVWHOOHQ6LHVWHWV]XHUVWHLQH6(/(&7$QZHLVXQJGLHNHLQH
(UVWHOOHQ6LHVWHWV]XHUVWHLQH6(/(&7$QZHLVXQJGLHNHLQH
'DWHQlQGHUWEHYRU6LHWDWVlFKOLFK'DWHQlQGHUQ
'DWHQlQGHUWEHYRU6LHWDWVlFKOLFK'DWHQlQGHUQ
(LQVWLHJ
(UK|KHQ6LHGLH/HVEDUNHLW
(UK|KHQ6LHGLH/HVEDUNHLW GHU5HVXOWVHWVLQGHP6LH6SDOWHQ
GHU5HVXOWVHWVLQGHP6LH6SDOWHQ
QDPHQLQ6SDOWHQDOLDVQDPHQlQGHUQRGHU/LWHUDOHYHUZHQGHQ
QDPHQLQ6SDOWHQDOLDVQDPHQlQGHUQRGHU/LWHUDOHYHUZHQGHQ
'LHIROJHQGHQHPSIRKOHQHQ
0HWKRGHQKHOIHQ,KQHQEHLP
$XVIKUHQJUXQGOHJHQGHU
$EIUDJHQ
)JHQ
)JHQ 6LH
6LH LPPHUHLQH
LPPHUHLQH :+(5(.ODXVHOLQGLH'(/(7(
:+(5(.ODXVHOLQGLH'(/(7( XQG
XQG
83'$7($QZHLVXQJHLQ
83'$7($QZHLVXQJHLQ
****************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”
8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ
hEXQJVHLQKHLW$bQGHUQYRQ'DWHQ
,QKDOWGLHVHU)ROLH
*HEHQ6LHHLQH(LQIKUXQJ
LQGLHhEXQJVHLQKHLW
(LQVWLHJ
,QGLHVHUhEXQJVHLQKHLW
lQGHUQ6LHYRUKDQGHQH
'DWHQPLW+LOIHYRQ
,16(57'(/(7(XQG
83'$7($QZHLVXQJHQ
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG****************
(UOlXWHUQ6LHGLH/HUQ]LHOH
GHUhEXQJVHLQKHLW
/HUQ]LHOH
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.
9RUDXVVHW]XQJHQ
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.
(LQULFKWHQGHUhEXQJVHLQKHLW
Nicht erforderlich.
:HLWHUH,QIRUPDWLRQHQ
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.
8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ
6]HQDULR
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
9HUDQVFKODJWH=HLWIUGLHhEXQJVHLQKHLW0LQXWHQ
8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ
hEXQJ
9HUZHQGHQGHU,16(57$QZHLVXQJ
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
86(OLEUDU\
,16(57LWHPLVEQWLWOHBQRFRYHUORDQDEOHWUDQVODWLRQ
9$/8(6
+$5'%$&.
<
(1*/,6+
,16(57LWHPLVEQWLWOHBQRFRYHUORDQDEOHWUDQVODWLRQ
9$/8(6
62)7%$&.
<
(1*/,6+
*2
5. Führen Sie die Abfrage aus, und überprüfen Sie, ob zwei Zeilen eingefügt
wurden.
8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ
Ç 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
86(OLEUDU\
,16(57FRS\LVEQFRS\BQRWLWOHBQRRQBORDQ
9$/8(6
1
*2
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.
86(OLEUDU\
6(/(&7WUDQVODWLRQ
)520LWHP
:+(5(LVEQ *2
2. Führen Sie die Abfrage aus, um zu überprüfen, ob sie das gewünschte
Ergebnis zurückgibt.
8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ
hEXQJ
9HUZHQGHQGHU,16(57$QZHLVXQJPLWGHP'()$8/7
6FKOVVHOZRUW
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.
86(OLEUDU\
(;(&VSBKHOSWLWOH
*2
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.
86(OLEUDU\
,16(57WLWOHWLWOHDXWKRUV\QRSVLV
9$/8(6
7KH$UWRI/DZQ7HQQLV
:LOOLDP77LOGHQ
'()$8/7
*2
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.
86(OLEUDU\
6(/(&7##LGHQWLW\
*2
2. Führen Sie die Abfrage aus, und notieren Sie den zurückgegebenen Wert.
8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ
Ç 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.
86(OLEUDU\
6(/(&7
)520WLWOH
:+(5(WLWOHBQR ##LGHQWLW\
*2
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.
86(OLEUDU\
,16(57WLWOHWLWOHDXWKRU
9$/8(6
5LGHUVRIWKH3XUSOH6DJH
=DQH*UH\
*2
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.
86(OLEUDU\
6(/(&7
)520WLWOH
:+(5(WLWOH 5LGHUVRIWKH3XUSOH6DJH
*2
2. Führen Sie die Abfrage aus, um zu überprüfen, ob sie das gewünschte
Ergebnis zurückgibt.
8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ
hEXQJ
9HUZHQGHQGHU,16(57$QZHLVXQJPLWGHP'()$8/79$/8(6
6FKOVVHOZRUW
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
86(OLEUDU\
&5($7(7$%/(VDPSOH
&XVWBLGLQW12718//,'(17,7<
1DPHFKDU18//
*2
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.
86(OLEUDU\
,16(57VDPSOH
'()$8/79$/8(6
*2
2. Führen Sie die Abfrage aus, und überprüfen Sie, ob eine einzelne Zeile
eingefügt wurde.
8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ
Ç 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.
86(OLEUDU\
6(/(&7
)520VDPSOH
*2
2. Führen Sie die Abfrage aus, und vergleichen Sie das Ergebnis mit den für
die Tabelle definierten Standardwerten.
(UJHEQLV
Das Ergebnis ähnelt dem folgenden Resultset.
FXVWBLG
QDPH
URZVDIIHFWHG
18//
8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ
hEXQJ
9HUZHQGHQGHU'(/(7($QZHLVXQJ
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.
86(OLEUDU\
6(/(&7
)520LWHP
:+(5(LVEQ $1'WLWOHBQR *2
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.
86(OLEUDU\
'(/(7()520LWHP
:+(5(LVEQ $1'WLWOHBQR *2
2. Führen Sie die Abfrage aus, und überprüfen Sie, ob eine Zeile in der itemTabelle gelöscht wurde.
8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ
hEXQJ
9HUZHQGHQGHU83'$7($QZHLVXQJ
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.
86(OLEUDU\
6(/(&7
)520PHPEHU
:+(5(PHPEHUBQR *2
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.
86(OLEUDU\
83'$7(PHPEHU
6(7ODVWQDPH %(1621
:+(5(PHPEHUBQR *2
2. Führen Sie die Abfrage aus, und überprüfen Sie, ob eine Zeile in der
member-Tabelle aktualisiert wurde.
8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ
hEXQJ
bQGHUQYRQ7DEHOOHQDQKDQGYRQ'DWHQLQDQGHUHQ7DEHOOHQ
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:
'$7($''<<*(7'$7(
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.
8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ
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“.
86(OLEUDU\
6(/(&7MXPHPEHUBQRDGVWUHHWDGFLW\DGVWDWH
DG]LSDGSKRQHBQR'$7($''<<*(7'$7(
)520MXYHQLOH$6MX
,11(5-2,1DGXOW$6DG
21MXDGXOWBPHPEHUBQR DGPHPEHUBQR
:+(5('$7($''<<MXELUWKBGDWH*(7'$7(
*2
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.
86(OLEUDU\
,16(57DGXOWPHPEHUBQRVWUHHWFLW\VWDWH
]LSSKRQHBQRH[SUBGDWH
6(/(&7MXPHPEHUBQRDGVWUHHWDGFLW\DGVWDWH
DG]LSDGSKRQHBQR'$7($''<<*(7'$7(
)520MXYHQLOH$6MX
,11(5-2,1DGXOW$6DG
21MXDGXOWBPHPEHUBQR DGPHPEHUBQR
:+(5('$7($''<<MXELUWKBGDWH*(7'$7(
*2
2. Führen Sie die Abfrage aus, und überprüfen Sie, ob eine Zeile eingefügt
wurde.
8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ
Ç 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.
86(OLEUDU\
6(/(&7
)520DGXOW
:+(5(PHPEHUBQR *2
2. Führen Sie die Abfrage aus, um zu überprüfen, ob sie das gewünschte
Ergebnis zurückgibt.
(UJHEQLV
PHPEHUBQR
Das Ergebnis ähnelt dem folgenden Teil eines Resultsets.
VWUHHW
FLW\
VWDWH
%RZHU\(VWDWHV 0RQWJRPHU\
$/
URZVDIIHFWHG
]LS
SKRQHBQR
QXOO
H[SUBGDWH
)HE30
Ç 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.
86(OLEUDU\
6(/(&7
)520MXYHQLOH
,11(5-2,1DGXOW
21MXYHQLOHPHPEHUBQR DGXOWPHPEHUBQR
*2
2. Führen Sie die Abfrage aus, um zu überprüfen, ob sie das gewünschte
Ergebnis zurückgibt.
8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ
Ç 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.
86(OLEUDU\
'(/(7(MXYHQLOH
)520MXYHQLOH
,11(5-2,1DGXOW
21MXYHQLOHPHPEHUBQR DGXOWPHPEHUBQR
*2
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.
86(OLEUDU\
6(/(&7
)520MXYHQLOH
:+(5(PHPEHUBQR *2
2. Führen Sie die Abfrage aus, und überprüfen Sie, ob keine Datensätze
zurückgegeben werden.
8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ
/HUQ]LHONRQWUROOH
,QKDOWGLHVHU)ROLH
9HUWLHIHQ6LHGLH/HUQ]LHOH
GLHVHU8QWHUULFKWVHLQKHLW
LQGHP6LHGLH.HUQSXQNWH
ZLHGHUKROHQ
(LQVWLHJ
'LH)UDJHQ]XU/HUQ]LHO
NRQWUROOHEH]LHKHQVLFKDXI
HLQLJHGHU6FKOVVHONRQ
]HSWHGLH,QKDOWGLHVHU
8QWHUULFKWVHLQKHLWVLQG
„
9HUZHQGHQYRQ7UDQVDNWLRQHQ
„
(LQIJHQYRQ'DWHQ
„
/|VFKHQYRQ'DWHQ
„
$NWXDOLVLHUHQYRQ'DWHQ
„
/HLVWXQJVDVSHNWH
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG****************
9HUZHQGHQ6LHGLHVHV
6]HQDULRXPGLH)UDJHQ]X
EHDQWZRUWHQXQGGLH
7KHPHQGLHVHU8QWHUULFKWV
HLQKHLW]XZLHGHUKROHQ
.OlUHQ6LHRIIHQH)UDJHQ
GHU.XUVWHLOQHKPHU]X
GLHVHQ7KHPHQ
Sie sind der Datenbankadministrator für einen Gesundheitsvorsorgeplan. Die
physicians-Tabelle wurde mit Hilfe der folgenden Anweisung erstellt:
&5($7(7$%/(GERSK\VLFLDQV
SK\VLFLDQBQRLQW,'(17,7<12718//
IBQDPHYDUFKDU12718//
OBQDPHYDUFKDU12718//
VWUHHWYDUFKDU18//
VWUHHWYDUFKDU18//
VWUHHWYDUFKDU18//
SRVWDOBFRGHYDUFKDU18//
FRBSD\PRQH\12718//&21675$,17SK\VBFRBSD\'()$8/7
*2
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.
8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ
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:
83'$7(SK\VLFLDQV6(7FRBSD\ FRBSD\FRBSD\
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.
8QWHUULFKWVHLQKHLW$EIUDJHQYRQ9ROOWH[WLQGL]HV
LLL
+LQZHLVHIUGHQ.XUVOHLWHU
3UlVHQWDWLRQ
0LQXWHQ
hEXQJVHLQKHLW
0LQXWHQ
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.
8QWHUODJHQXQG9RUEHUHLWXQJ
In diesem Abschnitt werden die erforderlichen Unterlagen und vorbereitenden
Aufgaben erläutert, die nötig sind, um diese Unterrichtseinheit zu unterrichten.
8QWHUODJHQ
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.
9RUEHUHLWXQJ
Zur Vorbereitung dieser Unterrichtseinheit gehen Sie folgendermaßen vor:
„
Lesen Sie alle Unterlagen.
„
Arbeiten Sie die Übungseinheit durch.
LY
8QWHUULFKWVHLQKHLW$EIUDJHQYRQ9ROOWH[WLQGL]HV
6WUDWHJLHIUGLH8QWHUULFKWVHLQKHLW
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.
$QSDVVXQJVLQIRUPDWLRQHQ
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.
:LFKWLJ 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.
(LQULFKWHQGHUhEXQJVHLQKHLW
Es gibt keine Anforderungen zum Einrichten der Übungseinheit, die die
Replikation oder die Anpassung betreffen.
(UJHEQLVVHGHUhEXQJVHLQKHLW
Auf den Kursteilnehmercomputern gibt es keine Konfigurationsänderungen, die
die Replikation oder die Anpassung betreffen.
8QWHUULFKWVHLQKHLW$EIUDJHQYRQ9ROOWH[WLQGL]HV
hEHUVLFKW
,QKDOWGLHVHU)ROLH
*HEHQ6LHHLQHhEHUVLFKW
EHUGLH7KHPHQXQG/HUQ
]LHOHGLHVHU8QWHUULFKWV
HLQKHLW
(LQVWLHJ
,QGLHVHU8QWHUULFKWVHLQKHLW
OHUQHQ6LHGHQ0LFURVRIW
6HDUFK'LHQVWNHQQHQXQG
HUIDKUHQZLH9ROOWH[WLQGL]HV
DEJHIUDJWZHUGHQ
„
(LQIKUXQJLQGHQ0LFURVRIW6HDUFK'LHQVW
„
.RPSRQHQWHQGHV0LFURVRIW6HDUFK'LHQVWHV
„
=XVDPPHQVWHOOHQYRQ,QIRUPDWLRQHQ]X9ROOWH[WLQGL]HV
„
6FKUHLEHQYRQ9ROOWH[WDEIUDJHQ
****************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.
8QWHUULFKWVHLQKHLW$EIUDJHQYRQ9ROOWH[WLQGL]HV
(LQIKUXQJLQGHQ0LFURVRIW6HDUFK'LHQVW
,QKDOWGLHVHU)ROLH
(UOlXWHUQ6LHGDV.RQ]HSW
GHV0LFURVRIW6HDUFK
'LHQVWHVLQ%H]XJDXI
64/6HUYHU
„
7H[WEDVLHUWHV 6XFKHQLQ64/ 6HUYHU
z
(LQVWLHJ
0LWGHP0LFURVRIW6HDUFK
'LHQVWN|QQHQ6LHMHW]W
]HLFKHQEDVLHUWH'DWHQLQ
7DEHOOHQPLWHLQHU9ROOWH[W
VXFKHDEIUDJHQ
z
„
.RPSOH[H 6XFKHQ DXIXQVWUXNWXULHUWHQ7H[WGDWHQ QDFK
:|UWHUQ XQG$XVGUFNHQ
8PIDVVHQGHUDOV /,.(2SHUDWRUXQG3ODW]KDOWHU
9HUIJEDUNHLWLQDQGHUHQ0LFURVRIW3URGXNWHQ
z
,QGH[GLHQVW([FKDQJH&RPPHUFH6HUYHU
****************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.
7H[WEDVLHUWHV6XFKHQLQ64/6HUYHU
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.
9HUIJEDUNHLWLQDQGHUHQ0LFURVRIW3URGXNWHQ
Der Microsoft Search-Dienst ist auch im Lieferumfang der folgenden Produkte
enthalten:
„
Microsoft Indexdienst
„
Microsoft Exchange 2000
„
Microsoft Commerce Server
8QWHUULFKWVHLQKHLW$EIUDJHQYRQ9ROOWH[WLQGL]HV
.RPSRQHQWHQGHV0LFURVRIW6HDUFK'LHQVWHV
,QKDOWGLHVHU)ROLH
6WHOOHQ6LHGLH.RPSRQHQ
WHQGHU9ROOWH[WVXFKHYRU
„
(LQVWLHJ
6WUXNWXUHQGHV6HDUFK'LHQVWHV
z
'HU0LFURVRIW6HDUFK'LHQVW
VSHLFKHUW,QIRUPDWLRQHQ]X
9ROOWH[WGDWHQLQ6WUXNWXUHQ
DX‰HUKDOEYRQ64/6HUYHU
z
„
9ROOWH[WLQGH[
9HUIROJWGLHZHVHQWOLFKHQ:|UWHUHLQHU7DEHOOH
(UIRUGHUWHLQH6SDOWHPLWHLQHPHLQGHXWLJHQ6FKOVVHO
RGHUHLQHQ3ULPlUVFKOVVHO
9ROOWH[WNDWDORJ
,VWHLQH=XVDPPHQVWHOOXQJYRQ9ROOWH[WLQGL]HV
)XQNWLRQHQGHV6HDUFK'LHQVWHV
z
,QGL]LHUHQ
z
$EIUDJHQ
****************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.
6WUXNWXUHQGHV6HDUFK'LHQVWHV
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.
9ROOWH[WLQGH[
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.
$QPHUNXQJ Volltextindizes unterscheiden sich von SQL Server-Indizes, die
durch die SQL Server-Datenbank gesteuert werden, in der sie definiert sind.
8QWHUULFKWVHLQKHLW$EIUDJHQYRQ9ROOWH[WLQGL]HV
9ROOWH[WNDWDORJ
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.
)XQNWLRQHQGHV6HDUFK'LHQVWHV
Der Microsoft Search-Dienst hat zwei Hauptfunktionen: Erstellen und Verwalten von Volltextindizes und Verwenden der Indizes zum Verarbeiten von
Abfragen.
,QGL]LHUHQ
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.
$EIUDJHQ
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.
8QWHUULFKWVHLQKHLW$EIUDJHQYRQ9ROOWH[WLQGL]HV
=XVDPPHQVWHOOHQYRQ,QIRUPDWLRQHQ]X9ROOWH[WLQGL]HV
,QKDOWGLHVHU)ROLH
(UOlXWHUQ6LHZLH,QIRUPD
WLRQHQ]XU9ROOWH[WVXFKH
]XVDPPHQJHVWHOOWZHUGHQ
N|QQHQ
„
(LQVWLHJ
6LHN|QQHQ,QIRUPDWLRQHQ
]XU9ROOWH[WVXFKH]XVDP
PHQVWHOOHQ
„
9HUZHQGHQYRQJHVSHLFKHUWHQ6\VWHPSUR]HGXUHQ
z
VSBKHOSBIXOOWH[WBFDWDORJV
z
VSBKHOSBIXOOWH[WBWDEOHV
z
VSBKHOSBIXOOWH[WBFROXPQV
9HUZHQGHQYRQ7UDQVDFW64/)XQNWLRQHQ
z
9HUZHQGHQ YRQ7UDQVDFW64/)XQNWLRQHQGLH
,QIRUPDWLRQHQ EHU 9ROOWH[WHLJHQVFKDIWHQ DEIUDJHQ
86(1RUWKZLQG
86(1RUWKZLQG
6(/(&7
6(/(&7
'$7$%$6(3523(57<
1RUWKZLQG
,V)XOO7H[W(QDEOHG
'$7$%$6(3523(57<
1RUWKZLQG
,V)XOO7H[W(QDEOHG
*2
*2
****************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.
9HUZHQGHQYRQJHVSHLFKHUWHQ6\VWHPSUR]HGXUHQ
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.
8QWHUULFKWVHLQKHLW$EIUDJHQYRQ9ROOWH[WLQGL]HV
9HUZHQGHQYRQ7UDQVDFW64/)XQNWLRQHQ
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
%HLVSLHO
Mit Hilfe der IsFullTextEnabled-Eigenschaft wird ermittelt, ob für die
Northwind-Datenbank die Volltextabfrage aktiviert ist.
86(1RUWKZLQG
6(/(&7'$7$%$6(3523(57<
1RUWKZLQG
,V)XOO7H[W(QDEOHG
*2
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.
8QWHUULFKWVHLQKHLW$EIUDJHQYRQ9ROOWH[WLQGL]HV
‹ 6FKUHLEHQYRQ9ROOWH[WDEIUDJHQ
,QKDOWGLHVHU)ROLH
(UOlXWHUQ6LHZLH9ROOWH[W
DEIUDJHQJHVFKULHEHQ
ZHUGHQ
„
&217$,163UlGLNDW
(LQVWLHJ
„
)5((7(;73UlGLNDW
„
)XQNWLRQHQ &217$,167$%/(XQG)5((7(;77$%/(
„
9HUZHQGHQYRQ9ROOWH[WVFKOVVHOZ|UWHUQ
0LWHLQHU9ROOWH[WDEIUDJH
N|QQHQ6LHHLQHOLQJXLVWL
VFKH6XFKHQDFK=HLFKHQ
GDWHQLQ7DEHOOHQGXUFK
IKUHQGLHIUGLH9ROOWH[W
VXFKHDNWLYLHUWVLQG
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG****************
0HWKRGLVFKHU+LQZHLV
'LHQHXHQ7UDQVDFW64/
(UZHLWHUXQJHQHQWVSUHFKHQ
GHUIXQNWLRQDOHQ,6264/
0HWKRGLNIU9ROOWH[WV\QWD[
HUZHLWHUXQJHQ
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
$QPHUNXQJ 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.
8QWHUULFKWVHLQKHLW$EIUDJHQYRQ9ROOWH[WLQGL]HV
&217$,163UlGLNDW
,QKDOWGLHVHU)ROLH
(UOlXWHUQ6LHZLHGDV
&217$,163UlGLNDW
YHUZHQGHWZLUG
„
)OH[LRQVIRUPHLQHVEHVWLPPWHQ:RUWHV
„
:RUWRGHU$XVGUXFNEHJLQQHQG PLWHLQHUDQJHJHEHQHQ
=HLFKHQIROJH
„
:RUWRGHU$XVGUXFNGDVE]ZGHULQGHU1lKHHLQHV
DQGHUHQ:RUWHVRGHU$XVGUXFNVVWHKW
„
(LQRGHUPHKUHUHVSH]LHOOH:|UWHUXQG$XVGUFNH
„
:|UWHURGHU$XVGUFNHPLW JHZLFKWHWHQ :HUWHQ
(LQVWLHJ
0LWGHP&217$,16
3UlGLNDWN|QQHQ6LHQDFK
HLQHPEHVWLPPWHQ$XVGUXFN
VXFKHQ
Beispiel
Beispiel 11
6(/(&7SODQWBLGFRPPRQBQDPHSULFH
6(/(&7SODQWBLGFRPPRQBQDPHSULFH
)520SODQWV
)520SODQWV
:+(5(&217$,16
(QJOLVK7K\PH
:+(5(&217$,16
(QJOLVK7K\PH
*2
*2
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG****************
Mit dem CONTAINS-Prädikat können Sie nach einem bestimmten Ausdruck
suchen.
7HLOV\QWD[
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}, '<contains_search_condition>' )
<contains_search_condition> ::=
{| <generation_term>| <prefix_term>| <proximity_term>
| <simple_term>| <weighted_term>}
6\QWD[HOHPHQWHIU6XFKEHGLQJXQJHQ
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.
8QWHUULFKWVHLQKHLW$EIUDJHQYRQ9ROOWH[WLQGL]HV
„
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.
$QPHUNXQJ Bei einer CONTAINS-Suche wird nie nach Groß-/Kleinschreibung unterschieden.
%HLVSLHO
%HLVSLHO
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.
6(/(&7SODQWBLGFRPPRQBQDPHSULFH
)520SODQWV
:+(5(&217$,16
(QJOLVK7K\PH
*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.
6(/(&7DUWLFOHBLG
)520KRFNH\BDUWLFOHV
:+(5(&217$,16GHVFULSWLRQ
-HDQ/H'XF$1'LFHKRFNH\
*2
$QPHUNXQJ Diese Beispiele dienen nur der Erläuterung und führen zu keinen
Ergebnissen.
8QWHUULFKWVHLQKHLW$EIUDJHQYRQ9ROOWH[WLQGL]HV
)5((7(;73UlGLNDW
,QKDOWGLHVHU)ROLH
(UOlXWHUQ6LHZLHGDV
)5((7(;73UlGLNDW
YHUZHQGHWZLUG
„
6XFKH QDFK:|UWHUQ$XVGUFNHQ XQG6lW]HQ H[WUDKLHUW
GXUFKGLHDQIlQJOLFKH$EIUDJH
„
:HQLJHUSUl]LVHDOVGDV&217$,163UlGLNDW
(LQVWLHJ
:HQQ6LHHLQ)5((7(;7
3UlGLNDWYHUZHQGHQN|QQHQ
6LHHLQHEHOLHELJH5HLKHYRQ
:|UWHUQRGHU$XVGUFNHQ
RGHUVRJDUHLQHQYROO
VWlQGLJHQ6DW]HLQJHEHQ
6(/(&7
6(/(&7
)520QHZVBWDEOH
)520QHZVBWDEOH
:+(5()5((7(;7GHVFULSWLRQ
:+(5()5((7(;7GHVFULSWLRQ
7KH)XOWRQ&RXQW\*UDQG-XU\VDLG)ULGD\DQ
7KH)XOWRQ&RXQW\*UDQG-XU\VDLG)ULGD\DQ
LQYHVWLJDWLRQRI$WODQWD©VUHFHQWSULPDU\
LQYHVWLJDWLRQRI$WODQWD©VUHFHQWSULPDU\
HOHFWLRQSURGXFHGQRHYLGHQFHWKDWDQ\
HOHFWLRQSURGXFHGQRHYLGHQFHWKDWDQ\
LUUHJXODULWLHVWRRNSODFH
LUUHJXODULWLHVWRRNSODFH
*2
*2
****************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.
6\QWD[
…WHERE FREETEXT ( {columns | * }, 'free_text' )
%HLVSLHO
Im folgenden Beispiel wird das FREETEXT-Prädikat für die descriptionSpalte verwendet.
6(/(&7
)520QHZVBWDEOH
:+(5()5((7(;7GHVFULSWLRQ
7KH)XOWRQ&RXQW\*UDQG-XU\VDLG)ULGD\DQLQYHVWLJDWLRQ
RI$WODQWD©VUHFHQWSULPDU\HOHFWLRQSURGXFHGQRHYLGHQFHWKDW
DQ\LUUHJXODULWLHVWRRNSODFH
*2
$QPHUNXQJ 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.
8QWHUULFKWVHLQKHLW$EIUDJHQYRQ9ROOWH[WLQGL]HV
)XQNWLRQHQ&217$,167$%/(XQG)5((7(;77$%/(
,QKDOWGLHVHU)ROLH
6WHOOHQ6LHGLH)XQNWLRQHQ
&217$,167$%/(XQG
)5((7(;77$%/(YRUXQG
YHUJOHLFKHQ6LHVLHPLWGHQ
EHLGHQ]XYRUHUOlXWHUWHQ
6FKOVVHOZ|UWHUQ
„
(LQVWLHJ
'LH)XQNWLRQHQ
&217$,167$%/(XQG
)5((7(;77$%/(XQWHU
VFKHLGHQVLFKJHULQJIJLJ
YRQGHQ6FKOVVHOZ|UWHUQ
&217$,16XQG
)5((7(;7
„
9HUZHQGHQYRQ&217$,167$%/(XQG)5((7(;77$%/(
z
*HEHQ7DEHOOH]XUFN
z
*HEHQ6SDOWH]XUFNGLH9ROOWH[WVFKOVVHOZHUWH HQWKlOW
z
WRSBQBE\BUDQN$UJXPHQW
$XVZlKOHQGHU 9ROOWH[WVXFKPHWKRGH
z
z
9HUZHQGHQ6LHGLH3UlGLNDWH&217$,16XQG)5((7(;7
LQMHGHU6XFKEHGLQJXQJ
9HUZHQGHQ6LHGLH)XQNWLRQHQ&217$,167$%/(XQG
)5((7(;77$%/(LQGHU)520.ODXVHO
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG****************
0HWKRGLVFKHU+LQZHLV
:HLVHQ6LHGDUDXIKLQGDVV
GLH)XQNWLRQHQ
&217$,167$%/(XQG
)5((7(;77$%/(LQ
:LUNOLFKNHLWHLQHDEJHOHLWHWH
7DEHOOHHUVWHOOHQ
7HLOV\QWD[
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.
9HUZHQGHQYRQ&217$,167$%/(XQG)5((7(;77$%/(
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.
7HLOV\QWD[
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.
8QWHUULFKWVHLQKHLW$EIUDJHQYRQ9ROOWH[WLQGL]HV
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.
7LSS 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.
$XVZlKOHQGHU9ROOWH[WVXFKPHWKRGH
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.
8QWHUULFKWVHLQKHLW$EIUDJHQYRQ9ROOWH[WLQGL]HV
9HUZHQGHQYRQ9ROOWH[WVFKOVVHOZ|UWHUQ
,QKDOWGLHVHU)ROLH
%HVFKUHLEHQ6LHZLH9ROO
WH[WVFKOVVHOZ|UWHUPLW
DQGHUHQ7UDQVDFW64/
3UlGLNDWHQNRPELQLHUW
ZHUGHQ
(LQVWLHJ
6LHN|QQHQ9ROOWH[W
VFKOVVHOZ|UWHUDXFKPLW
DQGHUHQ7UDQVDFW64/
$QZHLVXQJHQYHUZHQGHQ
Prädikate
Prädikate CONTAINS
CONTAINS und
und FREETEXT
FREETEXT
86(1RUWKZLQG
86(1RUWKZLQG
6(/(&7'HVFULSWLRQ
6(/(&7'HVFULSWLRQ
)520&DWHJRULHV
)520&DWHJRULHV
:+(5(&DWHJRU\1DPH
:+(5(&DWHJRU\1DPH !
6HDIRRG©
!
6HDIRRG©
$1'&217$,16'HVFULSWLRQ
VDXFHV$1'VHDVRQLQJV
$1'&217$,16'HVFULSWLRQ
VDXFHV$1'VHDVRQLQJV
*2
*2
CONTAINS in einer Unterabfrage
CONTAINS in einer Unterabfrage
86(SXEV
86(SXEV
6(/(&77WLWOH3SXEBQDPH
6(/(&77WLWOH3SXEBQDPH
)520SXEOLVKHUV$63
)520SXEOLVKHUV$63
,11(5-2,1WLWOHV$67213SXEBLG
,11(5-2,1WLWOHV$67213SXEBLG ,SXEBLG
,SXEBLG
:+(5(3SXEBLG
:+(5(3SXEBLG 6(/(&7SXEBLG)520SXEBLQIR:+(5(&217$,16
6(/(&7SXEBLG)520SXEBLQIR:+(5(&217$,16
SUBLQIR
PRRQEHDP$1'RQWDULR
SUBLQIR
PRRQEHDP$1'RQWDULR $1'IO\LQJVDXFHU
$1'IO\LQJVDXFHU
*2
*2
****************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.
%HLVSLHO
Im folgenden Beispiel wird nach Beschreibungen gesucht, die nicht zur Kategorie „Seafood“ gehören und das Wort „sauces“ sowie das Wort „seasonings“
enthalten.
86(1RUWKZLQG
*2
6(/(&7'HVFULSWLRQ
)520&DWHJRULHV
:+(5(&DWHJRU\1DPH!
6HDIRRG
$1'&217$,16'HVFULSWLRQ
VDXFHV$1'VHDVRQLQJV
*2
8QWHUULFKWVHLQKHLW$EIUDJHQYRQ9ROOWH[WLQGL]HV
%HLVSLHO
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.)
86(SXEV
6(/(&77WLWOH3SXEBQDPH
)520SXEOLVKHUV$63
,11(5-2,1WLWOHV$67213SXEBLG 7SXEBLG
:+(5(3SXEBLG 6(/(&7SXEBLG
)5203XEB,'
:+(5(&217$,16SUBLQIR
PRRQEHDP$1'RQWDULR$1'IO\LQJVDXFHU
*2
$QPHUNXQJ Diese Beispiele dienen nur der Erläuterung und führen zu keinen
Ergebnissen.
8QWHUULFKWVHLQKHLW$EIUDJHQYRQ9ROOWH[WLQGL]HV
(PSIRKOHQH0HWKRGHQ
,QKDOWGLHVHU)ROLH
%HVSUHFKHQ6LHHPSIRKOH
QHQ0HWKRGHQ]XP$E
IUDJHQYRQ9ROOWH[WLQGL]HV
9HUZHQGHQ6LH
9HUZHQGHQ6LH 9ROOWH[WLQGL]HV
9ROOWH[WLQGL]HV IUGLH'DWHQW\SHQµFKDU§
IUGLH'DWHQW\SHQµFKDU§
µQFKDU§µQYDUFKDU§µYDUFKDU§µWH[W§µQWH[W§XQGµLPDJH§
µQFKDU§µQYDUFKDU§µYDUFKDU§µWH[W§µQWH[W§XQGµLPDJH§
(LQVWLHJ
'LHHPSIRKOHQHQ0HWKRGHQ
VROOHQ,KQHQEHLP$EIUDJHQ
YRQ9ROOWH[WLQGL]HVKHOIHQ
9HUZHQGHQ6LH
9HUZHQGHQ6LH 9ROOWH[WLQGH[
9ROOWH[WLQGH[ XQGGLH.DWDORJHLJHQVFKDIWHQ
XQGGLH.DWDORJHLJHQVFKDIWHQ ]XU
]XU
3UREOHPEHKDQGOXQJ
3UREOHPEHKDQGOXQJ
9HUZHQGHQ6LHGDV
9HUZHQGHQ6LHGDV WRSBQBE\BUDQN$UJXPHQW
WRSBQBE\BUDQN$UJXPHQW ]XU%HVFKUlQNXQJ
]XU%HVFKUlQNXQJ
GHU5HVXOWVHWJU|‰H
GHU5HVXOWVHWJU|‰H
****************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”
8QWHUULFKWVHLQKHLW$EIUDJHQYRQ9ROOWH[WLQGL]HV
hEXQJVHLQKHLW$$EIUDJHQYRQ9ROOWH[WLQGL]HV
,QKDOWGLHVHU)ROLH
*HEHQ6LHHLQH(LQIKUXQJ
LQGLHhEXQJVHLQKHLW
(LQVWLHJ
,QGLHVHUhEXQJVHLQKHLW
EHUSUIHQ6LHGHQ6WDWXV
HLQHV9ROOWH[WLQGH[HVXQG
IKUHQHLQH$EIUDJHPLW+LOIH
YRQ9ROOWH[WLQGL]HVDXV
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG****************
(UOlXWHUQ6LHGLH/HUQ]LHOH
GHUhEXQJVHLQKHLW
/HUQ]LHOH
Am Ende dieser Übungseinheit werden Sie in der Lage sein, die folgenden
Aufgaben auszuführen:
„
Überprüfen des Status eines Volltextindexes.
„
Schreiben von Volltextabfragen.
9RUDXVVHW]XQJHQ
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.
(LQULFKWHQGHUhEXQJVHLQKHLW
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.
:HLWHUH,QIRUPDWLRQHQ
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“.
8QWHUULFKWVHLQKHLW$EIUDJHQYRQ9ROOWH[WLQGL]HV
Daneben sind die folgenden Informationsquellen verfügbar:
„
Das Northwind-Datenbankschema.
„
Die SQL Server-Onlinedokumentation.
6]HQDULR
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
9HUDQVFKODJWH=HLWIUGLHhEXQJVHLQKHLW0LQXWHQ
8QWHUULFKWVHLQKHLW$EIUDJHQYRQ9ROOWH[WLQGL]HV
hEXQJ
$EUXIHQYRQ,QIRUPDWLRQHQEHU9ROOWH[WLQGL]HV
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:
86(1RUWKZLQG
6(/(&7IXOOWH[WVHUYLFHSURSHUW\
,V)XOO7H[W,QVWDOOHG
*2
4. Führen Sie die folgende Anweisung aus, um zu ermitteln, ob die Volltextsuche für die Northwind-Datenbank aktiviert ist:
86(1RUWKZLQG
6(/(&7GDWDEDVHSURSHUW\
1RUWKZLQG
,V)XOO7H[W(QDEOHG
*2
5. Führen Sie die folgende gespeicherte Systemprozedur zum Auflisten der
Tabellen aus, für die die Volltextsuche aktiviert ist:
86(1RUWKZLQG
(;(&VSBKHOSBIXOOWH[WBWDEOHV
*2
8QWHUULFKWVHLQKHLW$EIUDJHQYRQ9ROOWH[WLQGL]HV
6. Führen Sie die folgende gespeicherte Systemprozedur zum Auflisten der
Spalten aus, für die Volltextsuchindizes erstellt wurden:
86(1RUWKZLQG
(;(&VSBKHOSBIXOOWH[WBFROXPQV
*2
8QWHUULFKWVHLQKHLW$EIUDJHQYRQ9ROOWH[WLQGL]HV
hEXQJ
6FKUHLEHQYRQ9ROOWH[WDEIUDJHQ
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.
86(1RUWKZLQG
6(/(&7/DVW1DPH7LWOH+LUH'DWH1RWHV
)520HPSOR\HHV
:+(5(&217$,16QRWHV
6W$QGUHZV1($56FRWODQG
*2
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.
86(1RUWKZLQG
6(/(&7/DVW1DPH7LWOH+LUH'DWH1RWHV
)520HPSOR\HHV
:+(5(&217$,16QRWHV
)25062),1)/(&7,21$/VDOH
*2
2. Führen Sie die Abfrage aus, um zu überprüfen, ob sie vier Zeilen
zurückgibt.
8QWHUULFKWVHLQKHLW$EIUDJHQYRQ9ROOWH[WLQGL]HV
Ç 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.
86(1RUWKZLQG
6(/(&7/DVW1DPH7LWOH+LUH'DWH1RWHV
)520HPSOR\HHV
:+(5()5((7(;7QRWHV
FROGXQGWRDVW
*2
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.
86(1RUWKZLQG
6(/(&7',67,1&7/DVW1DPH7LWOH+LUH'DWH
)520HPSOR\HHV$6H
,11(5-2,12UGHUVDVR
21H(PSOR\HH,' R(PSOR\HH,'
:+(5(6KLS&LW\ /RQGRQ
$1'&217$,16QRWHV
IUHQFKDQGXQLYHUVLW\
*2
2. Führen Sie die Abfrage aus, um zu überprüfen, ob sie vier Zeilen
zurückgibt.
8QWHUULFKWVHLQKHLW$EIUDJHQYRQ9ROOWH[WLQGL]HV
Ç 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.
86(1RUWKZLQG
6(/(&7>5$1.@2UGHU,'(PSOR\HH,'
)5202UGHUV$6R
,11(5-2,1&217$,167$%/((PSOR\HHVQRWHV
VDOHV1($5PDQDJHU
$6H
21R(PSOR\HH,' H>.(<@
:+(5(6KLS&LW\ /RQGRQ
25'(5%<>5$1.@'(6&
*2
2. Führen Sie die Abfrage aus, um zu überprüfen, ob sie sechs Zeilen
zurückgibt.
8QWHUULFKWVHLQKHLW$EIUDJHQYRQ9ROOWH[WLQGL]HV
/HUQ]LHONRQWUROOH
,QKDOWGLHVHU)ROLH
9HUWLHIHQ6LHGLH/HUQ]LHOH
GLHVHU8QWHUULFKWVHLQKHLW
LQGHP6LHGLH.HUQSXQNWH
ZLHGHUKROHQ
(LQVWLHJ
'LH)UDJHQ]XU/HUQ]LHO
NRQWUROOHEH]LHKHQVLFKDXI
HLQLJHGHU6FKOVVHONRQ
]HSWHGLH,QKDOWGLHVHU
8QWHUULFKWVHLQKHLWVLQG
„
(LQIKUXQJLQGHQ0LFURVRIW 6HDUFK'LHQVW
„
.RPSRQHQWHQGHV0LFURVRIW 6HDUFK'LHQVWHV
„
=XVDPPHQVWHOOHQYRQ,QIRUPDWLRQHQ]X 9ROOWH[WLQGL]HV
„
6FKUHLEHQYRQ 9ROOWH[WDEIUDJHQ
****************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.
8QWHUULFKWVHLQKHLW$EIUDJHQYRQ9ROOWH[WLQGL]HV
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.
8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ
LLL
+LQZHLVHIUGHQ.XUVOHLWHU
3UlVHQWDWLRQ
0LQXWHQ
hEXQJVHLQKHLW
0LQXWHQ
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.
8QWHUODJHQXQG9RUEHUHLWXQJ
In diesem Abschnitt werden die erforderlichen Unterlagen und vorbereitenden
Aufgaben erläutert, die nötig sind, um diese Unterrichtseinheit zu unterrichten.
(UIRUGHUOLFKH8QWHUODJHQ
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.
9RUEHUHLWHQGH$XIJDEHQ
Zur Vorbereitung dieser Unterrichtseinheit gehen Sie folgendermaßen vor:
„
Lesen Sie alle Unterlagen.
„
Arbeiten Sie die Übungseinheit durch.
LY
8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ
6WUDWHJLHIUGLH8QWHUULFKWVHLQKHLW
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.
8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ
Y
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.
$QSDVVXQJVLQIRUPDWLRQHQ
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.
:LFKWLJ 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.
(LQULFKWHQGHUhEXQJVHLQKHLW
Es gibt keine Anforderungen zum Einrichten der Übungseinheit, die die
Replikation oder die Anpassung betreffen.
(UJHEQLVVHGHUhEXQJVHLQKHLW
Auf den Kursteilnehmercomputern gibt es keine Konfigurationsänderungen, die
die Replikation oder die Anpassung betreffen.
LL
8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ
This page is intentionally left blank.
8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ
hEHUVLFKW
,QKDOWGLHVHU)ROLH
*HEHQ6LHHLQHhEHUVLFKW
EHUGLH7KHPHQXQG/HUQ
]LHOHGLHVHU8QWHUULFKWV
HLQKHLW
(LQVWLHJ
,QGLHVHU8QWHUULFKWVHLQKHLW
HUKDOWHQ6LH,QIRUPDWLRQHQ
]X3URJUDPPLHUREMHNWHQ
„
$Q]HLJHQGHV7H[WHVHLQHV3URJUDPPLHUREMHNWV
„
(LQIKUXQJ]X6LFKWHQ
„
9RUWHLOHYRQ6LFKWHQ
„
(UVWHOOHQYRQ6LFKWHQ
„
(LQIKUXQJ]XJHVSHLFKHUWHQ3UR]HGXUHQ
„
(LQIKUXQJ]X7ULJJHUQ
„
(LQIKUXQJ]XEHQXW]HUGHILQLHUWHQ)XQNWLRQHQ
****************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.
8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ
$Q]HLJHQGHV7H[WHVHLQHV3URJUDPPLHUREMHNWV
,QKDOWGLHVHU)ROLH
%HVFKUHLEHQ6LHZLHGHU
7HVWHLQHV3URJUDPPLHU
REMHNWVDQJH]HLJWZLUG
„
(;(&VSBKHOSWH[W> #REMQDPH @ QDPH
(LQVWLHJ
6LHN|QQHQGLH7H[W
GHILQLWLRQHLQHV3URJUDP
PLHUREMHNWVPLW+LOIHHLQHU
VSH]LHOOHQJHVSHLFKHUWHQ
6\VWHPSUR]HGXUDQ]HLJHQ
86(OLEUDU\
86(OLEUDU\
(;(&VSBKHOSWH[W
GER2YHUGXH9LHZ
(;(&VSBKHOSWH[W
GER2YHUGXH9LHZ
*2
*2
„
1LFKW MHGHV 3URJUDPPLHUREMHNW YHUIJW EHU HLQHQ PLW
LKP YHUEXQGHQHQ 7H[W
****************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.
6\QWD[
0HWKRGLVFKHU+LQZHLV
9HUZHQGHQ6LHLQGLHVHU
8QWHUULFKWVHLQKHLWLPPHU
VSBKHOSWH[W]XP$Q]HLJHQ
GHU'HILQLWLRQYRQ
3URJUDPPLHUREMHNWHQ
(;(&VSBKHOSWH[W>#REMQDPH @
QDPH
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.
%HLVSLHO
(UJHEQLV
8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ
In diesem Beispiel wird der Text zurückgegeben, der die dbo.OverdueViewSicht definiert.
86(OLEUDU\
(;(&VSBKHOSWH[W
GER2YHUGXH9LHZ
*2
7H[W
2YHUGXH9LHZ)UDJW2QORDQ9LHZDOV9HUNQSIXQJEHU
7DEHOOHQDE
/LVWHWGLH0LWJOLHGHU7LWHOXQG$XVOHLKLQIRUPDWLRQHQHLQHV
]XU=HLWDXVJHOLHKHQHQXQGEHUIlOOLJHQ([HPSODUHVDXI
&5($7(9,(:GER2YHUGXH9LHZ
$6
6(/(&7
)5202QORDQ9LHZ
:+(5(2QORDQ9LHZGXHBGDWH*(7'$7(
7LSS Verwenden Sie EXEC sp_helptext, um die Definitionen neu erstellter
Programmierobjekte zu überprüfen.
8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ
(LQIKUXQJ]X6LFKWHQ
,QKDOWGLHVHU)ROLH
6WHOOHQ6LHGDV.RQ]HSWYRQ
6LFKWHQYRUXQGJHEHQ6LH
HLQ%HLVSLHO
title
title
WLWOHBQR
WLWOHBQR
(LQVWLHJ
%HLHLQHU6LFKWKDQGHOWHV
VLFKXPHLQHDOWHUQDWLYH
0HWKRGH]XP$Q]HLJHQGHU
'DWHQDXVHLQHURGHU
PHKUHUHQ7DEHOOHQ
WLWOH
WLWOH
/DVWRIWKH0RKLFDQV
/DVWRIWKH0RKLFDQV
7KH9LOODJH:DWFK7RZHU
7KH9LOODJH:DWFK7RZHU
3RHPV
3RHPV
TitleView
TitleView
WLWOH
WLWOH
/DVWRIWKH0RKLFDQV
/DVWRIWKH0RKLFDQV
7KH9LOODJH:DWFK7RZHU
7KH9LOODJH:DWFK7RZHU
3RHPV
3RHPV
DXWKRU
DXWKRU
-DPHV)HQLPRUH
-DPHV)HQLPRUH&RRSHU
&RRSHU
.DWH'RXJODV:LJJLQ
.DWH'RXJODV:LJJLQ
:LOIUHG2ZHQ
:LOIUHG2ZHQ
V\QRSVLV
V\QRSVLV
aaa
aaa
aaa
aaa
aaa
aaa
86(OLEUDU\
86(OLEUDU\
*2
*2
&5($7(9,(:GER7LWOH9LHZ
&5($7(9,(:GER7LWOH9LHZ
$6
$6
6(/(&7WLWOHDXWKRU
6(/(&7WLWOHDXWKRU
)520WLWOH
)520WLWOH
*2
*2
DXWKRU
DXWKRU
-DPHV)HQLPRUH
-DPHV)HQLPRUH&RRSHU
&RRSHU
.DWH'RXJODV:LJJLQ
.DWH'RXJODV:LJJLQ
:LOIUHG2ZHQ
:LOIUHG2ZHQ
Sicht
Sichtdes
desBenutzers
Benutzers
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG****************
0HWKRGLVFKHU+LQZHLV
9HUJHJHQZlUWLJHQ6LHGHQ
.XUVWHLOQHKPHUQGDVVGDV
6FKUHLEHQYRQ$GKRF$E
IUDJHQLQDQGHUHQ8QWHU
ULFKWVHLQKHLWHQGLHVHV
.XUVHVEHKDQGHOWZLUG
:HLVHQ6LHGDUDXIKLQGDVV
LQGLHVHU8QWHUULFKWVHLQKHLW
GDV6SHLFKHUQYRQ$EIUDJHQ
DOV2EMHNWH6LFKWHQJH
VSHLFKHUWH3UR]HGXUHQXQG
7ULJJHULQGHU'DWHQEDQN
EHVFKULHEHQZLUG
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.
%HLVSLHO
$EIUDJH
(UJHEQLV
8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ
In diesem Beispiel wird die TitleView-Sicht in der library-Datenbank erstellt.
Die Sicht zeigt zwei Spalten der title-Tabelle an.
86(OLEUDU\
*2
&5($7(9,(:GER7LWOH9LHZ
$6
6(/(&7WLWOHDXWKRU
)520WLWOH
*2
6(/(&7IURP7LWOH9LHZ
*2
WLWOH
/DVWRIWKH0RKLFDQV
7KH9LOODJH:DWFK7RZHU
6HOI+HOS&RQGXFW3HUVHYHUDQFH
URZVDIIHFWHG
author
-DPHV)HQLPRUH&RRSHU
.DWH'RXJODV:LJJLQ
6DPXHO6PLOHV
8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ
9RUWHLOHYRQ6LFKWHQ
,QKDOWGLHVHU)ROLH
(UOlXWHUQ6LHZDUXP
%HQXW]HU6LFKWHQHUVWHOOHQ
RGHUYHUZHQGHQ
„
z
(LQVWLHJ
6LFKWHQELHWHQPHKUHUH
9RUWHLOH
.RQ]HQWULHUHQGHU'DWHQIU%HQXW]HU
z
„
.RQ]HQWULHUHQ DXIDXVVFKOLH‰OLFKZLFKWLJHRGHU
JHHLJQHWH'DWHQ
=XJDQJ ]X YHUWUDXOLFKHQ 'DWHQ HLQVFKUlQNHQ
9HUEHUJHQGHU'DWHQEDQNNRPSOH[LWlW
z
z
9HUEHUJHQNRPSOH[HU'DWHQEDQNHQWZUIH
9HUHLQIDFKHQ YRQ$EIUDJHQHLQVFKOLH‰OLFK YHUWHLOWHU
$EIUDJHQIU KHWHURJHQH 'DWHQ
„
9HUHLQIDFKHQGHU9HUZDOWXQJYRQ%HQXW]HUEHUHFKWLJXQJHQ
„
2UJDQLVLHUHQYRQ'DWHQIUGHQ([SRUWLQDQGHUH
$QZHQGXQJHQ
****************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.
.RQ]HQWULHUHQGHU'DWHQIU%HQXW]HU
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.
9HUEHUJHQGHU'DWHQEDQNNRPSOH[LWlW
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.
8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ
9HUHLQIDFKHQGHU9HUZDOWXQJYRQ%HQXW]HU
EHUHFKWLJXQJHQ
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.
2UJDQLVLHUHQYRQ'DWHQIUGHQ([SRUWLQDQGHUH
$QZHQGXQJHQ
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.
8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ
‹ (UVWHOOHQYRQ6LFKWHQ
,QKDOWGLHVHU)ROLH
*HEHQ6LHHLQHQhEHUEOLFN
EHUGLH7KHPHQGLHVHV
$EVFKQLWWV
„
'HILQLHUHQYRQ6LFKWHQ
(LQVWLHJ
„
(LQVFKUlQNXQJHQEHLP(UVWHOOHQYRQ6LFKWHQ
„
%HLVSLHO$Q]HLJHQYRQ,QIRUPDWLRQHQDXVPHKUHUHQ
7DEHOOHQ
,QGLHVHP$EVFKQLWWZLUG
EHVFKULHEHQZLH6LFKWHQ
HUVWHOOWZHUGHQ
****************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.
8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ
'HILQLHUHQYRQ6LFKWHQ
,QKDOWGLHVHU)ROLH
%HVFKUHLEHQ6LHZLH
6LFKWHQGHILQLHUWZHUGHQ
(LQVWLHJ
%HLP(UVWHOOHQHLQHU6LFKW
EHUSUIW64/6HUYHUGLH
([LVWHQ]GHU2EMHNWHDXI
GLHLQGHU6LFKWYHUZLHVHQ
ZLUG
Beispiel
Beispiel 1:
1: Erstellen
Erstellen einer
einer Sicht
Sicht
86(OLEUDU\
86(OLEUDU\
*2
*2
&5($7(9,(:GER8QSDLG)LQHV9LHZ0HPEHU7RWDO8QSDLG)LQHV
&5($7(9,(:GER8QSDLG)LQHV9LHZ0HPEHU7RWDO8QSDLG)LQHV
$6
$6
6(/(&7PHPEHUBQRVXPILQHBDVVHVVHGILQHBSDLG
6(/(&7PHPEHUBQRVXPILQHBDVVHVVHGILQHBSDLG
)520ORDQKLVW
)520ORDQKLVW
*5283%<PHPEHUBQR
*5283%<PHPEHUBQR
+$9,1*680ILQHBDVVHVVHGILQHBSDLG!
+$9,1*680ILQHBDVVHVVHGILQHBSDLG!
*2
*2
Beispiel
Beispiel 2:
2: Abfragen
Abfragen einer
einer Sicht
Sicht
6(/(&7
6(/(&7
)5208QSDLG)LQHV9LHZ
)5208QSDLG)LQHV9LHZ
*2
*2
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG****************
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 Be(PSIHKOHQ6LHGHQ.XUVWHLO
zeichner entsprechen. Die Angabe eines Besitzernamens für die Sicht ist
QHKPHUQHLQHNRQVLVWHQWH
%HQHQQXQJVNRQYHQWLRQ]XP optional. Sie sollten eine konsistente Benennungskonvention entwickeln, um
Sichten von Tabellen zu unterscheiden. Sie können zum Beispiel das Wort
8QWHUVFKHLGHQYRQ6LFKWHQ
„View“ als Suffix für jedes Objekt verwenden, das Sie erstellen. Auf diese
XQG7DEHOOHQ]XHQWZLFNHOQ
Weise können Sie ähnliche Objekte (Tabellen und Sichten) beim Abfragen der
XQGGERDOV%HVLW]HUQDPH
INFORMATION_SCHEMA.TABLES-Sicht leicht unterscheiden.
DQ]XJHEHQ
0HWKRGLVFKHU+LQZHLV
6\QWD[
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.
8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ
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:
0HWKRGLVFKHU+LQZHLV
6SDOWHQQDPHQN|QQHQDXI
]ZHL$UWHQDQJHJHEHQ
ZHUGHQLQGHU6(/(&7
$QZHLVXQJXQWHU9HUZHQ
GXQJGHV6SDOWHQDOLDVRGHU
LQGHU&5($7(9,(:
$QZHLVXQJ
%HLVSLHO
%HLVSLHO
„
Spalten der Sicht basieren auf einem arithmetischen Ausdruck, einer
integrierten Funktion oder einer Konstante.
„
Spalten in zu verknüpfenden Tabellen haben identische Namen.
:LFKWLJ 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.
86(OLEUDU\
*2
&5($7(9,(:GER8QSDLG)LQHV9LHZ0HPEHU7RWDO8QSDLG)LQHV
$6
6(/(&7PHPEHUBQRVXPILQHBDVVHVVHGILQHBSDLG
)520ORDQKLVW
*5283%<PHPEHUBQR
+$9,1*680ILQHBDVVHVVHGILQHBSDLG!
*2
In diesem Beispiel wird die Sicht abgefragt, um die Ergebnisse anzuzeigen.
6(/(&7
)5208QSDLG)LQHV9LHZ
*2
Es kommt zu etwa den folgenden Ergebnissen.
(UJHEQLV
0HPEHU
7RWDO8QSDLG)LQHV
7744
83.2
URZVDIIHFWHG
:DUQXQJ18//:HUWZLUGGXUFKHLQH$JJUHJDW2SHUDWLRQ
JHO|VFKW
8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ
(LQVFKUlQNXQJHQEHLP(UVWHOOHQYRQ6LFKWHQ
,QKDOWGLHVHU)ROLH
%HVFKUHLEHQ6LHGLH(LQ
VFKUlQNXQJHQEHLP(U
VWHOOHQYRQ6LFKWHQ
ƒ .|QQHQDXIPD[LPDO6SDOWHQYHUZHLVHQ
(LQVWLHJ
ƒ .|QQHQQLFKWGLH&20387( RGHU&20387(%<
.ODXVHOHQWKDOWHQ
%HDFKWHQ6LHGLHVH(LQ
VFKUlQNXQJHQEHLP
'HILQLHUHQYRQ6LFKWHQ
ƒ .|QQHQGLH25'(5%<.ODXVHO QXULQ9HUELQGXQJPLW
HLQHU723.ODXVHOHQWKDOWHQ
ƒ .|QQHQQLFKWGDV6FKOVVHOZRUW,172HQWKDOWHQ
ƒ .|QQHQQLFKWDXIWHPSRUlUH7DEHOOHQYHUZHLVHQ
ƒ 0XVVDOVHLQ]HOQHU 7UDQVDFW64/6WDSHODXVJHGUFNW
ZHUGHQ
****************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.
8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ
%HLVSLHO$Q]HLJHQYRQ,QIRUPDWLRQHQDXVPHKUHUHQ7DEHOOHQ
,QKDOWGLHVHU)ROLH
*HEHQ6LHHLQ%HLVSLHOIU
GDV$Q]HLJHQYRQ,QIRUPD
WLRQHQDXVPHKUHUHQ
7DEHOOHQ
PHPEHU
PHPEHUBQR
PHPEHUBQR
11
11
12
12
13
13
14
14
ODVWQDPH
ODVWQDPH
Thomas
Thomas
Thomas
Thomas
Funk
Funk
Rudd
Rudd
MXYHQLOH
ILUVWQDPH
ILUVWQDPH
Gary
Gary
Clair
Clair
Frank
Frank
Clair
Clair
PLGGOHLQLWLDO
PLGGOHLQLWLDO
~~~
~~~
~~~
~~~
~~~
~~~
~~~
~~~
SKRWRJUDSK
SKRWRJUDSK
~~~
~~~
~~~
~~~
~~~
~~~
~~~
~~~
PHPEHUBQR
PHPEHUBQR
12
12
13
13
DGXOWBQR
DGXOWBQR ELUWKBGDWH
ELUWKBGDWH
11
11
66
(LQVWLHJ
6LHZHUGHQKlXILJ6LFKWHQ
]XP$Q]HLJHQYRQ,QIRUPD
WLRQHQDXVPHKUHUHQYHU
NQSIWHQ7DEHOOHQDQHLQHP
]HQWUDOHQ2UWHUVWHOOHQ
86(OLEUDU\
86(OLEUDU\
*2
*2
&5($7(9,(:GERELUWKGD\YLHZ
&5($7(9,(:GERELUWKGD\YLHZ
ODVWQDPHILUVWQDPHELUWKBGDWH
ODVWQDPHILUVWQDPHELUWKBGDWH
$6
$6
6(/(&7ODVWQDPHILUVWQDPH
6(/(&7ODVWQDPHILUVWQDPH
&219(57FKDUELUWKBGDWH
&219(57FKDUELUWKBGDWH
)520PHPEHU
)520PHPEHU
,11(5-2,1MXYHQLOH
,11(5-2,1MXYHQLOH
21PHPEHUPHPEHUBQR
21PHPEHUPHPEHUBQR MXYHQLOHPHPEHUBQR
MXYHQLOHPHPEHUBQR
*2
*2
%LUWKGD\9LHZ
ODVWQDPH
ODVWQDPH ILUVWQDPH
ILUVWQDPH %LUWK'DWH
%LUWK'DWH
Thomas
92.01.16
Thomas Gary
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.
%HLVSLHO
0HWKRGLVFKHU+LQZHLV
'LH&219(57)XQNWLRQ
LQGHU$EIUDJHlQGHUWGLH
ELUWKBGDWH6SDOWHGLHPLW
GHPGDWHWLPH'DWHQW\S
GHILQLHUWLVWLQGDV$16,
)RUPDW
In diesem Beispiel wird die birthdayview-Sicht erstellt, die die Tabellen
member und juvenile verknüpft.
86(OLEUDU\
*2
&5($7(9,(:GERELUWKGD\YLHZ
ODVWQDPHILUVWQDPHELUWKBGDWH
$6
6(/(&7ODVWQDPHILUVWQDPH
&219(57FKDUELUWKBGDWH
)520PHPEHU
,11(5-2,1MXYHQLOH
21PHPEHUPHPEHUBQR MXYHQLOHPHPEHUBQR
*2
Wenn Sie die Sicht nach NULL-Werten in der birthday-Spalte abfragen,
werden korrekterweise keine Zeilen zurückgegeben.
(UJHEQLV
6(/(&7
)520ELUWKGD\YLHZ
:+(5(ELUWKBGDWHLVQXOO
*2
ODVWQDPH
ILUVWQDPH ELUWKGD\
URZVDIIHFWHG
8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ
‹ (LQIKUXQJ]XJHVSHLFKHUWHQ3UR]HGXUHQ
,QKDOWGLHVHU)ROLH
*HEHQ6LHHLQHQhEHUEOLFN
EHUGLH7KHPHQGLHVHV
$EVFKQLWWV
„
'HILQLHUHQJHVSHLFKHUWHU3UR]HGXUHQ
(LQVWLHJ
„
9RUWHLOHGHU9HUZHQGXQJJHVSHLFKHUWHU3UR]HGXUHQ
'LHVHU$EVFKQLWWJLEWHLQH
(LQIKUXQJ]XJHVSHLFKHU
WHQ3UR]HGXUHQXQGOLVWHW
HLQLJH9RUWHLOHGHU9HU
ZHQGXQJJHVSHLFKHUWHU
3UR]HGXUHQDXI
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG****************
.HUQSXQNWH
%HWRQHQ6LHGDVVLQGLHVHP
$EVFKQLWWDXIGLH)XQNWLRQV
ZHLVHJHVSHLFKHUWHU3UR]H
GXUHQQLFKWLP(LQ]HOQHQ
HLQJHJDQJHQZLUG9HU
ZHLVHQ6LHGLH.XUVWHLO
QHKPHUDXIGLH,QIRUPD
WLRQHQLQGHU64/6HUYHU
2QOLQHGRNXPHQWDWLRQ
Dieser Abschnitt gibt eine Einführung zu gespeicherten Prozeduren und listet
einige Vorteile der Verwendung gespeicherter Prozeduren auf.
8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ
'HILQLHUHQJHVSHLFKHUWHU3UR]HGXUHQ
,QKDOWGLHVHU)ROLH
'HILQLHUHQ6LHJHVSHLFKHUWH
3UR]HGXUHQ
(LQVWLHJ
(LQHJHVSHLFKHUWH3UR]HGXU
LVWHLQHEHQDQQWH$XIOLVWXQJ
YRQYRUNRPSLOLHUWHQ
7UDQVDFW64/$QZHLVXQ
JHQGLHDXIGHP6HUYHU
JHVSHLFKHUWLVW
„
(LQHJHVSHLFKHUWH3UR]HGXULVWHLQHEHQDQQWH$XIOLVWXQJ
YRQ YRUNRPSLOLHUWHQ7UDQVDFW64/$QZHLVXQJHQ
„
(LQHJHVSHLFKHUWH3UR]HGXUIDVVWVLFKZLHGHUKROHQGH
$XIJDEHQ]XVDPPHQ
„
*HVSHLFKHUWH 3UR]HGXUHQ KDEHQ IROJHQGH 0HUNPDOH
z
6LHHQWKDOWHQ$QZHLVXQJHQGLH2SHUDWLRQHQDXVIKUHQ
z
6LHDN]HSWLHUHQ(LQJDEHSDUDPHWHU
z
z
6LHN|QQHQHLQHQ6WDWXVZHUW ]XUFNJHEHQGHU(UIROJ
RGHU)HKOHUPHOGHW
6LHN|QQHQPHKUHUH$XVJDEHSDUDPHWHU]XUFNJHEHQ
****************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.
%HLVSLHO
8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ
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.
86(SXEV
*2
&5($7(352&('85(DXBLQIRBDOO
$6
6(/(&7DXBOQDPHDXBIQDPHWLWOHSXEBQDPH
)520DXWKRUV$6D
,11(5-2,1WLWOHDXWKRU$6WD21DDXBLG WDDXBLG
,11(5-2,1WLWOHV$6W21WWLWOHBLG WDWLWOHBLG
,11(5-2,1SXEOLVKHUV$6S21WSXEBLG SSXEBLG
*2
8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ
9RUWHLOHGHU9HUZHQGXQJJHVSHLFKHUWHU3UR]HGXUHQ
,QKDOWGLHVHU)ROLH
(UOlXWHUQ6LHGLH9RUWHLOH
YRQJHVSHLFKHUWHQ
3UR]HGXUHQ
„
*HPHLQVDPH1XW]XQJGHU$QZHQGXQJVORJLN
(LQVWLHJ
„
9HUEHUJHQ YRQ'HWDLOVGHV'DWHQEDQNVFKHPDV
„
%HUHLWVWHOOXQJYRQ6LFKHUKHLWVPHFKDQLVPHQ
„
/HLVWXQJVYHUEHVVHUXQJ
„
5HGX]LHUXQJGHV'DWHQYHUNHKUVLP1HW]ZHUN
*HVSHLFKHUWH3UR]HGXUHQ
ELHWHQ]DKOUHLFKH9RUWHLOH
****************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.
8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ
'HU'DWHQYHUNHKULP1HW]
ZHUNZLUGUHGX]LHUWGDIU
GDV6HQGHQYRQ$QIRUGH
UXQJHQZHQLJHU3DNHWH
EHQ|WLJWZHUGHQ
„
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.
8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ
(LQIKUXQJ]X7ULJJHUQ
,QKDOWGLHVHU)ROLH
(UOlXWHUQ6LHGDV.RQ]HSW
HLQHV7ULJJHUV
(LQVWLHJ
(LQ7ULJJHULVWHLQHVSH]LHOOH
)RUPHLQHUJHVSHLFKHUWHQ
3UR]HGXU
„
(LQ 7ULJJHU LVWHLQHVSH]LHOOH)RUPHLQHUJHVSHLFKHUWHQ
3UR]HGXU
„
7ULJJHU ]HLFKQHQVLFKGXUFKIROJHQGH0HUNPDOHDXV
z
7ULJJHU VLQGPLWHLQHU7DEHOOHYHUNQSIW
z
7ULJJHU ZHUGHQDXWRPDWLVFKDXIJHUXIHQ
z
7ULJJHU N|QQHQQLFKWGLUHNWDXIJHUXIHQZHUGHQ
z
7ULJJHU VLQG7HLOGHU7UDQVDNWLRQYRQGHUVLHDXVJHO|VW
ZXUGHQ
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG****************
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
%HWRQHQ6LHGDVVLQGLHVHP
wird.
$EVFKQLWWDXIGLH)XQNWLRQV
.HUQSXQNWH
ZHLVHYRQ7ULJJHUQQLFKWLP
(LQ]HOQHQHLQJHJDQJHQ
ZLUG9HUZHLVHQ6LHGLH
.XUVWHLOQHKPHUDXIGLH,QIRU
PDWLRQHQLQGHU
64/6HUYHU2QOLQHGRNX
PHQWDWLRQ
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:
7ULJJHUVLQGPLWHLQHU7DEHOOHYHUNQSIW Trigger werden für eine bestimmte
Tabelle definiert, die als Triggertabelle bezeichnet wird.
7ULJJHUZHUGHQDXWRPDWLVFKDXIJHUXIHQ 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.
7ULJJHUN|QQHQQLFKWGLUHNWDXIJHUXIHQZHUGHQ Im Gegensatz zu gespeicherten
Standardsystemprozeduren können Trigger nicht direkt aufgerufen werden und
keine Parameter übergeben oder übernehmen.
7ULJJHUVLQG7HLOGHU7UDQVDNWLRQYRQGHUVLHDXVJHO|VWZXUGHQ
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.
8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ
‹(LQIKUXQJ]XEHQXW]HUGHILQLHUWHQ)XQNWLRQHQ
,QKDOWGLHVHU)ROLH
*HEHQ6LHHLQHQhEHUEOLFN
EHUGLH7KHPHQGLHVHV
$EVFKQLWWV
„
$UWHQYRQEHQXW]HUGHILQLHUWHQ)XQNWLRQHQ
(LQVWLHJ
„
(UVWHOOHQHLQHUEHQXW]HUGHILQLHUWHQ)XQNWLRQ
'LHVHU$EVFKQLWWJLEWHLQH
hEHUVLFKWEHUEHQXW]HU
GHILQLHUWH)XQNWLRQHQXQG
HUOlXWHUWZDUXPXQGZLHVLH
YHUZHQGHWZHUGHQ
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG****************
Funktionen sind Teilroutinen, die aus einer oder mehreren Transact-SQLAnweisungen bestehen und die Sie dazu verwenden können, Code für eine
%HWRQHQ6LHGDVVLQGLHVHP
erneute Verwendung zusammenzufassen. Zusätzlich zu den integrierten
$EVFKQLWWDXIGLH)XQNWLRQV
Systemfunktionen von Microsoft SQL Server 2000 können Benutzer eigene
ZHLVHYRQEHQXW]HUGHILQLHU
benutzerdefinierte Funktionen erstellen.
WHQ)XQNWLRQHQQLFKWLP(LQ
.HUQSXQNWH
]HOQHQHLQJHJDQJHQZLUG
9HUZHLVHQ6LHGLH.XUVWHLO
QHKPHUDXIGLH,QIRUPD
WLRQHQLQGHU64/6HUYHU
2QOLQHGRNXPHQWDWLRQ
8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ
$UWHQYRQEHQXW]HUGHILQLHUWHQ)XQNWLRQHQ
,QKDOWGLHVHU)ROLH
6WHOOHQ6LHGDV.RQ]HSW
HLQHUEHQXW]HUGHILQLHUWHQ
)XQNWLRQYRUXQGHUOlXWHUQ
6LHGLH9RUWHLOH
(LQVWLHJ
(VJLEWGUHL$UWHQYRQEH
QXW]HUGHILQLHUWHQ)XQN
WLRQHQ
„
6NDODUIXQNWLRQHQ
z
z
„
„
(QWVSUHFKHQHLQHULQWHJULHUWHQ)XQNWLRQ
*HEHQHLQHQHLQ]HOQHQ'DWHQZHUW]XUFN GHUDXVHLQHU
5HLKHYRQ$QZHLVXQJHQ]XVDPPHQJHVHW]WZLUG
$XVPHKUHUHQ$QZHLVXQJHQEHVWHKHQGH)XQNWLRQHQPLW
7DEHOOHQUFNJDEH
z
,QKDOW HQWVSULFKWGHPHLQHUJHVSHLFKHUWHQ3UR]HGXU
z
9HUZHLVHZLHEHLHLQHU6LFKW
,QOLQH)XQNWLRQHQPLW7DEHOOHQUFNJDEH
z
z
(QWVSUHFKHQHLQHU 6LFKW PLW 3DUDPHWHUQ
*HEHQHLQH 7DEHOOH DOV (UJHEQLV HLQHU HLQ]HOQHQ
6(/(&7$QZHLVXQJ ]XUFN
****************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:
6NDODUIXQNWLRQHQ
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.
$XVPHKUHUHQ$QZHLVXQJHQEHVWHKHQGH)XQNWLRQHQPLW
7DEHOOHQUFNJDEH
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.
8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ
,QOLQH)XQNWLRQHQPLW7DEHOOHQUFNJDEH
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.
8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ
(UVWHOOHQHLQHUEHQXW]HUGHILQLHUWHQ)XQNWLRQ
,QKDOWGLHVHU)ROLH
%HVFKUHLEHQ6LHGLH
&5($7()81&7,21
$QZHLVXQJ
(LQVWLHJ
6LHHUVWHOOHQHLQHEHQXW]HU
GHILQLHUWH)XQNWLRQDXIIDVW
GLHVHOEH:HLVHZLHHLQH
6LFKWRGHUHLQHJHVSHLFKHUWH
3UR]HGXU
„
(UVWHOOHQHLQHUEHQXW]HUGHILQLHUWHQ)XQNWLRQ
86(1RUWKZLQG
86(1RUWKZLQG
*2
*2
&5($7()81&7,21IQB1HZ5HJLRQ
&5($7()81&7,21IQB1HZ5HJLRQ #P\LQSXWQYDUFKDU
#P\LQSXWQYDUFKDU
5(78516QYDUFKDU
5(78516QYDUFKDU
%(*,1
%(*,1
,)#P\LQSXW,618//
,)#P\LQSXW,618//
6(7#P\LQSXW
6(7#P\LQSXW 1LFKWDQZHQGEDU©
1LFKWDQZHQGEDU©
5(7851#P\LQSXW
5(7851#P\LQSXW
(1'
(1'
*2
*2
„
(LQVFKUlQNXQJHQIUEHQXW]HUGHILQLHUWH)XQNWLRQHQ
****************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.
(UVWHOOHQHLQHUEHQXW]HUGHILQLHUWHQ)XQNWLRQ
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.
6\QWD[
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
%HLVSLHO
8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ
In diesem Beispiel wird eine benutzerdefinierte Funktion erstellt, die einen
NULL-Wert durch die Wörter „Nicht anwendbar “ ersetzt.
86(1RUWKZLQG
*2
&5($7()81&7,21IQB1HZ5HJLRQ#P\LQSXWQYDUFKDU
5(78516QYDUFKDU
%(*,1
,)#P\LQSXW,618//
6(7#P\LQSXW 1LFKWDQZHQGEDU
5(7851#P\LQSXW
(1'
*2
Geben Sie bei einem Verweis auf eine skalare benutzerdefinierte Funktion den
Funktionsbesitzer und den Funktionsnamen in einer zweiteiligen Syntax an.
(UJHEQLV
6(/(&7/DVW1DPH&LW\
GERIQB1HZ5HJLRQ5HJLRQ$65HJLRQ
&RXQWU\
)520(PSOR\HHV
*2
/DVW1DPH
&LW\
5HJLRQ
&RXQWU\
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
8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ
(LQVFKUlQNXQJHQIUEHQXW]HUGHILQLHUWH)XQNWLRQHQ
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
8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ
(PSIRKOHQH0HWKRGHQ
,QKDOWGLHVHU)ROLH
6WHOOHQ6LHGLHHPSIRKOHQHQ
0HWKRGHQIU3URJUDPPLHU
REMHNWHYRU
hEHUSUIHQ6LH2EMHNWGHILQLWLRQHQ
hEHUSUIHQ6LH2EMHNWGHILQLWLRQHQ PLW+LOIH
PLW+LOIH YRQ
YRQ
µ(;(&VSBKHOSWH[W§
µ(;(&VSBKHOSWH[W§
(LQVWLHJ
9HUZHQGHQ6LH6LFKWHQ]XP$XI]HLFKQHQXQGHUQHXWHQ
9HUZHQGHQ6LH6LFKWHQ]XP$XI]HLFKQHQXQGHUQHXWHQ
9HUZHQGHQYRQ$EIUDJHQ
9HUZHQGHQYRQ$EIUDJHQ
'LHVVLQGHPSIRKOHQH
0HWKRGHQIUGLH9HUZHQ
GXQJYRQ3URJUDPPLHU
REMHNWHQ
9HUZHQGHQ
9HUZHQGHQ 6LH
6LH JHVSHLFKHUWH
JHVSHLFKHUWH 3UR]HGXUHQ
3UR]HGXUHQ ]XP
]XP =XVDPPHQ
=XVDPPHQ
IDVVHQYRQNRPSOH[HQ3UR]HGXUHQ
IDVVHQYRQNRPSOH[HQ3UR]HGXUHQ
9HUZHQGHQ6LHEHQXW]HUGHILQLHUWH)XQNWLRQHQXP$XVGUFNH
9HUZHQGHQ6LHEHQXW]HUGHILQLHUWH)XQNWLRQHQXP$XVGUFNH
]XVDPPHQ]XIDVVHQ
]XVDPPHQ]XIDVVHQ
****************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”
8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ
hEXQJVHLQKHLW$$UEHLWHQPLW6LFKWHQ
,QKDOWGLHVHU)ROLH
*HEHQ6LHHLQH(LQIKUXQJ
LQGLHhEXQJVHLQKHLW
(LQVWLHJ
,QGLHVHUhEXQJVHLQKHLW
ZHUGHQ6LH6LFKWHQHUVWHOOHQ
XQGlQGHUQ
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG****************
(UOlXWHUQ6LHGLH/HUQ]LHOH
GHUhEXQJVHLQKHLW
/HUQ]LHOH
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.
9RUDXVVHW]XQJHQ
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.
:HLWHUH,QIRUPDWLRQHQ
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.
8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ
6]HQDULR
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
9HUDQVFKODJWH=HLWIUGLHhEXQJVHLQKHLW0LQXWHQ
8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ
hEXQJ
*HQHULHUHQHLQHU6LFKWPLW+LOIHHLQHU64/4XHU\$QDO\]HU9RUODJH
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>.
____________________________________________________________
____________________________________________________________
8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ
Ç 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.
6(/(&7)520WLWOH:+(5(DXWKRU -DQH$XVWHQ
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.
86(OLEUDU\
6(/(&7
)520$XVWHQ7LWOHV9LHZ
*2
8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ
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.
____________________________________________________________
____________________________________________________________
8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ
hEXQJ
bQGHUQHLQHU6LFKWPLW+LOIHGHV2EMHNWNDWDORJVYRQ64/4XHU\
$QDO\]HU
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.
8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ
Ç 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.
86(OLEUDU\
6(/(&7WLWOHBQRWLWOHDXWKRUV\QRSVLV
)520GER$XVWHQ7LWOHV9LHZ
*2
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.
____________________________________________________________
____________________________________________________________
8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ
/HUQ]LHONRQWUROOH
,QKDOWGLHVHU)ROLH
9HUWLHIHQ6LHGLH/HUQ]LHOH
GLHVHU8QWHUULFKWVHLQKHLW
LQGHP6LHGLH.HUQSXQNWH
ZLHGHUKROHQ
(LQVWLHJ
'LH)UDJHQ]XU/HUQ]LHO
NRQWUROOHEH]LHKHQVLFKDXI
HLQLJHGHU6FKOVVHONRQ
]HSWHGLH,QKDOWGLHVHU
8QWHUULFKWVHLQKHLWVLQG
„
$Q]HLJHQGHV7H[WHVHLQHV3URJUDPPLHUREMHNWV
„
(LQIKUXQJ]X6LFKWHQ
„
9RUWHLOHYRQ6LFKWHQ
„
(UVWHOOHQYRQ6LFKWHQ
„
(LQIKUXQJ]XJHVSHLFKHUWHQ3UR]HGXUHQ
„
(LQIKUXQJ]X 7ULJJHUQ
„
(LQIKUXQJ]XEHQXW]HUGHILQLHUWHQ)XQNWLRQHQ
****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG****************
*HKHQ6LHDQKDQGGLHVHU
)UDJHQGLH7KHPHQGHU
8QWHUULFKWVHLQKHLWGXUFK
.OlUHQ6LHRIIHQH)UDJHQ
GHU.XUVWHLOQHKPHUEHYRU
6LHPLWGHU/HUQ]LHONRQWUROOH
EHJLQQHQ
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.
8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ
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
(LQIKUXQJ
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.
hEHUVLFKWEHU9RUJlQJHLQGHU%LEOLRWKHN
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
$QKDQJ$)DOOVWXGLHGHUOLEUDU\'DWHQEDQN
7lJOLFKH%LEOLRWKHNVIXQNWLRQHQ
Es gibt viele tägliche Bibliotheksfunktionen. Die folgenden Funktionen gehören
zu den wichtigsten.
(LQGHXWLJHV,GHQWLIL]LHUHQYRQ%FKHUQ
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.
9RUEHVWHOOHQYRQ%FKHUQ
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.
%HVWLPPHQGHU9HUIJEDUNHLWHLQHV%XFKHV
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.
5HJLVWULHUHQYRQ0LWJOLHGHUQ
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.
$QKDQJ$)DOOVWXGLHGHUOLEUDU\'DWHQEDQN
$XVFKHFNHQYRQ%FKHUQ
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.
(LQFKHFNHQYRQ%FKHUQ
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.
*HQHULHUHQYRQ9HUZHQGXQJVEHULFKWHQ
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.
$QKDQJ$)DOOVWXGLHGHUOLEUDU\'DWHQEDQN
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?
$QKDQJ$)DOOVWXGLHGHUOLEUDU\'DWHQEDQN
(QWZXUIGHU%LEOLRWKHNVGDWHQEDQN
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.
,QIRUPDWLRQHQ]X0LWJOLHGHUQ
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.
$QKDQJ$)DOOVWXGLHGHUOLEUDU\'DWHQEDQN
,QIRUPDWLRQHQ]X7LWHOQ
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.
$QKDQJ$)DOOVWXGLHGHUOLEUDU\'DWHQEDQN
,QIRUPDWLRQHQ]XP$XVOHLKHQ
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.
$QPHUNXQJ In der folgenden Abbildung steht FK1 für einen zusammengesetzten Fremdschlüssel. FK definiert einen einspaltigen Fremdschlüssel.
reservation
reservation
loan
loan
LVEQ
PHPEHUBQR ORJBGDWH
ORJBGDWH VWDWH
VWDWH UHPDUNV
UHPDUNV
LVEQ PHPEHUBQR
3.).
11
3.).
3.). 3.).
11
:$
:$ aaa
aaa
18//
:$
18//
:$ 18//
18//
:$
aaa
:$ aaa
LVEQ
FRS\BQR WLWOHBQR
WLWOHBQR PHPEHUBQR
PHPEHUBQR
LVEQ FRS\BQR
3.).
3.). ).11
).11 ).11
).11
3.). 3.).
RXWBGDWH
RXWBGDWH
11
11
GXHBGDWH
GXHBGDWH
11
11
loanhist
loanhist
LVEQ
LVEQ FRS\BQR
FRS\BQR RXWBGDWH
RXWBGDWH WLWOHBQR
WLWOHBQR PHPEHUBQR
PHPEHUBQR GXHBGDWH
GXHBGDWH
3.).
3.). 3.).
).11 ).11
).11
3.). 11
11 ).11
LQBGDWH
LQBGDWH ILQHBDVVHVVHG
ILQHBDVVHVVHG ILQHBSDLG
ILQHBSDLG ILQHBZDLYHG
ILQHBZDLYHG
18//
18//
UHPDUNV
UHPDUNV
aaa
aaa
aaa
aaa
aaa
aaa
aaa
aaa
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.
This page is intentionally left blank.
Anhang B: Datenbankschemas
PK
FK2
FK1
PK
PK
CategoryName
Description
Picture
CategoryID
Categories
ProductName
SupplierID
CategoryID
QuantityPerUnit
UnitPrice
UnitsInStock
UnitsOnOrder
ReorderLevel
Discontinued
ProductID
Products
CompanyName
ContactName
ContactTitle
Address
City
Region
PostalCode
Country
Phone
Fax
HomePage
SupplierID
Suppliers
TerritoryDescription
RegionID
FK1
PK
CompanyName
Phone
ShipperID
Shippers
UnitPrice
Quantity
Discount
PK,FK1 OrderID
PK,FK2 ProductID
Order Details
PK,FK1 EmployeeID
PK,FK2 TerritoryID
EmployeeTerritories
TerritoryID
Territories
RegionDescription
RegionID
PK
PK
Region
CustomerID
EmployeeID
OrderDate
RequiredDate
ShippedDate
ShipVia
Freight
ShipName
ShipAddress
ShipCity
ShipRegion
ShipPostalCode
ShipCountry
FK1
FK2
FK3
OrderID
Orders
LastName
FirstName
Title
TitleOfCourtesy
BirthDate
HireDate
Address
City
Region
PostalCode
Country
HomePhone
Extension
Photo
Notes
ReportsTo
PhotoPath
EmployeeID
PK
PK
Employees
CustomerDesc
CustomerTypeID
PK
CompanyName
ContactName
ContactTitle
Address
City
Region
PostalCode
Country
Phone
Fax
CustomerID
Customers
PK,FK2 CustomerID
PK,FK1 CustomerTypeID
CustomerCustomerDemo
PK
CustomerDemographics
Diagramm der
NorthwindDatenbank
juvenile
street
city
state
zip
phone_no
expr_date
PK,FK1 member_no
adult
lastname
firstname
middleinitial
photograph
member_no
FK1
adult_member_no
birth_date
PK,FK2 member_no
PK
member
isbn
title_no
translation
cover
loanable
PK
FK1
item
log_date
remarks
PK,FK1 isbn
PK,FK2 member_no
reservation
PK
FK3
FK2
title
author
synopsis
title_no
title
title_no
member_no
out_date
due_date
PK,FK1 isbn
PK,FK1 copy_no
loan
FK2
PK,FK1
PK
title_no
on_loan
isbn
copy_no
copy
FK2
title_no
member_no
due_date
in_date
fine_assessed
fine_paid
fine_waived
remarks
PK,FK1 isbn
PK,FK1 copy_no
PK
out_date
loanhist
Diagramm der
library-Datenbank
sales
stor_name
stor_address
city
state
zip
stor_id
FK1,I1
lorange
hirange
royalty
title_id
roysched
ord_date
qty
payterms
PK,FK1
stor_id
PK
ord_num
PK,FK2,I1 title_id
PK
stores
title
type
pub_id
price
advance
royalty
ytd_sales
notes
pubdate
title_id
titles
discounttype
stor_id
lowqty
highqty
discount
FK1
I1
PK
FK1
discounts
au_ord
royaltyper
au_id
title_id
titleauthor
pub_name
city
state
country
pub_id
PK,FK1,I1
PK,FK2,I2
PK
publishers
logo
pr_info
PK,FK1 pub_id
pub_info
FK2
I1
I1
I1
FK1
PK
fname
minit
lname
job_id
job_lvl
pub_id
hire_date
emp_id
employee
I1
I1
PK
job_desc
min_lvl
max_lvl
job_id
au_lname
au_fname
phone
address
city
state
zip
contract
au_id
authors
PK
jobs
Diagramm der
pubsDatenbank
PK
prod_name
prod_id
Produce
FK1
FK2
buyer_id
prod_id
qty
Sales
PK
buyer_name
buyer_id
Buyers
Diagramm der
joindbDatenbank
Herunterladen