Issuu on Google+

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Ă&#x;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: tclocsug@microsoft.com. 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: mcp@msprograms.com




(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Ă&#x;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Ă&#x;lich geschachtelter und korrelierter Unterabfragen. AuĂ&#x;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Ă&#x;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Ă&#x;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(QJLQHHU 0&6(

„

0LFURVRIW&HUWLILHG'DWDEDVH$GPLQLVWUDWRU 0&'%$

„

0LFURVRIW&HUWLILHG6ROXWLRQ'HYHORSHU 0&6'

„

0LFURVRIW&HUWLILHG3URIHVVLRQDO6LWH%XLOGLQJ 0&36LWH%XLOGLQJ

„

0LFURVRIW&HUWLILHG3URIHVVLRQDO 0&3

„

0LFURVRIW&HUWLILHG7UDLQHU 0&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 mcp@msprograms.com 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\/HYHO GHV $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Ă&#x;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 /DQJXDJH OLHJW

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äĂ&#x;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   FRQWDFWYDUFKDU  SKRQHFKDU  

FRQWDFWYDUFKDU  SKRQHFKDU  

*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äĂ&#x;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Ă&#x;t die Spalten cust_id, company, contact und phone ein. 86(1RUWKZLQG &5($7(7$%/(FXVWRPHU FXVWBLGLQWFRPSDQ\YDUFKDU  FRQWDFWYDUFKDU   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Ă&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;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äĂ&#x;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

Â&#x201E;

%HQXW]HQ6LH'0/$QZHLVXQJHQXP'DWHQ]XlQGHUQ RGHU,QIRUPDWLRQHQDE]XUXIHQ z 6(/(&7 z ,16(57 z 83'$7( z '(/(7(

Â&#x201E;

(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Ă&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;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

Â&#x201E;

SELECT

Â&#x201E;

INSERT

Â&#x201E;

UPDATE

Â&#x201E;

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

Â&#x201E;

(LQVWLHJ

*2 z

:HOFKHV7RRO6LHDXFK YHUZHQGHQ6LHPÂ VVHQ ZLVVHQDXIZHOFKH$UWXQG :HLVHGHU7UDQVDFW64/ &RGHYHUDUEHLWHWZHUGHQ VROO

z

Â&#x201E;

.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Ă&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;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: Â&#x201E;

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.

Â&#x201E;

Eine Transact-SQL-Anweisung kann nicht die gleiche Zeile belegen wie ein GO-Befehl, obwohl die Zeile Kommentare enthalten kann.

Â&#x201E;

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

Â&#x201E;

,QOLQH.RPPHQWDUH

Beispiel Beispiel 11

6(/(&7SURGXFWQDPH 6(/(&7SURGXFWQDPH  XQLWVLQVWRFN  XQLWVLQVWRFN XQLWVRQRUGHU  XQLWVRQRUGHU  %HUHFKQHWGDV,QYHQWDU %HUHFKQHWGDV,QYHQWDU VXSSOLHU,' VXSSOLHU,' )520SURGXFWV )520SURGXFWV *2 *2 Â&#x201E;

%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(/(&7XQLWSULFH XQLWSULFH  SURGXFWQDPH 6(/(&7XQLWSULFH XQLWSULFH  SURGXFWQDPH )520SURGXFWV )520SURGXFWV *2 *2

****************NUR FĂ&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;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Ă&#x;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Ă&#x;en häufig den Namen des Verfassers, das Datum der Erstellung und letzten Ă&#x201E;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(/(&7XQLWSULFH XQLWSULFH  SURGXFWQDPH )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/

Â&#x2039; %H]HLFKQHU ,QKDOWGLHVHU)ROLH

6WHOOHQ6LHGLH5HJHOQ]XP %HQHQQHQYRQ64/6HUYHU 2EMHNWHQ 5HJHOQIÂ U %H]HLFKQHU YRU

Â&#x201E;

6WDQGDUGPlÂ&#x2030;LJH%H]HLFKQHU z 'DVHUVWH=HLFKHQPXVVHLQDOSKDEHWLVFKHV=HLFKHQVHLQ z $QGHUH=HLFKHQN|QQHQDXV%XFKVWDEHQ=DKOHQRGHU 6\PEROHQEHVWHKHQ z %H]HLFKQHUGLHPLWHLQHP6\PEROEHJLQQHQZHUGHQLQ EHVRQGHUHQ)lOOHQYHUZHQGHW

Â&#x201E;

%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Â&#x2030;LJHU%H QHQQXQJVUHJHOQIÂ U2EMHNW EH]HLFKQHUEHUHLWVRZLHHLQH 0HWKRGH]XP9HUZHQGHQ YRQ7UHQQ]HLFKHQIÂ U %H]HLFKQHUGLHQLFKWGHP 6WDQGDUGHQWVSUHFKHQ

****************NUR FĂ&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;SSIG**************** 0HWKRGLVFKHU+LQZHLV

)Â KUHQ6LHYRUZLH 64/6HUYHU4XHU\$QDO\]HU GLH$QZHLVXQJVHOHPHQWH DXWRPDWLVFKIDUEFRGLHUWXP UHVHUYLHUWH:|UWHU=HLFKHQ IROJHQXVZDQ]X]HLJHQ

SQL Server stellt eine Reihe standardmäĂ&#x;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äĂ&#x;igen Zeichen fĂźr Bezeichner benennen, falls dies mĂśglich ist.

6WDQGDUGPlÂ&#x2030;LJH%H]HLFKQHU StandardmäĂ&#x;ige Bezeichner kĂśnnen zwischen einem und 128 Zeichen enthalten, darunter Buchstaben, Symbole (_, @, oder #) und Zahlen. StandardmäĂ&#x;ige Bezeichner dĂźrfen keine eingebetteten Leerzeichen enthalten. Zu den Regeln fĂźr das Verwenden von Bezeichnern zählen folgende: Â&#x201E;

Das erste Zeichen muss ein alphabetisches Zeichen sein (a-z oder A-Z).

Â&#x201E;

Nach dem ersten Zeichen kann ein Bezeichner Buchstaben, Zahlen oder eines der Symbole @, $, # oder _ einschlieĂ&#x;en.

Â&#x201E;

Bezeichnernamen, die mit einem Symbol beginnen, werden in besonderen Fällen verwendet: â&#x20AC;˘ Ein mit dem Symbol @ beginnender Bezeichner steht fĂźr eine lokale Variable oder einen lokalen Parameter. â&#x20AC;˘ Ein mit einem Nummernzeichen (#) beginnender Bezeichner steht fĂźr eine temporäre Tabelle oder Prozedur. â&#x20AC;˘ Ein mit einem doppelten Nummernzeichen (##) beginnender Bezeichner steht fĂźr ein globales temporäres Objekt. $QPHUNXQJ Namen fĂźr temporäre Objekte sollten einschlieĂ&#x;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: Â&#x201E;

Namen enthalten eingebettete Leerzeichen.

Â&#x201E;

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. Â&#x201E;

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

Â&#x201E;

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

Â&#x201E;

9HUZHQGHQ6LHNXU]H1DPHQ

Â&#x201E;

9HUZHQGHQ6LHQDFK0|JOLFKNHLWDXVVDJHNUlIWLJH1DPHQ

Â&#x201E;

9HUZHQGHQ6LHHLQHNODUHXQGHLQIDFKH%HQHQQXQJV NRQYHQWLRQ

Â&#x201E;

9HUZHQGHQ6LHHLQHQ%H]HLFKQHUGHUGHQ2EMHNWW\S NHQQ]HLFKQHW

Â&#x201E;

z

6LFKWHQ

z

*HVSHLFKHUWH3UR]HGXUHQ

9HUZHQGHQ6LHHLQGHXWLJH2EMHNW XQG%HQXW]HUQDPHQ z

VDOHV7DEHOOHXQGVDOHV5ROOH

****************NUR FĂ&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;SSIG**************** Beim Benennen von Datenbankobjekten sollten Sie Folgendes beachten: Â&#x201E;

Verwenden Sie kurze Namen.

Â&#x201E;

Verwenden Sie nach MÜglichkeit aussagekräftige Namen.

Â&#x201E;

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).

Â&#x201E;

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.

Â&#x201E;

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

Â&#x201E;

=DKOHQ

Â&#x201E;

64/9DULDQWHQ

(LQVWLHJ

Â&#x201E;

'DWXPVDQJDEHQ

Â&#x201E;

,PDJHXQG7H[W

Â&#x201E;

=HLFKHQ

Â&#x201E;

7DEHOOHQ

Â&#x201E;

%LQlUH'DWHQW\SHQ

Â&#x201E;

&XUVRU

Â&#x201E;

(LQGHXWLJH%H]HLFKQHU *OREDOO\8QLTXH ,GHQWLILHU *8,'

Â&#x201E;

%HQXW]HUGHILQLHUW

'DWHQW\SHQVFKUlQNHQGHQ :HUWHW\SHLQGHULQHLQHU 'DWHQEDQNJHVSHLFKHUW ZHUGHQNDQQ

****************NUR FĂ&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;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Ă&#x;t ganze Zahlen wie int, tinyint, smallint und bigint ein. Er schlieĂ&#x;t auch präzise Dezimalwerte wie numeric, decimal, money und smallmoney ein. Er schlieĂ&#x;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Ă&#x;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Ă&#x;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Ă&#x;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

Â&#x201E;

%HQXW]HUGHILQLHUWPLWHLQHU'(&/$5(#$QZHLVXQJ

(LQVWLHJ

Â&#x201E;

:HUWH]XZHLVXQJPLWHLQHU6(7 RGHU6(/(&7#$QZHLVXQJ

Â&#x201E;

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Ă&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;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 â&#x20AC;&#x17E;Transact-SQL-Referenzâ&#x20AC;&#x153;, â&#x20AC;&#x17E;Funktionenâ&#x20AC;&#x153; 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Ă&#x;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,'    URZ V DIIHFWHG 

 




8QWHUULFKWVHLQKHLW(LQIÂ KUXQJLQ7UDQVDFW64/





Â&#x2039; 6\VWHPIXQNWLRQHQ ,QKDOWGLHVHU)ROLH

*HEHQ6LHHLQHhEHUVLFKW Â EHUGLHLQ64/6HUYHU YHUIÂ JEDUHQ)XQNWLRQHQ

(LQVWLHJ

7UDQVDFW64/VWHOOW]DKO UHLFKH)XQNWLRQHQEHUHLWGLH 'DWHQ]XUÂ FNJHEHQ

Â&#x201E;

$JJUHJDWIXQNWLRQHQ

86(1RUWKZLQG 86(1RUWKZLQG 6(/(&7$9* XQLWSULFH $6$YJ3ULFH 6(/(&7$9* XQLWSULFH $6$YJ3ULFH )520SURGXFWV )520SURGXFWV *2 *2 Â&#x201E;

6NDODUIXQNWLRQHQ

86(1RUWKZLQG 86(1RUWKZLQG 6(/(&7'%B1$0( $6 GDWDEDVHŠ 6(/(&7'%B1$0( $6 GDWDEDVHŠ *2 *2 Â&#x201E;

5RZVHWIXQNWLRQHQ

6(/(&7 6(/(&7 )52023(148(5< )52023(148(5< 2UDFOH6YU 6(/(&7QDPHLG)520RZQHUWLWOHV

2UDFOH6YU 6(/(&7QDPHLG)520RZQHUWLWOHV

****************NUR FĂ&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;SSIG**************** Sie kĂśnnen Funktionen, einschlieĂ&#x;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 â&#x20AC;&#x17E;Transact-SQL-Referenzâ&#x20AC;&#x153;, â&#x20AC;&#x17E;Funktionenâ&#x20AC;&#x153; 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   URZ V DIIHFWHG 






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  URZ V DIIHFWHG 




8QWHUULFKWVHLQKHLW(LQIÂ KUXQJLQ7UDQVDFW64/





5RZVHWIXQNWLRQHQ KĂśnnen wie Tabellenverweise in einer Transact-SQLAnweisung verwendet werden. %HLVSLHO

0HWKRGLVFKHU+LQZHLV

'LHVHV%HLVSLHONDQQQXUPLW =XJULIIDXIHLQHQ2UDFOH 6HUYHURUGQXQJVJHPlÂ&#x2030; 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äĂ&#x; 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(57 YDUFKDU  *(7'$7(  $6 6(/(&7 $16, &219(57 YDUFKDU  *(7'$7(  $6 6W\OH 6W\OH 81,21 81,21 6(/(&7 -DSDQHVH &219(57 YDUFKDU  *(7'$7( 

6(/(&7 -DSDQHVH &219(57 YDUFKDU  *(7'$7( 

81,21 81,21 6(/(&7 (XURSHDQ &219(57 YDUFKDU  *(7'$7( 

6(/(&7 (XURSHDQ &219(57 YDUFKDU  *(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Ă&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;SSIG**************** 0HWKRGLVFKHU+LQZHLV

:HLVHQ6LHDXIGLH)RUPDW RSWLRQHQLP7KHPD Ă&#x201E;&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(57 YDUFKDU  *(7'$7(  $66W\OH 81,21 6(/(&7 -DSDQHVH &219(57 YDUFKDU  *(7'$7(   81,21 6(/(&7 (XURSHDQ &219(57 YDUFKDU  *(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    URZ V DIIHFWHG 

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(/(&7XVHUBQDPH DSSBQDPH  *2  GER

0664/4XHU\$QDO\]HU  URZ V DIIHFWHG 

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    URZ V DIIHFWHG 






8QWHUULFKWVHLQKHLW(LQIÂ KUXQJLQ7UDQVDFW64/

2SHUDWRUHQ ,QKDOWGLHVHU)ROLH

=HLJHQ6LHZLH2SHUDWRUHQ ]XPbQGHUQYRQ5HVXOWVHWV YHUZHQGHWZHUGHQN|QQHQ

Â&#x201E;

(LQVWLHJ

0LW2SHUDWRUHQN|QQHQ6LH %HUHFKQXQJHQGXUFKIÂ KUHQ RGHU:HUWHYHUJOHLFKHQ

Â&#x201E;

7\SHQYRQ2SHUDWRUHQ z

$ULWKPHWLVFK

z

9HUJOHLFK

z

9HUNHWWXQJYRQ=HLFKHQIROJHQ

z

/RJLVFK

5DQJIROJHQHEHQHQYRQ2SHUDWRUHQ

****************NUR FĂ&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;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)}â&#x20AC;Ś]

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Ă&#x;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ĂśĂ&#x;er als

<

Kleiner als

>=

GrĂśĂ&#x;er als oder gleich

<=

Kleiner als oder gleich

<>

Ungleich

9HUNHWWXQJYRQ=HLFKHQIROJHQ Der Operator fĂźr die Verkettung von Zeichenfolgen (+) verkettet Zeichenfolgenwerte. Alle Ăźbrigen Ă&#x201E;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äĂ&#x; 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

Â&#x201E;

.RPELQDWLRQDXV6\PEROHQXQG2SHUDWRUHQ

(LQVWLHJ

Â&#x201E;

$XVZHUWXQJ]XHLQHPHLQ]HOQHQ6NDODUZHUW

Â&#x201E;

'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Ă&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;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Ă&#x;end werden die Ergebnisse gefiltert, sodass nur die Zeilen zurĂźckgegeben werden, die Bestellungen mit Produkten enthalten, deren Wert grĂśĂ&#x;er als $10.000 ist. 86(1RUWKZLQG 6(/(&72UGHU,'3URGXFW,'  8QLW3ULFH 4XDQWLW\ DV([WHQGHG$PRXQW )520>2UGHU'HWDLOV@ :+(5( 8QLW3ULFH 4XDQWLW\ ! *2  2UGHU,' 3URGXFW,' ([WHQGHG$PRXQW               URZ V DIIHFWHG 

      




8QWHUULFKWVHLQKHLW(LQIÂ KUXQJLQ7UDQVDFW64/





6SUDFKHOHPHQWH]XU$EODXIVWHXHUXQJ ,QKDOWGLHVHU)ROLH

6WHOOHQ6LHGLH6SUDFK HOHPHQWHYRQ7UDQVDFW64/ YRUGLHGLH9HUDUEHLWXQJ YRQ$QZHLVXQJHQVWHXHUQ

Beispiel Beispiel 22

Â&#x201E;

(LQVWLHJ

7UDQVDFW64/XQWHUVWÂ W]W 6SUDFKHOHPHQWHGLHGHQ $EODXIGHU/RJLNLQ $QZHLVXQJHQVWHXHUQ Â&#x201E;

$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Ă&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;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Â&#x17E;(1'%O|FNH Diese Elemente schlieĂ&#x;en eine Reihe von Transact-SQL-Anweisungen ein, sodass sie als Einheit behandelt werden. ,)Â&#x17E;(/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 ,)(;,676 6(/(&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} [,â&#x20AC;Ś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

  URZ V DIIHFWHG   1XPEHU

(9(1    7\SH

  URZ V DIIHFWHG   1XPEHU

2''    7\SH

  URZ V DIIHFWHG   1XPEHU

(9(1    7\SH

  URZ V DIIHFWHG   1XPEHU

2''    7\SH

  URZ V DIIHFWHG  

(9(1   










8QWHUULFKWVHLQKHLW(LQIÂ KUXQJLQ7UDQVDFW64/

5HVHUYLHUWH6FKOÂ VVHOZ|UWHU ,QKDOWGLHVHU)ROLH

0DFKHQ6LHGLH.XUVWHLO QHKPHUPLWGHP.RQ]HSW UHVHUYLHUWHU6FKOÂ VVHOZ|UWHU YHUWUDXW

Â&#x201E;

(LQVWLHJ

64/6HUYHUUHVHUYLHUW EHVWLPPWH6FKOÂ VVHOZ|UWHU IÂ UGLH9HUZHQGXQJGXUFK GDV6\VWHPYHUPHLGHQ6LH HVGLHVH6FKOÂ VVHOZ|UWHU IÂ UGLH1DPHQYRQ %H]HLFKQHUQ]XYHUZHQGHQ

Â&#x201E;

%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Ă&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;SSIG**************** 0HWKRGLVFKHU+LQZHLV

=HLJHQ6LHGLHHUZHLWHUH /LVWHYRQ6FKOÂ VVHOZ|UWHUQ DQGLHLQGHU64/6HUYHU 2QOLQHGRNXPHQWDWLRQ]X ILQGHQLVW

SQL Server reserviert bestimmte SchlĂźsselwĂśrter fĂźr die ausschlieĂ&#x;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Ă&#x;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Ă&#x;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Ă&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;SSIG**************** (UOlXWHUQ6LHGLH/HUQ]LHOH GHUhEXQJVHLQKHLW

/HUQ]LHOH Am Ende dieser Ă&#x153;bungseinheit werden Sie in der Lage sein, die folgenden Aufgaben auszufĂźhren: â&#x20AC;˘ 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 â&#x20AC;&#x17E;AusfĂźhren einer Abfrageâ&#x20AC;&#x153;. Daneben sind die folgenden Informationsquellen verfĂźgbar: Â&#x201E;

Das Northwind-Datenbankschema.

Â&#x201E;

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

Â&#x201E;

'LH3URJUDPPLHUVSUDFKH7UDQVDFW64/

Â&#x201E;

7\SHQYRQ7UDQVDFW64/$QZHLVXQJHQ

Â&#x201E;

7UDQVDFW64/6\QWD[HOHPHQWH

****************NUR FĂ&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;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

Â&#x201E;

64/4XHU\$QDO\]HU

Â&#x201E;

9HUZHQGHQGHV2EMHNWNDWDORJVLQ64/4XHU\ $QDO\]HU

Â&#x201E;

9HUZHQGHQYRQ9RUODJHQLQ64/4XHU\ $QDO\]HU

Â&#x201E;

9HUZHQGHQGHV'LHQVWSURJUDPPV ¾RVTO§

Â&#x201E;

$XVIÂ KUHQYRQ 7UDQVDFW64/$QZHLVXQJHQ

****************NUR FĂ&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;SSIG**************** MicrosoftÂŽ SQL Serverâ&#x201E;˘ 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: Â&#x201E;

Beschreiben der Grundfunktionen von SQL Query Analyzer.

Â&#x201E;

Beschreiben, wie der Objektkatalog in SQL Query Analyzer verwendet wird.

Â&#x201E;

Beschreiben, wie die Vorlagen in SQL Query Analyzer verwendet werden.

Â&#x201E;

Beschreiben, wie das Befehlszeilendienstprogramm osql verwendet wird.

Â&#x201E;

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

Â&#x201E;

(GLWRUIÂ UGLHIUHLH7H[WHLQJDEH

Â&#x201E;

)DUELJH.HQQ]HLFKQXQJ YRQ7UDQVDFW64/6\QWD[

Â&#x201E;

0HKUHUH $EIUDJHIHQVWHU PLW5DVWHU RGHU7H[WDXVJDEH

Â&#x201E;

$XVIÂ KUXQJYRQ7HLOVNULSWV

Â&#x201E;

$EIUDJHDXVIÂ KUXQJVLQIRUPDWLRQHQ

****************NUR FĂ&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;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, Ă&#x201E;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Ă&#x;t ein: Â&#x201E;

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Ă&#x;buchstaben oder Kleinbuchstaben.

Â&#x201E;

Farbige Kennzeichnung. Wenn Sie eine Abfrage erstellen, markiert SQL Query Analyzer SchlĂźsselwĂśrter, Zeichenfolgen und andere Sprachelemente mit von Ihnen festgelegten Farbeinstellungen.

Â&#x201E;

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.

Â&#x201E;

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.

Â&#x201E;

AbfrageausfĂźhrungsinformationen. Die AbfrageausfĂźhrungsinformationen schlieĂ&#x;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

Â&#x201E;

(LQVWLHJ

9RUODJHQ z

64/4XHU\$QDO\]HU VFKOLHÂ&#x2030;W9RUODJHQHLQGLH 6LHDOV$XVJDQJVSXQNWEHLP (UVWHOOHQYRQ2EMHNWHQLQ HLQHU'DWHQEDQNYHUZHQGHQ N|QQHQ

z

Â&#x201E;

6LQG$XVJDQJVSXQNWHEHLP(UVWHOOHQYRQ2EMHNWHQLQ HLQHU'DWHQEDQN (QWKDOWHQ3DUDPHWHUGLHGDV$QSDVVHQYRQ6NULSWV XQWHUVWÂ W]HQ

)RUPDWIÂ U GLH'HILQLWLRQHQ GHU 9RUODJHQSDUDPHWHU 3DUDPHWHUQDPH'DWHQW\S:HUW!

****************NUR FĂ&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;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Ă&#x;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

Â&#x201E;

6WDUWHQGHV %HIHKOV]HLOHQGLHQVWSURJUDPPV¾RVTO§

(LQVWLHJ

Â&#x201E;

9HUZHQGHQGHVLQWHUDNWLYHQ0RGXV

Â&#x201E;

9HUZHQGHQGHV6NULSWDXVIÂ KUXQJVPRGXV

Â&#x201E;

9HUZHQGHQYRQHUZHLWHUWHQ RVTO6NULSWEHIHKOHQ

'DV'LHQVWSURJUDPPRVTO LVWHLQ%HIHKOV]HLOHQGLHQVW SURJUDPP]XP$EIUDJHQ YRQ64/6HUYHU

****************NUR FĂ&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;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Ă&#x;-/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Ă&#x;und Kleinschreibung unterschieden.

0HWKRGLVFKHU+LQZHLV

:HLVHQ6LHGDUDXIKLQGDVV $UJXPHQWHPLWHLQHP *HGDQNHQVWULFK  RGHU HLQHP6FKUlJVWULFK   EHJLQQHQN|QQHQ  9HUZHLVHQ6LHGLH.XUVWHLO QHKPHUIÂ UZHLWHUH,QIRUPD WLRQHQDXIGLH64/6HUYHU 2QOLQHGRNXPHQWDWLRQ6XFK EHJULIIĂ&#x201E;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Ă&#x;- 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Ă&#x;- 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ĂśĂ&#x;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

Â&#x201E;

9HUZHQGXQJYRQ(;(&87($QZHLVXQJPLW=HLFKHQ IROJHQOLWHUDOHQ XQG9DULDEOHQ

(LQVWLHJ

Â&#x201E;

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Ă&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;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: Â&#x201E;

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.

Â&#x201E;

Die EXECUTE-Anweisung kann ein Zeichenfolgenliteral, eine lokale Variable oder eine Verkettung von beidem enthalten.

Â&#x201E;

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.

Â&#x201E;

Funktionen kĂśnnen nicht verwendet werden, um die in der EXECUTEAnweisung auszufĂźhrende Zeichenfolge zu erstellen.

Â&#x201E;

Alle gĂźltigen Transact-SQL-Anweisungen kĂśnnen dynamisch erstellt werden, dies gilt auch fĂźr Funktionen.




%HLVSLHO

8QWHUULFKWVHLQKHLW9HUZHQGHQYRQ7UDQVDFW64/$EIUDJHWRROV



Â&#x201E;

EXECUTE-Anweisungen kĂśnnen verschachtelt werden.

Â&#x201E;

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

Â&#x201E;

(LQHRGHUPHKUHUH 7UDQVDFW64/$QZHLVXQJHQZHUGHQ ]XVDPPHQÂ EHUJHEHQ

Â&#x201E;

'HILQLHUHQHLQHV%DWFKHVPLW+LOIHGHU*2$QZHLVXQJ

Â&#x201E;

%DWFKYHUDUEHLWXQJEHL64/ 6HUYHU

Â&#x201E;

$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Ă&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;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Ă&#x;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

Â&#x201E;

CREATE PROCEDURE

Â&#x201E;

CREATE VIEW

Â&#x201E;

CREATE TRIGGER

Â&#x201E;

CREATE RULE AS

Â&#x201E;

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

Â&#x201E;

(LQ6NULSW LVWHLQHRGHUPHKUHUH 7UDQVDFW64/$QZHLVXQJ GLHDOV 'DWHLPLWGHU'DWHLQDPHQHUZHLWHUXQJ64/ JHVSHLFKHUWZLUG

Â&#x201E;

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Ă&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;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Ă&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;SSIG**************** (UOlXWHUQ6LHGLH/HUQ]LHOH GHUhEXQJVHLQKHLW

/HUQ]LHOH Am Ende dieser Ă&#x153;bungseinheit werden Sie in der Lage sein, die folgenden Aufgaben auszufĂźhren: Â&#x201E;

Schreiben grundlegender SELECT-Anweisungen, die sortierte und eingeschränkte Resultsets zurßckgeben.

Â&#x201E;

Ă&#x201E;ndern und AusfĂźhren eines Skripts mit Hilfe des Dienstprogramms osql.

9RUDXVVHW]XQJHQ Um diese Ă&#x153;bungseinheit zu bearbeiten, benĂśtigen Sie Folgendes: Â&#x201E;

Die Skriptdateien fĂźr diese Ă&#x153;bungseinheit, die sich in C:\Moc\2316B\Labfiles\L02 befinden.

Â&#x201E;

Die Antwortdateien fĂźr diese Ă&#x153;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 â&#x20AC;&#x17E;AusfĂźhren einer Abfrageâ&#x20AC;&#x153;. Daneben sind die folgenden Informationsquellen verfĂźgbar: Â&#x201E;

Das Northwind-Datenbankschema.

Â&#x201E;

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 Ă&#x153;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 Ă&#x153;bung.

Ă&#x2021; 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. Ă&#x2013;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)LUPHQQDPHQ FXVWRPHUQDPH  ]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

Â&#x201E;

64/4XHU\ $QDO\]HU

Â&#x201E;

9HUZHQGHQGHV2EMHNWNDWDORJVLQ64/4XHU\ $QDO\]HU

Â&#x201E;

9HUZHQGHQYRQ9RUODJHQLQ64/4XHU\ $QDO\]HU

Â&#x201E;

9HUZHQGHQGHV'LHQVWSURJUDPPV ¾RVTO§

Â&#x201E;

$XVIÂ KUHQYRQ 7UDQVDFW64/$QZHLVXQJHQ

****************NUR FĂ&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;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 â&#x20AC;&#x17E;osqlâ&#x20AC;&#x153; ausgefĂźhrt, wobei das Ergebnis mit Hilfe der Befehlszeilenoption â&#x20AC;&#x17E;-o dateiname.txtâ&#x20AC;&#x153; 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 Ă&#x153;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

Ă&#x153;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

Â&#x201E;

$EUXIHQYRQ'DWHQPLW+LOIHGHU6(/(&7$QZHLVXQJ

Â&#x201E;

)LOWHUQYRQ'DWHQ

Â&#x201E;

)RUPDWLHUHQYRQ 5HVXOWVHWV

Â&#x201E;

9HUDUEHLWHQYRQ$EIUDJHQ

Â&#x201E;

$VSHNWHGHU6\VWHPOHLVWXQJ

****************NUR FĂ&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;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 Ă&#x201E;ndern des Resultsetformats einschlieĂ&#x;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: Â&#x201E;

Abfragen von Daten aus Tabellen mit Hilfe der SELECT-Anweisung.

Â&#x201E;

Filtern von Daten mit Hilfe unterschiedlicher Suchbedingungen in der WHERE-Klausel.

Â&#x201E;

Formatieren von Resultsets.

Â&#x201E;

Beschreiben der Verarbeitung von Abfragen.

Â&#x201E;

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

Â&#x201E;

'LH6(/(&7/LVWHJLEWGLH6SDOWHQDQ

Â&#x201E;

'LH:+(5(.ODXVHOJLEWGLH%HGLQJXQJDQGLHGLH $EIUDJHHLQVFKUlQNW

Â&#x201E;

'LH)520.ODXVHOJLEWGLH7DEHOOHDQ

Teilsyntax 6(/(&7>$//_',67,1&7@VHOHFWBOLVW! 6(/(&7>$//_',67,1&7@VHOHFWBOLVW! )520^WDEOHBVRXUFH!`>Â&#x17E;Q@ )520^WDEOHBVRXUFH!`>Â&#x17E;Q@ :+(5(VHDUFKBFRQGLWLRQ! :+(5(VHDUFKBFRQGLWLRQ!

****************NUR FĂ&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;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. Â&#x201E;

Die SELECT-Liste gibt die Spalten an, die zurĂźckgegeben werden.

Â&#x201E;

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.

Â&#x201E;

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Ă&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;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: Â&#x201E;

Die Spalten werden in der Reihenfolge abgerufen, in der sie in der Auswahlliste angegeben sind.

Â&#x201E;

Trennen Sie die Spaltennamen durch Kommas, abgesehen vom letzten Spaltennamen.

Â&#x201E;

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  URZ V DIIHFWHG 

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Ă&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;SSIG**************** 0HWKRGLVFKHU+LQZHLV

9HUJOHLFKHQ6LHGDV5HVXOW VHWDXIGHUYRUKHUJHKHQGHQ )ROLHPLWGHPDXIGLHVHU )ROLH  :HLVHQ6LHGDUDXIKLQGDVV PLW+LOIHGHU:+(5(.ODX VHOGLH$Q]DKOGHU]XUÂ FN JHJHEHQHQ=HLOHQHLQJH VFKUlQNWZHUGHQNDQQ 'LHKLHUYHUZHQGHWH6\QWD[ ILQGHQ6LHQLFKWLP$EVFKQLWW Ă&#x201E;6(/(&7$QZHLVXQJÂł VRQGHUQLP$EVFKQLWW Ă&#x201E;6XFKEHGLQJXQJ 764/ Âł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

Â&#x201E;

Setzen Sie alle Daten vom Typ char, nchar, varchar, nvarchar, text, datetime und smalldatetime in einfache AnfĂźhrungszeichen.

Â&#x201E;

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

URZ V DIIHFWHG 

6WHYHQ

6DOHV0DQDJHU








8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ

Â&#x2039; )LOWHUQYRQ'DWHQ ,QKDOWGLHVHU)ROLH

%HVFKUHLEHQ6LHGLHYHU VFKLHGHQHQ$UWHQYRQ6XFK EHGLQJXQJHQGLHLQGHU :+(5(.ODXVHOYHUZHQGHW ZHUGHQN|QQHQ

Â&#x201E;

9HUZHQGHQYRQ9HUJOHLFKVRSHUDWRUHQ

Â&#x201E;

9HUZHQGHQYRQ =HLFKHQIROJHYHUJOHLFKHQ

(LQVWLHJ

Â&#x201E;

9HUZHQGHQ YRQ ORJLVFKHQ2SHUDWRUHQ

Â&#x201E;

$EUXIHQHLQHV :HUWHEHUHLFKV

Â&#x201E;

9HUZHQGHQHLQHU :HUWHOLVWH DOV6XFKNULWHULXP

Â&#x201E;

$EUXIHQYRQXQEHNDQQWHQ:HUWHQ

6LHZROOHQGLH(UJHEQLVVH GLHHLQH$EIUDJH]XUÂ FNJLEW HLQVFKUlQNHQ

****************NUR FĂ&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;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Ă&#x;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|Â&#x2030;HUDOV ! .OHLQHUDOV  XQG *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Ă&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;SSIG**************** Verwenden Sie Vergleichsoperatoren, um die Werte in einer Tabelle mit einem vorgegebenen Wert oder Ausdruck zu vergleichen. Sie kĂśnnen Vergleichsoperatoren auch zum Ă&#x153;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ĂśĂ&#x;er als Kleiner als GrĂśĂ&#x;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  URZ V DIIHFWHG  

%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

         URZ V DIIHFWHG 

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Ă&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;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: Â&#x201E;

Alle Zeichen in der Musterzeichenfolge werden ausgewertet, einschlieĂ&#x;lich der fĂźhrenden und der nachstehenden Leerzeichen.

Â&#x201E;

LIKE kann nur fĂźr Daten des Typs char, nchar, varchar, nvarchar, binary, varbinary, smalldatetime oder datetime verwendet werden. AuĂ&#x;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  URZ V DIIHFWHG 




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Ă&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;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: Â&#x201E;

Verwenden Sie den Operator AND zum Abrufen von Zeilen, die alle Suchkriterien erfĂźllen.

Â&#x201E;

Verwenden Sie den Operator OR zum Abrufen von Zeilen, die eines der Suchkriterien erfĂźllen.

Â&#x201E;

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: Â&#x201E;

Gruppieren von AusdrĂźcken.

Â&#x201E;

Ă&#x201E;ndern der Reihenfolge der Auswertung.

Â&#x201E;

Ă&#x153;bersichtlicheres Gestalten von AusdrĂźcken.

5HLKHQIROJHGHU6XFKEHGLQJXQJHQ Beachten Sie bei der Verwendung von mehreren logischen Operatoren in einer Anweisung die folgenden Festlegungen: Â&#x201E;

Microsoft SQL Server 2000 fßhrt zunächst den Operator NOT, dann den Operator AND und zum Schluss den Operator OR aus.

Â&#x201E;

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  URZ V DIIHFWHG 

%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

 25 SURGXFWLG $1'XQLWSULFH!  *2  SURGXFWLG SURGXFWQDPH VXSSOLHULG XQLWSULFH  7RXUWLqUH  7DUWHDXVXFUH  7XQQEU|G  7HDWLPH&KRFRODWH%LVFXLWV  7RIX  7KÂ ULQJHU5RVWEUDWZXUVW   URZ V DIIHFWHG  

      

       




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â&#x20AC;&#x2122;s Rodneyâ&#x20AC;&#x2122;sScones Scones â&#x20AC;Ś â&#x20AC;Ś

10 10 â&#x20AC;Ś â&#x20AC;Ś

****************NUR FĂ&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;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: Â&#x201E;

SQL Server schlieĂ&#x;t die angegebenen Grenzwerte in das Resultset ein.

Â&#x201E;

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).

Â&#x201E;

Verwenden Sie die Suchbedingung NOT BETWEEN zum Abrufen von Zeilen, die sich auĂ&#x;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Ă&#x;t. 86(1RUWKZLQG 6(/(&7SURGXFWQDPHXQLWSULFH )520SURGXFWV :+(5(XQLWSULFH%(7:((1$1' *2  SURGXFWQDPH XQLWSULFH &KDL &KDQJ $QLVHHG6\UXS *HQHQ6KRX\X 3DYORYD 6LU5RGQH\ V6FRQHV    URZ V DIIHFWHG 

%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Ă&#x;t. 86(1RUWKZLQG 6(/(&7SURGXFWQDPHXQLWSULFH )520SURGXFWV :+(5( XQLWSULFH!  $1' XQLWSULFH  *2  SURGXFWQDPH

XQLWSULFH

&KDL &KDQJ *HQHQ6KRX\X 3DYORYD    URZ V DIIHFWHG 

       




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â&#x20AC;&#x2122;s Mayumiâ&#x20AC;&#x2122;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Ă&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;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: Â&#x201E;

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.

Â&#x201E;

SchlieĂ&#x;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.

Â&#x201E;

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  URZ V DIIHFWHG 

-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  URZ V DIIHFWHG 

-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â&#x20AC;&#x2DC;Las â&#x20AC;&#x2DC;LasCabrasâ&#x20AC;&#x2122; Cabrasâ&#x20AC;&#x2122; â&#x20AC;Ś â&#x20AC;Ś

NULL NULL â&#x20AC;Ś â&#x20AC;Ś

****************NUR FĂ&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;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: Â&#x201E;

Vergleichsoperationen mit NULL-Werten sind nicht mĂśglich, weil sie nicht aus vergleichbaren Werten bestehen.

Â&#x201E;

Sie definieren in der CREATE TABLE-Anweisung, ob Spalten NULLWerte enthalten kĂśnnen.

Â&#x201E;

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     URZ V DIIHFWHG 

18// 18// 18// 18//    




8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ





Â&#x2039; )RUPDWLHUHQYRQ5HVXOWVHWV ,QKDOWGLHVHU)ROLH

=HLJHQ6LHZLH5HVXOWVHWV IRUPDWLHUWZHUGHQ

(LQVWLHJ

6LHN|QQHQ,KUH5HVXOWVHWV Â EHUVLFKWOLFKHUJHVWDOWHQ LQGHP6LH'DWHQVRUWLHUHQ GRSSHOWH=HLOHQO|VFKHQ 6SDOWHQQDPHQlQGHUQRGHU /LWHUDOHYHUZHQGHQ

Â&#x201E;

6RUWLHUHQGHU'DWHQ

Â&#x201E;

'RSSHOWH=HLOHQO|VFKHQ

Â&#x201E;

bQGHUQGHU6SDOWHQQDPHQ

Â&#x201E;

9HUZHQGHQYRQ /LWHUDOHQ

****************NUR FĂ&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;SSIG**************** Sie kĂśnnen die Ă&#x153;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 â&#x20AC;Ś â&#x20AC;Ś 63 63 88 61 61 â&#x20AC;Ś â&#x20AC;Ś

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 â&#x20AC;Ś â&#x20AC;Ś â&#x20AC;Ś â&#x20AC;Ś â&#x20AC;Ś â&#x20AC;Ś 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 â&#x20AC;Ś â&#x20AC;Ś â&#x20AC;Ś â&#x20AC;Ś â&#x20AC;Ś â&#x20AC;Ś

****************NUR FĂ&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;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: Â&#x201E;

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.

Â&#x201E;

SQL Server Ăźbergibt nur dann ein sortiertes Resultset, wenn die Sortierreihenfolge mit einer ORDER BY-Klausel festgelegt wurde.

Â&#x201E;

SQL Server sortiert standardmäĂ&#x;ig in aufsteigender Reihenfolge.

Â&#x201E;

Spalten, die in die ORDER BY-Klausel eingeschlossen sind, mĂźssen nicht in der Auswahlliste enthalten sein.

Â&#x201E;

Sie kĂśnnen nach Spaltennamen, berechneten Werten oder AusdrĂźcken sortieren.

Â&#x201E;

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.

Â&#x201E;

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äĂ&#x;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     URZ V DIIHFWHG 

%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Ă&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;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

Â&#x201E;

Ist die DISTINCT-Klausel nicht angegeben, werden im Resultset alle Zeilen zurĂźckgegeben, die die in der SELECT-Anweisung festgelegte Suchbedingung erfĂźllen.

Â&#x201E;

Die Kombination der Werte in der Auswahlliste bestimmt die Aussagekraft des Resultsets.

Â&#x201E;

Zeilen mit einer einmaligen Kombination von Werten werden abgerufen und im Resultset zurĂźckgegeben.

Â&#x201E;

Ist keine ORDER BY-Klausel angegeben, wird das Resultset von der DISTINCT-Klausel unsortiert zurĂźckgegeben.

Â&#x201E;

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$  URZ V DIIHFWHG 

%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    URZ V DIIHFWHG 




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Ă&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;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 Ă&#x201E;ndern von Spaltennamen die folgenden Festlegungen und Richtlinien: Â&#x201E;

StandardmäĂ&#x;ig werden im Resultset die Spaltennamen angezeigt, die beim Erstellen der Tabelle in der CREATE TABLE-Anweisung angegeben wurden.

Â&#x201E;

SchlieĂ&#x;en Sie Spaltennamen, die Leerzeichen enthalten oder nicht den Benennungskonventionen fĂźr SQL Server-Objekte entsprechen, in einfache AnfĂźhrungszeichen ein.

Â&#x201E;

Sie kĂśnnen Spaltenaliasnamen fĂźr berechnete Spalten, die Funktionen oder Zeichenfolgeliterale enthalten, erstellen.

Â&#x201E;

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  URZ V DIIHFWHG 

'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Ă&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;SSIG**************** Literale sind Buchstaben, Zahlen oder Symbole, die in einem Resultset als besondere Werte verwendet werden. Sie kĂśnnen Literale in die Auswahlliste einschlieĂ&#x;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   URZ V DIIHFWHG 

          

,GHQWLILFDWLRQQXPEHU ,GHQWLILFDWLRQQXPEHU ,GHQWLILFDWLRQQXPEHU ,GHQWLILFDWLRQQXPEHU ,GHQWLILFDWLRQQXPEHU ,GHQWLILFDWLRQQXPEHU ,GHQWLILFDWLRQQXPEHU ,GHQWLILFDWLRQQXPEHU ,GHQWLILFDWLRQQXPEHU  






8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ

Â&#x2039; 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Ă&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;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

Ă&#x153;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

Ă&#x153;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

Â&#x201E;

$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 Â&#x201E;

$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Ă&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;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 ZLUGĂ&#x201E;ÂłDOV:lKUXQJV GDWHQW\SĂ&#x201E;ÂłGDJHJHQ 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

Â&#x201E;

1276XFKEHGLQJXQJHQ N|QQHQGDV$EUXIHQYRQ'DWHQ YHU]|JHUQ

Â&#x201E;

6XFKEHGLQJXQJ/,.( YHU]|JHUWGDV$EUXIHQYRQ'DWHQ

Â&#x201E;

*HQDXH hEHUHLQVWLPPXQJHQRGHU%HUHLFKHN|QQHQGDV $EUXIHQYRQ'DWHQEHVFKOHXQLJHQ

Â&#x201E;

25'(5%<.ODXVHONDQQ GDV$EUXIHQYRQ'DWHQ YHU]|JHUQ

****************NUR FĂ&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;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. Â&#x201E;

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.

Â&#x201E;

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.

Â&#x201E;

Verwenden Sie, wenn mĂśglich, genaue Ă&#x153;bereinstimmungen oder Bereiche als Suchbedingungen. Auch hier gilt, dass präzise formulierte Abfragen schneller ausgefĂźhrt werden.

Â&#x201E;

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Ă&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;SSIG**************** Die im Folgenden aufgefĂźhrten empfohlenen Methoden sollen Sie bei der AusfĂźhrung einfacher Abfragen unterstĂźtzen: Â&#x201E;

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.

Â&#x201E;

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.

Â&#x201E;

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

â&#x20AC;&#x153;MusterĂźbereinstimmungâ&#x20AC;?

Sortieren der Resultsets

â&#x20AC;&#x153;Sortierreihenfolgeâ&#x20AC;?




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 Ă&#x153;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 Ă&#x153;bung.

Ă&#x2021; 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. Ă&#x2013;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&RQGXFW 3HUVHYHUDQFH 6RQJVRID6DYR\DUG     URZ V DIIHFWHG 

        

Ă&#x2021; 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. â&#x20AC;˘ 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 URZ V DIIHFWHG 

Ă&#x2021; 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. â&#x20AC;˘ 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

              URZ V DIIHFWHG 

Ă&#x2021; 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. â&#x20AC;˘ 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  URZ V DIIHFWHG 

      

Ă&#x2021; 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

â&#x20AC;˘ 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 â&#x20AC;&#x17E;Adventuresâ&#x20AC;&#x153; 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

   URZ V DIIHFWHG 

7KH$GYHQWXUHVRI5RELQ+RRG $GYHQWXUHVRI+XFNOHEHUU\)LQQ  

Ă&#x2021; 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. â&#x20AC;˘ 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

       URZ V DIIHFWHG 

      

18// 18// 18// 18//    




8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ





hEXQJ %HDUEHLWHQGHU5HVXOWVHWV In dieser Ă&#x153;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Ă&#x;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 Ă&#x153;bung.

Ă&#x2021; 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. â&#x20AC;˘ 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    URZ V DIIHFWHG 

87 *$ )/ '&    

Ă&#x2021; 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. â&#x20AC;˘ 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    URZ V DIIHFWHG 

Ă&#x2021; So berechnen Sie Daten, geben Sie berechnete Werte zurĂźck und verwenden Sie einen Spaltenalias

In dieser Ă&#x153;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Ă&#x;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

          URZ V DIIHFWHG 

ILQHBDVVHVVHG

GRXEOHILQH

    

    




8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ





Ă&#x2021; 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 â&#x20AC;&#x17E;Andersonâ&#x20AC;&#x153; generiert. 2. Verwenden Sie den email_name-Spaltenalias. 3. Ă&#x201E;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:(5 ILUVWQDPHPLGGOHLQLWLDO 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    URZ V DIIHFWHG 






8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ

Ă&#x2021; 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: â&#x20AC;˘ The title is: Zeichenfolgekonstante â&#x20AC;˘ title.title-Spalte â&#x20AC;˘ title number-Zeichenfolgekonstante â&#x20AC;˘ 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(57 FKDU  WLWOHBQR  )520WLWOH *2

(UJHEQLV

Ihr Resultset sollte etwa aussehen wie der folgende Teil eines Resultsets. 7KHWLWOHLV/DVWRIWKH0RKLFDQVWLWOHQXPEHU 7KHWLWOHLV7KH9LOODJH:DWFK7RZHUWLWOHQXPEHU 7KHWLWOHLV6HOI+HOS&RQGXFW 3HUVHYHUDQFHWLWOHQXPEHU 7KHWLWOHLV6RQJVRID6DYR\DUGWLWOHQXPEHU 7KHWLWOHLV)DOORIWKH+RXVHRI8VKHUWLWOHQXPEHU    URZ V DIIHFWHG 




8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ





hEXQJ 9HUZHQGHQYRQ6\VWHPIXQNWLRQHQ In dieser Ă&#x153;bung sammeln Sie Systeminformationen mit Hilfe von Systemfunktionen. Das Verzeichnis C:\Moc\2316B\Labfiles\L03\Answers enthält fertige Skripts fĂźr diese Ă&#x153;bung.

Ă&#x2021; 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.

Ă&#x2021; 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

Â&#x201E;

$EUXIHQYRQ'DWHQPLW+LOIHGHU6(/(&7$QZHLVXQJ

Â&#x201E;

)LOWHUQYRQ'DWHQ

Â&#x201E;

)RUPDWLHUHQYRQ5HVXOWVHWV

Â&#x201E;

9HUDUEHLWHQYRQ$EIUDJHQ

Â&#x201E;

$VSHNWHGHU6\VWHPOHLVWXQJ

****************NUR FĂ&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;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// IBQDPHYDUFKDU  12718// OBQDPHYDUFKDU  12718// VWUHHWYDUFKDU  18// FLW\YDUFKDU  18// VWDWHYDUFKDU  18// SRVWDOBFRGHYDUFKDU  18// FRBSD\PRQH\12718//&21675$,17SK\VBFRBSD\'()$8/7  

 

1. Wie rufen Sie Informationen Ăźber Ă&#x201E;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 Â&#x17E;

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: â&#x20AC;&#x2DC;Amt_Dueâ&#x20AC;&#x2122; = (co_pay + 5)


Inhalt

Unterrichtseinheit 4: Gruppieren und Zusammenfassen von Daten

Ă&#x153;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

Ă&#x153;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

Â&#x201E;

$XIOLVWHQGHU 723Q:HUWH

Â&#x201E;

9HUZHQGHQYRQ$JJUHJDWIXQNWLRQHQ

Â&#x201E;

*UXQGODJHQGHU*5283%<.ODXVHO

Â&#x201E;

*HQHULHUHQYRQ$JJUHJDWZHUWHQLQ5HVXOWVHWV

Â&#x201E;

9HUZHQGHQGHU&20387( XQG&20387( %<.ODXVHOQ

****************NUR FĂ&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;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Ă&#x;en das Verwenden der GROUP BY- und HAVINGKlauseln zum Zusammenfassen und Gruppieren von Daten ein. AuĂ&#x;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Ă&#x;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: Â&#x201E;

Verwenden des TOP n-SchlĂźsselwortes, um eine Liste der angegebenen oberen Werte in einer Tabelle abzufragen.

Â&#x201E;

Generieren eines einzelnen zusammenfassenden Wertes mit Hilfe von Aggregatfunktionen.

Â&#x201E;

Organisieren von Zusammenfassungsdaten fĂźr eine Spalte mit Hilfe von Aggregatfunktionen zusammen mit den GROUP BY- und HAVINGKlauseln.

Â&#x201E;

Generieren von Zusammenfassungsdaten fĂźr eine Tabelle mit Hilfe von Aggregatfunktionen zusammen mit der GROUP BY-Klausel und dem ROLLUP- oder CUBE-Operator.

Â&#x201E;

Generieren von Berichten mit Gruppenwechseln mit Hilfe der COMPUTEund der COMPUTE BY-Klauseln.






8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ

$XIOLVWHQGHU723Q:HUWH ,QKDOWGLHVHU)ROLH

Â&#x201E;

%HVFKUHLEHQ6LHZLHGLH REHUHQQ]XVDPPHQIDVVHQ GHQ:HUWHDXIJHOLVWHW ZHUGHQ

Â&#x201E;

Â&#x201E;

(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Ă&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;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: Â&#x201E;

Geben Sie den Bereich der Werte in der ORDER BY-Klausel an. Wenn Sie keine ORDER BY-Klausel verwenden, gibt MicrosoftÂŽ SQL Serverâ&#x201E;˘ 2000 Zeilen zurĂźck, die die WHERE-Klausel erfĂźllen, ohne dass eine bestimmte Reihenfolge verwendet wird.

Â&#x201E;

Verwenden Sie hinter dem TOP-SchlĂźsselwort eine ganze Zahl ohne Vorzeichen.

Â&#x201E;

Wenn das TOP n PERCENT-Schlßsselwort eine Zeile mit Dezimalstellen ergibt, rundet SQL Server auf die nächste ganze Zahl auf.

Â&#x201E;

Verwenden Sie die WITH TIES-Klausel, um Ă&#x153;bereinstimmungen im Resultset einzuschlieĂ&#x;en. Ă&#x153;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. Ă&#x153;bereinstimmende Werte werden aus dem Resultset ausgeschlossen. 86(1RUWKZLQG 6(/(&7723RUGHULGSURGXFWLGTXDQWLW\ )520>RUGHUGHWDLOV@ 25'(5%<TXDQWLW\'(6& *2  RUGHULG SURGXFWLG TXDQWLW\       URZ V DIIHFWHG 

%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\            URZ V DIIHFWHG 

           

           








8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ

Â&#x2039; 9HUZHQGHQYRQ$JJUHJDWIXQNWLRQHQ ,QKDOWGLHVHU)ROLH

)Â KUHQ6LHGLH9HUZHQGXQJ YRQ$JJUHJDWIXQNWLRQHQ EHLP(UVWHOOHQYRQ=XVDP PHQIDVVXQJVGDWHQYRU

Aggregatfunktion Aggregatfunktion

(LQVWLHJ

9HUZHQGHQ6LH$JJUHJDW IXQNWLRQHQXP6SDOWHQZHUWH ]XEHUHFKQHQXQGXPGLHVH :HUWHLQV5HVXOWVHWHLQ]X VFKOLHÂ&#x2030;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Ă&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;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: Â&#x201E;

Aggregatfunktionen kĂśnnen mit der SELECT-Anweisung oder in Kombination mit der GROUP BY-Klausel verwendet werden.

Â&#x201E;

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 [,â&#x20AC;Śn]] [HAVING <search_conditions> ] [ WITH { CUBE | ROLLUP } ] ] [ ORDER BY { column_name [ ASC | DESC ] } [,â&#x20AC;Śn] ] [ COMPUTE { { AVG | COUNT | MAX | MIN | SUM } (expression) } [,â&#x20AC;Śn] [ BY expression [,â&#x20AC;Ś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     URZ V DIIHFWHG 

%HLVSLHO

(UJHEQLV

In diesem Beispiel werden alle Zeilen in der quantity-Spalte zur order detailsTabelle hinzugefĂźgt. 86(1RUWKZLQG 6(/(&7680 TXDQWLW\  )520>RUGHUGHWDLOV@ *2     URZ V DIIHFWHG 






8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ

9HUZHQGHQYRQ$JJUHJDWIXQNWLRQHQPLW18//:HUWHQ ,QKDOWGLHVHU)ROLH

(UOlXWHUQ6LHGLH9HUKDO WHQVZHLVHYRQ18// :HUWHQZHQQVLHLQ $JJUHJDWIXQNWLRQHQ YHUZHQGHWZHUGHQ

(LQVWLHJ

Â&#x201E;

'LHPHLVWHQ$JJUHJDWIXQNWLRQHQLJQRULHUHQ18//:HUWH

Â&#x201E;

'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&2817 UHSRUWVWR

6(/(&7&2817 UHSRUWVWR

)520HPSOR\HHV )520HPSOR\HHV *2 *2

Beispiel Beispiel 11

Beispiel Beispiel 22

****************NUR FĂ&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;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

Â&#x201E;

Alle SQL Server-Aggregatfunktionen, mit Ausnahme der COUNT(*)-Funktion, ignorieren NULL-Werte in Spalten.

Â&#x201E;

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     URZ V DIIHFWHG 




%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&2817 UHSRUWVWR  )520HPSOR\HHV *2     URZ V DIIHFWHG 






8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ

Â&#x2039; *UXQGODJHQGHU*5283%<.ODXVHO ,QKDOWGLHVHU)ROLH

*HEHQ6LHHLQHhEHUVLFKW Â EHUGLH.ODXVHOQPLWGHQHQ :HUWHIÂ UHLQH6SDOWH]X VDPPHQJHIDVVWZHUGHQ

(LQVWLHJ

,QGHU5HJHOZHUGHQ$JJUH JDWIXQNWLRQHQLQ9HUELQGXQJ PLWGHU*5283%<XQGGHU +$9,1*.ODXVHOYHUZHQGHW

Â&#x201E;

9HUZHQGHQGHU*5283%<.ODXVHO

Â&#x201E;

9HUZHQGHQGHU*5283 %<.ODXVHOPLWGHU +$9,1*.ODXVHO

****************NUR FĂ&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;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Ă&#x;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 680 TXDQWLW\ $6WRWDOBTXDQWLW\ 680 TXDQWLW\ $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 680 TXDQWLW\ $6WRWDOBTXDQWLW\ 680 TXDQWLW\ $6WRWDOBTXDQWLW\ )520RUGHUKLVW )520RUGHUKLVW :+(5(SURGXFWLG :+(5(SURGXFWLG   *5283%<SURGXFWLG *5283%<SURGXFWLG *2 *2

****************NUR FĂ&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;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: Â&#x201E;

SQL Server erstellt eine Spalte mit Werten fĂźr jede definierte Gruppe.

Â&#x201E;

SQL Server gibt nur einzelne Zeilen fĂźr jede angegebene Gruppe zurĂźck; detaillierte Informationen werden nicht zurĂźckgeben.

Â&#x201E;

Alle in der GROUP BY-Klausel angegebenen Spalten mĂźssen in der Auswahlliste eingeschlossen sein.

Â&#x201E;

Wenn eine WHERE-Klausel eingeschlossen wird, gruppiert SQL Server nur die Zeilen, die die Bedingungen in der WHERE-Klausel erfĂźllen.

Â&#x201E;

Die Anzahl von Spaltenelementen wird durch die GrĂśĂ&#x;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.

Â&#x201E;

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 Â&#x201E;

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(/(&7SURGXFWLG680 TXDQWLW\ $6WRWDOBTXDQWLW\ )520RUGHUKLVW *5283%<SURGXFWLG *2  SURGXFWLG WRWDOBTXDQWLW\     URZ V DIIHFWHG 

%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Ă&#x;end diese Zeilen und berechnet die gesamte Bestellmenge. Vergleichen Sie das Resultset mit dem aus Beispiel 1. 86(1RUWKZLQG 6(/(&7SURGXFWLG680 TXDQWLW\ $6WRWDOBTXDQWLW\ )520RUGHUKLVW :+(5(SURGXFWLG  *5283%<SURGXFWLG *2

(UJHEQLV

 SURGXFWLG

WRWDOBTXDQWLW\

  URZ V DIIHFWHG 

 




%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(/(&7SURGXFWLG680 TXDQWLW\ $6WRWDOBTXDQWLW\ )520>RUGHUGHWDLOV@ *5283%<SURGXFWLG *2  SURGXFWLG WRWDOBTXDQWLW\       URZ V DIIHFWHG 

      






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(/(&7SURGXFWLG680 TXDQWLW\

6(/(&7SURGXFWLG680 TXDQWLW\

$6WRWDOBTXDQWLW\ $6WRWDOBTXDQWLW\ )520RUGHUKLVW *5283%<SURGXFWLG *5283%<SURGXFWLG +$9,1*680 TXDQWLW\ ! +$9,1*680 TXDQWLW\ !   *2

productid productid total_quantity total_quantity 22 33

35 35 45 45

****************NUR FĂ&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;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: Â&#x201E;

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.

Â&#x201E;

Auf jede in der Auswahlliste angezeigte Spalte kann verwiesen werden.

Â&#x201E;

Das ALL-SchlĂźsselwort sollte nicht zusammen mit der HAVING-Klausel verwendet werden, da die HAVING-Klausel das ALL-SchlĂźsselwort auĂ&#x;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(/(&7SURGXFWLG680 TXDQWLW\ $6WRWDOBTXDQWLW\ )520RUGHUKLVW *5283%<SURGXFWLG +$9,1*680 TXDQWLW\ !  *2  SURGXFWLG WRWDOBTXDQWLW\    URZ V DIIHFWHG 

%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(/(&7SURGXFWLG680 TXDQWLW\ $6WRWDOBTXDQWLW\ )520>RUGHUGHWDLOV@ *5283%<SURGXFWLG +$9,1*680 TXDQWLW\ ! *2  SURGXFWLG WRWDOBTXDQWLW\      URZ V DIIHFWHG 

     








8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ

Â&#x2039; *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

Â&#x201E;

9HUZHQGHQGHU*5283 %<.ODXVHOPLWGHP 52//832SHUDWRU

Â&#x201E;

9HUZHQGHQGHU*5283 %<.ODXVHOPLWGHP &8%(2SHUDWRU

Â&#x201E;

9HUZHQGHQGHU*5283,1*)XQNWLRQ

****************NUR FĂ&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;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(/(&7SURGXFWLGRUGHULG680 TXDQWLW\ $6WRWDOBTXDQWLW\ 6(/(&7SURGXFWLGRUGHULG680 TXDQWLW\ $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Ă&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;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Ă&#x;t. Wenn Sie die GROUP BY-Klausel mit dem ROLLUP-Operator verwenden, beachten Sie die folgenden Aspekte und Richtlinien: Â&#x201E;

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.

Â&#x201E;

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.

Â&#x201E;

Das ALL-SchlĂźsselwort kann nicht mit dem ROLLUP-Operator verwendet werden.

Â&#x201E;

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(/(&7SURGXFWLGRUGHULG680 TXDQWLW\ $6WRWDOBTXDQWLW\ )520RUGHUKLVW *5283%<SURGXFWLGRUGHULG :,7+52//83 25'(5%<SURGXFWLGRUGHULG *2  SURGXFWLG RUGHULG WRWDOBTXDQWLW\ 18//           URZ V DIIHFWHG 

%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(/(&7RUGHULGSURGXFWLG680 TXDQWLW\ $6WRWDOBTXDQWLW\ )520>RUGHUGHWDLOV@ :+(5(RUGHULG *5283%<RUGHULGSURGXFWLG 25'(5%<RUGHULGSURGXFWLG *2  RUGHULG SURGXFWLG WRWDOBTXDQWLW\       URZ V DIIHFWHG

      

      




%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: Â&#x201E;

Jedes Produkt fĂźr jede Bestellung (dies wird auch ohne den ROLLUPOperator von der GROUP BY-Klausel zurĂźckgegeben).

Â&#x201E;

Alle Produkte fĂźr jede Bestellung.

Â&#x201E;

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(/(&7RUGHULGSURGXFWLG680 TXDQWLW\ $6WRWDOBTXDQWLW\ )520>RUGHUGHWDLOV@ :+(5(RUGHULG *5283%<RUGHULGSURGXFWLG :,7+52//83 25'(5%<RUGHULGSURGXFWLG *2  RUGHULG SURGXFWLG WRWDOBTXDQWLW\ 18//         URZ V DIIHFWHG 

18// 18//    18//    

         






8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ

9HUZHQGHQGHU*5283%<.ODXVHOPLWGHP&8%(2SHUDWRU 86(1RUWKZLQG 86(1RUWKZLQG 6(/(&7SURGXFWLGRUGHULG680 TXDQWLW\ $6WRWDOBTXDQWLW\ 6(/(&7SURGXFWLGRUGHULG680 TXDQWLW\ $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Ă&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;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: Â&#x201E;

Wenn n Spalten oder AusdrĂźcke in der GROUP BY-Klausel enthalten sind, gibt SQL Server 2n mĂśgliche Kombinationen im Resultset zurĂźck.

Â&#x201E;

Die NULL-Werte im Resultset zeigen an, dass diese speziellen Zeilen nur erstellt wurden, weil der CUBE-Operator verwendet wurde.

Â&#x201E;

Das ALL-SchlĂźsselwort kann nicht mit dem CUBE-Operator verwendet werden.

Â&#x201E;

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(/(&7SURGXFWLGRUGHULG680 TXDQWLW\ $6WRWDOBTXDQWLW\ )520RUGHUKLVW *5283%<SURGXFWLGRUGHULG :,7+&8%( 25'(5%<SURGXFWLGRUGHULG *2  SURGXFWLG RUGHULG WRWDOBTXDQWLW\ 18// 18// 18//           URZ V DIIHFWHG 

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

680 TXDQWLW\ $6WRWDOBTXDQWLW\ 680 TXDQWLW\ $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Ă&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;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: Â&#x201E;

SQL Server erstellt im Resultset neue Spalten fĂźr jede in der GROUPINGFunktion angegebene Spalte.

Â&#x201E;

SQL Server gibt den Wert 1 zurĂźck, um von ROLLUP oder CUBE erstellte zusammenfassende Werte im Resultset darzustellen.

Â&#x201E;

SQL Server gibt den Wert 0 zurĂźck, um detaillierte Werte im Resultset darzustellen.

Â&#x201E;

Die GROUPING-Funktion kann nur fĂźr Spalten angegeben werden, die in der GROUP BY-Klausel vorhanden sind.

Â&#x201E;

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  680 TXDQWLW\ $6WRWDOBTXDQWLW\ )520RUGHUKLVW *5283%<SURGXFWLGRUGHULG :,7+&8%( 25'(5%<SURGXFWLGRUGHULG *2  SURGXFWLG  RUGHULG



WRWDOBTXDQWLW\

18// 18// 18//           URZ V DIIHFWHG 

             

             

             

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* RUGHULG SURGXFWLG *5283,1* SURGXFWLG 680 TXDQWLW\ $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//        URZ V DIIHFWHG 

              

            




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(680 TXDQWLW\ %<SURGXFWLG &20387(680 TXDQWLW\ %<SURGXFWLG 25'(5%<SURGXFWLGRUGHULG &20387(680 TXDQWLW\

&20387(680 TXDQWLW\

&20387(680 TXDQWLW\

&20387(680 TXDQWLW\

*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Ă&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;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

Â&#x201E;

Die text-, ntext- oder image-Datentypen kĂśnnen nicht in eine COMPUTEoder eine COMPUTE BY-Klausel eingeschlossen werden.

Â&#x201E;

Das Format des Resultsets kann nicht angepasst werden. Wenn z. B. die SUM-Aggregatfunktion verwendet wird, zeigt SQL Server das Wort â&#x20AC;&#x17E;sumâ&#x20AC;&#x153; im Resultset an. Sie kĂśnnen es nicht in â&#x20AC;&#x17E;summaryâ&#x20AC;&#x153; ä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

Â&#x201E;

Es kĂśnnen mehrere COMPUTE-Klauseln mit der COMPUTE BY-Klausel in einer einzelnen Anweisung verwendet werden.

Â&#x201E;

Dazu mĂźssen Sie in SQL Server in der COMPUTE-Klausel dieselben Spalten angeben, die in der Auswahlliste aufgelistet sind.

Â&#x201E;

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(680 TXDQWLW\  *2  SURGXFWLG RUGHULG           URZ V DIIHFWHG

         

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: Â&#x201E;

Die COMPUTE BY-Klausel sollte immer mit der ORDER BY-Klausel verwendet werden, sodass Zeilen gruppiert werden.

Â&#x201E;

Geben Sie die Spaltennamen hinter der COMPUTE BY-Klausel an, um zu ermitteln, welche zusammenfassenden Werte SQL Server generiert.




8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ Â&#x201E;

%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(680 TXDQWLW\ %<SURGXFWLG &20387(680 TXDQWLW\  *2  SURGXFWLG RUGHULG

WRWDOBTXDQWLW\

          

         

   VXP

                URZ V DIIHFWHG

                

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Ă&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;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: Â&#x201E;

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.

Â&#x201E;

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.

Â&#x201E;

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.

Â&#x201E;

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.

Â&#x201E;

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

â&#x20AC;&#x17E;Aggregatfunktionenâ&#x20AC;&#x153;




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Ă&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;SSIG**************** (UOlXWHUQ6LHGLH/HUQ]LHOH GHUhEXQJVHLQKHLW

/HUQ]LHOH Am Ende dieser Ă&#x153;bungseinheit werden Sie in der Lage sein, die folgenden Aufgaben auszufĂźhren: Â&#x201E;

Verwenden der GROUP BY- und der HAVING-Klausel zum Zusammenfassen von Daten nach Gruppen.

Â&#x201E;

Verwenden des ROLLUP- und des CUBE-Operators sowie der GROUPING-Funktion zum Generieren von Zusammenfassungsdaten.

Â&#x201E;

Verwenden der COMPUTE- und der COMPUTE BY-Klausel zum Generieren von Berichten mit Gruppenwechseln, Gesamtsummen und Mittelwerten.

9RUDXVVHW]XQJHQ Um diese Ă&#x153;bungseinheit zu bearbeiten, benĂśtigen Sie Folgendes: Â&#x201E;

Die Skriptdateien fĂźr diese Ă&#x153;bungseinheit, die sich in C:\Moc\2316B\Labfiles\L04 befinden.

Â&#x201E;

Die Antwortdateien fĂźr diese Ă&#x153;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 â&#x20AC;&#x17E;AusfĂźhren einer Abfrageâ&#x20AC;&#x153;.






8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ

Daneben sind die folgenden Informationsquellen verfĂźgbar: Â&#x201E;

Das Northwind-Datenbankschema.

Â&#x201E;

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 Ă&#x153;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 Ă&#x153;bung.

Ă&#x2021; 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. Ă&#x2013;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. Ă&#x2013;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. Ă&#x201E;ndern Sie die in Schritt 4 beschriebene Abfrage so, dass die die Abfrage die ersten zehn Zeilen zurĂźckgibt. 86(1RUWKZLQG 6(/(&7723 RUGHULG  XQLWSULFH TXDQWLW\ $6WRWDOVDOH )520>RUGHUGHWDLOV@ 25'(5%< XQLWSULFH TXDQWLW\ '(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

                      URZ V DIIHFWHG 

Ă&#x2021; 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. Ă&#x201E;ndern Sie die in Schritt 5 des vorherigen Verfahrens beschriebene Abfrage so, dass die oberen zehn Produkte (einschlieĂ&#x;lich gleichen Werten) mit der hĂśchsten Gesamtmenge zurĂźckgegeben werden. 86(1RUWKZLQG 6(/(&7723:,7+7,(6 RUGHULG  XQLWSULFH TXDQWLW\ $6WRWDOVDOH )520>RUGHUGHWDLOV@ 25'(5%< XQLWSULFH TXDQWLW\ '(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

                        URZ V DIIHFWHG 




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 Ă&#x153;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 Ă&#x153;bung.

Ă&#x2021; 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Ă&#x;t. Dann ändern Sie die Abfrage, um andere Ergebnisse zu erhalten. 1. Ă&#x2013;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\

      URZ V DIIHFWHG 

Ă&#x2021; So berechnen Sie die Gesamtmenge fĂźr jede Kategorie Answer_Groupby1.sql ist ein vollständiges Skript fĂźr dieses Verfahren. 1. Ă&#x201E;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\LG680 TXDQWLW\ $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\

                  URZ V DIIHFWHG 

Ă&#x2021; 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. Ă&#x201E;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(/(&7RUGHULG680 TXDQWLW\ $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\

                    URZ V DIIHFWHG 










8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ

Ă&#x2021; 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. Ă&#x201E;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(/(&7RUGHULG680 TXDQWLW\ $6WRWDOBTXDQWLW\ )520>RUGHUGHWDLOV@$6RG ,11(5-2,1SURGXFWV$6S 21RGSURGXFWLG SSURGXFWLG *5283%<RUGHULG +$9,1*680 TXDQWLW\ ! *2

2. FĂźhren Sie die Abfrage aus, und ĂźberprĂźfen Sie die Ergebnisse. (UJHEQLV

Das Ergebnis ähnelt dem folgenden Resultset. RUGHUHG

WRWDOBTXDQWLW\

                  URZ V DIIHFWHG 




8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ





hEXQJ 9HUZHQGHQGHV52//83XQG&8%(2SHUDWRUV In dieser Ă&#x153;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 Ă&#x153;bung.

Ă&#x2021; 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. Ă&#x2013;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. Ă&#x201E;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(/(&7SURGXFWLGRUGHULG680 TXDQWLW\ $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//                       URZ V DIIHFWHG 

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 â&#x20AC;&#x17E;total_quantityâ&#x20AC;&#x153; fĂźr diese Zeile, der Summe aller â&#x20AC;&#x17E;total_quantityâ&#x20AC;&#x153;Werte ohne Gruppierung der Spalte mit dem NULL-Wert darstellt. Beispielsweise ist der Wert â&#x20AC;&#x17E;total_quantityâ&#x20AC;&#x153; in der Zeile, in der sowohl â&#x20AC;&#x17E;productidâ&#x20AC;&#x153; als auch â&#x20AC;&#x17E;orderidâ&#x20AC;&#x153; Null sind, die Summe aller â&#x20AC;&#x17E;total_quantityâ&#x20AC;&#x153;-Werte der Tabelle. ____________________________________________________________ ____________________________________________________________

Ă&#x2021; 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. Ă&#x2013;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. Ă&#x201E;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  680 TXDQWLW\ $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//                                  URZ V DIIHFWHG 



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 â&#x20AC;&#x17E;productidâ&#x20AC;&#x153;-Spalte generierten Spalte vorhanden ist, handelt es sich bei der Zeile um eine Zusammenfassung nach Bestellung. Der Wert dieser Zeile in â&#x20AC;&#x17E;productidâ&#x20AC;&#x153; 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 â&#x20AC;&#x17E;orderidâ&#x20AC;&#x153;-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 Ă&#x153;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 Ă&#x153;bung.

Ă&#x2021; 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. Ă&#x2013;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ĂśĂ&#x;er als 11070 ist. 2. Ă&#x201E;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(680 TXDQWLW\  *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  

 URZ V DIIHFWHG 




8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ





Ă&#x2021; 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. Ă&#x2013;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ĂśĂ&#x;er als 11070 ist. 2. Ă&#x201E;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(680 TXDQWLW\ %<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

  URZ V DIIHFWHG 








8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ

Ă&#x2021; 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. Ă&#x201E;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(680 TXDQWLW\ %<RUGHULG &20387(680 TXDQWLW\  &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 Ă&#x201E;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

  URZ V DIIHFWHG






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

Â&#x201E;

$XIOLVWHQGHU 723Q:HUWH

Â&#x201E;

9HUZHQGHQ YRQ$JJUHJDWIXQNWLRQHQ

Â&#x201E;

*UXQGODJHQGHU*5283%<.ODXVHO

Â&#x201E;

*HQHULHUHQYRQ$JJUHJDWZHUWHQLQ5HVXOWVHWV

Â&#x201E;

9HUZHQGHQGHU&20387( XQG&20387( %<.ODXVHOQ

****************NUR FĂ&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;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ĂśĂ&#x;e der Niederlassung, in der das Produkt verkauft wurde (klein, mittelgroĂ&#x; oder groĂ&#x;). 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

Â&#x201E;

9HUZHQGHQYRQ $OLDVQDPHQ IÂ U7DEHOOHQQDPHQ

Â&#x201E;

.RPELQLHUHQYRQ'DWHQDXVPHKUHUHQ7DEHOOHQ

Â&#x201E;

.RPELQLHUHQPHKUHUHU5HVXOWVHWV

****************NUR FĂ&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;SSIG**************** Diese Unterrichtseinheit gibt den Kursteilnehmern eine Ă&#x153;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: Â&#x201E;

Verwenden von Aliasnamen fĂźr Tabellennamen.

Â&#x201E;

Kombinieren von Daten aus zwei oder mehreren Tabellen mit Hilfe von VerknĂźpfungen.

Â&#x201E;

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

Â&#x201E;

%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 Â&#x201E;

%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Ă&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;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

Â&#x2039; .RPELQLHUHQYRQ'DWHQDXVPHKUHUHQ7DEHOOHQ ,QKDOWGLHVHU)ROLH

(UNOlUHQ6LHGLHXQWHU VFKLHGOLFKHQ9HUIDKUHQ]XP .RPELQLHUHQYRQ'DWHQDXV ]ZHLRGHUPHKUHUHQ7DEHO OHQRGHU5HVXOWVHWV

Â&#x201E;

(LQIÂ KUXQJLQ9HUNQÂ SIXQJHQ

Â&#x201E;

9HUZHQGHQYRQLQQHUHQ9HUNQÂ SIXQJHQ

(LQVWLHJ

Â&#x201E;

9HUZHQGHQYRQlXÂ&#x2030;HUHQ9HUNQÂ SIXQJHQ

Â&#x201E;

9HUZHQGHQYRQ&5266-2,16

Â&#x201E;

9HUNQÂ SIHQYRQPHKUDOV]ZHL7DEHOOHQ

Â&#x201E;

9HUNQÂ SIHQHLQHU7DEHOOHPLWVLFKVHOEVW

'DWHQDXV]ZHLRGHU PHKUHUHQ7DEHOOHQN|QQHQ DXFKGDQQNRPELQLHUW ZHUGHQZHQQVLFKGLH 7DEHOOHQLQYHUVFKLHGHQHQ 'DWHQEDQNHQEHILQGHQ

****************NUR FĂ&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;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Ă&#x;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â&#x201E;˘ 2000 Zeile fĂźr Zeile die Werte in den angegebenen Spalten. AnschlieĂ&#x;end werden die benutzerdefinierten Werte mit Hilfe der Vergleichsergebnisse in neuen Zeilen kombiniert. Man unterscheidet drei VerknĂźpfungstypen: Innere VerknĂźpfungen, äuĂ&#x;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Ă&#x;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

Â&#x201E;

$XVZlKOHQEHVWLPPWHU6SDOWHQLQPHKUHUHQ7DEHOOHQ z

(LQVWLHJ

7DEHOOHQZHUGHQYHUNQÂ SIW XPHLQHLQ]HOQHV5HVXOWVHW ]XHUVWHOOHQGDV(OHPHQWH DXV]ZHLRGHUPHKUHUHQ 7DEHOOHQXPIDVVW

z

Â&#x201E;

'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Ă&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;SSIG**************** Tabellen werden verknĂźpft, um ein einzelnes Resultset zu erstellen, das Zeilen und Spalten aus zwei oder mehreren Tabellen einschlieĂ&#x;t. 7HLOV\QWD[

0HWKRGLVFKHU+LQZHLV

=LHKHQ6LHGLH64/6HUYHU 2QOLQHGRNXPHQWDWLRQKHUDQ XPGLHYROOVWlQGLJH 6(/(&7$QZHLVXQJ]X ]HLJHQXQGGLH9HUNQÂ SIXQ JHQKHUYRU]XKHEHQ

SELECT column_name [, column_name â&#x20AC;Ś] 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. Â&#x201E;

Das JOIN-SchlĂźsselwort gibt an, welche Tabellen verknĂźpft werden sollen und auf welche Weise sie verknĂźpft werden.

Â&#x201E;

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

Â&#x201E;

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..

Â&#x201E;

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.

Â&#x201E;

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.

Â&#x201E;

Verweisen Sie auf einen Tabellennamen, wenn die Spaltennamen der verknĂźpften Tabellen Ăźbereinstimmen. Kennzeichnen Sie jeden Spaltennamen mit Hilfe des Formats Tabellenname.Spaltenname.

Â&#x201E;

Begrenzen Sie mĂśglichst die Anzahl der Tabellen in einer VerknĂźpfung. Je grĂśĂ&#x;er die Anzahl der verknĂźpften Tabellen ist, desto länger kann die Verarbeitung der Abfrage in SQL Server dauern.

Â&#x201E;

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â&#x20AC;&#x2122;Melia Oâ&#x20AC;&#x2122;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â&#x20AC;&#x2122;Melia Oâ&#x20AC;&#x2122;Melia 37 Eva EvaCorets Corets Erin ErinOâ&#x20AC;&#x2122;Melia Oâ&#x20AC;&#x2122;Melia

33 44

11 11 1003 1003

****************NUR FĂ&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;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: Â&#x201E;

Bei inneren VerknĂźpfungen handelt es sich um das Standardverfahren von SQL Server. Die INNER JOIN-Klausel kann als JOIN abgekĂźrzt werden.

Â&#x201E;

Geben Sie an, welche Spalten im Resultset angezeigt werden sollen, indem Sie die gekennzeichneten Spaltennamen in der Auswahlliste einschlieĂ&#x;en.

Â&#x201E;

SchlieĂ&#x;en Sie eine WHERE-Klausel ein, um die im Resultset zurĂźckgegebenen Zeilen zu beschränken.

Â&#x201E;

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 URZ V DIIHFWHG 

     

     

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    URZ V DIIHFWHG 

%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    URZ V DIIHFWHG 

       



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               URZ V DIIHFWHG 






8QWHUULFKWVHLQKHLW9HUNQÂ SIHQYRQPHKUHUHQ7DEHOOHQ

9HUZHQGHQYRQlXÂ&#x2030;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Â&#x2030;HUH 9HUNQÂ SIXQJHQXQGEH VFKUHLEHQ6LHGLHGUHL 7\SHQ

(LQVWLHJ

0LW+LOIHYRQOLQNHQUHFKWHQ RGHUYROOVWlQGLJHQlXÂ&#x2030;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â&#x20AC;&#x2122;Melia Oâ&#x20AC;&#x2122;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â&#x20AC;&#x2122;Melia Oâ&#x20AC;&#x2122;Melia 37 Eva 33 11 EvaCorets Corets 11 Erin ErinOâ&#x20AC;&#x2122;Melia Oâ&#x20AC;&#x2122;Melia Sean SeanChai Chai

44 NULL NULL

33 44

55 22

11 11 1003 1003

1003 1003 NULL NULL

****************NUR FĂ&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;SSIG**************** 0HWKRGLVFKHU+LQZHLV

:HLVHQ6LHDXIGLH18// :HUWHIÂ U6HDQ&KDLDXIGHU )ROLHKLQ)Â U=HLOHQGLHGHU 9HUNQÂ SIXQJVEHGLQJXQJ QLFKWHQWVSUHFKHQZLUGLP 5HVXOWVHW18//DQJH]HLJW

Mit linken oder rechten äuĂ&#x;eren VerknĂźpfungen werden Zeilen aus zwei Tabellen kombiniert, die der VerknĂźpfungsbedingung entsprechen, sowie in der JOIN-Klausel angegebene Zeilen ohne Ă&#x153;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Ă&#x;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Â&#x2030;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Ă&#x;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Ă&#x;ere VerknĂźpfungen verwenden, beachten Sie folgende Aspekte und Richtlinien: Â&#x201E;

Mit einer linken äuĂ&#x;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Ă&#x;ere VerknĂźpfung.

Â&#x201E;

Mit einer rechten äuĂ&#x;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Ă&#x;ere VerknĂźpfung.

Â&#x201E;

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  URZ V DIIHFWHG 

     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Ă&#x;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  URZ V DIIHFWHG 

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â&#x20AC;&#x2122;Melia Oâ&#x20AC;&#x2122;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Ă&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;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    URZ V DIIHFWHG 

          





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[    URZ V DIIHFWHG 

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â&#x20AC;&#x2122;Melia Oâ&#x20AC;&#x2122;Melia

44 22

Ergebnis buyer_name buyer_name Erin ErinOâ&#x20AC;&#x2122;Melia Oâ&#x20AC;&#x2122;Melia Adam AdamBarr Barr Erin ErinOâ&#x20AC;&#x2122;Melia Oâ&#x20AC;&#x2122;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Ă&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;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 Ă&#x153;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: Â&#x201E;

Es werden eine oder mehrere Tabellen benĂśtigt, die FremdschlĂźsselbeziehungen zu jeder Tabelle enthalten, die verknĂźpft werden soll.

Â&#x201E;

Die ON-Klausel sollte auf jede Spalte verweisen, die Teil eines zusammengesetzten SchlĂźssels ist.

Â&#x201E;

SchlieĂ&#x;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  URZ V DIIHFWHG 

%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        URZ V DIIHFWHG 

-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Ă&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;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: Â&#x201E;

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.

Â&#x201E;

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         URZ V DIIHFWHG 

%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    URZ V DIIHFWHG 

   

   






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.OHLQHUDOV  JHO|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   URZ V DIIHFWHG 

%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/()7 DODVWQDPH $6QDPH /()7 DWLWOH $6WLWOH EHPSOR\HHLG/()7 EODVWQDPH $6QDPH /()7 EWLWOH $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  URZ V DIIHFWHG 

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

Â&#x201E;

9HUZHQGHQGHV81,212SHUDWRUVXPHLQ HLQ]HOQHV 5HVXOWVHW DXVPHKUHUHQ$EIUDJHQ]XHUVWHOOHQ

(LQVWLHJ

Â&#x201E;

-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Ă&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;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

Â&#x201E;

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.

Â&#x201E;

SQL Server entfernt doppelte Zeilen im Resultset. Wird jedoch die ALLOption verwendet, werden alle Zeilen (einschlieĂ&#x;lich der Duplikate) im Resultset eingeschlossen.

Â&#x201E;

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.

Â&#x201E;

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Ă&#x;en, die durch den UNION-Operator beeinflusst wird. Andernfalls werden die Daten im Resultset mĂśglicherweise nicht in der gewĂźnschten Reihenfolge zurĂźckgegeben.

Â&#x201E;

Unter Umständen lässt sich eine bessere Leistung erzielen, wenn Sie eine komplexe Abfrage in mehrere SELECT-Anweisungen aufspalten und diese anschlieĂ&#x;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(/(&7 ILUVWQDPH  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  URZ V DIIHFWHG 

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Ă&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;SSIG**************** Die nachfolgend aufgefĂźhrten empfohlenen Methoden sollen Ihnen beim AusfĂźhren von Abfragen helfen. Â&#x201E;

Verknßpfen Sie Tabellen mit Primär- und Fremdschlßsseln.

Â&#x201E;

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.

Â&#x201E;

Begrenzen Sie die Anzahl von Tabellen in einer VerknĂźpfung. Je grĂśĂ&#x;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

â&#x20AC;&#x17E;Grundlegende Informationen zu VerknĂźpfungenâ&#x20AC;&#x153; â&#x20AC;&#x17E;Verwenden mehrerer Tabellenâ&#x20AC;&#x153;






8QWHUULFKWVHLQKHLW9HUNQÂ SIHQYRQPHKUHUHQ7DEHOOHQ

hEXQJVHLQKHLW$$EIUDJHQPHKUHUHU7DEHOOHQ ,QKDOWGLHVHU)ROLH

*HEHQ6LHHLQH(LQIÂ KUXQJ LQGLHhEXQJVHLQKHLW

(LQVWLHJ

,QGLHVHQhEXQJVHLQKHLW IÂ KUHQ6LHYHUVFKLHGHQH $UWHQYRQ9HUNQÂ SIXQJHQ GXUFKXP'DWHQDXV PHKUHUHQ7DEHOOHQ]X NRPELQLHUHQ

****************NUR FĂ&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;SSIG**************** (UOlXWHUQ6LHGLH/HUQ]LHOH GHUhEXQJVHLQKHLW

/HUQ]LHOH Am Ende dieser Ă&#x153;bungseinheit werden Sie in der Lage sein, die folgenden Aufgaben auszufĂźhren: Â&#x201E;

VerknĂźpfen von Tabellen mit Hilfe verschiedener VerknĂźpfungstypen.

Â&#x201E;

Kombinieren von Resultsets mit dem UNION-Operator.

9RUDXVVHW]XQJHQ Um diese Ă&#x153;bungseinheit zu bearbeiten, benĂśtigen Sie Folgendes: Â&#x201E;

Die Antwortdateien fĂźr diese Ă&#x153;bungseinheit, die sich in C:\Moc\2316B \Labfiles\L05\Answers befinden.

Â&#x201E;

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 â&#x20AC;&#x17E;AusfĂźhren einer Abfrageâ&#x20AC;&#x153;. Daneben sind die folgenden Informationsquellen verfĂźgbar: Â&#x201E;

Das library-Datenbankschema.

Â&#x201E;

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 Ă&#x153;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 Ă&#x153;bung.

Ă&#x2021; 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. Ă&#x2013;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       URZ V DIIHFWHG

FLW\

VWDWH

]LS

0RQWJRPHU\ 6DFUDPHQWR :DVKLQJWRQ $WODQWD 6SULQJILHOG    

$/ &$ '& *$ ,/    

        





Ă&#x2021; 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

              URZ V DIIHFWHG 

RQBORDQ

WLWOH

WUDQVODWLRQ

FRYHU

1 1 1 1   

/DVWRIWKH0RKLFDQV /DVWRIWKH0RKLFDQV /DVWRIWKH0RKLFDQV /DVWRIWKH0RKLFDQV   

$5$%,& $5$%,& $5$%,& $5$%,&    

+$5'%$&. +$5'%$&. +$5'%$&. +$5'%$&.    

Ă&#x2021; So verknĂźpfen Sie mehrere Tabellen mit Hilfe einer äuĂ&#x;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Ă&#x;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(57 FKDU  UHORJBGDWH $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%  URZ V DIIHFWHG 

LVEQ

GDWH

18//     18//

18//     18//






8QWHUULFKWVHLQKHLW9HUNQÂ SIHQYRQPHKUHUHQ7DEHOOHQ

hEXQJ 9HUZHQGHQGHV81,212SHUDWRUV]XP.RPELQLHUHQYRQ5HVXOWVHWV In dieser Ă&#x153;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 Ă&#x153;bung.

Ă&#x2021; 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.

Ă&#x2021; 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 Ă&#x153;bung, und fĂźgen Sie sie in das neue Abfragefenster ein.




8QWHUULFKWVHLQKHLW9HUNQÂ SIHQYRQPHKUHUHQ7DEHOOHQ





3. Ă&#x201E;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.

Ă&#x2021; 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 Ă&#x153;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 Ă&#x153;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

Â&#x201E;

9HUZHQGHQYRQ $OLDVQDPHQ IÂ U7DEHOOHQQDPHQ

Â&#x201E;

.RPELQLHUHQYRQ'DWHQDXVPHKUHUHQ7DEHOOHQ

Â&#x201E;

.RPELQLHUHQPHKUHUHU 5HVXOWVHWV

****************NUR FĂ&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;SSIG**************** Die Krankenkasse Duluth Mutual Life verfĂźgt Ăźber eine Datenbank, in der Informationen zu Ă&#x201E;rzten und deren Patienten nachverfolgt werden. Diese Datenbank enthält die folgenden Tabellen: Ă&#x201E;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

Â&#x201E;

(LQVWLHJ

8QWHUDEIUDJHQEHVWHKHQDXV HLQHU5HLKHYRQ6(/(&7 $QZHLVXQJHQ,QYLHOHQ )lOOHQN|QQHQ6LH8QWHU DEIUDJHQDOV9HUNQÂ SIXQJHQ QHXVFKUHLEHQ

*UÂ QGHIÂ UGLH9HUZHQGXQJYRQ8QWHUDEIUDJHQ z

z

Â&#x201E;

%HDQWZRUWHQ YRQ$EIUDJHQGLHYRQGHQ (UJHEQLVVHQ HLQHUDQGHUHQ $EIUDJH DEKlQJHQ

*UÂ QGHIÂ UGLH9HUZHQGXQJYRQ9HUNQÂ SIXQJHQDQVWHOOH YRQ8QWHUDEIUDJHQ z

Â&#x201E;

8QWHUJOLHGHUQ NRPSOH[HU $EIUDJHQ LQHLQH 5HLKH ORJLVFKHU 6FKULWWH

64/6HUYHUIÂ KUW9HUNQÂ SIXQJHQHIIL]LHQWHUDXVDOV 8QWHUDEIUDJHQ

9HUZHQGXQJYRQ8QWHUDEIUDJHQ

****************NUR FĂ&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;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â&#x201E;˘ 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: Â&#x201E;

Unterabfragen mĂźssen in Klammern eingeschlossen werden.

Â&#x201E;

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.

Â&#x201E;

Unterabfragen kĂśnnen nicht dazu verwendet werden, um Spalten mit textoder image-Datentypen abzurufen.

Â&#x201E;

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

Â&#x201E;

'LH8QWHUDEIUDJHLVWHLQ 5HFRUGVHW LQGHU$EIUDJHGDV ZLHHLQH7DEHOOHIXQNWLRQLHUW

Â&#x201E;

'LH8QWHUDEIUDJHZLUGLQGHU)520.ODXVHODQVWHOOH HLQHU7DEHOOHYHUZHQGHW

Â&#x201E;

'LH8QWHUDEIUDJHZLUGPLWGHP5HVWGHU$EIUDJH RSWLPLHUW

86(1RUWKZLQG 86(1RUWKZLQG 6(/(&77RUGHULG7FXVWRPHULG 6(/(&77RUGHULG7FXVWRPHULG )520 6(/(&7RUGHULGFXVWRPHULG )520 6(/(&7RUGHULGFXVWRPHULG )520RUGHUV )520RUGHUV $67

$67 *2 *2

****************NUR FĂ&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;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Ă&#x;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Ă&#x;eren Teil abgefragt wird. Die abgeleitete Tabelle funktioniert wie die gesamte Abfrage, sie wird aber zu Illustrationszwecken getrennt. 86(1RUWKZLQG 6(/(&77RUGHULG7FXVWRPHULG )520 6(/(&7RUGHULGFXVWRPHULG )520RUGHUV $67 *2 

Wenn eine Unterabfrage als abgeleitete Tabelle verwendet wird, beachten Sie Folgendes: Â&#x201E;

Die Unterabfrage ist ein Recordset in der Abfrage, das wie eine Tabelle funktioniert.

Â&#x201E;

Die Unterabfrage wird in der FROM-Klausel anstelle einer Tabelle verwendet.

Â&#x201E;

Die Unterabfrage wird mit dem Rest der Abfrage optimiert.




8QWHUULFKWVHLQKHLW$UEHLWHQPLW8QWHUDEIUDJHQ





9HUZHQGHQHLQHU8QWHUDEIUDJHDOV$XVGUXFN ,QKDOWGLHVHU)ROLH

%HVFKUHLEHQ6LHZLHHLQH 8QWHUDEIUDJHDOV$XVGUXFN YHUZHQGHWZLUG

Â&#x201E;

'LH8QWHUDEIUDJHZLUGZLHHLQ$XVGUXFNDXVJHZHUWHW XQGEHDUEHLWHW

Â&#x201E;

'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 SULFH 6(/(&7$9* SULFH )520WLWOHV $6GLIIHUHQFH SULFH 6(/(&7$9* SULFH )520WLWOHV $6GLIIHUHQFH )520WLWOHV )520WLWOHV :+(5(W\SH :+(5(W\SH SRSXODUBFRPS

SRSXODUBFRPS

*2 *2

****************NUR FĂ&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;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: Â&#x201E;

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.

Â&#x201E;

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 SULFH 6(/(&7$9* SULFH )520WLWOHV $6GLIIHUHQFH )520WLWOHV :+(5(W\SH SRSXODUBFRPS  *2 






8QWHUULFKWVHLQKHLW$UEHLWHQPLW8QWHUDEIUDJHQ

Â&#x2039; 9HUZHQGHQHLQHU8QWHUDEIUDJH]XP.RUUHOLHUHQ YRQ'DWHQ ,QKDOWGLHVHU)ROLH

%HVFKUHLEHQ6LHZLHHLQH 8QWHUDEIUDJH]XP.RUUHOLH UHQYRQ'DWHQYHUZHQGHW ZLUG

(LQVWLHJ

(LQHNRUUHOLHUWH8QWHUDE IUDJHNDQQDOVG\QDPLVFKHU $XVGUXFNYHUZHQGHW ZHUGHQGHUVLFKIÂ UMHGH =HLOHHLQHUlXÂ&#x2030;HUHQ$EIUDJH lQGHUW

Â&#x201E;

$XVZHUWHQHLQHUNRUUHOLHUWHQ8QWHUDEIUDJH

Â&#x201E;

,PLWLHUHQHLQHU-2,1.ODXVHO

Â&#x201E;

,PLWLHUHQHLQHU+$9,1*.ODXVHO

****************NUR FĂ&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;SSIG**************** Sie kĂśnnen eine korrelierte Unterabfrage als dynamischen Ausdruck verwenden, der sich fĂźr jede Zeile einer äuĂ&#x;eren Abfrage ändert. Der Abfrageprozessor fĂźhrt die Unterabfrage fĂźr jede Zeile in der äuĂ&#x;eren Abfrage einzeln aus, dies wird wiederum als Ausdruck fĂźr die Zeile ausgewertet und an die äuĂ&#x;ere Abfrage Ăźbergeben. Die korrelierte Unterabfrage ist tatsächlich eine JOIN-Klausel zwischen der dynamisch ausgefĂźhrten Unterabfrage und der Zeile der äuĂ&#x;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Ă&#x;erhalb der Unterabfrage verglichen.




8QWHUULFKWVHLQKHLW$UEHLWHQPLW8QWHUDEIUDJHQ





$XVZHUWHQHLQHUNRUUHOLHUWHQ8QWHUDEIUDJH ,QKDOWGLHVHU)ROLH

Die DieäuĂ&#x;ere äuĂ&#x;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Â&#x2030;HUHQ$EIUDJH

Die Dieinnere innereAbfrage Abfragegibt gibteinen einen Wert uĂ&#x;ere Abfrage Wertan andie dieääuĂ&#x;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 Ă&#x; eren Zeile der äuĂ&#x;eren Abfrage Abfragewiederholt wiederholt

ZurĂźck ZurĂźckzu zuSchritt Schritt11

****************NUR FĂ&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;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Ă&#x;eren Abfrage: Â&#x201E;

SQL Server fĂźhrt die innere Abfrage fĂźr jede Zeile aus, die die äuĂ&#x;ere Abfrage auswählt.

Â&#x201E;

SQL Server vergleicht die Ergebnisse der Unterabfrage mit den Ergebnissen auĂ&#x;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         URZ V DIIHFWHG 

)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Ă&#x;eren Abfrage angegeben wird. In den folgenden Schritten wird beschrieben, wie die korrelierte Unterabfrage in Beispiel 1 ausgewertet wird: 1. Die äuĂ&#x;ere Abfrage Ăźbergibt einen Spaltenwert an die innere Abfrage. Der Spaltenwert, den die äuĂ&#x;ere Abfrage an die innere Abfrage Ăźbergibt, ist die orderid. Die äuĂ&#x;ere Abfrage Ăźbergibt die erste orderid in der orders-Tabelle an die innere Abfrage. 2. Die innere Abfrage verwendet die von der äuĂ&#x;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Ă&#x;ere Abfrage zurĂźck. 3. Die innere Abfrage gibt einen Wert an die äuĂ&#x;ere Abfrage zurĂźck. Die WHERE-Klausel der äuĂ&#x;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Ă&#x;eren Abfrage wiederholt. Die äuĂ&#x;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ĂśĂ&#x;te Bestellung zurĂźckgegeben. Beachten Sie, dass diese korrelierte Unterabfrage auf die gleiche Tabelle verweist wie die äuĂ&#x;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\         URZ V DIIHFWHG 

        




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

Â&#x201E;

0LWNRUUHOLHUWHQ8QWHUDEIUDJHQN|QQHQGLHJOHLFKHQ (UJHEQLVVHZLHPLWHLQHU-2,1.ODXVHO HU]LHOWZHUGHQ

Â&#x201E;

'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Ă&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;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Ă&#x;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\  URZ V DIIHFWHG 






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

Â&#x201E;

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 Â&#x201E;

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Ă&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;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Ă&#x;t die Zeile in die Ergebnisse ein, wenn der Wert in der price-Spalte der Zeile grĂśĂ&#x;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  URZ V DIIHFWHG 

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

Â&#x201E;

9HUZHQGHQPLWNRUUHOLHUWHQ8QWHUDEIUDJHQ

Â&#x201E;

%HVWLPPHQGHV9RUKDQGHQVHLQVYRQ'DWHQLQHLQHU /LVWHYRQ:HUWHQ

Â&#x201E;

64/ 6HUYHU3UR]HVV z

0LWGHQ(;,676XQG127 (;,6762SHUDWRUHQN|QQHQ 6LHHUPLWWHOQRE'DWHQLQ HLQHU/LVWHYRQ:HUWHQ YRUKDQGHQVLQG

z z

'LHlXÂ&#x2030;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Ă&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;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Ă&#x;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: Â&#x201E;

Die äuĂ&#x;ere Abfrage ĂźberprĂźft, ob Zeilen vorhanden sind, die die Unterabfrage zurĂźckgibt.

Â&#x201E;

Die Unterabfrage gibt in Abhängigkeit von der Bedingung der Abfrage TRUE oder FALSE zurßck.

Â&#x201E;

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((;,676 6(/(&7 )520RUGHUV$6R :+(5(HHPSOR\HHLG RHPSOR\HHLG $1'RRUGHUGDWH     *2  ODVWQDPH HPSOR\HHLG 3HDFRFN .LQJ  URZ V DIIHFWHG 

%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  URZ V DIIHFWHG 

   




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Â&#x17E;6(/(&7$QZHLVXQJXP]XHLQHU 9HUZHQGHQ6LHGLH,16(57Â&#x17E;6(/(&7$QZHLVXQJXP]XHLQHU YRUKDQGHQHQ7DEHOOHDXVDQGHUHQ4XHOOHQ=HLOHQKLQ]X]XIÂ JHQ YRUKDQGHQHQ7DEHOOHDXVDQGHUHQ4XHOOHQ=HLOHQKLQ]X]XIÂ JHQ 9HUZHQGHQ6LHP|JOLFKVWLPPHUGHQ(;,6762SHUDWRUDQVWHOOHGHV 9HUZHQGHQ6LHP|JOLFKVWLPPHUGHQ(;,6762SHUDWRUDQVWHOOHGHV ,12SHUDWRUV ,12SHUDWRUV

****************NUR FĂ&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;SSIG**************** Die folgenden empfohlenen Methoden sollen Ihnen beim AusfĂźhren erweiterter Abfragen helfen: Â&#x201E;

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.

Â&#x201E;

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Ă&#x;eren Tabellen zu unterscheiden.

Â&#x201E;

Verwenden Sie die INSERTâ&#x20AC;ŚSELECT-Anweisung, um zu einer vorhandenen Tabelle aus anderen Quellen Zeilen hinzuzufĂźgen. Das Verwenden der INSERTâ&#x20AC;ŚSELECT-Anweisung ist effizienter als das Schreiben mehrerer einzeiliger INSERT-Anweisungen.

Â&#x201E;

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

â&#x20AC;&#x153;Erstellen einer Teilabfrageâ&#x20AC;?

Korrelieren von Tabellen

â&#x20AC;&#x153;Verwenden von Tabellenaliasnamenâ&#x20AC;? â&#x20AC;&#x153;Erstellen von Tabellenaliasenâ&#x20AC;?

Verwenden einer Unterabfrage anstelle eines Ausdrucks

â&#x20AC;&#x153;Unterabfragen anstelle von AusdrĂźckenâ&#x20AC;?






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Ă&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;SSIG**************** (UOlXWHUQ6LHGLH/HUQ]LHOH GHUhEXQJVHLQKHLW

/HUQ]LHOH Am Ende dieser Ă&#x153;bungseinheit werden Sie in der Lage sein, die folgenden Aufgaben auszufĂźhren: Â&#x201E;

Verwenden einer Unterabfrage als abgeleitete Tabelle.

Â&#x201E;

Verwenden einer Unterabfrage als Ausdruck.

Â&#x201E;

Verwenden einer Unterabfrage zum Korrelieren von Daten.

9RUDXVVHW]XQJHQ Um diese Ă&#x153;bungseinheit zu bearbeiten, benĂśtigen Sie Folgendes: Â&#x201E;

Die Skriptdateien fĂźr diese Ă&#x153;bungseinheit, die sich in C:\Moc\2316B\Labfiles\L06 befinden.

Â&#x201E;

Die Antwortdateien fĂźr diese Ă&#x153;bungseinheit, die sich in C:\Moc\2316B\Labfiles\L06\Answers befinden.

Â&#x201E;

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 â&#x20AC;&#x17E;AusfĂźhren einer Abfrageâ&#x20AC;&#x153;. Daneben sind die folgenden Informationsquellen verfĂźgbar: Â&#x201E;

Das library-Datenbankschema.

Â&#x201E;

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 Ă&#x153;bung schreiben Sie eine Abfrage, die eine abgeleitete Tabelle verwendet und die abgeleitete Tabelle mit einer anderen Tabelle verknĂźpft. Sie werden auĂ&#x;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 Ă&#x153;bung.

Ă&#x2021; 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. Ă&#x2013;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        URZ V DIIHFWHG  

1RB2IB&KLOGUHQ    

$QPHUNXQJ Denken Sie später in dieser Ă&#x153;bung beim Beantworten von Fragen daran, dass dies das Resultset der ursprĂźnglichen abgeleiteten Tabellenabfrage ist.

Ă&#x2021; 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        URZ V DIIHFWHG 

3. Vergleichen Sie die Ergebnisse der Abfrage aus Schritt 1 dieses Verfahrens mit der ursprĂźnglichen abgeleiteten Tabellenabfrage des vorherigen Verfahrens. Worin bestehen die Ă&#x201E;hnlichkeiten zwischen den beiden Ergebnissen? Beide Abfragen geben 248 Zeilen im Resultset zurĂźck. Beide Abfragen geben auĂ&#x;erdem die â&#x20AC;&#x17E;adult_member_noâ&#x20AC;&#x153;- und â&#x20AC;&#x17E;No_Of_Childrenâ&#x20AC;&#x153;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     URZ V DIIHFWHG 

6. Vergleichen Sie die Ergebnisse der Abfrage aus Schritt 4 dieses Verfahrens mit der ursprĂźnglichen abgeleiteten Tabellenabfrage. Worin bestehen die Ă&#x201E;hnlichkeiten zwischen den beiden Ergebnissen? Beide Abfragen geben die â&#x20AC;&#x17E;expr_dateâ&#x20AC;&#x153;-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. ____________________________________________________________ ____________________________________________________________

Ă&#x2021; 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         URZ V DIIHFWHG  

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 Ă&#x153;bung werden Sie Abfragen schreiben, die Unterabfragen mit einem einzigen Wert oder mit mehreren Werten verwenden, um das Resultset der äuĂ&#x;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 Ă&#x153;bung.

Ă&#x2021; 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.   URZ V DIIHFWHG   :DUQXQJ18//:HUWZLUGGXUFKHLQH$JJUHJDWRGHUHLQH DQGHUH6(72SHUDWLRQJHO|VFKW

Ă&#x2021; 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Ă&#x;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      URZ V DIIHFWHG   :DUQXQJ18//:HUWZLUGGXUFKHLQH$JJUHJDWRGHUHLQH DQGHUH6(72SHUDWLRQJHO|VFKW

Ă&#x2021; 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         URZ V DIIHFWHG 

Ă&#x2021; So verwenden Sie eine Unterabfrage mit mehreren Werten 1. Schreiben Sie eine äuĂ&#x;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Ă&#x;en vor: a. Beschränken Sie die Zeilen, die die Gruppen der äuĂ&#x;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       URZ V DIIHFWHG 

      

      






8QWHUULFKWVHLQKHLW$UEHLWHQPLW8QWHUDEIUDJHQ

hEXQJ 9HUZHQGHQHLQHU8QWHUDEIUDJH]XP.RUUHOLHUHQYRQ'DWHQ In der Ă&#x153;bung werden Sie Abfragen schreiben, die korrelierte Unterabfragen verwenden, um das Resultset der äuĂ&#x;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 Ă&#x153;bung.

Ă&#x2021; 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Ă&#x;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Ă&#x;en vor: a. Verwenden Sie fĂźr die loanhist-Tabelle einen Alias. b. Korrelieren Sie die member.member_no-Spalte der äuĂ&#x;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Ă&#x;eren Abfrage einen Vergleichsoperator, um die Mitglieder mit GesamtmahngebĂźhren Ăźber 5 $ auszuwählen. 86(OLEUDU\ 6(/(&7PHPEHUBQRODVWQDPH )520PHPEHU$6P :+(5( 6(/(&7680 ILQHBDVVHVVHG  )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       URZ V DIIHFWHG   :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

Â&#x201E;

(LQIÂ KUXQJLQ8QWHUDEIUDJHQ

Â&#x201E;

9HUZHQGHQHLQHU8QWHUDEIUDJHDOVDEJHOHLWHWH7DEHOOH

Â&#x201E;

9HUZHQGHQHLQHU8QWHUDEIUDJHDOV$XVGUXFN

Â&#x201E;

9HUZHQGHQHLQHU8QWHUDEIUDJH]XP.RUUHOLHUHQ YRQ'DWHQ

Â&#x201E;

9HUZHQGHQGHU(;,676 XQG127(;,676.ODXVHOQ

****************NUR FĂ&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;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 Ă&#x201E;rzten und zu deren Patienten nachverfolgt werden. Diese Datenbank enthält die folgenden Tabellen. Ă&#x201E;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

Â&#x201E;

9HUZHQGHQYRQ7UDQVDNWLRQHQ

Â&#x201E;

(LQIÂ JHQYRQ'DWHQ

Â&#x201E;

/|VFKHQYRQ'DWHQ

Â&#x201E;

$NWXDOLVLHUHQYRQ'DWHQ

Â&#x201E;

/HLVWXQJVDVSHNWH

****************NUR FĂ&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;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: Â&#x201E;

Beschreiben der Funktionsweise von Transaktionen.

Â&#x201E;

Schreiben von INSERT-, DELETE- und UPDATE-Anweisungen, um Daten in Tabellen zu ändern.

Â&#x201E;

Beschreiben von Leistungsaspekten, die mit dem Ă&#x201E;ndern von Daten zusammenhängen.






8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ

9HUZHQGHQYRQ7UDQVDNWLRQHQ ,QKDOWGLHVHU)ROLH

*HEHQ6LHHLQH(LQIÂ KUXQJ LQGLH7KHPHQGLHVHV $EVFKQLWWV

Â&#x201E;

(LQVWLHJ

7UDQVDNWLRQHQZHUGHQYHU ZHQGHWXP'DWHQLQWHJULWlW ]XHU]ZLQJHQ

6WDUWHQYRQ7UDQVDNWLRQHQ

Â&#x201E;

%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Ă&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;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â&#x201E;˘ 2000 in einem von drei Modi starten - Explizit, Autocommit oder Implizit. Â&#x201E;

Explizite Transaktionen werden durch Eingeben einer BEGIN TRANSACTION-Anweisung gestartet.

Â&#x201E;

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.

Â&#x201E;

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 Ă&#x201E;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 Ă&#x201E;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

Â&#x2039;(LQIÂ JHQYRQ'DWHQ ,QKDOWGLHVHU)ROLH

*HEHQ6LHHLQH(LQIÂ KUXQJ LQGLH7KHPHQGLHVHV $EVFKQLWWV

Â&#x201E;

(LQIÂ JHQHLQHU'DWHQ]HLOHGXUFK$QJDEHGHU:HUWH

(LQVWLHJ

Â&#x201E;

9HUZHQGHQGHU,16(57Â&#x17E;6(/(&7$QZHLVXQJ

Â&#x201E;

(UVWHOOHQHLQHU7DEHOOHPLW+LOIHGHU6(/(&7,172 $QZHLVXQJ

Â&#x201E;

(LQIÂ JHQYRQ7HLOGDWHQ

Â&#x201E;

(LQIÂ JHQYRQ'DWHQPLW+LOIHYRQ 6SDOWHQVWDQGDUGZHUWHQ

'DWHQN|QQHQPLW+LOIHHLQHU 7UDQVDNWLRQHLQJHIÂ JW ZHUGHQLQGHP6LHHLQH :HUWHPHQJHDQJHEHQRGHU GLH(UJHEQLVVHHLQHU 6(/(&7$QZHLVXQJ HLQIÂ JHQ

****************NUR FĂ&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;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

Â&#x201E;

'LH=LHOHLQVFKUlQNXQJHQPÂ VVHQHLQJHKDOWHQZHUGHQ VRQVWVFKOlJWGLH,16(577UDQVDNWLRQIHKO

Â&#x201E;

9HUZHQGHQGHU6SDOWHQOLVWH ]XP$QJHEHQYRQ =LHOVSDOWHQ

(LQVWLHJ

Â&#x201E;

$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Ă&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;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}[,â&#x20AC;Ś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: Â&#x201E;

Die Zieleinschränkungen mßssen eingehalten werden, sonst schlägt die INSERT-Transaktion fehl.

Â&#x201E;

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Ă&#x;en und Kommas als Trennzeichen verwenden. Wenn Sie Werte fĂźr alle Spalten angeben, ist die Verwendung der column_list optional.

Â&#x201E;

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\  URZ V DIIHFWHG 

0LFKDHO'XQQ  




8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ





9HUZHQGHQGHU,16(57Â&#x17E;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

Â&#x201E;

$OOH=HLOHQGLHGLH6(/(&7$QZHLVXQJHUIÂ OOHQZHUGHQ HLQJHIÂ JW

Â&#x201E;

hEHUSUÂ IHQREGLH7DEHOOHLQGHUGLHQHXHQ=HLOHQ HLQJHIÂ JWZHUGHQYRUKDQGHQLVW

Â&#x201E;

6LFKHUVWHOOHQ GDVV GLH'DWHQW\SHQ NRPSDWLEHO VLQG

Â&#x201E;

(UPLWWHOQ RE6WDQGDUGZHUWHYRUKDQGHQRGHU18//:HUWH ]XOlVVLJVLQG

86(1RUWKZLQG 86(1RUWKZLQG ,16(57FXVWRPHUV ,16(57FXVWRPHUV 6(/(&7VXEVWULQJ 6(/(&7VXEVWULQJ ILUVWQDPH

ILUVWQDPH

 VXEVWULQJ ODVWQDPH

VXEVWULQJ ODVWQDPH

ODVWQDPH ODVWQDPH ILUVWQDPH ILUVWQDPH WLWOH WLWOH DGGUHVVFLW\ DGGUHVVFLW\ UHJLRQSRVWDOFRGH UHJLRQSRVWDOFRGH FRXQWU\KRPHSKRQH18// FRXQWU\KRPHSKRQH18// )520HPSOR\HHV )520HPSOR\HHV *2 *2

****************NUR FĂ&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;SSIG**************** Die INSERTâ&#x20AC;ŚSELECT-Anweisung fĂźgt einer Tabelle Zeilen hinzu, indem das Resultset einer SELECT-Anweisung eingefĂźgt wird. Verwenden Sie die INSERTâ&#x20AC;ŚSELECT-Anweisung, um einer vorhandenen Tabelle aus anderen Quellen Zeilen hinzuzufĂźgen. Das Verwenden der INSERTâ&#x20AC;ŚSELECT-Anweisung ist effizienter als das Schreiben mehrerer einzeiliger INSERT-Anweisungen. BerĂźcksichtigen Sie beim Verwenden der INSERTâ&#x20AC;ŚSELECT-Anweisung die folgenden Aspekte und Richtlinien: Â&#x201E;

Alle Zeilen, die die SELECT-Anweisung erfĂźllen, werden in die äuĂ&#x;erste Tabelle der Abfrage eingefĂźgt.

Â&#x201E;

Sie mĂźssen ĂźberprĂźfen, ob die Tabelle, in der die neuen Zeilen eingefĂźgt werden, in der Datenbank vorhanden ist.

Â&#x201E;

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.

Â&#x201E;

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(/(&7VXEVWULQJ ILUVWQDPH  VXEVWULQJ ODVWQDPH  ODVWQDPHILUVWQDPHWLWOHDGGUHVVFLW\ UHJLRQSRVWDOFRGHFRXQWU\KRPHSKRQH18// )520HPSOR\HHV *2 




8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ





(UVWHOOHQHLQHU7DEHOOHPLW+LOIHGHU6(/(&7,172$QZHLVXQJ ,QKDOWGLHVHU)ROLH

(UNOlUHQ6LHGHQ=ZHFNXQG GLH)XQNWLRQGHU6(/(&7 ,172$QZHLVXQJ

Â&#x201E;

(UVWHOOHQYRQ7DEHOOHQXQG(LQIÂ JHQYRQ=HLOHQLQHLQH 7DEHOOHLQHLQHUHLQ]LJHQ2SHUDWLRQ

Â&#x201E;

(UVWHOOHQ HLQHUORNDOHQWHPSRUlUHQ7DEHOOHRGHUHLQHU JOREDOHQWHPSRUlUHQ7DEHOOH

Â&#x201E;

(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Ă&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;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Ă&#x;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: Â&#x201E;

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.

Â&#x201E;

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. â&#x20AC;˘ Wenn Benutzer die Sitzung beenden, wird der Platz fĂźr eine lokale temporäre Tabelle wieder freigegeben.






8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ

â&#x20AC;˘ 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. Â&#x201E;

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}[,â&#x20AC;Ś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 Ă&#x201E;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    URZ V DIIHFWHG 

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(57VKLSSHUV FRPSDQ\QDPH

,16(57VKLSSHUV FRPSDQ\QDPH

9$/8(6 )LWFK 0DWKHU

9$/8(6 )LWFK 0DWKHU

*2 *2

(LQVWLHJ

Beispiel Beispiel 11

Ă&#x153;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  )LWFK 0DWKHUŠ  )LWFK 0DWKHUŠ *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Ă&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;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: Â&#x201E;

Listen Sie nur die Spaltennamen fĂźr diejenigen Daten auf, die Sie in der INSERT-Anweisung angeben.

Â&#x201E;

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.

Â&#x201E;

Geben Sie keine Spalten in der column_list an, die Ăźber die IDENTITYEigenschaft verfĂźgen oder Standard- oder NULL-Werte zulassen.

Â&#x201E;

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(57VKLSSHUV FRPSDQ\QDPH  9$/8(6 )LWFK 0DWKHU

 *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  )LWFK 0DWKHU  *2  VKLSSHULG &RPSDQ\1DPH

SKRQH

  URZ V DIIHFWHG

18//  

)LWFK 0DWKHU  

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(57VKLSSHUV FRPSDQ\QDPH  9$/8(6 )LWFK 0DWKHU

 *2  VKLSSHULG FRPSDQ\QDPH

SKRQH

  URZ V DIIHFWHG

18//  

)LWFK 0DWKHU  




8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ





(LQIÂ JHQYRQ'DWHQPLW+LOIHYRQ6SDOWHQVWDQGDUGZHUWHQ ,QKDOWGLHVHU)ROLH

Â&#x201E;

(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(57VKLSSHUV FRPSDQ\QDPHSKRQH

,16(57VKLSSHUV FRPSDQ\QDPHSKRQH

9$/8(6 .HQ\D&RIIHH&R '()$8/7

9$/8(6 .HQ\D&RIIHH&R '()$8/7

*2 *2 Â&#x201E;

'()$8/79$/8(66FKOÂ VVHOZRUW z z

)Â JW6WDQGDUGZHUWHIÂ UDOOH=HLOHQHLQ 6SDOWHQPÂ VVHQÂ EHUHLQHQ6WDQGDUGZHUWYHUIÂ JHQRGHU 18//:HUWH ]XODVVHQ

****************NUR FĂ&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;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: Â&#x201E;

SQL Server fĂźgt einen NULL-Wert fĂźr Spalten ein, die NULL-Werte zulassen und nicht Ăźber Standardwerte verfĂźgen.

Â&#x201E;

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.

Â&#x201E;

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.

Â&#x201E;

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(57VKLSSHUV FRPSDQ\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

  URZ V DIIHFWHG

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: Â&#x201E;

SQL Server fĂźgt einen NULL-Wert fĂźr Spalten ein, die NULL-Werte zulassen und Ăźber nicht Ăźber einen Standardwert verfĂźgen.

Â&#x201E;

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.

Â&#x201E;

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.

Â&#x201E;

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

Â&#x201E;

'LH'(/(7($QZHLVXQJHQWIHUQWHLQHRGHUPHKUHUH =HLOHQDXV7DEHOOHQVRIHUQGLH:+(5(.ODXVHOQLFKW YHUZHQGHWZLUG

Â&#x201E;

-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Ă&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;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: Â&#x201E;

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.

Â&#x201E;

Jede gelĂśschte Zeile wird im Transaktionsprotokoll protokolliert.




8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ





9HUZHQGHQGHU7581&$7(7$%/($QZHLVXQJ ,QKDOWGLHVHU)ROLH

%HVFKUHLEHQ6LHZLHGLH 7581&$7(7$%/($Q ZHLVXQJYHUZHQGHWZLUG

Â&#x201E;

'LH7581&$7(7$%/($QZHLVXQJHQWIHUQWDOOH=HLOHQ DXVHLQHU7DEHOOH

Â&#x201E;

64/6HUYHUEHKlOWGLH7DEHOOHQVWUXNWXUXQGGLH ]XJHRUGQHWHQ2EMHNWHEHL

Â&#x201E;

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Ă&#x153;R DIE VERWENDUNG DURCH DEN KURSLEITER ZULĂ&#x201E;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: Â&#x201E;

SQL Server lÜscht alle Zeilen, behält aber die Tabellenstruktur und die zugeordneten Objekte bei.