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 (LQIKUXQJ Einführung ...............................................................................................................1 Kursunterlagen.........................................................................................................2 Voraussetzungen......................................................................................................3 Kursbeschreibung ....................................................................................................4 Anhänge ...................................................................................................................7 Microsoft Official Curriculum .................................................................................8 Microsoft Certified Professional-Programm............................................................9 Einrichtungen.........................................................................................................11 8QWHUULFKWVHLQKHLW(LQIKUXQJLQ7UDQVDFW64/ Ü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 8QWHUULFKWVHLQKHLW9HUNQSIHQYRQPHKUHUHQ7DEHOOHQ Ü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(LQIKUXQJ]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]XQJHQIUGLH.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[ =HLWSODQIUGHQ.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. (LQIKUXQJ LLL +LQZHLVHIUGHQ.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 (LQIKUXQJ 6WUDWHJLHIUGLH8QWHUULFKWVHLQKHLW 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. (LQIKUXQJ (LQIKUXQJ ,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/ ,FKKHLH 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 VLFKWEHU,KUHQEHUXIOLFKHQ :HUGHJDQJXP,KUH.RP SHWHQ]DOV.XUVOHLWHUIU 64/6HUYHU]XXQWHU VWUHLFKHQ %LWWHQ6LHGLH.XUVWHLO QHKPHUVLFKDQKDQGGHU DXIJHIKUWHQ6WLFKSXQNWH YRU]XVWHOOHQ 0HWKRGLVFKHU+LQZHLV 1RWLHUHQ6LHZlKUHQGGHU 9RUVWHOOXQJGHU.XUVWHLO QHKPHUGHUHQ(UZDUWXQJHQ DQGHQ.XUVDXIHLQHU7DIHO RGHUHLQHP)OLSFKDUW (LQIKUXQJ .XUVXQWHUODJHQ ,QKDOWGLHVHU)ROLH =HLJHQXQGEHVFKUHLEHQ6LH GLH.XUVXQWHUODJHQ (LQVWLHJ :LUKDEHQDOOHIUGHQ.XUV HUIRUGHUOLFKHQ8QWHUODJHQ IU6LH]XVDPPHQJHVWHOOW $XI,KUHQ7LVFKHQILQGHQ6LH GLHIROJHQGHQ8QWHUODJHQ 1DPHQVVFKLOG $UEHLWVEXFKIU.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 )HHGEDFNERJHQDXVIOOHQ PVVHQ 7HLOHQ6LHGHQ.XUVWHLOQHK PHUQGLH$GUHVVHPLWDQ GLHVLH.RPPHQWDUHVHQGHQ N|QQHQ 0HWKRGLVFKHU+LQZHLV )KUHQ6LHYRUZLHGLHDXI GHU.XUVWHLOQHKPHU&' EHUHLWJHVWHOOWH:HEVHLWH JH|IIQHWZLUG'RSSHONOLFNHQ 6LHDXIGHU.XUVOHLWHU&'LP 2UGQHU6WXGHQW&'DXI 'HIDXOWKWP Das Kit enthält die folgenden Unterlagen: Namensschild. Schreiben Sie Ihren Namen auf beide Seiten des Namensschildes. Arbeitsbuch für Kursteilnehmer. Das Arbeitsbuch für Kursteilnehmer enthält die in diesem Kurs behandelten Themen sowie die Übungen der praktischen Übungseinheiten. Kursteilnehmer-CD. Die Kursteilnehmer-CD enthält die Webseite mit Hyperlinks zu den diesen Kurs betreffenden Ressourcen, einschließlich weiterführender Literatur, der Antworten zur Lernzielkontrolle und zu den Übungseinheiten, der Dateien mit den Übungseinheiten, der Multimediapräsentationen und der Websites mit für den Kurs relevanten Inhalten. $QPHUNXQJ Um die Webseite zu öffnen, legen Sie die Kursteilnehmer-CD in das CD-ROM-Laufwerk ein, und doppelklicken Sie dann im Stammverzeichnis der CD auf Default.htm. Feedbackbogen. Füllen Sie nach Beendigung des Kurses den Feedbackbogen aus, um Feedback zum Kursleiter, zum Kurs und zum Softwareprodukt abzugeben. Mit Hilfe Ihrer Kommentare können zukünftige Kurse weiter verbessert werden. Wenn Sie weitere Kommentare zu den Kursunterlagen abgeben möchten, können Sie eine entsprechende E-Mail an die folgende Adresse senden: [email protected]. Die Betreffzeile muss die Angabe Kurs 2316 (2071) enthalten. Wenn Sie weitere Kommentare zum Microsoft Certified ProfessionalProgramm abgeben oder sich über dieses Programm informieren möchten, können Sie eine E-Mail an die folgende Adresse senden: [email protected] (LQIKUXQJ 9RUDXVVHW]XQJHQ ,QKDOWGLHVHU)ROLH %HQHQQHQXQGEHVFKUHLEHQ 6LHGLH9RUDXVVHW]XQJHQIU GLHVHQ.XUV (UIDKUXQJLP9HUZHQGHQHLQHV0LFURVRIW:LQGRZV %HWULHEVV\VWHPV .HQQWQLVVHGHUJUXQGOHJHQGHQ.RQ]HSWHUHODWLRQDOHU 'DWHQEDQNHQ .HQQWQLVGHU5ROOHGHV'DWHQEDQNDGPLQLVWUDWRUV (LQVWLHJ )UGLHVHQ.XUVPVVHQ6LH EHUGLHIROJHQGHQ .HQQWQLVVHYHUIJHQ ****************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. (LQIKUXQJ .XUVEHVFKUHLEXQJ ,QKDOWGLHVHU)ROLH *HEHQ6LHHLQHhEHUVLFKW EHUGLHHLQ]HOQHQ8QWHU ULFKWVHLQKHLWHQXQG/HUQ ]LHOH (LQVWLHJ ,QGLHVHP.XUVZHUGHQ IROJHQGH7KHPHQ EHKDQGHOW 8QWHUULFKWVHLQKHLW(LQIKUXQJLQ7UDQVDFW64/ 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 JHlXHUWHQ(UZDUWXQJHQ GHU.XUVWHLOQHKPHU HQWVSUHFKHQ Unterrichtseinheit 1, „Einführung in Transact-SQL“, gibt eine kurze Übersicht über Transact-SQL als Programmiersprache und beschreibt verschiedene Methoden zum Ausführen von Transact-SQL. Es wird vorausgesetzt, dass die Kursteilnehmer ANSI-SQL (American National Standards Institute) und grundlegende Programmierkonzepte kennen. Dazu gehören Funktionen, Operatoren, Variablen und Anweisungen zur Ablaufsteuerung. Am Ende dieser Unterrichtseinheit werden Sie in der Lage sein, die Elemente von Transact-SQL zu beschreiben. Unterrichtseinheit 2, „Verwenden von Transact-SQL-Abfragetools“, beschreibt verschiedene in Microsoft SQL Server™ verfügbare Abfragetools und deren Verwendung zum Ausführen von Transact-SQL-Skripts. Am Ende dieser Unterrichtseinheit werden Sie in der Lage sein, die primären Transact-SQLAbfragetools in SQL Server zu beschreiben und Transact-SQL-Skripts auf unterschiedliche Arten auszuführen. Unterrichtseinheit 3, „Abrufen von Daten“, behandelt die SELECT-Anweisung ausführlich. Es werden viele Beispiele verwendet, um des Sortieren von Daten, das Löschen von Duplikaten und das Ändern des Resultsetformats vorzuführen. Am Ende dieser Unterrichtseinheit werden Sie in der Lage sein, die SELECTAnweisung zum Abrufen von Daten zu verwenden. Unterrichtseinheit 4, „Gruppieren und Zusammenfassen von Daten“, erläutert das Gruppieren von Daten mit Hilfe von Aggregatfunktionen. Außerdem wird erläutert, wie Zusammenfassungsberichte generiert werden und wie Werte in einem Resultset aufgelistet werden. Am Ende dieser Unterrichtseinheit werden Sie in der Lage sein, Zusammenfassungsdaten für eine Tabelle zu generieren und zu gruppieren. (LQIKUXQJ .XUVEHVFKUHLEXQJ)RUWVHW]XQJ 8QWHUULFKWVHLQKHLW9HUNQSIHQYRQPHKUHUHQ7DEHOOHQ 8QWHUULFKWVHLQKHLW$UEHLWHQPLW8QWHUDEIUDJHQ 8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ 8QWHUULFKWVHLQKHLW$EIUDJHQYRQ9ROOWH[WLQGL]HV ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Unterrichtseinheit 5, „Verknüpfen von mehreren Tabellen“, vermittelt Informationen zum Abfragen mehrerer Tabellen mit Hilfe verschiedener Verknüpfungstypen, zum Kombinieren von Resultsets mit Hilfe des UNION-Operators und zum Erstellen von Tabellen mit Hilfe der SELECT INTO-Anweisung. Am Ende dieser Unterrichtseinheit werden Sie in der Lage sein, Daten und mehrere Resultsets zu kombinieren. Unterrichtseinheit 6, „Arbeiten mit Unterabfragen“, stellt erweiterte Abfragetechniken vor, einschließlich geschachtelter und korrelierter Unterabfragen. Außerdem wird erläutert, wann und wie diese Techniken verwendet werden, um komplizierte Abfragen zu untergliedern und auszuführen. Am Ende dieser Unterrichtseinheit werden Sie in der Lage sein, Abfragen zu schreiben, die Abfragen mit einem einzigen Wert, Abfragen mit mehreren Werten und korrelierte Abfragen verwenden, um Resultsets zu beschränken und um mehrere Verarbeitungsschritte zu einer SELECT-Anweisung zusammenzufassen. Unterrichtseinheit 7, „Ändern von Daten“, erläutert die Funktionsweise von Transaktionen. Außerdem wird erläutert, wie INSERT-, DELETE- und UPDATE-Anweisungen geschrieben werden, um Daten in Tabellen zu ändern. Am Ende dieser Unterrichtseinheit werden Sie in der Lage sein, Daten in Tabellen auf verschiedene Weisen zu ändern. Unterrichtseinheit 8, „Abfragen von Volltextindizes“, beschreibt den Microsoft Search-Dienst. Außerdem wird beschrieben, wie auf Informationen zu Indizes für Textfelder zugegriffen wird und wie diese Volltextindizes abgefragt werden. Am Ende dieser Unterrichtseinheit werden Sie in der Lage sein, die Funktionen und Komponenten des Microsoft Search-Dienstes zu beschreiben, Informationen zu Volltextindizes zusammenzustellen und Volltextabfragen zu schreiben. (LQIKUXQJ .XUVEHVFKUHLEXQJ)RUWVHW]XQJ 8QWHUULFKWVHLQKHLW(LQIKUXQJ]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. (LQIKUXQJ $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. (LQIKUXQJ 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. (LQIKUXQJ 0LFURVRIW&HUWLILHG3URIHVVLRQDO3URJUDPP ,QKDOWGLHVHU)ROLH ,QIRUPLHUHQ6LHGLH.XUV WHLOQHKPHUEHUGDV 0LFURVRIW&HUWLILHG 3URIHVVLRQDO3URJUDPP (LQVWLHJ 'DV0LFURVRIW&HUWLILHG 3URIHVVLRQDO3URJUDPP YHUIJWEHUGLHIROJHQGHQ =HUWLIL]LHUXQJHQ 0LFURVRIW &HUWLILHG6\VWHPV(QJLQHHU0&6( 0LFURVRIW&HUWLILHG'DWDEDVH$GPLQLVWUDWRU0&'%$ 0LFURVRIW&HUWLILHG6ROXWLRQ'HYHORSHU0&6' 0LFURVRIW&HUWLILHG3URIHVVLRQDO6LWH%XLOGLQJ 0&36LWH%XLOGLQJ 0LFURVRIW&HUWLILHG3URIHVVLRQDO0&3 0LFURVRIW&HUWLILHG7UDLQHU0&7 ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Das Microsoft Certified Professional-Programm (MCP) ist die beste Möglichkeit, um Ihre Kompetenz als Experte von Microsoft-Produkten und -Technologien zu belegen. In der folgenden Tabelle werden die Zertifizierungen ausführlich erläutert. Zertifizierung Beschreibung Microsoft Certified Systems Engineer (MCSE) MCSEs verfügen über die Qualifikation, Informationssysteme in einer Vielzahl von Computerumgebungen unter Microsoft Windows NT® Server und BackOffice effizient zu planen, zu implementieren, zu verwalten und zu unterstützen. Microsoft Certified Database Administrator (MCDBA) MCDBAs verfügen über die Qualifikation zum Erstellen physischer Datenbankentwürfe, Entwickeln logischer Datenmodelle, Erstellen physischer Datenbanken, Erstellen von Datendiensten mit Hilfe von Transact-SQL, Verwalten und Pflegen von Datenbanken, Konfigurieren und Verwalten der Sicherheit, Überwachen und Optimieren von Datenbanken, sowie Installieren und Konfigurieren von SQL Server. Microsoft Certified Solution Developer (MCSD) MCSDs verfügen über die Qualifikation, mit Hilfe von Microsoft-Produkten, wie z. B. SQL Server, Microsoft Visual Studio® und Komponentendienste, webbasierte, verteilte und für den Handel einsetzbare Anwendungen zu erstellen. Microsoft Certified Professional + Site Building (MCP + Site Building) MCPs mit einer Spezialisierung im Bereich Sitebuilding sind qualifiziert, Websites mit Microsoft-Technologien und -Produkten zu planen, zu erstellen, zu warten und zu verwalten. (LQIKUXQJ (Fortsetzung) Zertifizierung Beschreibung Microsoft Certified Professional (MCP) MCPs verfügen über detaillierte Kenntnisse zu mindestens einem Produkt. Diese Kenntnisse müssen in einer beliebigen Prüfung (ausgenommen Netzwerkgrundlagen) nachgewiesen werden. Microsoft Certified Trainer (MCT) MCTs verfügen über spezielle didaktische und technische Fähigkeiten, die sie dazu qualifizieren, das Microsoft Official Curriculum (MOC) in Microsoft Certified Technical Education Centers (Microsoft CTECs) zu unterrichten. =HUWLIL]LHUXQJVDQIRUGHUXQJHQ Die Zertifizierungsanforderungen unterscheiden sich je nach Zertifizierungsart und orientieren sich an den Produkten und Tätigkeiten, für die die jeweilige Zertifizierung gilt. Um den Status eines Microsoft Certified Professionals zu erlangen, müssen Sie strenge Zertifizierungsprüfungen absolvieren, die eine gültige und zuverlässige Messung der technischen Fertigkeiten und Sachkenntnisse zulassen. :HLWHUH,QIRUPDWLRQHQ Weitere Informationen finden Sie in der Website zu Microsoft Training und Zertifizierung unter der folgenden Adresse: http://www.microsoft.com/germany/ms/training/ Sie können auch eine E-Mail an [email protected] senden, falls Sie Fragen zur Zertifizierung haben. 9RUEHUHLWHQDXIHLQH0&33UIXQJ 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/ (LQIKUXQJ (LQULFKWXQJHQ ,QKDOWGLHVHU)ROLH ,QIRUPLHUHQ6LHGLH.XUV WHLOQHKPHUEHUGLH|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 QHKPHUEHUGLH.XUV]HLWHQ 0DKO]HLWHQgIIQXQJV]HLWHQ GHV*HElXGHVIUGLH%H DUEHLWXQJGHUhEXQJVHLQ KHLWHQ3DUNP|JOLFKNHLWHQ 7RLOHWWHQ5DXFKHU]RQHQ 7HOHIRQHXQG0|JOLFKNHLWHQ ]XUhEHUPLWWOXQJYRQ1DFK ULFKWHQ ,QIRUPLHUHQ6LHGLH.XUVWHLO QHKPHUJHJHEHQHQIDOOV DXFKEHUGDV5HF\FOLQJ SURJUDPP (LQIKUXQJ 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(LQIKUXQJLQ7UDQVDFW64/ LLL +LQZHLVHIUGHQ.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. 6WUDWHJLHIUGLH8QWHUULFKWVHLQKHLW 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(LQIKUXQJLQ7UDQVDFW64/ 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(LQIKUXQJLQ7UDQVDFW64/ 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(LQIKUXQJLQ7UDQVDFW64/ 'LH3URJUDPPLHUVSUDFKH7UDQVDFW64/ ,QKDOWGLHVHU)ROLH 6WHOOHQ6LHGLH7DWVDFKH KHUDXVGDVV64/6HUYHU EHUHLQHHLJHQH3URJUDP PLHUVSUDFKHYHUIJW (LQVWLHJ %HL7UDQVDFW64/KDQGHOW HVVLFKXPHLQH9HUVLRQGHU 64/3URJUDPPLHUVSUDFKH GLHDXVVFKOLHOLFKLQ 64/6HUYHUYHUZHQGHWZLUG ,PSOHPHQWLHUXQJGHU(LQJDQJVVWXIH(QWU\/HYHOGHV $16,64/,626WDQGDUGV .DQQ YRQMHGHPPLWGHU$16,64/(LQJDQJVVWXIH NRPSDWLEOHQ3URGXNWDXVJHIKUWZHUGHQ (QWKlOW]XVlW]OLFKHHLQ]LJDUWLJH)XQNWLRQDOLWlW ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** ANSI (American National Standards Institute) und ISO (International Standards Organization) haben Standards für SQL definiert. Bei der Verwendung von Transact-SQL unterstützt Microsoft® SQL Server™ 2000 die Implementierung der Eingangsstufe (Entry Level) von SQL-92, dem SQL-Standard, der 1992 von ANSI und ISO veröffentlicht wurde. Die mit ANSI-SQL kompatiblen Sprachelemente von Transact-SQL können von jedem mit der ANSI-SQL-Eingangsstufe kompatiblen Produkt ausgeführt werden. Transact-SQL enthält außerdem mehrere Erweiterungen, die eine verbesserte Funktionalität bereitstellen. 8QWHUULFKWVHLQKHLW(LQIKUXQJLQ7UDQVDFW64/ 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 IKUHQYRQ7UDQVDFW64/ $QZHLVXQJHQYHUZHQGHQ 6LHHLQLJHGLHVHU7\SHQYRQ 7UDQVDFW64/ $QZHLVXQJHQ ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** 0HWKRGLVFKHU+LQZHLV :HLVHQ6LHGDUDXIKLQGDVV GHU6FKZHUSXQNWGLHVHV .XUVHVDXIGHU9HUZHQGXQJ YRQ'0/$QZHLVXQJHQ 'DWD0DQLSXODWLRQ /DQJXDJHOLHJW Eine Abfrage ist eine Anforderung von in SQL Server gespeicherten Daten. Bei allen Abfragen wird dem Benutzer das Resultset einer SELECT-Anweisung angezeigt. Ein Resultset ist eine tabellarische, aus Spalten und Zeilen bestehende Anordnung der Daten aus der SELECT-Anweisung. Das Schreiben und Ausführen von Transact-SQL-Anweisungen stellt eine Möglichkeit dar, eine Abfrage an SQL Server auszugeben. Beim Schreiben und Ausführen von Transact-SQL-Anweisungen verwenden Sie folgende Elemente: DDL-Anweisungen (Data Definition Language), mit denen Sie Objekte in der Datenbank erstellen können. DCL-Anweisungen (Data Control Language), mit denen Sie ermitteln können, wer die Daten anzeigen und ändern kann. DML-Anweisungen (Data Manipulation Language), mit denen Sie die Daten abfragen und ändern können. $QPHUNXQJ In diesem Kurs wird schwerpunktmäßig das Verwenden von DML-Anweisungen zum Abfragen von Daten in SQL Server behandelt. 8QWHUULFKWVHLQKHLW(LQIKUXQJLQ7UDQVDFW64/ ''/$QZHLVXQJHQ ,QKDOWGLHVHU)ROLH *HEHQ6LHGHQ.XUVWHLO QHKPHUQHLQH(LQIKUXQJLQ ''/$QZHLVXQJHQ (LQVWLHJ ''/$QZHLVXQJHQGHILQLH UHQHLQH'DWHQEDQNLQGHP 'DWHQEDQNHQ7DEHOOHQXQG EHQXW]HUGHILQLHUWH'DWHQ W\SHQHUVWHOOWZHUGHQ 'HILQLHUHQGHU'DWHQEDQNREMHNWH z &5($7(REMHFWBQDPH z $/7(5REMHFWBQDPH z '523REMHFWBQDPH (QWVSUHFKHQGH%HUHFKWLJXQJHQZHUGHQEHQ|WLJW 86(1RUWKZLQG 86(1RUWKZLQG &5($7(7$%/(FXVWRPHU &5($7(7$%/(FXVWRPHU FXVWBLGLQWFRPSDQ\YDUFKDU FXVWBLGLQWFRPSDQ\YDUFKDU FRQWDFWYDUFKDUSKRQHFKDU FRQWDFWYDUFKDUSKRQHFKDU *2 *2 ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** :HLWHUH,QIRUPDWLRQHQ :HLWHUH,QIRUPDWLRQHQ]X ''/$QZHLVXQJHQILQGHQ 6LHLP.XUV$ 9HUZDOWHQHLQHU0LFURVRIW 64/6HUYHU 'DWHQEDQN DDL-Anweisungen (Data Definition Language) definieren die Datenbank, indem Datenbanken, Tabellen und benutzerdefinierte Datentypen erstellt werden. Darüber hinaus können Sie mit DDL-Anweisungen Datenbankobjekte verwalten. Zu den DDL-Anweisungen zählen folgende: CREATE object_name ALTER object_name DROP object_name Standardmäßig können nur die Mitglieder der Rollen sysadmin, dbcreator, db_owner oder db_ddladmin DDL-Anweisungen ausführen. Im Allgemeinen wird empfohlen, dass keine anderen Konten zum Erstellen von Datenbankobjekten verwendet werden. Wenn verschiedene Benutzer eigene Objekte in einer Datenbank erstellen, muss jeder Objektbesitzer jedem Benutzer dieser Objekte die entsprechenden Berechtigungen erteilen. Wegen des enormen Verwaltungsaufwands sollte dies vermieden werden. Durch das Beschränken der Anweisungsberechtigungen auf diese Rollen können darüber hinaus auch Probleme mit dem Objektbesitz vermieden werden. Solche Probleme können auftreten, wenn ein Objektbesitzer aus einer Datenbank entfernt wurde oder wenn der Besitzer einer gespeicherten Prozedur oder Sicht nicht der Besitzer der zugrunde liegenden Tabellen ist. %HLVSLHO Das folgende Skript erstellt in der Northwind-Datenbank eine Tabelle mit dem Namen customer. Es schließt die Spalten cust_id, company, contact und phone ein. 86(1RUWKZLQG &5($7(7$%/(FXVWRPHU FXVWBLGLQWFRPSDQ\YDUFKDUFRQWDFWYDUFKDU SKRQHFKDU *2 8QWHUULFKWVHLQKHLW(LQIKUXQJLQ7UDQVDFW64/ '&/$QZHLVXQJHQ ,QKDOWGLHVHU)ROLH *HEHQ6LHGHQ.XUVWHLO QHKPHUQHLQH(LQIKUXQJLQ '&/$QZHLVXQJHQ (LQVWLHJ '&/$QZHLVXQJHQVWHXHUQ GHQ=XJULIIDXI'DWHQEDQN REMHNWHXQGDXIGLH %HUHFKWLJXQJEHVWLPPWH $QZHLVXQJHQDXV]XIKUHQ 6HW]HQRGHUbQGHUQYRQ%HUHFKWLJXQJHQ z *5$17 z '(1< z 5(92.( (QWVSUHFKHQGH%HUHFKWLJXQJHQZHUGHQEHQ|WLJW 86(1RUWKZLQG 86(1RUWKZLQG *5$176(/(&721SURGXFWV72SXEOLF *5$176(/(&721SURGXFWV72SXEOLF *2 *2 ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** 0HWKRGLVFKHU+LQZHLV :HLWHUH,QIRUPDWLRQHQ]X '&/$QZHLVXQJHQILQGHQ 6LHLP.XUV$ 9HUZDOWHQHLQHU0LFURVRIW 64/6HUYHU 'DWHQEDQN DCL-Anweisungen (Data Control Language) werden verwendet, um die mit einem Datenbankbenutzer oder einer Datenbankrolle verbundenen Berechtigungen zu ändern. In der folgenden Tabelle werden die DCL-Anweisungen beschrieben. Anweisung Beschreibung GRANT Erstellt einen Eintrag im Sicherheitssystem, der es einem Benutzer ermöglicht, mit Daten zu arbeiten oder bestimmte Transact-SQLAnweisungen auszuführen. DENY Erstellt einen Eintrag im Sicherheitssystem, der eine Berechtigung eines Sicherheitskontos verweigert und verhindert, dass der Benutzer, die Gruppe oder die Rolle die Berechtigung über die Gruppen- und Rollenmitgliedschaft erbt. REVOKE Entfernt eine zuvor erteilte oder verweigerte Berechtigung. Standardmäßig können nur die Mitglieder der Rollen sysadmin, dbcreator, db_owner oder db_securityadmin DCL-Anweisungen ausführen. %HLVSLHO In diesem Beispiel wird der public-Rolle die Berechtigung erteilt, die products-Tabelle abzufragen. 86(1RUWKZLQG *5$176(/(&721SURGXFWV72SXEOLF *2 8QWHUULFKWVHLQKHLW(LQIKUXQJLQ7UDQVDFW64/ '0/$QZHLVXQJHQ ,QKDOWGLHVHU)ROLH *HEHQ6LHGHQ.XUVWHLO QHKPHUQHLQH(LQIKUXQJLQ '0/$QZHLVXQJHQ %HQXW]HQ6LH'0/$QZHLVXQJHQXP'DWHQ]XlQGHUQ RGHU,QIRUPDWLRQHQDE]XUXIHQ z 6(/(&7 z ,16(57 z 83'$7( z '(/(7( (QWVSUHFKHQGH%HUHFKWLJXQJHQZHUGHQEHQ|WLJW (LQVWLHJ '0/$QZHLVXQJHQDUEHLWHQ PLWGHQ'DWHQLQGHU 'DWHQEDQN 86(1RUWKZLQG 86(1RUWKZLQG 6(/(&7FDWHJRU\LGSURGXFWQDPHSURGXFWLGXQLWSULFH 6(/(&7FDWHJRU\LGSURGXFWQDPHSURGXFWLGXQLWSULFH )520SURGXFWV )520SURGXFWV *2 *2 ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** DML-Anweisungen (Data Manipulation Language) arbeiten mit den Daten in der Datenbank. Mit Hilfe von DML-Anweisungen können Sie Daten ändern oder Informationen abrufen. Zu den DML-Anweisungen zählen folgende: %HLVSLHO SELECT INSERT UPDATE DELETE In diesem Beispiel werden die Kategoriekennung, der Produktname, die Product ID und der Stückpreis der Produkte in der Northwind-Datenbank abgerufen. 86(1RUWKZLQG 6(/(&7FDWHJRU\LGSURGXFWQDPHSURGXFWLGXQLWSULFH )520SURGXFWV *2 8QWHUULFKWVHLQKHLW(LQIKUXQJLQ7UDQVDFW64/ 7UDQVDFW64/6\QWD[HOHPHQWH ,QKDOWGLHVHU)ROLH 6WHOOHQ6LHYHUVFKLHGHQH 6\QWD[HOHPHQWHYRQ 7UDQVDFW64/YRU %DWFKDQZHLVXQJHQ 6\VWHPIXQNWLRQHQ (LQVWLHJ .RPPHQWDUH 2SHUDWRUHQ %H]HLFKQHU $XVGUFNH 'DWHQW\SHQ 9DULDEOHQ 6SUDFKHOHPHQWH]XU $EODXIVWHXHUXQJ 5HVHUYLHUWH 6FKOVVHOZ|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(LQIKUXQJLQ7UDQVDFW64/ %DWFKDQZHLVXQJHQ ,QKDOWGLHVHU)ROLH )KUHQ6LHYRUZLH%DWFKHV YRQ7UDQVDFW64/DXVJH IKUWZHUGHQ (LQVWLHJ *2 z :HOFKHV7RRO6LHDXFK YHUZHQGHQ6LHPVVHQ ZLVVHQDXIZHOFKH$UWXQG :HLVHGHU7UDQVDFW64/ &RGHYHUDUEHLWHWZHUGHQ VROO z .HQQ]HLFKQHW%DWFKHVYRQ7UDQVDFW64/$QZHLVXQJHQ IU7RROVXQG'LHQVWSURJUDPPH ,VWNHLQHZLUNOLFKH7UDQVDFW64/$QZHLVXQJ (;(& z z )KUWHLQHEHQXW]HUGHILQLHUWH)XQNWLRQHLQH6\VWHP SUR]HGXUHLQHEHQXW]HUGHILQLHUWHJHVSHLFKHUWH3UR]HGXU RGHUHLQHHUZHLWHUWHJHVSHLFKHUWH3UR]HGXUGXUFK 6WHXHUWGLH$XVIKUXQJHLQHU=HLFKHQIROJHLQHLQHP 7UDQVDFW64/%DWFK ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** SQL Server verarbeitet einzelne oder mehrere Transact-SQL-Anweisungen in Batches. Eine Batchanweisung weist SQL Server an, alle Anweisungen im Batch zu analysieren und auszuführen. Es gibt zwei Standardmethoden, mit denen Batches an SQL Server ausgegeben werden. *2 SQL Server-Dienstprogramme interpretiert GO als Signal dafür, dass der aktuelle Batch von Transact-SQL-Anweisungen an SQL Server gesendet werden soll. Ein GO-Befehl kennzeichnet Batches von Transact-SQLAnweisungen für Tools und Dienstprogramme und beendet Batches. Ein GOBefehl ist keine wirkliche Transact-SQL-Anweisung. Beachten Sie die folgenden Punkte, wenn Sie GO verwenden: Der aktuelle Batch von Anweisungen umfasst sämtliche Anweisungen, die seit dem letzten GO-Befehl oder seit dem Beginn der Ad-hoc-Sitzung (bzw. seit dem letzten Skript, wenn der erste GO-Befehl ein Skript ist) eingegeben wurden. Eine Transact-SQL-Anweisung kann nicht die gleiche Zeile belegen wie ein GO-Befehl, obwohl die Zeile Kommentare enthalten kann. Benutzer müssen die Regeln für Batches befolgen. So müssen einige DDL-Anweisungen z. B. getrennt von anderen TransactSQL-Anweisungen ausgeführt werden, indem die Anweisungen mit einem GO-Befehl getrennt werden. Der Gültigkeitsbereich von lokalen (benutzerdefinierten) Variablen ist auf einen Batch beschränkt; nach einem GO-Befehl kann daher nicht auf eine dieser Variablen verwiesen werden. $QPHUNXQJ GO ist keine wirkliche Transact-SQL-Anweisung; der GO-Befehl wird verwendet, um Batches für Tools und Dienstprogramme zu kennzeichnen. 8QWHUULFKWVHLQKHLW(LQIKUXQJLQ7UDQVDFW64/ (;(& 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(LQIKUXQJLQ7UDQVDFW64/ .RPPHQWDUH ,QKDOWGLHVHU)ROLH *HEHQ6LHGHQ.XUVWHLO QHKPHUQHLQH(LQIKUXQJLQ GLHDOOJHPHLQH9HUZHQGXQJ YRQ.RPPHQWDUHQ (LQVWLHJ .RPPHQWDUHVLQGQLFKW DXV]XIKUHQGH=HLFKHQ IROJHQGLHLQ$QZHLVXQJHQ SODW]LHUWZHUGHQN|QQHQ XPGLH$QZHLVXQJ]X NRPPHQWLHUHQRGHU7HLOH GDYRQZlKUHQGGHV7HVWHQV ]XGHDNWLYLHUHQ ,QOLQH.RPPHQWDUH Beispiel Beispiel 11 6(/(&7SURGXFWQDPH 6(/(&7SURGXFWQDPH XQLWVLQVWRFN XQLWVLQVWRFN XQLWVRQRUGHU XQLWVRQRUGHU %HUHFKQHWGDV,QYHQWDU %HUHFKQHWGDV,QYHQWDU VXSSOLHU,' VXSSOLHU,' )520SURGXFWV )520SURGXFWV *2 *2 %ORFNNRPPHQWDUH Beispiel Beispiel 33 'LHVHV&RGHEHLVSLHOUXIWDOOH=HLOHQGHU 'LHVHV&RGHEHLVSLHOUXIWDOOH=HLOHQGHU SURGXFWV7DEHOOHDEXQG]HLJWGHQ(LQKHLWVSUHLVGHQ SURGXFWV7DEHOOHDEXQG]HLJWGHQ(LQKHLWVSUHLVGHQ (LQKHLWVSUHLVHUK|KWXP3UR]HQWXQGGHQ1DPHQGHV (LQKHLWVSUHLVHUK|KWXP3UR]HQWXQGGHQ1DPHQGHV 3URGXNWVDQ 3URGXNWVDQ 86(1RUWKZLQG 86(1RUWKZLQG 6(/(&7XQLWSULFHXQLWSULFHSURGXFWQDPH 6(/(&7XQLWSULFHXQLWSULFHSURGXFWQDPH )520SURGXFWV )520SURGXFWV *2 *2 ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** 0HWKRGLVFKHU+LQZHLV ,QOLQH.RPPHQWDUHDP$Q IDQJGHU=HLOHN|QQHQEHL GHU%HKDQGOXQJYRQ3UR EOHPHQPLW6NULSWVKHOIHQ Kommentare sind nicht auszuführende Textzeichenfolgen, die in Anweisungen platziert werden, um die von der Anweisung ausgeführte Aktion zu beschreiben oder eine oder mehrere Zeilen der Anweisung zu deaktivieren. Kommentare können auf zwei Arten verwendet werden - in derselben Zeile wie die Anweisung (Inline) oder als Block. ,QOLQH.RPPHQWDUH Inline-Kommentare können mit Hilfe von zwei Bindestrichen (--) erstellt werden, mit denen ein Kommentar von einer Anweisung abgegrenzt wird. Transact-SQL ignoriert Text, der rechts von den Kommentarzeichen steht. Darüber hinaus können mit diesem Kommentarzeichen auch Zeilen einer Anweisung deaktiviert werden. %HLVSLHO In diesem Beispiel wird in einem Inline-Kommentar erklärt, welche Art von Berechnung durchgeführt wird. 86(1RUWKZLQG 6(/(&7SURGXFWQDPH XQLWVLQVWRFNXQLWVRQRUGHU%HUHFKQHWGDV,QYHQWDU VXSSOLHULG )520SURGXFWV *2 %HLVSLHO 8QWHUULFKWVHLQKHLW(LQIKUXQJLQ7UDQVDFW64/ In diesem Beispiel wird mit einem Inline-Kommentar verhindert, dass ein Teil einer Anweisung ausgeführt wird. 86(1RUWKZLQG 6(/(&7SURGXFWQDPH XQLWVLQVWRFNXQLWVRQRUGHU%HUHFKQHWGDV,QYHQWDU VXSSOLHULG )520SURGXFWV *2 %ORFNNRPPHQWDUH Sie können Kommentarblöcke mit mehreren Zeilen erstellen, indem Sie ein Kommentarzeichen (/*) am Anfang des Kommentartextes platzieren, dann die Kommentare eingeben und den Kommentar mit einem abschließenden Kommentarzeichen (*/) beenden. Mit diesem Kommentarkennzeichner können Sie eine oder mehrere Zeilen umfassende Kommentare oder Kommentarheader erstellen - beschreibenden Text, der die nachfolgenden Anweisungen dokumentiert. Kommentarheader schließen häufig den Namen des Verfassers, das Datum der Erstellung und letzten Änderung des Skripts, sowie Versionsinformationen und eine Beschreibung der von der Anweisung ausgeführten Aktion ein. %HLVSLHO Dieses Beispiel zeigt einen Kommentarheader, der mehrere Zeilen umfasst. 'LHVHV&RGHEHLVSLHOUXIWDOOH=HLOHQGHUSURGXFWV7DEHOOH DEXQG]HLJWGHQ(LQKHLWVSUHLVGHQ(LQKHLWVSUHLVHUK|KWXP 3UR]HQWXQGGHQ1DPHQGHV3URGXNWVDQ 86(1RUWKZLQG 6(/(&7XQLWSULFHXQLWSULFHSURGXFWQDPH )520SURGXFWV *2 $QPHUNXQJ Sie sollten im gesamten Skript Kommentare platzieren, sodass die von den Anweisungen ausgeführten Aktionen beschrieben werden. Dies ist besonders wichtig, wenn andere Personen das Skript überprüfen und implementieren müssen. %HLVSLHO Dieser Abschnitt eines Skripts ist in Kommentarzeichen gesetzt, damit er nicht ausgeführt wird. Dies kann beim Debuggen oder bei der Problembehandlung in einer Skriptdatei hilfreich sein. '(&/$5(#YLQW 6(7#Y :+,/(#Y %(*,1 6(/(&7#Y #Y 6(/(&7#Y (1' 8QWHUULFKWVHLQKHLW(LQIKUXQJLQ7UDQVDFW64/ %H]HLFKQHU ,QKDOWGLHVHU)ROLH 6WHOOHQ6LHGLH5HJHOQ]XP %HQHQQHQYRQ64/6HUYHU 2EMHNWHQ5HJHOQIU %H]HLFKQHUYRU 6WDQGDUGPlLJH%H]HLFKQHU z 'DVHUVWH=HLFKHQPXVVHLQDOSKDEHWLVFKHV=HLFKHQVHLQ z $QGHUH=HLFKHQN|QQHQDXV%XFKVWDEHQ=DKOHQRGHU 6\PEROHQEHVWHKHQ z %H]HLFKQHUGLHPLWHLQHP6\PEROEHJLQQHQZHUGHQLQ EHVRQGHUHQ)lOOHQYHUZHQGHW %HJUHQ]WH%H]HLFKQHU z :HUGHQ EHQXW]WZHQQ 1DPHQHLQJHEHWWHWH/HHU]HLFKHQ HQWKDOWHQ z :HUGHQ EHQXW]WZHQQ UHVHUYLHUWH :|UWHU 7HLOH YRQ1DPHQ VLQG z 0VVHQLQ.ODPPHUQ>@ RGHU GRSSHOWH$QIKUXQJV]HLFKHQ JHVHW]WZHUGHQ (LQVWLHJ 64/6HUYHUVWHOOWHLQH5HLKH VWDQGDUGPlLJHU%H QHQQXQJVUHJHOQIU2EMHNW EH]HLFKQHUEHUHLWVRZLHHLQH 0HWKRGH]XP9HUZHQGHQ YRQ7UHQQ]HLFKHQIU %H]HLFKQHUGLHQLFKWGHP 6WDQGDUGHQWVSUHFKHQ ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** 0HWKRGLVFKHU+LQZHLV )KUHQ6LHYRUZLH 64/6HUYHU4XHU\$QDO\]HU GLH$QZHLVXQJVHOHPHQWH DXWRPDWLVFKIDUEFRGLHUWXP UHVHUYLHUWH:|UWHU=HLFKHQ IROJHQXVZDQ]X]HLJHQ SQL Server stellt eine Reihe standardmäßiger Benennungsregeln für Objektbezeichner bereit sowie eine Methode zum Verwenden von Trennzeichen für Bezeichner, die nicht dem Standard entsprechen. Es wird empfohlen, dass Sie Objekte mit Hilfe der standardmäßigen Zeichen für Bezeichner benennen, falls dies möglich ist. 6WDQGDUGPlLJH%H]HLFKQHU Standardmäßige Bezeichner können zwischen einem und 128 Zeichen enthalten, darunter Buchstaben, Symbole (_, @, oder #) und Zahlen. Standardmäßige Bezeichner dürfen keine eingebetteten Leerzeichen enthalten. Zu den Regeln für das Verwenden von Bezeichnern zählen folgende: Das erste Zeichen muss ein alphabetisches Zeichen sein (a-z oder A-Z). Nach dem ersten Zeichen kann ein Bezeichner Buchstaben, Zahlen oder eines der Symbole @, $, # oder _ einschließen. Bezeichnernamen, die mit einem Symbol beginnen, werden in besonderen Fällen verwendet: • Ein mit dem Symbol @ beginnender Bezeichner steht für eine lokale Variable oder einen lokalen Parameter. • Ein mit einem Nummernzeichen (#) beginnender Bezeichner steht für eine temporäre Tabelle oder Prozedur. • Ein mit einem doppelten Nummernzeichen (##) beginnender Bezeichner steht für ein globales temporäres Objekt. $QPHUNXQJ Namen für temporäre Objekte sollten einschließlich Nummernzeichen (#) oder doppeltem Nummernzeichen (##) eine Länge von 116 Zeichen nicht überschreiten, da SQL Server an temporäre Objekte ein internes numerisches Suffix vergibt. 8QWHUULFKWVHLQKHLW(LQIKUXQJLQ7UDQVDFW64/ :HLWHUH,QIRUPDWLRQHQ 2EMHNWQDPHQN|QQHQHUVW VHLWGHUDNWXHOOHQ9HUVLRQ YRQ64/6HUYHU/HHU ]HLFKHQHQWKDOWHQ %HJUHQ]WH%H]HLFKQHU Wenn ein Bezeichner alle Regeln für das Format von Bezeichnern erfüllt, kann er mit oder ohne Trennzeichen verwendet werden. Ein Bezeichner, der eine oder mehrere Regeln für das Format von Bezeichnern nicht erfüllt, muss immer begrenzt sein. Begrenzte Bezeichner können in den folgenden Situationen verwendet werden: Namen enthalten eingebettete Leerzeichen. Reservierte Wörter werden für Objektnamen oder Teile von Objektnamen verwendet. Begrenzte Bezeichner müssen in Klammern oder doppelte Anführungszeichen gesetzt werden, wenn sie in Transact-SQL-Anweisungen verwendet werden. Bezeichner in Klammern werden durch eckige Klammern ([ ]) begrenzt: 6(/(&7)520>%ODQNV,Q7DEOH1DPH@ $QPHUNXQJ Trennzeichen in Klammern können unabhängig vom Status der SET QUOTED_IDENTIFIER-Option verwendet werden. :HLWHUH,QIRUPDWLRQHQ 'LH6WDQGDUGHLQVWHOOXQJLQ 64/6HUYHULVW21 $NWLYLHUHQ6LHMHGRFKGLHVH (LQVWHOOXQJXP*HQDXLJNHLW ]XJHZlKUOHLVWHQ Bezeichner in Anführungszeichen werden durch doppelte Anführungszeichen ("") begrenzt: 6(/(&7)520%ODQNVLQ7DEOH1DPH Bezeichner in Anführungszeichen können nur verwendet werden, wenn die SET QUOTED_IDENTIFIER-Option auf ON festgelegt ist. 8QWHUULFKWVHLQKHLW(LQIKUXQJLQ7UDQVDFW64/ %HQHQQXQJVULFKWOLQLHQIU%H]HLFKQHU ,QKDOWGLHVHU)ROLH 6WHOOHQ6LHHPSIRKOHQH %HQHQQXQJVULFKWOLQLHQYRU (LQVWLHJ 1DPHQYRQ'DWHQEDQN REMHNWHQVROOWHQP|JOLFKVW NXU]VHLQ 9HUZHQGHQ6LHNXU]H1DPHQ 9HUZHQGHQ6LHQDFK0|JOLFKNHLWDXVVDJHNUlIWLJH1DPHQ 9HUZHQGHQ6LHHLQHNODUHXQGHLQIDFKH%HQHQQXQJV NRQYHQWLRQ 9HUZHQGHQ6LHHLQHQ%H]HLFKQHUGHUGHQ2EMHNWW\S NHQQ]HLFKQHW z 6LFKWHQ z *HVSHLFKHUWH3UR]HGXUHQ 9HUZHQGHQ6LHHLQGHXWLJH2EMHNW XQG%HQXW]HUQDPHQ z VDOHV7DEHOOHXQGVDOHV5ROOH ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Beim Benennen von Datenbankobjekten sollten Sie Folgendes beachten: Verwenden Sie kurze Namen. Verwenden Sie nach Möglichkeit aussagekräftige Namen. Verwenden Sie eine klare und einfache Benennungskonvention. Entscheiden Sie, was für Ihre Situation am sinnvollsten ist, und achten Sie auf Einheitlichkeit. Versuchen Sie, die Namenskonventionen nicht zu komplex zu gestalten, da sie sonst schwierig nachzuverfolgen und zu verstehen sind. Sie können z. B. die Vokale entfernen, wenn ein Objektname einem Schlüsselwort ähneln soll (wie eine gespeicherte Prozedur zur Sicherung mit dem Namen bckup). Verwenden Sie einen Bezeichner, der den Objekttyp kennzeichnet (insbesondere bei Sichten und gespeicherten Prozeduren). Systemadministratoren verwechseln häufig Sichten mit Tabellen, was zu unerwarteten Problemen führen kann. Verwenden Sie eindeutige Objekt- und Benutzernamen. Vermeiden Sie es z. B., eine sales-Tabelle und eine sales-Rolle in derselben Datenbank zu erstellen. 8QWHUULFKWVHLQKHLW(LQIKUXQJLQ7UDQVDFW64/ 'DWHQW\SHQ ,QKDOWGLHVHU)ROLH 6WHOOHQ6LHJUXQGOHJHQGH 7UDQVDFW64/'DWHQW\SHQ YRU =DKOHQ 64/9DULDQWHQ (LQVWLHJ 'DWXPVDQJDEHQ ,PDJHXQG7H[W =HLFKHQ 7DEHOOHQ %LQlUH'DWHQW\SHQ &XUVRU (LQGHXWLJH%H]HLFKQHU *OREDOO\8QLTXH ,GHQWLILHU *8,' %HQXW]HUGHILQLHUW 'DWHQW\SHQVFKUlQNHQGHQ :HUWHW\SHLQGHULQHLQHU 'DWHQEDQNJHVSHLFKHUW ZHUGHQNDQQ ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** 0HWKRGLVFKHU+LQZHLV ,QGHUOLQNHQ6SDOWHGHU )ROLHVLQGUHODWLYHLQIDFKH XQGKlXILJH'DWHQW\SHQXQG LQGHUUHFKWHQ6SDOWH NRPSOH[HUH'DWHQW\SHQ DXIJHIKUW Datentypen schränken den Wertetyp ein, der in einer Datenbank gespeichert werden kann. Datentypen sind Attribute, die angeben, welche Art von Informationen in einer Spalte, einem Parameter oder einer Variablen gespeichert werden können. Die meisten Transact-SQL-Anweisungen verweisen nicht explizit auf Datentypen, aber die Ergebnisse der meisten Anweisungen werden durch die Interaktionen zwischen den Datentypen der Objekte beeinflusst, auf die in der Anweisung verwiesen wird. SQL Server stellt vom System bereitgestellte (grundlegende) Datentypen zur Verfügung, Sie können jedoch auch Datentypen erstellen. Zu den grundlegenden Datentypen gehören beispielsweise folgende: =DKOHQ Dieser Datentyp stellt numerische Werte dar und schließt ganze Zahlen wie int, tinyint, smallint und bigint ein. Er schließt auch präzise Dezimalwerte wie numeric, decimal, money und smallmoney ein. Er schließt zudem Gleitkommawerte wie float und real ein. 'DWXPVDQJDEHQ Dieser Datentyp stellt Datumsangaben oder Zeiträume dar. Die beiden Datentypen für Datumsangaben sind datetime (mit einer Genauigkeit von 3,33 Millisekunden) und smalldatetime (mit einer Genauigkeit von 1-MinutenIntervallen). =HLFKHQ Mit diesem Datentyp werden Zeichendaten oder Zeichenfolgen dargestellt. Er schließt Datentypen mit Zeichenfolgen fester Länge ein, wie z. B. char und nchar, sowie Datentypen mit Zeichenfolgen variabler Länge, wie z. B. varchar und nvarchar. 8QWHUULFKWVHLQKHLW(LQIKUXQJLQ7UDQVDFW64/ :HLWHUH,QIRUPDWLRQHQ 'HUURZYHUVLRQ'DWHQW\S LVWGHU64/6HUYHU $OLDVIUGHQWLPHVWDPS 'DWHQW\S'HUURZYHUVLRQ 'DWHQW\SKDWGLHJOHLFKH )XQNWLRQZLHWLPHVWDPS 'LH'HILQLWLRQYRQ WLPHVWDPSZLUGLQHLQHU ]XNQIWLJHQ9HUVLRQYRQ 64/6HUYHUJHlQGHUWGDPLW VLHPLWGHU64/ 'HILQLWLRQYRQWLPHVWDPS EHUHLQVWLPPW %LQlUH'DWHQW\SHQ Dieser Datentyp ist den Datentypen für Zeichen im Hinblick auf Speicherung und Struktur sehr ähnlich, der Inhalt der Daten wird allerdings als Folge von Bytewerten behandelt. Binäre Datentypen schließen binary und varbinary ein. Ein bit-Datentyp zeigt die einzelnen Bitwerte 0 oder 1 an. Ein rowversionDatentyp zeigt einen speziellen 8-Byte-Binärwert an, der in einer Datenbank eindeutig ist. (LQGHXWLJH%H]HLFKQHU Dieser spezielle Datentyp ist vom Typ uniqueidentifier, der einen global eindeutigen Bezeichner (Globally Unique Identifier, GUID) darstellt. Es handelt sich dabei um einen 16-Byte-Hexadezimalwert, der immer eindeutig sein sollte. 64/9DULDQWHQ Dieser Datentyp kann Werte unterschiedlicher, von SQL Server unterstützter Datentypen darstellen, mit Ausnahme von text, ntext, image, timestamp und rowversion. ,PDJHXQG7H[W Bei diesen Datentypen handelt es sich um BLOB-Strukturen (Binary Large Object), die Datentypen fester und variabler Länge zum Speichern großer Nicht-Unicode- und Unicode-Zeichendaten und -Binärdaten darstellen, wie z. B. image, text und ntext. 7DEHOOHQ Der Datentyp Tabelle kann nur verwendet werden, um lokale Variablen vom Typ Tabelle zu definieren oder um Werte einer benutzerdefinierten Funktion zurückzugeben. &XUVRU Dieser Datentyp wird zum Programmieren in gespeicherten Prozeduren und bei Low-Level-Clientschnittstellen verwendet. Der cursor-Datentyp wird niemals als Teil einer DDL-Anweisung verwendet. %HQXW]HUGHILQLHUWH'DWHQW\SHQ Dieser Datentyp wird vom Datenbankadministrator erstellt und basiert auf Systemdatentypen. Verwenden Sie benutzerdefinierte Datentypen, wenn in mehreren Tabellen derselbe Datentyp in einer Spalte gespeichert werden muss und Sie sicherstellen müssen, dass die Spalten über exakt denselben Datentyp, dieselbe Länge und dieselbe Null-Zulässigkeit verfügen. 8QWHUULFKWVHLQKHLW(LQIKUXQJLQ7UDQVDFW64/ 9DULDEOHQ ,QKDOWGLHVHU)ROLH 'HILQLHUHQ6LHHLQH9DULDEOH XQGHUOlXWHUQ6LHZLHVLH YHUZHQGHWZLUG %HQXW]HUGHILQLHUWPLWHLQHU'(&/$5(#$QZHLVXQJ (LQVWLHJ :HUWH]XZHLVXQJPLWHLQHU6(7 RGHU6(/(&7#$QZHLVXQJ 9DULDEOHQKDEHQHLQHQORNDOHQ*OWLJNHLWVEHUHLFK 0LW+LOIHGHU'(&/$5( $QZHLVXQJZHUGHQORNDOH 9DULDEOHQLQHLQHP%DWFK RGHUHLQHU3UR]HGXUGHNOD ULHUWXQGPLWHLQHU6(/(&7 $QZHLVXQJZHUGHQGHQ9D ULDEOHQ:HUWH]XJHZLHVHQ 86(1RUWKZLQG 86(1RUWKZLQG '(&/$5(#(PS,'YDUFKDU '(&/$5(#(PS,'YDUFKDU #YO1DPH #YO1DPH FKDU FKDU 6(7#YOQDPH 6(7#YOQDPH 'RGVZRUWK 'RGVZRUWK 6(/(&7#(PS,' 6(/(&7#(PS,' HPSOR\HHLG HPSOR\HHLG )520HPSOR\HHV )520HPSOR\HHV :+(5(/DVW1DPH :+(5(/DVW1DPH #YOQDPH #YOQDPH 6(/(&7#(PS,' 6(/(&7#(PS,' $6(PSOR\HH,' $6(PSOR\HH,' *2 *2 ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Variablen sind Sprachelemente mit zugewiesenen Werten. Lokale Variablen können in Transact-SQL verwendet werden. Eine lokale Variable wird von einem Benutzer in einer DECLARE-Anweisung definiert. Ihr wird ein Anfangswert in einer SET-Anweisung oder einer SELECT-Anweisung zugewiesen, und sie wird dann in der Anweisung, dem Batch oder der Prozedur verwendet, in der bzw. dem sie deklariert wurde. Der Gültigkeitsbereich einer lokalen Variablen entspricht der Dauer des Batches, in dem die lokale Variable definiert wurde. Eine lokale Variable wird mit einem @-Symbol vor dem jeweiligen Namen angezeigt. $QPHUNXQJ Variablen mit zwei @-Symbolen vor dem Namen stellen einen Funktionstyp dar. Weitere Informationen dazu finden Sie auf der Registerkarte Inhalt unter dem Thema „Transact-SQL-Referenz“, „Funktionen“ in der SQL Server-Onlinedokumentation. 8QWHUULFKWVHLQKHLW(LQIKUXQJLQ7UDQVDFW64/ 6\QWD[ DECLARE {@local_variable data_type} [,...n] SET @local_variable_name = expression %HLVSLHO (UJHEQLV In diesem Beispiel werden die lokalen Variablen @EmpID und @vlname erstellt. Anschließend wird der Variablen @vlname und dann der Variablen @EmpID ein Wert zugewiesen, indem die Northwind-Datenbank abgefragt und der Datensatz ausgewählt wird, der den Wert der lokalen Variablen @vlname enthält. 86(1RUWKZLQG '(&/$5(#(PS,'YDUFKDU #YO1DPHFKDU 6(7#YOQDPH 'RGVZRUWK 6(/(&7#(PS,' HPSOR\HHLG )520HPSOR\HHV :+(5(/DVW1DPH #YOQDPH 6(/(&7#(PS,'$6(PSOR\HH,' *2 (PSOR\HH,' URZVDIIHFWHG 8QWHUULFKWVHLQKHLW(LQIKUXQJLQ7UDQVDFW64/ 6\VWHPIXQNWLRQHQ ,QKDOWGLHVHU)ROLH *HEHQ6LHHLQHhEHUVLFKW EHUGLHLQ64/6HUYHU YHUIJEDUHQ)XQNWLRQHQ (LQVWLHJ 7UDQVDFW64/VWHOOW]DKO UHLFKH)XQNWLRQHQEHUHLWGLH 'DWHQ]XUFNJHEHQ $JJUHJDWIXQNWLRQHQ 86(1RUWKZLQG 86(1RUWKZLQG 6(/(&7$9*XQLWSULFH$6$YJ3ULFH 6(/(&7$9*XQLWSULFH$6$YJ3ULFH )520SURGXFWV )520SURGXFWV *2 *2 6NDODUIXQNWLRQHQ 86(1RUWKZLQG 86(1RUWKZLQG 6(/(&7'%B1$0($6 GDWDEDVH© 6(/(&7'%B1$0($6 GDWDEDVH© *2 *2 5RZVHWIXQNWLRQHQ 6(/(&7 6(/(&7 )52023(148(5< )52023(148(5< 2UDFOH6YU 6(/(&7QDPHLG)520RZQHUWLWOHV 2UDFOH6YU 6(/(&7QDPHLG)520RZQHUWLWOHV ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Sie können Funktionen, einschließlich Systemfunktionen, überall dort verwenden, wo ein Ausdruck in einer Transact-SQL-Anweisung zulässig ist. Transact-SQL stellt zahlreiche Funktionen bereit, die Informationen zurückgeben. 0HWKRGLVFKHU+LQZHLV (VJLEWZHLWHUH)XQNWLRQV W\SHQ'LH.XUVWHLOQHKPHU VROOWHQLQGHU2QOLQH GRNXPHQWDWLRQXQWHU )XQNWLRQHQQDFKOHVHQ Einige Funktionen besitzen Eingabeparameter und geben Werte zurück, die in Ausdrücken verwendet werden können. Andere Funktionen geben nur Werte zurück, und es sind keine Eingaben erforderlich. Die Transact-SQLProgrammiersprache stellt viele Funktionstypen bereit. Sie sollten sich mit den folgenden drei Funktionstypen vertraut machen: $QPHUNXQJ Weitere Informationen dazu finden Sie auf der Registerkarte Inhalt unter dem Thema „Transact-SQL-Referenz“, „Funktionen“ in der SQL Server-Onlinedokumentation. $JJUHJDWIXQNWLRQHQ Verarbeiten die Werte einer ausgewählten Spalte in einem Resultset, und geben einen einzelnen zusammengefassten Wert zurück. %HLVSLHO (UJHEQLV In diesem Beispiel wird der Durchschnitt der unitprice-Spalte für alle Produkte in der products-Tabelle ermittelt. 86(1RUWKZLQG 6(/(&7$9*XQLWSULFH$6$YJ3ULFH )520SURGXFWV *2 $YJ3ULFH URZVDIIHFWHG 8QWHUULFKWVHLQKHLW(LQIKUXQJLQ7UDQVDFW64/ 6NDODUIXQNWLRQHQ Geben einen einzelnen Wert zurück und verarbeiten keinen oder viele einzelne skalare Werte. Diese Funktionen können auf alle gültigen Ausdrücke angewendet werden. Skalarfunktionen können in die folgenden Kategorien aufgeteilt werden. %HLVSLHO (UJHEQLV Funktionskategorie Beschreibung Konfiguration Gibt Informationen zur aktuellen Konfiguration zurück. Cursor Gibt Informationen zu Cursorn zurück. Datum und Zeit Verarbeitet Datums- und Zeiteingabewerte und gibt einen Zeichenfolgenwert, einen numerischen Wert oder einen Datums- und Zeitwert zurück. Mathematisch Führt eine Berechnung auf der Grundlage von Eingabewerten durch, die als Parameter für die Funktion bereitgestellt werden, und gibt einen numerischen Wert zurück. Metadaten Gibt Informationen zur Datenbank und den Datenbankobjekten zurück. Sicherheit Gibt Informationen zu Benutzern und Rollen zurück. Zeichenfolge Verarbeitet den Eingabewert einer Zeichenfolge (char oder varchar) und gibt eine Zeichenfolge oder einen numerischen Wert zurück. System Führt Operationen aus und gibt Informationen zu Werten, Objekten und Einstellungen in SQL Server zurück. Statistische Systemfunktion Gibt statistische Informationen zum System zurück. Text und Image Verarbeitet einen Text- oder Imageeingabewert bzw. eine Text- oder Imagespalte und gibt Informationen zum Wert zurück. Dieses Beispiel einer Metadatenfunktion gibt den Namen der momentan verwendeten Datenbank zurück. 86(1RUWKZLQG 6(/(&7'%B1$0($6 GDWDEDVH *2 GDWDEDVH 1RUWKZLQG URZVDIIHFWHG 8QWHUULFKWVHLQKHLW(LQIKUXQJLQ7UDQVDFW64/ 5RZVHWIXQNWLRQHQ Können wie Tabellenverweise in einer Transact-SQLAnweisung verwendet werden. %HLVSLHO 0HWKRGLVFKHU+LQZHLV 'LHVHV%HLVSLHONDQQQXUPLW =XJULIIDXIHLQHQ2UDFOH 6HUYHURUGQXQJVJHPl DXVJHIKUWZHUGHQ In diesem Beispiel wird eine verteilte Abfrage durchgeführt, um Informationen aus der titles-Tabelle abzurufen. Ohne Zugriff auf eine Oracle-Datenbank wird dieses Beispiel nicht ordnungsgemäß ausgeführt. SQL Server generiert eine entsprechende Meldung. 6(/(&7 )52023(148(5<2UDFOH6YU 6(/(&7QDPHLG)520RZQHUWLWOHV *2 8QWHUULFKWVHLQKHLW(LQIKUXQJLQ7UDQVDFW64/ %HLVSLHOHIU6\VWHPIXQNWLRQHQ ,QKDOWGLHVHU)ROLH )KUHQ6LHHLQLJHGHUDOOJH PHLQHQ9HUZHQGXQJVP|J OLFKNHLWHQGHU)XQNWLRQHQ YRU (LQVWLHJ 6\VWHPIXQNWLRQHQZHUGHQ LP$OOJHPHLQHQ]XP.RQ YHUWLHUHQYRQ'DWXPV DQJDEHQDXVGHP)RUPDW HLQHV/DQGHVLQGDVHLQHV DQGHUHQ/DQGHVYHUZHQGHW Beispiel 1 6(/(&7 $16, &219(57YDUFKDU*(7'$7($6 6(/(&7 $16, &219(57YDUFKDU*(7'$7($6 6W\OH 6W\OH 81,21 81,21 6(/(&7 -DSDQHVH &219(57YDUFKDU*(7'$7( 6(/(&7 -DSDQHVH &219(57YDUFKDU*(7'$7( 81,21 81,21 6(/(&7 (XURSHDQ &219(57YDUFKDU*(7'$7( 6(/(&7 (XURSHDQ &219(57YDUFKDU*(7'$7( *2 *2 Ergebnis Style Style ANSI: ANSI: Japanese: Japanese: 1998.11.20 1998.11.20 1998/11/20 1998/11/20 European: European: 20 20Nov Nov1998 199816:44:12:857 16:44:12:857 ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** 0HWKRGLVFKHU+LQZHLV :HLVHQ6LHDXIGLH)RUPDW RSWLRQHQLP7KHPD Ä&219(57³LQGHU 64/6HUYHU2QOLQH GRNXPHQWDWLRQKLQ %HLVSLHO (UJHEQLV Systemfunktionen werden im Allgemeinen zum Konvertieren von Datumsangaben aus dem Format eines Landes in das eines anderen Landes verwendet. $QPHUNXQJ Verwenden Sie die CONVERT-Funktion mit der Formatoption, um Datumsformate zu ändern und das Datumsformat zu ermitteln, das zurückgegeben wird. Dieses Beispiel zeigt, wie Datumsangaben in unterschiedliche Formate konvertiert werden können. 6(/(&7 $16, &219(57YDUFKDU*(7'$7($66W\OH 81,21 6(/(&7 -DSDQHVH &219(57YDUFKDU*(7'$7( 81,21 6(/(&7 (XURSHDQ &219(57YDUFKDU*(7'$7( *2 6W\OH (XURSHDQ -DSDQHVH $16, 1RY %HLVSLHO (UJHEQLV %HLVSLHO (UJHEQLV %HLVSLHO 8QWHUULFKWVHLQKHLW(LQIKUXQJLQ7UDQVDFW64/ In diesem Beispiel wird die DATEFORMAT-Option der SET-Anweisung verwendet, um Datumsangaben für die Dauer einer Verbindung zu formatieren. Diese Einstellung wird nur bei der Interpretation von Zeichenfolgen verwendet, wenn die Zeichenfolgen in Datumswerte konvertiert werden. Sie hat keine Auswirkung auf die Anzeige von Datumswerten. 6(7'$7()250$7GP\ *2 '(&/$5(#YGDWHGDWHWLPH 6(7#YGDWH 6(/(&7#YGDWH *2 URZVDIIHFWHG In diesem Beispiel werden der aktuelle Benutzername und die Anwendung zurückgegeben, die der Benutzer für die aktuelle Sitzung oder Verbindung verwendet. Der Benutzer ist in diesem Beispiel ein Mitglied der sysadminRolle. 86(OLEUDU\ 6(/(&7XVHUBQDPHDSSBQDPH *2 GER 0664/4XHU\$QDO\]HU URZVDIIHFWHG In diesem Beispiel wird ermittelt, ob in der firstname-Spalte der memberTabelle der library-Datenbank NULL-Werte zugelassen sind. Das Ergebnis Null (FALSE) bedeutet, dass keine NULL-Werte zugelassen sind, und das Ergebnis Eins (TRUE) bedeutet, dass NULL-Werte zugelassen sind. Beachten Sie, dass die OBJECT_ID-Funktion in die COLUMNPROPERTY-Funktion eingebettet ist. Dadurch können Sie den Wert für object id der member-Tabelle abfragen. (UJHEQLV 86(OLEUDU\ 6(/(&7&2/8013523(57<2%-(&7B,' PHPEHU ILUVWQDPH $OORZV1XOO *2 URZVDIIHFWHG 8QWHUULFKWVHLQKHLW(LQIKUXQJLQ7UDQVDFW64/ 2SHUDWRUHQ ,QKDOWGLHVHU)ROLH =HLJHQ6LHZLH2SHUDWRUHQ ]XPbQGHUQYRQ5HVXOWVHWV YHUZHQGHWZHUGHQN|QQHQ (LQVWLHJ 0LW2SHUDWRUHQN|QQHQ6LH %HUHFKQXQJHQGXUFKIKUHQ RGHU:HUWHYHUJOHLFKHQ 7\SHQYRQ2SHUDWRUHQ z $ULWKPHWLVFK z 9HUJOHLFK z 9HUNHWWXQJYRQ=HLFKHQIROJHQ z /RJLVFK 5DQJIROJHQHEHQHQYRQ2SHUDWRUHQ ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Bei Operatoren handelt es sich um Symbole, die mathematische Berechnungen, Zeichenfolgenverkettungen und Vergleiche zwischen Spalten, Konstanten und Variablen durchführen. Sie können kombiniert und in Suchbedingungen verwendet werden. Beim Kombinieren von Operatoren basiert die Reihenfolge, in der sie verarbeitet werden, auf einer vordefinierten Rangfolge. 7HLOV\QWD[ {constant | column_name | function | (subquery)} [{arithmetic_operator | string_operator | AND | OR | NOT} {constant | column_name | function | (subquery)}…] 7\SHQYRQ2SHUDWRUHQ SQL Server unterstützt vier Typen von Operatoren: arithmetische Operatoren, Vergleichsoperatoren, Operatoren für die Verkettung von Zeichenfolgen und logische Operatoren. 0HWKRGLVFKHU+LQZHLV 7UDQVDFW64/XQWHUVWW]W DXFKELWZHLVH2SHUDWRUHQ 6LHZHUGHQKLHUQLFKW EHKDQGHOWGDVLHQXUVHKU VHOWHQYHUZHQGHWZHUGHQ $ULWKPHWLVFK Arithmetische Operatoren führen Berechnungen mit numerischen Spalten oder Konstanten durch. Transact-SQL unterstützt multiplikative Operatoren, einschließlich Multiplikation (*), Division (/) und Modulo (%) - der ganzzahlige Rest nach einer ganzzahligen Division - sowie die Addition (+) und Subtraktion (-) additiver Operatoren. 8QWHUULFKWVHLQKHLW(LQIKUXQJLQ7UDQVDFW64/ 9HUJOHLFK Vergleichsoperatoren vergleichen zwei Ausdrücke. Vergleiche können zwischen Variablen, Spalten und Ausdrücken eines ähnlichen Typs stattfinden. Zu den Vergleichsoperatoren zählen die in der folgenden Tabelle aufgeführten Operatoren. Operator Bedeutung = Gleich > Größer als < Kleiner als >= Größer als oder gleich <= Kleiner als oder gleich <> Ungleich 9HUNHWWXQJYRQ=HLFKHQIROJHQ Der Operator für die Verkettung von Zeichenfolgen (+) verkettet Zeichenfolgenwerte. Alle übrigen Änderungen an Zeichenfolgen erfolgen mit Hilfe von Zeichenfolgenfunktionen. Eine leere Zeichenfolge wird nie als NULL-Wert ausgewertet. /RJLVFK Die logischen Operatoren AND, OR und NOT verbinden Suchbedingungen in WHERE-Klauseln. 0HWKRGLVFKHU+LQZHLV :HLVHQ6LHGDUDXIKLQGDVV VLFKGLH5DQJIROJHQHEHQHQ ORJLVFKHU2SHUDWRUHQLQ 64/6HUYHUYRQDQGHUHQ 3URJUDPPLHUVSUDFKHQ XQWHUVFKHLGHQ 5DQJIROJHQHEHQHQYRQ2SHUDWRUHQ Wenn Sie mehrere Operatoren (logische oder arithmetische) verwenden, um Ausdrücke zu kombinieren, verarbeitet SQL Server die Operatoren gemäß ihrer Rangfolge, wodurch der Ergebniswert beeinflusst werden kann. Operatoren verfügen über die folgenden Rangfolgenebenen (von der höchsten zur niedrigsten Ebene). Typ Operator Symbol Gruppierend Primäre Gruppierung () Arithmetisch Multiplikativ */% Arithmetisch Additiv -+ Sonstiges Verkettung von Zeichenfolgen + Logisch NOT NOT Logisch AND AND Logisch OR OR SQL Server verarbeitet zunächst den am tiefsten verschachtelten Ausdruck. Wenn darüber hinaus alle arithmetischen Operatoren in einem Ausdruck dieselbe Rangfolgenebene haben, werden sie von links nach rechts ausgewertet. $QPHUNXQJ Die Rangfolgenebenen logischer Operatoren in SQL Server unterscheiden sich von anderen Programmiersprachen. 8QWHUULFKWVHLQKHLW(LQIKUXQJLQ7UDQVDFW64/ $XVGUFNH ,QKDOWGLHVHU)ROLH *HEHQ6LHGHQ.XUVWHLO QHKPHUQHLQH(LQIKUXQJLQ $XVGUFNH .RPELQDWLRQDXV6\PEROHQXQG2SHUDWRUHQ (LQVWLHJ $XVZHUWXQJ]XHLQHPHLQ]HOQHQ6NDODUZHUW 'HU'DWHQW\SGHV(UJHEQLVVHVKlQJWYRQGHQ(OHPHQWHQ LP$XVGUXFNDE $XVGUFNHVLQGHLQH.RPEL QDWLRQDXV6\PEROHQXQG 2SHUDWRUHQGLH]XHLQHP HLQ]HOQHQ'DWHQZHUW DXVJHZHUWHWZHUGHQ 86(1RUWKZLQG 86(1RUWKZLQG 6(/(&72UGHU,'3URGXFW,' 6(/(&72UGHU,'3URGXFW,' 8QLW3ULFH 8QLW3ULFH 4XDQWLW\DV([WHQGHG$PRXQW 4XDQWLW\DV([WHQGHG$PRXQW )520>2UGHU'HWDLOV@ )520>2UGHU'HWDLOV@ :+(5(8QLW3ULFH :+(5(8QLW3ULFH 4XDQWLW\! 4XDQWLW\! *2 *2 ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Ausdrücke sind eine Kombination aus Symbolen und Operatoren, die zu einem einzelnen Datenwert ausgewertet werden. Es kann sich dabei um einfache Ausdrücke handeln - wie bei einer Konstante, einer Variablen oder einem Skalarwert - oder um komplexe Ausdrücke, die erstellt werden, indem ein einfacher Ausdruck bzw. mehrere einfache Ausdrücke mit Operatoren verbunden werden. Der Datentyp des Ergebnisses hängt von den Elementen im Ausdruck ab. Implizite Datentypkonvertierungen werden häufig für Elemente im Ausdruck während der Auswertung durchgeführt. %HLVSLHO (UJHEQLV Im folgenden Beispiel wird der Warenbestellwert berechnet, indem der Preis pro Einheit mit der bestellten Menge multipliziert wird. Anschließend werden die Ergebnisse gefiltert, sodass nur die Zeilen zurückgegeben werden, die Bestellungen mit Produkten enthalten, deren Wert größer als $10.000 ist. 86(1RUWKZLQG 6(/(&72UGHU,'3URGXFW,' 8QLW3ULFH4XDQWLW\DV([WHQGHG$PRXQW )520>2UGHU'HWDLOV@ :+(5(8QLW3ULFH4XDQWLW\! *2 2UGHU,' 3URGXFW,' ([WHQGHG$PRXQW URZVDIIHFWHG 8QWHUULFKWVHLQKHLW(LQIKUXQJLQ7UDQVDFW64/ 6SUDFKHOHPHQWH]XU$EODXIVWHXHUXQJ ,QKDOWGLHVHU)ROLH 6WHOOHQ6LHGLH6SUDFK HOHPHQWHYRQ7UDQVDFW64/ YRUGLHGLH9HUDUEHLWXQJ YRQ$QZHLVXQJHQVWHXHUQ Beispiel Beispiel 22 (LQVWLHJ 7UDQVDFW64/XQWHUVWW]W 6SUDFKHOHPHQWHGLHGHQ $EODXIGHU/RJLNLQ $QZHLVXQJHQVWHXHUQ $QZHLVXQJVHEHQH z %(*,1«(1'%O|FNH z ,)«(/6(%O|FNH z :+,/(.RQVWUXNWH =HLOHQHEHQH z &$6()XQNWLRQ '(&/$5(#QWLQ\LQW '(&/$5(#QWLQ\LQW 6(7#Q 6(7#Q ,)#Q%(7:((1DQG ,)#Q%(7:((1DQG %(*,1 %(*,1 :+,/(#Q! :+,/(#Q! %(*,1 %(*,1 6(/(&7#Q$6 1XPEHU 6(/(&7#Q$6 1XPEHU &$6( &$6( :+(1#Q :+(1#Q 7+(1 (9(1 7+(1 (9(1 (/6( 2'' (/6( 2'' (1'$6 7\SH (1'$6 7\SH 6(7#Q 6(7#Q #Q #Q (1' (1' (1' (1' (/6( (/6( 35,17 .HLQH$QDO\VH© 35,17 .HLQH$QDO\VH© *2 *2 ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Transact-SQL enthält mehrere Sprachelemente, durch die der Ablauf der Logik in einer Anweisung gesteuert wird. Darüber hinaus enthält es die CASEFunktion, die es ermöglicht, eine bedingte Logik in einer einzelnen Zeile und innerhalb einer SELECT- oder UPDATE-Anweisung gleichzeitig zu verwenden. $QZHLVXQJVHEHQH Mit den folgenden Sprachelementen können Sie den Ablauf der Logik innerhalb eines Skripts steuern: %(*,1(1'%O|FNH Diese Elemente schließen eine Reihe von Transact-SQL-Anweisungen ein, sodass sie als Einheit behandelt werden. ,)(/6(%O|FNH Diese Elemente geben an, dass SQL Server die erste Alternative ausführen soll, wenn eine bestimmte Bedingung erfüllt ist. Andernfalls soll SQL Server die zweite Alternative ausführen. :+,/(.RQVWUXNWH Durch diese Elemente wird eine Anweisung wiederholt ausgeführt, solange die angegebene Bedingung erfüllt ist. Mit den Anweisungen BREAK und CONTINUE wird die Ausführung der Anweisungen innerhalb einer WHILE-Schleife gesteuert. 7LSS Rücken Sie für eine bessere Lesbarkeit die Transact-SQL-Anweisungen innerhalb eines Blockes zur Ablaufsteuerung ein. 8QWHUULFKWVHLQKHLW(LQIKUXQJLQ7UDQVDFW64/ %HLVSLHO In diesem Beispiel wird ermittelt, ob für einen Kunden noch Bestellungen offen sind, bevor dieser Kunde aus der Kundenliste gelöscht wird. 86(1RUWKZLQG ,)(;,6766(/(&7)520RUGHUV :+(5(FXVWRPHU,' IUDQN 35,17 .XQGHNDQQQLFKWJHO|VFKWZHUGHQ (/6( %(*,1 '(/(7(FXVWRPHUV:+(5(FXVWRPHU,' IUDQN 35,17 .XQGHJHO|VFKW (1' *2 =HLOHQHEHQH Eine CASE-Funktion listet Prädikate auf, weist jedem Prädikat einen Wert zu und testet dann jedes Prädikat. Wenn der Ausdruck in der WHEN-Klausel den Wert TRUE zurückgibt, gibt die CASE-Funktion den Ausdruck in der THENKlausel zurück. Wenn der Ausdruck den Wert FALSE zurückgibt und es wurde eine ELSE-Klausel angegeben, gibt SQL Server den Wert in der ELSE-Klausel zurück. Eine CASE-Funktion kann in jedem Ausdruck verwendet werden. 6\QWD[ CASE expression {WHEN expression THEN result} [,…n] [ELSE result] END %HLVSLHO Im folgenden Beispiel wird eine lokale Variable deklariert, danach überprüft, ob sie die Werte 4, 5 oder 6 hat, und, falls ja, über eine WHILE-Schleife ermittelt, ob es sich beim aktuellen Wert um eine gerade oder ungerade Zahl handelt. 0HWKRGLVFKHU+LQZHLV :HLVHQ6LHGDUDXIKLQGDVV GXUFKGHQLQ%HLVSLHO YHUZHQGHWHQ(LQ]XJGHV %ORFNHVGLH/HVEDUNHLW YHUEHVVHUWZLUG '(&/$5( #QWLQ\LQW 6(7 #Q ,)#Q%(7:((1DQG %(*,1 :+,/(#Q! %(*,1 6(/(&7#Q$6 1XPEHU &$6( :+(1#Q 7+(1 2'' (/6( (9(1 (1'$6 7\SH 6(7#Q #Q (1' (1' (/6( 35,17 .HLQH$QDO\VH *2 (UJHEQLV 8QWHUULFKWVHLQKHLW(LQIKUXQJLQ7UDQVDFW64/ 1XPEHU 7\SH URZVDIIHFWHG 1XPEHU (9(1 7\SH URZVDIIHFWHG 1XPEHU 2'' 7\SH URZVDIIHFWHG 1XPEHU (9(1 7\SH URZVDIIHFWHG 1XPEHU 2'' 7\SH URZVDIIHFWHG (9(1 8QWHUULFKWVHLQKHLW(LQIKUXQJLQ7UDQVDFW64/ 5HVHUYLHUWH6FKOVVHOZ|UWHU ,QKDOWGLHVHU)ROLH 0DFKHQ6LHGLH.XUVWHLO QHKPHUPLWGHP.RQ]HSW UHVHUYLHUWHU6FKOVVHOZ|UWHU YHUWUDXW (LQVWLHJ 64/6HUYHUUHVHUYLHUW EHVWLPPWH6FKOVVHOZ|UWHU IUGLH9HUZHQGXQJGXUFK GDV6\VWHPYHUPHLGHQ6LH HVGLHVH6FKOVVHOZ|UWHU IUGLH1DPHQYRQ %H]HLFKQHUQ]XYHUZHQGHQ %H]HLFKQHUQDPHQGLHHLQHVSH]LHOOH%HGHXWXQJKDEHQ z 7UDQVDFW64/6FKOVVHOZ|UWHU z $16,64/6FKOVVHOZ|UWHU z 2'%&UHVHUYLHUWH6FKOVVHOZ|UWHU 9HUZHQGHQ6LHNHLQHUHVHUYLHUWHQ6FKOVVHOZ|UWHUIU %H]HLFKQHUQDPHQ ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** 0HWKRGLVFKHU+LQZHLV =HLJHQ6LHGLHHUZHLWHUH /LVWHYRQ6FKOVVHOZ|UWHUQ DQGLHLQGHU64/6HUYHU 2QOLQHGRNXPHQWDWLRQ]X ILQGHQLVW SQL Server reserviert bestimmte Schlüsselwörter für die ausschließliche Verwendung durch das System. Beispielsweise wird bei Verwendung der Schlüsselwörter DUMP oder BACKUP in einer osql- oder SQL Query Analyzer-Sitzung von SQL Server eine Sicherungskopie des gesamten Inhalts oder eines Teil einer Datenbank erstellt bzw. eine Sicherungskopie des Protokolls erstellt. Sie können an keinem Speicherort reservierte Schlüsselwörter in einer Transact-SQL-Anweisung einschließen, es sei denn, der Speicherort wird durch SQL Server definiert. Sie sollten es vermeiden, einem Objekt den Namen eines reservierten Schlüsselwortes zu geben. Wenn ein Objektname mit einem Schlüsselwort übereinstimmt, müssen Sie jedes Mal, wenn Sie auf das Objekt verweisen, das Objekt in begrenzende Bezeichner, wie z. B. Anführungszeichen oder Klammern [ ], einschließen. Die Systemadministrator- und Datenbankadministrator-Rollen oder der Datenbankersteller sind normalerweise dafür verantwortlich, Transact-SQL-Anweisungen und Datenbanknamen auf reservierte Schlüsselwörter hin zu überprüfen. $FKWXQJ Es ist möglich, syntaktisch richtige Transact-SQL-Anweisungen zu erstellen, die möglicherweise erfolgreich analysiert und kompiliert werden, die jedoch während der Ausführung einen Laufzeitfehler zurückgeben. Verwenden Sie optimalerweise keine reservierten Schlüsselwörter. 8QWHUULFKWVHLQKHLW(LQIKUXQJLQ7UDQVDFW64/ hEXQJVHLQKHLW$9HUZHQGHQGHU64/6HUYHU 2QOLQHGRNXPHQWDWLRQ ,QKDOWGLHVHU)ROLH *HEHQ6LHHLQH(LQIKUXQJ LQGLHhEXQJVHLQKHLW (LQVWLHJ ,QGLHVHUhEXQJVHLQKHLWYHU ZHQGHQ6LHGLH64/6HUYHU 2QOLQHGRNXPHQWDWLRQXP ,QIRUPDWLRQHQ]X 64/6HUYHUDE]XUXIHQ ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** (UOlXWHUQ6LHGLH/HUQ]LHOH GHUhEXQJVHLQKHLW /HUQ]LHOH Am Ende dieser Übungseinheit werden Sie in der Lage sein, die folgenden Aufgaben auszuführen: • Anzeigen des Inhaltsverzeichnisses in der Microsoft SQL Server-Onlinedokumentation, Verwenden des Indexes, Suchen nach Informationen, sowie Speichern des Pfades der Informationen auf der Registerkarte Favoriten. 9RUDXVVHW]XQJHQ Keine (LQULFKWHQGHUhEXQJVHLQKHLW Nicht erforderlich. :HLWHUH,QIRUPDWLRQHQ Wenn Sie Hilfe bei der Ausführung von Dateien benötigen, suchen Sie in der Hilfe zu SQL Query Analyzer nach „Ausführen einer Abfrage“. Daneben sind die folgenden Informationsquellen verfügbar: Das Northwind-Datenbankschema. Die SQL Server-Onlinedokumentation. 8QWHUULFKWVHLQKHLW(LQIKUXQJLQ7UDQVDFW64/ 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=HLWIUGLHhEXQJVHLQKHLW0LQXWHQ 8QWHUULFKWVHLQKHLW(LQIKUXQJLQ7UDQVDFW64/ 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(LQIKUXQJLQ7UDQVDFW64/ Ç 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(LQIKUXQJLQ7UDQVDFW64/ /HUQ]LHONRQWUROOH ,QKDOWGLHVHU)ROLH 9HUWLHIHQ6LHGLH/HUQ]LHOH GLHVHU8QWHUULFKWVHLQKHLW LQGHP6LHGLH.HUQSXQNWH ZLHGHUKROHQ (LQVWLHJ 'LH)UDJHQ]XU/HUQ]LHO NRQWUROOHEH]LHKHQVLFKDXI HLQLJHGHU6FKOVVHONRQ ]HSWHGLH,QKDOWGLHVHU 8QWHUULFKWVHLQKHLWVLQG 'LH3URJUDPPLHUVSUDFKH7UDQVDFW64/ 7\SHQYRQ7UDQVDFW64/$QZHLVXQJHQ 7UDQVDFW64/6\QWD[HOHPHQWH ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** *HKHQ6LHDQKDQGGLHVHU )UDJHQGLH7KHPHQGHU 8QWHUULFKWVHLQKHLWGXUFK .OlUHQ6LHDQGHUHRIIHQH )UDJHQGHU.XUVWHLOQHKPHU EHYRU6LHIRUWIDKUHQ 1. Beschreiben Sie die grundlegenden Typen von Transact-SQL-Anweisungen und deren Verwendungsmöglichkeiten. DDL-Anweisungen (Data Definition Language), mit denen Sie Objekte in der Datenbank erstellen können. DCL-Anweisungen (Data Control Language), mit denen Sie ermitteln können, wer die Daten anzeigen und ändern kann. DML-Anweisungen (Data Manipulation Language), mit denen Sie die Daten abfragen und ändern können. 2. Inwiefern steht Transact-SQL mit der ANSI SQL-92-Spezifikation im Zusammenhang? Transact-SQL implementiert die Spezifikation der ANSI SQL-92Eingangsstufe und stellt mit speziellen SQL Server-Erweiterungen zusätzliche Funktionalität bereit. 8QWHUULFKWVHLQKHLW(LQIKUXQJLQ7UDQVDFW64/ 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 +LQZHLVHIUGHQ.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 6WUDWHJLHIUGLH8QWHUULFKWVHLQKHLW 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$XVIKUHQ YRQ7UDQVDFW64/6NULSWV EHUHLWVWHOOW 64/4XHU\$QDO\]HU 9HUZHQGHQGHV2EMHNWNDWDORJVLQ64/4XHU\ $QDO\]HU 9HUZHQGHQYRQ9RUODJHQLQ64/4XHU\ $QDO\]HU 9HUZHQGHQGHV'LHQVWSURJUDPPV µRVTO§ $XVIKUHQYRQ 7UDQVDFW64/$QZHLVXQJHQ ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Microsoft® SQL Server™ 2000 stellt eine Reihe von Abfragetools bereit, mit deren Hilfe Sie Transact-SQL-Skripts ausführen können. Diese Unterrichtseinheit beschreibt, wie SQL Query Analyzer und das Befehlszeilendienstprogramm osql verwendet werden und auf welche Arten Transact-SQLAnweisungen ausgeführt werden können. Am Ende dieser Unterrichtseinheit werden Sie in der Lage sein, die folgenden Aufgaben auszuführen: Beschreiben der Grundfunktionen von SQL Query Analyzer. Beschreiben, wie der Objektkatalog in SQL Query Analyzer verwendet wird. Beschreiben, wie die Vorlagen in SQL Query Analyzer verwendet werden. Beschreiben, wie das Befehlszeilendienstprogramm osql verwendet wird. Ausführen von Transact-SQL-Anweisungen auf verschiedene Arten. 8QWHUULFKWVHLQKHLW9HUZHQGHQYRQ7UDQVDFW64/$EIUDJHWRROV 64/4XHU\$QDO\]HU ,QKDOWGLHVHU)ROLH *HEHQ6LHHLQH(LQIKUXQJ LQ64/4XHU\$QDO\]HU (LQVWLHJ 0LW64/4XHU\$QDO\]HULQ 64/6HUYHUN|QQHQ $EIUDJHDQZHLVXQJHQXQG (UJHEQLVVHJUDILVFKDQJH ]HLJWZHUGHQ (GLWRUIUGLHIUHLH7H[WHLQJDEH )DUELJH.HQQ]HLFKQXQJ YRQ7UDQVDFW64/6\QWD[ 0HKUHUH $EIUDJHIHQVWHU PLW5DVWHU RGHU7H[WDXVJDEH $XVIKUXQJYRQ7HLOVNULSWV $EIUDJHDXVIKUXQJVLQIRUPDWLRQHQ ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** 0HWKRGLVFKHU+LQZHLV )KUHQ6LH64/4XHU\ $QDO\]HUYRU=HLJHQ6LH GHQ.XUVWHLOQHKPHUQGLH *UXQGHOHPHQWHGHV64/ 4XHU\$QDO\]HU)HQVWHUV GLHGUHL$UWHQGHU$EIUDJH DXVIKUXQJGLHIDUELJH .HQQ]HLFKQXQJGHU6\QWD[ XQGGDVgIIQHQXQG 6SHLFKHUQHLQHV6NULSWV Mit SQL Query Analyzer in SQL Server können Abfrageanweisungen und Ergebnisse grafisch angezeigt werden. Darüber hinaus können Sie SQL Query Analyzer zum Schreiben, Ändern und Speichern von Transact-SQL-Skripts verwenden. SQL Query Analyzer stellt darüber hinaus Tools bereit, mit denen ermittelt werden kann, wie SQL Server eine Transact-SQL-Anweisung interpretiert und bearbeitet. SQL Query Analyzer schließt ein: Einen Editor für die freie Texteingabe. Der Editor verfügt über erweiterte Textbearbeitungsfunktionen, wie z. B. Blockeinrückungen, blockweises Auskommentieren und Entfernen von Kommentaren und Umwandlung in Großbuchstaben oder Kleinbuchstaben. Farbige Kennzeichnung. Wenn Sie eine Abfrage erstellen, markiert SQL Query Analyzer Schlüsselwörter, Zeichenfolgen und andere Sprachelemente mit von Ihnen festgelegten Farbeinstellungen. Mehrere Abfragefenster mit Raster- oder Textausgabe. Jedes Abfragefenster besitzt eine eigene Verbindung zu einem SQL Server. Das Ergebnis kann in einem Textfenster oder in einem Raster angezeigt werden. Ausführung von Teilskripts. Mit Hilfe dieser Funktion können Sie Teile eines Skripts ausführen. Wenn Sie Teile eines Skripts auswählen, führt SQL Server nur diese Teile aus. Abfrageausführungsinformationen. Die Abfrageausführungsinformationen schließen Clientstatistiken, Server-Ablaufverfolgungsinformationen und -Ausführungsplandaten ein. Diese Informationen können zur Optimierung und Problembehebung der Skripts verwendet werden. 8QWHUULFKWVHLQKHLW9HUZHQGHQYRQ7UDQVDFW64/$EIUDJHWRROV 9HUZHQGHQGHV2EMHNWNDWDORJVLQ64/4XHU\$QDO\]HU ,QKDOWGLHVHU)ROLH *HEHQ6LHHLQH(LQIKUXQJ 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 WHV2EMHNWDXVIKUHQ z (UVWHOOHQYRQ6NULSWVIU2EMHNWH z $XVIKUHQJHVSHLFKHUWHU3UR]HGXUHQ z gIIQHQYRQ7DEHOOHQ z bQGHUQYRQ2EMHNWHQLQGHU'DWHQEDQN z 9HUZHQGHQYRQ7UDQVDFW64/9RUODJHQ ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Mit dem Objektkatalog in SQL Query Analyzer können Sie in der Baumansicht der Objekte in einer Datenbank navigieren und einen Drilldown auf ein bestimmtes Objekt ausführen. Der Objektkatalog erstellt auch Skripts für Objekte, führt gespeicherte Prozeduren aus und erlaubt den Zugriff auf Tabellen und Sichten. Mit Hilfe des Objektkatalogs können Sie Folgendes tun: Erstellen von Skripts für Objekte. Welche Operationen der Objektkatalog unterstützt, hängt vom Objekttyp ab. Beispielsweise können Tabellenobjekte Skripts generieren, die SELECTAnweisungen, DDL-Anweisungen (Data Definition Language) wie z. B. CREATE oder DML-Anweisungen (Data Manipulation Language) wie z. B. INSERT enthalten. Ausführen gespeicherter Prozeduren. Wenn Sie eine gespeicherte Prozedur mit Parametern ausführen, fordert der Objektkatalog Sie zur Eingabe von Werten auf. Öffnen von Tabellen. Der Objektkatalog zeigt Abfrageergebnisse separat an. Sie können Zeilen bearbeiten, einfügen oder ändern. Ändern von Objekten in der Datenbank. Sie können Objekte in einer Datenbank anzeigen und bearbeiten. Der Objektkatalog zeigt eine ALTER-Anweisung für das ausgewählte Objekt im Editorbereich an. Wenn das ausgewählte Objekt beispielsweise eine gespeicherte Prozedur ist, stellt der Objektkatalog eine ALTER PROCEDURE-Anweisung bereit. Sie können diese ALTER-Anweisung verwenden, um die Änderungen anzugeben, und sie dann ausführen. 8QWHUULFKWVHLQKHLW9HUZHQGHQYRQ7UDQVDFW64/$EIUDJHWRROV Verwenden von Transact-SQL-Vorlagen. Diese Vorlagen enthalten Transact-SQL-Skripts, mit deren Hilfe Sie Objekte in der Datenbank erstellen können. Sie können die Vorlagen für folgende Aufgaben verwenden: • Erstellen von Datenbanken, Tabellen, Sichten, Indizes, gespeicherten Prozeduren, Triggern, Statistiken und Funktionen. • Verwalten von erweiterten Eigenschaften, Verbindungsservern, Anmeldekonten, Rollen und Benutzern. • Deklarieren und Verwenden von Cursorn. • Anpassen von Skripts. 8QWHUULFKWVHLQKHLW9HUZHQGHQYRQ7UDQVDFW64/$EIUDJHWRROV 9HUZHQGHQYRQ9RUODJHQLQ64/4XHU\$QDO\]HU ,QKDOWGLHVHU)ROLH %HVFKUHLEHQ6LHZLH9RU ODJHQLQ64/4XHU\ $QDO\]HUYHUZHQGHWZHUGHQ (LQVWLHJ 9RUODJHQ z 64/4XHU\$QDO\]HU VFKOLHW9RUODJHQHLQGLH 6LHDOV$XVJDQJVSXQNWEHLP (UVWHOOHQYRQ2EMHNWHQLQ HLQHU'DWHQEDQNYHUZHQGHQ N|QQHQ z 6LQG$XVJDQJVSXQNWHEHLP(UVWHOOHQYRQ2EMHNWHQLQ HLQHU'DWHQEDQN (QWKDOWHQ3DUDPHWHUGLHGDV$QSDVVHQYRQ6NULSWV XQWHUVWW]HQ )RUPDWIU GLH'HILQLWLRQHQ GHU 9RUODJHQSDUDPHWHU 3DUDPHWHUQDPH'DWHQW\S:HUW! ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** 0HWKRGLVFKHU+LQZHLV %HVFKUHLEHQ6LHGHQ=ZHFN XQGGLH9HUZHQGXQJGHU 9RUODJHQGLH64/4XHU\ $QDO\]HUEHUHLWVWHOOW )KUHQ6LHNXU]YRUZLHGHU =XJULIIDXIGLH9RUODJHQ HUIROJWXQG]HLJHQ6LHGLH $UEHLWVZHLVHGHUJUDILVFKHQ %HQXW]HUREHUIOlFKH 9HUZHLVHQ6LHGLH.XUVWHLO QHKPHUIUZHLWHUH,QIRUPD WLRQHQDXIGLH64/6HUYHU 2QOLQHGRNXPHQWDWLRQ SQL Query Analyzer schließt Vorlagen ein, die Sie als Ausgangspunkt beim Erstellen von Objekten in einer Datenbank verwenden können. SQL Server stellt zahlreiche Vorlagen im Verzeichnis Templates\SQL Query Analyzer bereit. Dazu zählen u. a. die Vorlagen zum Erstellen von Datenbanken, Tabellen, Sichten, Indizes, gespeicherten Prozeduren, Triggern, Statistiken und Funktionen. Weitere Vorlagen in diesem Verzeichnis unterstützen Sie beim Verwalten von erweiterten Eigenschaften, Verbindungsservern, Anmeldekonten, Rollen und Benutzern sowie beim Deklarieren und Verwenden von Cursorn. Die von SQL Query Analyzer bereitgestellten Vorlagenskripts enthalten Parameter, die das Anpassen von Skripts unterstützen. Die Definitionen der Vorlagenparameter verwenden das folgende Format: 3DUDPHWHUQDPH'DWHQW\S:HUW! Die folgende Tabelle beschreibt das Format und die Definition der Vorlagenparameter: Format Definition des Vorlagenparameters <Parametername> Name des Skriptparameters. <Datentyp> Datentyp des Parameters. <Wert> Wert, der jedes Auftreten des Parameters im Skript ersetzen soll. Sie fügen mit Hilfe eines Dialogfeldes die Werte in das Skript ein. Wenn Sie beispielsweise eine Funktion aus dem Objektkatalog abrufen, enthält die Funktion, die in den Editorbereich geschrieben wird, Parameterdefinitionen für alle Argumente der Funktion. Im Dialogfeld Vorlageparameter ersetzen geben Sie dann die Argumentwerte an. 8QWHUULFKWVHLQKHLW9HUZHQGHQYRQ7UDQVDFW64/$EIUDJHWRROV 9HUZHQGHQGHV'LHQVWSURJUDPPVµRVTO§ ,QKDOWGLHVHU)ROLH *HEHQ6LHHLQH(LQIKUXQJ LQGDV'LHQVWSURJUDPP RVTO 6WDUWHQGHV %HIHKOV]HLOHQGLHQVWSURJUDPPVµRVTO§ (LQVWLHJ 9HUZHQGHQGHVLQWHUDNWLYHQ0RGXV 9HUZHQGHQGHV6NULSWDXVIKUXQJVPRGXV 9HUZHQGHQYRQHUZHLWHUWHQ RVTO6NULSWEHIHKOHQ 'DV'LHQVWSURJUDPPRVTO LVWHLQ%HIHKOV]HLOHQGLHQVW SURJUDPP]XP$EIUDJHQ YRQ64/6HUYHU ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** :HLWHUH,QIRUPDWLRQHQ 'DV'LHQVWSURJUDPPLVTO ZLUGLQGLHVHP.XUVQLFKW EHKDQGHOWGDHV'%/LEUDU\ IUGHQ'DWHQDXVWDXVFKPLW GHP6HUYHUYHUZHQGHWXQG 8QLFRGH'DWHQW\SHQQLFKW XQWHUVWW]W Das Dienstprogramm osql ist ein Befehlszeilendienstprogramm für die interaktive Ad-hoc-Ausführung von Transact-SQL-Anweisungen und -Skripts. Benutzer, die das Befehlszeilendienstprogramm osql verwenden möchten, müssen mit Transact-SQL vertraut sein und wissen, wie Skripts an der Eingabeaufforderung ausgeführt werden. Das Befehlszeilendienstprogramm osql verwendet SQL Server ODBC (Open Database Connectivity), um mit dem Server Daten auszutauschen, und unterliegt den Einschränkungen und dem Verhalten der ODBC-API (Application Programming Interface, Schnittstelle für Anwendungsprogrammierung). 6WDUWHQGHV%HIHKOV]HLOHQGLHQVWSURJUDPPVµRVTO§ Sie starten das Befehlszeilendienstprogramm osql direkt vom Betriebssystem aus mit den unten aufgeführten Optionen (Groß-/Kleinschreibung beachten). Sie können osql in einer Batchdatei oder an der Eingabeaufforderung aufrufen. Bei einer Batchdatei handelt es sich um eine Gruppe von Befehlszeilenkommandos, die als Gruppe ausgeführt werden. 9HUZHQGHQGHVLQWHUDNWLYHQ0RGXV Das Befehlszeilendienstprogramm osql akzeptiert Transact-SQL-Anweisungen und sendet diese interaktiv an SQL Server. Das Ergebnis wird formatiert und auf dem Bildschirm angezeigt. Verwenden Sie die GO-Anweisung, um Transact-SQL-Anweisungen im Eingabepuffer auszuführen. Verwenden Sie die QUIT- oder EXIT-Anweisung, um das Befehlszeilendienstprogramm osql zu beenden. 8QWHUULFKWVHLQKHLW9HUZHQGHQYRQ7UDQVDFW64/$EIUDJHWRROV 9HUZHQGHQGHV6NULSWDXVIKUXQJVPRGXV Benutzer übergeben einen osql-Batch, indem sie eine Transact-SQL-Anweisung angeben, die ausgeführt werden soll, oder indem sie auf eine Textdatei verweisen, die die auszuführenden Transact-SQL-Anweisungen enthalten. Die Ausgabe wird in der Regel in eine Textdatei geleitet, kann aber auch im Fenster mit der Eingabeaufforderung angezeigt werden. 7HLOV\QWD[ osql [-S Server] [-E] [-U Benutzername] [-P Kennwort] [-i Eingabedatei] [-o Ausgabedatei] [-?] $QPHUNXQJ Bei den Parametern in osql-Anweisungen wird zwischen Großund Kleinschreibung unterschieden. 0HWKRGLVFKHU+LQZHLV :HLVHQ6LHGDUDXIKLQGDVV $UJXPHQWHPLWHLQHP *HGDQNHQVWULFKRGHU HLQHP6FKUlJVWULFK EHJLQQHQN|QQHQ 9HUZHLVHQ6LHGLH.XUVWHLO QHKPHUIUZHLWHUH,QIRUPD WLRQHQDXIGLH64/6HUYHU 2QOLQHGRNXPHQWDWLRQ6XFK EHJULIIÄRVTO'LHQVW SURJUDPP³ Denken Sie daran, dass Argumente mit einem Gedankenstrich (-) oder einem Schrägstrich (/) beginnen können. Die folgende Tabelle beschreibt die am häufigsten verwendeten Argumente. Argument Beschreibung -S Server Gibt die SQL Server-Installation an, zu der eine Verbindung hergestellt wird. Server ist der Name des Servercomputers im Netzwerk. Diese Option ist erforderlich, wenn Sie osql von einem Remotecomputer aus über ein Netzwerk ausführen möchten. -E Verwendet eine vertraute Verbindung, anstatt ein Kennwort anzufordern. -U Benutzername Der Benutzername. Bei Benutzernamen wird zwischen Groß- und Kleinschreibung unterschieden. Wird weder die Option -U noch -P verwendet, verwendet SQL Server das aktuell angemeldete Benutzerkonto und fordert nicht zur Eingabe eines Kennwortes auf. -P Kennwort Ein vom Benutzer angegebenes Kennwort. Wenn die Option -P nicht verwendet wird, fordert osql zur Eingabe eines Kennwortes auf. Wenn die Option -P ohne Kennwort am Ende der Befehlszeile steht, verwendet osql das Standardkennwort (NULL). Bei Kennwörtern wird zwischen Groß- und Kleinschreibung unterschieden. Wird weder die Option -U noch -P verwendet, verwendet SQL Server das aktuell angemeldete Benutzerkonto und fordert nicht zur Eingabe eines Kennwortes auf. -i Eingabedatei Identifiziert die Datei, die einen Batch mit Transact-SQL-Anweisungen oder gespeicherten Prozeduren enthält. Anstelle von -i kann das Kleiner als-Zeichen (<) verwendet werden. -o Ausgabedatei Identifiziert die Datei, in die osql Ausgabedaten schreibt. Anstelle von -o kann das Größer als-Zeichen (>) verwendet werden. Wenn die Eingabedatei das Unicode-Format hat, wird die Ausgabedatei im Unicode-Format gespeichert, wenn -o eingestellt ist. Wenn die Eingabedatei nicht das Unicode-Format hat, wird die Ausgabedatei im OEM-Format gespeichert. -? Zeigt die Syntaxzusammenfassung der osql-Optionen an. 8QWHUULFKWVHLQKHLW9HUZHQGHQYRQ7UDQVDFW64/$EIUDJHWRROV 9HUZHQGHQYRQHUZHLWHUWHQRVTO6NULSWEHIHKOHQ Das Befehlszeilendienstprogramm osql kann auch Befehle verarbeiten, die nicht aus Transact-SQL-Anweisungen bestehen. Das Befehlszeilendienstprogramm osql erkennt diese Befehle allerdings nur, wenn sie am Zeilenfang oder unmittelbar hinter der osql-Eingabeaufforderung stehen. Weitere Anweisungen auf derselben Zeile führen zu einem Fehler. Die folgende Tabelle beschreibt diese zusätzlichen Anweisungen. Befehl Beschreibung GO Führt alle Befehle aus, die nach dem letzten GO-Befehl eingegeben wurden. RESET Löscht alle Anweisungen, die Sie eingegeben haben. ED Ruft den Editor auf. !! Befehl Führt einen Betriebssystembefehl aus. QUIT oder EXIT( ) Beendet osql. STRG+C Beendet eine Abfrage, ohne osql zu beenden. 8QWHUULFKWVHLQKHLW9HUZHQGHQYRQ7UDQVDFW64/$EIUDJHWRROV $XVIKUHQYRQ7UDQVDFW64/$QZHLVXQJHQ ,QKDOWGLHVHU)ROLH *HEHQ6LHHLQHhEHUVLFKW EHUGLH$UWHQGHU$XV IKUXQJYRQ7UDQVDFW64/ $QZHLVXQJHQ (LQVWLHJ 7UDQVDFW64/$QZHLVXQJHQ N|QQHQDXIYHUVFKLHGHQH $UWHQDXVJHIKUWZHUGHQ '\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 $XVIKUXQJYRQ$QZHL VXQJHQ 9HUZHQGXQJYRQ(;(&87($QZHLVXQJPLW=HLFKHQ IROJHQOLWHUDOHQ XQG9DULDEOHQ (LQVWLHJ 9HUZHQGXQJZHQQGHU:HUWGHU9DULDEOHQ]XU$XV IKUXQJV]HLWGHU$QZHLVXQJ]XJHZLHVHQZHUGHQVROO $QZHLVXQJHQN|QQHQG\QD PLVFKHUVWHOOWZHUGHQ VRGDVVVLHJOHLFK]HLWLJPLW GHU$XVIKUXQJHLQHV 6NULSWVHUVWHOOWZHUGHQ Beispiel Beispiel 11 86(OLEUDU\ 86(OLEUDU\ '(&/$5(#GEQDPHYDUFKDU#WEOQDPHYDUFKDU '(&/$5(#GEQDPHYDUFKDU#WEOQDPHYDUFKDU 6(7#GEQDPH 6(7#GEQDPH 1RUWKZLQG 1RUWKZLQG 6(7#WEOQDPH 6(7#WEOQDPH SURGXFWV SURGXFWV (;(&87( (;(&87( 86( #GEQDPH 6(/(&7)520ª#WEOQDPH 86( #GEQDPH 6(/(&7)520ª#WEOQDPH *2 *2 ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Anweisungen können dynamisch erstellt werden, sodass sie gleichzeitig mit der Ausführung eines Skripts erstellt werden. Zum dynamischen Erstellen einer Anweisung wird die EXECUTE-Anweisung mit einer Reihe von Zeichenfolgenliteralen und Variablen verwendet, die zur Ausführungszeit aufgelöst werden. Dynamisch erstellte Anweisungen sind hilfreich, wenn der Wert der Variable bei der Ausführung der Anweisung zugewiesen werden soll. Sie können z. B. eine dynamische Anweisung erstellen, die eine bestimmte Aktion bei einer Reihe von Datenbankobjekten durchführt. 6\QWD[ EXECUTE ({@str_var | 'tsql_string'} + [{@str_var | 'tsql_string'}...]}) Bei der EXECUTE-Anweisung sollten die folgenden Aspekte beachtet werden: Die EXECUTE-Anweisung führt aus Zeichenfolgen bestehende Anweisungen in einem Transact-SQL-Batch aus. Da es sich hierbei um Zeichenfolgenliterale handelt, müssen Sie darauf achten, dass sich an den entsprechenden Stellen Leerzeichen befinden, damit die Zeichenfolgen richtig verkettet werden. Die EXECUTE-Anweisung kann ein Zeichenfolgenliteral, eine lokale Variable oder eine Verkettung von beidem enthalten. Alle Elemente in der EXECUTE-Zeichenfolge müssen aus Zeichendaten bestehen; alle numerischen Daten müssen konvertiert werden, bevor Sie die EXECUTE-Anweisung verwenden können. Funktionen können nicht verwendet werden, um die in der EXECUTEAnweisung auszuführende Zeichenfolge zu erstellen. Alle gültigen Transact-SQL-Anweisungen können dynamisch erstellt werden, dies gilt auch für Funktionen. %HLVSLHO 8QWHUULFKWVHLQKHLW9HUZHQGHQYRQ7UDQVDFW64/$EIUDJHWRROV EXECUTE-Anweisungen können verschachtelt werden. Variablen und temporäre Tabellen, die dynamisch erstellt werden, bestehen nur für die Ausführungsdauer der Anweisung. In diesem Beispiel wird gezeigt, wie mit einer dynamisch ausgeführten Anweisung ein anderer als der aktuelle Datenbankkontext angegeben werden kann und wie dann alle Spalten und Zeilen aus einer bestimmten Tabelle ausgewählt werden können. In diesem Beispiel bleibt der Wechsel des Datenbankkontextes zur Northwind-Datenbank nur für die Dauer der Abfrage bestehen. Der aktuelle Datenbankkontext bleibt unverändert. Durch Verwendung einer gespeicherten Prozedur könnte der Benutzer die Datenbank- und Tabelleninformationen als Parameter an die Anweisung übergeben und dann eine bestimmte Tabelle in einer Datenbank abfragen. (UJHEQLV 86(OLEUDU\ '(&/$5(#GEQDPHYDUFKDU#WDEOHQDPHYDUFKDU 6(7#GEQDPH 1RUWKZLQG 6(7#WDEOHQDPH 3URGXFWV (;(&87( 86( #GEQDPH 6(/(&73URGXFW1DPH)520 #WDEOHQDPH *2 3URGXFW1DPH &KDL &KDQJ $QLVHHG6\UXS %HLVSLHO (UJHEQLV In diesem Beispiel wird gezeigt, wie mit einer dynamisch ausgeführten Anweisung eine Datenbankoption für die Dauer der Anweisung geändert werden kann. Die folgende Anweisung gibt die Anzahl der betroffenen Zeilen nicht zurück. 86(1RUWKZLQG (;(&87( 6(712&281721 6(/(&7/DVW1DPH5HSRUWV7R)520 (PSOR\HHV:+(5(5HSRUWV7R,618// *2 /DVW1DPH 5HSRUWV7R )XOOHU 18// 8QWHUULFKWVHLQKHLW9HUZHQGHQYRQ7UDQVDFW64/$EIUDJHWRROV 9HUZHQGHQYRQ%DWFKHV ,QKDOWGLHVHU)ROLH (UOlXWHUQ6LHGHQ.XUVWHLO QHKPHUQGLH9HUZHQGXQJ YRQ%DWFKHV (LQVWLHJ %HLHLQHP%DWFKKDQGHOWHV VLFKXPHLQH*UXSSHYRQ 7UDQVDFW64/$QZHLVXQ JHQGLHJHPHLQVDPEHU JHEHQXQGDOV*UXSSH DXVJHIKUWZHUGHQ (LQHRGHUPHKUHUH 7UDQVDFW64/$QZHLVXQJHQZHUGHQ ]XVDPPHQEHUJHEHQ 'HILQLHUHQHLQHV%DWFKHVPLW+LOIHGHU*2$QZHLVXQJ %DWFKYHUDUEHLWXQJEHL64/ 6HUYHU $QZHLVXQJHQGLHQLFKWLPVHOEHQ%DWFKYHUZHQGHW ZHUGHQN|QQHQ z &5($7(352&('85( z &5($7(9,(: z &5($7(75,**(5 &5($7(58/( $6 z &5($7('()$8/7 z ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Eine oder mehrere Anweisungen können auch in einem Batch übergeben werden. (LQHRGHUPHKUHUH7UDQVDFW64/$QZHLVXQJHQZHUGHQ]XVDPPHQ EHUJHEHQ Bei einem Batch handelt es sich um eine Gruppe von Transact-SQL-Anweisungen, die gemeinsam übergeben und als Gruppe ausgeführt werden. Batches können interaktiv oder als Teil eines Skripts ausgeführt werden. Ein Skript kann mehrere Batches mit Transact-SQL-Anweisungen enthalten. 'HILQLHUHQHLQHV%DWFKHVPLW+LOIHGHU*2$QZHLVXQJ Verwenden Sie eine GO-Anweisung, um das Ende eines Batches anzugeben. GO ist keine allgemein gültige Transact-SQL-Anweisung, sondern ein Befehl, der nur von SQL Query Analyzer und dem Dienstprogramm osql akzeptiert wird. Auf ODBC- oder OLE DB-APIs basierende Anwendungen erzeugen einen Syntaxfehler, wenn sie versuchen, eine GO-Anweisung auszuführen. %DWFKYHUDUEHLWXQJEHL64/6HUYHU Die Anweisungen werden von SQL Server in einem Batch gemeinsam optimiert, kompiliert und ausgeführt. Die Anweisungen müssen jedoch nicht als wiederherstellbare Arbeitseinheit ausgeführt werden. Der Gültigkeitsbereich von benutzerdefinierten Variablen ist auf einen Batch beschränkt, nach einer GO-Anweisung kann daher nicht auf eine dieser Variablen verwiesen werden. $QPHUNXQJ Wenn ein Syntaxfehler in einem Batch vorhanden ist, wird keine der Anweisungen in diesem Batch ausgeführt. Die Ausführung beginnt mit dem folgenden Batch. 8QWHUULFKWVHLQKHLW9HUZHQGHQYRQ7UDQVDFW64/$EIUDJHWRROV $QZHLVXQJHQGLHQLFKWLPVHOEHQ%DWFKYHUZHQGHWZHUGHQN|QQHQ 0HWKRGLVFKHU+LQZHLV %HVFKUHLEHQ6LHGLH%HL VSLHOHXQGYHUJOHLFKHQ6LH VLHPLWHLQDQGHU Bestimmte Objekterstellungsanweisungen müssen jeweils in einem eigenen Batch innerhalb eines Skripts ausgeführt werden. Das liegt an der Art, wie die Objekterstellungsanweisungen definiert werden. Diese Objekterstellungsanweisungen besitzen eine bestimmte Struktur - einen Objektdefinitionsheader, gefolgt vom Schlüsselwort AS mit mindestens einer Definitionsanweisung. Außerdem muss jede Erstellungsanweisung mit einem GO-Befehl abgeschlossen werden, wenn ein Skript mehr als eine Erstellungsanweisung enthält. Sie müssen die folgenden Anweisungen in separaten Batches ausführen: %HLVSLHO %HLVSLHO CREATE PROCEDURE CREATE VIEW CREATE TRIGGER CREATE RULE AS CREATE DEFAULT Die Anweisungen in diesem Beispiel würden fehlschlagen, wenn sie als Teil eines einzigen Batches ausgeführt werden, da die Abfrage Anweisungen kombiniert, die in einem Batch nicht kombiniert werden dürfen. Sie müssen eine GOAnweisung vor jeder CREATE VIEW-Anweisung einfügen, damit diese korrekt ausgeführt werden. &5($7('$7$%$6( &5($7(7$%/( &5($7(9,(: &5($7(9,(: *2 In diesem Beispiel sind die in Beispiel 1 verwendeten Anweisungen so zu Batches gruppiert, dass sie korrekt ausgeführt werden. &5($7('$7$%$6( &5($7(7$%/( *2 &5($7(9,(: *2 &5($7(9,(: *2 8QWHUULFKWVHLQKHLW9HUZHQGHQYRQ7UDQVDFW64/$EIUDJHWRROV 9HUZHQGHQYRQ6NULSWV ,QKDOWGLHVHU)ROLH (UOlXWHUQ6LHGLH9HUZHQ GXQJYRQ6NULSWV]XP$XV IKUHQYRQ7UDQVDFW64/ $QZHLVXQJHQ (LQVWLHJ ,QGHQPHLVWHQ)lOOHQZHU GHQ6NULSWV]XP$XVIKUHQ YRQ7UDQVDFW64/$QZHL VXQJHQYHUZHQGHW (LQ6NULSW LVWHLQHRGHUPHKUHUH 7UDQVDFW64/$QZHLVXQJ GLHDOV 'DWHLPLWGHU'DWHLQDPHQHUZHLWHUXQJ64/ JHVSHLFKHUWZLUG 6NULSWV z (QWKDOWHQJHVSHLFKHUWH $QZHLVXQJHQ z .|QQHQPLW MHGHP EHOLHELJHQ7H[W(GLWRUHUVWHOOWZHUGHQ z z .|QQHQ'DWHQEDQNREMHNWH RGHU $XVIKUXQJVDQZHLVXQJHQ ZLHGHUKROW DXVIKUHQ :HUGHQ LQ64/4XHU\$QDO\]HURGHU PLWGHP'LHQVW SURJUDPP RVTO DXVJHIKUW ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** In den meisten Fällen werden Skripts zum Ausführen von Transact-SQL-Anweisungen verwendet. Ein Skript besteht aus einer oder mehreren Transact-SQL-Anweisungen, die als Datei gespeichert werden. Sie können Skripts in SQL Query Analyzer oder mit einem beliebigen TextEditor, wie z. B. Notepad, erstellen und speichern. Speichern Sie die Skriptdatei mit der Dateinamenerweiterung SQL. Gespeicherte Skripts sind sehr hilfreich, wenn Sie Datenbanken oder Datenobjekte neu erstellen möchten oder wenn Sie eine Gruppe von Anweisungen wiederholt verwenden müssen. Sie können die Skriptdatei in SQL Query Analyzer, aber auch mit dem Dienstprogramm osql (oder einem anderen Abfragetool) öffnen und ausführen. 8QWHUULFKWVHLQKHLW9HUZHQGHQYRQ7UDQVDFW64/$EIUDJHWRROV (PSIRKOHQH0HWKRGHQ ,QKDOWGLHVHU)ROLH (UOlXWHUQ6LHGLHHPSIRKOH QHQ0HWKRGHQ]XU9HUZHQ GXQJGHU7UDQVDFW64/ $EIUDJHWRROV 9HUZHQGHQ6LH64/4XHU\$QDO\]HU 9HUZHQGHQ6LH64/4XHU\$QDO\]HU IUJUDILVFKHV IUJUDILVFKHV 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§ IU IU %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$XVIKUHQYRQ7UDQVDFW 64/6NULSWV ,QKDOWGLHVHU)ROLH *HEHQ6LHHLQH(LQIKUXQJ LQGLHhEXQJVHLQKHLW (LQVWLHJ ,QGLHVHU8QWHUULFKWVHLQKHLW HUVWHOOHQ6LHHLQ7UDQVDFW 64/6NULSWVSHLFKHUQHV XQGIKUHQHVGDQQLQ 64/4XHU\$QDO\]HUXQG PLW+LOIHGHV'LHQVW SURJUDPPVRVTODXV ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** (UOlXWHUQ6LHGLH/HUQ]LHOH GHUhEXQJVHLQKHLW /HUQ]LHOH Am Ende dieser Übungseinheit werden Sie in der Lage sein, die folgenden Aufgaben auszuführen: Schreiben grundlegender SELECT-Anweisungen, die sortierte und eingeschränkte Resultsets zurückgeben. Ändern und Ausführen eines Skripts mit Hilfe des Dienstprogramms osql. 9RUDXVVHW]XQJHQ Um diese Übungseinheit zu bearbeiten, benötigen Sie Folgendes: Die Skriptdateien für diese Übungseinheit, die sich in C:\Moc\2316B\Labfiles\L02 befinden. Die Antwortdateien für diese Übungseinheit, die sich in C:\Moc\2316B\Labfiles\L02\Answers befinden. :HLWHUH,QIRUPDWLRQHQ Wenn Sie Hilfe bei der Ausführung von Dateien benötigen, suchen Sie in der Hilfe zu SQL Query Analyzer nach „Ausführen einer Abfrage“. Daneben sind die folgenden Informationsquellen verfügbar: Das Northwind-Datenbankschema. Die Microsoft SQL Server-Onlinedokumentation. 8QWHUULFKWVHLQKHLW9HUZHQGHQYRQ7UDQVDFW64/$EIUDJHWRROV 6]HQDULR Der Aufbau des Schulungsraumes soll die Organisation des weltweit agierenden Handelsunternehmens Northwind Traders widerspiegeln. Das Unternehmen hat den fiktiven Domänennamen nwtraders.msft. Der primäre DNS-Server für nwtraders.msft ist der Kursleitercomputer, der die Internetprotokolladresse (IP-Adresse) 192.168.x.200 besitzt (wobei x die zugewiesene Schulungsraumnummer ist). Der Name des Kursleitercomputers ist London. Die folgende Tabelle stellt den Benutzernamen, den Computernamen und die IP-Adresse für jeden Kursteilnehmercomputer in der fiktiven Domäne nwtraders.msft bereit. Suchen Sie den Benutzernamen Ihres Computers, und notieren Sie ihn. Benutzername Computername IP-Adresse SQLAdmin1 Vancouver 192.168.x.1 SQLAdmin2 Denver 192.168.x.2 SQLAdmin3 Perth 192.168.x.3 SQLAdmin4 Brisbane 192.168.x.4 SQLAdmin5 Lisbon 192.168.x.5 SQLAdmin6 Bonn 192.168.x.6 SQLAdmin7 Lima 192.168.x.7 SQLAdmin8 Santiago 192.168.x.8 SQLAdmin9 Bangalore 192.168.x.9 SQLAdmin10 Singapore 192.168.x.10 SQLAdmin11 Casablanca 192.168.x.11 SQLAdmin12 Tunis 192.168.x.12 SQLAdmin13 Acapulco 192.168.x.13 SQLAdmin14 Miami 192.168.x.14 SQLAdmin15 Auckland 192.168.x.15 SQLAdmin16 Suva 192.168.x.16 SQLAdmin17 Stockholm 192.168.x.17 SQLAdmin18 Moscow 192.168.x.18 SQLAdmin19 Caracas 192.168.x.19 SQLAdmin20 Montevideo 192.168.x.20 SQLAdmin21 Manila 192.168.x.21 SQLAdmin22 Tokyo 192.168.x.22 SQLAdmin23 Khartoum 192.168.x.23 SQLAdmin24 Nairobi 192.168.x.24 9HUDQVFKODJWH=HLWIUGLHhEXQJVHLQKHLW0LQXWHQ 8QWHUULFKWVHLQKHLW9HUZHQGHQYRQ7UDQVDFW64/$EIUDJHWRROV hEXQJ 6FKUHLEHQJUXQGOHJHQGHU6(/(&7$QZHLVXQJHQ In dieser Übung erstellen Sie verschiedene Anweisungen, die Zeilen aus der products-Tabelle in der Northwind-Datenbank zurückgeben. C:\Moc\2316B\Labfiles\L02\Answers enthält die vollständigen Skripts für diese Übung. Ç So schreiben Sie eine SELECT-Anweisung, die sortierte Daten zurückgibt Bei diesem Verfahren schreiben Sie eine Anweisung, die alle Zeilen und Spalten aus der products-Tabelle zurückgibt und die Ergebnisse in aufsteigender Reihenfolge nach der productname-Spalte sortiert. Answer_Ordered.sql ist das vollständige Skript für dieses Verfahren. 1. Melden Sie sich an der Schulungsraumdomäne nwtraders mit Hilfe der Informationen in der folgenden Tabelle an. Option Eingabe Benutzername SQLAdminx (wobei x die Ihrem Computernamen zugewiesene Nummer ist, wie in der Schulungsraumdomäne nwtraders.msft festgelegt) Kennwort password 2. Öffnen Sie SQL Query Analyzer, und melden Sie sich, falls erforderlich, am (lokalen) Server mit Microsoft Windows®-Authentifizierung an. Sie haben die Berechtigung, sich anzumelden und SQL Server zu verwalten, da Sie als SQLAdminx angemeldet sind - einem Mitglied der lokalen Gruppe Administratoren von Windows 2000. Alle Mitglieder dieser Gruppe werden automatisch der sysadmin-Rolle von SQL Server zugeordnet. 3. Klicken Sie in der Liste DB auf Northwind. 4. Geben Sie eine SELECT-Anweisung ein, die alle Zeilen und Spalten aus der products-Tabelle zurückgibt und die Ergebnisse in aufsteigender Reihenfolge nach der productname-Spalte sortiert, und führen Sie sie aus. Sie können die gespeicherte Systemprozedur sp_help in der productsTabelle ausführen, um die korrekten Spaltennamen abzufragen. 6(/(&7)520SURGXFWV25'(5%<SURGXFWQDPH 5. Klicken Sie auf den Pfeil neben der Schaltfläche Ausführungsmodus und klicken Sie auf Ergebnisse in Raster. 6. Führen Sie die Anweisung erneut aus. 8QWHUULFKWVHLQKHLW9HUZHQGHQYRQ7UDQVDFW64/$EIUDJHWRROV Ç So schreiben Sie eine SELECT-Anweisung, die eingeschränkte Daten zurückgibt Bei diesem Verfahren schreiben Sie eine Anweisung, die Produkte aus einer bestimmten Kategorie abruft. Answer_Limited.sql ist das vollständige Skript für dieses Verfahren. • Geben Sie eine SELECT-Anweisung ein, die alle Produkte in der Kategorie (categoryid) 4 aus der products-Tabelle abruft, und führen Sie sie aus. Sie können die gespeicherte Systemprozedur sp_help in der productsTabelle ausführen, um die korrekten Spaltennamen abzufragen. 6(/(&7)520SURGXFWV:+(5(FDWHJRU\LG *2 7LSS Für weitere Informationen zur SELECT-Anweisung (sowie zu TransactSQL-Anweisungen und Systemtabellen) wählen Sie das Schlüsselwort SELECT im Abfragefenster aus, drücken Sie Umschalt+F1, und doppelklicken Sie dann auf die SELECT-Klausel. 8QWHUULFKWVHLQKHLW9HUZHQGHQYRQ7UDQVDFW64/$EIUDJHWRROV hEXQJ bQGHUQHLQHU6NULSWGDWHL In dieser Übung ändern und speichern Sie eine einfache Skriptdatei und führen sie dann aus. C:\Moc\2316B\Labfiles\L02\Answers enthält die vollständigen Skripts für diese Übung. Ç So ändern Sie eine Skriptdatei Bei diesem Verfahren führen Sie ein Skript aus, das Fehler enthält. Mit Hilfe der zurückgegebenen Fehlerinformationen führen Sie Änderungen am Skript durch, sodass es ordnungsgemäß ausgeführt wird. Danach speichern Sie das Skript und führen es aus. 1. Öffnen Sie C:\Moc\2316B\Labfiles\L02\MyScript.sql, überprüfen Sie es, und führen Sie es dann aus. Beim Ausführen dieser Datei erhalten Sie Fehlermeldungen. Diese Fehler wurden absichtlich eingebaut. Answer_MyScript.sql ist das vollständige Skript für dieses Verfahren. 2. Schließen Sie die Zeilen, die den Skriptnamen und die Beschreibung enthalten, mit Schlüsselwörtern für Kommentarblöcke ein. 0<6&5,3764/ 'LHVHV6NULSWIUDJWGLHFXVWRPHU7DEHOOHDEXQG JLEWHLQH/LVWHYRQ)LUPHQQDPHQFXVWRPHUQDPH ]XUFN'LHVHV6NULSWVROOWHLQGHU 1RUWKZLQG'DWHQEDQNDXVJHIKUWZHUGHQ 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 $XVIKUHQHLQHV6NULSWVPLW+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 HLQLJHGHU6FKOVVHONRQ ]HSWHGLH,QKDOWGLHVHU 8QWHUULFKWVHLQKHLWVLQG 64/4XHU\ $QDO\]HU 9HUZHQGHQGHV2EMHNWNDWDORJVLQ64/4XHU\ $QDO\]HU 9HUZHQGHQYRQ9RUODJHQLQ64/4XHU\ $QDO\]HU 9HUZHQGHQGHV'LHQVWSURJUDPPV µRVTO§ $XVIKUHQYRQ 7UDQVDFW64/$QZHLVXQJHQ ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** 1. Welches Abfragetool wird bestenfalls in einer Batchdatei verwendet, um das Abfrageergebnis in einer Textdatei zu speichern? Begründung? Bestenfalls wird die Abfrage mit dem Befehlszeilendienstprogramm „osql“ ausgeführt, wobei das Ergebnis mit Hilfe der Befehlszeilenoption „-o dateiname.txt“ in einer Textdatei gespeichert wird. Ebenso ist es möglich, geeignete Befehlszeilenoptionen in SQL Query Analyzer zu verwenden. 2. Wie werden optimalerweise Transact-SQL-Anweisungen für die künftige Verwendung erstellt und verwendet? Verwenden Sie den Objektkatalog, um Skripts mit Transact-SQLAnweisungen direkt aus Objekten und anderen Vorlagen zu erstellen. Ebenso ist es möglich, ein Transact-SQL-Skript in einer Datei zu speichern, um es später zu ändern und künftig zu verwenden. 3. Wie unterscheidet sich ein Transact-SQL-Batch von einem Transact-SQLSkript? Ein Transact-SQL-Batch besteht aus einer Reihe von Anweisungen, die mit einer GO-Anweisung abgeschlossen ist, und die auf einmal analysiert und ausgeführt wird. Ein Transact-SQL-Skript ist eine Datei, die einen oder mehrere zu verarbeitende Batches enthält. Unterrichtseinheit 3: Abrufen von Daten Inhalt Übersicht 1 Abrufen von Daten mit Hilfe der SELECT-Anweisung 2 Filtern von Daten 8 Formatieren von Resultsets 21 Verarbeiten von Abfragen 30 Automatisches Zwischenspeichern von Abfragen 31 Aspekte der Systemleistung 33 Empfohlene Methoden 34 Übungseinheit A: Abrufen von Daten und Bearbeiten der Resultsets 35 Lernzielkontrolle 47 Die in diesen Unterlagen enthaltenen Angaben und Daten, einschließlich URLs und anderer Verweise auf Internetwebsites, können ohne vorherige Ankündigung geändert werden. Die in den Beispielen genannten Firmen, Organisationen, Produkte, Domänennamen, E-Mail-Adressen, Logos, Personen, Orte und Ereignisse sind frei erfunden und jede Ähnlichkeit mit bestehenden Firmen, Organisationen, Produkten, Domänennamen, E-Mail-Adressen, Logos, Personen, Orten oder Ereignissen ist rein zufällig, soweit nichts anderes angegeben ist. Die Benutzer sind verantwortlich für das Einhalten aller anwendbaren Urheberrechtsgesetze. Unabhängig von der Anwendbarkeit der entsprechenden Urheberrechtsgesetze darf ohne ausdrückliche schriftliche Erlaubnis der Microsoft Corporation kein Teil dieses Dokuments für irgendwelche Zwecke vervielfältigt oder in einem Datenempfangssystem gespeichert oder darin eingelesen werden, unabhängig davon, auf welche Art und Weise oder mit welchen Mitteln (elektronisch, mechanisch, durch Fotokopieren, Aufzeichnen, usw.) dies geschieht. Microsoft Corporation kann Inhaber von Patenten oder Patentanträgen, Marken, Urheberrechten oder anderen gewerblichen Schutzrechten sein, die den Inhalt dieses Dokuments betreffen. Die Bereitstellung dieses Dokuments gewährt keinerlei Lizenzrechte an diesen Patenten, Marken, Urheberrechten oder anderen gewerblichen Schutzrechten, es sei denn, dies wurde ausdrücklich durch einen schriftlichen Lizenzvertrag mit der Microsoft Corporation vereinbart. 2001 Microsoft Corporation. Alle Rechte vorbehalten. Microsoft, BackOffice, MS-DOS, PowerPoint, Visual Studio, Windows, Windows Media und Windows NT sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Die in diesem Dokument aufgeführten Namen tatsächlicher Firmen und Produkte sind möglicherweise Marken der jeweiligen Eigentümer. 8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ LLL +LQZHLVHIUGHQ.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 6WUDWHJLHIUGLH8QWHUULFKWVHLQKHLW Verwenden Sie die folgende Strategie, um diese Unterrichtseinheit zu präsentieren: Abrufen von Daten mit Hilfe der SELECT-Anweisung Erläutern Sie, wie bestimmte Spalten und Zeilen mit der SELECT-Anweisung und der WHERE-Klausel abgerufen werden. Filtern von Daten Beschreiben Sie, wie die Anzahl der zurückgegebenen Zeilen mit Hilfe von Suchbedingungen in der WHERE-Klausel eingeschränkt wird. Besprechen Sie Vergleichs- und logische Operatoren, Zeichenfolgen, Wertebereiche, Wertelisten und unbekannte Werte. Formatieren von Resultsets Beschreiben Sie, wie das Resultset durch Sortieren von Daten, Löschen von doppelten Daten, Ändern von Spaltennamen in Aliasnamen und Verwenden von Literalen übersichtlicher formatiert wird. Weisen Sie darauf hin, dass diese Formatierungsoptionen nicht die Daten selbst, sondern nur die Darstellung der Daten ändern. Verarbeiten von Abfragen Beschreiben Sie, wie Abfragen verarbeitet werden. Erläutern Sie, dass alle Abfragen vor ihrer Ausführung dieselbe Verarbeitung durchlaufen und Microsoft SQL Server™ 2000 einen Teil der Verarbeitung für eine spätere Ausführung derselben Abfrage speichern kann. Erläutern Sie anschließend kurz die Vorteile zwischengespeicherter Abfragen und die Methoden zum Zwischenspeichern von Abfragen. Aspekte der Systemleistung Besprechen Sie einige der Aspekte, die sich beim Ausführen einfacher Abfragen auf die Leistung von SQL Server auswirken. $QSDVVXQJVLQIRUPDWLRQHQ Dieser Abschnitt beschreibt die Anforderungen zum Einrichten der Übungseinheiten für eine Unterrichtseinheit sowie die Konfigurationsänderungen, die während der Übungseinheiten an den Kursteilnehmercomputern vorgenommen werden. Diese Informationen sollen Ihnen beim Replizieren oder Anpassen der Microsoft Official Curriculum-Courseware (MOC) helfen. :LFKWLJ Die Übungseinheit in dieser Unterrichtseinheit hängt von der Schulungsraumkonfiguration ab, die im Abschnitt „Anpassungsinformationen“ am Ende des Dokuments Handbuch für das Einrichten von Schulungscomputern für den Kurs 2316B, Abfragen von Microsoft SQL Server 2000 mit Hilfe von Transact-SQL, angegeben ist. 8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ (LQULFKWHQGHUhEXQJVHLQKHLW Es gibt keine Anforderungen zum Einrichten der Übungseinheit, die die Replikation oder die Anpassung betreffen. (UJHEQLVVHGHUhEXQJVHLQKHLW Auf den Kursteilnehmercomputern gibt es keine Konfigurationsänderungen, die die Replikation oder die Anpassung betreffen. Y LY 8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ This page is intentionally left blank. 8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ hEHUVLFKW ,QKDOWGLHVHU)ROLH *HEHQ6LHHLQHhEHUVLFKW EHUGLH7KHPHQXQG/HUQ ]LHOHGLHVHU8QWHUULFKWV HLQKHLW (LQVWLHJ ,QGLHVHU8QWHUULFKWVHLQKHLW OHUQHQ6LHZLH'DWHQPLW +LOIHHLQIDFKHU$EIUDJHQ DEJHUXIHQZHUGHQ $EUXIHQYRQ'DWHQPLW+LOIHGHU6(/(&7$QZHLVXQJ )LOWHUQYRQ'DWHQ )RUPDWLHUHQYRQ 5HVXOWVHWV 9HUDUEHLWHQYRQ$EIUDJHQ $VSHNWHGHU6\VWHPOHLVWXQJ ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Diese Unterrichtseinheit vermittelt Kursteilnehmern die Kenntnisse und Fähigkeiten zum Ausführen einfacher Abfragen mit Hilfe der SELECT-Anweisung, die das Sortieren von Daten, Löschen von Duplikaten und Ändern des Resultsetformats einschließen. Die Unterrichtseinheit wird mit einer Beschreibung der Verarbeitung von Abfragen abgeschlossen. Am Ende dieser Unterrichtseinheit werden Sie in der Lage sein, die folgenden Aufgaben auszuführen: Abfragen von Daten aus Tabellen mit Hilfe der SELECT-Anweisung. Filtern von Daten mit Hilfe unterschiedlicher Suchbedingungen in der WHERE-Klausel. Formatieren von Resultsets. Beschreiben der Verarbeitung von Abfragen. Beschreiben von Leistungsaspekten, die sich auf das Abrufen von Daten auswirken. 8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ $EUXIHQYRQ'DWHQPLW+LOIHGHU6(/(&7$QZHLVXQJ ,QKDOWGLHVHU)ROLH /LVWHQ6LHGLH7KHPHQDXI GLHLPIROJHQGHQ$EVFKQLWW EHKDQGHOWZHUGHQ (LQVWLHJ 'DV$EUXIHQYRQ'DWHQDXV 7DEHOOHQHUIROJWPLW+LOIHGHU 6(/(&7$QZHLVXQJLQGHU 6SDOWHQXQG=HLOHQDQJH JHEHQZHUGHQ 9HUZHQGHQGHU6(/(&7$QZHLVXQJ $QJHEHQGHU6SDOWHQ $QJHEHQYRQ=HLOHQPLW+LOIHGHU:+(5(.ODXVHO ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Bevor Sie Daten bearbeiten können, müssen Sie die Daten auswählen, die aus den Tabellen abgerufen werden sollen. In der SELECT-Anweisung können Sie die Spalten und Zeilen mit den Daten, die Sie aus Tabellen abrufen wollen, angeben. 8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ 9HUZHQGHQGHU6(/(&7$QZHLVXQJ ,QKDOWGLHVHU)ROLH (UOlXWHUQ6LHZLH'DWHQPLW GHU6(/(&7$QZHLVXQJ DXVHLQHU7DEHOOHDEJHUXIHQ ZHUGHQ (LQVWLHJ 9HUZHQGHQ6LHGLH 6(/(&7$QZHLVXQJ]XP $EUXIHQYRQ'DWHQ 'LH6(/(&7/LVWHJLEWGLH6SDOWHQDQ 'LH:+(5(.ODXVHOJLEWGLH%HGLQJXQJDQGLHGLH $EIUDJHHLQVFKUlQNW 'LH)520.ODXVHOJLEWGLH7DEHOOHDQ Teilsyntax 6(/(&7>$//_',67,1&7@VHOHFWBOLVW! 6(/(&7>$//_',67,1&7@VHOHFWBOLVW! )520^WDEOHBVRXUFH!`>Q@ )520^WDEOHBVRXUFH!`>Q@ :+(5(VHDUFKBFRQGLWLRQ! :+(5(VHDUFKBFRQGLWLRQ! ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Verwenden Sie die SELECT-Anweisung zum Abrufen von Daten. 7HLOV\QWD[ SELECT [ ALL | DISTINCT ] <select_list> FROM {<table_source>} [,...n] [ WHERE <search_condition> ] Geben Sie in der SELECT-Anweisung die Spalten und Zeilen an, die aus einer Tabelle zurückgegeben werden sollen. Die SELECT-Liste gibt die Spalten an, die zurückgegeben werden. Die WHERE-Klausel gibt die Bedingung an, die die Abfrage einschränkt. Wenn Sie in der WHERE-Klausel Vergleichsoperatoren, Zeichenfolgen und logische Operatoren als Suchbedingungen verwenden, können Sie die Anzahl der Zeilen einschränken. Die FROM-Klausel gibt die Tabelle an, aus der Spalten und Zeilen zurückgegeben werden. 8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ $QJHEHQGHU6SDOWHQ ,QKDOWGLHVHU)ROLH 86(1RUWKZLQG 86(1RUWKZLQG 6(/(&7HPSOR\HHLGODVWQDPHILUVWQDPHWLWOH 6(/(&7HPSOR\HHLGODVWQDPHILUVWQDPHWLWOH )520HPSOR\HHV )520HPSOR\HHV *2 *2 =HLJHQ6LHZLH6SDOWHQLQ HLQHU7DEHOOHDXVJHZlKOW ZHUGHQ (LQVWLHJ 6LHN|QQHQHLQ]HOQH6SDOWHQ DXVHLQHU7DEHOOHDEUXIHQ LQGHP6LHVLHLQGHU$XV ZDKOOLVWHDXIIKUHQ employeeid employeeid lastname lastname firstname firstname title title 11 22 Davolio Davolio Fuller Fuller Nancy Nancy Andrew Andrew Sales SalesRepresentative Representative Vice VicePresident, President,Sales Sales 33 44 Leverling Leverling Peacock Peacock Janet Janet Margaret Margaret Sales SalesRepresentative Representative Sales SalesRepresentative Representative 77 88 King King Callahan Callahan Robert Robert Laura Laura Sales SalesRepresentative Representative Inside InsideSales SalesCoordinator Coordinator 55 66 99 Buchanan Buchanan Suyama Suyama Dodsworth Dodsworth Steven Steven Michael Michael Anne Anne Sales SalesManager Manager Sales SalesRepresentative Representative Sales SalesRepresentative Representative ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Sie können einzelne Spalten aus einer Tabelle abrufen, indem Sie sie in der Auswahlliste (SELECT-Liste) aufführen. Die Auswahlliste enthält die auszuwählenden Spalten, Ausdrücke oder Schlüsselwörter bzw. die zuzuweisende lokale Variable. Die folgenden Optionen können in der Auswahlliste verwendet werden: 7HLOV\QWD[ <select_list> ::= { * | { table_name | view_name | table_alias }.* | { column_name | expression | IDENTITYCOL | ROWGUIDCOL } [ [AS] column_alias ] | column_alias = expression } [,...n] Beachten Sie bei der Angabe der abzurufenden Spalten die folgenden Festlegungen und Richtlinien: Die Spalten werden in der Reihenfolge abgerufen, in der sie in der Auswahlliste angegeben sind. Trennen Sie die Spaltennamen durch Kommas, abgesehen vom letzten Spaltennamen. Vermeiden Sie, wenn möglich, die Verwendung eines Sternes (*) in der Auswahlliste. Wird ein Stern angegeben, werden alle Spalten aus einer Tabelle abgerufen. %HLVSLHO (UJHEQLV 8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ In diesem Beispiel werden die Spalten employeeid, lastname, firstname und title für alle Mitarbeiter aus der employees-Tabelle abgerufen. 86(1RUWKZLQG 6(/(&7HPSOR\HHLGODVWQDPHILUVWQDPHWLWOH )520HPSOR\HHV *2 HPSOR\HHLG ODVWQDPH ILUVWQDPH WLWOH 'DYROLR )XOOHU /HYHUOLQJ 3HDFRFN %XFKDQDQ 6X\DPD .LQJ &DOODKDQ 'RGVZRUWK URZVDIIHFWHG 1DQF\ $QGUHZ -DQHW 0DUJDUHW 6WHYHQ 0LFKDHO 5REHUW /DXUD $QQH 6DOHV5HSUHVHQWDWLYH 9LFH3UHVLGHQW6DOHV 6DOHV5HSUHVHQWDWLYH 6DOHV5HSUHVHQWDWLYH 6DOHV0DQDJHU 6DOHV5HSUHVHQWDWLYH 6DOHV5HSUHVHQWDWLYH ,QVLGH6DOHV&RRUGLQDWRU 6DOHV5HSUHVHQWDWLYH 8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ $QJHEHQYRQ=HLOHQPLW+LOIHGHU:+(5(.ODXVHO ,QKDOWGLHVHU)ROLH (UOlXWHUQ6LHZLH=HLOHQPLW +LOIHGHU:+(5(.ODXVHO DEJHUXIHQZHUGHQ (LQVWLHJ 0LWGHU:+(5(.ODXVHO N|QQHQ6LHEHVWLPPWH =HLOHQDEKlQJLJYRQ 6XFKEHGLQJXQJHQDEUXIHQ 86(1RUWKZLQG 86(1RUWKZLQG 6(/(&7HPSOR\HHLGODVWQDPHILUVWQDPHWLWOH 6(/(&7HPSOR\HHLGODVWQDPHILUVWQDPHWLWOH )520HPSOR\HHV )520HPSOR\HHV :+(5(HPSOR\HHLG :+(5(HPSOR\HHLG *2 *2 employeeid employeeid 55 lastname lastname firstname firstname Buchanan Buchanan Steven Steven title title Sales SalesManager Manager ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** 0HWKRGLVFKHU+LQZHLV 9HUJOHLFKHQ6LHGDV5HVXOW VHWDXIGHUYRUKHUJHKHQGHQ )ROLHPLWGHPDXIGLHVHU )ROLH :HLVHQ6LHGDUDXIKLQGDVV PLW+LOIHGHU:+(5(.ODX VHOGLH$Q]DKOGHU]XUFN JHJHEHQHQ=HLOHQHLQJH VFKUlQNWZHUGHQNDQQ 'LHKLHUYHUZHQGHWH6\QWD[ ILQGHQ6LHQLFKWLP$EVFKQLWW Ä6(/(&7$QZHLVXQJ³ VRQGHUQLP$EVFKQLWW Ä6XFKEHGLQJXQJ764/³LQ GHU64/6HUYHU2QOLQH GRNXPHQWDWLRQ Mit Hilfe der WHERE-Klausel können Sie bestimmte Zeilen abhängig von Suchbedingungen abrufen. Die Suchbedingungen in der WHERE-Klausel können eine unbegrenzte Liste mit Prädikaten enthalten. <search_condition> ::= { [ NOT ] <predicate> | ( <search_condition> ) } [ {AND | OR} [NOT] {<predicate> | ( <search_condition> ) } ] } [,...n] Der Platzhalter für das Prädikat listet die Ausdrücke auf, die in der WHEREKlausel eingeschlossen sein können. Die folgenden Optionen können in einem Prädikat enthalten sein: <predicate> ::= { expression { = | <> | > | >= | < | <= } expression | string_expression [NOT] LIKE string_expression [ESCAPE 'escape_character'] | expression [NOT] BETWEEN expression AND expression | expression IS [NOT] NULL | CONTAINS ( {column | * }, '<contains_search_condition>' ) | FREETEXT ( {column | * }, 'freetext_string' ) | expression [NOT] IN (subquery | expression [,...n]) | expression { = | <> | > | >= | < | <= } {ALL | SOME | ANY} (subquery) | EXISTS (subquery) } 8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ Beachten Sie beim Angeben von Zeilen in der WHERE-Klausel die folgenden Festlegungen und Richtlinien: %HLVSLHO (UJHEQLV Setzen Sie alle Daten vom Typ char, nchar, varchar, nvarchar, text, datetime und smalldatetime in einfache Anführungszeichen. Geben Sie bei Verwendung der SELECT-Anweisung eine WHERE-Klausel an, um die Anzahl der zurückgegebenen Zeilen einzuschränken. In diesem Beispiel werden die Spalten employeeid, lastname, firstname und title aus der employees-Tabelle für Mitarbeiter mit der employeeid 5 abgerufen. 86(1RUWKZLQG 6(/(&7HPSOR\HHLGODVWQDPHILUVWQDPHWLWOH )520HPSOR\HHV :+(5(HPSOR\HHLG *2 HPSOR\HHLG ODVWQDPH ILUVWQDPH WLWOH %XFKDQDQ URZVDIIHFWHG 6WHYHQ 6DOHV0DQDJHU 8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ )LOWHUQYRQ'DWHQ ,QKDOWGLHVHU)ROLH %HVFKUHLEHQ6LHGLHYHU VFKLHGHQHQ$UWHQYRQ6XFK EHGLQJXQJHQGLHLQGHU :+(5(.ODXVHOYHUZHQGHW ZHUGHQN|QQHQ 9HUZHQGHQYRQ9HUJOHLFKVRSHUDWRUHQ 9HUZHQGHQYRQ =HLFKHQIROJHYHUJOHLFKHQ (LQVWLHJ 9HUZHQGHQ YRQ ORJLVFKHQ2SHUDWRUHQ $EUXIHQHLQHV :HUWHEHUHLFKV 9HUZHQGHQHLQHU :HUWHOLVWH DOV6XFKNULWHULXP $EUXIHQYRQXQEHNDQQWHQ:HUWHQ 6LHZROOHQGLH(UJHEQLVVH GLHHLQH$EIUDJH]XUFNJLEW HLQVFKUlQNHQ ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Sie wollen die Ergebnisse, die von einer Abfrage zurückgegeben werden, einschränken. Sie können die Ergebnisse einschränken, indem Sie in einer WHERE-Klausel Suchbedingungen zum Filtern von Daten angeben. Die Anzahl der Suchbedingungen, die Sie in eine SELECT-Anweisung einschließen können, ist unbegrenzt. Die folgende Tabelle enthält eine Beschreibung der Filtertypen und die jeweilige Suchbedingung zum Filtern von Daten. Filtertyp Suchbedingung Vergleichsoperatoren =, >, <, >=, <= und <> Zeichenfolgevergleiche LIKE und NOT LIKE Logische Operatoren: Kombination von Bedingungen AND, OR Logischer Operator: Verneinungen NOT Wertebereiche BETWEEN und NOT BETWEEN Wertelisten IN und NOT IN Unbekannte Werte IS NULL und IS NOT NULL 8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ 9HUZHQGHQYRQ9HUJOHLFKVRSHUDWRUHQ ,QKDOWGLHVHU)ROLH =HLJHQ6LHZLHPLW+LOIHYRQ 9HUJOHLFKVRSHUDWRUHQ7HLO PHQJHQYRQ=HLOHQDEJH UXIHQZHUGHQ Beispiel Beispiel 11 86(1RUWKZLQG 86(1RUWKZLQG 6(/(&7ODVWQDPHFLW\ 6(/(&7ODVWQDPHFLW\ )520HPSOR\HHV )520HPSOR\HHV :+(5(FRXQWU\ :+(5(FRXQWU\ 86$ 86$ *2 *2 (LQVWLHJ 9HUZHQGHQ6LH9HUJOHLFKV RSHUDWRUHQ]%*U|HUDOV !.OHLQHUDOVXQG *OHLFK XP=HLOHQDE KlQJLJYRQ9HUJOHLFKV EHGLQJXQJHQDXV]XZlKOHQ lastname lastname Davolio Davolio Fuller Fuller city city Seattle Seattle Tacoma Tacoma Leverling Leverling Peacock Peacock Kirkland Kirkland Redmond Redmond Callahan Callahan Seattle Seattle ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Verwenden Sie Vergleichsoperatoren, um die Werte in einer Tabelle mit einem vorgegebenen Wert oder Ausdruck zu vergleichen. Sie können Vergleichsoperatoren auch zum Überprüfen einer Bedingung verwenden. Mit Vergleichsoperatoren können Spalten oder Variablen mit kompatiblen Datentypen miteinander verglichen werden. In der folgenden Tabelle sind die Vergleichsoperatoren aufgelistet: Operator Beschreibung = > < >= <= <> Gleich Größer als Kleiner als Größer als oder gleich Kleiner als oder gleich Ungleich $QPHUNXQJ Vermeiden Sie die Verwendung von NOT in Suchbedingungen. Durch diesen Operator kann das Abrufen von Daten verzögert werden, weil alle Zeilen einer Tabelle ausgewertet werden. 8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ %HLVSLHO (UJHEQLV In diesem Beispiel werden der Nachname und der Wohnort von Mitarbeitern in den USA aus der employees-Tabelle abgerufen. 86(1RUWKZLQG 6(/(&7ODVWQDPHFLW\ )520HPSOR\HHV :+(5(FRXQWU\ 86$ *2 ODVWQDPH 'DYROLR )XOOHU /HYHUOLQJ 3HDFRFN &DOODKDQ URZVDIIHFWHG %HLVSLHO (UJHEQLV FLW\ 6HDWWOH 7DFRPD .LUNODQG 5HGPRQG 6HDWWOH In diesem Beispiel werden die orderid-Spalte und die customerid-Spalte mit einem Auftragsdatum, das vor dem 1.8.96 liegt, aus der orders-Tabelle abgerufen. 86(1RUWKZLQG 6(/(&7RUGHULGFXVWRPHULG )520RUGHUV :+(5(RUGHUGDWH *2 RUGHULG FXVWRPHULG URZVDIIHFWHG 9,1(7 72063 +$1$5 9,&7( 6835' +$1$5 8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ 9HUZHQGHQYRQ=HLFKHQIROJHYHUJOHLFKHQ ,QKDOWGLHVHU)ROLH =HLJHQ6LHZLH=HLOHQPLW +LOIHGHU6XFKEHGLQJXQJ /,.(XQWHU9HUZHQGXQJYRQ 3ODW]KDOWHU]HLFKHQDEJH UXIHQZHUGHQ 86(1RUWKZLQG 86(1RUWKZLQG 6(/(&7FRPSDQ\QDPH 6(/(&7FRPSDQ\QDPH )520FXVWRPHUV )520FXVWRPHUV :+(5(FRPSDQ\QDPH/,.( 5HVWDXUDQW© :+(5(FRPSDQ\QDPH/,.( 5HVWDXUDQW© *2 *2 (LQVWLHJ 9HUZHQGHQ6LHGLH6XFK EHGLQJXQJ/,.(]XP$XV ZlKOHQYRQ=HLOHQGXUFK 9HUJOHLFKHQYRQ=HLFKHQ IROJHQ companyname companyname GROSELLA-Restaurante GROSELLA-Restaurante Lonesome LonesomePine PineRestaurant Restaurant Tortuga TortugaRestaurante Restaurante ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Verwenden Sie die Suchbedingung LIKE in Verbindung mit Platzhalterzeichen zum Auswählen von Zeilen durch Vergleichen von Zeichenfolgen. Beachten Sie bei Verwendung der Suchbedingung LIKE die folgenden Festlegungen: Alle Zeichen in der Musterzeichenfolge werden ausgewertet, einschließlich der führenden und der nachstehenden Leerzeichen. LIKE kann nur für Daten des Typs char, nchar, varchar, nvarchar, binary, varbinary, smalldatetime oder datetime verwendet werden. Außerdem kann LIKE unter bestimmten Bedingungen für Daten des Typs text, ntext und image verwendet werden. 7\SHQYRQ3ODW]KDOWHU]HLFKHQ Verwenden Sie die folgenden vier Platzhalterzeichen in Ihren Suchkriterien für Zeichenfolgen. Platzhalter Beschreibung % Alle Zeichenfolgen mit beliebig vielen Zeichen. _ Ein einzelnes beliebiges Zeichen. [] Ein einzelnes Zeichen aus der angegebenen Zeichengruppe. [^] Ein einzelnes Zeichen, das nicht der angegebenen Zeichengruppe angehört. 8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ %HLVSLHOHIUGLH9HUZHQGXQJYRQ3ODW]KDOWHU]HLFKHQ Die folgende Tabelle enthält Beispiele für die Verwendung von Platzhalterzeichen mit der Suchbedingung LIKE. %HLVSLHO (UJHEQLV Ausdruck Rückgabe /,.( %5 Alle Namen, die mit den Buchstaben BR beginnen. /,.( %U Alle Namen, die mit den Buchstaben Br beginnen. /,.( HHQ Alle Namen, die mit den Buchstaben een enden. /,.( HQ Alle Namen, die die Buchstaben en enthalten. /,.( BHQ Alle dreistelligen Namen, die mit den Buchstaben en enden. /,.( >&.@ Alle Namen, die mit dem Buchstaben C oder K beginnen. /,.( >69@LQJ Alle vierstelligen Namen, die mit den Buchstaben ing enden und mit einem Buchstaben zwischen S und V beginnen. /,.( 6>AF@ Alle Namen, die mit dem Buchstaben S beginnen und deren zweiter Buchstabe nicht c ist. In diesem Beispiel werden alle Firmennamen, die das Wort „Restaurant“ enthalten, aus der customers-Tabelle abgerufen. 86(1RUWKZLQG 6(/(&7FRPSDQ\QDPH )520FXVWRPHUV :+(5(FRPSDQ\QDPH/,.( 5HVWDXUDQW *2 FRPSDQ\QDPH *526(//$5HVWDXUDQWH /RQHVRPH3LQH5HVWDXUDQW 7RUWXJD5HVWDXUDQWH URZVDIIHFWHG 8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ 9HUZHQGHQYRQORJLVFKHQ2SHUDWRUHQ ,QKDOWGLHVHU)ROLH =HLJHQ6LHZLHPHKUHUH $XVGUFNHPLW+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$XVIKUHQ HLQHU$EIUDJHYRQ 64/6HUYHU]XUFNJHJHEHQ ZHUGHQHLQVFKUlQNHQ9HU ZHQGHQ6LHGD]XORJLVFKH 2SHUDWRUHQXP]ZHLRGHU PHKUHUH$XVGUFNHPLW HLQDQGHU]XNRPELQLHUHQ productid productid 14 14 29 29 62 62 productname productname Tofu Tofu Thüringer ThüringerRostbratwurst Rostbratwurst Tarte Tarteau ausucre sucre supplierid supplierid 66 12 12 29 29 unitprice unitprice 23.25 23.25 123.79 123.79 49.3 49.3 ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Verwenden Sie die logischen Operatoren AND, OR und NOT, um mehrere Ausdrücke miteinander zu kombinieren und so den Abfragevorgang zu optimieren. Die Ergebnisse einer Abfrage können abhängig von der Gruppierung der Ausdrücke und der Reihenfolge der Suchbedingungen variieren. Beachten Sie bei Verwendung von logischen Operatoren die folgenden Richtlinien: Verwenden Sie den Operator AND zum Abrufen von Zeilen, die alle Suchkriterien erfüllen. Verwenden Sie den Operator OR zum Abrufen von Zeilen, die eines der Suchkriterien erfüllen. Verwenden Sie den Operator NOT, um den Ausdruck hinter dem Operator zu verneinen. 9HUZHQGHQYRQ.ODPPHUQ Verwenden Sie Klammern, wenn das Suchkriterium aus mehr als einem Ausdruck besteht. Die Verwendung von Klammern ermöglicht Ihnen Folgendes: Gruppieren von Ausdrücken. Ändern der Reihenfolge der Auswertung. Übersichtlicheres Gestalten von Ausdrücken. 5HLKHQIROJHGHU6XFKEHGLQJXQJHQ Beachten Sie bei der Verwendung von mehreren logischen Operatoren in einer Anweisung die folgenden Festlegungen: Microsoft SQL Server 2000 führt zunächst den Operator NOT, dann den Operator AND und zum Schluss den Operator OR aus. Befinden sich alle Operatoren in einem Ausdruck auf derselben Ebene, gilt bei der Auswertung die Reihenfolge von links nach rechts. 8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ %HLVSLHO 0HWKRGLVFKHU+LQZHLV 9HUJOHLFKHQ6LHGLH$E IUDJHQLQGHQ%HLVSLHOHQ XQG:HLVHQ6LHGDUDXI KLQGDVVGLH$XVGUFNH 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 7KULQJHU5RVWEUDWZXUVW 7DUWHDXVXFUH URZVDIIHFWHG %HLVSLHO (UJHEQLV In diesem Beispiel werden Produkte abgerufen, deren Namen mit dem Buchstaben T beginnen oder die die Product ID 46 haben und teurer als 16.00 $ sind. Vergleichen Sie die Abfrage in Beispiel 1 mit der in Beispiel 2. Beachten Sie, dass die Abfragen unterschiedlich ausgeführt werden und unterschiedliche Resultsets zurückgeben, weil die Ausdrücke unterschiedlich gruppiert sind. 86(1RUWKZLQG 6(/(&7SURGXFWLGSURGXFWQDPHVXSSOLHULGXQLWSULFH )520SURGXFWV :+(5(SURGXFWQDPH/,.( 7 25SURGXFWLG $1'XQLWSULFH! *2 SURGXFWLG SURGXFWQDPH VXSSOLHULG XQLWSULFH 7RXUWLqUH 7DUWHDXVXFUH 7XQQEU|G 7HDWLPH&KRFRODWH%LVFXLWV 7RIX 7KULQJHU5RVWEUDWZXUVW URZVDIIHFWHG 8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ $EUXIHQHLQHV:HUWHEHUHLFKV ,QKDOWGLHVHU)ROLH 86(1RUWKZLQG 86(1RUWKZLQG 6(/(&7SURGXFWQDPHXQLWSULFH 6(/(&7SURGXFWQDPHXQLWSULFH )520SURGXFWV )520SURGXFWV :+(5(XQLWSULFH%(7:((1$1' :+(5(XQLWSULFH%(7:((1$1' *2 *2 =HLJHQ6LHZLH'DWHQPLW +LOIHGHU6XFKEHGLQJXQJ %(7:((1DEJHUXIHQ ZHUGHQ (LQVWLHJ 9HUZHQGHQ6LHGLH6XFK EHGLQJXQJ%(7:((1]XP $EUXIHQYRQ=HLOHQGLHLQ HLQHP:HUWHEHUHLFKOLHJHQ productname productname Chai Chai Beispiel Beispiel 11 unitprice unitprice 18 18 Chang Chang Aniseed AniseedSyrup Syrup 19 19 10 10 Genen GenenShouyu Shouyu Pavlova Pavlova 15.5 15.5 17.45 17.45 Sir SirRodney’s Rodney’sScones Scones … … 10 10 … … ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Verwenden Sie die Suchbedingung BETWEEN in der WHERE-Klausel zum Abrufen von Zeilen, die in einem bestimmten Wertebereich liegen. Beachten Sie bei Verwendung der Suchbedingung BETWEEN die folgenden Festlegungen und Richtlinien: SQL Server schließt die angegebenen Grenzwerte in das Resultset ein. Verwenden Sie zur Vereinfachung der Syntax die Suchbedingung BETWEEN anstelle eines Ausdrucks mit dem Operator AND und zwei Vergleichsoperatoren (> = x AND < = y). Verwenden Sie jedoch für die Suche in einem exklusiven Bereich, bei der die zurückgegebenen Zeilen die Grenzwerte nicht enthalten sollen, einen Ausdruck mit dem Operator AND und zwei Vergleichsoperatoren (> x AND < y). Verwenden Sie die Suchbedingung NOT BETWEEN zum Abrufen von Zeilen, die sich außerhalb des angegebenen Bereichs befinden. Beachten Sie, dass sich das Abrufen von Daten bei Verwendung des Operators NOT verzögern kann. 8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ %HLVSLHO (UJHEQLV In diesem Beispiel werden der Produktname und der Einzelpreis von allen Produkten abgerufen, deren Einzelpreis zwischen 10 $ und 20 $ liegt. Beachten Sie, dass das Resultset die angegebenen Grenzwerte einschließt. 86(1RUWKZLQG 6(/(&7SURGXFWQDPHXQLWSULFH )520SURGXFWV :+(5(XQLWSULFH%(7:((1$1' *2 SURGXFWQDPH XQLWSULFH &KDL &KDQJ $QLVHHG6\UXS *HQHQ6KRX\X 3DYORYD 6LU5RGQH\ V6FRQHV URZVDIIHFWHG %HLVSLHO (UJHEQLV In diesem Beispiel werden der Produktname und der Einzelpreis von allen Produkten abgerufen, deren Einzelpreis zwischen 10 $ und 20 $ liegt. Beachten Sie, dass das Resultset die angegebenen Grenzwerte ausschließt. 86(1RUWKZLQG 6(/(&7SURGXFWQDPHXQLWSULFH )520SURGXFWV :+(5(XQLWSULFH! $1'XQLWSULFH *2 SURGXFWQDPH XQLWSULFH &KDL &KDQJ *HQHQ6KRX\X 3DYORYD URZVDIIHFWHG 8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ 9HUZHQGHQHLQHU:HUWHOLVWHDOV6XFKNULWHULXP ,QKDOWGLHVHU)ROLH =HLJHQ6LHZLH=HLOHQPLW +LOIHGHU6XFKEHGLQJXQJ,1 DEJHUXIHQZHUGHQ 86(1RUWKZLQG 86(1RUWKZLQG 6(/(&7FRPSDQ\QDPHFRXQWU\ 6(/(&7FRPSDQ\QDPHFRXQWU\ )520VXSSOLHUV )520VXSSOLHUV :+(5(FRXQWU\,1 -DSDQ ,WDO\ :+(5(FRXQWU\,1 -DSDQ ,WDO\ *2 *2 (LQVWLHJ 6LHP|FKWHQ=HLOHQDEUXIHQ GLHPLWHLQHUEHVWLPPWHQ :HUWHOLVWHEHUHLQVWLPPHQ 9HUZHQGHQ6LHGD]XLQGHU :+(5(.ODXVHOGLH6XFK EHGLQJXQJ,1 companyname companyname Tokyo TokyoTraders Traders Beispiel Beispiel 11 country country Japan Japan Mayumi’s Mayumi’s Formaggi FormaggiFortini Fortinis.r.l. s.r.l. Japan Japan Italy Italy Pasta PastaButtini Buttinis.r.l. s.r.l. Italy Italy ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** 0HWKRGLVFKHU+LQZHLV :HLVHQ6LHGDUDXIKLQGDVV 64/6HUYHUGLH%HLVSLHOH XQGDXIGLHVHOEH:HLVH DXIO|VWXQGGDVVHOEH5HVXOW VHW]XUFNJLEW,Q%HLVSLHO ZLUGGLH6XFKEHGLQJXQJ,1 YHUZHQGHWZlKUHQGLQ %HLVSLHO]ZHL9HUJOHLFKV RSHUDWRUHQ GLHPLWGHP 2SHUDWRU25YHUEXQGHQ VLQGYHUZHQGHWZHUGHQ Verwenden Sie in der WHERE-Klausel die Suchbedingung IN zum Abrufen von Zeilen, die mit einer bestimmten Werteliste übereinstimmen. Beachten Sie bei Verwendung der Suchbedingung IN die folgenden Richtlinien: Verwenden Sie entweder die Suchbedingung IN oder eine Reihe von Vergleichsausdrücken, die durch einen Operator OR verbunden sind. SQL Server löst sie in derselben Weise auf und gibt identische Resultsets zurück. Schließen Sie keinen NULL-Wert in die Suchbedingung ein. Ein NULLWert in der Liste der Suchbedingungen wird zum Ausdruck "= NULL". Wenn ON für ANSI_NULLS festgelegt ist, führt ein Vergleich mit NULL immer zu UNKNOWN. Dies kann zu unerwarteten Resultsets führen. Wenn OFF für ANSI_NULLS festgelegt ist, führt ein Vergleich mit NULL zu TRUE oder FASLE. Dies hängt von den Inhalten der verglichenen Spalten ab. Um Probleme zu vermeiden, verwenden Sie stattdessen die Funktionen IS NULL oder IS NOT NULL. Verwenden Sie die Suchbedingung NOT IN zum Abrufen von Zeilen, die nicht in der Werteliste enthalten sind. Beachten Sie, dass sich das Abrufen von Daten bei Verwendung des Operators NOT verzögern kann. 8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ %HLVSLHO (UJHEQLV %HLVSLHO (UJHEQLV In diesem Beispiel wird aus der suppliers-Tabelle eine Liste von Firmen erstellt, die in Japan oder Italien ansässig sind. 86(1RUWKZLQG 6(/(&7FRPSDQ\QDPHFRXQWU\ )520VXSSOLHUV :+(5(FRXQWU\,1 -DSDQ ,WDO\ *2 FRPSDQ\QDPH FRXQWU\ 7RN\R7UDGHUV 0D\XPL V )RUPDJJL)RUWLQLVUO 3DVWD%XWWLQLVUO URZVDIIHFWHG -DSDQ -DSDQ ,WDO\ ,WDO\ Auch in diesem Beispiel wird aus der suppliers-Tabelle eine Liste von Firmen erstellt, die in Japan oder Italien ansässig sind. Beachten Sie, dass hier statt der Suchbedingung IN zwei Ausdrücke, die durch den Operator OR verbunden sind, mit dem Vergleichsoperator verwendet werden. Das Resultset ist identisch mit dem Resultset in Beispiel 1. 86(1RUWKZLQG 6(/(&7FRPSDQ\QDPHFRXQWU\ )520VXSSOLHUV :+(5(FRXQWU\ -DSDQ 25FRXQWU\ ,WDO\ *2 FRPSDQ\QDPH FRXQWU\ 7RN\R7UDGHUV 0D\XPL V )RUPDJJL)RUWLQLVUO 3DVWD%XWWLQLVUO URZVDIIHFWHG -DSDQ -DSDQ ,WDO\ ,WDO\ 8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ $EUXIHQYRQXQEHNDQQWHQ:HUWHQ ,QKDOWGLHVHU)ROLH =HLJHQ6LHZLH=HLOHQPLW XQEHNDQQWHQ:HUWHQDEJH UXIHQZHUGHQ 86(1RUWKZLQG 86(1RUWKZLQG 6(/(&7FRPSDQ\QDPHID[ 6(/(&7FRPSDQ\QDPHID[ )520VXSSOLHUV )520VXSSOLHUV :+(5(ID[,618// :+(5(ID[,618// *2 *2 (LQVWLHJ 6LHN|QQHQ=HLOHQPLWXQ EHNDQQWHQ:HUWHQDEUXIHQ LQGHP6LHLQGHU:+(5( .ODXVHOGLH%HGLQJXQJ,6 18//DQJHEHQ companyname companyname Exotic ExoticLiquids Liquids fax fax NULL NULL New NewOrleans OrleansCajun CajunDelights Delights Tokyo Traders Tokyo Traders NULL NULL NULL NULL Cooperativa Cooperativade deQuesos Quesos‘Las ‘LasCabras’ Cabras’ … … NULL NULL … … ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Eine Spalte enthält einen NULL-Wert, wenn bei der Dateneingabe kein Wert eingegeben wurde und für die Spalte keine Standardwerte definiert sind. Ein NULL-Wert ist nicht dasselbe wie ein Eintrag mit der Zahl 0 oder mit einer Zeichenfolge aus Leerzeichen. Verwenden Sie die Suchbedingung IS NULL zum Abrufen von Zeilen, die eine Spalte mit unbekannten Werten enthalten. Beachten Sie beim Abrufen von Zeilen mit unbekannten Werten die folgenden Festlegungen und Richtlinien: Vergleichsoperationen mit NULL-Werten sind nicht möglich, weil sie nicht aus vergleichbaren Werten bestehen. Sie definieren in der CREATE TABLE-Anweisung, ob Spalten NULLWerte enthalten können. Verwenden Sie die Suchbedingung IS NOT NULL zum Abrufen von Zeilen, deren Spalten bekannte Werte enthalten. 8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ %HLVSLHO (UJHEQLV In diesem Beispiel wird aus der suppliers-Tabelle eine Liste von Firmen abgerufen, deren fax-Spalte einen NULL-Wert enthält. 86(1RUWKZLQG 6(/(&7FRPSDQ\QDPHID[ )520VXSSOLHUV :+(5(ID[,618// *2 FRPSDQ\QDPH ID[ ([RWLF/LTXLGV 1HZ2UOHDQV&DMXQ'HOLJKWV 7RN\R7UDGHUV &RRSHUDWLYDGH4XHVRV /DV&DEUDV URZVDIIHFWHG 18// 18// 18// 18// 8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ )RUPDWLHUHQYRQ5HVXOWVHWV ,QKDOWGLHVHU)ROLH =HLJHQ6LHZLH5HVXOWVHWV IRUPDWLHUWZHUGHQ (LQVWLHJ 6LHN|QQHQ,KUH5HVXOWVHWV EHUVLFKWOLFKHUJHVWDOWHQ LQGHP6LH'DWHQVRUWLHUHQ GRSSHOWH=HLOHQO|VFKHQ 6SDOWHQQDPHQlQGHUQRGHU /LWHUDOHYHUZHQGHQ 6RUWLHUHQGHU'DWHQ 'RSSHOWH=HLOHQO|VFKHQ bQGHUQGHU6SDOWHQQDPHQ 9HUZHQGHQYRQ /LWHUDOHQ ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Sie können die Übersichtlichkeit eines Resultsets verbessern, indem Sie die Reihenfolge der Daten im Resultset sortieren, doppelte Zeilen löschen, Spaltennamen in Aliasnamen ändern oder Werte im Resultset durch Literale ersetzen. Diese Formatierungsoptionen ändern nicht die Daten selbst, sondern nur die Darstellung der Daten. 8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ 6RUWLHUHQGHU'DWHQ ,QKDOWGLHVHU)ROLH =HLJHQ6LHZLHGLH25'(5 %<.ODXVHOYHUZHQGHWZLUG Beispiel Beispiel 11 86(1RUWKZLQG 86(1RUWKZLQG 6(/(&7SURGXFWLGSURGXFWQDPHFDWHJRU\LGXQLWSULFH 6(/(&7SURGXFWLGSURGXFWQDPHFDWHJRU\LGXQLWSULFH )520SURGXFWV )520SURGXFWV 25'(5%<FDWHJRU\LGXQLWSULFH'(6& 25'(5%<FDWHJRU\LGXQLWSULFH'(6& *2 *2 (LQVWLHJ 1DFKGHP6LHGLHDE]XUXIHQ GHQ6SDOWHQXQG=HLOHQDXV JHZlKOWKDEHQN|QQHQ6LH GLH5HLKHQIROJHGHV5HVXOW VHWVPLW+LOIHGHU25'(5 %<.ODXVHOVRUWLHUHQ productid productid 38 38 43 43 22 … … 63 63 88 61 61 … … productname categoryid productname categoryid unitprice unitprice Cote de Blaye 11 263.5000 Cote de Blaye 263.5000 Ipoh Coffee 1 46.0000 Ipoh Coffee 1 46.0000 Chang 11 19.0000 Chang 19.0000 … … … … … … Vegie-spread 22 43.9000 Vegie-spread 43.9000 Northwoods 40.0000 NorthwoodsCranberry CranberrySauce Sauce 22 40.0000 Sirop 22 28.5000 Siropd'érable d'érable 28.5000 … … … … … … ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** 0HWKRGLVFKHU+LQZHLV 9HUJOHLFKHQ6LHGLHLQGHU 25'(5%<.ODXVHOLQGHQ %HLVSLHOHQXQGDQJH JHEHQHQ6SDOWHQ,Q%HL VSLHOZHUGHQGLHLQGHU 25'(5%<.ODXVHODQJH JHEHQHQ6SDOWHQGXUFKLKUH MHZHLOLJH3RVLWLRQLQGHU $XVZDKOOLVWHHUVHW]W'LH 5HVXOWVHWVLQGHQ%HL VSLHOHQXQGVLQG LGHQWLVFK Verwenden Sie die ORDER BY-Klausel zum Sortieren von Zeilen im Resultset in aufsteigender (ASC) oder absteigender (DESC) Reihenfolge. Beachten Sie bei Verwendung der ORDER BY-Klausel die folgenden Festlegungen und Richtlinien: Die Sortierreihenfolge wird beim Installieren von SQL Server festgelegt. Führen Sie die gespeicherte Systemprozedur sp_helpsort aus, um festzustellen, welche Sortierreihenfolge bei der Installation für die Datenbank definiert wurde. SQL Server übergibt nur dann ein sortiertes Resultset, wenn die Sortierreihenfolge mit einer ORDER BY-Klausel festgelegt wurde. SQL Server sortiert standardmäßig in aufsteigender Reihenfolge. Spalten, die in die ORDER BY-Klausel eingeschlossen sind, müssen nicht in der Auswahlliste enthalten sein. Sie können nach Spaltennamen, berechneten Werten oder Ausdrücken sortieren. Sie können in der ORDER BY-Klausel statt des Spaltennamens die Nummer der Position der Spalte in der Auswahlliste angeben. Die Spalten werden auf dieselbe Weise ausgewertet, und es wird dasselbe Resultset zurückgegeben. Sie können in der ORDER BY-Klausel nicht die Spalten text, ntext oder image verwenden. 7LSS Durch eine geeignete Indizierung kann die Sortierung mit Hilfe der ORDER BY-Klausel weiter verbessert werden. %HLVSLHO (UJHEQLV 8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ In diesem Beispiel werden Product ID, Produktname, Kategorie und Einzelpreis jedes einzelnen Produkts aus der products-Tabelle abgerufen. Standardmäßig wird das Resultset nach Kategorien aufsteigend und die Zeilen innerhalb der einzelnen Kategorien nach Einzelpreisen absteigend sortiert. 86(1RUWKZLQG 6(/(&7SURGXFWLGSURGXFWQDPHFDWHJRU\LGXQLWSULFH )520SURGXFWV 25'(5%<FDWHJRU\LGXQLWSULFH'(6& *2 SURGXFWLG SURGXFWQDPH FDWHJRU\LGXQLWSULFH &{WHGH%OD\H ,SRK&RIIHH &KDQJ &KDL 6WHHOH\H6WRXW &KDUWUHXVHYHUWH /DNNDOLN||UL 2XWEDFN/DJHU 6DVTXDWFK$OH /DXJKLQJ/XPEHUMDFN/DJHU 5K|QEUlX.ORVWHUELHU *XDUDQi)DQWiVWLFD 9HJLHVSUHDG 1RUWKZRRGV&UDQEHUU\6DXFH 6LURSG pUDEOH *UDQGPD V%R\VHQEHUU\6SUHDG URZVDIIHFWHG %HLVSLHO Dieses Beispiel ähnelt Beispiel 1. Der einzige Unterschied ist, dass in der ORDER BY-Klausel statt der Spaltennamen die Nummern der Position der Spalten in der Auswahlliste angegeben ist. SQL Server löst beide Abfragen auf dieselbe Weise auf und gibt dasselbe Resultset zurück. 86(1RUWKZLQG 6(/(&7SURGXFWLGSURGXFWQDPHFDWHJRU\LGXQLWSULFH )520SURGXFWV 25'(5%<'(6& *2 8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ 'RSSHOWH=HLOHQO|VFKHQ ,QKDOWGLHVHU)ROLH =HLJHQ6LHZLHGRSSHOWH =HLOHQPLW+LOIHGHU6XFKEH GLQJXQJ',67,1&7JHO|VFKW ZHUGHQ Beispiel Beispiel 11 86(1RUWKZLQG 86(1RUWKZLQG 6(/(&7',67,1&7FRXQWU\ 6(/(&7',67,1&7FRXQWU\ )520VXSSOLHUV )520VXSSOLHUV 25'(5%<FRXQWU\ 25'(5%<FRXQWU\ *2 *2 (LQVWLHJ *HEHQ6LH]XP/|VFKHQ GRSSHOWHU=HLOHQDXVGHP 5HVXOWVHWLQGHU6(/(&7 $QZHLVXQJGLH',67,1&7 .ODXVHODQ country country Australia Australia Brazil Brazil Canada Canada Denmark Denmark Finland Finland France France Germany Germany Italy Italy Japan Japan Netherlands Netherlands Norway Norway Singapore Singapore Spain Spain Sweden Sweden UK UK USA USA ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Wenn Sie eine Liste ohne Mehrfachnennungen einzelner Werte benötigen, verwenden Sie die DISTINCT-Klausel zum Löschen doppelter Zeilen im Result)KUHQ6LHHLQH$EIUDJHZLH set. Beachten Sie bei Verwendung der DISTINCT-Klausel die folgenden FestLP%LOGDQJH]HLJWDXVMH legungen: GRFKRKQHGLH',67,1&7 0HWKRGLVFKHU+LQZHLV .ODXVHO )RUGHUQ6LHGLH.XUVWHLO QHKPHUDXIGLH$Q]DKOGHU ]XUFNJHJHEHQHQ=HLOHQ]X YHUJOHLFKHQ %HLVSLHO Ist die DISTINCT-Klausel nicht angegeben, werden im Resultset alle Zeilen zurückgegeben, die die in der SELECT-Anweisung festgelegte Suchbedingung erfüllen. Die Kombination der Werte in der Auswahlliste bestimmt die Aussagekraft des Resultsets. Zeilen mit einer einmaligen Kombination von Werten werden abgerufen und im Resultset zurückgegeben. Ist keine ORDER BY-Klausel angegeben, wird das Resultset von der DISTINCT-Klausel unsortiert zurückgegeben. Wenn eine DISTINCT-Klausel angegeben ist, müssen die ORDER BYSpalten in der SELECT-Liste angezeigt werden. In diesem Beispiel werden alle Reihen aus der suppliers-Tabelle abgerufen, jeder Ländername wird jedoch nur einmal angezeigt. 86(1RUWKZLQG 6(/(&7',67,1&7FRXQWU\ )520VXSSOLHUV 25'(5%<FRXQWU\ *2 (UJHEQLV 8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ FRXQWU\ $XVWUDOLD %UD]LO &DQDGD 'HQPDUN )LQODQG )UDQFH *HUPDQ\ ,WDO\ -DSDQ 1HWKHUODQGV 1RUZD\ 6LQJDSRUH 6SDLQ 6ZHGHQ 8. 86$ URZVDIIHFWHG %HLVSLHO (UJHEQLV In diesem Beispiel ist die DISTINCT-Klausel nicht angegeben. Es werden alle Zeilen aus der suppliers-Tabelle abgerufen und in absteigender Reihenfolge aufgelistet. Beachten Sie, dass alle gefundenen Instanzen eines Ländernamens angezeigt werden. 86(1RUWKZLQG 6(/(&7FRXQWU\ )520VXSSOLHUV 25'(5%<FRXQWU\ *2 FRXQWU\ $XVWUDOLD $XVWUDOLD %UD]LO &DQDGD &DQDGD 'HQPDUN )LQODQG )UDQFH )UDQFH )UDQFH *HUPDQ\ *HUPDQ\ *HUPDQ\ ,WDO\ ,WDO\ -DSDQ -DSDQ 1HWKHUODQGV 8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ (Fortsetzung) FRXQWU\ 1RUZD\ 6LQJDSRUH 6SDLQ URZVDIIHFWHG 8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ bQGHUQGHU6SDOWHQQDPHQ ,QKDOWGLHVHU)ROLH 86(1RUWKZLQG 86(1RUWKZLQG 6(/(&7 6(/(&7 ILUVWQDPH$6)LUVWODVWQDPH$6/DVW ILUVWQDPH$6)LUVWODVWQDPH$6/DVW HPSOR\HHLG HPSOR\HHLG $6 (PSOR\HH,' $6 (PSOR\HH,' )520HPSOR\HHV )520HPSOR\HHV *2 *2 =HLJHQ6LHZLH6SDOWHQ QDPHQJHlQGHUWZHUGHQ GDPLWVLHEHVVHUYHUVWlQG OLFKVLQG (LQVWLHJ 9HUZHQGHQ6LH$OLDVQDPHQ VWDWWGHUHLJHQWOLFKHQ 6SDOWHQQDPHQGDPLWGDV 5HVXOWVHWEHVVHUYHUVWlQG OLFKLVW First First Nancy Nancy Andrew Andrew Janet Janet Margaret Margaret Steven Steven Michael Michael Robert Robert Laura Laura Anne Anne Last Last Davolio Davolio Fuller Fuller Leverling Leverling Peacock Peacock Buchanan Buchanan Suyama Suyama King King Callahan Callahan Dodsworth Dodsworth Employee EmployeeID: ID: 11 22 33 44 55 66 77 88 99 ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Erstellen Sie für das Resultset besser verständliche Spaltennamen, indem Sie die Standardspaltennamen mit Hilfe des Schlüsselwortes AS durch Aliasnamen ersetzen. 7HLOV\QWD[ SELECT column_name | expression AS column_heading FROM table_name Beachten Sie beim Ändern von Spaltennamen die folgenden Festlegungen und Richtlinien: Standardmäßig werden im Resultset die Spaltennamen angezeigt, die beim Erstellen der Tabelle in der CREATE TABLE-Anweisung angegeben wurden. Schließen Sie Spaltennamen, die Leerzeichen enthalten oder nicht den Benennungskonventionen für SQL Server-Objekte entsprechen, in einfache Anführungszeichen ein. Sie können Spaltenaliasnamen für berechnete Spalten, die Funktionen oder Zeichenfolgeliterale enthalten, erstellen. Ein Spaltenaliasname darf maximal 128 Zeichen lang sein. 8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ %HLVSLHO (UJHEQLV In diesem Beispiel wird eine Liste der Mitarbeiter aus der employees-Tabelle abgerufen. Die angegebenen Spaltenaliasnamen ersetzen die Spaltennamen firstname, lastname und employeeid. Beachten Sie, dass der Aliasname (PSOR\HH,' in einfache Anführungszeichen eingeschlossen ist, weil er ein Leerzeichen enthält. 86(1RUWKZLQG 6(/(&7ILUVWQDPH$6)LUVWODVWQDPH$6/DVW HPSOR\HHLG$6 (PSOR\HH,' )520HPSOR\HHV *2 )LUVW /DVW (PSOR\HH,' 1DQF\ $QGUHZ -DQHW 0DUJDUHW 6WHYHQ 0LFKDHO 5REHUW /DXUD $QQH URZVDIIHFWHG 'DYROLR )XOOHU /HYHUOLQJ 3HDFRFN %XFKDQDQ 6X\DPD .LQJ &DOODKDQ 'RGVZRUWK 8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ 9HUZHQGHQYRQ/LWHUDOHQ ,QKDOWGLHVHU)ROLH =HLJHQ6LHZLHGDV5HVXOW VHWGXUFKGLH9HUZHQGXQJ YRQ/LWHUDOHQLQGHU 6(/(&7$QZHLVXQJEHVVHU YHUVWlQGOLFKJHPDFKW ZHUGHQNDQQ (LQVWLHJ 6LHN|QQHQGDV5HVXOWVHW PLW+LOIHYRQ/LWHUDOHQEHV VHUYHUVWlQGOLFKPDFKWHQ 86(1RUWKZLQG 86(1RUWKZLQG 6(/(&7 6(/(&7 ILUVWQDPHODVWQDPH ILUVWQDPHODVWQDPH ,GHQWLILFDWLRQQXPEHU HPSOR\HHLG ,GHQWLILFDWLRQQXPEHU HPSOR\HHLG )520HPSOR\HHV )520HPSOR\HHV *2 *2 First First Nancy Nancy Andrew Andrew Janet Janet Margaret Margaret Steven Steven Michael Michael Robert Robert Laura Laura Anne Anne Last Last Davolio Davolio Fuller Fuller Leverling Leverling Peacock Peacock Buchanan Buchanan Suyama Suyama King King Callahan Callahan Dodsworth Dodsworth Employee EmployeeID: ID: Identification number: 1 Identification number: 1 Identification Identificationnumber: number: 22 Identification Identificationnumber: number: 33 Identification Identificationnumber: number: 44 Identification number: Identification number: 55 Identification Identificationnumber: number: 66 Identification Identificationnumber: number: 77 Identification number: Identification number: 88 Identification Identificationnumber: number: 99 ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Literale sind Buchstaben, Zahlen oder Symbole, die in einem Resultset als besondere Werte verwendet werden. Sie können Literale in die Auswahlliste einschließen, um Resultsets besser verständlich zu machen. 7HLOV\QWD[ SELECT column_name | 'string literal' [, column_name | 'string_literal'...] FROM table_name %HLVSLHO In diesem Beispiel wird eine Liste der Mitarbeiter aus der employees-Tabelle abgerufen. Beachten Sie, dass die Zeichenfolge ,GHQWLILFDWLRQQXPEHU im Resultset vor dem Namen der employeeid-Spalte steht. (UJHEQLV 86(1RUWKZLQG 6(/(&7ILUVWQDPHODVWQDPH ,GHQWLILFDWLRQQXPEHU HPSOR\HHLG )520HPSOR\HHV *2 ILUVWQDPH ODVWQDPH HPSOR\HHLG 1DQF\ 'DYROLR $QGUHZ )XOOHU -DQHW /HYHUOLQJ 0DUJDUHW 3HDFRFN 6WHYHQ %XFKDQDQ 0LFKDHO 6X\DPD 5REHUW .LQJ /DXUD &DOODKDQ $QQH 'RGVZRUWK URZVDIIHFWHG ,GHQWLILFDWLRQQXPEHU ,GHQWLILFDWLRQQXPEHU ,GHQWLILFDWLRQQXPEHU ,GHQWLILFDWLRQQXPEHU ,GHQWLILFDWLRQQXPEHU ,GHQWLILFDWLRQQXPEHU ,GHQWLILFDWLRQQXPEHU ,GHQWLILFDWLRQQXPEHU ,GHQWLILFDWLRQQXPEHU 8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ 9HUDUEHLWHQYRQ$EIUDJHQ ,QKDOWGLHVHU)ROLH (UOlXWHUQ6LHGLH9HUDUEHL WXQJYRQ$EIUDJHQ 1LFKW ]ZLVFKHQJHVSHLFKHUWH $EIUDJHQ$GKRF (LQVWLHJ $OOH$EIUDJHQZHUGHQDXI GLHVHOEH:HLVHYHUDUEHLWHW EHYRUVLHDXVJHIKUW 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$XVIKUHQ Analysieren Analysieren Auflösen Auflösen Optimieren Optimieren 6SlWHUHV$XVIKUHQ ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Alle Abfragen werden auf dieselbe Weise verarbeitet, bevor sie ausgeführt werden. SQL Server kann einen Teil der Verarbeitung für spätere Ausführungen derselben Abfrage speichern. 1LFKW]ZLVFKHQJHVSHLFKHUWH$EIUDJHQ$GKRF Alle Abfragen werden analysiert, aufgelöst, optimiert und kompiliert, bevor sie ausgeführt werden. 6LFKWHQZHUGHQ]XHLQHUHLQ ]HOQHQ$QZHLVXQJUHGX]LHUW DXIJHO|VW'LH$QZHLVXQJ GLHDXIGLH6LFKWYHUZHLVW ELOGHW]XVDPPHQPLWGHU 6LFKWGHILQLWLRQHLQH 6(/(&7$QZHLVXQJ Prozess Beschreibung Analysieren Überprüft, ob die Syntax korrekt ist. Auflösen Stellt fest, ob die Namen der Objekte verfügbar sind, und bestimmt die Objektbesitzberechtigung. Optimieren Bestimmt die zu verwendenden Indizes und die Verknüpfungsstrategien. Kompilieren Übersetzt die Abfrage in ein ausführbares Format. Ausführen Sendet kompilierte Verarbeitungsanforderungen. =ZLVFKHQJHVSHLFKHUWH$EIUDJHQ Zur Verbesserung des Leistungsverhaltens kann SQL Server kompilierte Abfragepläne zur Wiederverwendung speichern. Abfragepläne sind optimierte Anweisungen für die Verarbeitung von Abfragen und den Zugriff auf Daten. Die Abfragepläne werden im Prozedurcache, einem temporären Speicherort für die gerade ausgeführte Version einer bestimmten Abfrage, gespeichert. 8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ $XWRPDWLVFKHV=ZLVFKHQVSHLFKHUQYRQ$EIUDJHQ ,QKDOWGLHVHU)ROLH %HVFKUHLEHQ6LHZLH 64/6HUYHU$EIUDJHQDXWR PDWLVFK]ZLVFKHQVSHLFKHUW (LQVWLHJ $EIUDJHQZHUGHQXQWHU]ZHL %HGLQJXQJHQDXWRPDWLVFK ]ZLVFKHQJHVSHLFKHUW $GKRF%DWFKHV 86(1RUWKZLQG 86(1RUWKZLQG 6(/(&7)520SURGXFWV:+(5(XQLWSULFH 6(/(&7)520SURGXFWV:+(5(XQLWSULFH 6(/(&7)520SURGXFWV:+(5(XQLWSULFH 6(/(&7)520SURGXFWV:+(5(XQLWSULFH 6(/(&7)520SURGXFWV:+(5(XQLWSULFH 6(/(&7)520SURGXFWV:+(5(XQLWSULFH *2 *2 $XWRPDWLVFKH 3DUDPHWULVLHUXQJ 86(OLEUDU\ 86(OLEUDU\ 6(/(&7)520PHPEHU:+(5(PHPEHUBQR 6(/(&7)520PHPEHU:+(5(PHPEHUBQR 6(/(&7)520PHPEHU:+(5(PHPEHUBQR 6(/(&7)520PHPEHU:+(5(PHPEHUBQR 6(/(&7)520PHPEHU:+(5(PHPEHUBQR 6(/(&7)520PHPEHU:+(5(PHPEHUBQR *2 *2 ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Zwischengespeicherte Abfragen werden in einem Speicherbereich abgelegt, der als Prozedurcache bezeichnet wird. Abfragedefinitionen werden automatisch zwischengespeichert, wenn zwei Bedingungen erfüllt sind: Ad-hoc-Batches und automatische Parametrisierung. Das automatische Zwischenspeichern kann nicht direkt angegeben werden. $GKRF%DWFKHV SQL Server speichert die Pläne von Ad-hoc-Batches. Wenn ein nachfolgender Batch mit dem Text des ersten Batches übereinstimmt, verwendet SQL Server den zwischengespeicherten Plan. Dieser Plan ist auf genaue Textübereinstimmungen beschränkt. %HLVSLHO 0HWKRGLVFKHU+LQZHLV )UHLQHJHQDXH7H[WEHU HLQVWLPPXQJPVVHQVR ZRKOGLH'DWHQDOVDXFKGLH 'DWHQW\SHQEHUHLQVWLP PHQ,QGLHVHP%HLVSLHO ZLUGijDOV:lKUXQJV GDWHQW\SijGDJHJHQ DOV'DWHQW\SPLW*OHLW NRPPDEHUJHEHQ 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$XVIKUHQ HLQIDFKHU$EIUDJHQ]XEH UFNVLFKWLJHQVLQG (LQVWLHJ %HWUDFKWHQ6LHHLQLJHGHU $VSHNWHGLHVLFKEHLP $XVIKUHQYRQHLQIDFKHQ $EIUDJHQDXIGLH/HLVWXQJ YRQ64/6HUYHUDXVZLUNHQ 1276XFKEHGLQJXQJHQ N|QQHQGDV$EUXIHQYRQ'DWHQ YHU]|JHUQ 6XFKEHGLQJXQJ/,.( YHU]|JHUWGDV$EUXIHQYRQ'DWHQ *HQDXH hEHUHLQVWLPPXQJHQRGHU%HUHLFKHN|QQHQGDV $EUXIHQYRQ'DWHQEHVFKOHXQLJHQ 25'(5%<.ODXVHONDQQ GDV$EUXIHQYRQ'DWHQ YHU]|JHUQ ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Sie sollten in Ihrer Vorgehensweise einige Aspekte berücksichtigen, die sich beim Ausführen von einfachen Abfragen auf die Leistung von SQL Server auswirken. Verwenden Sie möglichst keine negativen, sondern positive Suchbedingungen. Negative Suchbedingungen, z. B. NOT BETWEEN, NOT IN und IS NOT NULL, können das Abrufen von Daten verzögern, weil alle Zeilen ausgewertet werden. Vermeiden Sie die Suchbedingung LIKE, wenn die Abfrage auf andere Weise präziser formuliert werden kann. Das Abrufen der Daten kann länger dauern, wenn Sie die Suchbedingung LIKE verwenden. Verwenden Sie, wenn möglich, genaue Übereinstimmungen oder Bereiche als Suchbedingungen. Auch hier gilt, dass präzise formulierte Abfragen schneller ausgeführt werden. Das Abrufen von Daten verzögert sich, wenn Sie die ORDER BY-Klausel verwenden, weil SQL Server das Resultset ermitteln und sortieren muss, bevor die erste Zeile zurückgegeben wird. 8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ (PSIRKOHQH0HWKRGHQ ,QKDOWGLHVHU)ROLH 1HQQHQ6LHGLHHPSIRKOH QHQ0HWKRGHQ]XP$XV IKUHQHLQIDFKHU$EIUDJHQ 9HUZHQGHQ6LHGLH',67,1&7.ODXVHO]XP/|VFKHQGRSSHOWHU 9HUZHQGHQ6LHGLH',67,1&7.ODXVHO]XP/|VFKHQGRSSHOWHU =HLOHQLP =HLOHQLP 5HVXOWVHW 5HVXOWVHW (LQVWLHJ 'LHLP)ROJHQGHQJHQDQQ WHQHPSIRKOHQHQ0HWKRGHQ VROOHQ6LHEHLGHU$XVIK UXQJHLQIDFKHU$EIUDJHQ XQWHUVWW]HQ 9HUEHVVHUQ6LHGLH9HUVWlQGOLFKNHLWHLQHV 9HUEHVVHUQ6LHGLH9HUVWlQGOLFKNHLWHLQHV 5HVXOWVHWVLQGHP 5HVXOWVHWVLQGHP 6LH6SDOWHQQDPHQ 6LH6SDOWHQQDPHQ lQGHUQ lQGHUQ RGHU/LWHUDOHEHQXW]HQ RGHU/LWHUDOHEHQXW]HQ 6HW]HQ6LHLQHLQHUPHKU]HLOLJHQ/LVWHPLW6SDOWHQQDPHQHLQ 6HW]HQ6LHLQHLQHUPHKU]HLOLJHQ/LVWHPLW6SDOWHQQDPHQHLQ .RPPDYRUDOOH6SDOWHQQDPHQQLFKWDEHUYRUGHQ .RPPDYRUDOOH6SDOWHQQDPHQQLFKWDEHUYRUGHQ HUVWHQ HUVWHQ ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Die im Folgenden aufgeführten empfohlenen Methoden sollen Sie bei der Ausführung einfacher Abfragen unterstützen: Verwenden Sie die DISTINCT-Klausel zum Löschen doppelter Zeilen im Resultset. Wenn Sie die DISTINCT-Klausel nicht verwenden, werden im Resultset alle Zeilen zurückgegeben, die die in der SELECT-Anweisung festgelegten Suchbedingungen erfüllen. Verbessern Sie die Verständlichkeit von Resultsets, indem sie Spaltennamen durch Aliasnamen oder Werte im Resultset durch Literale ersetzen. Mit diesen Formatierungsoptionen wird nur die Darstellung der Daten geändert, die Daten selbst bleiben unverändert. Setzen Sie in den mehrzeiligen Listen mit Spaltennamen Kommas vor alle Spaltennamen, nicht aber vor den ersten Spaltennamen. Bei diesem Format können Sie einzelne Zeilen leicht auskommentieren oder ausschneiden und einfügen. Verwenden Sie zum Beispiel folgendes Format: 86(1RUWKZLQG 6(/(&7ILUVWQDPH$6)LUVW ODVWQDPH$6/DVW HPSOR\HHLG$6 (PSOR\HH,' )520HPSOR\HHV *2 Zusätzliche Informationen zu den folgenden Themen erhalten Sie in der SQL Server-Onlinedokumentation. Thema Suchbegriff Verwenden von Zeichenfolgen “Musterübereinstimmung” Sortieren der Resultsets “Sortierreihenfolge” 8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ hEXQJVHLQKHLW$$EUXIHQYRQ'DWHQXQG%HDUEHLWHQGHU 5HVXOWVHWV ,QKDOWGLHVHU)ROLH *HEHQ6LHHLQH(LQIKUXQJ 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=HLWIUGLHhEXQJVHLQKHLW0LQXWHQ 8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ hEXQJ $EUXIHQYRQ'DWHQ In dieser Übung wählen Sie bestimmte Daten aus Tabellen in der libraryDatenbank aus. Das Verzeichnis C:\Moc\2316B\Labfiles\L03\Answers enthält fertige Skripts für diese Übung. Ç So wählen Sie bestimmte Spalten aus In diesem Verfahren werden Sie eine SELECT-Anweisung schreiben und ausführen, die die Spalten title und title_no aus der title-Tabelle abruft. 1. Melden Sie sich mit Hilfe der Informationen in der folgenden Tabelle an der Schulungsraumdomäne nwtraders an. Option Eingabe Benutzername SQLAdminx (wobei x die Ihrem Computernamen zugewiesene Nummer ist, wie in der Schulungsraumdomäne nwtraders.msft festgelegt) Kennwort password 2. Öffnen Sie SQL Query Analyzer und melden Sie sich gegebenenfalls mit Microsoft Windows®-Authentifizierung am (lokalen) Server an. Sie sind berechtigt, sich an SQL Server anzumelden und SQL Server zu verwalten, da Sie als SQLAdminx angemeldet und damit Mitglied der lokalen Administratorgruppe von Windows 2000 sind. Alle Mitglieder dieser Gruppe werden automatisch der SQL Server-Rolle sysadmin zugeordnet. 3. Zeigen und klicken Sie im Menü Abfrage auf Ergebnisse in Text. 4. Klicken Sie in der Liste DB auf library. 5. Schreiben Sie eine SELECT-Anweisung, die die Spalten title und title_no aus der title-Tabelle abruft, und führen Sie sie aus. Answer_Columns.sql enthält ein fertiges Skript für diesen Schritt. 86(OLEUDU\ 6(/(&7WLWOHWLWOHBQR )520WLWOH *2 6. Speichern Sie die SELECT-Anweisung als ANSI-Textdatei mit der Erweiterung SQL. 7. Speichern Sie das Resultset in einer Datei mit der Erweiterung RPT. 8. Zeigen und klicken Sie im Menü Abfrage auf Ergebnisse in Raster, um das Format der Ergebnisse zurückzusetzen. 8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ (UJHEQLV Ihr Resultset sollte etwa aussehen wie der folgende Teil eines Resultsets. 7LWOH WLWOHBQR /DVWRIWKH0RKLFDQV 7KH9LOODJH:DWFK7RZHU 6HOI+HOS&RQGXFW3HUVHYHUDQFH 6RQJVRID6DYR\DUG URZVDIIHFWHG Ç So wählen Sie Zeilen mit Hilfe eines Vergleichsoperators aus In diesem Verfahren werden Sie eine SELECT-Anweisung schreiben und ausführen, die mit Hilfe einer WHERE-Klausel mit einem Vergleichsoperator Daten aus bestimmten Zeilen abruft. Answer_Comparison.sql enthält ein fertiges Skript für dieses Verfahren. • Schreiben Sie eine SELECT-Anweisung, die den Titel von Titelnummer 10 aus der title-Tabelle abruft, und führen Sie sie aus. Sie können die gespeicherte Systemprozedur sp_help für die title-Tabelle ausführen, um den korrekten Spaltennamen zu ermitteln. 86(OLEUDU\ 6(/(&7WLWOH )520WLWOH :+(5(WLWOHBQR *2 (UJHEQLV Ihr Resultset sollte etwa aussehen wie das folgende Resultset. WLWOH 7KH1LJKW%RUQ URZVDIIHFWHG Ç So wählen Sie Zeilen mit Hilfe eines Bereichs aus In diesem Verfahren werden Sie eine SELECT-Anweisung schreiben und ausführen, die mit Hilfe einer WHERE-Klausel mit einer Bereichsangabe Daten aus bestimmten Zeilen abruft. Answer_Range.sql enthält ein fertiges Skript für dieses Verfahren. • Schreiben Sie eine SELECT-Anweisung, die die Mitgliedsnummern und festgelegten Mahngebühren für alle Mitglieder mit Mahngebühren zwischen 8 $ und 9 $ aus der loanhist-Tabelle abruft, und führen Sie sie aus. Sie können die gespeicherte Systemprozedur sp_help für die loanhistTabelle ausführen, um den korrekten Spaltennamen zu ermitteln. 86(OLEUDU\ 6(/(&7PHPEHUBQRILQHBDVVHVVHG )520ORDQKLVW :+(5(ILQHBDVVHVVHG%(7:((1$1' *2 (UJHEQLV 8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ Ihr Resultset sollte etwa aussehen wie der folgende Teil eines Resultsets. Die tatsächliche Anzahl der zurückgegebenen Zeilen kann variieren. PHPEHUBQR ILQHBDVVHVVHG URZVDIIHFWHG Ç So wählen Sie Zeilen mit Hilfe einer Werteliste aus In diesem Verfahren werden Sie eine SELECT-Anweisung schreiben und ausführen, die mit Hilfe einer WHERE-Klausel, die eine Werteliste enthält, Daten aus bestimmten Zeilen abruft. Answer_InList.sql enthält ein fertiges Skript für dieses Verfahren. • Schreiben Sie eine SELECT-Anweisung, die die Titelnummer und den Autoren aller Bücher von Charles Dickens und Jane Austen aus der titleTabelle abruft, und führen Sie sie aus. Verwenden Sie in der SELECTAnweisung den Operator IN. 86(OLEUDU\ 6(/(&7DXWKRUWLWOHBQR )520WLWOH :+(5(DXWKRU,1 &KDUOHV'LFNHQV -DQH$XVWHQ *2 (UJHEQLV Ihr Resultset sollte etwa aussehen wie das folgende Resultset. DXWKRU WLWOHBQR -DQH$XVWHQ &KDUOHV'LFNHQV &KDUOHV'LFNHQV -DQH$XVWHQ -DQH$XVWHQ URZVDIIHFWHG Ç So wählen Sie Zeilen mit Hilfe eines Zeichenfolgevergleichs aus In diesem Verfahren werden Sie eine SELECT-Anweisung schreiben und ausführen, die Daten aus bestimmten Zeilen abruft, die eine Zeichenfolge enthalten, die einer anderen Zeichenfolge entspricht. Answer_String.sql enthält ein fertiges Skript für dieses Verfahren. 8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ • Schreiben Sie eine SELECT-Anweisung, die die Titelnummer und den Titel aus allen Zeilen der title-Tabelle abruft, die einen Titel enthalten, in dem die Zeichenfolge „Adventures“ vorkommt. Verwenden Sie in der Abfrage den Operator LIKE. 86(OLEUDU\ 6(/(&7WLWOHBQRWLWOH )520WLWOH :+(5(WLWOH/,.( $GYHQWXUHV *2 (UJHEQLV Ihr Resultset sollte etwa aussehen wie das folgende Resultset. WLWOHBQR WLWOH URZVDIIHFWHG 7KH$GYHQWXUHVRI5RELQ+RRG $GYHQWXUHVRI+XFNOHEHUU\)LQQ Ç So wählen Sie Zeilen mit NULL-Werten aus In diesem Verfahren werden Sie eine SELECT-Anweisung schreiben und ausführen, die mit Hilfe einer WHERE-Klausel, die nach NULL-Werten sucht, Daten aus bestimmten Zeilen abruft. Answer_IsNull.sql enthält ein fertiges Skript für dieses Verfahren. • Schreiben Sie eine SELECT-Anweisung, die aus der loanhist-Tabelle die Mitgliedsnummer, die festgelegte Mahngebühr und die Mahngebühr für Ausleihungen mit unbezahlten Mahngebühren abruft, und führen Sie sie aus. Rufen Sie Zeilen ab, in denen in der fine_assessed-Spalte Mahngebühren eingegeben wurden und die in der fine_paid-Spalte NULL-Werte enthalten. 86(OLEUDU\ 6(/(&7PHPEHUBQRILQHBDVVHVVHGILQHBSDLG )520ORDQKLVW :+(5(ILQHBDVVHVVHG,612718//$1'ILQHBSDLG,618// *2 (UJHEQLV Ihr Resultset sollte etwa aussehen wie das folgende Resultset. Die Anzahl der zurückgegebenen Zeilen kann variieren. PHPEHUBQR ILQHBDVVHVVHG ILQHBSDLG URZVDIIHFWHG 18// 18// 18// 18// 8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ hEXQJ %HDUEHLWHQGHU5HVXOWVHWV In dieser Übung werden Sie Abfragen schreiben und ausführen, mit denen die Anzeige der Daten in den Resultsets geändert wird. Sie werden mit dem DISTINCT-Schlüsselwort doppelte Zeilen löschen und mit dem Schlüsselwort ORDER BY das Resultset sortieren. Außerdem werden Sie die Spaltennamen und die Darstellung der Daten in Resultsets mit Hilfe von Aliasnamen und Literalen ändern. Das Verzeichnis C:\Moc\2316B\Labfiles\L03\Answers enthält fertige Skripts für diese Übung. Ç So löschen Sie doppelte Zeilen aus dem Resultset In diesem Verfahren werden Sie eine Abfrage für die adult-Tabelle schreiben und ausführen, die nur eindeutige Stadt/Staat-Kombinationen in Ihrem Resultset zurückgibt. Answer_Duplicates.sql enthält ein fertiges Skript für dieses Verfahren. • Schreiben Sie eine Abfrage, die alle eindeutigen Stadt/Staat-Kombinationen aus der adult-Tabelle abruft, und führen Sie sie aus. Das Resultset darf für jede der Stadt/Staat-Kombinationen nur eine einzige Zeile enthalten. 86(OLEUDU\ 6(/(&7',67,1&7FLW\VWDWH )520DGXOW *2 (UJHEQLV Ihr Resultset sollte etwa aussehen wie der folgende Teil eines Resultsets. &LW\ VWDWH 6DOW/DNH&LW\ $WODQWD 7DOODKDVVHH :DVKLQJWRQ URZVDIIHFWHG 87 *$ )/ '& Ç So sortieren Sie Daten In diesem Verfahren werden sie eine Abfrage schreiben und ausführen, die Titel aus der Tabelle title abruft und sie in alphabetischer Reihenfolge auflistet. Answer_Sort.sql enthält ein fertiges Skript für dieses Verfahren. • Schreiben Sie eine Abfrage, die eine sortierte Liste aller Titel aus der titleTabelle abruft, und führen Sie sie aus. 86(OLEUDU\ 6(/(&7WLWOH )520WLWOH 25'(5%<WLWOH *2 8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ (UJHEQLV Ihr Resultset sollte etwa aussehen wie der folgende Teil eines Resultsets. 7LWOH $7DOHRI7ZR&LWLHV $GYHQWXUHVRI+XFNOHEHUU\)LQQ %DOODGVRID%RKHPLDQ &DQGLGH URZVDIIHFWHG Ç So berechnen Sie Daten, geben Sie berechnete Werte zurück und verwenden Sie einen Spaltenalias In dieser Übung werden Sie eine Abfrage schreiben und ausführen, die die Spalten member_no, isbn und fine_assessed aus der loanhist-Tabelle von allen archivierten Ausleihungen zurückgibt, die in der fine_assessed-Spalte keinen NULL-Wert enthalten. Danach werden Sie eine neue Spalte im Resultset erstellen, die den berechneten Wert der fine_assessed-Spalte multipliziert mit 2 enthält, und dafür den double fine-Spaltenalias verwenden. Answer_Computed.sql enthält ein fertiges Skript für dieses Verfahren. 1. Schreiben Sie eine Abfrage, die die Spalten member_no, isbn und fine_assessed aus der loanhist-Tabelle von allen archivierten Ausleihungen abruft, die in der fine_assessed-Spalte keinen NULL-Wert enthalten, und führen Sie sie aus. 2. Erstellen Sie eine berechnete Spalte, die den Wert der fine_assessed-Spalte multipliziert mit 2 enthält. 3. Verwenden Sie für die berechnete Spalte den double fine-Spaltenalias. Schließen Sie den Spaltenalias in einfache Anführungszeichen ein, weil er nicht den Benennungskonventionen für SQL Server-Objekte entspricht. 86(OLEUDU\ 6(/(&7PHPEHUBQRLVEQILQHBDVVHVVHG ILQHBDVVHVVHG$6 GRXEOHILQH )520ORDQKLVW :+(5(ILQHBDVVHVVHG,612718// *2 (UJHEQLV Ihr Resultset sollte etwa aussehen wie das folgende Resultset. Die tatsächliche Anzahl der zurückgegebenen Zeilen kann variieren. PHPEHUBQR LVEQ URZVDIIHFWHG ILQHBDVVHVVHG GRXEOHILQH 8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ Ç So formatieren Sie das Resultset einer Spalte mit Hilfe von Zeichenfolgefunktionen In diesem Verfahren werden Sie eine Abfrage schreiben und ausführen, die alle Mitglieder in der member-Tabelle mit dem Nachnamen Anderson auflistet. Formatieren Sie das Resultset in Kleinbuchstaben und zeigen Sie eine Spalte mit E-Mail-Namen an, die aus dem Vornamen, dem Anfangsbuchstaben des zweiten Vornamens und den ersten beiden Buchstaben des Nachnamens bestehen. Answer_Formatting.sql enthält ein fertiges Skript für dieses Verfahren. 1. Schreiben Sie eine Abfrage, die eine einzelne Spalte aus den Spalten firstname, middleinitial und lastname aus der member-Tabelle für alle Mitglieder mit dem Namen „Anderson“ generiert. 2. Verwenden Sie den email_name-Spaltenalias. 3. Ändern Sie die Abfrage so, dass eine Liste mit E-Mail-Namen in Kleinbuchstaben bestehend aus dem Vornamen, Anfangsbuchstaben des zweiten Vornamens und den ersten beiden Buchstaben des Nachnamens der Mitglieder zurückgegeben wird. Verwenden Sie die SUBSTRING-Funktion, um Teile einer Zeichenfolgespalte abzurufen. Verwenden Sie die LOWERFunktion, um das Ergebnis in Kleinbuchstaben zurückzugeben. Verketten Sie die Zeichenfolgen mit dem Additionsoperator (+). 86(OLEUDU\ 6(/(&7/2:(5ILUVWQDPHPLGGOHLQLWLDO 68%675,1*ODVWQDPH$6HPDLOBQDPH )520PHPEHU :+(5(ODVWQDPH DQGHUVRQ *2 (UJHEQLV Ihr Resultset sollte etwa aussehen wie der folgende Teil eines Resultsets. Die Anzahl der zurückgegebenen Zeilen kann variieren. HPDLOBQDPH DP\DDQ DQJHODDDQ EULDQDDQ FODLUDDQ URZVDIIHFWHG 8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ Ç So formatieren Sie das Resultset einer Spalte mit Hilfe von Literalen In diesem Verfahren werden Sie das Resultset einer Abfrage mit Hilfe der CONVERT-Funktion und mit Hilfe von Zeichenfolgeliteralen formatieren, damit es besser verständlich ist. Answer_Literals.sql enthält ein fertiges Skript für dieses Verfahren. 1. Schreiben Sie eine Abfrage, die die Spalten title und title_no aus der titleTabelle abruft, und führen Sie sie aus. Das Resultset sollte aus einer einzigen Spalte bestehen und folgendes Format haben: 7KHWLWOHLVWLWOHWLWOHQXPEHU; Die Abfrage gibt eine einzelne Spalte zurück, deren Inhalt sich aus der Verkettung von vier Elementen ergibt: • The title is: Zeichenfolgekonstante • title.title-Spalte • title number-Zeichenfolgekonstante • title.title_no-Spalte 2. Verwenden Sie die CONVERT-Funktion zum Formatieren der title.title_no-Spalte und den Additionsoperator (+) zum Verketten der Zeichenfolgen. 86(OLEUDU\ 6(/(&7 7KHWLWOHLV WLWOH WLWOHQXPEHU &219(57FKDUWLWOHBQR )520WLWOH *2 (UJHEQLV Ihr Resultset sollte etwa aussehen wie der folgende Teil eines Resultsets. 7KHWLWOHLV/DVWRIWKH0RKLFDQVWLWOHQXPEHU 7KHWLWOHLV7KH9LOODJH:DWFK7RZHUWLWOHQXPEHU 7KHWLWOHLV6HOI+HOS&RQGXFW3HUVHYHUDQFHWLWOHQXPEHU 7KHWLWOHLV6RQJVRID6DYR\DUGWLWOHQXPEHU 7KHWLWOHLV)DOORIWKH+RXVHRI8VKHUWLWOHQXPEHU URZVDIIHFWHG 8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ hEXQJ 9HUZHQGHQYRQ6\VWHPIXQNWLRQHQ In dieser Übung sammeln Sie Systeminformationen mit Hilfe von Systemfunktionen. Das Verzeichnis C:\Moc\2316B\Labfiles\L03\Answers enthält fertige Skripts für diese Übung. Ç So ermitteln Sie die Serverprozess-ID Bei diesem Verfahren beobachten Sie die aktuelle Serveraktivität und ermitteln die Aktivität, die durch Ihre Sitzung generiert wird. Answer_SPID.sql enthält ein fertiges Skript für dieses Verfahren. 1. Führen Sie die gespeicherte Systemprozedur sp_who aus. SQL Server zeigt alle Aktivitäten auf dem Server an. 2. Um zu ermitteln, welche Aktivität Ihre ist, können Sie die folgende Anweisung ausführen: 6(/(&7##VSLG *2 Die Serverprozess-ID (SPID) Ihres Prozesses wird in den Ergebnissen zurückgegeben. 3. Führen Sie die gespeicherte Systemprozedur sp_who erneut aus, wobei Sie Ihre SPID als zusätzlichen Parameter verwenden. (In der folgenden Anweisung steht n für Ihre SPID.) (;(&VSBZKRQ *2 Die mit Ihrer SPID verbundene Aktivität wird angezeigt. Ç So rufen Sie Umgebungsinformationen ab Bei diesem Verfahren wird ermittelt, welche Version von SQL Server ausgeführt wird, und Sie rufen Informationen über die Verbindung, den Datenbankkontext und den Server ab. Sie führen diese Aufgaben mit Hilfe von Systemfunktionen aus. Answer_Environment.sql enthält ein fertiges Skript für dieses Verfahren. 1. Führen Sie die folgende Anweisung aus: 6(/(&7##YHUVLRQ *2 2. Führen Sie die folgende Anweisung aus: 6(/(&786(5B1$0('%B1$0(##VHUYHUQDPH *2 8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ Ç So rufen Sie Metadaten ab Bei diesem Verfahren führen Sie mehrere Abfragen aus, die Metadaten von bestimmten Datenbankobjekten zurückgeben, indem Informationsschemasichten verwendet werden. Zur Erinnerung: information_schema ist ein vordefinierter Datenbankbenutzer, der alle Informationsschemasichten besitzt. Answer_Metadata.sql enthält ein fertiges Skript für dieses Verfahren. 1. Führen Sie die folgende Anweisung aus, um eine Liste aller benutzerdefinierten Tabellen in einer Datenbank zurückzugeben: 86(OLEUDU\ 6(/(&7 )520LQIRUPDWLRQBVFKHPDWDEOHV :+(5(WDEOHBW\SH EDVHWDEOH *2 2. Führen Sie die folgende Anweisung aus, um die Primärschlüssel- und Fremdschlüsselspalten für die orders-Tabelle zurückzugeben: 86(1RUWKZLQG 6(/(&7 )520LQIRUPDWLRQBVFKHPDNH\BFROXPQBXVDJH :+(5(WDEOHBQDPH RUGHUV *2 Für welche Spalte ist ein Primärschlüssel definiert? orderid ____________________________________________________________ ____________________________________________________________ 8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ /HUQ]LHONRQWUROOH ,QKDOWGLHVHU)ROLH 9HUWLHIHQ6LHGLH/HUQ]LHOH GLHVHU8QWHUULFKWVHLQKHLW LQGHP6LHGLH.HUQSXQNWH ZLHGHUKROHQ (LQVWLHJ 'LH)UDJHQ]XU/HUQ]LHO NRQWUROOHEH]LHKHQVLFKDXI HLQLJHGHU6FKOVVHONRQ ]HSWHGLH,QKDOWGLHVHU 8QWHUULFKWVHLQKHLWVLQG $EUXIHQYRQ'DWHQPLW+LOIHGHU6(/(&7$QZHLVXQJ )LOWHUQYRQ'DWHQ )RUPDWLHUHQYRQ5HVXOWVHWV 9HUDUEHLWHQYRQ$EIUDJHQ $VSHNWHGHU6\VWHPOHLVWXQJ ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** 9HUZHQGHQ6LHGLHVHV6]H QDULRXPGLH)UDJHQ]XEH DQWZRUWHQXQGGLH7KHPHQ GHU8QWHUULFKWVHLQKHLWGXUFK ]XJHKHQ .OlUHQ6LHRIIHQH)UDJHQ GHU.XUVWHLOQHKPHU]X 7KHPHQGHU8QWHUULFKWV HLQKHLW Sie sind der Datenbankadministrator für einen Gesundheitsfürsorgeplan. Die physicians-Tabelle wurde mit folgenden Anweisungen erstellt: &5($7(7$%/(GERSK\VLFLDQV SK\VLFLDQBQRLQW,'(17,7<12718// IBQDPHYDUFKDU12718// OBQDPHYDUFKDU12718// VWUHHWYDUFKDU18// FLW\YDUFKDU18// VWDWHYDUFKDU18// SRVWDOBFRGHYDUFKDU18// FRBSD\PRQH\12718//&21675$,17SK\VBFRBSD\'()$8/7 1. Wie rufen Sie Informationen über Ärzte ab, die eine Praxis in den Staaten New York (NY), Washington (WA), Virginia (VA) oder Kalifornien (CA) haben? Schreiben Sie eine SELECT-Anweisung mit der folgenden WHEREKlausel: :+(5(VWDWH 1< 25VWDWH :$ 25VWDWH Oder verwenden Sie eine WHERE-Klausel mit dem Schlüsselwort IN. :+(5(VWDWH,1 1< :$ 9$ &$ 8QWHUULFKWVHLQKHLW$EUXIHQYRQ'DWHQ 2. Wie können Sie eine Liste von Staaten generieren, die im Resultset keine Staaten doppelt enthält? Verwenden Sie in der SELECT-Anweisung das DISTINCT-Schlüsselwort. 3. Wie können Sie in Ihrem Resultset eine Spalte generieren, die den co_payWert plus einer Servicegebühr in Höhe von 5 $ für jeden Arzt auflistet, und dieser Spalte den Amt_Due-Aliasnamen geben? Verwenden Sie in der Auswahlliste eine berechnete Spalte. Verwenden Sie anstelle des Spaltennamens einen Alias: ‘Amt_Due’ = (co_pay + 5) Inhalt Unterrichtseinheit 4: Gruppieren und Zusammenfassen von Daten Übersicht 1 Auflisten der TOP n-Werte 2 Verwenden von Aggregatfunktionen 4 Grundlagen der GROUP BY-Klausel 8 Generieren von Aggregatwerten in Resultsets 14 Verwenden der COMPUTE- und COMPUTE BY-Klauseln 23 Empfohlene Methoden 26 Übungseinheit A: Gruppieren und Zusammenfassen von Daten 27 Lernzielkontrolle 41 Die in diesen Unterlagen enthaltenen Angaben und Daten, einschließlich URLs und anderer Verweise auf Internetwebsites, können ohne vorherige Ankündigung geändert werden. Die in den Beispielen genannten Firmen, Organisationen, Produkte, Domänennamen, E-Mail-Adressen, Logos, Personen, Orte und Ereignisse sind frei erfunden und jede Ähnlichkeit mit bestehenden Firmen, Organisationen, Produkten, Domänennamen, E-Mail-Adressen, Logos, Personen, Orten oder Ereignissen ist rein zufällig, soweit nichts anderes angegeben ist. Die Benutzer sind verantwortlich für das Einhalten aller anwendbaren Urheberrechtsgesetze. Unabhängig von der Anwendbarkeit der entsprechenden Urheberrechtsgesetze darf ohne ausdrückliche schriftliche Erlaubnis der Microsoft Corporation kein Teil dieses Dokuments für irgendwelche Zwecke vervielfältigt oder in einem Datenempfangssystem gespeichert oder darin eingelesen werden, unabhängig davon, auf welche Art und Weise oder mit welchen Mitteln (elektronisch, mechanisch, durch Fotokopieren, Aufzeichnen, usw.) dies geschieht. Microsoft Corporation kann Inhaber von Patenten oder Patentanträgen, Marken, Urheberrechten oder anderen gewerblichen Schutzrechten sein, die den Inhalt dieses Dokuments betreffen. Die Bereitstellung dieses Dokuments gewährt keinerlei Lizenzrechte an diesen Patenten, Marken, Urheberrechten oder anderen gewerblichen Schutzrechten, es sei denn, dies wurde ausdrücklich durch einen schriftlichen Lizenzvertrag mit der Microsoft Corporation vereinbart. 2001 Microsoft Corporation. Alle Rechte vorbehalten. Microsoft, BackOffice, MS-DOS, PowerPoint, Visual Studio, Windows, Windows Media und Windows NT sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Die in diesem Dokument aufgeführten Namen tatsächlicher Firmen und Produkte sind möglicherweise Marken der jeweiligen Eigentümer. 8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ LLL +LQZHLVHIUGHQ.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 6WUDWHJLHIUGLH8QWHUULFKWVHLQKHLW Verwenden Sie die folgende Strategie, um diese Unterrichtseinheit zu präsentieren: Auflisten der TOP n-Werte Stellen Sie dieses Thema vor, indem Sie das TOP n-Schlüsselwort verwenden, um nur die ersten n Zeilen oder n Prozent eines Resultsets aufzulisten. Das TOP n-Schlüsselwort entspricht zwar nicht dem ANSI-Standard, es kann jedoch z. B. zum Auflisten der am besten verkauften Produkte eines Unternehmens nützlich sein. Verwenden von Aggregatfunktionen Erläutern Sie die Verwendung von Aggregatfunktionen beim Zusammenfassen von Daten. Weisen Sie darauf hin, dass beim Verwenden von Aggregatfunktionen mit NULL-Werten Vorsicht geboten ist, da die Resultsets möglicherweise nicht repräsentativ für die Daten sind. Das Verwenden von Aggregatfunktionen ist die Grundlage für die verbleibenden Themen, die in dieser Unterrichtseinheit vorgestellt werden. Grundlagen der GROUP BY-Klausel Erläutern Sie die Vorteile des Verwendens von Aggregatfunktionen zusammen mit der GROUP BY-Klausel zum Organisieren von Zeilen in Gruppen und zum Zusammenfassen dieser Gruppen. Die HAVING-Klausel wird zusammen mit der GROUP BY-Klausel verwendet, um die Zeilen zu beschränken, die zurückgegeben werden. Verwenden Sie die Tabellen auf der Folie, um die Verwendung der GROUP BY-Klausel mit der Verwendung der HAVING-Klausel zu vergleichen. Generieren von Aggregatwerten in Resultsets Stellen Sie die Verwendung der ROLLUP- und CUBE-Operatoren zum Generieren von detaillierten und zusammenfassenden Werten im Resultset vor. Beide Operatoren stellen Daten in einem relationalen Standardformat bereit, das für andere Anwendungen verwendet werden kann. Erläutern Sie, wie die GROUPING-Funktion verwendet werden kann, um zu ermitteln, ob die Werte im Resultset detaillierte Werte oder eine Zusammenfassung darstellen. Weisen Sie darauf hin, dass auf den Folien die im Resultset angezeigten NULL-Werte zusammenfassende Werte darstellen. Verwenden der COMPUTE- und COMPUTE BY-Klauseln Erwähnen Sie, dass die COMPUTE- und COMPUTE BY-Klauseln auch zum Drucken von einfachen Berichten oder zum Überprüfen von Clientergebnissen verwendet werden können. Beschäftigen Sie sich nicht zu lange mit diesen Klauseln, da sie nicht dem ANSI-Standard entsprechen und da sie Resultsets in einem nicht relationalen Format generieren. Verwenden Sie die Tabelle auf der Folie, um die Resultsets zu vergleichen, die bei der Verwendung der COMPUTE- und COMPUTE BY-Klauseln generiert werden. 8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ Y $QSDVVXQJVLQIRUPDWLRQHQ Dieser Abschnitt beschreibt die Anforderungen zum Einrichten der Übungseinheiten für eine Unterrichtseinheit sowie die Konfigurationsänderungen, die während der Übungseinheiten an den Kursteilnehmercomputern vorgenommen werden. Diese Informationen sollen Ihnen beim Replizieren oder Anpassen der Microsoft Official Curriculum-Courseware (MOC) helfen. :LFKWLJ Die Übungseinheit in dieser Unterrichtseinheit hängt von der Schulungsraumkonfiguration ab, die im Abschnitt „Anpassungsinformationen“ am Ende des Dokuments Handbuch für das Einrichten von Schulungscomputern für den Kurs 2316B, Abfragen von Microsoft SQL Server 2000 mit Hilfe von Transact-SQL, angegeben ist. (LQULFKWHQGHU8QWHUULFKWVHLQKHLW Das Skript C:\Moc\2316B\Batches\2316_R04.sql, mit dem die orderhistTabelle zur Northwind-Datenbank hinzugefügt wird, wird normalerweise beim Einrichten der Schulungscomputer ausgeführt. Wenn Sie den Kurs anpassen, müssen Sie sicherstellen, dass das Skript ausgeführt wird, sodass die Beispiele in der Unterrichtseinheit ordnungsgemäß funktionieren. (LQULFKWHQGHUhEXQJVHLQKHLW Es gibt keine besonderen Anforderungen für das Einrichten der Übungseinheit, die die Replikation oder die Anpassung betreffen. (UJHEQLVVHGHUhEXQJVHLQKHLW Auf den Kursteilnehmercomputern gibt es keine Konfigurationsänderungen, die die Replikation oder die Anpassung betreffen. YL 8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ This page is intentionally left blank. 8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ hEHUVLFKW ,QKDOWGLHVHU)ROLH *HEHQ6LHHLQHhEHUVLFKW EHUGLH7KHPHQXQG/HUQ ]LHOHGLHVHU8QWHUULFKWV HLQKHLW (LQVWLHJ %HLP$EUXIHQYRQ'DWHQ NDQQHVVLQQYROOVHLQGLH 'DWHQ]XJUXSSLHUHQRGHU ]XVDPPHQ]XIDVVHQ $XIOLVWHQGHU 723Q:HUWH 9HUZHQGHQYRQ$JJUHJDWIXQNWLRQHQ *UXQGODJHQGHU*5283%<.ODXVHO *HQHULHUHQYRQ$JJUHJDWZHUWHQLQ5HVXOWVHWV 9HUZHQGHQGHU&20387( XQG&20387( %<.ODXVHOQ ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Beim Abrufen von Daten kann es sinnvoll sein, die Daten zu gruppieren oder zusammenzufassen. Diese Unterrichtseinheit vermittelt den Kursteilnehmern die Fähigkeiten, Daten mit Hilfe von Aggregatfunktionen zu gruppieren und zusammenzufassen. Diese Fähigkeiten schließen das Verwenden der GROUP BY- und HAVINGKlauseln zum Zusammenfassen und Gruppieren von Daten ein. Außerdem gehört zu diesen Fähigkeiten das Verwenden der ROLLUP- und CUBEOperatoren zusammen mit der GROUPING-Funktion zum Gruppieren von Daten und zum Zusammenfassen der Werte für diese Gruppen. In dieser Unterrichtseinheit wird außerdem vorgestellt, wie die COMPUTE- und COMPUTE BY-Klauseln verwendet werden, um Zusammenfassungsberichte zu generieren und um die TOP n-Werte in einem Resultset aufzulisten. Am Ende dieser Unterrichtseinheit werden Sie in der Lage sein, die folgenden Aufgaben auszuführen: Verwenden des TOP n-Schlüsselwortes, um eine Liste der angegebenen oberen Werte in einer Tabelle abzufragen. Generieren eines einzelnen zusammenfassenden Wertes mit Hilfe von Aggregatfunktionen. Organisieren von Zusammenfassungsdaten für eine Spalte mit Hilfe von Aggregatfunktionen zusammen mit den GROUP BY- und HAVINGKlauseln. Generieren von Zusammenfassungsdaten für eine Tabelle mit Hilfe von Aggregatfunktionen zusammen mit der GROUP BY-Klausel und dem ROLLUP- oder CUBE-Operator. Generieren von Berichten mit Gruppenwechseln mit Hilfe der COMPUTEund der COMPUTE BY-Klauseln. 8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ $XIOLVWHQGHU723Q:HUWH ,QKDOWGLHVHU)ROLH %HVFKUHLEHQ6LHZLHGLH REHUHQQ]XVDPPHQIDVVHQ GHQ:HUWHDXIJHOLVWHW ZHUGHQ (LQVWLHJ 9HUZHQGHQ6LHGDV723Q 6FKOVVHOZRUWXPQXUGLH HUVWHQQ=HLOHQHLQHV 5HVXOWVHWVDXI]XOLVWHQ 1XUGLHHUVWHQ Q =HLOHQHLQHV 5HVXOWVHWV ZHUGHQDXIJHOLVWHW $QJHEHQGHV%HUHLFKVGHU:HUWH LQGHU 25'(5%<.ODXVHO hEHUHLQVWLPPHQGH:HUWH ZHUGHQ]XUFNJHJHEHQZHQQ :,7+7,(6YHUZHQGHWZLUG Beispiel Beispiel 11 86(1RUWKZLQG 86(1RUWKZLQG 6(/(&7723RUGHULGSURGXFWLGTXDQWLW\ 6(/(&7723RUGHULGSURGXFWLGTXDQWLW\ )520>RUGHUGHWDLOV@ )520>RUGHUGHWDLOV@ 25'(5%<TXDQWLW\'(6& 25'(5%<TXDQWLW\'(6& *2 *2 Beispiel 2 Beispiel 2 86(1RUWKZLQG 86(1RUWKZLQG 6(/(&7723:,7+7,(6RUGHULGSURGXFWLGTXDQWLW\ 6(/(&7723:,7+7,(6RUGHULGSURGXFWLGTXDQWLW\ )520>RUGHUGHWDLOV@ )520>RUGHUGHWDLOV@ 25'(5%<TXDQWLW\'(6& 25'(5%<TXDQWLW\'(6& *2 *2 ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** +LQZHLVIUGHQ .XUVOHLWHU *HHLJQHWH,QGL]HVN|QQHQ GLH/HLVWXQJVIlKLJNHLWYRQ 6RUWLHUXQJHQXQG*UXSSLH UXQJHQHUK|KHQ,QGLHVHP .XUVZLUGGDV(UVWHOOHQYRQ ,QGL]HVQLFKWDXVIKUOLFK EHKDQGHOW:HLWHUH,QIRUPD WLRQHQ]XP(UVWHOOHQYRQ ,QGL]HVILQGHQ6LHLQ.XUV $3URJUDPPLHUHQ HLQHU0LFURVRIW 64/6HUYHU'DWHQ EDQN Verwenden Sie das TOP n-Schlüsselwort, um nur die ersten n Zeilen oder n Prozent eines Resultsets aufzulisten. Das TOP n-Schlüsselwort entspricht zwar nicht dem ANSI-Standard, es kann jedoch z. B. zum Auflisten der am besten verkauften Produkte eines Unternehmens nützlich sein. Wenn Sie das TOP n-Schlüsselwort oder das TOP n PERCENT-Schlüsselwort verwenden, beachten Sie die folgenden Aspekte und Richtlinien: Geben Sie den Bereich der Werte in der ORDER BY-Klausel an. Wenn Sie keine ORDER BY-Klausel verwenden, gibt Microsoft® SQL Server™ 2000 Zeilen zurück, die die WHERE-Klausel erfüllen, ohne dass eine bestimmte Reihenfolge verwendet wird. Verwenden Sie hinter dem TOP-Schlüsselwort eine ganze Zahl ohne Vorzeichen. Wenn das TOP n PERCENT-Schlüsselwort eine Zeile mit Dezimalstellen ergibt, rundet SQL Server auf die nächste ganze Zahl auf. Verwenden Sie die WITH TIES-Klausel, um Übereinstimmungen im Resultset einzuschließen. Übereinstimmungen entstehen, wenn zwei oder mehr Werte mit der letzten Zeile gleich sind, die in der ORDER BY-Klausel zurückgegeben wird. Aus diesem Grund kann das Resultset eine beliebige Anzahl von Zeilen enthalten. $QPHUNXQJ Die WITH TIES-Klausel kann nur in Verbindung mit einer ORDER BY-Klausel verwendet werden. 8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ %HLVSLHO (UJHEQLV In diesem Beispiel wird das TOP n-Schlüsselwort verwendet, um die fünf Produkte mit den höchsten Bestellmengen in einer einzelnen Bestellung zu ermitteln. Übereinstimmende Werte werden aus dem Resultset ausgeschlossen. 86(1RUWKZLQG 6(/(&7723RUGHULGSURGXFWLGTXDQWLW\ )520>RUGHUGHWDLOV@ 25'(5%<TXDQWLW\'(6& *2 RUGHULG SURGXFWLG TXDQWLW\ URZVDIIHFWHG %HLVSLHO 0HWKRGLVFKHU+LQZHLV 9HUJOHLFKHQ6LHGDV IROJHQGH5HVXOWVHWPLWGHP 5HVXOWVHWDXV%HLVSLHO (UJHEQLV In diesem Beispiel wird das TOP n-Schlüsselwort und die WITH TIES-Klausel verwendet, um die fünf Produkte mit den höchsten Bestellmengen in einer einzelnen Bestellung zu ermitteln. Das Resultset listet insgesamt 10 Produkte auf, da zusätzliche Zeilen eingeschlossen sind, die dieselben Werte wie die letzte Zeile enthalten. Vergleichen Sie das folgende Resultset mit dem Resultset aus Beispiel 1. 86(1RUWKZLQG 6(/(&7723:,7+7,(6RUGHULGSURGXFWLGTXDQWLW\ )520>RUGHUGHWDLOV@ 25'(5%<TXDQWLW\'(6& *2 RUGHULG SURGXFWLG TXDQWLW\ URZVDIIHFWHG 8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ 9HUZHQGHQYRQ$JJUHJDWIXQNWLRQHQ ,QKDOWGLHVHU)ROLH )KUHQ6LHGLH9HUZHQGXQJ YRQ$JJUHJDWIXQNWLRQHQ EHLP(UVWHOOHQYRQ=XVDP PHQIDVVXQJVGDWHQYRU Aggregatfunktion Aggregatfunktion (LQVWLHJ 9HUZHQGHQ6LH$JJUHJDW IXQNWLRQHQXP6SDOWHQZHUWH ]XEHUHFKQHQXQGXPGLHVH :HUWHLQV5HVXOWVHWHLQ]X VFKOLHHQ Beschreibung Beschreibung AVG AVG Durchschnittswert Durchschnittswerteines einesnumerischen numerischenAusdrucks Ausdrucks COUNT COUNT Anzahl Anzahlder derWerte Werteinineinem einemAusdruck Ausdruck COUNT COUNT(*) (*) Anzahl Anzahlder derausgewählten ausgewähltenZeilen Zeilen MAX MAX Höchster HöchsterWert Wertinnerhalb innerhalbdes desAusdrucks Ausdrucks MIN MIN Niedrigster NiedrigsterWert Wertinnerhalb innerhalbdes desAusdrucks Ausdrucks SUM SUM Gesamtwert Gesamtwerteines einesnumerischen numerischenAusdrucks Ausdrucks STDEV STDEV Statistische StatistischeAbweichung Abweichungaller allerWerte Werte STDEVP STDEVP Statistische StatistischeAbweichung Abweichungfür fürdie dieAuffüllung Auffüllung VAR VAR Statistische StatistischeVarianz Varianzaller allerWerte Werte VARP VARP Statistische StatistischeVarianz Varianzaller allerWerte Wertefür fürdie dieAuffüllung Auffüllung ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Funktionen, die Mittelwerte und Summen berechnen, werden Aggregatfunktionen genannt. Wenn eine Aggregatfunktion ausgeführt wird, fasst SQL Server Werte für eine gesamte Tabelle oder für Gruppen von Spalten in der Tabelle zusammen, wobei ein einzelner Wert für jede Zeilengruppe der angegebenen Spalten erstellt wird: Aggregatfunktionen können mit der SELECT-Anweisung oder in Kombination mit der GROUP BY-Klausel verwendet werden. Mit Ausnahme der COUNT(*)-Funktion geben alle Aggregatfunktionen NULL zurück, wenn keine Zeile die WHERE-Klausel erfüllt. Die COUNT(*)-Funktion gibt den Wert Null zurück, wenn keine Zeile die WHERE-Klausel erfüllt. 7LSS Indizieren Sie häufig aggregierte Spalten, um die Abfrageleistung zu verbessern. Wenn Sie z. B. in der quantity-Spalte häufig Aggregatfunktionen verwenden, werden durch Indizieren der quantity-Spalte die Aggregatoperationen verbessert. Durch den Datentyp einer Spalte werden die Funktionen ermittelt, die für diese Spalte verwendet werden können. In der folgenden Tabelle werden die Beziehungen zwischen Funktionen und Datentypen beschrieben. 8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ Funktion Datentyp COUNT COUNT ist die einzige Aggregatfunktion, die bei Spalten mit text-, ntext- oder image-Datentypen verwendet werden kann. MIN und MAX MIN- und MAX-Funktionen können bei Spalten mit bit-Datentypen nicht verwendet werden. SUM und AVG SUM- und AVG-Aggregatfunktionen können nur bei Spalten mit int-, smallint-, tinyint-, decimal-, numeric-, float-, real-, moneyund smallmoney-Datentypen verwendet werden. Wenn Sie die SUM- oder AVG-Funktion verwenden, behandelt SQL Server die smallint- oder tinyint-Datentypen im Resultset wie einen int-Datentypwert. 7HLOV\QWD[ SELECT [ ALL | DISTINCT ] [ TOP n [PERCENT] [ WITH TIES] ] <select_list> [ INTO new_table ] [ FROM <table_sources> ] [ WHERE <search_conditions> ] [ [ GROUP BY [ALL] group_by_expression [,…n]] [HAVING <search_conditions> ] [ WITH { CUBE | ROLLUP } ] ] [ ORDER BY { column_name [ ASC | DESC ] } [,…n] ] [ COMPUTE { { AVG | COUNT | MAX | MIN | SUM } (expression) } [,…n] [ BY expression [,…n] ] %HLVSLHO In diesem Beispiel wird der durchschnittliche Einheitenpreis aller Produkte in der products-Tabelle berechnet. (UJHEQLV 86(1RUWKZLQG 6(/(&7$9*XQLWSULFH )520SURGXFWV *2 URZVDIIHFWHG %HLVSLHO (UJHEQLV In diesem Beispiel werden alle Zeilen in der quantity-Spalte zur order detailsTabelle hinzugefügt. 86(1RUWKZLQG 6(/(&7680TXDQWLW\ )520>RUGHUGHWDLOV@ *2 URZVDIIHFWHG 8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ 9HUZHQGHQYRQ$JJUHJDWIXQNWLRQHQPLW18//:HUWHQ ,QKDOWGLHVHU)ROLH (UOlXWHUQ6LHGLH9HUKDO WHQVZHLVHYRQ18// :HUWHQZHQQVLHLQ $JJUHJDWIXQNWLRQHQ YHUZHQGHWZHUGHQ (LQVWLHJ 'LHPHLVWHQ$JJUHJDWIXQNWLRQHQLJQRULHUHQ18//:HUWH 'LH)XQNWLRQ &2817]lKOWDXFK=HLOHQPLW 18//:HUWHQ 86(1RUWKZLQG 86(1RUWKZLQG 6(/(&7&2817 6(/(&7&2817 )520HPSOR\HHV )520HPSOR\HHV *2 *2 %HLGHU9HUZHQGXQJYRQ $JJUHJDWIXQNWLRQHQPLW 18//:HUWHQNDQQHV]X XQHUZDUWHWHQ(UJHEQLVVHQ NRPPHQ 86(1RUWKZLQG 86(1RUWKZLQG 6(/(&7&2817UHSRUWVWR 6(/(&7&2817UHSRUWVWR )520HPSOR\HHV )520HPSOR\HHV *2 *2 Beispiel Beispiel 11 Beispiel Beispiel 22 ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Bei der Verwendung von Aggregatfunktionen mit NULL-Werten kann es zu unerwarteten Ergebnissen kommen. Wenn Sie z. B. eine SELECT-Anweisung ausführen, in die eine COUNT-Funktion für eine Spalte mit 18 Zeilen eingeschlossen ist, von denen zwei Zeilen NULL-Werte enthalten, gibt das Resultset insgesamt 16 Zeilen zurück. SQL Server ignoriert die zwei Zeilen, die NULLWerte enthalten. Daher ist beim Verwenden von Aggregatfunktionen in Spalten mit NULL-Werten Vorsicht geboten, da das Resultset unter Umständen nicht repräsentativ für die Daten ist. Wenn Sie dennoch Aggregatfunktionen mit NULL-Werten verwenden möchten, beachten Sie folgende Aspekte: %HLVSLHO (UJHEQLV Alle SQL Server-Aggregatfunktionen, mit Ausnahme der COUNT(*)-Funktion, ignorieren NULL-Werte in Spalten. Die COUNT(*)-Funktion zählt alle Zeilen, auch wenn jede Zeile einen NULL-Wert enthält. Wenn Sie z. B. eine SELECT-Anweisung mit COUNT(*)-Funktion in einer Spalte mit 18 Zeilen ausführen, von denen zwei Zeilen NULL-Werte enthalten, gibt das Resultset insgesamt 18 Zeilen zurück. In diesem Beispiel wird die Anzahl der Angestellten in der employees-Tabelle aufgelistet. 86(1RUWKZLQG 6(/(&7&2817 )520HPSOR\HHV *2 URZVDIIHFWHG %HLVSLHO (UJHEQLV 8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ In diesem Beispiel wird die Anzahl der Angestellten aufgelistet, für die in der reportsto-Spalte in der employees-Tabelle kein NULL-Wert steht, d. h., für die ein zuständiger Manager definiert ist. 86(1RUWKZLQG 6(/(&7&2817UHSRUWVWR )520HPSOR\HHV *2 URZVDIIHFWHG 8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ *UXQGODJHQGHU*5283%<.ODXVHO ,QKDOWGLHVHU)ROLH *HEHQ6LHHLQHhEHUVLFKW EHUGLH.ODXVHOQPLWGHQHQ :HUWHIUHLQH6SDOWH]X VDPPHQJHIDVVWZHUGHQ (LQVWLHJ ,QGHU5HJHOZHUGHQ$JJUH JDWIXQNWLRQHQLQ9HUELQGXQJ PLWGHU*5283%<XQGGHU +$9,1*.ODXVHOYHUZHQGHW 9HUZHQGHQGHU*5283%<.ODXVHO 9HUZHQGHQGHU*5283 %<.ODXVHOPLWGHU +$9,1*.ODXVHO ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Eine Aggregatfunktion erstellt automatisch einen einzelnen zusammenfassenden Wert für alle Zeilen in einer Spalte. Wenn Sie zusammenfassende Werte für eine Spalte generieren möchten, verwenden Sie Aggregatfunktionen mit der GROUP BY-Klausel. Durch Verwenden der HAVING-Klausel mit der GROUP BY-Klausel können die Gruppen der Zeilen, die im Resultset zurückgegeben werden, eingeschränkt werden. $QPHUNXQJ Das Verwenden der GROUP BY-Klausel stellt keine Sortierreihenfolge sicher. Wenn die Ergebnisse sortiert werden sollen, schließen Sie die ORDER BY-Klausel ein. 8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ 9HUZHQGHQGHU*5283%<.ODXVHO 86(1RUWKZLQG 86(1RUWKZLQG 6(/(&7SURGXFWLGRUGHULG 6(/(&7SURGXFWLGRUGHULG TXDQWLW\ TXDQWLW\ )520RUGHUKLVW )520RUGHUKLVW *2 *2 ,QKDOWGLHVHU)ROLH (UOlXWHUQ6LHZLH'DWHQPLW GHU*5283%<.ODXVHO ]XVDPPHQJHIDVVWZHUGHQ (LQVWLHJ 86(1RUWKZLQG 86(1RUWKZLQG 6(/(&7SURGXFWLG 6(/(&7SURGXFWLG 680TXDQWLW\$6WRWDOBTXDQWLW\ 680TXDQWLW\$6WRWDOBTXDQWLW\ )520RUGHUKLVW )520RUGHUKLVW *5283%<SURGXFWLG *5283%<SURGXFWLG *2 *2 productid orderid quantity quantity productid orderid 'LH*5283%<.ODXVHO NDQQLQ6SDOWHQRGHU$XV GUFNHQYHUZHQGHWZHUGHQ 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 HUIOOHQZHUGHQ JUXSSLHUW 11 15 15 22 33 35 35 45 45 productid productid total_quantity total_quantity 22 35 35 86(1RUWKZLQG 86(1RUWKZLQG 6(/(&7SURGXFWLG 6(/(&7SURGXFWLG 680TXDQWLW\$6WRWDOBTXDQWLW\ 680TXDQWLW\$6WRWDOBTXDQWLW\ )520RUGHUKLVW )520RUGHUKLVW :+(5(SURGXFWLG :+(5(SURGXFWLG *5283%<SURGXFWLG *5283%<SURGXFWLG *2 *2 ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Die GROUP BY-Klausel kann in Spalten oder Ausdrücken verwendet werden, um Zeilen in Gruppen zu organisieren und um diese Gruppen zusammenzufassen. Mit der GROUP BY-Klausel können Sie z. B. die Menge jedes einzelnen bestellten Produkts für alle Bestellungen ermitteln. 0HWKRGLVFKHU+LQZHLV 'LHRUGHUKLVW7DEHOOH ZXUGHVSH]LHOOIUGLH%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]XUFNJHJH EHQHQ=HLOHQZHLWHUHLQ]X VFKUlQNHQ Wenn Sie die GROUP BY-Klausel verwenden, beachten Sie die folgenden Aspekte und Richtlinien: SQL Server erstellt eine Spalte mit Werten für jede definierte Gruppe. SQL Server gibt nur einzelne Zeilen für jede angegebene Gruppe zurück; detaillierte Informationen werden nicht zurückgeben. Alle in der GROUP BY-Klausel angegebenen Spalten müssen in der Auswahlliste eingeschlossen sein. Wenn eine WHERE-Klausel eingeschlossen wird, gruppiert SQL Server nur die Zeilen, die die Bedingungen in der WHERE-Klausel erfüllen. Die Anzahl von Spaltenelementen wird durch die Größe der GROUP BYSpalte, die aggregierten Spalten und die aggregierten Werte in der Abfrage beschränkt. Dies resultiert aus der Beschränkung auf 8.060 Bytes für die temporäre Arbeitstabelle, die für die temporären Abfrageergebnisse erforderlich ist. Die GROUP BY-Klausel kann bei Spalten, die mehrere NULL-Werte enthalten, nicht verwendet werden, da die NULL-Werte als Gruppe verarbeitet werden. 8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ Verwenden Sie das ALL-Schlüsselwort mit der GROUP BY-Klausel, damit alle Zeilen mit NULL-Werten in den Aggregatspalten angezeigt werden, unabhängig davon, ob die Zeilen die WHERE-Klausel erfüllen. $QPHUNXQJ Die orderhist-Tabelle wurde speziell für die Beispiele in dieser Unterrichtseinheit erstellt. Das Skript 2316_R04.sql, das sich im Ordner Batches auf der Kursteilnehmer-CD befindet, kann ausgeführt werden, um die orderhist-Tabelle zur Northwind-Datenbank hinzuzufügen. %HLVSLHO (UJHEQLV Dieses Beispiel gibt Informationen zu den Bestellungen aus der orderhistTabelle zurück. Durch die Abfrage werden alle Product IDs gruppiert und aufgelistet sowie die gesamte Bestellmenge berechnet. Die Gesamtsumme wird mit der SUM-Aggregatfunktion berechnet, und es wird ein Wert für jedes Produkt im Resultset angezeigt. 86(1RUWKZLQG 6(/(&7SURGXFWLG680TXDQWLW\$6WRWDOBTXDQWLW\ )520RUGHUKLVW *5283%<SURGXFWLG *2 SURGXFWLG WRWDOBTXDQWLW\ URZVDIIHFWHG %HLVSLHO In diesem Beispiel wird eine WHERE-Klausel zur Abfrage aus Beispiel 1 hinzugefügt. Die Abfrage beschränkt die Zeilen auf die Product ID 2, gruppiert anschließend diese Zeilen und berechnet die gesamte Bestellmenge. Vergleichen Sie das Resultset mit dem aus Beispiel 1. 86(1RUWKZLQG 6(/(&7SURGXFWLG680TXDQWLW\$6WRWDOBTXDQWLW\ )520RUGHUKLVW :+(5(SURGXFWLG *5283%<SURGXFWLG *2 (UJHEQLV SURGXFWLG WRWDOBTXDQWLW\ URZVDIIHFWHG %HLVSLHO (UJHEQLV 8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ In diesem Beispiel werden Informationen zu Bestellungen aus der order details-Tabelle zurückgegeben. In dieser Abfrage werden alle Product IDs gruppiert und aufgelistet, danach wird die gesamte Bestellmenge berechnet. Die Gesamtsumme wird mit der SUM-Aggregatfunktion berechnet, und es wird ein Wert für jedes Produkt im Resultset angezeigt. In dieses Beispiel ist keine WHERE-Klausel eingeschlossen, sodass für jede Product ID eine Summe zurückgegeben wird. 86(1RUWKZLQG 6(/(&7SURGXFWLG680TXDQWLW\$6WRWDOBTXDQWLW\ )520>RUGHUGHWDLOV@ *5283%<SURGXFWLG *2 SURGXFWLG WRWDOBTXDQWLW\ URZVDIIHFWHG 8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ 9HUZHQGHQGHU*5283%<.ODXVHOPLWGHU+$9,1*.ODXVHO ,QKDOWGLHVHU)ROLH 86(1RUWKZLQG 86(1RUWKZLQG 6(/(&7SURGXFWLGRUGHULG 6(/(&7SURGXFWLGRUGHULG TXDQWLW\ TXDQWLW\ )520RUGHUKLVW )520RUGHUKLVW *2 *2 (UNOlUHQ6LHGLH9HUZHQ GXQJGHU+$9,1*.ODXVHO EHLPZHLWHUHQ=XVDPPHQ IDVVHQYRQ'DWHQDXIGHU *UXQGODJHYRQ*UXSSHQ productid productid orderid orderid quantity quantity (LQVWLHJ 0LWGHU+$9,1*.ODXVHO N|QQHQ6LH%HGLQJXQJHQIU *UXSSHQIHVWOHJHQGLHLQ HLQ5HVXOWVHWHLQJH VFKORVVHQZHUGHQVROOHQ 11 11 11 11 55 10 10 22 22 11 22 10 10 25 25 33 33 11 22 15 15 30 30 86(1RUWKZLQG 6(/(&7SURGXFWLG680TXDQWLW\ 6(/(&7SURGXFWLG680TXDQWLW\ $6WRWDOBTXDQWLW\ $6WRWDOBTXDQWLW\ )520RUGHUKLVW *5283%<SURGXFWLG *5283%<SURGXFWLG +$9,1*680TXDQWLW\! +$9,1*680TXDQWLW\! *2 productid productid total_quantity total_quantity 22 33 35 35 45 45 ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Verwenden Sie die HAVING-Klausel bei Spalten und Ausdrücken, um Bedingungen für die in ein Resultset eingeschlossenen Gruppen festzulegen. Durch die HAVING-Klausel werden Bedingungen für die GROUP BY-Klausel festgelegt. Dies ist vergleichbar mit der Interaktion der WHERE-Klausel mit der SELECT-Anweisung. 0HWKRGLVFKHU+LQZHLV :HLVHQ6LHDXIGLH6XFK EHGLQJXQJKLQGLHLQGHU +$9,1*.ODXVHOLP%HLVSLHO DXIGHU)ROLHGHILQLHUWLVW ,QGHUUHFKWHQ7DEHOOH ZHUGHQGLHJHVDPWHQ'DWHQ GHUSURGXFWLG6SDOWH JUXSSLHUWHVZLUGMHGRFKQXU GLH*HVDPWVXPPHDQJH ]HLJWGLHIUGLH*UXSSHQ EHVWHOOWZLUGGLHGLH6XFK EHGLQJXQJLQGHU+$9,1* .ODXVHOHUIOOHQ Wenn Sie die HAVING-Klausel verwenden, beachten Sie die folgenden Aspekte und Richtlinien: Die HAVING-Klausel kann nur mit der GROUP BY-Klausel zum Einschränken der Gruppierung verwendet werden. Das Verwenden der HAVING-Klausel ohne die GROUP BY-Klausel ist nicht sinnvoll. Auf jede in der Auswahlliste angezeigte Spalte kann verwiesen werden. Das ALL-Schlüsselwort sollte nicht zusammen mit der HAVING-Klausel verwendet werden, da die HAVING-Klausel das ALL-Schlüsselwort außer Kraft setzt und Gruppen zurückgibt, die lediglich die HAVING-Klausel erfüllen. %HLVSLHO (UJHEQLV 8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ In diesem Beispiel werden alle Gruppen von Produkten aus der orderhistTabelle aufgelistet, für die 30 oder mehr Einheiten bestellt wurden. 86(1RUWKZLQG 6(/(&7SURGXFWLG680TXDQWLW\$6WRWDOBTXDQWLW\ )520RUGHUKLVW *5283%<SURGXFWLG +$9,1*680TXDQWLW\! *2 SURGXFWLG WRWDOBTXDQWLW\ URZVDIIHFWHG %HLVSLHO (UJHEQLV In diesem Beispiel werden alle Product IDs und die Menge der Produkte aufgelistet, von denen mehr als 1.200 Einheiten bestellt wurden. 86(1RUWKZLQG 6(/(&7SURGXFWLG680TXDQWLW\$6WRWDOBTXDQWLW\ )520>RUGHUGHWDLOV@ *5283%<SURGXFWLG +$9,1*680TXDQWLW\! *2 SURGXFWLG WRWDOBTXDQWLW\ URZVDIIHFWHG 8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ *HQHULHUHQYRQ$JJUHJDWZHUWHQLQ5HVXOWVHWV ,QKDOWGLHVHU)ROLH *HEHQ6LHHLQHhEHUVLFKW EHUGDV=XVDPPHQIDVVHQ YRQ:HUWHQIUHLQH7DEHOOH PLW+LOIHGHV52//83XQG &8%(2SHUDWRUV (LQVWLHJ 9HUZHQGHQ6LHGLH *5283%<.ODXVHOPLW GHP52//83XQGGHP &8%(2SHUDWRUXP $JJUHJDWZHUWHLQ5HVXOWVHWV ]XJHQHULHUHQ'DEHL ZHUGHQ6LHZDKUVFKHLQOLFK GLH*5283,1*)XQNWLRQ ]XP,QWHUSUHWLHUHQGHV 5HVXOWVHWVYHUZHQGHQ 9HUZHQGHQGHU*5283 %<.ODXVHOPLWGHP 52//832SHUDWRU 9HUZHQGHQGHU*5283 %<.ODXVHOPLWGHP &8%(2SHUDWRU 9HUZHQGHQGHU*5283,1*)XQNWLRQ ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Verwenden Sie die GROUP BY-Klausel mit dem ROLLUP- und dem CUBEOperator, um Aggregatwerte in Resultsets zu generieren. Der ROLLUP- oder der CUBE-Operator ist bei Querverweisen auf Informationen innerhalb einer Tabelle nützlich, denn so müssen keine zusätzlichen Skripts geschrieben werden. Bei Verwendung des ROLLUP- oder des CUBE-Operators verwenden Sie die GROUPING-Funktion, um die detaillierten und zusammenfassenden Werte im Resultset zu identifizieren. 8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ 9HUZHQGHQGHU*5283%<.ODXVHOPLWGHP52//832SHUDWRU 86(1RUWKZLQG 86(1RUWKZLQG 6(/(&7SURGXFWLGRUGHULG680TXDQWLW\$6WRWDOBTXDQWLW\ 6(/(&7SURGXFWLGRUGHULG680TXDQWLW\$6WRWDOBTXDQWLW\ )520RUGHUKLVW )520RUGHUKLVW *5283%<SURGXFWLGRUGHULG *5283%<SURGXFWLGRUGHULG :,7+52//83 :,7+52//83 25'(5%<SURGXFWLGRUGHULG 25'(5%<SURGXFWLGRUGHULG *2 *2 ,QKDOWGLHVHU)ROLH (UOlXWHUQ6LHGLH9HUZHQ GXQJGHV52//832SHUD WRUV]XP=XVDPPHQIDVVHQ YRQ'DWHQLQHLQHU7DEHOOH productid orderid total_quantity total_quantity productid orderid (LQVWLHJ 9HUZHQGHQ6LHGHQ 52//832SHUDWRU]XP =XVDPPHQIDVVHQYRQ 'DWHQLQHLQHU7DEHOOH NULL NULL 11 NULL NULL NULL NULL 95 95 15 15 11 11 11 22 55 10 10 22 22 NULL NULL 11 35 35 10 10 22 33 22 NULL NULL 25 25 45 45 33 33 11 22 15 15 30 30 Beschreibung *HVDPWVXPPH *HVDPWVXPPH =XVDPPHQIDVVHQQXUYRQ=HLOHQIUSURGXFWLG =XVDPPHQIDVVHQQXUYRQ=HLOHQIUSURGXFWLG 'HWDLOOLHUWHU:HUWIUSURGXFWLG 'HWDLOOLHUWHU:HUWIUSURGXFWLGRUGHULG RUGHULG 'HWDLOOLHUWHU:HUWIUSURGXFWLG 'HWDLOOLHUWHU:HUWIUSURGXFWLGRUGHULG RUGHULG =XVDPPHQIDVVHQQXU =XVDPPHQIDVVHQQXUYRQ=HLOHQIUSURGXFWLG YRQ=HLOHQIUSURGXFWLG 'HWDLOOLHUWHU:HUWIUSURGXFWLG 'HWDLOOLHUWHU:HUWIUSURGXFWLGRUGHULG RUGHULG =XVDPPHQIDVVHQQXU =XVDPPHQIDVVHQQXUYRQ=HLOHQIUSURGXFWLG YRQ=HLOHQIUSURGXFWLG 'HWDLOOLHUWHU:HUWIUSURGXFWLG 'HWDLOOLHUWHU:HUWIUSURGXFWLGRUGHULG RUGHULG 'HWDLOOLHUWHU:HUWIUSURGXFWLG 'HWDLOOLHUWHU:HUWIUSURGXFWLGRUGHULG RUGHULG ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** 0HWKRGLVFKHU+LQZHLV :HLVHQ6LHGDUDXIKLQGDVV GLH18//:HUWHLP%HLVSLHO DXIGHU)ROLHDQ]HLJHQGDVV GLHVHVSH]LHOOHQ=HLOHQQXU HUVWHOOWZXUGHQZHLOGHU 52//832SHUDWRUYHU ZHQGHWZXUGH Verwenden Sie die GROUP BY-Klausel mit dem ROLLUP-Operator, um Gruppenwerte zusammenzufassen. Bei Verwendung der GROUP BY-Klausel mit dem ROLLUP-Operator werden Daten in einem relationalen Standardformat zur Verfügung gestellt. Sie können z. B. ein Resultset generieren, das die für jedes Produkt bei jeder Bestellung bestellte Menge, die für jedes Produkt bestellte Gesamtmenge und die Gesamtsumme aller Produkte einschließt. Wenn Sie die GROUP BY-Klausel mit dem ROLLUP-Operator verwenden, beachten Sie die folgenden Aspekte und Richtlinien: SQL Server verarbeitet Daten von rechts nach links entlang der Liste von Spalten, die in der GROUP BY-Klausel angegeben sind. Dann wendet SQL Server die Aggregatfunktion auf jede Gruppe an. SQL Server fügt eine Zeile zum Resultset hinzu, die kumulierte Aggregate wie eine Zwischensumme oder einen laufenden Mittelwert anzeigt. Diese kumulierten Aggregate werden mit einem NULL-Wert im Resultset angezeigt. Das ALL-Schlüsselwort kann nicht mit dem ROLLUP-Operator verwendet werden. Stellen Sie bei Verwendung des ROLLUP-Operators sicher, dass die auf die GROUP BY-Klausel folgenden Spalten in einer für Ihre Unternehmensumgebung sinnvollen Beziehung zueinander stehen. 8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ %HLVSLHO 0HWKRGLVFKHU+LQZHLV 'LH%HLVSLHOH]XGLHVHP 7KHPDEDXHQDXIHLQDQGHU DXIVRGDVVGLH.XUVWHLO QHKPHUQDFKYROO]LHKHQ N|QQHQZLH52//83DXI *5283%<DXIEDXW (UJHEQLV In diesem Beispiel werden alle Zeilen aus der orderhist-Tabelle und die zusammengefassten Mengenwerte für jedes Produkt aufgelistet. 86(1RUWKZLQG 6(/(&7SURGXFWLGRUGHULG680TXDQWLW\$6WRWDOBTXDQWLW\ )520RUGHUKLVW *5283%<SURGXFWLGRUGHULG :,7+52//83 25'(5%<SURGXFWLGRUGHULG *2 SURGXFWLG RUGHULG WRWDOBTXDQWLW\ 18// URZVDIIHFWHG %HLVSLHO (UJHEQLV 18// 18// 18// 18// In diesem Beispiel werden Informationen zu Bestellungen aus der order details-Tabelle zurückgegeben. Diese Abfrage enthält eine SELECTAnweisung mit einer GROUP BY-Klausel ohne ROLLUP-Operator. Das Beispiel gibt eine Liste der Gesamtmenge zurück, die für jedes Produkt bei jeder Bestellung bestellt wurde, deren orderid kleiner als 10.250 ist. 86(1RUWKZLQG 6(/(&7RUGHULGSURGXFWLG680TXDQWLW\$6WRWDOBTXDQWLW\ )520>RUGHUGHWDLOV@ :+(5(RUGHULG *5283%<RUGHULGSURGXFWLG 25'(5%<RUGHULGSURGXFWLG *2 RUGHULG SURGXFWLG WRWDOBTXDQWLW\ URZVDIIHFWHG %HLVSLHO 8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ In diesem Beispiel wird der ROLLUP-Operator zur Anweisung aus Beispiel 2 hinzugefügt. Das Resultset enthält folgende Gesamtsummen: Jedes Produkt für jede Bestellung (dies wird auch ohne den ROLLUPOperator von der GROUP BY-Klausel zurückgegeben). Alle Produkte für jede Bestellung. Alle Produkte für alle Bestellungen (Gesamtsumme). Beachten Sie, dass im Resultset die Zeile, die sowohl in der productid- als auch in der orderid-Spalte einen NULL-Wert enthält, die Gesamtsumme für alle Bestellungen und alle Produkte darstellt. Die Zeilen mit einem NULL-Wert in der productid-Spalte stellen die Gesamtmenge eines Produkts für die Bestellung in der orderid-Spalte dar. (UJHEQLV 86(1RUWKZLQG 6(/(&7RUGHULGSURGXFWLG680TXDQWLW\$6WRWDOBTXDQWLW\ )520>RUGHUGHWDLOV@ :+(5(RUGHULG *5283%<RUGHULGSURGXFWLG :,7+52//83 25'(5%<RUGHULGSURGXFWLG *2 RUGHULG SURGXFWLG WRWDOBTXDQWLW\ 18// URZVDIIHFWHG 18// 18// 18// 8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ 9HUZHQGHQGHU*5283%<.ODXVHOPLWGHP&8%(2SHUDWRU 86(1RUWKZLQG 86(1RUWKZLQG 6(/(&7SURGXFWLGRUGHULG680TXDQWLW\$6WRWDOBTXDQWLW\ 6(/(&7SURGXFWLGRUGHULG680TXDQWLW\$6WRWDOBTXDQWLW\ )520RUGHUKLVW )520RUGHUKLVW *5283%<SURGXFWLGRUGHULG *5283%<SURGXFWLGRUGHULG :,7+&8%( :,7+&8%( 25'(5%<SURGXFWLGRUGHULG 25'(5%<SURGXFWLGRUGHULG *2 *2 productid orderid total_quantity total_quantity Beschreibung productid orderid *HVDPWVXPPH NULL NULL 95 *HVDPWVXPPH NULL 95 NULL ,QKDOWGLHVHU)ROLH (UOlXWHUQ6LHGLH9HUZHQ GXQJGHV&8%(2SHUDWRUV ]XP=XVDPPHQIDVVHQYRQ 'DWHQLQHLQHU7DEHOOH (LQVWLHJ 'HU&8%(2SHUDWRUXQWHU VFKHLGHWVLFKYRP52//83 2SHUDWRUGDKLQJHKHQGGDVV HUDXIGHU*UXQGODJHGHU *5283%<.ODXVHODOOH P|JOLFKHQ.RPELQDWLRQHQ YRQ*UXSSHQHUVWHOOWXQG GDQQGLH$JJUHJDW IXQNWLRQHQDQZHQGHW 'HU &8%(2SHUDWRU HU]HXJW]ZHL =XVDPPHQIDVVXQJV ZHUWHPHKUDOVGHU 52//832SHUDWRU NULL NULL NULL NULL 11 11 11 22 22 22 33 33 33 11 22 30 30 65 65 =XVDPPHQIDVVHQQXU =XVDPPHQIDVVHQQXUYRQ=HLOHQIURUGHULG YRQ=HLOHQIURUGHULG =XVDPPHQIDVVHQQXU =XVDPPHQIDVVHQQXUYRQ=HLOHQIURUGHULG YRQ=HLOHQIURUGHULG 22 NULL NULL 11 10 10 35 35 'HWDLOOLHUWHU:HUWIUSURGXFWLG 'HWDLOOLHUWHU:HUWIUSURGXFWLGRUGHULG RUGHULG =XVDPPHQIDVVHQQXU =XVDPPHQIDVVHQQXUYRQ=HLOHQIUSURGXFWLG YRQ=HLOHQIUSURGXFWLG NULL NULL 11 22 NULL NULL 11 22 15 15 55 10 10 25 25 45 45 15 15 30 30 =XVDPPHQIDVVHQQXU =XVDPPHQIDVVHQQXUYRQ=HLOHQIUSURGXFWLG YRQ=HLOHQIUSURGXFWLG 'HWDLOOLHUWHU:HUWIUSURGXFWLG 'HWDLOOLHUWHU:HUWIUSURGXFWLGRUGHULG RUGHULG 'HWDLOOLHUWHU:HUWIUSURGXFWLG 'HWDLOOLHUWHU:HUWIUSURGXFWLGRUGHULG RUGHULG 'HWDLOOLHUWHU:HUWIUSURGXFWLG RUGHULG 'HWDLOOLHUWHU:HUWIUSURGXFWLG RUGHULG =XVDPPHQIDVVHQQXU =XVDPPHQIDVVHQQXUYRQ=HLOHQIUSURGXFWLG YRQ=HLOHQIUSURGXFWLG 'HWDLOOLHUWHU:HUWIUSURGXFWLG 'HWDLOOLHUWHU:HUWIUSURGXFWLGRUGHULG RUGHULG 'HWDLOOLHUWHU:HUWIUSURGXFWLG 'HWDLOOLHUWHU:HUWIUSURGXFWLGRUGHULG RUGHULG ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** 0HWKRGLVFKHU+LQZHLV :HLVHQ6LHGDUDXIKLQGDVV GLH18//:HUWHLP5HVXOW VHWGHV%HLVSLHOVDXIGHU )ROLHDQ]HLJHQGDVVGLHVH VSH]LHOOHQ=HLOHQHUVWHOOW ZXUGHQGDGHU&8%( 2SHUDWRUYHUZHQGHWZXUGH Verwenden Sie die GROUP BY-Klausel mit dem CUBE-Operator, um auf der Grundlage der GROUP BY-Klausel alle möglichen Kombinationen von Gruppen zu erstellen und zusammenzufassen. Durch Verwendung der GROUP BYKlausel mit dem ROLLUP-Operator werden Daten in einem relationalen Standardformat zur Verfügung gestellt. Wenn Sie die GROUP BY-Klausel mit dem CUBE-Operator verwenden, beachten Sie die folgenden Aspekte und Richtlinien: Wenn n Spalten oder Ausdrücke in der GROUP BY-Klausel enthalten sind, gibt SQL Server 2n mögliche Kombinationen im Resultset zurück. Die NULL-Werte im Resultset zeigen an, dass diese speziellen Zeilen nur erstellt wurden, weil der CUBE-Operator verwendet wurde. Das ALL-Schlüsselwort kann nicht mit dem CUBE-Operator verwendet werden. Stellen Sie bei Verwendung des CUBE-Operators sicher, dass die auf die GROUP BY-Klausel folgenden Spalten in einer für Ihre Unternehmensumgebung sinnvollen Beziehung zueinander stehen. %HLVSLHO (UJHEQLV 8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ In diesem Beispiel wird ein Ergebnis zurückgegeben, das die Menge für jedes Produkt für jede Bestellung, die Gesamtmenge aller Produkte für jede Bestellung, die Gesamtmenge jedes Produkts für alle Bestellungen und die Gesamtmenge aller Produkte für alle Bestellungen bereitstellt. 86(1RUWKZLQG 6(/(&7SURGXFWLGRUGHULG680TXDQWLW\$6WRWDOBTXDQWLW\ )520RUGHUKLVW *5283%<SURGXFWLGRUGHULG :,7+&8%( 25'(5%<SURGXFWLGRUGHULG *2 SURGXFWLG RUGHULG WRWDOBTXDQWLW\ 18// 18// 18// URZVDIIHFWHG 18// 18// 18// 18// 8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ 9HUZHQGHQGHU*5283,1*)XQNWLRQ 6(/(&7SURGXFWLG*5283,1*SURGXFWLG 6(/(&7SURGXFWLG*5283,1*SURGXFWLG RUGHULG*5283,1*RUGHULG RUGHULG*5283,1*RUGHULG 680TXDQWLW\$6WRWDOBTXDQWLW\ 680TXDQWLW\$6WRWDOBTXDQWLW\ )520RUGHUKLVW )520RUGHUKLVW *5283%<SURGXFWLGRUGHULG *5283%<SURGXFWLGRUGHULG :,7+&8%( :,7+&8%( 25'(5%<SURGXFWLGRUGHULG 25'(5%<SURGXFWLGRUGHULG *2 *2 ,QKDOWGLHVHU)ROLH (UNOlUHQ6LHGLH)XQNWLRQV ZHLVHGHU*5283,1* )XQNWLRQ (LQVWLHJ productid 9HUZHQGHQ6LHGLH *5283,1*)XQNWLRQ HQWZHGHUPLWGHP52//83 RGHUGHP&8%(2SHUDWRU XPGLHGHWDLOOLHUWHQXQG]X VDPPHQIDVVHQGHQ:HUWH LP5HVXOWVHW]X XQWHUVFKHLGHQ VWHKWIU]XVDPPHQIDVVHQGH :HUWH LQGHUYRUKHUJHKHQGHQ 6SDOWH VWHKW IUGHWDLOOLHUWH:HUWH LQ GHUYRUKHUJHKHQGHQ6SDOWH NULL NULL NULL 1 1 1 2 2 2 3 3 3 1 1 1 0 0 0 0 0 0 0 0 0 orderid NULL 1 2 NULL 1 2 NULL 1 2 NULL 1 2 total_quantity 1 0 0 1 0 0 1 0 0 1 0 0 95 30 65 15 5 10 35 10 25 45 15 30 ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** 0HWKRGLVFKHU+LQZHLV :HLVHQ6LHGDUDXIKLQGDVV VLFKGDV5HVXOWVHWLP%HL VSLHODXIGHU)ROLHQXULQ HLQHPZLFKWLJHQ3XQNWYRP 5HVXOWVHWGHUYRUKHULJHQ )ROLHXQWHUVFKHLGHW'LH *5283,1*)XQNWLRQZLUG YHUZHQGHWXQG]ZHL]XVlW] OLFKH6SDOWHQVLQGLP5HVXOW VHWHLQJHVFKORVVHQ'HU :HUWVWHKWIU]XVDPPHQ IDVVHQGH:HUWHXQGIU GHWDLOOLHUWH:HUWHLQGHU YRUKHULJHQ6SDOWH Verwenden Sie die GROUPING-Funktion entweder mit dem ROLLUP- oder dem CUBE-Operator, um die detaillierten und zusammenfassenden Werte im Resultset zu unterscheiden. Durch Verwendung der GROUPING-Funktion können Sie ermitteln, ob die NULL-Werte im Resultset tatsächlich NULLWerten in den Basistabellen entsprechen oder ob der ROLLUP- bzw. der CUBE-Operator die Zeile generiert hat. Wenn Sie die GROUPING-Funktion verwenden, beachten Sie die folgenden Aspekte und Richtlinien: SQL Server erstellt im Resultset neue Spalten für jede in der GROUPINGFunktion angegebene Spalte. SQL Server gibt den Wert 1 zurück, um von ROLLUP oder CUBE erstellte zusammenfassende Werte im Resultset darzustellen. SQL Server gibt den Wert 0 zurück, um detaillierte Werte im Resultset darzustellen. Die GROUPING-Funktion kann nur für Spalten angegeben werden, die in der GROUP BY-Klausel vorhanden sind. Verwenden Sie die GROUPING-Funktion als Hilfe bei programmgesteuerten Verweisen auf die Resultsets. %HLVSLHO (UJHEQLV 8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ In diesem Beispiel wird ein Ergebnis zurückgegeben, das die Menge für jedes Produkt für jede Bestellung, die Gesamtmenge aller Produkte für jede Bestellung, die Gesamtmenge jedes Produkts für alle Bestellungen und die Gesamtmenge aller Produkte für alle Bestellungen bereitstellt. Durch die GROUPINGFunktion können die vom CUBE-Operator generierten Zeilen im Resultset von den übrigen Zeilen unterschieden werden. 86(1RUWKZLQG 6(/(&7SURGXFWLG*5283,1*SURGXFWLG RUGHULG*5283,1*RUGHULG 680TXDQWLW\$6WRWDOBTXDQWLW\ )520RUGHUKLVW *5283%<SURGXFWLGRUGHULG :,7+&8%( 25'(5%<SURGXFWLGRUGHULG *2 SURGXFWLG RUGHULG WRWDOBTXDQWLW\ 18// 18// 18// URZVDIIHFWHG 18// 18// 18// 18// 8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ %HLVSLHO In diesem Beispiel wird die GROUPING-Funktion in der productid- und in der orderid-Spalte verwendet, die in der GROUP BY-Klausel aufgelistet sind. Das Resultset enthält eine zusätzliche Spalte hinter der productid- und der orderidSpalte. Die GROUPING-Funktion gibt 1 zurück, wenn die Werte in dieser bestimmten Spalte durch den CUBE-Operator gruppiert wurden. Das Resultset enthält die Gesamtmenge für jedes Produkt für jede Bestellung, jedes Produkt für alle Bestellungen, alle Produkte für jede Bestellung und die Gesamtmenge aller Produkte für alle Bestellungen. Beachten Sie, dass im Resultset die Zeilen mit einem NULL-Wert sowohl in der productid- als auch in der orderid-Spalte die Gesamtsumme aller Produkte für alle Bestellungen darstellen. Zeilen mit einem NULL-Wert in der productid-Spalte stellen die Gesamtmenge aller Produkte für jede Bestellung dar. Zeilen mit einem NULL-Wert in der orderid-Spalte stellen die Gesamtmenge für ein Produkt für alle Bestellungen dar. (UJHEQLV 86(1RUWKZLQG 6(/(&7RUGHULG*5283,1*RUGHULGSURGXFWLG *5283,1*SURGXFWLG680TXDQWLW\$6WRWDOBTXDQWLW\ )520>RUGHUGHWDLOV@ :+(5(RUGHULG *5283%<RUGHULGSURGXFWLG :,7+&8%( 25'(5%<RUGHULGSURGXFWLG *2 RUGHULG SURGXFWLG WRWDOBTXDQWLW\ 18// 18// 18// 18// 18// 18// 18// 18// 18// URZVDIIHFWHG 8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ 9HUZHQGHQGHU&20387(XQG&20387(%<.ODXVHOQ COMPUTE ,QKDOWGLHVHU)ROLH COMPUTE BY 86(1RUWKZLQG 86(1RUWKZLQG 86(1RUWKZLQG 86(1RUWKZLQG 6(/(&7SURGXFWLGRUGHULG 6(/(&7SURGXFWLGRUGHULGTXDQWLW\ 6(/(&7SURGXFWLGRUGHULGTXDQWLW\ 6(/(&7SURGXFWLGRUGHULG TXDQWLW\ )520RUGHUKLVW TXDQWLW\ )520RUGHUKLVW )520RUGHUKLVW 25'(5%<SURGXFWLGRUGHULG )520RUGHUKLVW 25'(5%<SURGXFWLGRUGHULG 25'(5%<SURGXFWLGRUGHULG &20387(680TXDQWLW\%<SURGXFWLG &20387(680TXDQWLW\%<SURGXFWLG 25'(5%<SURGXFWLGRUGHULG &20387(680TXDQWLW\ &20387(680TXDQWLW\ &20387(680TXDQWLW\ &20387(680TXDQWLW\ *2 *2 *2 *2 productid orderid quantity (UOlXWHUQ6LH]XZHOFKHP =ZHFNGLH&20387(XQG &20387(%<.ODXVHOQ YHUZHQGHWZHUGHQ (LQVWLHJ productid orderid quantity quantity productid orderid 2EZRKOGLH&20387(XQG GLH&20387(%<.ODXVHO QLFKWGHP$16,6WDQGDUG HQWVSUHFKHQP|FKWHQ6LH VLHP|JOLFKHUZHLVHEHLP 'UXFNHQHLQIDFKHU%HULFKWH RGHUEHLPhEHUSUIHQGHU (UJHEQLVVHYRQ$QZHQGXQ JHQYHUZHQGHQGLH6LH VFKUHLEHQ 11 11 11 22 55 10 10 22 22 11 22 10 10 25 25 33 33 11 22 15 15 30 30 sum sum 95 95 productid orderid quantity 11 11 22 22 33 33 11 22 sum sum 11 22 sum sum 11 22 sum sum sum sum 55 10 10 15 15 10 10 25 25 35 35 15 15 30 30 45 45 95 95 ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** 0HWKRGLVFKHU+LQZHLV 'LHVH.ODXVHOQVROOWHQQLFKW EHLP(UVWHOOHQYRQ$QZHQ GXQJHQYHUZHQGHWZHUGHQ 6LHN|QQHQMHGRFKEHLP 7HVWHQYRQ$QZHQGXQJHQ QW]OLFKVHLQ Die COMPUTE- und die COMPUTE BY-Klausel generieren zusätzliche zusammenfassende Zeilen mit Daten in einem nicht relationalen Format, das nicht dem ANSI-Standard entspricht. Während dies beim Anzeigen nützlich sein kann, eignet sich die Ausgabe nicht gut zum Generieren von Resultsets, die mit anderen Anwendungen verwendet werden sollen. Sie können beispielsweise mit COMPUTE und COMPUTE BY in kurzer Zeit einfache Berichte drucken oder Ergebnisse von Anwendungen überprüfen, die Sie schreiben. Andere Tools, wie Crystal Reports oder Microsoft Access, bieten Ihnen beim Erstellen von Berichten jedoch mehr Möglichkeiten der Berichterstellung. Wenn Sie die COMPUTE- und COMPUTE BY-Klauseln verwenden, beachten Sie die folgenden Aspekte: 0HWKRGLVFKHU+LQZHLV 'LHWH[WQWH[WRGHU LPDJH'DWHQW\SHQN|QQHQ QXULQHLQHU&20387( RGHU&20387(%<.ODXVHO YHUZHQGHWZHUGHQZHQQ GLH.ODXVHO7HLOHLQHU 6NDODUIXQNWLRQLVW Die text-, ntext- oder image-Datentypen können nicht in eine COMPUTEoder eine COMPUTE BY-Klausel eingeschlossen werden. Das Format des Resultsets kann nicht angepasst werden. Wenn z. B. die SUM-Aggregatfunktion verwendet wird, zeigt SQL Server das Wort „sum“ im Resultset an. Sie können es nicht in „summary“ ändern. 8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ *HQHULHUHQHLQHV%HULFKWVPLWGHWDLOOLHUWHQXQG]XVDPPHQIDVVHQGHQ :HUWHQIUHLQH6SDOWH Die COMPUTE-Klausel generiert detaillierte Zeilen und einen einzelnen Aggregatwert für eine Spalte. Wenn Sie die COMPUTE-Klausel verwenden, beachten Sie die folgenden Aspekte und Richtlinien: %HLVSLHO (UJHEQLV Es können mehrere COMPUTE-Klauseln mit der COMPUTE BY-Klausel in einer einzelnen Anweisung verwendet werden. Dazu müssen Sie in SQL Server in der COMPUTE-Klausel dieselben Spalten angeben, die in der Auswahlliste aufgelistet sind. Die SELECT INTO-Anweisung sollte nicht in derselben Anweisung wie die COMPUTE-Klausel verwendet werden, da Anweisungen mit COMPUTE keine relationale Ausgabe generieren. Dieses Beispiel listet alle Zeilen in der orderhist-Tabelle auf und generiert die Gesamtsumme aller bestellten Produkte. 86(1RUWKZLQG 6(/(&7SURGXFWLGRUGHULGTXDQWLW\ )520RUGHUKLVW 25'(5%<SURGXFWLGRUGHULG &20387(680TXDQWLW\ *2 SURGXFWLG RUGHULG URZVDIIHFWHG WRWDOBTXDQWLW\ VXP *HQHULHUHQHLQHV%HULFKWVPLWGHWDLOOLHUWHQXQG]XVDPPHQIDVVHQGHQ :HUWHQIU7HLOPHQJHQYRQ*UXSSHQ Die COMPUTE BY-Klausel generiert Detailzeilen und mehrere zusammenfassende Werte. Zusammenfassende Werte werden generiert, wenn Spaltenwerte geändert werden. Verwenden Sie COMPUTE BY bei Daten, die leicht kategorisiert werden können. Wenn Sie die COMPUTE BY-Klausel verwenden, beachten Sie die folgenden Aspekte und Richtlinien: Die COMPUTE BY-Klausel sollte immer mit der ORDER BY-Klausel verwendet werden, sodass Zeilen gruppiert werden. Geben Sie die Spaltennamen hinter der COMPUTE BY-Klausel an, um zu ermitteln, welche zusammenfassenden Werte SQL Server generiert. 8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ %HLVSLHO (UJHEQLV Die hinter der COMPUTE BY-Klausel aufgelisteten Spalten müssen mit denen identisch sein, die hinter der ORDER BY-Klausel aufgelistet sind, bzw. es muss sich um eine Teilmenge davon handeln. Sie müssen in derselben Reihenfolge (von links nach rechts) aufgelistet sein und mit demselben Ausdruck beginnen, wobei kein Ausdruck ausgelassen werden darf. In diesem Beispiel werden alle Zeilen in der orderhist-Tabelle aufgelistet, die bestellte Gesamtmenge für jedes Produkt generiert sowie die Gesamtsumme aller Produkte, die bestellt wurden. 86(1RUWKZLQG 6(/(&7SURGXFWLGRUGHULGTXDQWLW\ )520RUGHUKLVW 25'(5%<SURGXFWLGRUGHULG &20387(680TXDQWLW\%<SURGXFWLG &20387(680TXDQWLW\ *2 SURGXFWLG RUGHULG WRWDOBTXDQWLW\ VXP URZVDIIHFWHG VXP VXP VXP 8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ (PSIRKOHQH0HWKRGHQ ,QKDOWGLHVHU)ROLH /LVWHQ6LHGLHHPSIRKOHQHQ 0HWKRGHQ]XP=XVDPPHQ IDVVHQYRQ'DWHQDXI ,QGL]LHUHQ6LH ,QGL]LHUHQ6LH KlXILJDJJUHJLHUWH6SDOWHQ KlXILJDJJUHJLHUWH6SDOWHQ (LQVWLHJ 9HUPHLGHQ6LHGDV9HUZHQGHQYRQ$JJUHJDWIXQNWLRQHQEHL 9HUPHLGHQ6LHGDV9HUZHQGHQYRQ$JJUHJDWIXQNWLRQHQEHL 6SDOWHQPLW 6SDOWHQPLW 18//:HUWHQ 18//:HUWHQ 8P.ODXVHOQXQG2SHUD WRUHQEHLP=XVDPPHQ IDVVHQYRQ'DWHQRSWLPDO QXW]HQ]XN|QQHQVROOWHQ 6LHGLHIROJHQGHQHPSIRK OHQHQ0HWKRGHQEHUFN VLFKWLJHQ 9HUZHQGHQ6LHGLH 9HUZHQGHQ6LHGLH 25'(5%<.ODXVHOXPHLQH6RUWLHUUHLKHQIROJH 25'(5%<.ODXVHOXPHLQH6RUWLHUUHLKHQIROJH VLFKHU]XVWHOOHQ VLFKHU]XVWHOOHQ 9HUZHQGHQ6LHGHQ 9HUZHQGHQ6LHGHQ 52//832SHUDWRUDQVWHOOH 52//832SHUDWRUDQVWHOOH GHV&8%(2SHUDWRUV GHV&8%(2SHUDWRUV 9HUPHLGHQ6LHGDV 9HUPHLGHQ6LHGDV 9HUZHQGHQGHU 9HUZHQGHQGHU &20387( &20387( RGHU RGHU &20387(%<.ODXVHOQ &20387(%<.ODXVHOQ ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** +LQZHLVIUGHQ .XUVOHLWHU ,QGLHVHP.XUVZLUGGDV (UVWHOOHQYRQ,QGL]HVQLFKW DXVIKUOLFKEHKDQGHOW:HL WHUH,QIRUPDWLRQHQ]XP(U VWHOOHQYRQ,QGL]HVILQGHQ 6LHLP.XUV$ 3URJUDPPLHUHQHLQHU 0LFURVRIW64/6HUYHU 'DWHQEDQN Wenn Sie Klauseln und Operatoren zum Zusammenfassen von Daten verwenden, sollten Sie die folgenden empfohlenen Methoden berücksichtigen: Indizieren Sie häufig aggregierte Spalten, um die Abfrageleistung zu verbessern. Wenn Sie z. B. die quantity-Spalte zu einem Index hinzufügen, werden Aggregatoperationen wie die in den Beispielen dieser Unterrichtseinheit verwendeten Operationen verbessert, auch wenn Sie den ROLLUPOperator verwenden. Vermeiden Sie es Aggregatfunktionen bei Spalten mit NULL-Werten zu verwenden, da das Resultset unter Umständen nicht repräsentativ für die Daten ist. Verwenden Sie die ORDER BY-Klausel, um sicherzustellen, dass im Resultset eine Sortierreihenfolge verwendet wird. Wenn die ORDER BYKlausel nicht verwendet wird, stellt SQL Server keine Sortierreihenfolge sicher. Verwenden Sie möglichst den ROLLUP-Operator, denn er ist effizienter als der CUBE-Operator. Der ROLLUP-Operator ist effizienter, da er Daten zusammenfasst, während Detaildaten verarbeitet werden. Der CUBEOperator kann sehr ressourcenintensiv sein, da eine Vielzahl von Berechnungen durchgeführt werden. Vermeiden Sie das Verwenden der COMPUTE- oder der COMPUTE BYKlausel, es sei denn, Sie möchten Ihre Anwendungen testen. Diese Klauseln sind beim Anzeigen und Drucken von Resultsets hilfreich. Da sie jedoch zusätzliche Summenzeilen mit Daten in einem nicht relationalen Format generieren, ist die Ausgabe für Produktionsdatenbanken nicht gut geeignet. Zusätzliche Informationen zu den folgenden Themen erhalten Sie in der SQL Server-Onlinedokumentation. Thema Suchbegriff Zusammenfassen von Daten „Aggregatfunktionen“ 8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ hEXQJVHLQKHLW$*UXSSLHUHQXQG=XVDPPHQIDVVHQ YRQ'DWHQ ,QKDOWGLHVHU)ROLH %HUHLWHQ6LHGLH.XUVWHLO QHKPHUDXIGLHhEXQJV HLQKHLWYRU (LQVWLHJ ,QGHQIROJHQGHQhEXQJHQ ZHUGHQ6LH'DWHQJUXSSLH UHQXQG]XVDPPHQIDVVHQ LQGHP6LH$JJUHJDWIXQN WLRQHQ]XVDPPHQPLWGHQ *5283%<+$9,1* &20387(XQG &20387(%<.ODXVHOQ XQGGHQ52//83XQG &8%(2SHUDWRUHQYHU ZHQGHQ ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** (UOlXWHUQ6LHGLH/HUQ]LHOH GHUhEXQJVHLQKHLW /HUQ]LHOH Am Ende dieser Übungseinheit werden Sie in der Lage sein, die folgenden Aufgaben auszuführen: Verwenden der GROUP BY- und der HAVING-Klausel zum Zusammenfassen von Daten nach Gruppen. Verwenden des ROLLUP- und des CUBE-Operators sowie der GROUPING-Funktion zum Generieren von Zusammenfassungsdaten. Verwenden der COMPUTE- und der COMPUTE BY-Klausel zum Generieren von Berichten mit Gruppenwechseln, Gesamtsummen und Mittelwerten. 9RUDXVVHW]XQJHQ Um diese Übungseinheit zu bearbeiten, benötigen Sie Folgendes: Die Skriptdateien für diese Übungseinheit, die sich in C:\Moc\2316B\Labfiles\L04 befinden. Die Antwortdateien für diese Übungseinheit, die sich in C:\Moc\2316B\Labfiles\L04\Answers befinden. (LQULFKWHQGHUhEXQJVHLQKHLW Nicht erforderlich. :HLWHUH,QIRUPDWLRQHQ Wenn Sie Hilfe bei der Ausführung von Dateien benötigen, suchen Sie in der Hilfe zu SQL Query Analyzer nach „Ausführen einer Abfrage“. 8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ Daneben sind die folgenden Informationsquellen verfügbar: Das Northwind-Datenbankschema. Die SQL Server-Onlinedokumentation. 6]HQDULR Der Aufbau des Schulungsraumes soll die Organisation des weltweit agierenden Handelsunternehmens Northwind Traders widerspiegeln. Das Unternehmen hat den fiktiven Domänennamen nwtraders.msft. Der primäre DNS-Server für nwtraders.msft ist der Kursleitercomputer, der die Internetprotokolladresse (IP-Adresse) 192.168.x.200 besitzt (wobei x die zugewiesene Schulungsraumnummer ist). Der Name des Kursleitercomputers ist London. Die folgende Tabelle stellt den Benutzernamen, den Computernamen und die IP-Adresse für jeden Kursteilnehmercomputer in der fiktiven Domäne nwtraders.msft bereit. Suchen Sie den Benutzernamen Ihres Computers und notieren Sie ihn. Benutzername Computername IP-Adresse SQLAdmin1 Vancouver 192.168.x.1 SQLAdmin2 Denver 192.168.x.2 SQLAdmin3 Perth 192.168.x.3 SQLAdmin4 Brisbane 192.168.x.4 SQLAdmin5 Lisbon 192.168.x.5 SQLAdmin6 Bonn 192.168.x.6 SQLAdmin7 Lima 192.168.x.7 SQLAdmin8 Santiago 192.168.x.8 SQLAdmin9 Bangalore 192.168.x.9 SQLAdmin10 Singapore 192.168.x.10 SQLAdmin11 Casablanca 192.168.x.11 SQLAdmin12 Tunis 192.168.x.12 SQLAdmin13 Acapulco 192.168.x.13 SQLAdmin14 Miami 192.168.x.14 SQLAdmin15 Auckland 192.168.x.15 SQLAdmin16 Suva 192.168.x.16 SQLAdmin17 Stockholm 192.168.x.17 SQLAdmin18 Moscow 192.168.x.18 SQLAdmin19 Caracas 192.168.x.19 SQLAdmin20 Montevideo 192.168.x.20 SQLAdmin21 Manila 192.168.x.21 SQLAdmin22 Tokyo 192.168.x.22 SQLAdmin23 Khartoum 192.168.x.23 SQLAdmin24 Nairobi 192.168.x.24 9HUDQVFKODJWH=HLWIUGLHhEXQJVHLQKHLW0LQXWHQ 8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ hEXQJ 9HUZHQGHQGHV723Q6FKOVVHOZRUWHV In dieser Übung verwenden Sie das TOP n-Schlüsselwort und die WITH TIESKlausel, um die obere Anzahl von Zeilen oder den Prozentanteil der Zeilen eines Resultsets zurückzugeben. C:\Moc\2316B\Labfiles\L04\Answers enthält vollständige Skripts für diese Übung. Ç So verwenden Sie das TOP n-Schlüsselwort zum Auflisten der oberen Zeilen eines Resultsets In diesem Verfahren werden Sie ein Skript ändern, sodass es die ersten zehn Zeilen einer Abfrage zurückgibt. Answer_TopN1.sql ist ein vollständiges Skript für dieses Verfahren. 1. Melden Sie sich an der Schulungsraumdomäne nwtraders mit Hilfe der Informationen in der folgenden Tabelle an. Option Eingabe Benutzername SQLAdminx (wobei x die Ihrem Computernamen zugewiesene Nummer ist, wie in der Schulungsraumdomäne nwtraders.msft festgelegt) Kennwort password 2. Öffnen Sie SQL Query Analyzer und melden Sie sich, wenn Sie dazu aufgefordert werden, mittels Microsoft Windows®-Authentifizierung am (lokalen) Server an. Sie verfügen über die Berechtigung, sich bei SQL Server anzumelden und SQL Server zu verwalten, da Sie als SQLAdminx angemeldet sind, und SQLAdminx ein Mitglied der lokalen Windows 2000-Gruppe Administratoren ist. Alle Mitglieder dieser Gruppe werden automatisch der SQL Server-Rolle sysadmin zugeordnet. 3. Klicken Sie in der Liste DB auf Northwind. 4. Öffnen und überprüfen Sie C:\Moc\2316B\Labfiles\L04\TopN.sql script. Es handelt sich um eine Abfrage, die den Gesamtumsatz jeder Bestellung in der order details-Tabelle berechnet, und die Ergebnisse in absteigender Reihenfolge zurückgibt. 5. Ändern Sie die in Schritt 4 beschriebene Abfrage so, dass die die Abfrage die ersten zehn Zeilen zurückgibt. 86(1RUWKZLQG 6(/(&7723 RUGHULG XQLWSULFHTXDQWLW\$6WRWDOVDOH )520>RUGHUGHWDLOV@ 25'(5%<XQLWSULFHTXDQWLW\'(6& *2 6. Führen Sie die Abfrage aus, um zu überprüfen, ob zehn Zeilen zurückgegeben werden. 8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ (UJHEQLV Das Ergebnis ähnelt dem folgenden Resultset. RUGHULG WRWDOVDOH URZVDIIHFWHG Ç So listen Sie die oberen Werte eines Resultsets mit Hilfe des TOP nSchlüsselwortes auf In diesem Verfahren verwenden Sie das TOP n-Schlüsselwort, um die oberen Werte eines Resultsets aufzulisten. Answer_TopN2.sql ist ein vollständiges Skript für dieses Verfahren. 1. Ändern Sie die in Schritt 5 des vorherigen Verfahrens beschriebene Abfrage so, dass die oberen zehn Produkte (einschließlich gleichen Werten) mit der höchsten Gesamtmenge zurückgegeben werden. 86(1RUWKZLQG 6(/(&7723:,7+7,(6 RUGHULG XQLWSULFHTXDQWLW\$6WRWDOVDOH )520>RUGHUGHWDLOV@ 25'(5%<XQLWSULFHTXDQWLW\'(6& *2 2. Führen Sie die Abfrage aus, um zu überprüfen, ob elf Zeilen zurückgegeben werden. (UJHEQLV Das Ergebnis ähnelt dem folgenden Resultset. RUGHULG WRWDOVDOH URZVDIIHFWHG 8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ 3. Warum wurden von der Abfrage, in der die oberen 10 Werte einschließlich gleichen Werten abgefragt wurden, mehr Zeilen zurückgegeben? Der TOP 10-Operator gibt an, dass nur die ersten zehn Zeilen zurückgegeben werden sollen. Der TOP 10 WITH TIES-Operator gibt an, dass alle Zeilen zurückgegeben werden, deren Werte in der Liste der oberen zehn Werte enthalten sind, unabhängig von der Anzahl von Zeilen. ____________________________________________________________ ____________________________________________________________ 8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ hEXQJ 9HUZHQGHQGHU*5283%<XQG+$9,1*.ODXVHO In dieser Übung verwenden Sie die GROUP BY- und HAVING-Klauseln, um Daten aus der Northwind-Datenbank zusammenzufassen. C:\Moc\2316B\Labfiles\L04\Answers enthält vollständige Skripts für diese Übung. Ç So verwenden Sie die GROUP BY-Klausel zum Zusammenfassen von Daten In diesem Verfahren öffnen Sie ein Skript, das eine Abfrage mit der GROUP BY-Klausel einschließt. Dann ändern Sie die Abfrage, um andere Ergebnisse zu erhalten. 1. Öffnen und überprüfen Sie das Skript C:\Moc\2316B\Labfiles\L04\Groupby.sql. Dies ist eine Abfrage, mit der die Gesamtmenge der bestellten Elemente für zwei unterschiedliche Kategorien von Elementen in der order details-Tabelle berechnet wird. 2. Führen Sie die Abfrage aus, und überprüfen Sie die Ergebnisse. (UJHEQLV Das Ergebnis ähnelt dem folgenden Resultset. FDWHJRU\LG WRWDOBTXDQWLW\ URZVDIIHFWHG Ç So berechnen Sie die Gesamtmenge für jede Kategorie Answer_Groupby1.sql ist ein vollständiges Skript für dieses Verfahren. 1. Ändern Sie das Skript aus Schritt 1 des vorherigen Verfahrens, um die Menge je Kategorie für alle Produkte unabhängig von der Kategorie zusammenzufassen. 86(1RUWKZLQG 6(/(&7FDWHJRU\LG680TXDQWLW\$6WRWDOBTXDQWLW\ )520>RUGHUGHWDLOV@$6RG ,11(5-2,1SURGXFWV$6S 21RGSURGXFWLG SSURGXFWLG *5283%<FDWHJRU\LG *2 2. Führen Sie die Abfrage aus, und überprüfen Sie die Ergebnisse. (UJHEQLV 8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ Das Ergebnis ähnelt dem folgenden Resultset. FDWHJRU\LG WRWDOBTXDQWLW\ URZVDIIHFWHG Ç So berechnen Sie die Gesamtmenge für jede Bestellung In diesem Verfahren berechnen Sie die Gesamtmenge für jede Bestellung. Answer_Groupby2.sql ist ein vollständiges Skript für dieses Verfahren. 1. Ändern Sie das Skript aus Schritt 1 des vorherigen Verfahrens, um die Menge nach orderid für alle Produkte unabhängig von der Kategorie zusammenzufassen. 86(1RUWKZLQG 6(/(&7RUGHULG680TXDQWLW\$6WRWDOBTXDQWLW\ )520>RUGHUGHWDLOV@$6RG ,11(5-2,1SURGXFWV$6S 21RGSURGXFWLG SSURGXFWLG *5283%<RUGHULG *2 2. Führen Sie die Abfrage aus, und überprüfen Sie die Ergebnisse. (UJHEQLV Das Ergebnis ähnelt dem folgenden Teil eines Resultsets. RUGHUHG WRWDOBTXDQWLW\ URZVDIIHFWHG 8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ Ç So berechnen Sie die Anzahl von Bestellungen mit mehr als 250 bestellten Einheiten In diesem Verfahren berechnen Sie die Anzahl von Bestellungen mit mehr als 250 bestellten Einheiten. Answer_Groupby3.sql ist ein vollständiges Skript für dieses Verfahren. 1. Ändern Sie das Skript aus Schritt 1 des vorherigen Verfahren, um die Menge nach orderid für alle Produkte unabhängig von der Kategorie zusammenzufassen und nur die Bestellungen zurückzugeben, die mehr als 250 bestellte Einheiten umfassen. 86(1RUWKZLQG 6(/(&7RUGHULG680TXDQWLW\$6WRWDOBTXDQWLW\ )520>RUGHUGHWDLOV@$6RG ,11(5-2,1SURGXFWV$6S 21RGSURGXFWLG SSURGXFWLG *5283%<RUGHULG +$9,1*680TXDQWLW\! *2 2. Führen Sie die Abfrage aus, und überprüfen Sie die Ergebnisse. (UJHEQLV Das Ergebnis ähnelt dem folgenden Resultset. RUGHUHG WRWDOBTXDQWLW\ URZVDIIHFWHG 8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ hEXQJ 9HUZHQGHQGHV52//83XQG&8%(2SHUDWRUV In dieser Übung generieren Sie Zusammenfassungsdaten mit Hilfe des ROLLUP- und des CUBE-Operators. Darüber hinaus verwenden Sie die GROUPING-Funktion, um die Ergebniszeilen zu ermitteln, bei denen es sich um Zusammenfassungen handelt. C:\Moc\2316B\Labfiles\L04\Answers enthält vollständige Skripts für diese Übung. Ç So verwenden Sie den ROLLUP-Operator zum Generieren von zusammenfassenden Ergebnissen In diesem Verfahren verwenden Sie den ROLLUP-Operator mit der GROUP BY- und der HAVING-Klausel, um zusammenfassende Ergebnisse zu generieren. Answer_Rollup1.sql ist ein vollständiges Skript für dieses Verfahren. 1. Öffnen und überprüfen Sie das Skript C:\Moc\2316B\Labfiles\L04\Rollup.sql. Dies ist eine Abfrage, die die Menge der Elemente zusammenfasst, die von productid und orderid bestellt wurden, und die eine Rollupberechnung durchführt. 2. Ändern Sie die Abfrage aus Schritt 1, sodass das Ergebnis auf die Produktnummer 50 beschränkt ist, indem Sie eine WHERE-Klausel verwenden, und führen Sie dann die Abfrage aus. 86(1RUWKZLQG 6(/(&7SURGXFWLGRUGHULG680TXDQWLW\$6WRWDOBTXDQWLW\ )520>RUGHUGHWDLOV@ :+(5(SURGXFWLG *5283%<SURGXFWLGRUGHULG :,7+52//83 25'(5%<SURGXFWLGRUGHULG *2 3. Führen Sie die Abfrage aus, und überprüfen Sie die Ergebnisse. Notieren Sie sich die Zeilen mit NULL-Werten. (UJHEQLV Das Ergebnis ähnelt dem folgenden Resultset. SURGXFWLG RUGHULG 18// 18// 18// URZVDIIHFWHG WRWDOBTXDQWLW\ 8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ 4. Welche Bedeutung haben die NULL-Werte in den Spalten productid und orderid? Die NULL-Werte in einer Zeile zeigen an, dass der Wert in der Spalte „total_quantity“ für diese Zeile, der Summe aller „total_quantity“Werte ohne Gruppierung der Spalte mit dem NULL-Wert darstellt. Beispielsweise ist der Wert „total_quantity“ in der Zeile, in der sowohl „productid“ als auch „orderid“ Null sind, die Summe aller „total_quantity“-Werte der Tabelle. ____________________________________________________________ ____________________________________________________________ Ç So verwenden Sie den CUBE-Operator zum Generieren von zusammenfassenden Ergebnissen In diesem Verfahren verwenden Sie den CUBE-Operator und die GROUPINGFunktion, um zwischen Summen- und Detailzeilen im Resultset zu unterscheiden. Answer_Cube1.sql ist ein vollständiges Skript für dieses Verfahren. 1. Öffnen und überprüfen Sie das Skript C:\Moc\2316B\Labfiles\L04\Rollup.sql. Dies ist eine Abfrage, die die Menge der Elemente zusammenfasst, die von productid und orderid bestellt wurden, und die eine Rollupberechnung durchführt. 2. Ändern Sie die Abfrage aus Schritt 1, um statt des ROLLUP-Operators den CUBE-Operator zu verwenden. Verwenden Sie darüber hinaus auch die GROUPING-Funktion in der productid- und der orderid-Spalte, damit Sie zwischen Summen- und Detailzeilen im Resultset unterscheiden können, und führen Sie dann die Abfrage aus. 86(1RUWKZLQG 6(/(&7SURGXFWLG *5283,1*SURGXFWLG RUGHULG *5283,1*RUGHULG 680TXDQWLW\$6WRWDOBTXDQWLW\ )520>RUGHUGHWDLOV@ :+(5(SURGXFWLG *5283%<SURGXFWLGRUGHULG :,7+&8%( 25'(5%<SURGXFWLGRUGHULG *2 3. Führen Sie die Abfrage aus, und überprüfen Sie die Ergebnisse. (UJHEQLV 8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ Das Ergebnis ähnelt dem folgenden Resultset. SURGXFWLG RUGHULG 18// 18// 18// 18// 18// 18// 18// 18// 18// 18// 18// 18// 18// URZVDIIHFWHG WRWDOBTXDQWLW\ Welchen Zeilen sind Zusammenfassungen? Die Zeilen mit der Zahl 1 in einer von der GROUPING-Funktion generierten Spalte. ____________________________________________________________ ____________________________________________________________ Welchen Zeilen sind Zusammenfassungen nach Produkt? Nach Bestellung? Wenn die Zahl 1 in der von der GROUPING-Funktion für die „productid“-Spalte generierten Spalte vorhanden ist, handelt es sich bei der Zeile um eine Zusammenfassung nach Bestellung. Der Wert dieser Zeile in „productid“ ist NULL, da es sich um eine Summenzeile anstelle einer Detailzeile handelt, die einen NULL-Wert enthält. Die Zeile mit der Zahl 1 in der „orderid“-Spalte der GROUPING-Funktion ist eine Summenzeile für die Produktnummer 50. Die Zeile mit der Zahl 1 in den beiden von der GROUPING-Funktion generierten Spalten gibt eine Gesamtsumme an. ____________________________________________________________ ____________________________________________________________ 8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ hEXQJ 9HUZHQGHQGHU&20387(XQG&20387(%<.ODXVHO In dieser Übung verwenden Sie die COMPUTE- und die COMPUTE BYKlausel, um Berichte mit Gruppenwechseln sowie Summen und Mittelwerte am Ende der Berichte zu generieren. C:\Moc\2316B\Labfiles\L04\Answers enthält vollständige Skripts für diese Übung. Ç So verwenden Sie die COMPUTE-Klausel zum Generieren von Berichten In diesem Verfahren ändern Sie eine vorhandene Abfrage durch Hinzufügen der COMPUTE- und der COMPUTE BY-Klausel, um Zwischensummen und Gesamtsummen zu generieren. Answer_Compute1.sql ist ein vollständiges Skript für dieses Verfahren. 1. Öffnen und überprüfen Sie das Skript C:\Moc\2316B\Labfiles\L04\Compute.sql. Dies ist eine Abfrage, die orderid und quantity aller Bestellungen zurückgibt, deren orderid größer als 11070 ist. 2. Ändern Sie die Abfrage aus Schritt 1, um mit Hilfe der COMPUTE-Klausel eine Gesamtsumme für die quantity-Spalte zu erstellen. 86(1RUWKZLQG 6(/(&7RUGHULGTXDQWLW\ )520>RUGHUGHWDLOV@ :+(5(RUGHULG! &20387(680TXDQWLW\ *2 3. Führen Sie die Abfrage aus, und überprüfen Sie die Ergebnisse. (UJHEQLV Das Ergebnis ähnelt dem folgenden Teil eines Resultsets. RUGHUHG TXDQWLW\ 6XP URZVDIIHFWHG 8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ Ç So verwenden Sie die COMPUTE-Klausel zum Generieren von Berichten In diesem Verfahren ändern Sie eine vorhandene Abfrage mit Hilfe der COMPUTE BY-Klausel, um Gesamtsummen zu generieren. Answer_Compute2.sql ist ein vollständiges Skript für dieses Verfahren. 1. Öffnen und überprüfen Sie das Skript C:\Moc\2316B\Labfiles\L04\Compute.sql. Dies ist eine Abfrage, die orderid und quantity aller Bestellungen zurückgibt, deren orderid größer als 11070 ist. 2. Ändern Sie die Abfrage aus Schritt 1, um einen Bericht mit Gruppenwechsel zu generieren, der die Gesamtmenge für die Bestellnummern 11075 und 11076 bereitstellt. 86(1RUWKZLQG 6(/(&7RUGHULGTXDQWLW\ )520>RUGHUGHWDLOV@ :+(5(RUGHULGLQ 25'(5%<RUGHULG &20387(680TXDQWLW\%<RUGHULG *2 3. Führen Sie die Abfrage aus, und überprüfen Sie die Ergebnisse. (UJHEQLV Das Ergebnis ähnelt dem folgenden Resultset. RUGHUHG TXDQWLW\ 6XP 6XP URZVDIIHFWHG 8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ Ç So fügen Sie die Gesamtmenge und die durchschnittliche Menge am Ende des Berichts mit Gruppenwechsel hinzu In diesem Verfahren fügen Sie die Gesamtmenge und die durchschnittliche Menge am Ende des Berichts mit Gruppenwechsel hinzu Answer_Compute3.sql ist ein vollständiges Skript für dieses Verfahren. 1. Ändern Sie die Abfrage aus Schritt 1 des vorherigen Verfahrens, um die Gesamtmenge und die durchschnittliche Menge am Ende des Berichts mit Gruppenwechsel hinzuzufügen. 86(1RUWKZLQG 6(/(&7RUGHULGTXDQWLW\ )520>RUGHUGHWDLOV@ :+(5(RUGHULGLQ 25'(5%<RUGHULG &20387(680TXDQWLW\%<RUGHULG &20387(680TXDQWLW\ &20387($9*TXDQWLW\ *2 2. Führen Sie die Abfrage aus, und überprüfen Sie die Ergebnisse. (UJHEQLV Das Ergebnis ähnelt dem folgenden Resultset. Beachten Sie die Ähnlichkeit zwischen diesem Resultset und dem Resultset aus Schritt 3 des vorherigen Verfahrens, zusätzlich sind hier jedoch die Summen am Ende des Berichts (Gesamtmenge und durchschnittliche Menge) aufgeführt. RUGHULG TXDQWLW\ 6XP 6XP 6XP $YJ URZVDIIHFWHG 8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ /HUQ]LHONRQWUROOH ,QKDOWGLHVHU)ROLH 9HUWLHIHQ6LHGLH/HUQ]LHOH GLHVHU8QWHUULFKWVHLQKHLW LQGHP6LHGLHZLFKWLJVWHQ 3XQNWHZLHGHUKROHQ (LQVWLHJ 'LH)UDJHQ]XU/HUQ]LHO NRQWUROOHEH]LHKHQVLFKDXI HLQLJHGHU6FKOVVHONRQ ]HSWHGLH,QKDOWGLHVHU 8QWHUULFKWVHLQKHLWVLQG $XIOLVWHQGHU 723Q:HUWH 9HUZHQGHQ YRQ$JJUHJDWIXQNWLRQHQ *UXQGODJHQGHU*5283%<.ODXVHO *HQHULHUHQYRQ$JJUHJDWZHUWHQLQ5HVXOWVHWV 9HUZHQGHQGHU&20387( XQG&20387( %<.ODXVHOQ ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** *HKHQ6LHDQKDQGGLHVHU )UDJHQGLH7KHPHQGHU 8QWHUULFKWVHLQKHLWGXUFK .OlUHQ6LHDQGHUHRIIHQH )UDJHQGHU.XUVWHLOQHKPHU EHYRU6LHIRUWIDKUHQ 1. Eine Angestellte in der Marketingabteilung hat Sie gebeten, Zusammenfassungsdaten über Produktumsätze zur Verfügung zu stellen. Sie benötigt eine Zusammenfassung aller Frühstückszerealien nach Typ (warm, kalt oder fettarm), Hersteller und Größe der Niederlassung, in der das Produkt verkauft wurde (klein, mittelgroß oder groß). Wenn eine einzelne Tabelle alle diese Informationen enthält, welche Klauseln oder Operatoren könnten Sie mit der SELECT-Anweisung verwenden? Begründung? Die beste Antwort ist die GROUP BY-Klausel in Verbindung mit dem CUBE-Operator. Die GROUP BY- und HAVING-Klausel stellen nur eine Ebene von Zusammenfassungen (oder Gruppen) bereit. Der ROLLUP-Operator stellt nur für eine Kategorie Zusammenfassungen bereit. Der CUBE-Operator stellt für mehrere Kategorien Zusammenfassungen bereit. Sie könnten auch die COMPUTE- oder COMPUTE BY-Klausel zum Generieren allgemeiner Berichte verwenden. 8QWHUULFKWVHLQKHLW*UXSSLHUHQXQG=XVDPPHQIDVVHQYRQ'DWHQ 2. Ihr Vorgesetzter fordert Sie auf, eine Datei mit sämtlichen Daten aus Frage 1 an eine andere Entwicklungsgruppe zu übergeben, die für das Generieren von Berichten und die grafische Darstellung verantwortlich ist. Können die COMPUTE- und COMPUTE BY-Klausel bei dieser Aufgabenstellung verwendet werden? Begründung? Nein, die COMPUTE- und COMPUTE BY-Klausel generieren zusätzliche Summenzeilen mit Daten in einem nicht relationalen Format. Während dies beim Anzeigen hilfreich sein kann, eignet sich die Ausgabe nicht gut zum Generieren von Resultsets, die von anderen Anwendungen verwendet werden sollen. Sie können die GROUP BYKlausel und den CUBE- oder ROLLUP-Operator verwenden, um Daten in einem relationalen Standardformat zur Verfügung zu stellen, mit dem andere Clients problemlos arbeiten können. 3. Sie überprüfen die Ergebnisse einer SELECT-Anweisung, in der die GROUP BY-Klausel und der CUBE-Operator verwendet wurden. Das Resultset enthält NULL-Werte, und Sie wissen, dass NULL-Werte in den von der SELECT-Anweisung verwendeten Tabellen zulässig sind. Wie können Sie zwischen detaillierten Zeilen und zusammenfassenden Zeilen mit NULL-Werten unterscheiden? Verwenden Sie die GROUPING-Funktion in den Spalten, in denen NULL-Werte zulässig sind. Der Wert 1 wird in der durch die GROUPING-Funktion generierten Spalte angezeigt, wenn es sich bei der Zeile um eine zusammenfassende Zeile handelt. 4. Sie sollen eine Liste bereitstellen, die die 100 besten Produkte und die Produkte enthält, die sich in den unteren fünf Prozent des Umsatzes befinden. Können Sie zur Beantwortung beider Fragen die SELECT TOP n [PERCENT]-Anweisung verwenden? Gibt es andere Möglichkeiten, um diese Frage zu beantworten? Ja, Sie können zur Beantwortung beider Aufgaben die SELECT TOP n [PERCENT]-Anweisung verwenden. Die erste Frage kann mit der SELECT TOP 100...ORDER BY...DESC-Anweisung beantwortet werden, sodass die Elemente mit der höchsten Verkaufszahl in der Liste an oberster Position stehen. Die zweite Frage kann mit der SELECT TOP 5 PERCENT... ORDER BY...ASC-Anweisung beantwortet werden, sodass die Elemente mit der niedrigsten Verkaufszahl in der Liste an oberster Position stehen. Unterrichtseinheit 5: Verknüpfen von mehreren Tabellen Inhalt Übersicht 1 Verwenden von Aliasnamen für Tabellennamen 2 Kombinieren von Daten aus mehreren Tabellen 4 Kombinieren mehrerer Resultsets 19 Empfohlene Methoden 21 Übungseinheit A: Abfragen mehrerer Tabellen 22 Lernzielkontrolle 31 Die in diesen Unterlagen enthaltenen Angaben und Daten, einschließlich URLs und anderer Verweise auf Internetwebsites, können ohne vorherige Ankündigung geändert werden. Die in den Beispielen genannten Firmen, Organisationen, Produkte, Domänennamen, E-Mail-Adressen, Logos, Personen, Orte und Ereignisse sind frei erfunden und jede Ähnlichkeit mit bestehenden Firmen, Organisationen, Produkten, Domänennamen, E-Mail-Adressen, Logos, Personen, Orten oder Ereignissen ist rein zufällig, soweit nichts anderes angegeben ist. Die Benutzer sind verantwortlich für das Einhalten aller anwendbaren Urheberrechtsgesetze. Unabhängig von der Anwendbarkeit der entsprechenden Urheberrechtsgesetze darf ohne ausdrückliche schriftliche Erlaubnis der Microsoft Corporation kein Teil dieses Dokuments für irgendwelche Zwecke vervielfältigt oder in einem Datenempfangssystem gespeichert oder darin eingelesen werden, unabhängig davon, auf welche Art und Weise oder mit welchen Mitteln (elektronisch, mechanisch, durch Fotokopieren, Aufzeichnen, usw.) dies geschieht. Microsoft Corporation kann Inhaber von Patenten oder Patentanträgen, Marken, Urheberrechten oder anderen gewerblichen Schutzrechten sein, die den Inhalt dieses Dokuments betreffen. Die Bereitstellung dieses Dokuments gewährt keinerlei Lizenzrechte an diesen Patenten, Marken, Urheberrechten oder anderen gewerblichen Schutzrechten, es sei denn, dies wurde ausdrücklich durch einen schriftlichen Lizenzvertrag mit der Microsoft Corporation vereinbart. 2001 Microsoft Corporation. Alle Rechte vorbehalten. Microsoft, BackOffice, MS-DOS, PowerPoint, Visual Studio, Windows, Windows Media und Windows NT sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Die in diesem Dokument aufgeführten Namen tatsächlicher Firmen und Produkte sind möglicherweise Marken der jeweiligen Eigentümer. 8QWHUULFKWVHLQKHLW9HUNQSIHQYRQPHKUHUHQ7DEHOOHQ LLL +LQZHLVHIUGHQ.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. 6WUDWHJLHIUGLH8QWHUULFKWVHLQKHLW 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 8QWHUULFKWVHLQKHLW9HUNQSIHQYRQPHKUHUHQ7DEHOOHQ 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. 8QWHUULFKWVHLQKHLW9HUNQSIHQYRQPHKUHUHQ7DEHOOHQ hEHUVLFKW ,QKDOWGLHVHU)ROLH *HEHQ6LHHLQHhEHUVLFKW EHUGLH7KHPHQXQG/HUQ ]LHOHGLHVHU8QWHUULFKWV HLQKHLW (LQVWLHJ ,QGLHVHU8QWHUULFKWVHLQKHLW OHUQHQ6LHZLHPHKUHUH 7DEHOOHQYHUNQSIWZHUGHQ 9HUZHQGHQYRQ $OLDVQDPHQ IU7DEHOOHQQDPHQ .RPELQLHUHQYRQ'DWHQDXVPHKUHUHQ7DEHOOHQ .RPELQLHUHQPHKUHUHU5HVXOWVHWV ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Diese Unterrichtseinheit gibt den Kursteilnehmern eine Übersicht über das Abfragen mehrerer Tabellen mit Hilfe verschiedener Verknüpfungstypen, über das Kombinieren von Resultsets mit Hilfe des UNION-Operators und über das Erstellen von Tabellen mit Hilfe der SELECT INTO-Anweisung. Am Ende dieser Unterrichtseinheit werden Sie in der Lage sein, die folgenden Aufgaben auszuführen: Verwenden von Aliasnamen für Tabellennamen. Kombinieren von Daten aus zwei oder mehreren Tabellen mit Hilfe von Verknüpfungen. Kombinieren mehrerer Resultsets zu einem Resultset mit Hilfe des UNIONOperators. 8QWHUULFKWVHLQKHLW9HUNQSIHQYRQPHKUHUHQ7DEHOOHQ 9HUZHQGHQYRQ$OLDVQDPHQIU7DEHOOHQQDPHQ ,QKDOWGLHVHU)ROLH %HVFKUHLEHQ6LHZLH$OLDV QDPHQIU7DEHOOHQQDPHQ YHUZHQGHWZHUGHQ (LQVWLHJ 'XUFKGDV9HUZHQGHQYRQ $OLDVQDPHQIU7DEHOOHQ QDPHQZLUGGLH/HVEDUNHLW YRQ6NULSWVYHUEHVVHUWGDV 6FKUHLEHQYRQNRPSOH[HQ 9HUNQSIXQJHQHUOHLFKWHUW XQGGLH9HUZDOWXQJYRQ 7UDQVDFW64/YHUHLQIDFKW %HLVSLHO RKQH $OLDVQDPHQ 86(MRLQGE 86(MRLQGE 6(/(&7EX\HUBQDPHVDOHVEX\HUBLGTW\ 6(/(&7EX\HUBQDPHVDOHVEX\HUBLGTW\ )520EX\HUV,11(5-2,1VDOHV )520EX\HUV,11(5-2,1VDOHV 21EX\HUVEX\HUBLG 21EX\HUVEX\HUBLG VDOHVEX\HUBLG VDOHVEX\HUBLG *2 *2 %HLVSLHO PLW $OLDVQDPHQ 86(MRLQGE 86(MRLQGE 6(/(&7EX\HUBQDPHVEX\HUBLGTW\ 6(/(&7EX\HUBQDPHVEX\HUBLGTW\ )520EX\HUV$6E,11(5-2,1VDOHV$6V )520EX\HUV$6E,11(5-2,1VDOHV$6V 21EEX\HUBLG 21EEX\HUBLG VEX\HUBLG VEX\HUBLG *2 *2 ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Durch das Verwenden von Aliasnamen für Tabellennamen wird die Lesbarkeit von Skripts verbessert, das Schreiben von komplexen Verknüpfungen erleichtert und die Verwaltung von Transact-SQL vereinfacht. Sie können beim Schreiben von Skripts einen langen und komplexen vollgekennzeichneten Tabellennamen durch einen einfachen, abgekürzten Aliasnamen ersetzen. Sie verwenden einen Aliasnamen anstelle des vollständigen Tabellennamens. 7HLOV\QWD[ SELECT * FROM server.database.schema.table AS table_alias %HLVSLHO In diesem Beispiel werden die in der buyers- und der sales-Tabelle aufgeführten Namen von Käufern, die Käuferkennung und die verkaufte Menge angezeigt. Bei dieser Abfrage werden keine Aliasnamen für die Tabellen in der JOIN-Syntax verwendet. 86(MRLQGE 6(/(&7EX\HUBQDPH6DOHVEX\HUBLGTW\ )520EX\HUV ,11(5-2,1VDOHV 21EX\HUVEX\HUBLG VDOHVEX\HUBLG *2 %HLVSLHO 8QWHUULFKWVHLQKHLW9HUNQSIHQYRQPHKUHUHQ7DEHOOHQ 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. 8QWHUULFKWVHLQKHLW9HUNQSIHQYRQPHKUHUHQ7DEHOOHQ .RPELQLHUHQYRQ'DWHQDXVPHKUHUHQ7DEHOOHQ ,QKDOWGLHVHU)ROLH (UNOlUHQ6LHGLHXQWHU VFKLHGOLFKHQ9HUIDKUHQ]XP .RPELQLHUHQYRQ'DWHQDXV ]ZHLRGHUPHKUHUHQ7DEHO OHQRGHU5HVXOWVHWV (LQIKUXQJLQ9HUNQSIXQJHQ 9HUZHQGHQYRQLQQHUHQ9HUNQSIXQJHQ (LQVWLHJ 9HUZHQGHQYRQlXHUHQ9HUNQSIXQJHQ 9HUZHQGHQYRQ&5266-2,16 9HUNQSIHQYRQPHKUDOV]ZHL7DEHOOHQ 9HUNQSIHQHLQHU7DEHOOHPLWVLFKVHOEVW 'DWHQDXV]ZHLRGHU PHKUHUHQ7DEHOOHQN|QQHQ DXFKGDQQNRPELQLHUW ZHUGHQZHQQVLFKGLH 7DEHOOHQLQYHUVFKLHGHQHQ 'DWHQEDQNHQEHILQGHQ ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Bei einer Verknüpfung handelt es sich um eine Operation, mit der eine oder mehrere Tabellen abgefragt werden können, um ein Resultset zu erstellen, das Zeilen und Spalten der einzelnen Tabellen einschließt. Sie können Tabellen mit Hilfe beliebiger Ausdrücke verknüpfen, die auf einer oder mehreren Spalten beider Tabellen basieren. Wenn Tabellen verknüpft werden, vergleicht Microsoft® SQL Server™ 2000 Zeile für Zeile die Werte in den angegebenen Spalten. Anschließend werden die benutzerdefinierten Werte mit Hilfe der Vergleichsergebnisse in neuen Zeilen kombiniert. Man unterscheidet drei Verknüpfungstypen: Innere Verknüpfungen, äußere Verknüpfungen und CROSS JOINS (Kreuzverknüpfungen). Darüber hinaus können mehr als zwei Tabellen mit Hilfe einer Reihe von Verknüpfungen innerhalb einer SELECT-Anweisung miteinander verknüpft werden. Außerdem ist es möglich, eine Tabelle über eine Selbstverknüpfung mit sich selbst zu verknüpfen. 8QWHUULFKWVHLQKHLW9HUNQSIHQYRQPHKUHUHQ7DEHOOHQ (LQIKUXQJLQ9HUNQSIXQJHQ ,QKDOWGLHVHU)ROLH (UNOlUHQ6LHZLH9HUNQS IXQJHQLPSOHPHQWLHUW ZHUGHQ $XVZlKOHQEHVWLPPWHU6SDOWHQLQPHKUHUHQ7DEHOOHQ z (LQVWLHJ 7DEHOOHQZHUGHQYHUNQSIW XPHLQHLQ]HOQHV5HVXOWVHW ]XHUVWHOOHQGDV(OHPHQWH DXV]ZHLRGHUPHKUHUHQ 7DEHOOHQXPIDVVW z 'DV-2,16FKOVVHOZRUWJLEWDQGDVV7DEHOOHQYHUNQSIW VLQGXQGDXIZHOFKH:HLVHVLHYHUNQSIWZHUGHQ 'DV216FKOVVHOZRUWJLEWGLH9HUNQSIXQJVEHGLQJXQJHQ DQ $EIUDJHQ]ZHLHURGHUPHKUHUHU7DEHOOHQXPHLQ 5HVXOWVHW ]XHUVWHOOHQ z z 9HUZHQGHQ YRQ3ULPlU XQG)UHPGVFKOVVHOQ DOV 9HUNQSIXQJVEHGLQJXQJHQ 9HUZHQGHQ6LH]XP9HUNQSIHQYRQ7DEHOOHQGLH6SDOWHQ GLHLQGHQDQJHJHEHQHQ7DEHOOHQEHUHLQVWLPPHQ ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Tabellen werden verknüpft, um ein einzelnes Resultset zu erstellen, das Zeilen und Spalten aus zwei oder mehreren Tabellen einschließt. 7HLOV\QWD[ 0HWKRGLVFKHU+LQZHLV =LHKHQ6LHGLH64/6HUYHU 2QOLQHGRNXPHQWDWLRQKHUDQ XPGLHYROOVWlQGLJH 6(/(&7$QZHLVXQJ]X ]HLJHQXQGGLH9HUNQSIXQ JHQKHUYRU]XKHEHQ SELECT column_name [, column_name …] FROM {<table_source>} [,...n] <join_type> ::= [ INNER | { { LEFT | RIGHT | FULL } [OUTER] } ] [ <join_hint> ] JOIN <joined_table> ::= <table_source> <join_type> <table_source> ON <search_condition> | <table_source> CROSS JOIN <table_source> | <joined_table> $XVZlKOHQEHVWLPPWHU6SDOWHQLQPHKUHUHQ7DEHOOHQ Eine Verknüpfung ermöglicht es Ihnen, Spalten aus mehreren Tabellen auszuwählen, indem Sie die FROM-Klausel der SELECT-Anweisung erweitern. In der FROM-Klausel werden zwei zusätzliche Schlüsselwörter eingeschlossen: JOIN und ON. Das JOIN-Schlüsselwort gibt an, welche Tabellen verknüpft werden sollen und auf welche Weise sie verknüpft werden. Das ON-Schlüsselwort gibt an, welche Spalten in den Tabellen übereinstimmen. 8QWHUULFKWVHLQKHLW9HUNQSIHQYRQPHKUHUHQ7DEHOOHQ $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 9HUNQSIXQJHQZHUGHQ PHLVWIUHLQIDFKHXQG ]XVDPPHQJHVHW]WH3ULPlU XQG)UHPGVFKOVVHO GXUFKJHIKUW9HUNQS IXQJHQN|QQHQDEHUDXFK IUDQGHUH6SDOWHQGXUFK JHIKUWZHUGHQ Geben Sie möglichst immer die Verknüpfungsbedingung auf der Grundlage der Primär- und Fremdschlüssel an, Sie können gegebenenfalls aber auch eine beliebige andere Spalte verwenden.. Um eine Datenerweiterung zu vermeiden, müssen Sie beim Verknüpfen von Tabellen in der ON-Klausel auf den vollständigen Schlüssel verweisen, wenn eine der Tabellen einen zusammengesetzten Primärschlüssel aufweist. Verknüpfen Sie im Allgemeinen alle Spalten, in denen eine Zeile eindeutig definiert wird, um eine Datenerweiterung zu verhindern. Verwenden Sie zum Verknüpfen von Tabellen die Spalten, die in den angegebenen Tabellen übereinstimmen. Die Spalten sollten über den gleichen oder über kompatible Datentypen verfügen. Verweisen Sie auf einen Tabellennamen, wenn die Spaltennamen der verknüpften Tabellen übereinstimmen. Kennzeichnen Sie jeden Spaltennamen mit Hilfe des Formats Tabellenname.Spaltenname. Begrenzen Sie möglichst die Anzahl der Tabellen in einer Verknüpfung. Je größer die Anzahl der verknüpften Tabellen ist, desto länger kann die Verarbeitung der Abfrage in SQL Server dauern. In einer einzigen SELECT-Anweisung können Sie eine oder mehrere Tabellen verknüpfen. 8QWHUULFKWVHLQKHLW9HUNQSIHQYRQPHKUHUHQ7DEHOOHQ 9HUZHQGHQYRQLQQHUHQ9HUNQSIXQJHQ 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 9HUNQSIXQJHQXQGIKUHQ 6LHLKUH)XQNWLRQVZHLVHYRU buyers (LQVWLHJ sales buyer_name buyer_name buyer_id buyer_id Adam 11 AdamBarr Barr Sean Chai 22 Sean Chai Eva Corets 33 Eva Corets Erin 44 ErinO’Melia O’Melia 0LWLQQHUHQ9HUNQSIXQJHQ N|QQHQ7DEHOOHQNRPELQLHUW ZHUGHQLQGHQHQ:HUWHLQ YHUJOLFKHQHQ6SDOWHQEHU HLQVWLPPHQ Beispiel Beispiel 11 buyer_id prod_id buyer_id prod_id 11 22 11 33 44 11 33 55 44 Ergebnis 22 qty qty 15 15 55 37 37 11 11 1003 1003 buyer_name buyer_name buyer_id buyer_id qty qty Adam Barr 1 15 Adam Barr 1 15 Adam 11 55 AdamBarr Barr Erin 44 37 ErinO’Melia O’Melia 37 Eva EvaCorets Corets Erin ErinO’Melia O’Melia 33 44 11 11 1003 1003 ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Mit inneren Verknüpfungen werden Tabellen kombiniert, indem Werte in Spalten verglichen werden, die in beiden Tabellen vorkommen. SQL Server gibt nur Zeilen zurück, die den Verknüpfungsbedingungen entsprechen. $QPHUNXQJ Bei den Beispielen in dieser Unterrichtseinheit wurde die joindbDatenbank zugrunde gelegt. Diese Datenbank wurde speziell zum Erläutern der verschiedenen Verknüpfungstypen erstellt. Die joindb-Datenbank ist auf der Kursteilnehmer-CD enthalten. 0HWKRGLVFKHU+LQZHLV 'LH%HLVSLHOHDXIGHQ)ROLHQ LQGLHVHU8QWHUULFKWVHLQKHLW VWDPPHQDXVGHUMRLQGE 'DWHQEDQN'LHVH'DWHQ EDQNZXUGHVSH]LHOO]XP (UOlXWHUQGHUYHUVFKLHGHQHQ 9HUNQSIXQJVW\SHQHUVWHOOW 'LHMRLQGE'DWHQEDQNLVW DXIGHU.XUVWHLOQHKPHU&' HQWKDOWHQ :HLVHQ6LHGDUDXIKLQGDVV 64/6HUYHUNHLQHVSH]LHOOH 5HLKHQIROJHLP5HVXOWVHW JHZlKUOHLVWHWHVVHLGHQQ GLHVZLUGGXUFKHLQH 25'(5%<.ODXVHO DQJHJHEHQ *UQGHIUGLH9HUZHQGXQJYRQLQQHUHQ9HUNQSIXQJHQ Mit inneren Verknüpfungen können Daten aus zwei separaten Tabellen abgerufen und in einem Resultset kombiniert werden. Wenn Sie innere Verknüpfungen verwenden, beachten Sie folgende Aspekte und Richtlinien: Bei inneren Verknüpfungen handelt es sich um das Standardverfahren von SQL Server. Die INNER JOIN-Klausel kann als JOIN abgekürzt werden. Geben Sie an, welche Spalten im Resultset angezeigt werden sollen, indem Sie die gekennzeichneten Spaltennamen in der Auswahlliste einschließen. Schließen Sie eine WHERE-Klausel ein, um die im Resultset zurückgegebenen Zeilen zu beschränken. Verwenden Sie keinen NULL-Wert als Verknüpfungsbedingung, da NULLWerte nicht als übereinstimmend ausgewertet werden. $QPHUNXQJ SQL Server gewährleistet keine spezielle Reihenfolge im Resultset, es sei denn dies wird durch eine ORDER BY-Klausel angegeben. 8QWHUULFKWVHLQKHLW9HUNQSIHQYRQPHKUHUHQ7DEHOOHQ %HLVSLHO 0HWKRGLVFKHU+LQZHLV :HLVHQ6LHGDUDXIKLQGDVV DXIGLHEX\HUBLG6SDOWH MHGHU7DEHOOHLQGHU $XVZDKOOLVWHYHUZLHVHQ ZHUGHQNDQQ (UJHEQLV %HLVSLHO (UJHEQLV In diesem Beispiel werden die Werte buyer_name, buyer_id und qty für die Käufer zurückgegeben, die Produkte gekauft haben. Käufer, die keine Produkte gekauft haben, sind im Resultset nicht eingeschlossen. Käufer, die mehr als ein Produkt gekauft haben, werden für jeden Kauf gesondert aufgeführt. Die buyer_id-Spalte jeder Tabelle kann in der Auswahlliste angegeben werden. 86(MRLQGE 6(/(&7EX\HUBQDPH6DOHVEX\HUBLGTW\ )520EX\HUV ,11(5-2,1VDOHV 21%X\HUVEX\HUBLG 6DOHVEX\HUBLG *2 EX\HUBQDPH EX\HUBLG TW\ $GDP%DUU $GDP%DUU (ULQ2 0HOLD (YD&RUHWV (ULQ2 0HOLD URZVDIIHFWHG In diesem Beispiel werden die Namen von Produkten und die Namen der Unternehmen, die die Produkte vertreiben, zurückgegeben. Produkte ohne aufgeführte Lieferanten und Lieferanten ohne aktuelle Produkte sind im Resultset nicht eingeschlossen. 86(1RUWKZLQG 6(/(&73URGXFW1DPH&RPSDQ\1DPH )520SURGXFWV ,11(5-2,1VXSSOLHUV 21SURGXFWVVXSSOLHULG VXSSOLHUVVXSSOLHULG *2 3URGXFW1DPH &RPSDQ\1DPH &KDL &KDQJ $QLVHHG6\UXS &KHI$QWRQ V&DMXQ6HDVRQLQJ URZVDIIHFWHG %HLVSLHO ([RWLF/LTXLGV ([RWLF/LTXLGV ([RWLF/LTXLGV 1HZ2UOHDQV&DMXQ'HOLJKWV In diesem Beispiel werden die Namen von Kunden zurückgegeben, die nach dem 01.01.1998 Aufträge erteilt haben. Beachten Sie, dass eine WHEREKlausel verwendet wird, um die im Resultset zurückgegebene Anzahl der Zeilen einzuschränken. 86(1RUWKZLQG 6(/(&7',67,1&7FRPSDQ\QDPHRUGHUGDWH )520RUGHUV,11(5-2,1FXVWRPHUV 21RUGHUVFXVWRPHULG FXVWRPHUVFXVWRPHULG :+(5(RUGHUGDWH! *2 8QWHUULFKWVHLQKHLW9HUNQSIHQYRQPHKUHUHQ7DEHOOHQ (UJHEQLV %HLVSLHO 0HWKRGLVFKHU+LQZHLV ,QGLHVHP%HLVSLHOZLUGGLH OLEUDU\'DWHQEDQNYHUZHQ GHWGDGLH1RUWKZLQG 'DWHQEDQNQLFKWEHU]ZHL 7DEHOOHQPLW]XVDPPHQJH VHW]WHQ3ULPlUVFKOVVHOQ YHUIJWGLHVLFKDXIHLQDQGHU EH]LHKHQ (UJHEQLV FRPSDQ\QDPH RUGHUGDWH $OIUHGV)XWWHUNLVWH $OIUHGV)XWWHUNLVWH $OIUHGV)XWWHUNLVWH $QD7UXMLOOR(PSDUHGDGRV\KHODGRV URZVDIIHFWHG In diesem Beispiel werden die Titelnummern aller aktuell ausgeliehenen Bücher sowie die Mitgliedsnummern der ausleihenden Personen aus den Tabellen copy und loan der library-Datenbank zurückgegeben. Die Tabellen copy und loan enthalten einen zusammengesetzten Primärschlüssel, der aus den Spalten isbn und copy_no besteht. Beim Verknüpfen dieser Tabellen müssen Sie beide Spalten als Verknüpfungsbedingungen angeben, da diese eine bestimmte Ausgabe eines Buches eindeutig identifizieren. 86(OLEUDU\ 6(/(&7FRS\WLWOHBQRORDQPHPEHUBQR )520FRS\ ,11(5-2,1ORDQ 21FRS\LVEQ ORDQLVEQ $1'FRS\FRS\BQR ORDQFRS\BQR :+(5(FRS\RQBORDQ < *2 WLWOHBQR PHPEHUBQR URZVDIIHFWHG 8QWHUULFKWVHLQKHLW9HUNQSIHQYRQPHKUHUHQ7DEHOOHQ 9HUZHQGHQYRQlXHUHQ9HUNQSIXQJHQ 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 'HILQLHUHQ6LHlXHUH 9HUNQSIXQJHQXQGEH VFKUHLEHQ6LHGLHGUHL 7\SHQ (LQVWLHJ 0LW+LOIHYRQOLQNHQUHFKWHQ RGHUYROOVWlQGLJHQlXHUHQ 9HUNQSIXQJHQN|QQHQ =HLOHQGLHGHU9HUNQS IXQJVEHGLQJXQJQLFKW HQWVSUHFKHQLQHLQHP 5HVXOWVHWHLQJHVFKORVVHQ ZHUGHQ Beispiel Beispiel 11 buyers sales buyer_name buyer_id buyer_name buyer_id Adam 11 AdamBarr Barr Sean Chai 22 Sean Chai buyer_id buyer_id prod_id prod_id qty qty 11 22 15 15 11 33 55 44 11 37 37 Eva EvaCorets Corets Erin ErinO’Melia O’Melia 33 44 Ergebnis buyer_name buyer_name buyer_id buyer_id qty qty Adam Barr 11 15 15 Adam Barr Adam 11 55 AdamBarr Barr Erin 44 37 ErinO’Melia O’Melia 37 Eva 33 11 EvaCorets Corets 11 Erin ErinO’Melia O’Melia Sean SeanChai Chai 44 NULL NULL 33 44 55 22 11 11 1003 1003 1003 1003 NULL NULL ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** 0HWKRGLVFKHU+LQZHLV :HLVHQ6LHDXIGLH18// :HUWHIU6HDQ&KDLDXIGHU )ROLHKLQ)U=HLOHQGLHGHU 9HUNQSIXQJVEHGLQJXQJ QLFKWHQWVSUHFKHQZLUGLP 5HVXOWVHW18//DQJH]HLJW Mit linken oder rechten äußeren Verknüpfungen werden Zeilen aus zwei Tabellen kombiniert, die der Verknüpfungsbedingung entsprechen, sowie in der JOIN-Klausel angegebene Zeilen ohne Übereinstimmung aus der linken oder rechten Tabelle. Für Zeilen, die der Verknüpfungsbedingung nicht entsprechen, wird im Resultset NULL angezeigt. Mit vollständigen äußeren Verknüpfungen können auch alle Zeilen der verknüpften Tabellen angezeigt werden, unabhängig davon, ob in den Tabellen übereinstimmende Werte vorhanden sind. *UQGHIUGLH9HUZHQGXQJYRQOLQNHQRGHUUHFKWHQ lXHUHQ9HUNQSIXQJHQ 0HWKRGLVFKHU+LQZHLV 6WHOOHQ6LHIROJHQGH )UDJH:HOFKHbQGHUXQJHQ ZUGHQ6LHLQGHU%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/9HUNQS IXQJVV\QWD[ZREHL $16,B18//6DXI21IHVW JHOHJWLVW Verwenden Sie linke oder rechte äußere Verknüpfungen, wenn Sie neben den Daten, die der Verknüpfungsbedingung entsprechen, eine vollständige Liste der Daten benötigen, die in einer der verknüpften Tabellen gespeichert sind. Wenn Sie linke oder rechte äußere Verknüpfungen verwenden, beachten Sie folgende Aspekte und Richtlinien: Mit einer linken äußeren Verknüpfung können alle Zeilen der zuerst genannten Tabelle (der Tabelle auf der linken Seite des Ausdrucks) angezeigt werden. Wenn Sie die Reihenfolge umkehren, in der die Tabellen in der FROM-Klausel aufgelistet sind, erzielt die Anweisung das gleiche Ergebnis wie eine rechte äußere Verknüpfung. Mit einer rechten äußeren Verknüpfung können alle Zeilen der an zweiter Stelle genannten Tabelle (der Tabelle auf der rechten Seite des Ausdrucks) angezeigt werden. Wenn Sie die Reihenfolge umkehren, in der die Tabellen in der FROM-Klausel aufgelistet sind, erzielt die Anweisung das gleiche Ergebnis wie eine linke äußere Verknüpfung. Die LEFT OUTER JOIN- oder die RIGHT OUTER JOIN-Klausel können als LEFT JOIN oder RIGHT JOIN abgekürzt werden. %HLVSLHO (UJHEQLV 8QWHUULFKWVHLQKHLW9HUNQSIHQYRQPHKUHUHQ7DEHOOHQ In diesem Beispiel werden die Werte buyer_name, buyer_id und qty für die Käufer und deren Einkäufe zurückgegeben. Beachten Sie, dass die Käufer, die keine Produkte gekauft haben, im Resultset aufgelistet werden. In den Spalten buyer_id und qty werden jedoch NULL-Werte angezeigt. 86(MRLQGE 6(/(&7EX\HUBQDPHVDOHVEX\HUBLGTW\ )520EX\HUV /()7287(5-2,1VDOHV 21EX\HUVEX\HUBLG VDOHVEX\HUBLG *2 EX\HUBQDPH EX\HUBLG TW\ $GDP%DUU $GDP%DUU (ULQ2 0HOLD (YD&RUHWV (ULQ2 0HOLD 6HDQ&KDL URZVDIIHFWHG 18// 18// $QPHUNXQJ Die Sortierreihenfolge des Resultsets kann unterschiedlich sein, da die ORDER BY-Klausel im Beispiel nicht verwendet wurde. %HLVSLHO (UJHEQLV In diesem Beispiel werden alle Kunden mit zugehörigem Auftragsdatum angezeigt. Mit Hilfe einer linken äußeren Verknüpfung wird eine Zeile für jeden Kunden abgerufen. Hat der Kunde mehrere Aufträge erteilt, werden weitere Zeilen abgerufen. In der orderdate-Spalte wird im Resultset NULL für Kunden zurückgegeben, die keinen Auftrag erteilt haben. Beachten Sie die NULL-Einträge für die Kunden FISSA und Paris Spécialités. 86(1RUWKZLQG 6(/(&7FRPSDQ\QDPHFXVWRPHUVFXVWRPHULGRUGHUGDWH )520FXVWRPHUV /()7287(5-2,1RUGHUV 21FXVWRPHUVFXVWRPHULG RUGHUVFXVWRPHULG *2 FRPSDQ\QDPH FXVWRPHULG RUGHUGDWH 9LQVHWDOFRROV&KHYDOLHU 7RPV6SH]LDOLWlWHQ +DQDUL&DUQHV 9LFWXDLOOHVHQVWRFN ),66$)DEULFD,QWHU6DOLFKLFKDV6$ 3DULVVSHFLDOLWLHV URZVDIIHFWHG 9,1,7 72063 +$1$5 9,&7( ),66$ 3$5,6 18// 18// 8QWHUULFKWVHLQKHLW9HUNQSIHQYRQPHKUHUHQ7DEHOOHQ 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 6SDOWHQLQGHQYHUNQSIWHQ 7DEHOOHQDQJH]HLJWZHUGHQ buyers buyer_id buyer_id buyer_name buyer_name 11 Adam AdamBarr Barr 22 33 44 Sean SeanChai Chai Eva EvaCorets Corets Erin ErinO’Melia O’Melia Beispiel Beispiel 11 sales Ergebnis buyer_id buyer_idprod_id prod_id qty qty 11 22 15 15 11 33 55 buyer_name qty buyer_name qty Adam 15 AdamBarr Barr 15 Adam 55 AdamBarr Barr 44 33 44 11 55 22 37 37 11 11 1003 1003 Adam AdamBarr Barr Adam AdamBarr Barr 37 37 11 11 Adam AdamBarr Barr Sean SeanChai Chai Sean SeanChai Chai 1003 1003 15 15 55 Sean SeanChai Chai Sean SeanChai Chai 37 37 11 11 Sean SeanChai Chai Eva EvaCorets Corets ...... 1003 1003 15 15 ...... ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** 0HWKRGLVFKHU+LQZHLV :HLVHQ6LHGDUDXIKLQGDVV GDV216FKOVVHOZRUWXQG GLH]XJHRUGQHWH6SDOWHQOLVWH QLFKWLQGHU6(/(&7$Q ZHLVXQJYHUZHQGHWZHUGHQ GD&5266-2,16DOOHP|J OLFKHQ=HLOHQNRPELQDWLRQHQ MHGHUDQJHJHEHQHQ7DEHOOH ]XUFNJHEHQ 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. *UQGHIUGLH9HUZHQGXQJYRQ&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 8QWHUULFKWVHLQKHLW9HUNQSIHQYRQPHKUHUHQ7DEHOOHQ (UJHEQLV %HLVSLHO 0HWKRGLVFKHU+LQZHLV )KUHQ6LHGLH$EIUDJHDXV XQGHUNOlUHQ6LHGDVVLQ GLHVHP%HLVSLHODOOH 0|JOLFKNHLWHQDXIJHOLVWHW ZHUGHQGLH/LHIHUDQWHQIU GHQ9HUVDQGLKUHU3URGXNWH ]XU9HUIJXQJVWHKHQ (UJHEQLV EX\HUBQDPH TW\ $GDP%DUU $GDP%DUU $GDP%DUU $GDP%DUU $GDP%DUU 6HDQ&KDL 6HDQ&KDL URZVDIIHFWHG In diesem Beispiel wird ein CROSS JOIN zwischen den Tabellen shippers und suppliers angezeigt, mit dem alle Möglichkeiten aufgelistet werden können, die Lieferanten für den Versand ihrer Produkte zur Verfügung stehen. Bei Verwendung eines CROSS JOINS werden alle möglichen Zeilenkombinationen zwischen diesen beiden Tabellen angezeigt. Die Tabelle shippers enthält 3 Zeilen, während die Tabelle suppliers aus 29 Zeilen besteht. Das Resultset enthält 87 Zeilen. 86(1RUWKZLQG 6(/(&7VXSSOLHUVFRPSDQ\QDPHVKLSSHUVFRPSDQ\QDPH )520VXSSOLHUV &5266-2,1VKLSSHUV *2 FRPSDQ\QDPH FRPSDQ\QDPH $X[MR\HX[HFFOpVLDVWLTXHV %LJIRRW%UHZHULHV &RRSHUDWLYDGH4XHVRV /DV&DEUDV (VFDUJRWV1RXYHDX[ $X[MR\HX[HFFOpVLDVWLTXHV %LJIRRW%UHZHULHV &RRSHUDWLYDGH4XHVRV /DV&DEUDV (VFDUJRWV1RXYHDX[ $X[MR\HX[HFFOpVLDVWLTXHV %LJIRRW%UHZHULHV &RRSHUDWLYDGH4XHVRV /DV&DEUDV (VFDUJRWV1RXYHDX[ URZVDIIHFWHG 6SHHG\([SUHVV 6SHHG\([SUHVV 6SHHG\([SUHVV 6SHHG\([SUHVV 8QLWHG3DFNDJH 8QLWHG3DFNDJH 8QLWHG3DFNDJH 8QLWHG3DFNDJH )HGHUDO6KLSSLQJ )HGHUDO6KLSSLQJ )HGHUDO6KLSSLQJ )HGHUDO6KLSSLQJ 8QWHUULFKWVHLQKHLW9HUNQSIHQYRQPHKUHUHQ7DEHOOHQ 9HUNQSIHQYRQPHKUDOV]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 YHUNQSIWZHUGHQN|QQHQ (LQVWLHJ %LVKHUZXUGHQLPPHUQXU ]ZHL7DEHOOHQPLWHLQDQGHU YHUNQSIW(VLVWMHGRFK P|JOLFKPHKUDOV]ZHL 7DEHOOHQPLWHLQDQGHU]X YHUNQSIHQ 44 Erin ErinO’Melia O’Melia 44 22 Ergebnis buyer_name buyer_name Erin ErinO’Melia O’Melia Adam AdamBarr Barr Erin ErinO’Melia O’Melia Adam AdamBarr Barr Eva EvaCorets Corets 55 22 11 11 1003 1003 Beispiel Beispiel 11 produce prod_id prod_id prod_name prod_name 11 Apples Apples 22 Pears Pears 33 Oranges Oranges 44 55 Bananas Bananas Peaches Peaches prod_name prod_name qty qty Apples 37 Apples 37 Pears 15 Pears 15 Pears 1003 Pears 1003 Oranges 55 Oranges Peaches Peaches 11 11 ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** 0HWKRGLVFKHU+LQZHLV =XQlFKVWZHUGHQGLH7D EHOOHQEX\HUVXQGVDOHV PLWHLQDQGHUYHUNQSIW'D QDFKHUIROJWGLH9HUNQS IXQJGHU7DEHOOHQVDOHVXQG SURGXFH %HWRQHQ6LHGDVVMHGH 7DEHOOHDXIGLHLQHLQHU 9HUNQSIXQJVRSHUDWLRQ YHUZLHVHQZLUGEHUHLQH JHPHLQVDPH6SDOWHPLW HLQHUDQGHUHQ7DEHOOH YHUNQSIWZHUGHQNDQQ %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. *UQGHIUGDV9HUNQSIHQYRQPHKUDOV]ZHL7DEHOOHQ Über Mehrfachverknüpfungen können verbundene Daten aus mehreren Tabellen abgerufen werden. Beachten Sie beim Verknüpfen von mehr als zwei Tabellen folgende Aspekte und Richtlinien: Es werden eine oder mehrere Tabellen benötigt, die Fremdschlüsselbeziehungen zu jeder Tabelle enthalten, die verknüpft werden soll. Die ON-Klausel sollte auf jede Spalte verweisen, die Teil eines zusammengesetzten Schlüssels ist. Schließen Sie eine WHERE-Klausel ein, um die Anzahl der zurückgegebenen Zeilen einzuschränken. In diesem Beispiel werden die Spalten buyer_name, prod_name und qty aus den Tabellen buyers, sales und produce zurückgegeben. Die buyer_id-Spalte ist sowohl in der buyers-Tabelle als auch in der sales-Tabelle vorhanden und wird verwendet, um die beiden Tabellen zu verknüpfen. Die prod_id-Spalte ist sowohl in der sales-Tabelle als auch in der produce-Tabelle enthalten. Die Spalte wird verwendet, um die produce-Tabelle mit dem Ergebnis der Verknüpfung zwischen den Tabellen buyers und sales zu verknüpfen. (UJHEQLV 8QWHUULFKWVHLQKHLW9HUNQSIHQYRQPHKUHUHQ7DEHOOHQ 86(MRLQGE 6(/(&7EX\HUBQDPHSURGBQDPHTW\ )520EX\HUV ,11(5-2,1VDOHV 21%X\HUVEX\HUBLG 6DOHVEX\HUBLG ,11(5-2,1SURGXFH 216DOHVSURGBLG 3URGXFHSURGBLG *2 EX\HUBQDPH SURGBQDPH TW\ (ULQ2 0HOLD $GDP%DUU (ULQ2 0HOLD $GDP%DUU (YD&RUHWV URZVDIIHFWHG %HLVSLHO $SSOHV 3HDUV 3HDUV 2UDQJHV 3HDFKHV In diesem Beispiel werden Daten aus den Tabellen orders und products angezeigt, wobei die order details-Tabelle als Bindeglied verwendet wird. Wenn Sie z. B. eine Liste der täglich bestellten Produkte benötigen, sind hierzu Informationen aus den Tabellen orders und products erforderlich. Ein Auftrag kann aus zahlreichen Produkten bestehen, und für ein Produkt können viele Aufträge erteilt werden. Um Informationen aus den beiden Tabellen orders und products abzufragen, können Sie eine innere Verknüpfung über die order details-Tabelle verwenden. Obwohl keine Spalten aus der order details-Tabelle abgerufen werden, muss diese Tabelle jedoch als Teil der inneren Verknüpfung eingeschlossen werden, um die orders-Tabelle in Beziehung zur products-Tabelle zu setzen. In diesem Beispiel ist die orderid-Spalte sowohl in der orders-Tabelle als auch in der order details-Tabelle vorhanden. Die Tabellen order details und products enthalten beide die productid-Spalte. (UJHEQLV 86(1RUWKZLQG 6(/(&7RUGHUGDWHSURGXFWQDPH )520RUGHUV$62 ,11(5-2,1>RUGHUGHWDLOV@$62' 212RUGHULG 2'RUGHULG ,11(5-2,1SURGXFWV$63 212'SURGXFWLG 3SURGXFWLG :+(5(RUGHUGDWH RUGHUGDWH SURGXFWQDPH URZVDIIHFWHG -DFN V1HZ(QJODQG&ODP&KRZGHU 0DQMLPXS'ULHG$SSOHV /RXLVLDQD)LHU\+RW3HSSHU6DXFH *XVWDI V.QDNHEURG 5DYLROL$QJHOR /RXLVLDQD)LHU\+RW3HSSHU6DXFH 8QWHUULFKWVHLQKHLW9HUNQSIHQYRQPHKUHUHQ7DEHOOHQ 9HUNQSIHQHLQHU7DEHOOHPLWVLFKVHOEVW 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 YHUNQSIXQJ (LQVWLHJ 9HUNQSIXQJHQZHUGHQ ]ZDULQGHQPHLVWHQ)lOOHQ ]XP.RPELQLHUHQPHKUHUHU 7DEHOOHQYHUZHQGHWHLQH 7DEHOOHNDQQMHGRFKDXFK EHUHLQH6HOEVWYHUNQS IXQJPLWVLFKVHOEVW YHUNQSIWZHUGHQ sales a Beispiel Beispiel 33 sales b buyer_id buyer_id prod_id prod_id qty qty 11 22 15 15 11 33 55 44 33 11 55 37 37 11 11 44 22 1003 1003 buyer_id buyer_id prod_id prod_id qty qty 11 22 15 15 11 33 55 44 33 11 55 37 37 11 11 44 22 1003 1003 Ergebnis buyer1 prod_id buyer2 buyer1 prod_id buyer2 44 22 11 ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** 0HWKRGLVFKHU+LQZHLV 'DV%HLVSLHODXIGHU)ROLH ]HLJWGDVJHZQVFKWH(U JHEQLVZHQQHLQH7DEHOOH PLWVLFKVHOEVWYHUNQSIW ZLUG=LHKHQ6LHGLH %HLVSLHOUHLKHLP$UEHLWVEXFK IU.XUVWHLOQHKPHUKHUDQ XP]XHUOlXWHUQZLHHLQH 7DEHOOHPLWVLFKVHOEVW YHUNQSIWZLUG 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. *UQGHIUGLH9HUZHQGXQJYRQ6HOEVWYHUNQSIXQJHQ Selbstverknüpfungen werden zwar nur selten in einer normalisierten Datenbank verwendet, mit ihrer Hilfe kann jedoch die Anzahl der Abfragen reduziert werden, die beim Vergleichen von Werten aus Spalten in verschiedenen Zeilen derselben Tabelle ausgeführt werden. Beachten Sie folgende Richtlinien für Selbstverknüpfungen: Sie müssen Tabellenaliasnamen für den Verweis auf zwei Kopien der Tabelle angeben. Denken Sie daran, dass sich die Tabellenaliasnamen von den Spaltenaliasnamen unterscheiden. Bei Tabellenaliasnamen folgt der Alias auf den Tabellennamen. Beim Erstellen von Selbstverknüpfungen stimmt jede Zeile mit sich selbst überein, und Paare werden wiederholt, was zu doppelten Zeilen führt. Verwenden Sie eine WHERE-Klausel, um die doppelten Zeilen zu löschen. 8QWHUULFKWVHLQKHLW9HUNQSIHQYRQPHKUHUHQ7DEHOOHQ %HLVSLHO 0HWKRGLVFKHU+LQZHLV :HLVHQ6LHDXIGLH'XSOL NDWHKLQEHLGHQHQGLH=HL OHQPLWVLFKVHOEVWEHUHLQ VWLPPHQ=HLOHXQG 9HUZHQGHQ6LHHLQH :+(5(.ODXVHOPLWGHP 8QJOHLFK2SHUDWRU!XP GLHVHQ'XSOLNDWVW\S]X O|VFKHQ (UJHEQLV 0HWKRGLVFKHU+LQZHLV :HLVHQ6LHGDUDXIKLQGDVV LQGHQ%HLVSLHOHQGRSSHOWH =HLOHQEHLGHQHQHVVLFK XP6SLHJHOELOGHUGHUMHZHLOV DQGHUHQ=HLOHKDQGHOWQLFKW JHO|VFKWZHUGHQ (UJHEQLV In diesem Beispiel wird eine Liste aller Käufer angezeigt, die die gleichen Produkte gekauft haben. Beachten Sie, dass buyer1 in der ersten und dritten Zeile des Resultsets mit sich selbst übereinstimmt. In der vierten und siebten Zeile stimmt buyer4 mit sich selbst überein. Die zweite und sechste Zeile spiegeln sich gegenseitig wider. 86(MRLQGE 6(/(&7DEX\HUBLG$6EX\HUDSURGBLGEEX\HUBLG$6EX\HU )520VDOHV$6D ,11(5-2,1VDOHV$6E 21$SURGBLG %SURGBLG *2 EX\HU SURGBLG EX\HU URZVDIIHFWHG %HLVSLHO In diesem Beispiel wird eine Liste von Käufern angezeigt, die alle die gleichen Produkte gekauft haben. Dabei werden jedoch doppelte Zeilen gelöscht, wie z. B. die mit sich selbst übereinstimmenden Zeilen für buyer1 und buyer4. Vergleichen Sie die Resultsets der Beispiele 1 und 2. Beachten Sie, dass die doppelten Zeilen gelöscht werden, indem eine WHERE-Klausel mit dem Ungleich-Operator (<>) verwendet wird. Doppelte Zeilen, die Spiegelbilder der jeweils anderen Zeile darstellen, werden im Resultset jedoch weiterhin zurückgegeben. 86(MRLQGE 6(/(&7DEX\HUBLG$6EX\HUDSURGBLGEEX\HUBLG$6EX\HU )520VDOHV$6D ,11(5-2,1VDOHV$6E 21DSURGBLG ESURGBLG :+(5(DEX\HUBLG!EEX\HUBLG *2 EX\HU SURGBLG EX\HU URZVDIIHFWHG 8QWHUULFKWVHLQKHLW9HUNQSIHQYRQPHKUHUHQ7DEHOOHQ %HLVSLHO In diesem Beispiel wird eine Liste von Käufern angezeigt, die die gleichen Produkte gekauft haben. 0HWKRGLVFKHU+LQZHLV :HLVHQ6LHGDUDXIKLQGDVV GLH'XSOLNDWHLQ%HLVSLHO EHL9HUZHQGXQJGHU :+(5(.ODXVHOPLWGHQ 2SHUDWRUHQ*U|HUDOV! XQG.OHLQHUDOVJHO|VFKW ZHUGHQ (UJHEQLV Beachten Sie, dass alle doppelten Zeilen gelöscht werden, wenn die WHEREKlausel den Operator Größer als (>) einschließt. 86(MRLQGE 6(/(&7DEX\HUBLG$6EX\HUDSURGBLGEEX\HUBLG$6EX\HU )520VDOHV$6D ,11(5-2,1VDOHV$6E 21DSURGBLG ESURGBLG :+(5(DEX\HUBLG!EEX\HUBLG *2 EX\HU SURGBLG EX\HU URZVDIIHFWHG %HLVSLHO In diesem Beispiel werden Paare von Angestellten angezeigt, deren Berufsbezeichnung übereinstimmt. Wenn die WHERE-Klausel den Operator Kleiner als (<) einschließt, werden Zeilen, die mit sich selbst übereinstimmen, sowie doppelte Zeilen gelöscht. (UJHEQLV HPSOR\HHLG QDPH 86(1RUWKZLQG 6(/(&7DHPSOR\HHLG/()7DODVWQDPH$6QDPH /()7DWLWOH$6WLWOH EHPSOR\HHLG/()7EODVWQDPH$6QDPH /()7EWLWOH$6WLWOH )520HPSOR\HHV$6D ,11(5-2,1HPSOR\HHV$6E 21D7LWOH E7LWOH :+(5(DHPSOR\HHLGEHPSOR\HHLG *2 WLWOH HPSOR\HHLG QDPH WLWOH 'DYROLR 'DYROLR 'DYROLR 'DYROLR 'DYROLR /HYHUOLQJ /HYHUOLQJ /HYHUOLQJ /HYHUOLQJ 3HDFRFN 3HDFRFN 3HDFRFN 6X\DPD 6X\DPD .LQJ URZVDIIHFWHG 6DOHV5HSU 6DOHV5HSU 6DOHV5HSU 6DOHV5HSU 6DOHV5HSU 6DOHV5HSU 6DOHV5HSU 6DOHV5HSU 6DOHV5HSU 6DOHV5HSU 6DOHV5HSU 6DOHV5HSU 6DOHV5HSU 6DOHV5HSU 6DOHV5HSU /HYHUOLQJ 3HDFRFN 6X\DPD .LQJ 'RGVZRUWK 3HDFRFN 6X\DPD .LQJ 'RGVZRUWK 6X\DPD .LQJ 'RGVZRUWK .LQJ 'RGVZRUWK 'RGVZRUWK 6DOHV5HSU 6DOHV5HSU 6DOHV5HSU 6DOHV5HSU 6DOHV5HSU 6DOHV5HSU 6DOHV5HSU 6DOHV5HSU 6DOHV5HSU 6DOHV5HSU 6DOHV5HSU 6DOHV5HSU 6DOHV5HSU 6DOHV5HSU 6DOHV5HSU 8QWHUULFKWVHLQKHLW9HUNQSIHQYRQPHKUHUHQ7DEHOOHQ .RPELQLHUHQPHKUHUHU5HVXOWVHWV ,QKDOWGLHVHU)ROLH (UNOlUHQ6LH=ZHFNXQG )XQNWLRQGHV81,21 2SHUDWRUV 9HUZHQGHQGHV81,212SHUDWRUVXPHLQ HLQ]HOQHV 5HVXOWVHW DXVPHKUHUHQ$EIUDJHQ]XHUVWHOOHQ (LQVWLHJ -HGHGHU$EIUDJHQEHQ|WLJW z 'HQJOHLFKHQ'DWHQW\SHQ z 'LHJOHLFKH6SDOWHQDQ]DKO z 'LHJOHLFKH6SDOWHQUHLKHQIROJHLQGHU$XVZDKOOLVWH 0LW+LOIHGHV81,21 2SHUDWRUVN|QQHQGLH (UJHEQLVVHYRQ]ZHLRGHU PHKUHUHQ6(/(&7 $QZHLVXQJHQLQHLQHP HLQ]LJHQ5HVXOWVHW NRPELQLHUWZHUGHQ 86(1RUWKZLQG 86(1RUWKZLQG 6(/(&7 6(/(&7 ILUVWQDPH ODVWQDPH ILUVWQDPH ODVWQDPH $6QDPH $6QDPH FLW\SRVWDOFRGH FLW\SRVWDOFRGH )520HPSOR\HHV )520HPSOR\HHV 81,21 81,21 6(/(&7FRPSDQ\QDPHFLW\SRVWDOFRGH 6(/(&7FRPSDQ\QDPHFLW\SRVWDOFRGH )520FXVWRPHUV )520FXVWRPHUV *2 *2 ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Der UNION-Operator kombiniert die Ergebnisse von zwei oder mehreren SELECT-Anweisungen in einem einzigen Resultset. Verwenden Sie den UNION-Operator, wenn sich die abzurufenden Daten an verschiedenen Stellen befinden und auf die Daten nicht über eine einzelne Abfrage zugegriffen werden kann. Wenn Sie den UNION-Operator verwenden, beachten Sie folgende Aspekte und Richtlinien: .HUQSXQNW :HQQ6LHGHQ81,21 2SHUDWRUYHUZHQGHQ PVVHQGLH7DEHOOHQDXI GLHYHUZLHVHQZLUGEHUGLH JOHLFKHQ'DWHQW\SHQGLH JOHLFKH6SDOWHQDQ]DKOXQG GLHJOHLFKH6SDOWHQUHLKHQ IROJHLQGHU$XVZDKOOLVWH MHGHU$EIUDJHYHUIJHQ In SQL Server müssen die Tabellen, auf die verwiesen wird, über die gleichen Datentypen, die gleiche Spaltenanzahl und die gleiche Spaltenreihenfolge in der Auswahlliste jeder Abfrage verfügen. SQL Server entfernt doppelte Zeilen im Resultset. Wird jedoch die ALLOption verwendet, werden alle Zeilen (einschließlich der Duplikate) im Resultset eingeschlossen. In der ersten SELECT-Anweisung müssen die Spaltennamen angegeben werden. Wenn Sie neue Spaltenüberschriften für das Resultset definieren möchten, müssen Sie die Spaltenaliasnamen daher in der ersten SELECTAnweisung erstellen. Wenn das gesamte Resultset in einer bestimmten Reihenfolge zurückgegeben werden soll, müssen Sie eine Sortierreihenfolge angeben, indem Sie eine ORDER BY-Klausel am Ende der letzten Anweisung einschließen, die durch den UNION-Operator beeinflusst wird. Andernfalls werden die Daten im Resultset möglicherweise nicht in der gewünschten Reihenfolge zurückgegeben. Unter Umständen lässt sich eine bessere Leistung erzielen, wenn Sie eine komplexe Abfrage in mehrere SELECT-Anweisungen aufspalten und diese anschließend mit dem UNION-Operator kombinieren. 8QWHUULFKWVHLQKHLW9HUNQSIHQYRQPHKUHUHQ7DEHOOHQ 6\QWD[ select_Anweisung UNION [ALL] select_Anweisung %HLVSLHO In diesem Beispiel werden zwei Resultsets kombiniert. Das erste Resultset gibt den Namen, die Stadt und die Postleitzahl für jeden Kunden aus der customersTabelle zurück. Das zweite Resultset gibt den Namen, die Stadt und die Postleitzahl für jeden Angestellten aus der employees-Tabelle zurück. Wenn Sie den UNION-Operator zum Kombinieren dieser Resultsets verwenden, beachten Sie, dass der Spaltenaliasname der ersten Auswahlliste zurückgegeben wird. 0HWKRGLVFKHU+LQZHLV )KUHQ6LHGLHVHV%HLVSLHO PLW64/4XHU\$QDO\]HU YRU (UJHEQLV 86(1RUWKZLQG 6(/(&7ILUVWQDPH ODVWQDPH$6QDPHFLW\SRVWDOFRGH )520HPSOR\HHV 81,21 6(/(&7FRPSDQ\QDPHFLW\SRVWDOFRGH )520FXVWRPHUV *2 QDPH FLW\ SRVWDOFRGH $OIUHGV)XWWHUNLVWH $QD7UXMLOOR(PSDUHGDGRV\KHODGRV $QWRQLR0RUHQR7DTXHUtD $URXQGWKH+RUQ % V%HYHUDJHV $QGUHZ)XOOHU 5REHUW.LQJ -DQHW/HYHUOLQJ $QQH'RGVZRUWK URZVDIIHFWHG 0HWKRGLVFKHU+LQZHLV 6WHOOHQ6LHIROJHQGH )UDJH:DUXPZHUGHQLP 5HVXOWVHWGLH.XQGHQYRU GHQ$QJHVWHOOWHQDXIJHOLVWHW XQGQLFKWXPJHNHKUWZLH GLHVGHU6\QWD[]XIROJHGHU )DOOVHLQPVVWH" $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 8QWHUULFKWVHLQKHLW9HUNQSIHQYRQPHKUHUHQ7DEHOOHQ (PSIRKOHQH0HWKRGHQ ,QKDOWGLHVHU)ROLH /LVWHQ6LHGLHHPSIRKOHQHQ 0HWKRGHQ]XP$EUXIHQXQG bQGHUQYRQ'DWHQDXI 9HUNQSIHQ6LH7DEHOOHQPLW3ULPlU 9HUNQSIHQ6LH7DEHOOHQPLW3ULPlU XQG)UHPGVFKOVVHOQ XQG)UHPGVFKOVVHOQ (LQVWLHJ 'LHIROJHQGHQHPSIRKOHQHQ 0HWKRGHQKHOIHQ,KQHQEHLP $XVIKUHQHUZHLWHUWHU $EIUDJHQ 9HUZHLVHQ6LHDXIDOOH6SDOWHQHLQHV]XVDPPHQJHVHW]WHQ3ULPlU 9HUZHLVHQ6LHDXIDOOH6SDOWHQHLQHV]XVDPPHQJHVHW]WHQ3ULPlU VFKOVVHOVLQGHU21.ODXVHOZHQQGLH%H]LHKXQJ]ZLVFKHQ VFKOVVHOVLQGHU21.ODXVHOZHQQGLH%H]LHKXQJ]ZLVFKHQ 7DEHOOHQEHUHLQHQ]XVDPPHQJHVHW]WHQ6FKOVVHOKHUJHVWHOOWZLUG 7DEHOOHQEHUHLQHQ]XVDPPHQJHVHW]WHQ6FKOVVHOKHUJHVWHOOWZLUG %HJUHQ]HQ6LHGLH$Q]DKOYRQ7DEHOOHQLQHLQHU9HUNQSIXQJ %HJUHQ]HQ6LHGLH$Q]DKOYRQ7DEHOOHQLQHLQHU9HUNQSIXQJ ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Die nachfolgend aufgeführten empfohlenen Methoden sollen Ihnen beim Ausführen von Abfragen helfen. Verknüpfen Sie Tabellen mit Primär- und Fremdschlüsseln. Verweisen Sie auf alle Spalten eines zusammengesetzten Primärschlüssels in der ON-Klausel, wenn die Beziehung zwischen Tabellen über einen zusammengesetzten Schlüssel hergestellt wird. Begrenzen Sie die Anzahl von Tabellen in einer Verknüpfung. Je größer die Anzahl der verknüpften Tabellen ist, desto länger braucht SQL Server zum Verarbeiten der Abfrage. Zusätzliche Informationen zu den folgenden Themen erhalten Sie in der SQL Server-Onlinedokumentation. Thema Suchbegriff Arbeiten mit Verknüpfungen „Grundlegende Informationen zu Verknüpfungen“ „Verwenden mehrerer Tabellen“ 8QWHUULFKWVHLQKHLW9HUNQSIHQYRQPHKUHUHQ7DEHOOHQ hEXQJVHLQKHLW$$EIUDJHQPHKUHUHU7DEHOOHQ ,QKDOWGLHVHU)ROLH *HEHQ6LHHLQH(LQIKUXQJ LQGLHhEXQJVHLQKHLW (LQVWLHJ ,QGLHVHQhEXQJVHLQKHLW IKUHQ6LHYHUVFKLHGHQH $UWHQYRQ9HUNQSIXQJHQ GXUFKXP'DWHQDXV PHKUHUHQ7DEHOOHQ]X NRPELQLHUHQ ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** (UOlXWHUQ6LHGLH/HUQ]LHOH GHUhEXQJVHLQKHLW /HUQ]LHOH Am Ende dieser Übungseinheit werden Sie in der Lage sein, die folgenden Aufgaben auszuführen: Verknüpfen von Tabellen mit Hilfe verschiedener Verknüpfungstypen. Kombinieren von Resultsets mit dem UNION-Operator. 9RUDXVVHW]XQJHQ Um diese Übungseinheit zu bearbeiten, benötigen Sie Folgendes: Die Antwortdateien für diese Übungseinheit, die sich in C:\Moc\2316B \Labfiles\L05\Answers befinden. Die Installation der library-Datenbank. (LQULFKWHQGHUhEXQJVHLQKHLW Nicht erforderlich. :HLWHUH,QIRUPDWLRQHQ Wenn Sie Hilfe bei der Ausführung von Dateien benötigen, suchen Sie in der Hilfe von SQL Query Analyzer nach „Ausführen einer Abfrage“. Daneben sind die folgenden Informationsquellen verfügbar: Das library-Datenbankschema. Die Microsoft SQL Server-Onlinedokumentation. 8QWHUULFKWVHLQKHLW9HUNQSIHQYRQPHKUHUHQ7DEHOOHQ 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=HLWIUGLHhEXQJVHLQKHLW0LQXWHQ 8QWHUULFKWVHLQKHLW9HUNQSIHQYRQPHKUHUHQ7DEHOOHQ hEXQJ 9HUNQSIHQYRQ7DEHOOHQ In dieser Übung werden Sie Abfragen erstellen und ausführen, die Tabellen in der library-Datenbank miteinander verknüpfen. C:\Moc\2316B\Labfiles\L05\Answers enthält vollständige Skripts für diese Übung. Ç So erstellen Sie eine Mailingliste mit Hilfe einer Verknüpfung In diesem Verfahren erstellen Sie eine Mailingliste mit den Bibliotheksmitgliedern, die vollständige Namens- und Adressdaten der Mitglieder enthält. Answer_Mailing.sql ist ein vollständiges Skript für dieses Verfahren. 1. Melden Sie sich an der Schulungsdomäne nwtraders mit Hilfe der Informationen in der folgenden Tabelle an. Option Wert Benutzername SQLAdminx (wobei x die Ihrem Computernamen zugewiesene Nummer ist, wie in der Schulungsraumdomäne nwtraders.msft festgelegt) Kennwort password 2. Öffnen Sie SQL Query Analyzer, und melden Sie sich, wenn Sie dazu aufgefordert werden, mittels Microsoft Windows®-Authentifizierung am (lokalen) Server an. Sie verfügen über die Berechtigung, sich bei SQL Server anzumelden und SQL Server zu verwalten, da Sie als SQLAdminx angemeldet sind, und SQLAdminx ein Mitglied der lokalen Windows 2000-Gruppe Administratoren ist. Alle Mitglieder dieser Gruppe werden automatisch der SQL Server-Rolle sysadmin zugeordnet. 3. Klicken Sie in der Liste DB auf library. 4. Erstellen Sie eine Abfrage für die Tabellen member und adult, die die Werte firstname, middleinitial, lastname, street, city, state und zip zurückgibt. Verketten Sie die Spalten firstname, middleinitial und lastname zu einer Zeichenfolge und legen Sie für die Spalte den Aliasnamen name fest. 86(OLEUDU\ 6(/(&7ILUVWQDPH PLGGOHLQLWLDO ODVWQDPH$6QDPH VWUHHWFLW\VWDWH]LS )520PHPEHU ,11(5-2,1DGXOW 21PHPEHUPHPEHUBQR DGXOWPHPEHUBQR *2 5. Führen Sie die Abfrage aus, um zu überprüfen, ob die gewünschten Ergebnisse zurückgegeben werden. 8QWHUULFKWVHLQKHLW9HUNQSIHQYRQPHKUHUHQ7DEHOOHQ (UJHEQLV Das Ergebnis ähnelt dem folgenden Teil eines Resultsets. QDPH VWUHHW $P\$$QGHUVRQ %RZHU\(VWDWHV %ULDQ$$QGHUVRQ 'RJZRRG'ULYH 'DQLHO$$QGHUVRQ )LU6WUHHW (YD$$QGHUVRQ 7KH+LJKODQGV *DU\$$QGHUVRQ -DPHV5RDG URZVDIIHFWHG FLW\ VWDWH ]LS 0RQWJRPHU\ 6DFUDPHQWR :DVKLQJWRQ $WODQWD 6SULQJILHOG $/ &$ '& *$ ,/ Ç So verknüpfen Sie mehrere Tabellen und sortieren die Ergebnisse In diesem Verfahren erstellen Sie zunächst eine Abfrage, die Sie dann für die Tabellen title, item und copy ausführen. Die Abfrage gibt die Spalten isbn, copy_no, on_loan, title, translation und cover sowie Werte für Zeilen der copy-Tabelle mit der ISBN-Nummer 1, 500 oder 1000 zurück. Sortieren Sie die Ergebnisse nach der isbn-Spalte. Answer_Serveral.sql ist ein vollständiges Skript für dieses Verfahren. 1. Erstellen Sie die Auswahlliste der Abfrage. Kennzeichnen Sie den Namen jeder Spalte mit einem Tabellenaliasnamen, der aus mindestens zwei Zeichen besteht (z. B. ti.title_no für title.title_no). 2. Schreiben Sie eine FROM-Klausel, die eine innere Verknüpfung zwischen den Tabellen title und copy in der Spalte title_no erstellt. Richten Sie die in der Auswahlliste verwendeten Tabellenaliasnamen in der FROM-Klausel ein. 3. Fügen Sie eine zweite INNER JOIN-Klausel hinzu, um eine Verknüpfung zwischen den Tabellen item und copy in der isbn-Spalte zu erstellen. 4. Erstellen Sie eine WHERE-Klausel, um die aus der copy-Tabelle abgerufenen Zeilen auf jene zu beschränken, deren ISBN-Nummer 1, 500 oder 1000 lautet. 5. Schreiben Sie die ORDER BY-Klausel, um das Ergebnis anhand der ISBN-Nummer zu sortieren. 6. Führen Sie das Skript aus. 86(OLEUDU\ 6(/(&7FRLVEQFRFRS\BQRFRRQBORDQ WLWLWOHLWWUDQVODWLRQLWFRYHU )520FRS\FR ,11(5-2,1WLWOH$6WL 21FRWLWOHBQR WLWLWOHBQR ,11(5-2,1LWHP$6LW 21FRLVEQ LWLVEQ :+(5(FRLVEQ,1 25'(5%<FRLVEQ *2 7. Führen Sie die Abfrage aus, um zu überprüfen, ob die gewünschten Ergebnisse zurückgegeben werden. 8QWHUULFKWVHLQKHLW9HUNQSIHQYRQPHKUHUHQ7DEHOOHQ (UJHEQLV LVEQ Das Ergebnis ähnelt dem folgenden Teil eines Resultsets. FRS\BQR URZVDIIHFWHG RQBORDQ WLWOH WUDQVODWLRQ FRYHU 1 1 1 1 /DVWRIWKH0RKLFDQV /DVWRIWKH0RKLFDQV /DVWRIWKH0RKLFDQV /DVWRIWKH0RKLFDQV $5$%,& $5$%,& $5$%,& $5$%,& +$5'%$&. +$5'%$&. +$5'%$&. +$5'%$&. Ç So verknüpfen Sie mehrere Tabellen mit Hilfe einer äußeren Verknüpfung In diesem Verfahren erstellen Sie eine Abfrage und führen sie aus, um für die Mitgliedsnummern 250, 341 und 1675 den vollständigen Namen des jeweiligen Mitglieds sowie die Mitgliedsnummer member_no in der member-Tabelle und die Werte für isbn und log_date in der reservation-Tabelle abrufen. Sortieren Sie die Ergebnisse nach member_no. Zeigen Sie die Daten für diese Mitglieder an, auch wenn sie keine Bücher reserviert haben. Answer_LeftOuter.sql ist ein vollständiges Skript für dieses Verfahren. 1. Erstellen Sie die Auswahlliste der Abfrage. a. Erstellen Sie die name-Spalte, indem Sie die Spalten lastname, firstname und middleinitial für jedes Mitglied verketten. b. Erstellen Sie die date-Spalte, indem Sie den Wert für log_date in den Datentyp char(8) konvertieren. 2. Schreiben Sie eine FROM-Klausel, die eine linke äußere Verknüpfung zwischen den Tabellen member und reservation in den member_noSpalten erstellt. 3. Erstellen Sie eine WHERE-Klausel, mit der die Mitgliedsnummern 250, 341 und 1675 aus der member-Tabelle abgerufen werden. 4. Schreiben Sie die ORDER BY-Klausel, um das Ergebnis nach den Mitgliedsnummern zu sortieren. 86(OLEUDU\ 6(/(&7PHPHPEHUBQR PHODVWQDPH PHILUVWQDPH PHPLGGOHLQLWLDO$6QDPH UHLVEQ &219(57FKDUUHORJBGDWH$6GDWH )520PHPEHU$6PH /()7287(5-2,1UHVHUYDWLRQ$6UH 21PHPHPEHUBQR UHPHPEHUBQR :+(5(PHPHPEHUBQR,1 25'(5%<PHPHPEHUBQR *2 8QWHUULFKWVHLQKHLW9HUNQSIHQYRQPHKUHUHQ7DEHOOHQ 5. Führen Sie die Abfrage aus, um zu überprüfen, ob die gewünschten Ergebnisse zurückgegeben werden. Welche Mitglieder haben keine Bücher reserviert? 250 und 1675 ____________________________________________________________ ____________________________________________________________ (UJHEQLV Das Ergebnis ähnelt dem folgenden Teil eines Resultsets. PHPEHUBQR QDPH +LJKWRZHU0LFKDHO$ 0DUWLQ%ULDQ$ 0DUWLQ%ULDQ$ 0DUWLQ%ULDQ$ 0DUWLQ%ULDQ$ /D%ULH-RVKXD% URZVDIIHFWHG LVEQ GDWH 18// 18// 18// 18// 8QWHUULFKWVHLQKHLW9HUNQSIHQYRQPHKUHUHQ7DEHOOHQ hEXQJ 9HUZHQGHQGHV81,212SHUDWRUV]XP.RPELQLHUHQYRQ5HVXOWVHWV In dieser Übung erstellen Sie ein einzelnes Resultset mit Hilfe des UNIONOperators, um die Ergebnisse von zwei ähnlichen SELECT-Anweisungen zu verketten. C:\Moc\2316B\Labfiles\L05\Answers enthält vollständige Skripts für diese Übung. Ç So ermitteln Sie, welche in Arizona lebenden Mitglieder mehr als zwei Kinder mit Leserausweisen haben In diesem Verfahren ermitteln Sie, welche in Arizona lebenden Mitglieder mehr als zwei Kinder mit Leserausweisen haben. Answer_Union1.sql ist ein vollständiges Skript für dieses Verfahren. 1. Schreiben Sie eine SELECT-Anweisung, die die Mitgliedsnummer member_no und die Anzahl von juvenile-Einträgen zurückgibt, die jedes Mitglied in einem berechneten Feld mit dem Namen numkids hat. Es sollen nur Einträge für Bibliotheksmitglieder zurückgegeben werden, die in Arizona leben und mehr als zwei Kinder haben. 86(OLEUDU\ 6(/(&7DPHPEHUBQR FRXQW$6QXPNLGV )520MXYHQLOH$6M ,11(5-2,1DGXOW$6D 21MDGXOWBPHPEHUBQR DPHPEHUBQR :+(5(DVWDWH $= *5283%<DPHPEHUBQR +$9,1*&2817! *2 2. Führen Sie die Abfrage aus, um zu überprüfen, ob die gewünschten Ergebnisse zurückgegeben werden. Notieren Sie die Anzahl der Zeilen, die zurückgegeben werden. 3. Löschen Sie die Abfrage nicht. Ç So ermitteln Sie, welche in California lebenden Mitglieder mehr als drei Kinder mit Leserausweisen haben In diesem Verfahren ermitteln Sie, welche in California lebenden Mitglieder mehr als drei Kinder mit Leserausweisen haben. Answer_Union2.sql ist ein vollständiges Skript für dieses Verfahren. 1. Drücken Sie STRG+N, und erstellen Sie ein neues Abfragefenster. 2. Kopieren Sie die Abfrage aus dem ersten Verfahren dieser Übung, und fügen Sie sie in das neue Abfragefenster ein. 8QWHUULFKWVHLQKHLW9HUNQSIHQYRQPHKUHUHQ7DEHOOHQ 3. Ändern Sie die Abfrage in Schritt 2 so, dass sie nur Einträge für Bibliotheksmitglieder zurückgibt, die in California leben und mehr als drei Kinder mit Leserausweisen haben. 86(OLEUDU\ 6(/(&7DPHPEHUBQR FRXQW$6QXPNLGV )520MXYHQLOH$6M ,11(5-2,1DGXOW$6D 21MDGXOWBPHPEHUBQR DPHPEHUBQR :+(5(DVWDWH &$ *5283%<DPHPEHUBQR +$9,1*&2817! *2 4. Führen Sie die Abfrage aus, um zu überprüfen, ob die gewünschten Ergebnisse zurückgegeben werden. Notieren Sie die Anzahl der Zeilen, die zurückgegeben werden. Ç So kombinieren Sie die Resultsets separater Abfragen In diesem Verfahren kombinieren Sie die Resultsets separater Abfragen. Answer_Union3.sql ist ein vollständiges Skript für dieses Verfahren. 1. Drücken Sie STRG+N, und erstellen Sie ein neues Abfragefenster. 2. Kopieren Sie die Abfrage aus dem ersten Verfahren dieser Übung, und fügen Sie sie in das neue Fenster ein. 3. Fügen Sie in einer neuen Zeile am Ende der Abfrage die UNIONAnweisung hinzu. 4. Kopieren Sie die Abfrage des zweiten Verfahrens dieser Übung, und fügen Sie sie in das neue Fenster ein, und zwar in die Zeile, die auf die in Schritt 3 dieses Verfahrens hinzugefügte UNION-Anweisung folgt. 86(OLEUDU\ 6(/(&7DPHPEHUBQR FRXQW$6QXPNLGV )520MXYHQLOH$6M ,11(5-2,1DGXOW$6D 21MDGXOWBPHPEHUBQR DPHPEHUBQR :+(5(DVWDWH $= *5283%<DPHPEHUBQR +$9,1*&2817! 81,21 6(/(&7DPHPEHUBQR FRXQW$6QXPNLGV )520MXYHQLOH$6M ,11(5-2,1DGXOW$6D 21MDGXOWBPHPEHUBQR DPHPEHUBQR :+(5(DVWDWH &$ *5283%<DPHPEHUBQR +$9,1*&2817! *2 8QWHUULFKWVHLQKHLW9HUNQSIHQYRQPHKUHUHQ7DEHOOHQ 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. ____________________________________________________________ ____________________________________________________________ 8QWHUULFKWVHLQKHLW9HUNQSIHQYRQPHKUHUHQ7DEHOOHQ /HUQ]LHONRQWUROOH ,QKDOWGLHVHU)ROLH 9HUWLHIHQ6LHGLH/HUQ]LHOH GLHVHU8QWHUULFKWVHLQKHLW LQGHP6LHGLH.HUQSXQNWH ZLHGHUKROHQ (LQVWLHJ 'LH)UDJHQ]XU/HUQ]LHO NRQWUROOHEH]LHKHQVLFKDXI HLQLJHGHU6FKOVVHONRQ ]HSWHGLH,QKDOWGLHVHU 8QWHUULFKWVHLQKHLWVLQG 9HUZHQGHQYRQ $OLDVQDPHQ IU7DEHOOHQQDPHQ .RPELQLHUHQYRQ'DWHQDXVPHKUHUHQ7DEHOOHQ .RPELQLHUHQPHKUHUHU 5HVXOWVHWV ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Die Krankenkasse Duluth Mutual Life verfügt über eine Datenbank, in der Informationen zu Ärzten und deren Patienten nachverfolgt werden. Diese Datenbank enthält die folgenden Tabellen: Ärztetabelle Spalte Datentyp und Einschränkungen doc_id char(9), PRIMARY KEY fname char(20) lname char(25) specialty char(25) phone char(10) Patiententabelle Spalte Datentyp und Einschränkungen pat_id char(9), PRIMARY KEY fname char(20) lname char(25) insurance_company char(25) phone char(10) Notfalltabelle Spalte Datentyp und Einschränkungen admission_date datetime, PRIMARY KEY (zusammengesetzt) pat_id char(9), PRIMARY KEY (zusammengesetzt), FOREIGN KEY to patient.pat_id doc_id char(9), FOREIGN KEY to doctor.doc_id diagnosis varchar(150) 8QWHUULFKWVHLQKHLW9HUNQSIHQYRQPHKUHUHQ7DEHOOHQ 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 +LQZHLVHIUGHQ.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 6WUDWHJLHIUGLH8QWHUULFKWVHLQKHLW 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 hEHUVLFKWEHUGLH7KHPHQ GLHVHU8QWHUULFKWVHLQKHLW (LQIKUXQJLQ8QWHUDEIUDJHQ (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 (LQIKUXQJLQ8QWHUDEIUDJHQ ,QKDOWGLHVHU)ROLH (UOlXWHUQ6LHZDQQ8QWHU DEIUDJHQYHUZHQGHWZHUGHQ VROOWHQ (LQVWLHJ 8QWHUDEIUDJHQEHVWHKHQDXV HLQHU5HLKHYRQ6(/(&7 $QZHLVXQJHQ,QYLHOHQ )lOOHQN|QQHQ6LH8QWHU DEIUDJHQDOV9HUNQSIXQJHQ QHXVFKUHLEHQ *UQGHIUGLH9HUZHQGXQJYRQ8QWHUDEIUDJHQ z z %HDQWZRUWHQ YRQ$EIUDJHQGLHYRQGHQ (UJHEQLVVHQ HLQHUDQGHUHQ $EIUDJH DEKlQJHQ *UQGHIUGLH9HUZHQGXQJYRQ9HUNQSIXQJHQDQVWHOOH YRQ8QWHUDEIUDJHQ z 8QWHUJOLHGHUQ NRPSOH[HU $EIUDJHQ LQHLQH 5HLKH ORJLVFKHU 6FKULWWH 64/6HUYHUIKUW9HUNQSIXQJHQHIIL]LHQWHUDXVDOV 8QWHUDEIUDJHQ 9HUZHQGXQJYRQ8QWHUDEIUDJHQ ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Bei einer Unterabfrage handelt es sich um eine SELECT-Anweisung, die in eine SELECT-, INSERT-, UPDATE- oder DELETE-Anweisung oder in eine andere Unterabfrage geschachtelt ist. In vielen Fällen können Sie Unterabfragen als Verknüpfungen neu schreiben und Unterabfragen anstelle von Ausdrücken verwenden. Bei einem Ausdruck handelt es sich um eine Kombination aus Bezeichnern, Werten und Operatoren, die Microsoft® SQL Server™ auswertet, um ein Ergebnis zu erhalten. *UQGHIUGLH9HUZHQGXQJYRQ8QWHUDEIUDJHQ 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. *UQGHIUGLH9HUZHQGXQJYRQ9HUNQSIXQJHQDQVWHOOH 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 DEIUDJHQEHUFNVLFKWLJW ZHUGHQVROOWHQ 9HUZHQGXQJYRQ8QWHUDEIUDJHQ Berücksichtigen Sie bei der Verwendung von Unterabfragen die folgenden Aspekte und Richtlinien: Unterabfragen müssen in Klammern eingeschlossen werden. Eine Unterabfrage kann anstelle eines Ausdrucks verwendet werden, vorausgesetzt ein Wert oder eine Liste von Werten wird zurückgegeben. Eine Unterabfrage, die ein mehrspaltiges Recordset zurückgibt, kann anstelle einer Tabelle oder zum Ausführen der gleichen Funktionen wie eine Verknüpfung verwendet werden. Unterabfragen können nicht dazu verwendet werden, um Spalten mit textoder image-Datentypen abzurufen. Unterabfragen können in Unterabfragen enthalten sein. Es ist eine Schachtelung bis zu 32 Ebenen möglich. Der Höchstwert hängt vom verfügbaren Arbeitsspeicher und der Komplexität anderer Ausdrücke in der Abfrage ab. Einzelne Abfragen unterstützen möglicherweise keine Schachtelung bis zu 32 Ebenen. 8QWHUULFKWVHLQKHLW$UEHLWHQPLW8QWHUDEIUDJHQ 9HUZHQGHQHLQHU8QWHUDEIUDJHDOVDEJHOHLWHWH7DEHOOH ,QKDOWGLHVHU)ROLH %HVFKUHLEHQ6LHZLHHLQH 8QWHUDEIUDJHDOVDEJHOHLWHWH 7DEHOOHYHUZHQGHWZLUG (LQVWLHJ 6LHHUVWHOOHQHLQHDEJH OHLWHWH7DEHOOHLQGHP6LHLQ HLQHU)520.ODXVHOHLQH 8QWHUDEIUDJHDQVWHOOHHLQHU 7DEHOOHYHUZHQGHQ 'LH8QWHUDEIUDJHLVWHLQ 5HFRUGVHW LQGHU$EIUDJHGDV ZLHHLQH7DEHOOHIXQNWLRQLHUW 'LH8QWHUDEIUDJHZLUGLQGHU)520.ODXVHODQVWHOOH HLQHU7DEHOOHYHUZHQGHW 'LH8QWHUDEIUDJHZLUGPLWGHP5HVWGHU$EIUDJH RSWLPLHUW 86(1RUWKZLQG 86(1RUWKZLQG 6(/(&77RUGHULG7FXVWRPHULG 6(/(&77RUGHULG7FXVWRPHULG )5206(/(&7RUGHULGFXVWRPHULG )5206(/(&7RUGHULGFXVWRPHULG )520RUGHUV )520RUGHUV $67 $67 *2 *2 ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Sie erstellen eine abgeleitete Tabelle, indem Sie in einer FROM-Klausel eine Unterabfrage anstelle einer Tabelle verwenden. Eine abgeleitete Tabelle ist eine besondere Verwendung einer Unterabfrage in einer FROM-Klausel, auf die ein Alias oder ein vom Benutzer angegebener Name verweist. Das Resultset der Unterabfrage in der FROM-Klausel bildet eine Tabelle, die von der äußeren SELECT-Anweisung verwendet wird. %HLVSLHO In diesem Beispiel wird eine Unterabfrage verwendet, um eine abgeleitete Tabelle im inneren Teil der Abfrage zu erstellen, die vom äußeren Teil abgefragt wird. Die abgeleitete Tabelle funktioniert wie die gesamte Abfrage, sie wird aber zu Illustrationszwecken getrennt. 86(1RUWKZLQG 6(/(&77RUGHULG7FXVWRPHULG )5206(/(&7RUGHULGFXVWRPHULG )520RUGHUV$67 *2 Wenn eine Unterabfrage als abgeleitete Tabelle verwendet wird, beachten Sie Folgendes: Die Unterabfrage ist ein Recordset in der Abfrage, das wie eine Tabelle funktioniert. Die Unterabfrage wird in der FROM-Klausel anstelle einer Tabelle verwendet. Die Unterabfrage wird mit dem Rest der Abfrage optimiert. 8QWHUULFKWVHLQKHLW$UEHLWHQPLW8QWHUDEIUDJHQ 9HUZHQGHQHLQHU8QWHUDEIUDJHDOV$XVGUXFN ,QKDOWGLHVHU)ROLH %HVFKUHLEHQ6LHZLHHLQH 8QWHUDEIUDJHDOV$XVGUXFN YHUZHQGHWZLUG 'LH8QWHUDEIUDJHZLUGZLHHLQ$XVGUXFNDXVJHZHUWHW XQGEHDUEHLWHW 'LH8QWHUDEIUDJHZLUGHLQPDOIUGLHJHVDPWH$EIUDJH DXVJHZHUWHW (LQVWLHJ 6LHN|QQHQHLQH8QWHU DEIUDJHLPPHUHUVHW]HQ ZHQQ6LHHLQHQ$XVGUXFNLQ 6(/(&783'$7( ,16(57XQG'(/(7( $QZHLVXQJHQYHUZHQGHQ 86(SXEV 86(SXEV 6(/(&7WLWOHSULFH 6(/(&7WLWOHSULFH 6(/(&7$9*SULFH)520WLWOHV$6DYHUDJH 6(/(&7$9*SULFH)520WLWOHV$6DYHUDJH SULFH6(/(&7$9*SULFH)520WLWOHV$6GLIIHUHQFH SULFH6(/(&7$9*SULFH)520WLWOHV$6GLIIHUHQFH )520WLWOHV )520WLWOHV :+(5(W\SH :+(5(W\SH SRSXODUBFRPS SRSXODUBFRPS *2 *2 ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** 0HWKRGLVFKHU+LQZHLV :HLVHQ6LHGDUDXIKLQGDVV 8QWHUDEIUDJHQGLHHLQH /LVWHYRQ:HUWHQ]XUFN JHEHQHLQHQ$XVGUXFNLQ HLQHU:+(5(.ODXVHO HUVHW]HQGLHGDV,1 6FKOVVHOZRUWDXIZHLVWRGHU LQGHU)520.ODXVHODOV DEJHOHLWHWH7DEHOOHYHU ZHQGHWZHUGHQN|QQHQ %HLVSLHO In Transact-SQL können Sie eine Unterabfrage immer ersetzen, wenn Sie einen Ausdruck verwenden. Die Unterabfrage muss einen skalaren Wert oder eine einzige Spaltenliste von Werten ergeben. Unterabfragen, die eine Liste von Werten zurückgeben, ersetzen einen Ausdruck in einer WHERE-Klausel, der das IN-Schlüsselwort enthält. Wenn eine Unterabfrage als Ausdruck verwendet wird, beachten Sie Folgendes: Die Unterabfrage wird wie ein Ausdruck ausgewertet und bearbeitet. Der Abfrageoptimierer wertet häufig einen Ausdruck anstelle einer Verknüpfung aus, die eine Verbindung zu einer Tabelle mit einer Zeile herstellt. Die Unterabfrage wird einmal für die gesamte Abfrage ausgewertet. In diesem Beispiel gibt die Abfrage den Preis eines beliebten Computerbuches, den Durchschnittspreis aller Bücher und die Differenz zwischen dem Preis des Buches und dem Durchschnittspreis aller Bücher zurück. 86(SXEV 6(/(&7WLWOHSULFH 6(/(&7$9*SULFH)520WLWOHV$6DYHUDJH SULFH6(/(&7$9*SULFH)520WLWOHV$6GLIIHUHQFH )520WLWOHV :+(5(W\SH SRSXODUBFRPS *2 8QWHUULFKWVHLQKHLW$UEHLWHQPLW8QWHUDEIUDJHQ 9HUZHQGHQHLQHU8QWHUDEIUDJH]XP.RUUHOLHUHQ YRQ'DWHQ ,QKDOWGLHVHU)ROLH %HVFKUHLEHQ6LHZLHHLQH 8QWHUDEIUDJH]XP.RUUHOLH UHQYRQ'DWHQYHUZHQGHW ZLUG (LQVWLHJ (LQHNRUUHOLHUWH8QWHUDE IUDJHNDQQDOVG\QDPLVFKHU $XVGUXFNYHUZHQGHW ZHUGHQGHUVLFKIUMHGH =HLOHHLQHUlXHUHQ$EIUDJH lQGHUW $XVZHUWHQHLQHUNRUUHOLHUWHQ8QWHUDEIUDJH ,PLWLHUHQHLQHU-2,1.ODXVHO ,PLWLHUHQHLQHU+$9,1*.ODXVHO ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Sie können eine korrelierte Unterabfrage als dynamischen Ausdruck verwenden, der sich für jede Zeile einer äußeren Abfrage ändert. Der Abfrageprozessor führt die Unterabfrage für jede Zeile in der äußeren Abfrage einzeln aus, dies wird wiederum als Ausdruck für die Zeile ausgewertet und an die äußere Abfrage übergeben. Die korrelierte Unterabfrage ist tatsächlich eine JOIN-Klausel zwischen der dynamisch ausgeführten Unterabfrage und der Zeile der äußeren Abfrage. Sie können normalerweise eine Abfrage auf verschiedene Arten neu schreiben und dennoch das gleiche Ergebnis erhalten. Korrelierte Unterabfragen untergliedern komplexe Abfragen in zwei oder mehr einfache, zusammenhängende Abfragen. 7LSS Sie können korrelierte Unterabfragen leicht erkennen. Eine Spalte einer Tabelle in der Unterabfrage wird mit einer Spalte einer Tabelle außerhalb der Unterabfrage verglichen. 8QWHUULFKWVHLQKHLW$UEHLWHQPLW8QWHUDEIUDJHQ $XVZHUWHQHLQHUNRUUHOLHUWHQ8QWHUDEIUDJH ,QKDOWGLHVHU)ROLH Die Dieäußere äußereAbfrage Abfrageübergibt übergibtdie die Spaltenwerte Spaltenwertean andie dieinnere innere Abfrage Abfrage (UOlXWHUQ6LHZLHNRUUHOLHUWH 8QWHUDEIUDJHQYHUDUEHLWHW ZHUGHQ Die Dieinnere innereAbfrage Abfrageverwendet verwendet diesen , um Wert diesenWert, Wert, umdie dieinnere innere Abfrage üllen erf Abfragezu zuerfü erfüllen 86(1RUWKZLQG 86(1RUWKZLQG 6(/(&7RUGHULGFXVWRPHULG 6(/(&7RUGHULGFXVWRPHULG )520RUGHUV$6RU )520RUGHUV$6RU :+(5(6(/(&7TXDQWLW\ :+(5(6(/(&7TXDQWLW\ )520>RUGHUGHWDLOV@$6RG )520>RUGHUGHWDLOV@$6RG :+(5(RURUGHULG :+(5(RURUGHULG RGRUGHULG RGRUGHULG $1'RGSURGXFWLG $1'RGSURGXFWLG *2 *2 (LQVWLHJ :HQQ6LHHLQHNRUUHOLHUWH 8QWHUDEIUDJHHUVWHOOHQ ZHUGHQGLHLQQHUHQ8QWHU DEIUDJHQZLHGHUKROWDXV JHZHUWHWHLQPDOIUMHGH =HLOHGHUlXHUHQ$EIUDJH Die Dieinnere innereAbfrage Abfragegibt gibteinen einen Wert ußere Abfrage Wertan andie dieääußere Abfrage zurü ück zur zurück Beispiel Beispiel 11 Dieser r die fü DieserVorgang Vorgangwird wirdfü für die nnächste ächste Zeile der ä u ß eren Zeile der äußeren Abfrage Abfragewiederholt wiederholt Zurück Zurückzu zuSchritt Schritt11 ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** 0HWKRGLVFKHU+LQZHLV 9HUJOHLFKHQ6LHNRUUHOLHUWH 8QWHUDEIUDJHQPLWJH VFKDFKWHOWHQ8QWHUDEIUDJHQ %HLVSLHO (UJHEQLV Wenn Sie eine korrelierte Unterabfrage erstellen, werden die inneren Unterabfragen wiederholt ausgewertet, einmal für jede Zeile der äußeren Abfrage: SQL Server führt die innere Abfrage für jede Zeile aus, die die äußere Abfrage auswählt. SQL Server vergleicht die Ergebnisse der Unterabfrage mit den Ergebnissen außerhalb der Unterabfrage. In diesem Beispiel wird eine Liste der Kunden zurückgegeben, die mehr als 20 Einheiten des Produkts mit der Nummer 23 bestellt haben. 86(1RUWKZLQG 6(/(&7RUGHULGFXVWRPHULG )520RUGHUV$6RU :+(5(6(/(&7TXDQWLW\ )520>RUGHUGHWDLOV@$6RG :+(5(RURUGHULG RGRUGHULG $1'RGSURGXFWLG *2 RUGHULG FXVWRPHULG URZVDIIHFWHG )5$1. :$1'. )5$1. (516+ &216+ 8QWHUULFKWVHLQKHLW$UEHLWHQPLW8QWHUDEIUDJHQ Korrelierte Unterabfragen geben einen einzelnen Wert oder eine Liste von Werten für jede Zeile zurück, die von der FROM-Klausel der äußeren Abfrage angegeben wird. In den folgenden Schritten wird beschrieben, wie die korrelierte Unterabfrage in Beispiel 1 ausgewertet wird: 1. Die äußere Abfrage übergibt einen Spaltenwert an die innere Abfrage. Der Spaltenwert, den die äußere Abfrage an die innere Abfrage übergibt, ist die orderid. Die äußere Abfrage übergibt die erste orderid in der orders-Tabelle an die innere Abfrage. 2. Die innere Abfrage verwendet die von der äußeren Abfrage übergebenen Werte. Jede orderid in der orders-Tabelle wird ausgewertet, um zu ermitteln, ob eine identische orderid in der order details-Tabelle vorhanden ist. Wenn die erste orderid mit einer orderid in der order details-Tabelle übereinstimmt und diese orderid das Produkt mit der Nummer 23 gekauft hat, dann gibt die innere Abfrage diese orderid an die äußere Abfrage zurück. 3. Die innere Abfrage gibt einen Wert an die äußere Abfrage zurück. Die WHERE-Klausel der äußeren Abfrage wertet die orderid, die das Produkt mit der Nummer 23 gekauft hat, weiter aus, um zu ermitteln, ob die Bestellmenge den Wert 20 überschreitet. 4. Dieser Vorgang wird für die nächste Zeile der äußeren Abfrage wiederholt. Die äußere Abfrage übergibt die zweite orderid in der orders-Tabelle an die innere Abfrage, und SQL Server wiederholt die Auswertung für diese Zeile. %HLVSLHO (UJHEQLV In diesem Beispiel wird eine Liste von Produkten und die für jedes Produkt in der order details-Tabelle jemals aufgegebene größte Bestellung zurückgegeben. Beachten Sie, dass diese korrelierte Unterabfrage auf die gleiche Tabelle verweist wie die äußere Abfrage. Dies wird vom Optimierer im Allgemeinen wie eine Selbstverknüpfung behandelt. 86(1RUWKZLQG 6(/(&7',67,1&7SURGXFWLGTXDQWLW\ )520>RUGHUGHWDLOV@$6RUG :+(5(TXDQWLW\ 6(/(&70$;TXDQWLW\ )520>RUGHUGHWDLOV@$6RUG :+(5(RUGSURGXFWLG RUGSURGXFWLG *2 SURGXFWLG TXDQWLW\ URZVDIIHFWHG 8QWHUULFKWVHLQKHLW$UEHLWHQPLW8QWHUDEIUDJHQ ,PLWLHUHQHLQHU-2,1.ODXVHO ,QKDOWGLHVHU)ROLH %HVFKUHLEHQ6LHZLHHLQH NRUUHOLHUWH$EIUDJH]XP ,PLWLHUHQHLQHU-2,1.ODXVHO YHUZHQGHWZLUG (LQVWLHJ 6LHN|QQHQHLQHNRUUHOLHUWH 8QWHUDEIUDJHYHUZHQGHQ XPGLHJOHLFKHQ(UJHEQLVVH ZLHPLWHLQHU-2,1.ODXVHO ]XHU]LHOHQ 0LWNRUUHOLHUWHQ8QWHUDEIUDJHQN|QQHQGLHJOHLFKHQ (UJHEQLVVHZLHPLWHLQHU-2,1.ODXVHO HU]LHOWZHUGHQ 'XUFK 9HUNQSIXQJHQNDQQ GHU $EIUDJHRSWLPLHUHU GLH HIIL]LHQWHVWH 0HWKRGH ]XP .RUUHOLHUHQ YRQ'DWHQ EHVWLPPHQ 86(SXEV 86(SXEV 6(/(&7',67,1&7WW\SH 6(/(&7',67,1&7WW\SH )520WLWOHV$6W )520WLWOHV$6W :+(5(WW\SH,1 :+(5(WW\SH,1 6(/(&7WW\SH 6(/(&7WW\SH )520WLWOHV$6W )520WLWOHV$6W :+(5(WSXEBLG!WSXEBLG :+(5(WSXEBLG!WSXEBLG *2 *2 Beispiel Beispiel 11 ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** 0HWKRGLVFKHU+LQZHLV :LFKWLJIUGDV9HUVWHKHQ GHU6\QWD[HLQHUNRUUHOLHUWHQ 8QWHUDEIUDJHVLQG.HQQW QLVVHLP9HUZHQGHQYRQ 7DEHOOHQDOLDVQDPHQ'LH 7DEHOOHQDOLDVQDPHQ]HLJHQ ,KQHQZHOFKH7DEHOOHQ NRUUHOLHUHQ %HLVSLHO (UJHEQLV Sie können eine korrelierte Unterabfrage verwenden, um die gleichen Ergebnisse wie mit einer JOIN-Klausel zu erzielen. Dazu kann z. B. das Auswählen von Daten aus einer Tabelle gehören, auf die in der äußeren Abfrage verwiesen wird. $QPHUNXQJ Sie können normalerweise korrelierte Unterabfragen als Verknüpfungen umschreiben. Durch das Verwenden von Verknüpfungen anstelle von korrelierten Unterabfragen kann der Abfrageoptimierer die effizienteste Methode zum Korrelieren von Daten bestimmen. In diesem Beispiel wird eine korrelierte Unterabfrage verwendet, um die Arten von Büchern zu ermitteln, die von mehreren Verlagen herausgegeben werden. Um Mehrdeutigkeit zu vermeiden, sind Aliasnamen erforderlich, um die beiden Rollen zu unterscheiden, in denen die titles-Tabelle angezeigt wird. 86(SXEV 6(/(&7',67,1&7WW\SH )520WLWOHV$6W :+(5(WW\SH,1 6(/(&7WW\SH )520WLWOHV$6W :+(5(WSXEBLG!WSXEBLG *2 7\SH EXVLQHVV SV\FKRORJ\ URZVDIIHFWHG 8QWHUULFKWVHLQKHLW$UEHLWHQPLW8QWHUDEIUDJHQ %HLVSLHO In diesem Beispiel wird das gleiche Ergebnis zurückgegeben wie in Beispiel 1, indem eine Selbstverknüpfung anstelle einer korrelierten Unterabfrage verwendet wird. 86(SXEV 6(/(&7',67,1&7WW\SH )520WLWOHV$6W ,11(5-2,1WLWOHV$6W 21WW\SH WW\SH :+(5(WSXEBLG!WSXEBLG *2 0HWKRGLVFKHU+LQZHLV 9HUZHQGHQ6LH64/4XHU\ $QDO\]HUXPEHLGH-2,1 %HLVSLHOHDXV]XIKUHQXQG ]HLJHQ6LHGLHXQWHUVFKLHG OLFKHQ$XVIKUXQJVSOlQH 8QWHUULFKWVHLQKHLW$UEHLWHQPLW8QWHUDEIUDJHQ ,PLWLHUHQHLQHU+$9,1*.ODXVHO ,QKDOWGLHVHU)ROLH %HVFKUHLEHQ6LHZLHHLQH +$9,1*.ODXVHOLPLWLHUW ZHUGHQNDQQ (LQVWLHJ 6LHN|QQHQHLQHNRUUHOLHUWH 8QWHUDEIUDJHYHUZHQGHQ XPGLHJOHLFKHQ(UJHEQLVVH ZLHGXUFKHLQH$EIUDJHPLW HLQHU+$9,1*.ODXVHO]X HU]LHOHQ 8QWHUDEIUDJHPLWGHPJOHLFKHQ(UJHEQLVZLHHLQH +$9,1*.ODXVHO Beispiel 86(SXEV Beispiel 11 86(SXEV 6(/(&7WW\SHWWLWOHWSULFH 6(/(&7WW\SHWWLWOHWSULFH )520WLWOHV$6W )520WLWOHV$6W :+(5(WSULFH!6(/(&7$9*WSULFH)520WLWOHV$6W :+(5(WSULFH!6(/(&7$9*WSULFH)520WLWOHV$6W :+(5(WW\SH :+(5(WW\SH WW\SH WW\SH *2 *2 9HUZHQGHQHLQHU+$9,1*.ODXVHORKQH8QWHUDEIUDJH 86(SXEV 86(SXEV 6(/(&7WW\SHWWLWOHWSULFH 6(/(&7WW\SHWWLWOHWSULFH )520WLWOHV$6W )520WLWOHV$6W ,11(5-2,1WLWOHV$6W21WW\SH ,11(5-2,1WLWOHV$6W21WW\SH WW\SH WW\SH *5283%<WW\SHWWLWOHWSULFH *5283%<WW\SHWWLWOHWSULFH +$9,1*WSULFH!$9*WSULFH +$9,1*WSULFH!$9*WSULFH *2 *2 Beispiel Beispiel 22 ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Sie können eine korrelierte Unterabfrage verwenden, um die gleichen Ergebnisse wie durch eine Abfrage mit einer HAVING-Klausel zu erzielen. %HLVSLHO 0HWKRGLVFKHU+LQZHLV 9HUZHQGHQ6LH64/4XHU\ $QDO\]HUXPEHLGH%HL VSLHOHDXV]XIKUHQXQGXP ]XEHUSUIHQREVLH]XP JOHLFKHQ(UJHEQLVIKUHQ In diesem Beispiel werden alle Titel ermittelt, deren Preis über dem Durchschnittspreis für Bücher der gleichen Art liegt. SQL Server wertet die Unterabfrage für jeden möglichen Wert von t1 aus und schließt die Zeile in die Ergebnisse ein, wenn der Wert in der price-Spalte der Zeile größer als der berechnete Durchschnittswert ist. Es ist nicht notwendig, die Spalten explizit nach der Art zu gruppieren, da die Zeilen, aus deren Werten der Durchschnittspreis berechnet wird, durch die WHERE-Klausel in der Unterabfrage beschränkt werden. 86(SXEV 6(/(&7WW\SHWWLWOHWSULFH )520WLWOHV$6W :+(5(WSULFH!6(/(&7$9*WSULFH )520WLWOHV$6W :+(5(WW\SH WW\SH *2 5HVXOWW\SH WLWOH %XVLQHVV %XVLQHVV PRGBFRRN SRSXODUBFRPS 3V\FKRORJ\ 3V\FKRORJ\ WUDGBFRRN URZVDIIHFWHG 7KH%XV\([HFXWLYH V'DWDEDVH*XLGH 6WUDLJKW7DON$ERXW&RPSXWHUV 6LOLFRQ9DOOH\*DVWURQRPLF7UHDWV %XW,V,W8VHU)ULHQGO\" &RPSXWHU3KRELF$1'1RQ3KRELF ,QGLYLGXDOV%HKDYLRU9DULDWLRQV 3URORQJHG'DWD'HSULYDWLRQ)RXU&DVH 6WXGLHV 2QLRQV/HHNVDQG*DUOLF&RRNLQJ 6HFUHWVRIWKH0HGLWHUUDQHDQ 8QWHUULFKWVHLQKHLW$UEHLWHQPLW8QWHUDEIUDJHQ %HLVSLHO In diesem Beispiel wird das gleiche Resultset wie in Beispiel 1 erzeugt, es wird aber eine Selbstverknüpfung mit der GROUP BY- und der HAVING-Klausel verwendet. 86(SXEV 6(/(&7WW\SHWWLWOHWSULFH )520WLWOHV$6W ,11(5-2,1WLWOHV$6W 21WW\SH WW\SH *5283%<WW\SHWWLWOHWSULFH +$9,1*WSULFH!$9*WSULFH *2 $QPHUNXQJ Sie können korrelierte Unterabfragen schreiben, die zum gleichen Ergebnis wie eine JOIN- oder HAVING-Klausel führen, aber der Abfrageprozessor implementiert sie möglicherweise nicht auf die gleiche Art. 8QWHUULFKWVHLQKHLW$UEHLWHQPLW8QWHUDEIUDJHQ 9HUZHQGHQGHU(;,676XQG127(;,676.ODXVHOQ ,QKDOWGLHVHU)ROLH (UOlXWHUQ6LHZLHGLH (;,676XQG127(;,676 2SHUDWRUHQ]XVDPPHQPLW NRUUHOLHUWHQ8QWHUDEIUDJHQ YHUZHQGHWZHUGHQ (LQVWLHJ 9HUZHQGHQPLWNRUUHOLHUWHQ8QWHUDEIUDJHQ %HVWLPPHQGHV9RUKDQGHQVHLQVYRQ'DWHQLQHLQHU /LVWHYRQ:HUWHQ 64/ 6HUYHU3UR]HVV z 0LWGHQ(;,676XQG127 (;,6762SHUDWRUHQN|QQHQ 6LHHUPLWWHOQRE'DWHQLQ HLQHU/LVWHYRQ:HUWHQ YRUKDQGHQVLQG z z 'LHlXHUH$EIUDJHEHUSUIWRE=HLOHQYRUKDQGHQVLQG 'LHLQQHUH$EIUDJHJLEW 758(RGHU )$/6(]XUFN (VZHUGHQNHLQH'DWHQ]XUFNJHJHEHQ Beispiel Beispiel 11 86(1RUWKZLQG 86(1RUWKZLQG 6(/(&7ODVWQDPHHPSOR\HHLG 6(/(&7ODVWQDPHHPSOR\HHLG )520HPSOR\HHV$6H )520HPSOR\HHV$6H :+(5((;,676 :+(5((;,676 6(/(&7)520RUGHUV 6(/(&7)520RUGHUV $6R $6R :+(5(HHPSOR\HHLG :+(5(HHPSOR\HHLG RHPSOR\HHLG RHPSOR\HHLG $1' $1' RRUGHUGDWH RRUGHUGDWH *2 *2 ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Mit den EXISTS- und NOT EXISTS-Operatoren können Sie ermitteln, ob Daten in einer Liste von Werten vorhanden sind. 9HUZHQGHQPLWNRUUHOLHUWHQ8QWHUDEIUDJHQ Verwenden Sie die EXISTS- und NOT EXISTS-Operatoren mit korrelierten Unterabfragen, um das Resultset einer äußeren Abfrage auf Zeilen zu beschränken, die die Unterabfrage erfüllen. Die EXISTS- und NOT EXISTSOperatoren geben in Abhängigkeit davon, ob für Unterabfragen Zeilen zurückgegeben werden, TRUE oder FALSE zurück. %HVWLPPHQGHV9RUKDQGHQVHLQVYRQ'DWHQLQHLQHU/LVWH YRQ:HUWHQ Wenn eine Unterabfrage mit dem EXISTS-Operator eingeleitet wird, testet SQL Server, ob Daten vorhanden sind, die die Unterabfrage erfüllen. Tatsächlich werden keine Zeilen abgerufen. SQL Server beendet das Abrufen von Zeilen, sobald bekannt ist, dass mindestens eine Zeile die WHERE-Bedingung in der Unterabfrage erfüllt. 64/6HUYHU3UR]HVV Wenn SQL Server Unterabfragen verarbeitet, die den EXISTS- oder NOT EXISTS-Operator verwenden, gilt Folgendes: Die äußere Abfrage überprüft, ob Zeilen vorhanden sind, die die Unterabfrage zurückgibt. Die Unterabfrage gibt in Abhängigkeit von der Bedingung der Abfrage TRUE oder FALSE zurück. Die Unterabfrage gibt keine Daten zurück. 8QWHUULFKWVHLQKHLW$UEHLWHQPLW8QWHUDEIUDJHQ 7HLOV\QWD[ WHERE [NOT] EXISTS (subquery) %HLVSLHO In diesem Beispiel wird eine korrelierte Unterabfrage mit einem EXISTSOperator in der WHERE-Klausel verwendet, um eine Liste der Angestellten zurückzugeben, die am 5.9.1997 Bestellungen entgegennahmen. 0HWKRGLVFKHU+LQZHLV )KUHQ6LHGLHEHLGHQ %HLVSLHOHDXVZREHL 67$7,67,&67,0(DXI21 IHVWJHOHJWLVWXPGLH9HU DUEHLWXQJV]HLW]XYHU JOHLFKHQ (UJHEQLV 86(1RUWKZLQG 6(/(&7ODVWQDPHHPSOR\HHLG )520HPSOR\HHV$6H :+(5((;,6766(/(&7)520RUGHUV$6R :+(5(HHPSOR\HHLG RHPSOR\HHLG $1'RRUGHUGDWH *2 ODVWQDPH HPSOR\HHLG 3HDFRFN .LQJ URZVDIIHFWHG %HLVSLHO (UJHEQLV In diesem Beispiel wird das gleiche Resultset wie in Beispiel 1 zurückgegeben und es wird gezeigt, dass Sie statt einer korrelierten Unterabfrage eine Verknüpfungsoperation verwenden können. Beachten Sie, dass für die Abfrage das DISTINCT-Schlüsselwort erforderlich ist, um eine einzige Zeile für jeden Angestellten zurückzugeben. 86(1RUWKZLQG 6(/(&7',67,1&7ODVWQDPHHHPSOR\HHLG )520RUGHUV$6R ,11(5-2,1HPSOR\HHV$6H 21RHPSOR\HHLG HHPSOR\HHLG :+(5(RRUGHUGDWH *2 ODVWQDPH HPSOR\HHLG 3HDFRFN .LQJ URZVDIIHFWHG 8QWHUULFKWVHLQKHLW$UEHLWHQPLW8QWHUDEIUDJHQ (PSIRKOHQH0HWKRGHQ ,QKDOWGLHVHU)ROLH /LVWHQ6LHGLHHPSIRKOHQHQ 0HWKRGHQ]XP$EUXIHQXQG bQGHUQYRQ'DWHQDXI 9HUZHQGHQ6LH8QWHUDEIUDJHQXPNRPSOH[H$EIUDJHQ 9HUZHQGHQ6LH8QWHUDEIUDJHQXPNRPSOH[H$EIUDJHQ ]XXQWHUJOLHGHUQ ]XXQWHUJOLHGHUQ (LQVWLHJ 'LHIROJHQGHQHPSIRKOHQHQ 0HWKRGHQKHOIHQ,KQHQEHLP $XVIKUHQHUZHLWHUWHU $EIUDJHQ 9HUZHQGHQ6LH 9HUZHQGHQ6LH 7DEHOOHQDOLDVQDPHQ 7DEHOOHQDOLDVQDPHQ IUNRUUHOLHUWH8QWHUDEIUDJHQ IUNRUUHOLHUWH8QWHUDEIUDJHQ 9HUZHQGHQ6LHGLH,16(576(/(&7$QZHLVXQJXP]XHLQHU 9HUZHQGHQ6LHGLH,16(576(/(&7$QZHLVXQJXP]XHLQHU YRUKDQGHQHQ7DEHOOHDXVDQGHUHQ4XHOOHQ=HLOHQKLQ]X]XIJHQ YRUKDQGHQHQ7DEHOOHDXVDQGHUHQ4XHOOHQ=HLOHQKLQ]X]XIJHQ 9HUZHQGHQ6LHP|JOLFKVWLPPHUGHQ(;,6762SHUDWRUDQVWHOOHGHV 9HUZHQGHQ6LHP|JOLFKVWLPPHUGHQ(;,6762SHUDWRUDQVWHOOHGHV ,12SHUDWRUV ,12SHUDWRUV ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Die folgenden empfohlenen Methoden sollen Ihnen beim Ausführen erweiterter Abfragen helfen: Verwenden Sie Unterabfragen, um komplexe Abfragen zu untergliedern. Sie können ein Problem mit einer einzigen Anweisung mit Hilfe von Unterabfragen lösen. Unterabfragen sind hilfreich, wenn die Abfrage von den Ergebnissen einer anderen Abfrage abhängt. Verwenden Sie Tabellenaliasnamen für korrelierte Unterabfragen. In SQL Server sind für den Verweis auf die mehrdeutigen Tabellennamen Aliasnamen erforderlich, um zwischen den inneren und äußeren Tabellen zu unterscheiden. Verwenden Sie die INSERT…SELECT-Anweisung, um zu einer vorhandenen Tabelle aus anderen Quellen Zeilen hinzuzufügen. Das Verwenden der INSERT…SELECT-Anweisung ist effizienter als das Schreiben mehrerer einzeiliger INSERT-Anweisungen. Verwenden Sie möglichst immer den EXISTS-Operator anstelle des INOperators, sodass nicht das vollständige Resultset der Unterabfrage abgerufen werden muss. Zusätzliche Informationen zu den folgenden Themen finden Sie in der SQL Server-Onlinedokumentation. Thema Suchbegriff Verwenden von Unterabfragen “Erstellen einer Teilabfrage” Korrelieren von Tabellen “Verwenden von Tabellenaliasnamen” “Erstellen von Tabellenaliasen” Verwenden einer Unterabfrage anstelle eines Ausdrucks “Unterabfragen anstelle von Ausdrücken” 8QWHUULFKWVHLQKHLW$UEHLWHQPLW8QWHUDEIUDJHQ hEXQJVHLQKHLW$$UEHLWHQPLW8QWHUDEIUDJHQ ,QKDOWGLHVHU)ROLH *HEHQ6LHHLQH(LQIKUXQJ LQGLHhEXQJVHLQKHLW (LQVWLHJ ,QGLHVHUhEXQJVHLQKHLW VFKUHLEHQ6LH8QWHUDE IUDJHQXQGIKUHQ8QWHUDE IUDJHQDXVGLHDOV$XV GUXFN9HUNQSIXQJXQG ]XP.RUUHOLHUHQYRQ'DWHQ YHUZHQGHWZHUGHQ ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** (UOlXWHUQ6LHGLH/HUQ]LHOH GHUhEXQJVHLQKHLW /HUQ]LHOH Am Ende dieser Übungseinheit werden Sie in der Lage sein, die folgenden Aufgaben auszuführen: Verwenden einer Unterabfrage als abgeleitete Tabelle. Verwenden einer Unterabfrage als Ausdruck. Verwenden einer Unterabfrage zum Korrelieren von Daten. 9RUDXVVHW]XQJHQ Um diese Übungseinheit zu bearbeiten, benötigen Sie Folgendes: Die Skriptdateien für diese Übungseinheit, die sich in C:\Moc\2316B\Labfiles\L06 befinden. Die Antwortdateien für diese Übungseinheit, die sich in C:\Moc\2316B\Labfiles\L06\Answers befinden. Die library-Datenbank muss installiert sein. (LQULFKWHQGHUhEXQJVHLQKHLW Nicht erforderlich. :HLWHUH,QIRUPDWLRQHQ Wenn Sie Hilfe bei der Ausführung von Dateien benötigen, suchen Sie in der Hilfe von SQL Query Analyzer nach „Ausführen einer Abfrage“. Daneben sind die folgenden Informationsquellen verfügbar: Das library-Datenbankschema. Die SQL Server-Onlinedokumentation. 8QWHUULFKWVHLQKHLW$UEHLWHQPLW8QWHUDEIUDJHQ 6]HQDULR Der Aufbau des Schulungsraumes soll die Organisation des weltweit agierenden Handelsunternehmens Northwind Traders widerspiegeln. Das Unternehmen hat den fiktiven Domänennamen ist nwtraders.msft. Der primäre DNS-Server für nwtraders.msft ist der Kursleitercomputer, der die Internetprotokolladresse (IP-Adresse) 192.168.x.200 besitzt (wobei x die zugewiesene Schulungsraumnummer ist). Der Name des Kursleitercomputers ist London. Die folgende Tabelle stellt den Benutzernamen, den Computernamen und die IP-Adresse für jeden Kursteilnehmercomputer in der fiktiven Domäne nwtraders.msft bereit. Suchen Sie den Benutzernamen Ihres Computers und notieren Sie ihn. Benutzername Computername IP-Adresse SQLAdmin1 Vancouver 192.168.x.1 SQLAdmin2 Denver 192.168.x.2 SQLAdmin3 Perth 192.168.x.3 SQLAdmin4 Brisbane 192.168.x.4 SQLAdmin5 Lisbon 192.168.x.5 SQLAdmin6 Bonn 192.168.x.6 SQLAdmin7 Lima 192.168.x.7 SQLAdmin8 Santiago 192.168.x.8 SQLAdmin9 Bangalore 192.168.x.9 SQLAdmin10 Singapore 192.168.x.10 SQLAdmin11 Casablanca 192.168.x.11 SQLAdmin12 Tunis 192.168.x.12 SQLAdmin13 Acapulco 192.168.x.13 SQLAdmin14 Miami 192.168.x.14 SQLAdmin15 Auckland 192.168.x.15 SQLAdmin16 Suva 192.168.x.16 SQLAdmin17 Stockholm 192.168.x.17 SQLAdmin18 Moscow 192.168.x.18 SQLAdmin19 Caracas 192.168.x.19 SQLAdmin20 Montevideo 192.168.x.20 SQLAdmin21 Manila 192.168.x.21 SQLAdmin22 Tokyo 192.168.x.22 SQLAdmin23 Khartoum 192.168.x.23 SQLAdmin24 Nairobi 192.168.x.24 9HUDQVFKODJWH=HLWIUGLHhEXQJVHLQKHLW0LQXWHQ 8QWHUULFKWVHLQKHLW$UEHLWHQPLW8QWHUDEIUDJHQ hEXQJ 9HUZHQGHQHLQHU8QWHUDEIUDJHDOVDEJHOHLWHWH7DEHOOH In dieser Übung schreiben Sie eine Abfrage, die eine abgeleitete Tabelle verwendet und die abgeleitete Tabelle mit einer anderen Tabelle verknüpft. Sie werden außerdem die Abfrage in einzelne Schritte unterteilen und zeigen, wie eine abgeleitete Tabelle verarbeitet wird. C:\Moc\2316B\Labfiles\L06\Answers enthält vollständige Skripts für diese Übung. Ç So führen Sie eine Abfrage aus, die eine abgeleitete Tabelle verwendet In diesem Verfahren werden Sie eine Abfrage schreiben und ausführen. Diese Abfrage verwendet eine abgeleitete Tabelle und gibt die juvenile.adult_member_no-Spalte und die Anzahl der jugendlichen Mitglieder aller erwachsenen Mitglieder mit mehr als drei zugeordneten jugendlichen Mitgliedern zurück. Answer_DerivedTab.sql ist ein vollständiges Skript für dieses Verfahren. 1. Melden Sie sich an der Schulungsraumdomäne nwtraders mit Hilfe der Informationen in der folgenden Tabelle an. Option Eingabe Benutzername SQLAdminx (wobei x die Ihrem Computernamen zugewiesene Nummer ist, wie in der Schulungsraumdomäne nwtraders.msft festgelegt) Kennwort password 2. Öffnen Sie SQL Query Analyzer, und melden Sie sich bei Aufforderung mit Hilfe der Microsoft Windows®-Authentifizierung am (lokalen) Server an. Sie verfügen über die Berechtigung, sich bei SQL Server anzumelden und SQL Server zu verwalten, da Sie als SQLAdminx angemeldet sind und SQLAdminx ein Mitglied der lokalen Windows 2000-Gruppe Administratoren ist. Alle Mitglieder dieser Gruppe werden automatisch der SQL Server-Rolle sysadmin zugeordnet. 3. Klicken Sie in der Liste DB auf library. 4. Geben Sie die folgende Abfrage ein, die eine abgeleitete Tabelle verwendet. 86(OLEUDU\ 6(/(&7GDGXOWBPHPEHUBQRDH[SUBGDWHG1RB2IB&KLOGUHQ )520DGXOW$6D ,11(5-2,1 6(/(&7DGXOWBPHPEHUBQR&2817$61RB2IB&KLOGUHQ )520MXYHQLOH *5283%<DGXOWBPHPEHUBQR +$9,1*&2817! $6G 21DPHPEHUBQR GDGXOWBPHPEHUBQR *2 5. Führen Sie die Abfrage aus, um zu überprüfen, ob die gewünschten Ergebnisse zurückgegeben werden. (UJHEQLV 8QWHUULFKWVHLQKHLW$UEHLWHQPLW8QWHUDEIUDJHQ Das Ergebnis ähnelt dem folgenden Resultset. Die Anzahl der zurückgegebenen Zeilen kann variieren. DGXOWBPHPEHUBQR H[SUBGDWH URZVDIIHFWHG 1RB2IB&KLOGUHQ $QPHUNXQJ Denken Sie später in dieser Übung beim Beantworten von Fragen daran, dass dies das Resultset der ursprünglichen abgeleiteten Tabellenabfrage ist. Ç So schreiben Sie die abgeleitete Tabellenabfrage als zwei getrennte Abfragen In diesem Verfahren werden Sie die vorherige Abfrage als zwei getrennte Abfragen neu schreiben und ausführen, um zu zeigen, wie die Abfrage verarbeitet wird, die eine abgeleitete Tabelle verwendet. 1. Geben Sie die folgende Abfrage ein, die die Daten der adult_member_noSpalte zurückgibt, die Anzahl der Kinder aller erwachsenen Mitglieder berechnet und nur die Zeilen zurückgibt, die erwachsene Mitglieder mit mehr als drei Kindern aus der juvenile-Tabelle enthalten. 86(OLEUDU\ 6(/(&7DGXOWBPHPEHUBQR&2817$61RB2IB&KLOGUHQ )520MXYHQLOH *5283%<DGXOWBPHPEHUBQR +$9,1*&2817! *2 2. Führen Sie die Abfrage aus, um zu überprüfen, ob die gewünschten Ergebnisse zurückgegeben werden. (UJHEQLV Das Ergebnis ähnelt dem folgenden Resultset. Die Anzahl der zurückgegebenen Zeilen kann variieren. $GXOWBPHPEHUBQR 1RB2IB&KLOGUHQ URZVDIIHFWHG 3. Vergleichen Sie die Ergebnisse der Abfrage aus Schritt 1 dieses Verfahrens mit der ursprünglichen abgeleiteten Tabellenabfrage des vorherigen Verfahrens. Worin bestehen die Ähnlichkeiten zwischen den beiden Ergebnissen? Beide Abfragen geben 248 Zeilen im Resultset zurück. Beide Abfragen geben außerdem die „adult_member_no“- und „No_Of_Children“Spalten zurück. ____________________________________________________________ ____________________________________________________________ 8QWHUULFKWVHLQKHLW$UEHLWHQPLW8QWHUDEIUDJHQ 4. Geben Sie die folgende Abfrage ein, die Daten der expr_date-Spalte aus der adult-Tabelle abruft. 86(OLEUDU\ 6(/(&7DH[SUBGDWH )520DGXOW$6D *2 5. Führen Sie die Abfrage aus, um zu überprüfen, ob die gewünschten Ergebnisse zurückgegeben werden. (UJHEQLV Das Ergebnis ähnelt dem folgenden Resultset. H[SUBGDWH URZVDIIHFWHG 6. Vergleichen Sie die Ergebnisse der Abfrage aus Schritt 4 dieses Verfahrens mit der ursprünglichen abgeleiteten Tabellenabfrage. Worin bestehen die Ähnlichkeiten zwischen den beiden Ergebnissen? Beide Abfragen geben die „expr_date“-Spalte zurück. ____________________________________________________________ Worin bestehen die Unterschiede zwischen den beiden Ergebnissen? Die vorherige Abfrage gibt 5.000 Zeilen zurück, während die Abfrage, die die abgeleitete Tabelle verwendet, 248 Zeilen zurückgibt. ____________________________________________________________ ____________________________________________________________ Ç So schreiben Sie die abgeleitete Tabellenabfrage mit Hilfe einer Verknüpfung neu In diesem Verfahren werden Sie die ursprüngliche abgeleitete Tabellenabfrage als eine Verknüpfung von zwei getrennten Abfragen neu schreiben und ausführen, um zu zeigen, dass Sie die gleichen Ergebnisse wie mit Hilfe einer abgeleiteten Tabelle erhalten. 1. Geben Sie die folgende Abfrage ein. 86(OLEUDU\ 6(/(&7MDGXOWBPHPEHUBQRDH[SUBGDWH &2817$61RB2IB&KLOGUHQ )520DGXOW$6D ,11(5-2,1MXYHQLOH$6M 21DPHPEHUBQR MDGXOWBPHPEHUBQR *5283%<DGXOWBPHPEHUBQRH[SUBGDWH +$9,1*&2817! *2 2. Führen Sie die Abfrage aus, um zu überprüfen, ob die gewünschten Ergebnisse zurückgegeben werden. (UJHEQLV 8QWHUULFKWVHLQKHLW$UEHLWHQPLW8QWHUDEIUDJHQ Das Ergebnis ähnelt dem folgenden Resultset. Die Anzahl der zurückgegebenen Zeilen kann variieren. DGXOWBPHPEHUBQR H[SUBGDWH URZVDIIHFWHG 1RB2IB&KLOGUHQ 3. Vergleichen Sie die Ergebnisse der Abfrage aus Schritt 1 dieses Verfahrens mit den Ergebnissen der ursprünglichen abgeleiteten Tabellenabfrage. Wird von beiden Abfragen das gleiche Ergebnis zurückgegeben? Ja. ____________________________________________________________ ____________________________________________________________ 8QWHUULFKWVHLQKHLW$UEHLWHQPLW8QWHUDEIUDJHQ hEXQJ 9HUZHQGHQHLQHU8QWHUDEIUDJHDOV$XVGUXFN In dieser Übung werden Sie Abfragen schreiben, die Unterabfragen mit einem einzigen Wert oder mit mehreren Werten verwenden, um das Resultset der äußeren Abfrage zu beschränken und um mehrere Verarbeitungsschritte zu einer SELECT-Anweisung zusammenzufassen. C:\Moc\2316B\Labfiles\L06\Answers enthält vollständige Skripts für diese Übung. Ç So verwenden Sie eine Unterabfrage mit einem einzigen Wert In diesem Verfahren werden Sie eine Abfrage schreiben und ausführen, die member.firstname, member.lastname, loanhist.isbn und loanhist.fine_paid für die Mitglieder zurückgibt, die die höchsten aufgezeichneten Mahngebühren für alle Bücher bezahlt haben. Answer_Highpay.sql ist ein vollständiges Skript für dieses Verfahren. 1. Schreiben Sie eine Abfrage, die den höchsten aufgezeichneten Wert in der loanhist.fine_paid-Spalte zurückgibt. 86(OLEUDU\ 6(/(&70$;ILQHBSDLG )520ORDQKLVW *2 2. Führen Sie die Abfrage aus, um zu überprüfen, ob die gewünschten Ergebnisse zurückgegeben werden. (UJHEQLV Das Ergebnis ähnelt dem folgenden Resultset. URZVDIIHFWHG :DUQXQJ18//:HUWZLUGGXUFKHLQH$JJUHJDWRGHUHLQH DQGHUH6(72SHUDWLRQJHO|VFKW Ç So verwenden Sie eine Unterabfrage mit einem einzigen Wert als Teil einer Suchbedingung In diesem Verfahren werden Sie eine Unterabfrage mit einem einzigen Wert als Teil einer Suchbedingung verwenden. 1. Schreiben Sie eine Abfrage, die die member- und loanhist-Tabellen verknüpft und für jede Zeile firstname, lastname, isbn und fine_paid zurückgibt. 2. Verwenden Sie die Abfrage aus Schritt 1 des vorherigen Verfahrens als Auswahlkriterium in der WHERE-Klausel, um nur die Zeilen der Verknüpfung zurückzugeben, in denen die bezahlte Mahngebühr dem höchsten Wert entspricht, der für alle Bücher jemals aufgezeichnet wurde. 8QWHUULFKWVHLQKHLW$UEHLWHQPLW8QWHUDEIUDJHQ 3. Schließen Sie in die Abfrage das DISTINCT-Schlüsselwort ein, um Einträge für Mitglieder zu entfernen, die diese Mahngebühr mehrmals bezahlt haben. 86(OLEUDU\ 6(/(&7',67,1&7ILUVWQDPHODVWQDPHLVEQILQHBSDLG )520PHPEHU$6P ,11(5-2,1ORDQKLVW$6OK 21PPHPEHUBQR OKPHPEHUBQR :+(5(OKILQHBSDLG 6(/(&70$;ILQHBSDLG)520ORDQKLVW *2 4. Führen Sie die Abfrage aus, um zu überprüfen, ob die gewünschten Ergebnisse zurückgegeben werden. (UJHEQLV Das Ergebnis ähnelt dem folgenden Resultset. Die Anzahl der zurückgegebenen Zeilen kann variieren. )LUVWQDPH ODVWQDPH LVEQ ILQHBSDLG 0LFKDHO 1DVK 5REHUW 5RWKHQEHUJ URZVDIIHFWHG :DUQXQJ18//:HUWZLUGGXUFKHLQH$JJUHJDWRGHUHLQH DQGHUH6(72SHUDWLRQJHO|VFKW Ç So verwenden Sie eine Abfrage zum Erstellen einer Liste von Werten In diesem Verfahren werden Sie eine Abfrage für die title-, loan- und reservation-Tabellen schreiben und ausführen, die vier Spalten zurückgibt: title_no, title, isbn und Total Reserved. Die Total Reserved-Spalte enthält die vorbestellte Anzahl von Büchern nach ISBN-Nummer, für die mehr als 50 Vorbestellungen und weniger als fünf Exemplare vorliegen. Gruppieren Sie die Ergebnisse nach title_no, title und isbn. Answer_SubqIn.sql ist ein vollständiges Skript für dieses Verfahren. 1. Schreiben Sie eine Abfrage, die die ISBN-Nummern der Bücher aus der reservation-Tabelle zurückgibt, für die über 50 Vorbestellungen vorliegen. 86(OLEUDU\ 6(/(&7LVEQ )520UHVHUYDWLRQ *5283%<LVEQ +$9,1*&2817! *2 8QWHUULFKWVHLQKHLW$UEHLWHQPLW8QWHUDEIUDJHQ 2. Führen Sie die Abfrage aus, um zu überprüfen, ob die gewünschten Ergebnisse zurückgegeben werden. (UJHEQLV Das Ergebnis ähnelt dem folgenden Teil eines Resultsets. Die Anzahl der zurückgegebenen Zeilen kann variieren. ,VEQ URZVDIIHFWHG Ç So verwenden Sie eine Unterabfrage mit mehreren Werten 1. Schreiben Sie eine äußere Abfrage, die die title_no-, title-, isbn- und Total Reserved-Spalten zurückgibt und bei der die Total Reserved-Spalte die Anzahl der Datensätze für jede Gruppe von title_no, title und isbn darstellt. Gehen Sie dazu folgendermaßen vor: a. Beschränken Sie die Zeilen, die die Gruppen der äußeren Abfrage bilden, indem Sie Bücher mit weniger als fünf Exemplaren angeben. b. Verwenden Sie das IN-Schlüsselwort als Teil der WHERE-Klausel für die Liste von Werten, die durch die Abfrage aus Schritt 1 des vorherigen Verfahrens generiert wurde. 86(OLEUDU\ 6(/(&7WWLWOHBQRWLWOHOLVEQ FRXQW$6 7RWDO5HVHUYHG )520WLWOH$6W ,11(5-2,1ORDQ$6O 21WWLWOHBQR OWLWOHBQR ,11(5-2,1UHVHUYDWLRQ$6U 21ULVEQ OLVEQ :+(5(ULVEQ,1 6(/(&7LVEQ )520UHVHUYDWLRQ *5283%<LVEQ +$9,1*&2817! $1'OFRS\BQR *5283%<WWLWOHBQRWLWOHOLVEQ *2 8QWHUULFKWVHLQKHLW$UEHLWHQPLW8QWHUDEIUDJHQ 2. Führen Sie die Abfrage aus, um zu überprüfen, ob die gewünschten Ergebnisse zurückgegeben werden. (UJHEQLV Das Ergebnis ähnelt dem folgenden Teil eines Resultsets. Die Anzahl der zurückgegebenen Zeilen kann variieren. WLWOHBQR WLWOH LVEQ 7RWDO5HVHUYHG /DVWRIWKH0RKLFDQV 7KH%ODFN7XOLS 7KH)LUVW3ULPH1XPEHUV URZVDIIHFWHG 8QWHUULFKWVHLQKHLW$UEHLWHQPLW8QWHUDEIUDJHQ hEXQJ 9HUZHQGHQHLQHU8QWHUDEIUDJH]XP.RUUHOLHUHQYRQ'DWHQ In der Übung werden Sie Abfragen schreiben, die korrelierte Unterabfragen verwenden, um das Resultset der äußeren Abfrage zu beschränken und um mehrere Verarbeitungsschritte zu einer SELECT-Anweisung zusammenzufassen. C:\Moc\2316B\Labfiles\L06\Answers enthält vollständige Skripts für diese Übung. Ç So verwenden Sie eine korrelierte Unterabfrage In diesem Verfahren werden Sie eine Abfrage erstellen, die mit Hilfe einer korrelierten Unterabfrage einen Wert basierend auf Daten der äußeren Abfrage berechnet und diesen Wert dann als Teil eines Vergleichs verwendet. Sie werden die member- und loanhist-Tabellen abfragen, um eine Liste der Bibliotheksmitglieder zurückzugeben, für die Mahngebühren von insgesamt über 5,00 $ verhängt wurden. Eine korrelierte Unterabfrage berechnet die Mahngebühren für jedes Mitglied. Answer_Fineof5.sql ist ein vollständiges Skript für dieses Verfahren. $QPHUNXQJ Alternativ können Sie diese Abfrage anstatt mit einer korrelierten Unterabfrage auch mit einer Verknüpfung und einer GROUP BY- oder einer HAVING-Klausel schreiben. Answer_Finejoin.sql ist ein vollständiges Skript für diese alternative Lösung. 1. Schreiben Sie eine Abfrage, die die member_no- und lastname-Spalten der member-Tabelle zurückgibt, indem Sie einen Tabellenalias für die member-Tabelle verwenden. 86(OLEUDU\ 6(/(&7PHPEHUBQRODVWQDPH )520PHPEHU$6P *2 2. Führen Sie die Abfrage aus, um zu überprüfen, ob die gewünschten Ergebnisse zurückgegeben werden. 3. Schreiben Sie eine Abfrage, die die für die einzelnen Mitglieder verzeichneten Mahngebühren aus den Aufzeichnungen in der loanhist-Tabelle berechnet. Gehen Sie dazu folgendermaßen vor: a. Verwenden Sie für die loanhist-Tabelle einen Alias. b. Korrelieren Sie die member.member_no-Spalte der äußeren Abfrage mit der loanhist.member_no-Spalte der inneren Abfrage in einer Unterabfrage. 8QWHUULFKWVHLQKHLW$UEHLWHQPLW8QWHUDEIUDJHQ c. Verwenden Sie in der WHERE-Klausel der äußeren Abfrage einen Vergleichsoperator, um die Mitglieder mit Gesamtmahngebühren über 5 $ auszuwählen. 86(OLEUDU\ 6(/(&7PHPEHUBQRODVWQDPH )520PHPEHU$6P :+(5(6(/(&7680ILQHBDVVHVVHG )520ORDQKLVW$6OK :+(5(PPHPEHUBQR OKPHPEHUBQR *2 4. Führen Sie die Abfrage aus, um zu überprüfen, ob die gewünschten Ergebnisse zurückgegeben werden. (UJHEQLV Das Ergebnis ähnelt dem folgenden Teil eines Resultsets. Die Anzahl der zurückgegebenen Zeilen kann variieren. PHPEHUBQR ODVWQDPH *UDII 0LNVRYVN\ 0LNVRYVN\ 2 %ULDQ URZVDIIHFWHG :DUQXQJ18//:HUWZLUGGXUFKHLQH$JJUHJDWRGHUHLQH DQGHUH6(72SHUDWLRQJHO|VFKW 8QWHUULFKWVHLQKHLW$UEHLWHQPLW8QWHUDEIUDJHQ /HUQ]LHONRQWUROOH ,QKDOWGLHVHU)ROLH 9HUWLHIHQ6LHGLH/HUQ]LHOH GLHVHU8QWHUULFKWVHLQKHLW LQGHP6LHGLH.HUQSXQNWH ZLHGHUKROHQ (LQVWLHJ 'LH)UDJHQ]XU/HUQ]LHO NRQWUROOHEH]LHKHQVLFKDXI HLQLJHGHU6FKOVVHONRQ ]HSWHGLH,QKDOWGLHVHU 8QWHUULFKWVHLQKHLWVLQG (LQIKUXQJLQ8QWHUDEIUDJHQ 9HUZHQGHQHLQHU8QWHUDEIUDJHDOVDEJHOHLWHWH7DEHOOH 9HUZHQGHQHLQHU8QWHUDEIUDJHDOV$XVGUXFN 9HUZHQGHQHLQHU8QWHUDEIUDJH]XP.RUUHOLHUHQ YRQ'DWHQ 9HUZHQGHQGHU(;,676 XQG127(;,676.ODXVHOQ ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** 9HUZHQGHQ6LHGLHVHV 6]HQDULRXPGLH)UDJHQ]X EHDQWZRUWHQXQGGLH 7KHPHQGHU8QWHUULFKWV HLQKHLW]XEHVSUHFKHQ Fragen Sie die Kursteilnehmer, ob sie Erläuterungen zu den Themen benötigen. Die Krankenversicherung Duluth Mutual Life verfügt über eine Datenbank, in der Informationen zu Ärzten und zu deren Patienten nachverfolgt werden. Diese Datenbank enthält die folgenden Tabellen. Ärztetabelle Spalte Datentyp und Einschränkungen doc_id char(9), PRIMARY KEY fname char(20) lname char(25) specialty char(25) phone char(10) Patiententabelle Spalte Datentyp und Einschränkungen pat_id char(9), PRIMARY KEY fname char(20) lname char(25) insurance_company char(25) phone char(10) 8QWHUULFKWVHLQKHLW$UEHLWHQPLW8QWHUDEIUDJHQ Notfalltabelle Spalte Datentyp und Einschränkungen admission_date datetime, PRIMARY KEY (composite) pat_id char(9), PRIMARY KEY (composite), FOREIGN KEY to patient.pat_id doc_id char(9), FOREIGN KEY to doctor.doc_id diagnosis varchar(150) Beantworten Sie auf der Grundlage der Tabellenstruktur die folgenden Fragen. 1. Wie können Sie mit einer einzigen Abfrage eine Liste aller Fälle erstellen, die zum ersten Datum in der chronologischen Reihenfolge in die Datenbank aufgenommen wurden? Verwenden Sie eine Unterabfrage mit einem einzigen Wert zusammen mit der MIN-Funktion, um das früheste Aufnahmedatum zu ermitteln. Vergleichen Sie das Ergebnis der Unterabfrage mit dem Aufnahmedatum für die einzelnen Fälle mit der WHERE-Klausel. 2. Sie möchten die Gesamtzahl der Krankenhauseinlieferungen sortiert nach dem Patientennamen ermitteln. Wie können Sie dabei vorgehen? Wo liegen die Vor- oder Nachteile der jeweiligen Methode? Sie könnten eine SELECT-Anweisung mit einer korrelierten Unterabfrage schreiben, die die Gesamtzahl der Einlieferungen pro Patient mit Hilfe der COUNT-Funktion berechnet. 6(/(&7SDWBLGSDWBQDPH 6(/(&7FRXQW)520FDVHILOH&:+(5(&SDWBLG 3SDWBLG )520SDWLHQW$63 Sie können aber auch eine Verknüpfung mit der GROUP BY-Klausel und der COUNT-Funktion verwenden. Die Methode mit der Unterabfrage ist möglicherweise nicht so effizient wie die GROUP BYMethode, sie ist aber klarer im Hinblick auf die Programmlogik. 8QWHUULFKWVHLQKHLW$UEHLWHQPLW8QWHUDEIUDJHQ This page is intentionally left blank. Unterrichtseinheit 7: Ändern von Daten Inhalt Übersicht 1 Verwenden von Transaktionen 2 Einfügen von Daten Löschen von Daten 4 15 Aktualisieren von Daten 20 Leistungsaspekte 25 Empfohlene Methoden 26 Übungseinheit A: Ändern von Daten 27 Lernzielkontrolle 41 Die in diesen Unterlagen enthaltenen Angaben und Daten, einschließlich URLs und anderer Verweise auf Internetwebsites, können ohne vorherige Ankündigung geändert werden. Die in den Beispielen genannten Firmen, Organisationen, Produkte, Domänennamen, E-Mail-Adressen, Logos, Personen, Orte und Ereignisse sind frei erfunden und jede Ähnlichkeit mit bestehenden Firmen, Organisationen, Produkten, Domänennamen, E-Mail-Adressen, Logos, Personen, Orten oder Ereignissen ist rein zufällig, soweit nichts anderes angegeben ist. Die Benutzer sind verantwortlich für das Einhalten aller anwendbaren Urheberrechtsgesetze. Unabhängig von der Anwendbarkeit der entsprechenden Urheberrechtsgesetze darf ohne ausdrückliche schriftliche Erlaubnis der Microsoft Corporation kein Teil dieses Dokuments für irgendwelche Zwecke vervielfältigt oder in einem Datenempfangssystem gespeichert oder darin eingelesen werden, unabhängig davon, auf welche Art und Weise oder mit welchen Mitteln (elektronisch, mechanisch, durch Fotokopieren, Aufzeichnen, usw.) dies geschieht. Microsoft Corporation kann Inhaber von Patenten oder Patentanträgen, Marken, Urheberrechten oder anderen gewerblichen Schutzrechten sein, die den Inhalt dieses Dokuments betreffen. Die Bereitstellung dieses Dokuments gewährt keinerlei Lizenzrechte an diesen Patenten, Marken, Urheberrechten oder anderen gewerblichen Schutzrechten, es sei denn, dies wurde ausdrücklich durch einen schriftlichen Lizenzvertrag mit der Microsoft Corporation vereinbart. 2001 Microsoft Corporation. Alle Rechte vorbehalten. Microsoft, BackOffice, MS-DOS, PowerPoint, Visual Studio, Windows, Windows Media und Windows NT sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Die in diesem Dokument aufgeführten Namen tatsächlicher Firmen und Produkte sind möglicherweise Marken der jeweiligen Eigentümer. 8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ LLL +LQZHLVHIUGHQ.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 6WUDWHJLHIUGLH8QWHUULFKWVHLQKHLW Verwenden Sie die folgende Strategie, um diese Unterrichtseinheit zu präsentieren: Verwenden von Transaktionen Beschreiben Sie, wie die Kursteilnehmer Transaktionen verwenden können, um Daten zu ändern. Einfügen von Daten Erläutern Sie, dass Zeilen bei der Dateneingabe zeitsparend eingefügt werden können, wenn die DEFAULT- und DEFALULT VALUESSchlüsselwörter verwendet werden. Beschreiben Sie, wie Daten mit Hilfe der INSERT…SELECT-Anweisung geändert werden und wie auf anderen Tabellen basierende Zeilen mit Hilfe von Unterabfragen gelöscht und aktualisiert werden. Löschen von Daten Erläutern Sie die Verwendung der DELETE- und TRUNCATE TABLEAnweisungen zum Entfernen von Zeilen. Aktualisieren von Daten Erläutern Sie, wie Daten mit der UPDATE-Anweisung aktualisiert werden. Vergleichen Sie die Verwendung von Unterabfragen in der UPDATE-Anweisung mit der Verwendung einer Verknüpfung. Erläutern Sie den Kursteilnehmern, dass Unterschiede in der Abfrageleistung bestehen können. Leistungsaspekte Erläutern Sie die Leistungsaspekte, die mit dem Ändern von Daten zusammenhängen. $QSDVVXQJVLQIRUPDWLRQHQ Dieser Abschnitt beschreibt die Anforderungen zum Einrichten der Übungseinheiten für eine Unterrichtseinheit sowie die Konfigurationsänderungen, die während der Übungseinheiten an den Kursteilnehmercomputern vorgenommen werden. Diese Informationen sollen Ihnen beim Replizieren oder Anpassen der Microsoft Official Curriculum-Courseware (MOC) helfen. :LFKWLJ Die Übungseinheit in dieser Unterrichtseinheit hängt von der Schulungsraumkonfiguration ab, die im Abschnitt „Anpassungsinformationen“ am Ende des Dokuments Handbuch für das Einrichten von Schulungscomputern für Kurs 2316B, Abfragen von Microsoft SQL Server 2000 mit Hilfe von Transact-SQL, angegeben ist. (LQULFKWHQGHUhEXQJVHLQKHLW Es gibt keine Anforderungen zum Einrichten der Übungseinheit, die die Replikation oder die Anpassung betreffen. (UJHEQLVVHGHUhEXQJVHLQKHLW Auf den Kursteilnehmercomputern gibt es keine Konfigurationsänderungen, die die Replikation oder die Anpassung betreffen. 8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ hEHUVLFKW ,QKDOWGLHVHU)ROLH *HEHQ6LHHLQHhEHUVLFKW EHUGLH7KHPHQXQG /HUQ]LHOHGLHVHU8QWHU ULFKWVHLQKHLW (LQVWLHJ ,QGLHVHU8QWHUULFKWVHLQKHLW OHUQHQ6LHZLH'DWHQ JHlQGHUWZHUGHQ 9HUZHQGHQYRQ7UDQVDNWLRQHQ (LQIJHQYRQ'DWHQ /|VFKHQYRQ'DWHQ $NWXDOLVLHUHQYRQ'DWHQ /HLVWXQJVDVSHNWH ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** In dieser Unterrichtseinheit wird die Funktionsweise von Transaktionen beschrieben und erläutert, wie INSERT-, DELETE- und UPDATEAnweisungen geschrieben werden, um Daten in Tabellen zu ändern. Am Ende dieser Unterrichtseinheit werden Sie in der Lage sein, die folgenden Aufgaben auszuführen: Beschreiben der Funktionsweise von Transaktionen. Schreiben von INSERT-, DELETE- und UPDATE-Anweisungen, um Daten in Tabellen zu ändern. Beschreiben von Leistungsaspekten, die mit dem Ändern von Daten zusammenhängen. 8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ 9HUZHQGHQYRQ7UDQVDNWLRQHQ ,QKDOWGLHVHU)ROLH *HEHQ6LHHLQH(LQIKUXQJ LQGLH7KHPHQGLHVHV $EVFKQLWWV (LQVWLHJ 7UDQVDNWLRQHQZHUGHQYHU ZHQGHWXP'DWHQLQWHJULWlW ]XHU]ZLQJHQ 6WDUWHQYRQ7UDQVDNWLRQHQ %HHQGHQYRQ7UDQVDNWLRQHQ z ([SOL]LW z &200,7$QZHLVXQJ z $XWRFRPPLW z 52//%$&.$QZHLVXQJ z ,PSOL]LW %(*,175$16$&7,21 %(*,175$16$&7,21 83'$7(VDYLQJV 83'$7(VDYLQJV 83'$7(FKHFNLQJ 83'$7(FKHFNLQJ &200,775$16$&7,21 &200,775$16$&7,21 ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Eine Transaktion ist eine Folge von Operationen, die als einzelne logische Arbeitseinheit ausgeführt wird. SQL-Programmierer sind dafür verantwortlich, Transaktionen an Punkten zu starten und zu beenden, die die logische Konsistenz der Daten erzwingen. Der Programmierer muss die Sequenz der Datenänderungen so definieren, dass die Daten hinsichtlich der Geschäftsregeln der Organisation in konsistentem Zustand bleiben. 6WDUWHQYRQ7UDQVDNWLRQHQ Sie können Transaktionen in Microsoft® SQL Server™ 2000 in einem von drei Modi starten - Explizit, Autocommit oder Implizit. Explizite Transaktionen werden durch Eingeben einer BEGIN TRANSACTION-Anweisung gestartet. Autocommit-Transaktionen sind der Standardmodus für SQL Server. Für jede einzelne Transact-SQL-Anweisung wird nach Beendigung ein Commit ausgeführt. Es ist nicht notwendig, dass Sie Anweisungen zum Steuern von Transaktionen angeben. Der implizite Transaktionsmodus wird durch eine API-Funktion (Application Programming Interface, Schnittstelle für Anwendungsprogrammierung) oder durch die SET IMPLICIT_TRANSACTIONS ONAnweisung von Transact-SQL festgelegt. In diesem Modus startet die nächste Anweisung automatisch eine neue Transaktion. Wenn diese Transaktion abgeschlossen ist, startet die nächste Transact-SQL-Anweisung eine neue Transaktion. Der Transaktionsmodus wird auf Sitzungsebene verwaltet. Wenn eine Sitzung von einem Transaktionsmodus zum anderen wechselt, hat dies keine Auswirkung auf den Transaktionsmodus anderer Sitzungen. 8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ %HHQGHQYRQ7UDQVDNWLRQHQ Sie können Transaktionen entweder über eine COMMIT- oder über eine ROLLBACK-Anweisung beenden. Die COMMIT-Anweisung zeigt an, dass SQL Server einen Commit ausführen soll, wenn eine Transaktion erfolgreich ist. Durch eine COMMIT-Anweisung wird garantiert, dass alle Änderungen der Transaktion zum dauerhaften Bestandteil der Datenbank werden. Durch eine COMMIT-Anweisung werden auch Ressourcen, wie etwa Sperren, freigegeben, die von der Transaktion verwendet werden. Die ROLLBACK-Anweisung bricht eine Transaktion ab. Sie macht alle Änderungen rückgängig, die während der Transaktion vorgenommen wurden, sodass die Daten in ihren Ausgangszustand beim Transaktionsstart zurückversetzt werden. Durch eine ROLLBACK-Anweisung werden auch von der Transaktion beanspruchte Ressourcen freigegeben. Wenn ein fataler Fehler, wie z. B. ein Deadlock, in einer Transaktion auftritt, führt SQL Server automatisch einen Rollback für die Transaktion aus. Mittelschwere Fehler, wie z. B. die Verletzung einer CHECK-Einschränkung für UPDATE, führen nicht zu einem automatischen Rollback. Bei mittelschweren Fehlern muss der Entwickler @@error nach allen Anweisungen überprüfen, ein Rollback explizit starten und zum Ende derTransaktion springen. %HLVSLHO In diesem Beispiel werden 100 $ von einem Sparkonto eines Kunden auf sein Girokonto mit Hilfe einer Transaktion überwiesen. Die Transaktion macht alle Datenänderungen rückgängig, falls während der Ausführung der Transaktion ein Fehler auftritt. %(*,175$16$&7,21 83'$7(VDYLQJV 6(7EDODQFH EDODQFH :+(5(FXVWLG ,)##(5525! %(*,1 5$,6(5525 )HKOHU7UDQVDNWLRQQLFKWEHHQGHW 52//%$&.75$16$&7,21 (1' 83'$7(FKHFNLQJ 6(7EDODQFH EDODQFH :+(5(FXVWLG ,)##(5525! %(*,1 5$,6(5525 )HKOHU7UDQVDNWLRQQLFKWEHHQGHW 52//%$&.75$16$&7,21 (1' &200,775$16$&7,21 $QPHUNXQJ Dieses Beispiel dient nur der Erläuterung und führt zu keinen Ergebnissen. 8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ (LQIJHQYRQ'DWHQ ,QKDOWGLHVHU)ROLH *HEHQ6LHHLQH(LQIKUXQJ LQGLH7KHPHQGLHVHV $EVFKQLWWV (LQIJHQHLQHU'DWHQ]HLOHGXUFK$QJDEHGHU:HUWH (LQVWLHJ 9HUZHQGHQGHU,16(576(/(&7$QZHLVXQJ (UVWHOOHQHLQHU7DEHOOHPLW+LOIHGHU6(/(&7,172 $QZHLVXQJ (LQIJHQYRQ7HLOGDWHQ (LQIJHQYRQ'DWHQPLW+LOIHYRQ 6SDOWHQVWDQGDUGZHUWHQ 'DWHQN|QQHQPLW+LOIHHLQHU 7UDQVDNWLRQHLQJHIJW ZHUGHQLQGHP6LHHLQH :HUWHPHQJHDQJHEHQRGHU GLH(UJHEQLVVHHLQHU 6(/(&7$QZHLVXQJ HLQIJHQ ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Daten können mit Hilfe einer Transaktion eingefügt werden, indem Sie eine Wertemenge angeben oder die Ergebnisse einer SELECT-Anweisung einfügen. Sie können eine Tabelle erstellen und gleichzeitig Daten einfügen. Es ist nicht notwendig, dass Sie Werte in alle Datenfelder einer Zeile einfügen. 8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ (LQIJHQHLQHU'DWHQ]HLOHGXUFK$QJDEHGHU:HUWH ,QKDOWGLHVHU)ROLH =HLJHQ6LHZLHHLQH=HLOH PLW:HUWHQ]XHLQHU7DEHOOH PLW+LOIHGHU,16(57$QZHL VXQJKLQ]XJHIJWZHUGHQ NDQQ 'LH=LHOHLQVFKUlQNXQJHQPVVHQHLQJHKDOWHQZHUGHQ VRQVWVFKOlJWGLH,16(577UDQVDNWLRQIHKO 9HUZHQGHQGHU6SDOWHQOLVWH ]XP$QJHEHQYRQ =LHOVSDOWHQ (LQVWLHJ $QJHEHQHLQHUEHUHLQVWLPPHQGHQ :HUWHOLVWH 'LH,16(57$QZHLVXQJIJW =HLOHQ]X7DEHOOHQKLQ]X 86(1RUWKZLQG 86(1RUWKZLQG ,16(57FXVWRPHUV ,16(57FXVWRPHUV FXVWRPHULGFRPSDQ\QDPHFRQWDFWQDPH FXVWRPHULGFRPSDQ\QDPHFRQWDFWQDPH FRQWDFWWLWOH FRQWDFWWLWOH DGGUHVVFLW\UHJLRQSRVWDOFRGHFRXQWU\SKRQH DGGUHVVFLW\UHJLRQSRVWDOFRGHFRXQWU\SKRQH ID[ ID[ 9$/8(6 3(&2) 3HFRV&RIIHH&RPSDQ\ 0LFKDHO'XQQ 9$/8(6 3(&2) 3HFRV&RIIHH&RPSDQ\ 0LFKDHO'XQQ 2ZQHU 2DN6WUHHW 9DQFRXYHU %& 2ZQHU 2DN6WUHHW 9DQFRXYHU %& 9). &DQDGD 9). &DQDGD *2 *2 ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Die INSERT-Anweisung fügt Zeilen zu einer Tabelle hinzu. 7HLOV\QWD[ 0HWKRGLVFKHU+LQZHLV %HWRQHQ6LHDQKDQGGHV %HLVSLHOVDXIGHU)ROLHGDVV DOOH:HUWHLQGHU FXVWRPHUV7DEHOOH =HLFKHQZHUWHVLQGXQG GDKHULQHLQIDFKH $QIKUXQJV]HLFKHQ HLQJHVFKORVVHQVLQG INSERT [INTO] { table_name | view_name} { [(column_list)] { VALUES ( { DEFAULT | NULL| expression}[,…n]) | DEFAULT VALUES Verwenden Sie die INSERT-Anweisung mit der VALUES-Klausel, um Zeilen zu einer Tabelle hinzuzufügen. Berücksichtigen Sie beim Einfügen von Zeilen die folgenden Aspekte und Richtlinien: Die Zieleinschränkungen müssen eingehalten werden, sonst schlägt die INSERT-Transaktion fehl. Verwenden Sie die Spaltenliste (column_list) zum Angeben von Spalten, in denen die eingehenden Werte gespeichert werden. Sie müssen die column_list in Klammern einschließen und Kommas als Trennzeichen verwenden. Wenn Sie Werte für alle Spalten angeben, ist die Verwendung der column_list optional. Geben Sie die einzufügenden Daten mit Hilfe der VALUES-Klausel an. Die VALUES-Klausel ist für jede Spalte in der Tabelle oder der column_list erforderlich. Die Spaltenreihenfolge und der Datentyp der neuen Daten müssen mit der Spaltenreihenfolge und dem Datentyp in der Tabelle übereinstimmen. Viele Datentypen haben ein bestimmtes Eingabeformat. Beispielsweise müssen Zeichendaten und Datumsangaben in einfache Anführungszeichen eingeschlossen werden. 8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ %HLVSLHO Im folgenden Beispiel wird Pecos Coffee Company als neuer Kunde hinzugefügt. 86(1RUWKZLQG ,16(57FXVWRPHUV FXVWRPHULGFRPSDQ\QDPHFRQWDFWQDPHFRQWDFWWLWOH DGGUHVVFLW\UHJLRQSRVWDOFRGHFRXQWU\SKRQH ID[ 9$/8(6 3(&2) 3HFRV&RIIHH&RPSDQ\ 0LFKDHO'XQQ 2ZQHU 2DN6WUHHW 9DQFRXYHU %& 9). &DQDGD *2 Sie können überprüfen, ob Pecos Coffee Company zur customers-Tabelle hinzugefügt wurde, indem Sie die folgende Anweisung ausführen. (UJHEQLV 86(1RUWKZLQG 6(/(&7FRPSDQ\QDPHFRQWDFWQDPH )520FXVWRPHUV :+(5(FXVWRPHULG 3(&2) *2 FRPSDQ\QDPH FRQWDFWQDPH 3HFRV&RIIHH&RPSDQ\ URZVDIIHFWHG 0LFKDHO'XQQ 8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ 9HUZHQGHQGHU,16(576(/(&7$QZHLVXQJ ,QKDOWGLHVHU)ROLH =HLJHQ6LHZLH=HLOHQPLW +LOIHJHVFKDFKWHOWHU 6(/(&7$QZHLVXQJHQDXV HLQHU7DEHOOHLQHLQHDQGHUH 7DEHOOHHLQJHIJWZHUGHQ (LQVWLHJ (VLVWP|JOLFKPLW+LOIH JHVFKDFKWHOWHU6(/(&7 $QZHLVXQJHQ=HLOHQDXV HLQHU7DEHOOHLQGLHVHOEH RGHUHLQHDQGHUH7DEHOOH HLQ]XIJHQ $OOH=HLOHQGLHGLH6(/(&7$QZHLVXQJHUIOOHQZHUGHQ HLQJHIJW hEHUSUIHQREGLH7DEHOOHLQGHUGLHQHXHQ=HLOHQ HLQJHIJWZHUGHQYRUKDQGHQLVW 6LFKHUVWHOOHQ GDVV GLH'DWHQW\SHQ NRPSDWLEHO VLQG (UPLWWHOQ RE6WDQGDUGZHUWHYRUKDQGHQRGHU18//:HUWH ]XOlVVLJVLQG 86(1RUWKZLQG 86(1RUWKZLQG ,16(57FXVWRPHUV ,16(57FXVWRPHUV 6(/(&7VXEVWULQJ 6(/(&7VXEVWULQJ ILUVWQDPH ILUVWQDPH VXEVWULQJODVWQDPH VXEVWULQJODVWQDPH ODVWQDPH ODVWQDPH ILUVWQDPH ILUVWQDPH WLWOH WLWOH DGGUHVVFLW\ DGGUHVVFLW\ UHJLRQSRVWDOFRGH UHJLRQSRVWDOFRGH FRXQWU\KRPHSKRQH18// FRXQWU\KRPHSKRQH18// )520HPSOR\HHV )520HPSOR\HHV *2 *2 ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Die INSERT…SELECT-Anweisung fügt einer Tabelle Zeilen hinzu, indem das Resultset einer SELECT-Anweisung eingefügt wird. Verwenden Sie die INSERT…SELECT-Anweisung, um einer vorhandenen Tabelle aus anderen Quellen Zeilen hinzuzufügen. Das Verwenden der INSERT…SELECT-Anweisung ist effizienter als das Schreiben mehrerer einzeiliger INSERT-Anweisungen. Berücksichtigen Sie beim Verwenden der INSERT…SELECT-Anweisung die folgenden Aspekte und Richtlinien: Alle Zeilen, die die SELECT-Anweisung erfüllen, werden in die äußerste Tabelle der Abfrage eingefügt. Sie müssen überprüfen, ob die Tabelle, in der die neuen Zeilen eingefügt werden, in der Datenbank vorhanden ist. Sie müssen sicherstellen, dass die Spalten der Tabelle, in der die neuen Werte eingefügt werden, Datentypen aufweisen, die mit den Spalten der Tabellenquelle kompatibel sind. Sie müssen ermitteln, ob ein Standardwert vorhanden ist oder ob für Spalten, die ausgelassen werden, NULL-Werte zulässig sind. Wenn NULLWerte nicht zulässig sind, müssen Sie Werte für diese Spalte angeben. 6\QWD[ INSERT table_name SELECT column_list FROM table_list WHERE search_conditions %HLVSLHO In diesem Beispiel werden der customers-Tabelle neue Kunden hinzugefügt. Die Angestellten von Northwind Traders dürfen Firmenprodukte kaufen. Diese Abfrage enthält eine INSERT-Anweisung mit einer SELECT-Klausel, die der customers-Tabelle Informationen zu den Angestellten hinzufügt. 8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ Die neue customerid-Spalte besteht aus den drei ersten Buchstaben des Vornamens des Angestellten, die mit den beiden ersten Buchstaben des Nachnamens verknüpft werden. Der Nachname des Angestellten wird als neuer Firmenname und der Vorname als Name der Kontaktperson verwendet. 86(1RUWKZLQG ,16(57FXVWRPHUV 6(/(&7VXEVWULQJILUVWQDPH VXEVWULQJODVWQDPH ODVWQDPHILUVWQDPHWLWOHDGGUHVVFLW\ UHJLRQSRVWDOFRGHFRXQWU\KRPHSKRQH18// )520HPSOR\HHV *2 8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ (UVWHOOHQHLQHU7DEHOOHPLW+LOIHGHU6(/(&7,172$QZHLVXQJ ,QKDOWGLHVHU)ROLH (UNOlUHQ6LHGHQ=ZHFNXQG GLH)XQNWLRQGHU6(/(&7 ,172$QZHLVXQJ (UVWHOOHQYRQ7DEHOOHQXQG(LQIJHQYRQ=HLOHQLQHLQH 7DEHOOHLQHLQHUHLQ]LJHQ2SHUDWLRQ (UVWHOOHQ HLQHUORNDOHQWHPSRUlUHQ7DEHOOHRGHUHLQHU JOREDOHQWHPSRUlUHQ7DEHOOH (UVWHOOHQYRQ6SDOWHQDOLDVQDPHQRGHU$QJHEHQYRQ 6SDOWHQQDPHQIUGLHQHXH7DEHOOHLQGHU$XVZDKOOLVWH (LQVWLHJ 0LW+LOIHGHU6(/(&7,172 $QZHLVXQJNDQQGDV 5HVXOWVHWMHGHU$EIUDJHLQ HLQHUQHXHQ7DEHOOH GDUJHVWHOOWZHUGHQ 86(1RUWKZLQG 86(1RUWKZLQG 6(/(&7 6(/(&7 SURGXFWQDPH$6SURGXFWV SURGXFWQDPH$6SURGXFWV XQLWSULFH$6SULFH XQLWSULFH$6SULFH XQLWSULFH$6WD[ XQLWSULFH$6WD[ ,1723ULFH7DEOH ,1723ULFH7DEOH )5203URGXFWV )5203URGXFWV *2 *2 ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Mit Hilfe der SELECT INTO-Anweisung kann das Resultset jeder Abfrage in einer neuen Tabelle dargestellt werden. Verwenden Sie die SELECT INTO-Anweisung, um neue Tabellen einer Datenbank mit importierten Daten aufzufüllen. Die SELECT INTO-Anweisung bietet Ihnen außerdem die Möglichkeit, komplexe Vorgänge zu untergliedern, die ein Dataset aus verschiedenen Quellen erfordern. Wenn Sie zunächst eine temporäre Tabelle erstellen, sind die in dieser Tabelle ausgeführten Abfragen weniger kompliziert als die in mehreren Tabellen oder Datenbanken ausgeführten Abfragen. Berücksichtigen Sie beim Verwenden der SELECT INTO-Anweisung die folgenden Aspekte und Richtlinien: Mit der SELECT INTO-Anweisung können Sie in einer einzigen Operation eine Tabelle erstellen und Zeilen in die Tabelle einfügen. Stellen Sie sicher, dass der in der SELECT INTO-Anweisung angegebene Tabellenname eindeutig ist. Wenn eine weitere Tabelle mit demselben Namen vorhanden ist, schlägt die SELECT INTO-Anweisung fehl. Sie können eine lokale temporäre Tabelle oder eine globale temporäre Tabelle erstellen. Erstellen Sie eine lokale temporäre Tabelle, indem Sie dem Tabellennamen ein Nummernzeichen (#) voranstellen. Beim Erstellen einer globalen temporären Tabelle geben Sie vor dem Tabellennamen zwei Nummernzeichen (##) ein. Eine lokale temporäre Tabelle ist nur in der aktuellen Sitzung sichtbar. Eine globale temporäre Tabelle ist in allen Sitzungen sichtbar. • Wenn Benutzer die Sitzung beenden, wird der Platz für eine lokale temporäre Tabelle wieder freigegeben. 8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ • Der Platz für eine globale temporäre Tabelle wird erst dann wieder freigegeben, wenn die Sitzung beendet wird, durch die die Tabelle erstellt wurde, und wenn die letzte Transact-SQL-Anweisung abgeschlossen wird, die zu dem Zeitpunkt auf die Tabelle verwiesen hat. Das Erstellen von Spaltenaliasnamen oder das Angeben von Spaltennamen für die neue Tabelle muss in der Auswahlliste erfolgen. 7HLOV\QWD[ SELECT select_list INTO new_table FROM {table_source}[,…n] WHERE search_condition %HLVSLHO In diesem Beispiel wird eine lokale temporäre Tabelle auf der Basis einer Abfrage erstellt, die für die products-Tabelle ausgeführt wurde. Beachten Sie, dass mit Hilfe von Zeichenfolgefunktionen oder mathematischen Funktionen Änderungen am Resultset vorgenommen werden können. 0HWKRGLVFKHU+LQZHLV )KUHQ6LHGLHVHV%HLVSLHO PLW+LOIHYRQ64/4XHU\ $QDO\]HUYRU 86(1RUWKZLQG 6(/(&7SURGXFWQDPH$6SURGXFWV XQLWSULFH$6SULFH XQLWSULFH$6WD[ ,1723ULFH7DEOH )5203URGXFWV *2 Um das Resultset anzuzeigen, muss die folgende Abfrage ausgeführt werden. (UJHEQLV 86(1RUWKZLQG 6(/(&7)5203ULFH7DEOH *2 SURGXFWV &KDL &KDQJ $QLVHHG6\UXS &KHI$QWRQ V&DMXQ6HDVRQLQJ &KHI$QWRQ V*XPER0L[ *UDQGPD V%R\VHQEHUU\6SUHDG 8QFOH%RE V2UJDQLF'ULHG3HDUV 1RUWKZRRGV&UDQEHUU\6DXFH 0LVKL.REH1LNX ,NXUD 4XHVR&DEUDOHV 4XHVR0DQFKHJR/D3DVWRUD .RQEX 7RIX *HQHQ6KRX\X URZVDIIHFWHG SULFH WD[ 8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ (LQIJHQYRQ7HLOGDWHQ ,QKDOWGLHVHU)ROLH Hinzufügen neuer Daten (UOlXWHUQ6LHZLHHLQH=HLOH HLQJHIJWZLUGRKQHVlPW OLFKH'DWHQHOHPHQWHDQ]X JHEHQ 86(1RUWKZLQG 86(1RUWKZLQG ,16(57VKLSSHUVFRPSDQ\QDPH ,16(57VKLSSHUVFRPSDQ\QDPH 9$/8(6 )LWFK0DWKHU 9$/8(6 )LWFK0DWKHU *2 *2 (LQVWLHJ Beispiel Beispiel 11 Überprüfen neuer Daten :HQQHLQH6SDOWHEHU HLQHQ6WDQGDUGZHUWYHUIJW RGHU18//:HUWH]XOlVVW NDQQGLH6SDOWHLQGHU ,16(57$QZHLVXQJZHJ JHODVVHQZHUGHQ 64/6HUYHUIJWGLH:HUWH DXWRPDWLVFKHLQ 86(1RUWKZLQG 86(1RUWKZLQG 6(/(&7 6(/(&7 )520VKLSSHUV )520VKLSSHUV :+(5(FRPSDQ\QDPH :+(5(FRPSDQ\QDPH )LWFK0DWKHU© )LWFK0DWKHU© *2 *2 Beispiel Beispiel 22 Zulassen von NULL-Werten shipperid shipperid 37 37 companyname companyname Fitch Fitch&&Mather Mather phone phone NULL NULL ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** 0HWKRGLVFKHU+LQZHLV 9HUJOHLFKHQ6LH%HLVSLHO PLW%HLVSLHO'DV '()$8/76FKOVVHOZRUW ZLUGLQ%HLVSLHOQLFKW YHUZHQGHW%HLGH%HLVSLHOH JHEHQGDVVHOEH(UJHEQLV ]XUFN Wenn eine Spalte über einen Standardwert verfügt oder NULL-Werte zulässt, kann die Spalte in der INSERT-Anweisung weggelassen werden. SQL Server fügt die Werte automatisch ein. Berücksichtigen Sie beim Einfügen von Teildaten die folgenden Aspekte und Richtlinien: Listen Sie nur die Spaltennamen für diejenigen Daten auf, die Sie in der INSERT-Anweisung angeben. Geben Sie die Spalten, für die Sie einen Wert bereitstellen, in der column_list an. Die Daten in der VALUES-Klausel entsprechen den angegebenen Spalten. Unbenannte Spalten werden so ausgefüllt, als ob sie benannt worden wären und ein Standardwert angegeben worden wäre. Geben Sie keine Spalten in der column_list an, die über die IDENTITYEigenschaft verfügen oder Standard- oder NULL-Werte zulassen. Geben Sie einen NULL-Wert explizit ein, indem Sie 0 ohne einfache Anführungszeichen eingeben. 8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ %HLVSLHO In diesem Beispiel wird das Unternehmen Fitch & Mather als neuer Spediteur zur shippers-Tabelle hinzugefügt. Für Spalten, die über eine IDENTITYEigenschaft verfügen oder Standard- oder NULL-Werte zulassen, werden keine Daten eingegeben. Vergleichen Sie dieses Beispiel mit Beispiel 2. Beachten Sie, dass das DEFAULT-Schlüsselwort weggelassen wird. 86(1RUWKZLQG ,16(57VKLSSHUVFRPSDQ\QDPH 9$/8(6 )LWFK0DWKHU *2 Sie können überprüfen, ob Fitch & Mather zur shippers-Tabelle hinzugefügt wurde, indem Sie die folgende Anweisung ausführen. (UJHEQLV %HLVSLHO (UJHEQLV 86(1RUWKZLQG 6(/(&7 )520VKLSSHUV :+(5(FRPSDQ\QDPH )LWFK0DWKHU *2 VKLSSHULG &RPSDQ\1DPH SKRQH URZVDIIHFWHG 18// )LWFK0DWKHU Auch in diesem Beispiel wird das Unternehmen Fitch & Mather als neuer Spediteur zur shippers-Tabelle hinzugefügt. Beachten Sie, dass das DEFAULT-Schlüsselwort für Spalten verwendet wird, die Standard- oder NULL-Werte zulassen. Vergleichen Sie dieses Beispiel mit Beispiel 1. 86(1RUWKZLQG ,16(57VKLSSHUVFRPSDQ\QDPH 9$/8(6 )LWFK0DWKHU *2 VKLSSHULG FRPSDQ\QDPH SKRQH URZVDIIHFWHG 18// )LWFK0DWKHU 8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ (LQIJHQYRQ'DWHQPLW+LOIHYRQ6SDOWHQVWDQGDUGZHUWHQ ,QKDOWGLHVHU)ROLH (UOlXWHUQ6LHGLH6FKOVVHO Z|UWHU'()$8/7XQG '()$8/79$/8(6 '()$8/76FKOVVHOZRUW z z (LQVWLHJ 9HUZHQGHQ6LHHLQH ,16(57$QZHLVXQJPLW GHP'()$8/76FKOVVHO ZRUWXPGHQ6WDQGDUGZHUW IUEHVWLPPWH6SDOWHQHLQ ]XIJHQRGHUYHUZHQGHQ 6LHGDV'()$8/7 9$/8(66FKOVVHOZRUWXP HLQHJDQ]H=HLOHLQHLQH 7DEHOOHHLQ]XIJHQ )JW6WDQGDUGZHUWH IUVSH]LHOOH=HLOHQHLQ 6SDOWHQPVVHQ EHUHLQHQ6WDQGDUGZHUW YHUIJHQ RGHU 18//:HUWH ]XODVVHQ 86(1RUWKZLQG 86(1RUWKZLQG ,16(57VKLSSHUVFRPSDQ\QDPHSKRQH ,16(57VKLSSHUVFRPSDQ\QDPHSKRQH 9$/8(6 .HQ\D&RIIHH&R '()$8/7 9$/8(6 .HQ\D&RIIHH&R '()$8/7 *2 *2 '()$8/79$/8(66FKOVVHOZRUW z z )JW6WDQGDUGZHUWHIUDOOH=HLOHQHLQ 6SDOWHQPVVHQEHUHLQHQ6WDQGDUGZHUWYHUIJHQRGHU 18//:HUWH ]XODVVHQ ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Wenn Sie Zeilen in eine Tabelle einfügen, können Sie bei der Eingabe Zeit sparen, indem Sie die Schlüsselwörter DEFAULT oder DEFAULT VALUES in der INSERT-Anweisung angeben. '()$8/76FKOVVHOZRUW 0HWKRGLVFKHU+LQZHLV /HQNHQ6LHGLH$XIPHUN VDPNHLWDXIGLH7HLOV\QWD[ XQGYHUJOHLFKHQ6LHGLH 6FKOVVHOZ|UWHU'()$8/7 XQG'()$8/79$/8(6LQ GHU6\QWD[PLWHLQDQGHU Wenn eine Tabelle über DEFAULT-Einschränkungen verfügt oder wenn eine Tabelle über einen Standardwert verfügt, verwenden Sie das DEFAULTSchlüsselwort in der INSERT-Anweisung, damit SQL Server den Standardwert für Sie liefert. Berücksichtigen Sie beim Verwenden des DEFAULT-Schlüsselwortes die folgenden Aspekte und Richtlinien: SQL Server fügt einen NULL-Wert für Spalten ein, die NULL-Werte zulassen und nicht über Standardwerte verfügen. Wenn Sie das DEFAULT-Schlüsselwort verwenden und die Spalten nicht über Standardwerte verfügen oder NULL-Werte nicht zulassen, schlägt die INSERT-Anweisung fehl. Das DEFAULT-Schlüsselwort kann nicht für eine Spalte verwendet werden, die über die IDENTITY-Eigenschaft (ein automatisch zugewiesener und sich erhöhender Schrittweitenwert) verfügt. Geben Sie daher keine Spalten mit der IDENTITY-Eigenschaft in der column_list oder VALUES-Klausel an. SQL Server fügt den nächsten verfügbaren Wert in Spalten ein, die mit dem Datentyp rowversion definiert wurden. 8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ %HLVSLHO In diesem Beispiel wird eine neue Zeile für die Kenya Coffee Company ohne Verwendung einer column_list eingefügt. Die shippers.shipperid-Spalte verfügt über eine IDENTITY-Eigenschaft und ist daher nicht in der Spaltenliste eingeschlossen. Die phone-Spalte lässt NULL-Werte zu. 86(1RUWKZLQG ,16(57VKLSSHUVFRPSDQ\QDPHSKRQH 9$/8(6 .HQ\D&RIIHH&R '()$8/7 *2 Sie können überprüfen, ob Kenya Coffee Company zur shippers-Tabelle hinzugefügt wurde, indem Sie die folgende Anweisung ausführen. (UJHEQLV 86(1RUWKZLQG 6(/(&7 )520VKLSSHUV 9$/8(6 .HQ\D&RIIHH&R '()$8/7 *2 VKLSSHULG &RPSDQ\1DPH 3KRQH URZVDIIHFWHG 18// .HQ\D&RIIHH&R '()$8/79$/8(66FKOVVHOZRUW Verwenden Sie das DEFAULT VALUES-Schlüsselwort, um eine ganze Zeile in eine Tabelle einzufügen. Berücksichtigen Sie beim Verwenden des DEFAULT VALUES-Schlüsselwortes die folgenden Aspekte und Richtlinien: SQL Server fügt einen NULL-Wert für Spalten ein, die NULL-Werte zulassen und über nicht über einen Standardwert verfügen. Wenn Sie das DEFAULT VALUES-Schlüsselwort verwenden und die Spalten nicht über Standardwerte verfügen oder NULL-Werte nicht zulassen, schlägt die INSERT-Anweisung fehl. SQL Server fügt den nächsten verfügbaren Wert in Spalten ein, für die eine IDENTITY-Eigenschaft oder ein Datentyp rowversion definiert wurde. Verwenden Sie das DEFAULT VALUES-Schlüsselwort, um Beispieldaten zu erzeugen und Tabellen mit Standardwerten aufzufüllen. 8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ /|VFKHQYRQ'DWHQ ,QKDOWGLHVHU)ROLH *HEHQ6LHHLQH(LQIKUXQJ LQGLH7KHPHQGLHVHV$E VFKQLWWV 9HUZHQGHQGHU'(/(7($QZHLVXQJ (LQVWLHJ 9HUZHQGHQGHU7581&$7(7$%/($QZHLVXQJ /|VFKHQYRQ=HLOHQDQKDQGDQGHUHU7DEHOOHQ 6LHN|QQHQDQJHEHQ ZHOFKH'DWHQJHO|VFKW ZHUGHQVROOHQ ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Sie können angeben, welche Daten gelöscht werden sollen. Die DELETE-Anweisung entfernt eine oder mehrere Zeilen aus einer Tabelle oder Sicht mit Hilfe einer Transaktion. Sie können angeben, welche Zeilen SQL Server löscht, indem Sie die Zieltabelle filtern, eine JOIN-Klausel oder eine Unterabfrage verwenden. Mit der TRUNCATE TABLE-Anweisung werden alle Zeilen aus einer Tabelle entfernt, ohne eine Transaktion zu verwenden. 8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ 9HUZHQGHQGHU'(/(7($QZHLVXQJ ,QKDOWGLHVHU)ROLH (UOlXWHUQ6LHZLH=HLOHQLQ 7DEHOOHQJHO|VFKWZHUGHQ (LQVWLHJ 'LH'(/(7($QZHLVXQJHQWIHUQWHLQHRGHUPHKUHUH =HLOHQDXV7DEHOOHQVRIHUQGLH:+(5(.ODXVHOQLFKW YHUZHQGHWZLUG -HGHJHO|VFKWH=HLOHZLUGLP7UDQVDNWLRQVSURWRNROO SURWRNROOLHUW 'LH'(/(7($QZHLVXQJ HQWIHUQW=HLOHQDXV7DEHOOHQ 86(1RUWKZLQG 86(1RUWKZLQG '(/(7(RUGHUV '(/(7(RUGHUV :+(5('$7(',))0217+VKLSSHGGDWH*(7'$7(! :+(5('$7(',))0217+VKLSSHGGDWH*(7'$7(! *2 *2 ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Die DELETE-Anweisung entfernt Zeilen aus Tabellen. Verwenden Sie die DELETE-Anweisung, um eine oder mehrere Zeilen aus einer Tabelle zu entfernen. 7HLOV\QWD[ DELETE [from] {table_name|view_name} WHERE search_conditions %HLVSLHO In diesem Beispiel werden alle Datensätze zu Bestellungen gelöscht, die mindestens sechs Monate alt sind. 86(1RUWKZLQG '(/(7(RUGHUV :+(5('$7(',))0217+VKLSSHGGDWH*(7'$7(! *2 $QPHUNXQJ Dies wird nicht für die Northwind-Datenbank ausgeführt, wenn die Bedingung gilt, da dadurch die Fremdschlüsseleinschränkung zwischen Orders und Order Details verletzt wird. Unter normalen Umständen ist es nicht möglich, Zeilen aus einer Tabelle zu löschen oder eine TRUNCATE TABLE-Anweisung für eine Tabelle mit Fremdschlüsseleinschränkung auszuführen. Berücksichtigen Sie beim Verwenden der DELETE-Anweisung die folgenden Aspekte: Mit der DELETE-Anweisung werden entsprechend der Bedingung in der WHERE-Klausel eine oder mehrere Zeilen in einer Tabelle gelöscht, falls eine solche Bedingung angegeben wurde. Anderenfalls werden durch die DELETE-Anweisung alle Zeilen entfernt. Jede gelöschte Zeile wird im Transaktionsprotokoll protokolliert. 8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ 9HUZHQGHQGHU7581&$7(7$%/($QZHLVXQJ ,QKDOWGLHVHU)ROLH %HVFKUHLEHQ6LHZLHGLH 7581&$7(7$%/($Q ZHLVXQJYHUZHQGHWZLUG 'LH7581&$7(7$%/($QZHLVXQJHQWIHUQWDOOH=HLOHQ DXVHLQHU7DEHOOH 64/6HUYHUEHKlOWGLH7DEHOOHQVWUXNWXUXQGGLH ]XJHRUGQHWHQ2EMHNWHEHL 1XU GLH)UHLJDEH YRQ'DWHQVHLWHQ ZLUG LP 7UDQVDNWLRQVSURWRNROOSURWRNROOLHUW (LQVWLHJ 'LH7581&$7(7$%/( $QZHLVXQJHQWIHUQWDOOH 'DWHQDXVHLQHU7DEHOOH 86(1RUWKZLQG 86(1RUWKZLQG 7581&$7(7$%/(RUGHUV 7581&$7(7$%/(RUGHUV *2 *2 ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Die TRUNCATE TABLE-Anweisung entfernt alle Daten aus einer Tabelle. Verwenden Sie die TRUNCATE TABLE-Anweisung, um ein nicht protokolliertes Löschen aller Zeilen durchzuführen. 6\QWD[ TRUNCATE TABLE [[database.]owner.]table_name %HLVSLHO In diesem Beispiel werden alle Daten aus der orders-Tabelle entfernt. 86(1RUWKZLQG 7581&$7(7$%/(RUGHUV *2 :HLWHUH,QIRUPDWLRQHQ 'LH7581&$7(7$%/( $QZHLVXQJNDQQQLFKWDXI HLQH7DEHOOHDQJHZHQGHW ZHUGHQDXIGLHPLWHLQHU )25(,*1.(<(LQVFKUlQ NXQJYHUZLHVHQZLUG9HU ZHQGHQ6LHVWDWWGHVVHQGLH '(/(7($QZHLVXQJRKQH HLQH:+(5(.ODXVHO $QPHUNXQJ Aufgrund einer Fremdschlüsseleinschränkung zwischen Orders und Order Details dient dieses Beispiel nur der Erläuterung und führt zu einem Fehler. Berücksichtigen Sie beim Verwenden der TRUNCATE TABLE-Anweisung die folgenden Aspekte: SQL Server löscht alle Zeilen, behält aber die Tabellenstruktur und die zugeordneten Objekte bei. Die TRUNCATE TABLE-Anweisung wird schneller ausgeführt als die DELETE-Anweisung, da SQL Server nur die Freigabe von Datenseiten protokolliert. Wenn eine Tabelle über eine IDENTITY-Spalte verfügt, setzt die TRUNCATE TABLE-Anweisung den Ausgangswert zurück. 8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ /|VFKHQYRQ=HLOHQDQKDQGDQGHUHU7DEHOOHQ ,QKDOWGLHVHU)ROLH 9HUDQVFKDXOLFKHQ6LHZLH 'DWHQLQHLQHU7DEHOOHDQ KDQGYRQ'DWHQLQDQGHUHQ 7DEHOOHQJHO|VFKWZHUGHQ 9HUZHQGHQHLQHU]XVlW]OLFKHQ)520.ODXVHO z (LQVWLHJ 9HUZHQGHQ6LHGLH '(/(7($QZHLVXQJPLW HLQHU]XVlW]OLFKHQ)520 .ODXVHORGHUHLQHU8QWHU DEIUDJHLQGHU:+(5( .ODXVHOXP'DWHQLQDQGH UHQ7DEHOOHQ]XEHUSUIHQ XQG]XHQWVFKHLGHQREHLQH =HLOHJHO|VFKWZHUGHQPXVV z 'LHHUVWH)520.ODXVHO]HLJWGLH]XlQGHUQGH 7DEHOOH DQ 'LH]ZHLWH)520.ODXVHONDQQ(LQVFKUlQNXQJVNULWHULHQ IUGLH'(/(7($QZHLVXQJDQJHEHQ $QJHEHQYRQ%HGLQJXQJHQLQGHU:+(5(.ODXVHO z 8QWHUDEIUDJHQEHVWLPPHQZHOFKH=HLOHQ JHO|VFKW ZHUGHQVROOHQ ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** 0HWKRGLVFKHU+LQZHLV 9HUJOHLFKHQ6LHGLH %HLVSLHOHXQG Verwenden Sie die DELETE-Anweisung mit Verknüpfungen oder Unterabfragen, um anhand von Daten in anderen Tabellen Zeilen aus einer Tabelle zu entfernen. Diese Vorgehensweise ist effizienter als das Schreiben mehrerer einzelner DELETE-Anweisungen für jede Zeile. 9HUZHQGHQHLQHU]XVlW]OLFKHQ)520.ODXVHO In einer DELETE-Anweisung verweist die WHERE-Klausel auf Werte in der Tabelle selbst und wird verwendet, um zu entscheiden, welche Zeilen gelöscht werden sollen. Wenn Sie eine zusätzliche FROM-Klausel verwenden, können Sie auf andere Tabellen verweisen, um diese Entscheidung zu treffen. Berücksichtigen Sie beim Verwenden der DELETE-Anweisung mit einer zusätzlichen FROM-Klausel die folgenden Aspekte: 6\QWD[ Die erste FROM-Klausel zeigt die Tabelle an, in der die Zeilen gelöscht werden. Die zweite FROM-Klausel kann eine Verknüpfung beinhalten und als Einschränkungskriterien für die DELETE-Anweisung dienen. DELETE [FROM] {table_name | view_name} [FROM {<table_source>} [,…n]] [WHERE search_conditions ] 8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ %HLVSLHO 0HWKRGLVFKHU+LQZHLV 9HUZHLVHQ6LHDXIGLH ]XVlW]OLFKH)520.ODXVHO LQGHU$QZHLVXQJ In diesem Beispiel wird eine Verknüpfungsoperation mit der DELETE-Anweisung verwendet, um aus der order details-Tabelle Zeilen für Bestellungen zu entfernen, die am 14.4.1998 entgegengenommen wurden. 86(1RUWKZLQG '(/(7()520>2UGHU'HWDLOV@ )520RUGHUV$6R ,11(5-2,1>RUGHUGHWDLOV@$6RG 21R2UGHU,' RG2UGHU,' :+(5(2UGHU'DWH *2 $QJHEHQYRQ%HGLQJXQJHQLQGHU:+(5(.ODXVHO Es besteht auch die Möglichkeit, Unterabfragen zu verwenden, um zu ermitteln, welche Zeilen in einer Tabelle anhand von Zeilen in einer anderen Tabelle gelöscht werden sollen. Sie können dabei anstelle einer zusätzlichen FROMKlausel die Bedingungen in der WHERE-Klausel angeben. Verwenden Sie eine geschachtelte oder korrelierte Unterabfrage in der WHERE-Klausel, um zu ermitteln, welche Zeilen gelöscht werden sollen. %HLVSLHO In diesem Beispiel werden dieselben Zeilen aus der order details-Tabelle entfernt wie in Beispiel 1, und es wird veranschaulicht, wie Sie eine Verknüpfungsoperation in eine geschachtelte Unterabfrage konvertieren können. 86(1RUWKZLQG '(/(7()520>2UGHU'HWDLOV@ :+(5(RUGHULG,1 6(/(&7RUGHULG )5202UGHUV :+(5(2UGHU'DWH *2 8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ $NWXDOLVLHUHQYRQ'DWHQ ,QKDOWGLHVHU)ROLH *HEHQ6LHHLQH(LQIKUXQJ LQGLH7KHPHQGLHVHV $EVFKQLWWV $NWXDOLVLHUHQYRQ=HLOHQDQKDQGGLHVHU7DEHOOH (LQVWLHJ $NWXDOLVLHUHQYRQ=HLOHQDQKDQGDQGHUHU7DEHOOHQ 'LH83'$7($QZHLVXQJ NDQQ'DWHQZHUWHLQHLQ ]HOQHQ=HLOHQLQ=HLOHQ JUXSSHQRGHULQDOOHQ=HLOHQ HLQHU7DEHOOHRGHU6LFKW lQGHUQ ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Die UPDATE-Anweisung kann Datenwerte in einzelnen Zeilen, in Zeilengruppen oder in allen Zeilen einer Tabelle oder Sicht ändern. Sie können eine Tabelle anhand von Daten in dieser oder in anderen Tabellen aktualisieren. 8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ $NWXDOLVLHUHQYRQ=HLOHQDQKDQGGLHVHU7DEHOOH ,QKDOWGLHVHU)ROLH 9HUDQVFKDXOLFKHQ6LHZLH =HLOHQPLW+LOIHGHU 83'$7($QZHLVXQJ DNWXDOLVLHUWZHUGHQ (LQVWLHJ 0LWGHU83'$7($QZHLVXQJ N|QQHQ6LH'DWHQLQ YRUKDQGHQHQ=HLOHQHLQHU 7DEHOOHlQGHUQ 'LH:+(5(.ODXVHOJLEWGLH]XlQGHUQGHQ=HLOHQDQ 'LH6(7.ODXVHOJLEWGLHQHXHQ:HUWHDQ 'LH'DWHQW\SHQGHU(LQJDEHZHUWHPVVHQPLWGHQ 'DWHQW\SHQGHU 6SDOWHQNRPSDWLEHOVHLQ $NWXDOLVLHUXQJHQ WUHWHQQLFKWLQ=HLOHQDXIGLH ,QWHJULWlWVHLQVFKUlQNXQJHQYHUOHW]HQ 86(1RUWKZLQG 86(1RUWKZLQG 83'$7(SURGXFWV 83'$7(SURGXFWV 6(7XQLWSULFH 6(7XQLWSULFH XQLWSULFH XQLWSULFH *2 *2 ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Mit der UPDATE-Anweisung werden vorhandene Daten geändert. 7HLOV\QWD[ UPDATE {table_name | view_name} SET {column_name={expression | DEFAULT | NULL} |@variable=expression}[,…n] WHERE {search_conditions} Verwenden Sie die UPDATE-Anweisung, um einzelne Zeilen, Zeilengruppen oder alle Zeilen in einer Tabelle zu ändern. Berücksichtigen Sie beim Aktualisieren von Zeilen die folgenden Aspekte und Richtlinien: %HLVSLHO Geben Sie die zu aktualisierenden Zeilen mit der WHERE-Klausel an. Geben Sie die neuen Werte mit der SET-Klausel an. Überprüfen Sie, ob die Datentypen der Eingabewerte mit den für die Spalten definierten Datentypen kompatibel sind. SQL Server aktualisiert keine Zeilen, die Integritätseinschränkungen verletzen. Die Änderungen werden nicht vorgenommen, und für die Anweisung wird ein Rollback ausgeführt. Sie können Daten jeweils nur in einer Tabelle zur Zeit ändern. Sie können für eine oder mehrere Spalten oder Variablen auch Ausdrücke festlegen. Ein Ausdruck kann beispielsweise eine Berechnung (wie z. B. price * 2) oder die Addition von zwei Spalten sein. Im folgenden Beispiel werden die aktuellen Preise sämtlicher Produkte von Northwind Traders um 10 % erhöht. 86(1RUWKZLQG 83'$7(SURGXFWV 6(7XQLWSULFH XQLWSULFH *2 8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ $NWXDOLVLHUHQYRQ=HLOHQDQKDQGDQGHUHU7DEHOOHQ ,QKDOWGLHVHU)ROLH (UOlXWHUQ6LHZLHPLW+LOIH YRQ9HUNQSIXQJHQRGHU 8QWHUDEIUDJHQ'DWHQLQ HLQHU7DEHOOHDQKDQGYRQ 'DWHQLQHLQHUDQGHUHQ 7DEHOOHDNWXDOLVLHUWZHUGHQ (LQVWLHJ 9HUZHQGHQGHU83'$7($QZHLVXQJ z z 0LWGHU83'$7($QZHLVXQJ N|QQHQ6LH=HLOHQDQKDQG YRQDQGHUHQ7DEHOOHQ DNWXDOLVLHUHQ (UIRUGHUW7DEHOOHQSUlIL[H DXIPHKUGHXWLJHQ 6SDOWHQQDPHQ $QJHEHQGHU]XDNWXDOLVLHUHQGHQ=HLOHQPLW+LOIHYRQ 9HUNQSIXQJHQ z $NWXDOLVLHUWHLQH=HLOHQLH]ZHLPDO 9HUZHQGHQGHU )520.ODXVHO $QJHEHQGHU]XDNWXDOLVLHUHQGHQ=HLOHQPLW+LOIHYRQ 8QWHUDEIUDJHQ z .RUUHOLHUHQ GHU 8QWHUDEIUDJH PLW GHU DNWXDOLVLHUWHQ 7DEHOOH ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Verwenden Sie die UPDATE-Anweisung mit einer FROM-Klausel, um eine Tabelle anhand von Werten aus anderen Tabellen zu ändern. 9HUZHQGHQGHU83'$7($QZHLVXQJ Berücksichtigen Sie beim Verwenden von Verknüpfungen und Unterabfragen mit der UPDATE-Anweisung die folgenden Aspekte und Richtlinien: 7HLOV\QWD[ SQL Server aktualisiert eine Zeile in einer UPDATE-Anweisung nie zweimal. Dies ist eine interne Einschränkung, die den Protokollierungsumfang bei Aktualisierungen reduziert. Verwenden Sie das SET-Schlüsselwort, um die zu aktualisierenden Spalten oder Variablennamen zu benennen. Die Spalten, auf die das SET-Schlüsselwort verweist, müssen eindeutig sein. Beispielsweise können Sie ein Tabellenpräfix verwenden, um Mehrdeutigkeiten auszuschließen. UPDATE {table_name | view_name} SET {column_name={expression | DEFAULT | NULL} |@variable=expression}[,…n] [FROM { <table_source>} ] [WHERE search_conditions] $QJHEHQGHU]XDNWXDOLVLHUHQGHQ=HLOHQPLW+LOIHYRQ 9HUNQSIXQJHQ Verwenden Sie beim Verwenden von Verknüpfungen zum Aktualisieren von Zeilen die FROM-Klausel, um Verknüpfungen in der UPDATE-Anweisung anzugeben. %HLVSLHO 8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ In diesem Beispiel wird eine Verknüpfung zum Aktualisieren der productsTabelle verwendet, indem in der unitprice-Spalte für alle von Zulieferern in den USA gelieferten Produkte 2 $ addiert werden. 83'$7(3URGXFWV 6(78QLW3ULFH 8QLW3ULFH )5203URGXFWV ,11(5-2,1VXSSOLHUV 213URGXFWV6XSSOLHU,' 6XSSOLHUV6XSSOLHU,' :+(5(6XSSOLHUV&RXQWU\ 86$ *2 $QJHEHQGHU]XDNWXDOLVLHUHQGHQ=HLOHQPLW+LOIHYRQ 8QWHUDEIUDJHQ Berücksichtigen Sie beim Verwenden von Unterabfragen zum Aktualisieren von Zeilen die folgenden Aspekte und Richtlinien: %HLVSLHO Sollte die Unterabfrage keinen einzelnen Wert zurückgeben, müssen Sie die Unterabfrage mit den Schlüsselwörtern IN, EXISTS, ANY oder ALL einleiten. Ziehen Sie die Aggregatfunktionen mit korrelierten Unterabfragen in Betracht, da SQL Server die gleiche Zeile in einer UPDATE-Anweisung nie zweimal aktualisiert. In diesem Beispiel wird eine Unterabfrage zum Aktualisieren der productsTabelle verwendet, indem in der unitprice-Spalte für alle von Zulieferern in den USA gelieferten Produkte 2 $ addiert werden. Beachten Sie, dass es für jedes Produkt nur einen Lieferanten gibt. 83'$7(3URGXFWV 6(78QLW3ULFH 8QLW3ULFH :+(5(RUGHULG,1 6(/(&7VXSSOLHULG )520VXSSOLHUV :+(5(FRXQWU\ 86$ *2 8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ %HLVSLHO In diesem Beispiel wird der Gesamtumsatz aus allen Bestellungen der einzelnen Produkte in der products-Tabelle aktualisiert. Pro Produkt können viele Bestellungen existieren. Da SQL Server die gleiche Zeile nie zweimal aktualisiert, müssen Sie eine Aggregatfunktion mit einer korrelierten Unterabfrage verwenden, um die Gesamtzahl der Verkäufe für die einzelnen Produkte zu aktualisieren. Wenn Sie das folgende Beispiel ausführen möchten, müssen Sie der products-Tabelle die todatesales-Spalte mit einem Standardwert von „0“ hinzufügen. 86(1RUWKZLQG 83'$7(3URGXFWV 6(7WRGDWHVDOHV 6(/(&76804XDQWLW\ ,11(5-2,1>RUGHUGHWDLOV@$6RG :+(5(SURGXFWVSURGXFWLG RGSURGXFWLG *2 8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ /HLVWXQJVDVSHNWH ,QKDOWGLHVHU)ROLH %HVFKUHLEHQ6LHGLH /HLVWXQJVDVSHNWHEHLP 9HUZHQGHQYRQ6LFKWHQ 7ULJJHURGHUJHVSHLFKHUWHQ 3UR]HGXUHQ (LQVWLHJ 'DWHQlQGHUXQJHQGLH LQQHUKDOEYRQ7UDQVDNWLRQHQ DXIWUHWHQN|QQHQGLH /HLVWXQJYRQ64/6HUYHU EHHLQIOXVVHQ $OOH 'DWHQlQGHUXQJHQ WUHWHQ LQQHUKDOE HLQHU 7UDQVDNWLRQ DXI (VN|QQHQ 6HLWHQUHVHUYLHUXQJHQHUIRUGHUOLFKZHUGHQ 'DVbQGHUQ YRQLQGL]LHUWHQ 'DWHQ ]LHKW]XVlW]OLFKHQ $XIZDQGQDFKVLFK ,QGL]HVN|QQHQ6XFKNULWHULHQXQWHUVWW]HQ ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** .HUQSXQNWH =XHLQHP=HLWSXQNWNDQQ QXUHLQH7UDQVDNWLRQHLQH EHVWLPPWH=HLOHlQGHUQ (LQHDNWXHOODXVJHIKUWH 7UDQVDNWLRQKLQGHUWDQGHUH 7UDQVDNWLRQHQVRODQJHDQ GHU$XVIKUXQJELVIUVLH HLQ&RPPLWRGHUHLQ 5ROOEDFNDXVJHIKUWZLUG Datenänderungen, die innerhalb von Transaktionen auftreten, können die Leistung von SQL Server beeinflussen. Beachten Sie beim Ändern von Daten Folgendes: Eine Datensperrung während einer einzigen Transaktion kann verhindern, dass andere Transaktionen und Abfragen ausgeführt werden, bevor diese Transaktion abgeschlossen ist. Das Ändern von Tabellen kann die Art und Weise der physischen Datenspeicherung beeinflussen, sodass Seitenreservierungen innerhalb der Transaktion erforderlich werden. Beim Ändern von indizierten Datenspalten können sich die Indizes für diese Spalten als Folge der Transaktion ändern. Das Platzieren von Indizes für Spalten, die in der WHERE-Klausel einer Datenänderungsanweisung verwendet werden, steigert die Leistung. 8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ (PSIRKOHQH0HWKRGHQ ,QKDOWGLHVHU)ROLH /LVWHQ6LHGLHHPSIRKOHQHQ 0HWKRGHQ]XP$XVIKUHQ JUXQGOHJHQGHU$EIUDJHQ DXI (UVWHOOHQ6LHVWHWV]XHUVWHLQH6(/(&7$QZHLVXQJGLHNHLQH (UVWHOOHQ6LHVWHWV]XHUVWHLQH6(/(&7$QZHLVXQJGLHNHLQH 'DWHQlQGHUWEHYRU6LHWDWVlFKOLFK'DWHQlQGHUQ 'DWHQlQGHUWEHYRU6LHWDWVlFKOLFK'DWHQlQGHUQ (LQVWLHJ (UK|KHQ6LHGLH/HVEDUNHLW (UK|KHQ6LHGLH/HVEDUNHLW GHU5HVXOWVHWVLQGHP6LH6SDOWHQ GHU5HVXOWVHWVLQGHP6LH6SDOWHQ QDPHQLQ6SDOWHQDOLDVQDPHQlQGHUQRGHU/LWHUDOHYHUZHQGHQ QDPHQLQ6SDOWHQDOLDVQDPHQlQGHUQRGHU/LWHUDOHYHUZHQGHQ 'LHIROJHQGHQHPSIRKOHQHQ 0HWKRGHQKHOIHQ,KQHQEHLP $XVIKUHQJUXQGOHJHQGHU $EIUDJHQ )JHQ )JHQ 6LH 6LH LPPHUHLQH LPPHUHLQH :+(5(.ODXVHOLQGLH'(/(7( :+(5(.ODXVHOLQGLH'(/(7( XQG XQG 83'$7($QZHLVXQJHLQ 83'$7($QZHLVXQJHLQ ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Die folgenden empfohlenen Methoden helfen Ihnen beim Ausführen grundlegender Abfragen: Erstellen Sie stets zuerst eine SELECT-Anweisung, die keine Daten ändert, bevor Sie tatsächlich Daten ändern. Mit diesem Test überprüfen Sie, welche Zeilen Ihre INSERT-, UPDATE- oder DELETE-Anweisung betrifft. Erhöhen Sie die Lesbarkeit der Resultsets, indem Sie Spaltennamen in Spaltenaliasnamen ändern oder Literale verwenden, um Resultsetwerte zu ersetzen. Diese Formatierungsoptionen ändern die Datendarstellung, nicht die Daten selbst. SQL Server löscht oder aktualisiert alle Zeilen in einer Tabelle, es sei denn, Sie fügen eine WHERE-Klausel in die DELETE- oder UPDATE-Anweisung ein. Zusätzliche Informationen zu den folgenden Themen erhalten Sie in der SQL Server-Onlinedokumentation. Thema Suchbegriff Verwenden von Zeichenfolgen “LIKE-Vergleich” Sortieren von Resultsets “Sortierreihenfolge” 8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ hEXQJVHLQKHLW$bQGHUQYRQ'DWHQ ,QKDOWGLHVHU)ROLH *HEHQ6LHHLQH(LQIKUXQJ LQGLHhEXQJVHLQKHLW (LQVWLHJ ,QGLHVHUhEXQJVHLQKHLW lQGHUQ6LHYRUKDQGHQH 'DWHQPLW+LOIHYRQ ,16(57'(/(7(XQG 83'$7($QZHLVXQJHQ ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** (UOlXWHUQ6LHGLH/HUQ]LHOH GHUhEXQJVHLQKHLW /HUQ]LHOH Am Ende dieser Übungseinheit werden Sie in der Lage sein, die folgenden Aufgaben auszuführen: Ändern von Daten in Tabellen mit Hilfe von INSERT-, DELETE - und UPDATE-Anweisungen. Einfügen von Zeilen in eine Tabelle mit Hilfe der Schlüsselwörter DEFAULT und DEFAULT VALUES. Ändern von Daten anhand von Daten in anderen Tabellen. 9RUDXVVHW]XQJHQ Um diese Übungseinheit zu bearbeiten, benötigen Sie Folgendes: Die Skriptdateien für diese Übungseinheit, die sich in C:\Moc\2316B\Labfiles\L07 befinden. Die Antwortdateien für diese Übungseinheit, die sich in C:\Moc\2316B\Labfiles\L07\Answers befinden. Die library-Datenbank muss installiert sein. (LQULFKWHQGHUhEXQJVHLQKHLW Nicht erforderlich. :HLWHUH,QIRUPDWLRQHQ Wenn Sie Hilfe bei der Ausführung von Dateien benötigen, suchen Sie in der Hilfe zu SQL Query Analyzer nach „Ausführen einer Abfrage“. Daneben sind die folgenden Informationsquellen verfügbar: Das library-Datenbankschema. Die Microsoft SQL Server-Onlinedokumentation. 8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ 6]HQDULR Der Aufbau des Schulungsraumes soll die Organisation des weltweit agierenden Handelsunternehmens Northwind Traders widerspiegeln. Das Unternehmen hat den fiktiven Domänennamen nwtraders.msft. Der primäre DNS-Server für nwtraders.msft ist der Kursleitercomputer, dessen Internetprotokolladresse (IP-Adresse) 192.168.x.200 lautet (wobei x die zugewiesene Schulungsraumnummer ist). Der Name des Kursleitercomputers ist London. Die folgende Tabelle stellt den Benutzernamen, den Computernamen und die IP-Adresse für jeden Kursteilnehmercomputer in der fiktiven Domäne nwtraders.msft bereit. Suchen Sie den Benutzernamen Ihres Computers, und notieren Sie ihn. Benutzername Computername IP-Adresse SQLAdmin1 Vancouver 192.168.x.1 SQLAdmin2 Denver 192.168.x.2 SQLAdmin3 Perth 192.168.x.3 SQLAdmin4 Brisbane 192.168.x.4 SQLAdmin5 Lisbon 192.168.x.5 SQLAdmin6 Bonn 192.168.x.6 SQLAdmin7 Lima 192.168.x.7 SQLAdmin8 Santiago 192.168.x.8 SQLAdmin9 Bangalore 192.168.x.9 SQLAdmin10 Singapore 192.168.x.10 SQLAdmin11 Casablanca 192.168.x.11 SQLAdmin12 Tunis 192.168.x.12 SQLAdmin13 Acapulco 192.168.x.13 SQLAdmin14 Miami 192.168.x.14 SQLAdmin15 Auckland 192.168.x.15 SQLAdmin16 Suva 192.168.x.16 SQLAdmin17 Stockholm 192.168.x.17 SQLAdmin18 Moscow 192.168.x.18 SQLAdmin19 Caracas 192.168.x.19 SQLAdmin20 Montevideo 192.168.x.20 SQLAdmin21 Manila 192.168.x.21 SQLAdmin22 Tokyo 192.168.x.22 SQLAdmin23 Khartoum 192.168.x.23 SQLAdmin24 Nairobi 192.168.x.24 9HUDQVFKODJWH=HLWIUGLHhEXQJVHLQKHLW0LQXWHQ 8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ hEXQJ 9HUZHQGHQGHU,16(57$QZHLVXQJ In dieser Übung fügen Sie mit der INSERT-Anweisung Zeilen zu Tabellen in der library-Datenbank hinzu. Dann führen Sie eine Abfrage aus, um zu überprüfen, ob die neuen Zeilen zu den Tabellen hinzugefügt wurden. C:\Moc\2316B\Labfiles\L07\Answers enthält die vollständigen Skripts für diese Übung. Ç So fügen Sie Werte in die „item“-Tabelle ein In diesem Verfahren fügen Sie Zeilen in die item-Tabelle ein, die jeweils ein Buch aus der Bibliothek identifizieren. 1. Melden Sie sich an der Schulungsraumdomäne nwtraders mit Hilfe der Informationen in der folgenden Tabelle an. Option Eingabe Benutzername SQLAdminx (wobei x die Ihrem Computernamen zugewiesene Nummer ist, wie in der Schulungsraumdomäne nwtraders.msft festgelegt) Kennwort password 2. Öffnen Sie SQL Query Analyzer, und melden Sie sich, falls erforderlich, am (lokalen) Server mit Microsoft Windows®-Authentifizierung an. Sie haben die Berechtigung, sich anzumelden und SQL Server zu verwalten, da Sie als SQLAdminx angemeldet sind - einem Mitglied der lokalen Windows 2000-Gruppe Administratoren. Alle Mitglieder dieser Gruppe werden automatisch der sysadmin-Rolle von SQL Server zugeordnet. 3. Klicken Sie in der Liste DB auf library. 4. Fügen Sie zwei Zeilen in die item-Tabelle für den Buchtitel mit der Nummer 8, The Cherry Orchard, ein. Geben Sie die Namen der Spalten an, für die Sie Werte bereitstellen. Definieren sie den Titel in der ersten Zeile als gebundene Ausgabe (HARDBACK) und den Titel in der zweiten Zeile als Taschenbuch (SOFTBACK). Verwenden Sie die nachstehenden Werte. Answer_InsValues1.sql ist ein vollständiges Skript für diesen Schritt. Spaltenname Daten isbn 10001 für HARDBACK; 10101 für SOFTBACK title_no 8 cover HARDBACK bzw. SOFTBACK loanable Y translation ENGLISH 86(OLEUDU\ ,16(57LWHPLVEQWLWOHBQRFRYHUORDQDEOHWUDQVODWLRQ 9$/8(6 +$5'%$&. < (1*/,6+ ,16(57LWHPLVEQWLWOHBQRFRYHUORDQDEOHWUDQVODWLRQ 9$/8(6 62)7%$&. < (1*/,6+ *2 5. Führen Sie die Abfrage aus, und überprüfen Sie, ob zwei Zeilen eingefügt wurden. 8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ Ç So fügen Sie Werte in die „copy“-Tabelle ein In diesem Verfahren fügen Sie Zeilen in die copy-Tabelle ein, die jeweils ein Buch aus der Bibliothek identifizieren. 1. Fügen Sie eine Zeile zu der copy-Tabelle für die gebundene Ausgabe hinzu, die Sie in Schritt 4 hinzugefügt haben. Verwenden Sie die nachstehenden Werte. Answer_InsValues2.sql ist ein vollständiges Skript für diesen Schritt. Spaltenname Daten isbn 10001 (die ISBN-Nummer für die gebundene Ausgabe, die Sie in Schritt 1 hinzugefügt haben) copy_no 1 title_no 8 (die Titelnummer von The Cherry Orchard) on_loan N 86(OLEUDU\ ,16(57FRS\LVEQFRS\BQRWLWOHBQRRQBORDQ 9$/8(6 1 *2 2. Führen Sie die Abfrage aus, und überprüfen Sie, ob eine einzelne Zeile eingefügt wurde. Ç So bestimmen Sie die Sprache eines Titels In diesem Verfahren schreiben Sie eine Abfrage, die die Sprache zurückgibt, in die ein Titel übersetzt wurde. 1. Schreiben Sie eine Abfrage, die die Sprache eines der Titel zurückgibt, die Sie in Schritt 4 in die item-Tabelle eingefügt haben. Answer_Translate.sql ist ein vollständiges Skript für diesen Schritt. 86(OLEUDU\ 6(/(&7WUDQVODWLRQ )520LWHP :+(5(LVEQ *2 2. Führen Sie die Abfrage aus, um zu überprüfen, ob sie das gewünschte Ergebnis zurückgibt. 8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ hEXQJ 9HUZHQGHQGHU,16(57$QZHLVXQJPLWGHP'()$8/7 6FKOVVHOZRUW In dieser Übung verwenden Sie die INSERT-Anweisung mit dem DEFAULTSchlüsselwort, um zwei Zeilen zur title-Tabelle hinzuzufügen und Teildaten für Spalten bereitzustellen, die NULL-Werte zulassen oder über Standardwerte verfügen. C:\Moc\2316B\Labfiles\L07\Answers enthält die vollständigen Skripts für diese Übung. Ç So ermitteln Sie, welche Spalten NULL-Werte zulassen In diesem Verfahren ermitteln Sie, welche Spalten NULL-Werte zulassen. 1. Führen Sie die gespeicherte Systemprozedur sp_help aus, um zu ermitteln, welche Spalten in der title-Tabelle NULL-Werte zulassen. Sie brauchen keine Werte für Spalten anzugeben, die NULL-Werte zulassen, über Standardwerte verfügen oder die IDENTITY-Eigenschaft aufweisen. Answer_WhichNull.sql ist ein vollständiges Skript für diesen Schritt. 86(OLEUDU\ (;(&VSBKHOSWLWOH *2 2. Überprüfen Sie das zweite zurückgegebene Ergebnis, um zu ermitteln, welche Spalten NULL-Werte zulassen. Ç So fügen Sie Werte in die „title“-Tabelle ein In diesem Verfahren fügen Sie Werte in die title-Tabelle ein. 1. Fügen Sie eine Zeile in die title-Tabelle für das Buch The Art of Lawn Tennis von William T. Tilden ein. Verwenden Sie das DEFAULTSchlüsselwort für Spalten, die NULL-Werte zulassen oder Standardwerte besitzen. Geben Sie keinen Wert für die title_no-Spalte an, da diese Spalte über die IDENTITY-Eigenschaft verfügt. Answer_InsDefault1.sql ist ein vollständiges Skript für diesen Schritt. 86(OLEUDU\ ,16(57WLWOHWLWOHDXWKRUV\QRSVLV 9$/8(6 7KH$UWRI/DZQ7HQQLV :LOOLDP77LOGHQ '()$8/7 *2 2. Führen Sie die Abfrage aus, und überprüfen Sie, ob eine einzelne Zeile eingefügt wurde. Ç So ermitteln Sie den zuletzt verwendeten Identitätswert In diesem Verfahren ermitteln Sie den zuletzt verwendeten Identitätswert. 1. Schreiben Sie eine Abfrage, mit der die Nummer des Buchtitels (title_no) bestimmt wird, den Sie in Schritt 1 des vorherigen Verfahrens hinzugefügt haben. Answer_Identity.sql ist ein vollständiges Skript für diesen Schritt. 86(OLEUDU\ 6(/(&7##LGHQWLW\ *2 2. Führen Sie die Abfrage aus, und notieren Sie den zurückgegebenen Wert. 8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ Ç So rufen Sie die zuletzt in die „title“-Tabelle eingefügte Zeile ab In diesem Verfahren rufen Sie die Zeile ab, die zuletzt in die title-Tabelle eingefügt wurde. 1. Schreiben Sie eine Abfrage, die überprüft, ob der neue Titel zur titleTabelle hinzugefügt wurde. Verwenden Sie für die title_no-Spalte den Wert, der in Schritt 1 des vorherigen Verfahrens zurückgegeben wurde. Answer_LastRow.sql ist ein vollständiges Skript für diesen Schritt. 86(OLEUDU\ 6(/(&7 )520WLWOH :+(5(WLWOHBQR ##LGHQWLW\ *2 2. Führen Sie die Abfrage aus, um zu überprüfen, ob sie das gewünschte Ergebnis zurückgibt. Ç So fügen Sie weitere Werte in die „title“-Tabelle ein In diesem Verfahren fügen Sie weitere Werte in die title-Tabelle ein. 1. Fügen Sie eine Zeile in die title-Tabelle für das Buch Riders of the Purple Sage von Zane Grey ein. Geben Sie eine column_list und Werte für Spalten an, die NULL-Werte nicht zulassen oder nicht über Standardwerte verfügen. Answer_InsValues3.sql ist ein vollständiges Skript für diesen Schritt. 86(OLEUDU\ ,16(57WLWOHWLWOHDXWKRU 9$/8(6 5LGHUVRIWKH3XUSOH6DJH =DQH*UH\ *2 2. Führen Sie die Abfrage aus, und überprüfen Sie, ob eine einzelne Zeile eingefügt wurde. Ç So überprüfen Sie, ob Werte in die „title“-Tabelle eingefügt wurden In diesem Verfahren überprüfen Sie, ob Werte in die title-Tabelle eingefügt wurden. 1. Schreiben Sie eine Abfrage, die überprüft, ob der neue Titel und der neue Autor zur title-Tabelle hinzugefügt wurden, und führen Sie die Abfrage aus. Answer_ChkValues3.sql ist ein vollständiges Skript für diesen Schritt. 86(OLEUDU\ 6(/(&7 )520WLWOH :+(5(WLWOH 5LGHUVRIWKH3XUSOH6DJH *2 2. Führen Sie die Abfrage aus, um zu überprüfen, ob sie das gewünschte Ergebnis zurückgibt. 8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ hEXQJ 9HUZHQGHQGHU,16(57$QZHLVXQJPLWGHP'()$8/79$/8(6 6FKOVVHOZRUW In dieser Übung verwenden Sie die INSERT-Anweisung mit dem DEFAULT VALUES-Schlüsselwort, um Zeilen zu einer Tabelle hinzuzufügen, ohne Werte bereitzustellen. Zuerst erstellen Sie eine Beispieltabelle in der library-Datenbank und arbeiten mit dieser Tabelle. C:\Moc\2316B\Labfiles\L07\Answers enthält die vollständigen Skripts für diese Übung. Ç So erstellen Sie die Beispieltabelle „sample1“ In diesem Verfahren erstellen Sie eine neue Tabelle in der library-Datenbank, die NULL-Werte zulässt und für bestimmte Spalten Standardwerte angibt. 1. Führen Sie das Skript C:\Moc\2316B\Labfiles\L07\MakeSample1.sql aus, um eine neue Tabelle mit dem Namen sample1 in der library-Datenbank mit den folgenden Merkmalen zu erstellen. Spaltenname Datentyp IDENTITY-Eigenschaft? NULL zulässig? Cust_id Int Ja (100,5) Nein Name char(10) Nein Ja 86(OLEUDU\ &5($7(7$%/(VDPSOH &XVWBLGLQW12718//,'(17,7< 1DPHFKDU18// *2 2. Führen Sie die Abfrage aus, um zu überprüfen, ob sie die sample1-Tabelle erstellt. Ç So fügen Sie eine Zeile mit Standardwerten in die „sample1“-Tabelle ein In diesem Verfahren fügen Sie eine Zeile mit Standardwerten in die sample1Tabelle mit Hilfe des DEFAULT VALUES-Schlüsselwortes ein. Dann schreiben Sie eine Abfrage, um zu überprüfen, ob die neuen Zeilen zur Tabelle hinzugefügt wurde, und führen die Abfrage aus. Answer_InsDefault2.sql ist ein vollständiges Skript für dieses Verfahren. 1. Schreiben Sie eine Abfrage, die eine neue Zeile in die sample1-Tabelle einfügt, ohne die Spaltennamen anzugeben. Verwenden Sie das DEFAULT VALUES-Schlüsselwort mit der INSERT-Anweisung. 86(OLEUDU\ ,16(57VDPSOH '()$8/79$/8(6 *2 2. Führen Sie die Abfrage aus, und überprüfen Sie, ob eine einzelne Zeile eingefügt wurde. 8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ Ç So überprüfen Sie, ob Werte in die „sample1“-Tabelle eingefügt wurden In diesem Verfahren überprüfen Sie, ob Werte in die sample1-Tabelle eingefügt wurden. 1. Schreiben Sie eine Abfrage, die überprüft, ob die neue Zeile zur sample1Tabelle hinzugefügt wurde. Answer_ChkDefault2.sql ist ein vollständiges Skript für dieses Verfahren. 86(OLEUDU\ 6(/(&7 )520VDPSOH *2 2. Führen Sie die Abfrage aus, und vergleichen Sie das Ergebnis mit den für die Tabelle definierten Standardwerten. (UJHEQLV Das Ergebnis ähnelt dem folgenden Resultset. FXVWBLG QDPH URZVDIIHFWHG 18// 8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ hEXQJ 9HUZHQGHQGHU'(/(7($QZHLVXQJ In dieser Übung verwenden Sie die DELETE-Anweisung, um das Buch mit der ISBN-Nummer 10101 und der Titelnummer 8 aus der item-Tabelle in der library-Datenbank zu entfernen. C:\Moc\2316B\Labfiles\L07\Answers enthält die vollständigen Skripts für diese Übung. Ç So rufen Sie eine Datenzeile ab, die Sie in der „item“-Tabelle löschen möchten In diesem Verfahren rufen Sie eine Datenzeile ab, die Sie in der item-Tabelle löschen möchten. Answer_SelDelete1.sql ist ein vollständiges Skript für dieses Verfahren. 1. Schreiben Sie eine Abfrage, die die Zeile aus der item-Tabelle zurückgibt, durch die die Taschenbuchausgabe (isbn 10101) von The Cherry Orchard (title_no 8) identifiziert wird. 86(OLEUDU\ 6(/(&7 )520LWHP :+(5(LVEQ $1'WLWOHBQR *2 2. Führen Sie die Abfrage aus, um zu überprüfen, ob sie das gewünschte Ergebnis zurückgibt. Ç So löschen Sie eine bestimmte Datenzeile in der „item“-Tabelle In diesem Verfahren löschen Sie eine bestimmte Datenzeile in der itemTabelle. Answer_Delete1.sql ist ein vollständiges Skript für dieses Verfahren. 1. Ändern Sie die Abfrage aus Schritt 1 des vorherigen Verfahrens so, dass die Zeile in der item-Tabelle gelöscht wird, die die Taschenbuchausgabe (isbn 10101) von The Cherry Orchard (title_no 8) identifiziert. 86(OLEUDU\ '(/(7()520LWHP :+(5(LVEQ $1'WLWOHBQR *2 2. Führen Sie die Abfrage aus, und überprüfen Sie, ob eine Zeile in der itemTabelle gelöscht wurde. 8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ hEXQJ 9HUZHQGHQGHU83'$7($QZHLVXQJ In dieser Übung ändern Sie den Nachnamen des Mitglieds mit der Nummer 507 in der member-Tabelle der library-Datenbank. C:\Moc\2316B\Labfiles\L07\Answers enthält die vollständigen Skripts für diese Übung. Ç So rufen Sie eine Datenzeile ab, die Sie in der „member“-Tabelle aktualisieren möchten In diesem Verfahren rufen Sie eine Datenzeile ab, die Sie in der memberTabelle aktualisieren möchten. Answer_SelUpdate1.sql ist ein vollständiges Skript für dieses Verfahren. 1. Schreiben Sie eine Abfrage, die den Nachnamen des Mitglieds mit der Nummer 507 in der member-Tabelle abruft. 86(OLEUDU\ 6(/(&7 )520PHPEHU :+(5(PHPEHUBQR *2 2. Führen Sie die Abfrage aus, um zu überprüfen, ob sie das gewünschte Ergebnis zurückgibt. Ç So aktualisieren Sie eine bestimmte Datenzeile in der „member“Tabelle In diesem Verfahren aktualisieren Sie eine bestimmte Datenzeile in der member-Tabelle. Answer_Update1.sql ist ein vollständiges Skript für dieses Verfahren. 1. Schreiben Sie eine Abfrage, die den Nachnamen des Mitglieds mit der Nummer 507 in der member-Tabelle durch einen Namen Ihrer Wahl ersetzt. 86(OLEUDU\ 83'$7(PHPEHU 6(7ODVWQDPH %(1621 :+(5(PHPEHUBQR *2 2. Führen Sie die Abfrage aus, und überprüfen Sie, ob eine Zeile in der member-Tabelle aktualisiert wurde. 8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ hEXQJ bQGHUQYRQ7DEHOOHQDQKDQGYRQ'DWHQLQDQGHUHQ7DEHOOHQ In dieser Übung werden Sie Abfragen erstellen, die Werte aus Tabellen der Datenbank in eine vorhandene Tabelle einfügen. Außerdem werden Sie Zeilen in einer Tabelle anhand von Kriterien in anderen Tabellen löschen oder aktualisieren. C:\Moc\2316B\Labfiles\L07\Answers enthält die vollständigen Skripts für diese Übung. Ç So fügen Sie der Datenbank ein neues jugendliches Mitglied hinzu In diesem Verfahren fügen Sie der library-Datenbank ein neues jugendliches Mitglied hinzu. 1. Überprüfen Sie die Skriptdatei C:\Moc\2316B\Labfiles\L07\AddJuvenile.sql, und führen Sie sie aus, um ein neues jugendliches Mitglied zur library-Datenbank hinzuzufügen. Für das Hinzufügen eines neuen jugendlichen Mitglieds sind zwei INSERTAnweisungen erforderlich. Deshalb wird dieser Vorgang als Transaktion behandelt. Anstatt den von der IDENTITY-Eigenschaft gelieferten Wert zu verwenden, wird mit der SET IDENTITY_INSERT-Anweisung für die member.member_no-Spalte ein bestimmter Wert geliefert. 2. Führen Sie die Abfrage aus, und überprüfen Sie, ob in zwei Tabellen jeweils eine Zeile eingefügt wurde. Ç So bestimmen Sie, welche Datensätze aus der „juvenile“-Tabelle in die „adult“-Tabelle verschoben werden müssen In diesem Verfahren rufen Sie Daten aus den adult- und juvenile-Tabellen für alle jugendlichen Mitglieder über 18 Jahren ab. Answer_SelNewAdult.sql ist ein vollständiges Skript für dieses Verfahren. 1. Schreiben Sie eine SELECT-Anweisung, die die member_no-Spalte aus der juvenile-Tabelle und die Spalten street, city, state, zip und phone_no aus der adult-Tabelle zurückgibt. Rufen Sie in der Abfrage außerdem mit dem folgenden Ausdruck das heutige Datum in einem Jahr ab: '$7($''<<*(7'$7( Die letzte Spalte wird später verwendet, um für die adult.expr_date-Spalte einen Wert zu liefern. Diese SELECT-Anweisung verknüpft die juvenileTabelle mit der member-Tabelle, also juvenile.adult_member_no = adult.member_no. 8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ Fügen Sie eine WHERE-Klausel ein, damit nur die Zeilen derjenigen Mitglieder aus der juvenile-Tabelle hinzugefügt werden, die über 18 Jahre alt sind. Verwenden Sie in der WHERE-Klausel die DATEADD-Funktion in einem Ausdruck. Wenn Sie weitere Informationen benötigen, suchen Sie in der Onlinedokumentation unter „DATEADD“. 86(OLEUDU\ 6(/(&7MXPHPEHUBQRDGVWUHHWDGFLW\DGVWDWH DG]LSDGSKRQHBQR'$7($''<<*(7'$7( )520MXYHQLOH$6MX ,11(5-2,1DGXOW$6DG 21MXDGXOWBPHPEHUBQR DGPHPEHUBQR :+(5('$7($''<<MXELUWKBGDWH*(7'$7( *2 2. Führen Sie die Abfrage aus, um zu überprüfen, ob sie das gewünschte Ergebnis zurückgibt. Achten Sie darauf, welche member_no-Werte zurückgegeben werden. Ç So fügen Sie Zeilen aus der „juvenile“-Tabelle in die „adult“-Tabelle ein 1. Schreiben Sie eine INSERT-Anweisung, um Zeilen zur adult-Tabelle hinzuzufügen. Verwenden Sie hierbei die SELECT-Anweisung, die Sie in Schritt 1 des vorherigen Verfahrens erstellt haben. Answer_InsNewAdult.sql ist ein vollständiges Skript für dieses Verfahren. 86(OLEUDU\ ,16(57DGXOWPHPEHUBQRVWUHHWFLW\VWDWH ]LSSKRQHBQRH[SUBGDWH 6(/(&7MXPHPEHUBQRDGVWUHHWDGFLW\DGVWDWH DG]LSDGSKRQHBQR'$7($''<<*(7'$7( )520MXYHQLOH$6MX ,11(5-2,1DGXOW$6DG 21MXDGXOWBPHPEHUBQR DGPHPEHUBQR :+(5('$7($''<<MXELUWKBGDWH*(7'$7( *2 2. Führen Sie die Abfrage aus, und überprüfen Sie, ob eine Zeile eingefügt wurde. 8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ Ç So überprüfen Sie, ob ein bestimmter „juvenile“-Datensatz zur „adult“Tabelle hinzugefügt wurde 1. Schreiben Sie eine Abfrage, um zu überprüfen, ob das jugendliche Mitglied mit der Nummer 16101 der adult-Tabelle hinzugefügt wurde. Answer_ChkNewAdult.sql ist ein vollständiges Skript für dieses Verfahren. 86(OLEUDU\ 6(/(&7 )520DGXOW :+(5(PHPEHUBQR *2 2. Führen Sie die Abfrage aus, um zu überprüfen, ob sie das gewünschte Ergebnis zurückgibt. (UJHEQLV PHPEHUBQR Das Ergebnis ähnelt dem folgenden Teil eines Resultsets. VWUHHW FLW\ VWDWH %RZHU\(VWDWHV 0RQWJRPHU\ $/ URZVDIIHFWHG ]LS SKRQHBQR QXOO H[SUBGDWH )HE30 Ç So ermitteln Sie, welche Zeilen aus der „juvenile“-Tabelle entfernt werden müssen In diesem Verfahren erstellen Sie eine Abfrage, die die Zeilen in der juvenileTabelle löscht, welche übereinstimmende Zeilen mit der adult-Tabelle aufweisen. Nach dem Konvertieren der jugendlichen Mitglieder in erwachsene Mitglieder müssen diese Mitglieder in der juvenile-Tabelle gelöscht werden. Answer_SelOldJuvenile.sql ist ein vollständiges Skript für dieses Verfahren. 1. Schreiben Sie eine SELECT-Anweisung, die die Tabellen adult und juvenile verknüpft, also juvenile.member_no = adult.member_no. 86(OLEUDU\ 6(/(&7 )520MXYHQLOH ,11(5-2,1DGXOW 21MXYHQLOHPHPEHUBQR DGXOWPHPEHUBQR *2 2. Führen Sie die Abfrage aus, um zu überprüfen, ob sie das gewünschte Ergebnis zurückgibt. 8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ Ç So löschen Sie Zeilen in der „juvenile“-Tabelle, die übereinstimmende Zeilen mit der „adult“-Tabelle aufweisen 1. Schreiben Sie eine DELETE-Anweisung, um Zeilen in der juvenile-Tabelle zu löschen. Verwenden Sie hierbei die SELECT-Anweisung, die Sie in Schritt 1 des vorherigen Verfahrens erstellt haben. Answer_DelOldJuvenile.sql ist ein vollständiges Skript für dieses Verfahren. 86(OLEUDU\ '(/(7(MXYHQLOH )520MXYHQLOH ,11(5-2,1DGXOW 21MXYHQLOHPHPEHUBQR DGXOWPHPEHUBQR *2 2. Führen Sie die Abfrage aus, und überprüfen Sie, ob eine Zeile gelöscht wurde. Ç So überprüfen Sie, ob bestimmte Datensätze aus der „juvenile“-Tabelle entfernt wurden 1. Schreiben Sie eine SELECT-Anweisung, um zu überprüfen, ob das Mitglied mit der Nummer 16101 aus der juvenile-Tabelle entfernt wurde. Answer_ChkOldJuvenile.sql ist ein Beispiel für diese Abfrage. 86(OLEUDU\ 6(/(&7 )520MXYHQLOH :+(5(PHPEHUBQR *2 2. Führen Sie die Abfrage aus, und überprüfen Sie, ob keine Datensätze zurückgegeben werden. 8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ /HUQ]LHONRQWUROOH ,QKDOWGLHVHU)ROLH 9HUWLHIHQ6LHGLH/HUQ]LHOH GLHVHU8QWHUULFKWVHLQKHLW LQGHP6LHGLH.HUQSXQNWH ZLHGHUKROHQ (LQVWLHJ 'LH)UDJHQ]XU/HUQ]LHO NRQWUROOHEH]LHKHQVLFKDXI HLQLJHGHU6FKOVVHONRQ ]HSWHGLH,QKDOWGLHVHU 8QWHUULFKWVHLQKHLWVLQG 9HUZHQGHQYRQ7UDQVDNWLRQHQ (LQIJHQYRQ'DWHQ /|VFKHQYRQ'DWHQ $NWXDOLVLHUHQYRQ'DWHQ /HLVWXQJVDVSHNWH ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** 9HUZHQGHQ6LHGLHVHV 6]HQDULRXPGLH)UDJHQ]X EHDQWZRUWHQXQGGLH 7KHPHQGLHVHU8QWHUULFKWV HLQKHLW]XZLHGHUKROHQ .OlUHQ6LHRIIHQH)UDJHQ GHU.XUVWHLOQHKPHU]X GLHVHQ7KHPHQ Sie sind der Datenbankadministrator für einen Gesundheitsvorsorgeplan. Die physicians-Tabelle wurde mit Hilfe der folgenden Anweisung erstellt: &5($7(7$%/(GERSK\VLFLDQV SK\VLFLDQBQRLQW,'(17,7<12718// IBQDPHYDUFKDU12718// OBQDPHYDUFKDU12718// VWUHHWYDUFKDU18// VWUHHWYDUFKDU18// VWUHHWYDUFKDU18// SRVWDOBFRGHYDUFKDU18// FRBSD\PRQH\12718//&21675$,17SK\VBFRBSD\'()$8/7 *2 1. Wie viele Spaltenwerte müssen mindestens angegeben werden, um eine neue Zeile zur Tabelle hinzuzufügen? Sie müssen Daten für mindestens zwei Spalten angeben. Die INSERTAnweisung muss zumindest Werte für „f_name“ und „l_name“ enthalten. Alle anderen Spalten lassen NULL-Werte zu, oder es werden Standardwerte für sie erzeugt. 8QWHUULFKWVHLQKHLWbQGHUQYRQ'DWHQ 2. Die beteiligten Ärzte haben ihre Dienstleistungshonorare erhöht. Wie kann der Wert co_pay für alle Ärzte um 12 Prozent erhöht werden? Verwenden Sie eine UPDATE-Anweisung des folgenden Typs: 83'$7(SK\VLFLDQV6(7FRBSD\ FRBSD\FRBSD\ 3. Wie können alle Zeilen aus der physicians-Tabelle entfernt werden? Verwenden Sie eine DELETE-Anweisung oder eine TRUNCATE TABLE-Anweisung. Unterrichtseinheit 8: Abfragen von Volltextindizes Inhalt Übersicht 1 Einführung in den Microsoft Search-Dienst 2 Komponenten des Microsoft Search-Dienstes 3 Zusammenstellen von Informationen zu Volltextindizes 5 Schreiben von Volltextabfragen 7 Empfohlene Methoden 15 Übungseinheit A: Abfragen von Volltextindizes 16 Lernzielkontrolle 23 Die in diesen Unterlagen enthaltenen Angaben und Daten, einschließlich URLs und anderer Verweise auf Internetwebsites, können ohne vorherige Ankündigung geändert werden. Die in den Beispielen genannten Firmen, Organisationen, Produkte, Domänennamen, E-Mail-Adressen, Logos, Personen, Orte und Ereignisse sind frei erfunden und jede Ähnlichkeit mit bestehenden Firmen, Organisationen, Produkten, Domänennamen, E-Mail-Adressen, Logos, Personen, Orten oder Ereignissen ist rein zufällig, soweit nichts anderes angegeben ist. Die Benutzer sind verantwortlich für das Einhalten aller anwendbaren Urheberrechtsgesetze. Unabhängig von der Anwendbarkeit der entsprechenden Urheberrechtsgesetze darf ohne ausdrückliche schriftliche Erlaubnis der Microsoft Corporation kein Teil dieses Dokuments für irgendwelche Zwecke vervielfältigt oder in einem Datenempfangssystem gespeichert oder darin eingelesen werden, unabhängig davon, auf welche Art und Weise oder mit welchen Mitteln (elektronisch, mechanisch, durch Fotokopieren, Aufzeichnen, usw.) dies geschieht. Microsoft Corporation kann Inhaber von Patenten oder Patentanträgen, Marken, Urheberrechten oder anderen gewerblichen Schutzrechten sein, die den Inhalt dieses Dokuments betreffen. Die Bereitstellung dieses Dokuments gewährt keinerlei Lizenzrechte an diesen Patenten, Marken, Urheberrechten oder anderen gewerblichen Schutzrechten, es sei denn, dies wurde ausdrücklich durch einen schriftlichen Lizenzvertrag mit der Microsoft Corporation vereinbart. 2001 Microsoft Corporation. Alle Rechte vorbehalten. Microsoft, BackOffice, MS-DOS, PowerPoint, Visual Studio, Windows, Windows Media und Windows NT sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Die in diesem Dokument aufgeführten Namen tatsächlicher Firmen und Produkte sind möglicherweise Marken der jeweiligen Eigentümer. 8QWHUULFKWVHLQKHLW$EIUDJHQYRQ9ROOWH[WLQGL]HV LLL +LQZHLVHIUGHQ.XUVOHLWHU 3UlVHQWDWLRQ 0LQXWHQ hEXQJVHLQKHLW 0LQXWHQ In dieser Unterrichtseinheit wird der Microsoft® Search-Dienst, das Zugreifen auf Informationen zu Indizes für Textfelder und das Abfragen der Volltextindizes beschrieben. Am Ende der Unterrichtseinheit sollten die Kursteilnehmer mit den Funktionen dieses Dienstes vertraut sein. Sie werden jedoch kein Experte sein, was die Verwendung des Dienstes angeht. Am Ende dieser Unterrichtseinheit werden die Kursteilnehmer in der Lage sein, die folgenden Aufgaben auszuführen: Beschreiben der Funktionen und Komponenten des Microsoft SearchDienstes. Zusammenstellen von Informationen zu Volltextindizes. Schreiben von Volltextabfragen. 8QWHUODJHQXQG9RUEHUHLWXQJ In diesem Abschnitt werden die erforderlichen Unterlagen und vorbereitenden Aufgaben erläutert, die nötig sind, um diese Unterrichtseinheit zu unterrichten. 8QWHUODJHQ Um diese Unterrichtseinheit zu unterrichten, benötigen Sie folgende Unterlagen: Die Microsoft PowerPoint®-Datei 2316B_08.ppt Die Beispieldatei C:\Moc\2316B\Demo\Ex_08.sql, die alle Beispielskripts der Unterrichtseinheit enthält, soweit in der Unterrichtseinheit nichts anderes angegeben ist. 9RUEHUHLWXQJ Zur Vorbereitung dieser Unterrichtseinheit gehen Sie folgendermaßen vor: Lesen Sie alle Unterlagen. Arbeiten Sie die Übungseinheit durch. LY 8QWHUULFKWVHLQKHLW$EIUDJHQYRQ9ROOWH[WLQGL]HV 6WUDWHJLHIUGLH8QWHUULFKWVHLQKHLW Verwenden Sie die folgende Strategie, um diese Unterrichtseinheit zu präsentieren: Einführung in den Microsoft Search-Dienst Beschreiben Sie das Konzept und die Funktion des Microsoft SearchDienstes in Bezug auf Microsoft SQL Server™ 2000. Erläutern Sie die Vorteile der Verwendung des Microsoft Search-Dienstes zum Indizieren und Abfragen von Datenbanktabellen in SQL Server. Komponenten des Microsoft Search-Dienstes Beschreiben Sie die Objekte, die der Microsoft Search-Dienst zum Implementieren der Volltextsuche verwendet: Volltextindex und Volltextkatalog. Zusammenstellen von Informationen zu Volltextindizes Beschreiben Sie die verschiedenen Methoden und Informationen, mit denen Sie Informationen zur Volltextsuche zusammenstellen können, indem Sie gespeicherte Systemprozeduren für Volltext, Transact-SQL-Funktionen und SQL Server Enterprise Manager verwenden. Sie können Metadaten und Statusinformationen für jede Ebene (Datenbank, Katalog, Tabelle und Spalte) abrufen. Schreiben von Volltextabfragen Erläutern Sie, wie Volltextabfragen mit Hilfe von Transact-SQLAnweisungen wie der CONTAINS- und FREETEXT-Prädikate und der CONSTAINSTABLE und FREETEXTTABLE-Funktionen, geschrieben werden. Erläutern Sie, in welchen Fällen die Prädikate anstelle der Funktionen verwendet werden. $QSDVVXQJVLQIRUPDWLRQHQ Dieser Abschnitt beschreibt die Anforderungen zum Einrichten der Übungseinheiten für eine Unterrichtseinheit sowie die Konfigurationsänderungen, die während der Übungseinheiten an den Kursteilnehmercomputern vorgenommen werden. Diese Informationen sollen Ihnen beim Replizieren oder Anpassen der Microsoft Official Curriculum-Courseware (MOC) helfen. :LFKWLJ Die Übungseinheit in dieser Unterrichtseinheit hängt von der Schulungsraumkonfiguration ab, die im Abschnitt „Anpassungsinformationen“ am Ende des Dokuments Handbuch für das Einrichten von Schulungscomputern für Kurs 2316B, Abfragen von Microsoft SQL Server 2000 mit Hilfe von Transact-SQL, angegeben ist. (LQULFKWHQGHUhEXQJVHLQKHLW Es gibt keine Anforderungen zum Einrichten der Übungseinheit, die die Replikation oder die Anpassung betreffen. (UJHEQLVVHGHUhEXQJVHLQKHLW Auf den Kursteilnehmercomputern gibt es keine Konfigurationsänderungen, die die Replikation oder die Anpassung betreffen. 8QWHUULFKWVHLQKHLW$EIUDJHQYRQ9ROOWH[WLQGL]HV hEHUVLFKW ,QKDOWGLHVHU)ROLH *HEHQ6LHHLQHhEHUVLFKW EHUGLH7KHPHQXQG/HUQ ]LHOHGLHVHU8QWHUULFKWV HLQKHLW (LQVWLHJ ,QGLHVHU8QWHUULFKWVHLQKHLW OHUQHQ6LHGHQ0LFURVRIW 6HDUFK'LHQVWNHQQHQXQG HUIDKUHQZLH9ROOWH[WLQGL]HV DEJHIUDJWZHUGHQ (LQIKUXQJLQGHQ0LFURVRIW6HDUFK'LHQVW .RPSRQHQWHQGHV0LFURVRIW6HDUFK'LHQVWHV =XVDPPHQVWHOOHQYRQ,QIRUPDWLRQHQ]X9ROOWH[WLQGL]HV 6FKUHLEHQYRQ9ROOWH[WDEIUDJHQ ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Sie können in Microsoft® SQL Server™ Volltextabfragen für Nur-Text-Daten ausführen, einschließlich Wörtern, Ausdrücken und mehreren Formen eines Wortes oder eines Ausdrucks. Sie implementieren die Volltextsuchfunktion von SQL Server mit dem Microsoft Search-Dienst. Am Ende dieser Unterrichtseinheit werden Sie in der Lage sein, die folgenden Aufgaben auszuführen: Beschreiben der Funktionen und Komponenten des Microsoft SearchDienstes. Zusammenstellen von Informationen zu Volltextindizes. Schreiben von Volltextabfragen. 8QWHUULFKWVHLQKHLW$EIUDJHQYRQ9ROOWH[WLQGL]HV (LQIKUXQJLQGHQ0LFURVRIW6HDUFK'LHQVW ,QKDOWGLHVHU)ROLH (UOlXWHUQ6LHGDV.RQ]HSW GHV0LFURVRIW6HDUFK 'LHQVWHVLQ%H]XJDXI 64/6HUYHU 7H[WEDVLHUWHV 6XFKHQLQ64/ 6HUYHU z (LQVWLHJ 0LWGHP0LFURVRIW6HDUFK 'LHQVWN|QQHQ6LHMHW]W ]HLFKHQEDVLHUWH'DWHQLQ 7DEHOOHQPLWHLQHU9ROOWH[W VXFKHDEIUDJHQ z .RPSOH[H 6XFKHQ DXIXQVWUXNWXULHUWHQ7H[WGDWHQ QDFK :|UWHUQ XQG$XVGUFNHQ 8PIDVVHQGHUDOV /,.(2SHUDWRUXQG3ODW]KDOWHU 9HUIJEDUNHLWLQDQGHUHQ0LFURVRIW3URGXNWHQ z ,QGH[GLHQVW([FKDQJH&RPPHUFH6HUYHU ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Mit dem Microsoft Search-Dienst können Sie jetzt zeichenbasierte Daten in Tabellen mit einer Volltextsuche abfragen. Bei einer Volltextabfrage wird in den zeichenbasierten Spalten (vom Datentyp char, varchar, text, ntext, nchar oder nvarchar) nach Wörtern, Ausdrücken oder mehreren Formen eines Wortes oder Ausdrucks gesucht. 7H[WEDVLHUWHV6XFKHQLQ64/6HUYHU SQL Server enthielt schon immer ein Feature zum Abrufen von Text auf der Grundlage eines Mustervergleichs mit dem LIKE-Operator und mit Platzhaltern. Mit Hilfe des Microsoft Search-Dienstes können Sie nun komplexere Suchen erstellen. Mit einer Volltextabfrage können Sie eine linguistische Suche nach Zeichendaten in Tabellen durchführen. Bei einer linguistischen Suche werden Wörter und Ausdrücke verwendet, und es wird Ihnen so ermöglicht, nach ähnlichen Wörtern oder Ausdrücken, verschiedenen Formen eines Wortes oder nach nah beieinander stehenden Zielwörtern zu suchen. 9HUIJEDUNHLWLQDQGHUHQ0LFURVRIW3URGXNWHQ Der Microsoft Search-Dienst ist auch im Lieferumfang der folgenden Produkte enthalten: Microsoft Indexdienst Microsoft Exchange 2000 Microsoft Commerce Server 8QWHUULFKWVHLQKHLW$EIUDJHQYRQ9ROOWH[WLQGL]HV .RPSRQHQWHQGHV0LFURVRIW6HDUFK'LHQVWHV ,QKDOWGLHVHU)ROLH 6WHOOHQ6LHGLH.RPSRQHQ WHQGHU9ROOWH[WVXFKHYRU (LQVWLHJ 6WUXNWXUHQGHV6HDUFK'LHQVWHV z 'HU0LFURVRIW6HDUFK'LHQVW VSHLFKHUW,QIRUPDWLRQHQ]X 9ROOWH[WGDWHQLQ6WUXNWXUHQ DXHUKDOEYRQ64/6HUYHU z 9ROOWH[WLQGH[ 9HUIROJWGLHZHVHQWOLFKHQ:|UWHUHLQHU7DEHOOH (UIRUGHUWHLQH6SDOWHPLWHLQHPHLQGHXWLJHQ6FKOVVHO RGHUHLQHQ3ULPlUVFKOVVHO 9ROOWH[WNDWDORJ ,VWHLQH=XVDPPHQVWHOOXQJYRQ9ROOWH[WLQGL]HV )XQNWLRQHQGHV6HDUFK'LHQVWHV z ,QGL]LHUHQ z $EIUDJHQ ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Der Microsoft Search-Dienst speichert Informationen zu Volltextdaten in Strukturen außerhalb von SQL Server. 6WUXNWXUHQGHV6HDUFK'LHQVWHV SQL Server verwendet zwei Strukturen zum Nachverfolgen von Spalten, die für die Volltextsuche aktiviert sind. Diese Strukturen werden verwendet, um mit dem Microsoft Search-Dienst zum Erstellen von Indizes und zum Verarbeiten von Abfragen zu kommunizieren. Der Microsoft Search-Dienst verwendet zwei Strukturen zum Implementieren der Volltextsuche: Volltextindex und Volltextkatalog. 9ROOWH[WLQGH[ Bei einem Volltextindex handelt es sich um einen Index, der die wesentlichen Wörter einer Tabelle sowie deren Position verfolgt. Diese Indexstruktur unterstützt eine effiziente Suche nach allen Elementen, die indizierte Wörter enthalten, sowie erweiterte Suchoperationen, wie die Suche nach Ausdrücken und die NEAR-Suche. Die wichtigste Entwurfsanforderung für eine Volltextindizierung, für Volltextabfragen und für eine Volltextsynchronisierung ist das Vorhandensein einer Spalte mit einem eindeutigen Schlüssel (oder eines einspaltigen Primärschlüssels) in allen Tabellen, die für eine Volltextsuche registriert sind. $QPHUNXQJ Volltextindizes unterscheiden sich von SQL Server-Indizes, die durch die SQL Server-Datenbank gesteuert werden, in der sie definiert sind. 8QWHUULFKWVHLQKHLW$EIUDJHQYRQ9ROOWH[WLQGL]HV 9ROOWH[WNDWDORJ Der Volltextkatalog ist der Speicherort für die Volltextindizes. Hierbei handelt es sich um ein Verzeichnis des NTFS-Dateisystems, auf das nur der Microsoft Windows NT®-Administrator und der Microsoft Search-Dienst zugreifen können. Die Volltextindizes sind in Volltextkatalogen organisiert. Normalerweise werden die Volltextindexdaten für eine komplette Datenbank in einem einzigen Volltextkatalog gespeichert. Administratoren haben jedoch die Möglichkeit, die Volltextindexdaten für eine Datenbank auf mehrere Volltextkataloge aufzuteilen. Dies ist besonders hilfreich, wenn eine große Anzahl von Zeilen in einer oder mehreren volltextindizierten Tabellen enthalten ist. )XQNWLRQHQGHV6HDUFK'LHQVWHV Der Microsoft Search-Dienst hat zwei Hauptfunktionen: Erstellen und Verwalten von Volltextindizes und Verwenden der Indizes zum Verarbeiten von Abfragen. ,QGL]LHUHQ Der Microsoft Search-Dienst erstellt und verwaltet Volltextindizes für Tabellen, die für Volltextindizierung eingerichtet sind. Er durchläuft die Zeilen der Tabelle und extrahiert Schlüsselwörter aus den für die Volltextsuche angegebenen Spalten. Die Werte werden in Betriebssystemdateien gespeichert und in Volltextkatalogen organisiert. Damit Sie für eine Tabelle einen Volltextindex erstellen können, muss für die Tabelle ein eindeutiger Index definiert sein. $EIUDJHQ Der Microsoft Search-Dienst verarbeitet Volltextsuchabfragen. Er ermittelt, welche Einträge im Index die Volltextauswahlkriterien erfüllen. Für jeden Eintrag, der den Auswahlkriterien entspricht, gibt der Dienst die Zeilen-ID sowie einen Rangfolgenwert an den SQL Server-Dienst zurück, der mit Hilfe dieser Informationen das Resultset der Abfrage erstellt. Beim Verarbeiten einer Volltextabfrage gibt das Suchmodul die Schlüsselwerte der Zeilen, die den Suchkriterien entsprechen, an SQL Server zurück. 8QWHUULFKWVHLQKHLW$EIUDJHQYRQ9ROOWH[WLQGL]HV =XVDPPHQVWHOOHQYRQ,QIRUPDWLRQHQ]X9ROOWH[WLQGL]HV ,QKDOWGLHVHU)ROLH (UOlXWHUQ6LHZLH,QIRUPD WLRQHQ]XU9ROOWH[WVXFKH ]XVDPPHQJHVWHOOWZHUGHQ N|QQHQ (LQVWLHJ 6LHN|QQHQ,QIRUPDWLRQHQ ]XU9ROOWH[WVXFKH]XVDP PHQVWHOOHQ 9HUZHQGHQYRQJHVSHLFKHUWHQ6\VWHPSUR]HGXUHQ z VSBKHOSBIXOOWH[WBFDWDORJV z VSBKHOSBIXOOWH[WBWDEOHV z VSBKHOSBIXOOWH[WBFROXPQV 9HUZHQGHQYRQ7UDQVDFW64/)XQNWLRQHQ z 9HUZHQGHQ YRQ7UDQVDFW64/)XQNWLRQHQGLH ,QIRUPDWLRQHQ EHU 9ROOWH[WHLJHQVFKDIWHQ DEIUDJHQ 86(1RUWKZLQG 86(1RUWKZLQG 6(/(&7 6(/(&7 '$7$%$6(3523(57< 1RUWKZLQG ,V)XOO7H[W(QDEOHG '$7$%$6(3523(57< 1RUWKZLQG ,V)XOO7H[W(QDEOHG *2 *2 ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Sie können Informationen zur Volltextsuche zusammenstellen, indem Sie gespeicherte Systemprozeduren für Volltext, Transact-SQL-Funktionen und SQL Server Enterprise Manager verwenden. Sie können Metadaten und Statusinformationen für jede Ebene (Datenbank, Katalog, Tabelle und Spalte) abrufen. 9HUZHQGHQYRQJHVSHLFKHUWHQ6\VWHPSUR]HGXUHQ Mit den in der folgenden Tabelle angegebenen gespeicherten Systemprozeduren für Volltext können Sie Informationen zu Volltextindizes zusammenstellen. Gespeicherte Prozedur Funktion sp_help_fulltext_catalogs Gibt ID, Name, Stammverzeichnis, Status und Anzahl der volltextindizierten Tabellen für den angegebenen Volltextkatalog zurück. sp_help_fulltext_tables Gibt eine Liste von Tabellen zurück, die für die Volltextindizierung aktiviert sind. sp_help_fulltext_columns Gibt die Spalten zurück, die für die Volltextindizierung aktiviert sind. 8QWHUULFKWVHLQKHLW$EIUDJHQYRQ9ROOWH[WLQGL]HV 9HUZHQGHQYRQ7UDQVDFW64/)XQNWLRQHQ Sie können auch mit Hilfe von Transact-SQL-Funktionen die Werte von Volltexteigenschaften abfragen. In der folgenden Tabelle sind häufig verwendete Eigenschaftswerte aufgelistet, die Sie verwenden können, um Informationen zur Volltextsuche zu erhalten. Funktion Eigenschaftswert Beschreibung der Eigenschaft COLUMNPROPERTY IsFullTextIndexed Gibt an, dass eine Spalte für die Volltextsuche aktiviert ist. DATABASEPROPERTY IsFullTextEnabled Gibt an, dass eine Datenbank für die Volltextsuche aktiviert ist. INDEXPROPERTY IsFulltextKey Gibt an, dass der Index von Microsoft Search-Dienst verwendet wird. OBJECTPROPERTY TableHasActiveFulltextIndex Gibt an, dass eine Tabelle für die Volltextsuche aktiviert ist. FULLTEXTCATALOGPROPERTY PopulateStatus Gibt den aktuellen Status eines Microsoft Search-Katalogs zurück. ItemCount Gibt die Anzahl der Einträge in einem Microsoft Search-Katalog zurück. IndexSize Gibt die Größe des Volltextindexes in MB zurück. UniqueKeyCount Gibt die ungefähre Anzahl der Nichtfüllwörter zurück, die in einem Microsoft Search-Katalog eindeutig adressiert werden können. LogSize Gibt die Größe des letzten Volltextindexes in MB zurück. PopulateCompletionAge Gibt das aktuellste Datum und die aktuellste Uhrzeit zurück, an dem bzw. zu der der Microsoft Search-Katalog, auf den verwiesen wird, aktualisiert wurde. ResourceUsage Gibt eine relative Prioritätseinstellung der Betriebssystemausführung für den Microsoft Search-Dienst an. IsFullTextInstalled Gibt eine erfolgreiche Installation auf einem Organisationsserver an, auf dem SQL Server ausgeführt wird. FULLTEXTSERVICEPROPERTY %HLVSLHO Mit Hilfe der IsFullTextEnabled-Eigenschaft wird ermittelt, ob für die Northwind-Datenbank die Volltextabfrage aktiviert ist. 86(1RUWKZLQG 6(/(&7'$7$%$6(3523(57< 1RUWKZLQG ,V)XOO7H[W(QDEOHG *2 Wenn der Wert 1 zurückgegeben wird, ist die Northwind-Datenbank für die Volltextabfrage aktiviert. Der Wert 0 zeigt an, dass die Northwind-Datenbank nicht für die Volltextabfrage aktiviert ist. 8QWHUULFKWVHLQKHLW$EIUDJHQYRQ9ROOWH[WLQGL]HV 6FKUHLEHQYRQ9ROOWH[WDEIUDJHQ ,QKDOWGLHVHU)ROLH (UOlXWHUQ6LHZLH9ROOWH[W DEIUDJHQJHVFKULHEHQ ZHUGHQ &217$,163UlGLNDW (LQVWLHJ )5((7(;73UlGLNDW )XQNWLRQHQ &217$,167$%/(XQG)5((7(;77$%/( 9HUZHQGHQYRQ9ROOWH[WVFKOVVHOZ|UWHUQ 0LWHLQHU9ROOWH[WDEIUDJH N|QQHQ6LHHLQHOLQJXLVWL VFKH6XFKHQDFK=HLFKHQ GDWHQLQ7DEHOOHQGXUFK IKUHQGLHIUGLH9ROOWH[W VXFKHDNWLYLHUWVLQG ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** 0HWKRGLVFKHU+LQZHLV 'LHQHXHQ7UDQVDFW64/ (UZHLWHUXQJHQHQWVSUHFKHQ GHUIXQNWLRQDOHQ,6264/ 0HWKRGLNIU9ROOWH[WV\QWD[ HUZHLWHUXQJHQ Mit einer Volltextabfrage können Sie eine linguistische Suche nach Zeichendaten in Tabellen durchführen, die für die Volltextsuche aktiviert sind. Der Microsoft Search-Dienst unterstützt zusätzliche Suchprädikate und -funktionen, die die Funktionalität von Transact-SQL erweitern. Diese Syntaxelemente sind identisch mit den für den Microsoft Search-Dienst in den OLE DB-Providern für Microsoft Index Server, Version 2.0, und Microsoft Site Server, Version 3.0, verwendeten Elementen. Die Transact-SQL-Erweiterungen für Volltext entsprechen der funktionalen ISO SQL-3-Methodik (International Standards Organization) für Volltextsyntaxerweiterungen. Es handelt sich um folgende Syntaxelemente: Das CONTAINS-Prädikat Das FREETEXT-Prädikat Die CONTAINSTABLE-Funktion Die FREETEXTTABLE-Funktion $QPHUNXQJ Suchprädikate sind Transact-SQL-Anweisungen, mit denen das Resultset auf eine Abfrage beschränkt wird. Die in einer WHERE-Klausel einer SELECT-Anweisung angewendeten Suchbedingungen dienen als Beispiel. 8QWHUULFKWVHLQKHLW$EIUDJHQYRQ9ROOWH[WLQGL]HV &217$,163UlGLNDW ,QKDOWGLHVHU)ROLH (UOlXWHUQ6LHZLHGDV &217$,163UlGLNDW YHUZHQGHWZLUG )OH[LRQVIRUPHLQHVEHVWLPPWHQ:RUWHV :RUWRGHU$XVGUXFNEHJLQQHQG PLWHLQHUDQJHJHEHQHQ =HLFKHQIROJH :RUWRGHU$XVGUXFNGDVE]ZGHULQGHU1lKHHLQHV DQGHUHQ:RUWHVRGHU$XVGUXFNVVWHKW (LQRGHUPHKUHUHVSH]LHOOH:|UWHUXQG$XVGUFNH :|UWHURGHU$XVGUFNHPLW JHZLFKWHWHQ :HUWHQ (LQVWLHJ 0LWGHP&217$,16 3UlGLNDWN|QQHQ6LHQDFK HLQHPEHVWLPPWHQ$XVGUXFN VXFKHQ Beispiel Beispiel 11 6(/(&7SODQWBLGFRPPRQBQDPHSULFH 6(/(&7SODQWBLGFRPPRQBQDPHSULFH )520SODQWV )520SODQWV :+(5(&217$,16 (QJOLVK7K\PH :+(5(&217$,16 (QJOLVK7K\PH *2 *2 ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Mit dem CONTAINS-Prädikat können Sie nach einem bestimmten Ausdruck suchen. 7HLOV\QWD[ Das CONTAINS-Prädikat verwendet eine funktionale Schreibweise, bei der der erste Parameter der Name der durchsuchten Spalte und der zweite Parameter eine Volltextsuchbedingung ist. …WHERE CONTAINS ( {column}, '<contains_search_condition>' ) <contains_search_condition> ::= {| <generation_term>| <prefix_term>| <proximity_term> | <simple_term>| <weighted_term>} 6\QWD[HOHPHQWHIU6XFKEHGLQJXQJHQ Das CONTAINS-Prädikat unterstützt eine komplexe Syntax, um zeichenbasierte Spalten nach Folgendem zu durchsuchen: Flexionsform eines bestimmten Wortes (Generierungsbegriff). Angenommen, Sie möchten nach der Flexionsform des Wortes „Ordner“ suchen. Wenn verschiedene Zeilen der Tabelle die Wörter „Ordner“, „Ordners“, „ordnete“, „ordnen“ und „geordnet“ enthalten, werden alle Wörter im Resultset ausgegeben, da jedes dieser Wörter aus dem Wort „Ordner“ durch Flexion generiert werden kann. Ein Wort oder Ausdruck, in dem Wörter mit einer angegebenen Zeichenfolge beginnen (Präfixbegriff). In einem Ausdruck wird jedes darin enthaltene Wort als Präfix betrachtet, wie z. B. der Begriff „auto tran*“, der sowohl mit „automatic transmission“ als auch mit „automobile transducer“ übereinstimmt. 8QWHUULFKWVHLQKHLW$EIUDJHQYRQ9ROOWH[WLQGL]HV Ein Wort oder Ausdruck, das bzw. der in der Nähe eines anderen Wortes oder Ausdrucks steht (NEAR-Begriff). Sie suchen beispielsweise die Zeilen, in denen sich das Wort „ice“ in der Nähe des Wortes „hockey“ oder in denen sich der Ausdruck „ice skating“ in der Nähe des Ausdrucks „ice hockey“ befindet. Ein oder mehrere spezielle Wörter und Ausdrücke (einfacher Begriff). Ein Wort besteht aus einem oder mehreren Zeichen ohne Leer- oder Satzzeichen. Ein gültiger Ausdruck kann aus mehreren Wörtern mit Leerzeichen und mit oder ohne Satzzeichen dazwischen bestehen. Beispielsweise ist „ice“ ein Wort und „ice skating“ ein Ausdruck. Solche Wörter und Ausdrücke werden als „einfache Begriffe“ bezeichnet. SQL Server entfernt Füllwörter aus den Suchkriterien. Wörter oder Ausdrücke mit gewichteten Werten (gewichteter Begriff). Sie können die Ergebnisse einer Suche in einer bestimmten Rangfolge anzeigen lassen, indem Sie den gewichteten Wert der Wörter oder der Ausdrücke angeben. Abfrageergebnisse, die die höherwertigen Wörter oder Ausdrücke enthalten, werden vor den anderen zurückgegeben. Ein CONTAINS-Prädikat kann mehrere dieser Begriffe mit Hilfe von AND und OR kombinieren, um z. B. alle Zeilen mit „latte“ und „New York-style bagel“ in derselben volltextfähigen Datenbankspalte zu finden. Außerdem können Begriffe durch AND NOT negiert werden, wie im folgenden Beispiel: bagel AND NOT cream cheese. $QPHUNXQJ Bei einer CONTAINS-Suche wird nie nach Groß-/Kleinschreibung unterschieden. %HLVSLHO %HLVSLHO Die folgende Abfrage gibt plant_id, common_name und price für alle Zeilen zurück, in denen der Ausdruck „English Thyme“ in einer der volltextfähigen Spalten enthalten ist. Wird ein Sternchen (*) anstelle eines Spaltennamens verwendet, werden alle volltextfähigen Spalten der Tabelle durchsucht. 6(/(&7SODQWBLGFRPPRQBQDPHSULFH )520SODQWV :+(5(&217$,16 (QJOLVK7K\PH *2 Die folgende Abfrage gibt Elemente wie „Jean LeDuc has always loved ice hockey“ und „Jean Leduc on Ice - Hockey at Its Best“ aus der Spalte description zurück. 6(/(&7DUWLFOHBLG )520KRFNH\BDUWLFOHV :+(5(&217$,16GHVFULSWLRQ -HDQ/H'XF$1'LFHKRFNH\ *2 $QPHUNXQJ Diese Beispiele dienen nur der Erläuterung und führen zu keinen Ergebnissen. 8QWHUULFKWVHLQKHLW$EIUDJHQYRQ9ROOWH[WLQGL]HV )5((7(;73UlGLNDW ,QKDOWGLHVHU)ROLH (UOlXWHUQ6LHZLHGDV )5((7(;73UlGLNDW YHUZHQGHWZLUG 6XFKH QDFK:|UWHUQ$XVGUFNHQ XQG6lW]HQ H[WUDKLHUW GXUFKGLHDQIlQJOLFKH$EIUDJH :HQLJHUSUl]LVHDOVGDV&217$,163UlGLNDW (LQVWLHJ :HQQ6LHHLQ)5((7(;7 3UlGLNDWYHUZHQGHQN|QQHQ 6LHHLQHEHOLHELJH5HLKHYRQ :|UWHUQRGHU$XVGUFNHQ RGHUVRJDUHLQHQYROO VWlQGLJHQ6DW]HLQJHEHQ 6(/(&7 6(/(&7 )520QHZVBWDEOH )520QHZVBWDEOH :+(5()5((7(;7GHVFULSWLRQ :+(5()5((7(;7GHVFULSWLRQ 7KH)XOWRQ&RXQW\*UDQG-XU\VDLG)ULGD\DQ 7KH)XOWRQ&RXQW\*UDQG-XU\VDLG)ULGD\DQ LQYHVWLJDWLRQRI$WODQWD©VUHFHQWSULPDU\ LQYHVWLJDWLRQRI$WODQWD©VUHFHQWSULPDU\ HOHFWLRQSURGXFHGQRHYLGHQFHWKDWDQ\ HOHFWLRQSURGXFHGQRHYLGHQFHWKDWDQ\ LUUHJXODULWLHVWRRNSODFH LUUHJXODULWLHVWRRNSODFH *2 *2 ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Wenn Sie das FREETEXT-Prädikat verwenden, können Sie eine beliebige Reihe von Wörtern oder Ausdrücken oder sogar einen vollständigen Satz eingeben. Das Modul zur Volltextabfrage untersucht diesen Text, identifiziert alle signifikanten Wörter und Substantivausdrücke und erstellt intern eine Abfrage mit diesen Begriffen. Das FREETEXT-Prädikat ist weniger präzise als das CONTAINS-Prädikat. 6\QWD[ …WHERE FREETEXT ( {columns | * }, 'free_text' ) %HLVSLHO Im folgenden Beispiel wird das FREETEXT-Prädikat für die descriptionSpalte verwendet. 6(/(&7 )520QHZVBWDEOH :+(5()5((7(;7GHVFULSWLRQ 7KH)XOWRQ&RXQW\*UDQG-XU\VDLG)ULGD\DQLQYHVWLJDWLRQ RI$WODQWD©VUHFHQWSULPDU\HOHFWLRQSURGXFHGQRHYLGHQFHWKDW DQ\LUUHJXODULWLHVWRRNSODFH *2 $QPHUNXQJ Dieses Beispiel dient nur der Erläuterung und führt zu keinen Ergebnissen. In diesem Beispiel identifiziert das Suchmodul die folgenden Wörter und Ausdrücke mit Substantiven: Wörter - Fulton, county, grand, jury, Friday, investigation, Atlanta, recent, primary, election, produce, evidence, irregularities. Ausdrücke - Fulton county grand jury, primary election, grand jury, Atlanta’s recent primary election. Die Wörter und Ausdrücke werden intern in einer Abfrage kombiniert und für die richtige Rangfolge gewichtet, bevor die eigentliche Suche durchgeführt wird. 8QWHUULFKWVHLQKHLW$EIUDJHQYRQ9ROOWH[WLQGL]HV )XQNWLRQHQ&217$,167$%/(XQG)5((7(;77$%/( ,QKDOWGLHVHU)ROLH 6WHOOHQ6LHGLH)XQNWLRQHQ &217$,167$%/(XQG )5((7(;77$%/(YRUXQG YHUJOHLFKHQ6LHVLHPLWGHQ EHLGHQ]XYRUHUOlXWHUWHQ 6FKOVVHOZ|UWHUQ (LQVWLHJ 'LH)XQNWLRQHQ &217$,167$%/(XQG )5((7(;77$%/(XQWHU VFKHLGHQVLFKJHULQJIJLJ YRQGHQ6FKOVVHOZ|UWHUQ &217$,16XQG )5((7(;7 9HUZHQGHQYRQ&217$,167$%/(XQG)5((7(;77$%/( z *HEHQ7DEHOOH]XUFN z *HEHQ6SDOWH]XUFNGLH9ROOWH[WVFKOVVHOZHUWH HQWKlOW z WRSBQBE\BUDQN$UJXPHQW $XVZlKOHQGHU 9ROOWH[WVXFKPHWKRGH z z 9HUZHQGHQ6LHGLH3UlGLNDWH&217$,16XQG)5((7(;7 LQMHGHU6XFKEHGLQJXQJ 9HUZHQGHQ6LHGLH)XQNWLRQHQ&217$,167$%/(XQG )5((7(;77$%/(LQGHU)520.ODXVHO ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** 0HWKRGLVFKHU+LQZHLV :HLVHQ6LHGDUDXIKLQGDVV GLH)XQNWLRQHQ &217$,167$%/(XQG )5((7(;77$%/(LQ :LUNOLFKNHLWHLQHDEJHOHLWHWH 7DEHOOHHUVWHOOHQ 7HLOV\QWD[ Die Funktionen CONTAINSTABLE und FREETEXTTABLE unterscheiden sich geringfügig von den Prädikaten CONTAINS und FREETEXT. Die Funktionen CONTAINSTABLE und FREETEXTTABLE erstellen im Wesentlichen eine abgeleitete Tabelle. 9HUZHQGHQYRQ&217$,167$%/(XQG)5((7(;77$%/( Die Funktionen CONTAINSTABLE und FREETEXTTABLE funktionieren ähnlich wie ihre entsprechenden Suchbedingungen, CONTAINS und FREETEXT. Sie geben jedoch eine Tabelle mit null, einer oder mehr Zeilen für Spalten zurück, die zeichenbasierte Datentypen enthalten. Außerdem kann auf die Funktionen CONTAINSTABLE und FREETEXTTABLE in der FROMKlausel einer SELECT-Anweisung so verwiesen werden, als handele es sich um reguläre Tabellennamen. CONTAINSTABLE ( table , { column | * } , ' < contains_search_condition > ' [ , top_n_by_rank ] ) Die CONTAINSTABLE-Funktion verwendet die gleichen Suchbedingungen wie das CONTAINS-Prädikat. 7HLOV\QWD[ FREETEXTTABLE ( table , { column | * } , 'freetext_string' [ , top_n_by_rank ]) Berücksichtigen Sie beim Arbeiten mit diesen Funktionen die folgenden Aspekte und Richtlinien: Da CONTAINSTABLE und FREETEXTTABLE jeweils eine Tabelle von null, einer oder mehr Zeilen zurückgeben, müssen sie immer in einer FROM-Klausel angegeben werden. CONTAINSTABLE und FREETEXTTABLE werden auch zum Angeben von Auswahlkriterien verwendet. In der zurückgegebenen Tabelle gibt es eine Spalte namens key, die Volltextschlüsselwerte enthält. 8QWHUULFKWVHLQKHLW$EIUDJHQYRQ9ROOWH[WLQGL]HV Jede volltextfähige Tabelle enthält eine Spalte, deren Werte immer eindeutig sind. Die in der key-Spalte zurückgegebenen Werte sind die Volltextschlüsselwerte der Zeilen, die den in der Volltextsuchbedingung angegebenen Auswahlkriterien entsprechen. In der durch CONTAINSTABLE und FREETEXTTABLE erzeugten Tabelle gibt es eine Spalte namens rank, die Werte zwischen 0 und 1.000 enthält. Mit diesen Werten werden die zurückgegebenen Zeilen in einer Rangfolge angezeigt, die sich danach richtet, wie genau die Zeilen den Auswahlkriterien entsprechen. Sie haben keinen Vergleichswert außerhalb des Resultsets. 7LSS Geben Sie eine ganze Zahl für das top_n_by_rank-Argument an, damit nur n Übereinstimmungen mit den höchsten Rangfolgewerten in absteigender Reihenfolge zurückgegeben werden. $XVZlKOHQGHU9ROOWH[WVXFKPHWKRGH Obwohl die zum Angeben der Volltextsuchbedingung verwendete TransactSQL-Anweisung in den Prädikaten und Funktionen identisch ist, gibt es wichtige Unterschiede in Bezug auf die Art und Weise, in der sie verwendet werden sollten. Verwenden Sie die Prädikate CONTAINS und FREETEXT in jeder Suchbedingung (einschließlich einer WHERE-Klausel) einer SELECTAnweisung. Verwenden Sie die Funktionen CONTAINSTABLE und FREETEXTTABLE in der FROM-Klausel einer SELECT-Anweisung. Abfragen, bei denen die Funktionen CONTAINSTABLE und FREETEXTTABLE verwendet werden, sind komplexer als Abfragen, bei denen die Schlüsselwörter CONTAINS und FREETEXT verwendet werden. Sie müssen die von den Funktionen zurückgegebenen kennzeichnenden Zeilen explizit mit den Zeilen in der ursprünglichen SQL Server-Tabelle verknüpfen. 8QWHUULFKWVHLQKHLW$EIUDJHQYRQ9ROOWH[WLQGL]HV 9HUZHQGHQYRQ9ROOWH[WVFKOVVHOZ|UWHUQ ,QKDOWGLHVHU)ROLH %HVFKUHLEHQ6LHZLH9ROO WH[WVFKOVVHOZ|UWHUPLW DQGHUHQ7UDQVDFW64/ 3UlGLNDWHQNRPELQLHUW ZHUGHQ (LQVWLHJ 6LHN|QQHQ9ROOWH[W VFKOVVHOZ|UWHUDXFKPLW DQGHUHQ7UDQVDFW64/ $QZHLVXQJHQYHUZHQGHQ Prädikate Prädikate CONTAINS CONTAINS und und FREETEXT FREETEXT 86(1RUWKZLQG 86(1RUWKZLQG 6(/(&7'HVFULSWLRQ 6(/(&7'HVFULSWLRQ )520&DWHJRULHV )520&DWHJRULHV :+(5(&DWHJRU\1DPH :+(5(&DWHJRU\1DPH ! 6HDIRRG© ! 6HDIRRG© $1'&217$,16'HVFULSWLRQ VDXFHV$1'VHDVRQLQJV $1'&217$,16'HVFULSWLRQ VDXFHV$1'VHDVRQLQJV *2 *2 CONTAINS in einer Unterabfrage CONTAINS in einer Unterabfrage 86(SXEV 86(SXEV 6(/(&77WLWOH3SXEBQDPH 6(/(&77WLWOH3SXEBQDPH )520SXEOLVKHUV$63 )520SXEOLVKHUV$63 ,11(5-2,1WLWOHV$67213SXEBLG ,11(5-2,1WLWOHV$67213SXEBLG ,SXEBLG ,SXEBLG :+(5(3SXEBLG :+(5(3SXEBLG 6(/(&7SXEBLG)520SXEBLQIR:+(5(&217$,16 6(/(&7SXEBLG)520SXEBLQIR:+(5(&217$,16 SUBLQIR PRRQEHDP$1'RQWDULR SUBLQIR PRRQEHDP$1'RQWDULR $1'IO\LQJVDXFHU $1'IO\LQJVDXFHU *2 *2 ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Sie können die Prädikate CONTAINS und FREETEXT mit allen anderen Transact-SQL-Prädikaten, wie z. B. LIKE und BETWEEN, kombinieren. Sie können sie auch in einer Unterabfrage verwenden. %HLVSLHO Im folgenden Beispiel wird nach Beschreibungen gesucht, die nicht zur Kategorie „Seafood“ gehören und das Wort „sauces“ sowie das Wort „seasonings“ enthalten. 86(1RUWKZLQG *2 6(/(&7'HVFULSWLRQ )520&DWHJRULHV :+(5(&DWHJRU\1DPH! 6HDIRRG $1'&217$,16'HVFULSWLRQ VDXFHV$1'VHDVRQLQJV *2 8QWHUULFKWVHLQKHLW$EIUDJHQYRQ9ROOWH[WLQGL]HV %HLVSLHO In diesem Beispiel wird CONTAINS in einer Unterabfrage verwendet. Die Abfrage gibt den title-Wert aller Bücher in der titles-Tabelle der pubs-Datenbank für den Verlag zurück, der in der Nähe der Fliegenden Untertasse („flying saucer“) in Moonbeam, Ontario, ansässig ist. (Die Informationen zum Verlag sind in der Spalte pr_info in der pub_info-Tabelle zu finden. Nur ein Verlag stimmt mit dieser Beschreibung überein.) 86(SXEV 6(/(&77WLWOH3SXEBQDPH )520SXEOLVKHUV$63 ,11(5-2,1WLWOHV$67213SXEBLG 7SXEBLG :+(5(3SXEBLG 6(/(&7SXEBLG )5203XEB,' :+(5(&217$,16SUBLQIR PRRQEHDP$1'RQWDULR$1'IO\LQJVDXFHU *2 $QPHUNXQJ Diese Beispiele dienen nur der Erläuterung und führen zu keinen Ergebnissen. 8QWHUULFKWVHLQKHLW$EIUDJHQYRQ9ROOWH[WLQGL]HV (PSIRKOHQH0HWKRGHQ ,QKDOWGLHVHU)ROLH %HVSUHFKHQ6LHHPSIRKOH QHQ0HWKRGHQ]XP$E IUDJHQYRQ9ROOWH[WLQGL]HV 9HUZHQGHQ6LH 9HUZHQGHQ6LH 9ROOWH[WLQGL]HV 9ROOWH[WLQGL]HV IUGLH'DWHQW\SHQµFKDU§ IUGLH'DWHQW\SHQµFKDU§ µQFKDU§µQYDUFKDU§µYDUFKDU§µWH[W§µQWH[W§XQGµLPDJH§ µQFKDU§µQYDUFKDU§µYDUFKDU§µWH[W§µQWH[W§XQGµLPDJH§ (LQVWLHJ 'LHHPSIRKOHQHQ0HWKRGHQ VROOHQ,KQHQEHLP$EIUDJHQ YRQ9ROOWH[WLQGL]HVKHOIHQ 9HUZHQGHQ6LH 9HUZHQGHQ6LH 9ROOWH[WLQGH[ 9ROOWH[WLQGH[ XQGGLH.DWDORJHLJHQVFKDIWHQ XQGGLH.DWDORJHLJHQVFKDIWHQ ]XU ]XU 3UREOHPEHKDQGOXQJ 3UREOHPEHKDQGOXQJ 9HUZHQGHQ6LHGDV 9HUZHQGHQ6LHGDV WRSBQBE\BUDQN$UJXPHQW WRSBQBE\BUDQN$UJXPHQW ]XU%HVFKUlQNXQJ ]XU%HVFKUlQNXQJ GHU5HVXOWVHWJU|H GHU5HVXOWVHWJU|H ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Die folgenden empfohlenen Methoden sollen Ihnen beim Abfragen von Volltextindizes helfen. Verwenden Sie Volltextindizes für Tabellen mit Spalten, die Textdaten enthalten, die Sie abfragen möchten. Dazu gehören Spalten mit den Datentypen char, nchar, nvarchar, varchar, text, ntext und image. Überprüfen Sie den Volltextindex und die Katalogeigenschaften mit Hilfe von Systemfunktionen und gespeicherten Prozeduren, mit denen Sie Probleme bei fragwürdigen Abfrageergebnissen oder -fehlern beheben können. Stellen Sie sicher, dass die Volltextsuche für den Server, die Datenbank und die Tabelle, die Sie abfragen, aktiviert ist. Verwenden Sie für die Funktionen CONTAINSTABLE und FREETEXTTABLE das top_n_by_rank-Argument, um die Anzahl von zurückgegebenen Reihen zu beschränken. Zusätzliche Informationen zu den folgenden Themen erhalten Sie in der SQL Server-Onlinedokumentation. Thema Suchbegriff Verwenden der Volltextsuche “Architektur von Volltextabfragen” “Volltextkataloge und -indizes” Volltextabfrage “Transact-SQL-Komponenten für die Volltextabfrage” Verwenden von Füllwörtern “Indexdienst” 8QWHUULFKWVHLQKHLW$EIUDJHQYRQ9ROOWH[WLQGL]HV hEXQJVHLQKHLW$$EIUDJHQYRQ9ROOWH[WLQGL]HV ,QKDOWGLHVHU)ROLH *HEHQ6LHHLQH(LQIKUXQJ LQGLHhEXQJVHLQKHLW (LQVWLHJ ,QGLHVHUhEXQJVHLQKHLW EHUSUIHQ6LHGHQ6WDWXV HLQHV9ROOWH[WLQGH[HVXQG IKUHQHLQH$EIUDJHPLW+LOIH YRQ9ROOWH[WLQGL]HVDXV ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** (UOlXWHUQ6LHGLH/HUQ]LHOH GHUhEXQJVHLQKHLW /HUQ]LHOH Am Ende dieser Übungseinheit werden Sie in der Lage sein, die folgenden Aufgaben auszuführen: Überprüfen des Status eines Volltextindexes. Schreiben von Volltextabfragen. 9RUDXVVHW]XQJHQ Um diese Übungseinheit zu bearbeiten, benötigen Sie Folgendes: • Die Antwortdateien für diese Übungseinheit, die sich in C:\Moc\2316B\Labfiles\L08\Answers befinden. (LQULFKWHQGHUhEXQJVHLQKHLW Um diese Übungseinheit zu bearbeiten, benötigen Sie Folgendes: • Führen Sie die Skriptdatei C:\Moc\2316B\Batches\2316_R08.sql aus. Diese Datei wird normalerweise als Teil der Schulungsraumeinrichtung ausgeführt. Dieses Skript aktiviert den Microsoft Search-Dienst und erstellt einen Volltextindex für die Products.Productname-Spalte der NorthwindDatenbank. Wenn der Volltextindex bereits existiert, muss er vor dem erneuten Erstellen zunächst gelöscht werden. :HLWHUH,QIRUPDWLRQHQ Wenn Sie Hilfe bei der Ausführung von Dateien benötigen, suchen Sie in der Hilfe von SQL Query Analyzer nach „Ausführen einer Abfrage“. 8QWHUULFKWVHLQKHLW$EIUDJHQYRQ9ROOWH[WLQGL]HV Daneben sind die folgenden Informationsquellen verfügbar: Das Northwind-Datenbankschema. Die SQL Server-Onlinedokumentation. 6]HQDULR Der Aufbau des Schulungsraumes soll die Organisation des weltweit agierenden Handelsunternehmens Northwind Traders widerspiegeln. Das Unternehmen hat den fiktiven Domänennamen ist nwtraders.msft. Der primäre DNS-Server für nwtraders.msft ist der Kursleitercomputer, der die Internetprotokolladresse (IP-Adresse) 192.168.x.200 besitzt (wobei x die zugewiesene Schulungsraumnummer ist). Der Name des Kursleitercomputers ist London. Die folgende Tabelle stellt den Benutzernamen, den Computernamen und die IP-Adresse für jeden Kursteilnehmercomputer in der fiktiven Domäne nwtraders.msft bereit. Suchen Sie den Benutzernamen Ihres Computers und notieren Sie ihn. Benutzername Computername IP-Adresse SQLAdmin1 Vancouver 192.168.x.1 SQLAdmin2 Denver 192.168.x.2 SQLAdmin3 Perth 192.168.x.3 SQLAdmin4 Brisbane 192.168.x.4 SQLAdmin5 Lisbon 192.168.x.5 SQLAdmin6 Bonn 192.168.x.6 SQLAdmin7 Lima 192.168.x.7 SQLAdmin8 Santiago 192.168.x.8 SQLAdmin9 Bangalore 192.168.x.9 SQLAdmin10 Singapore 192.168.x.10 SQLAdmin11 Casablanca 192.168.x.11 SQLAdmin12 Tunis 192.168.x.12 SQLAdmin13 Acapulco 192.168.x.13 SQLAdmin14 Miami 192.168.x.14 SQLAdmin15 Auckland 192.168.x.15 SQLAdmin16 Suva 192.168.x.16 SQLAdmin17 Stockholm 192.168.x.17 SQLAdmin18 Moscow 192.168.x.18 SQLAdmin19 Caracas 192.168.x.19 SQLAdmin20 Montevideo 192.168.x.20 SQLAdmin21 Manila 192.168.x.21 SQLAdmin22 Tokyo 192.168.x.22 SQLAdmin23 Khartoum 192.168.x.23 SQLAdmin24 Nairobi 192.168.x.24 9HUDQVFKODJWH=HLWIUGLHhEXQJVHLQKHLW0LQXWHQ 8QWHUULFKWVHLQKHLW$EIUDJHQYRQ9ROOWH[WLQGL]HV hEXQJ $EUXIHQYRQ,QIRUPDWLRQHQEHU9ROOWH[WLQGL]HV In dieser Übung erstellen Sie einen Volltextkatalog und Volltextindizes, damit Sie den Microsoft Search-Dienst für eine oder mehrere Spalten verwenden können. C:\Moc\2316B\Labfiles\L08\Answers enthält vollständige Skripts für diese Übung. Ç So verwenden Sie Transact-SQL zum Abrufen von Informationen zu Volltextindizes In diesem Verfahren richten Sie den Microsoft Search-Dienst für die Northwind-Datenbank mit Hilfe des Volltextindizierungs-Assistenten ein. Answer_FullText1.sql ist ein vollständiges Skript für dieses Verfahren. 1. Melden Sie sich an der Schulungsdomäne nwtraders mit Hilfe der Informationen in der folgenden Tabelle an. Option Eingabe Benutzername SQLAdminx (wobei x die Ihrem Computernamen zugewiesene Nummer ist, wie in der Schulungsraumdomäne nwtraders.msft festgelegt) Kennwort password 2. Öffnen Sie SQL Query Analyzer, und melden Sie sich, wenn Sie dazu aufgefordert werden, mittels Microsoft Windows®-Authentifizierung am (lokalen) Server an. Sie verfügen über die Berechtigung, sich bei SQL Server anzumelden und SQL Server zu verwalten, da Sie als SQLAdminx angemeldet sind, und SQLAdminx ein Mitglied der lokalen Windows 2000-Gruppe Administratoren ist. Alle Mitglieder dieser Gruppe werden automatisch der SQL Server-Rolle sysadmin zugeordnet. 3. Führen Sie die folgende Anweisung aus, um zu ermitteln, ob das Feature Volltextsuche auf dem SQL Server-Computer installiert ist: 86(1RUWKZLQG 6(/(&7IXOOWH[WVHUYLFHSURSHUW\ ,V)XOO7H[W,QVWDOOHG *2 4. Führen Sie die folgende Anweisung aus, um zu ermitteln, ob die Volltextsuche für die Northwind-Datenbank aktiviert ist: 86(1RUWKZLQG 6(/(&7GDWDEDVHSURSHUW\ 1RUWKZLQG ,V)XOO7H[W(QDEOHG *2 5. Führen Sie die folgende gespeicherte Systemprozedur zum Auflisten der Tabellen aus, für die die Volltextsuche aktiviert ist: 86(1RUWKZLQG (;(&VSBKHOSBIXOOWH[WBWDEOHV *2 8QWHUULFKWVHLQKHLW$EIUDJHQYRQ9ROOWH[WLQGL]HV 6. Führen Sie die folgende gespeicherte Systemprozedur zum Auflisten der Spalten aus, für die Volltextsuchindizes erstellt wurden: 86(1RUWKZLQG (;(&VSBKHOSBIXOOWH[WBFROXPQV *2 8QWHUULFKWVHLQKHLW$EIUDJHQYRQ9ROOWH[WLQGL]HV hEXQJ 6FKUHLEHQYRQ9ROOWH[WDEIUDJHQ In dieser Übung schreiben Sie Volltextabfragen für einen Volltextindex und führen die Abfragen aus, um nach bestimmten Wörtern und Ausdrücken in der Northwind-Datenbank zu suchen. C:\Moc\2316B\Labfiles\L08\Answers enthält vollständige Skripts für diese Übung. Ç So suchen Sie nach dem Wort „St. Andrews“, das in der Spalte „Employees.Notes“ in der Nähe des Wortes „Scotland“ steht In diesem Verfahren schreiben Sie Volltextabfragen mit SELECT-Anweisungen, in denen die Suchfunktionen CONTAINS und FREETEXT verwendet werden. Anschließend führen Sie die Abfragen aus. Answer_FullText2.sql ist ein vollständiges Skript für dieses Verfahren. 1. Schreiben Sie eine SELECT-Anweisung mit der Suchfunktion CONTAINS, die die Spalten LastName, Title, HireDate und Notes aus der Tabelle Employees auswählt, in der die Spalte Employees.Notes das Wort „St. Andrews“ enthält, das in der Nähe des Wortes „Scotland“ steht. 86(1RUWKZLQG 6(/(&7/DVW1DPH7LWOH+LUH'DWH1RWHV )520HPSOR\HHV :+(5(&217$,16QRWHV 6W$QGUHZV1($56FRWODQG *2 2. Führen Sie die Abfrage aus, um zu überprüfen, ob sie eine einzige Zeile zurückgibt. Ç So suchen Sie in der „Employees.Notes“-Spalte nach allen Formen des Wortes „sale“ In diesem Verfahren suchen Sie in der Employees.Notes-Spalte nach allen Formen des Wortes „sale“. Answer_FullText3.sql ist ein vollständiges Skript für dieses Verfahren. 1. Schreiben Sie eine SELECT-Anweisung mit der Suchfunktion CONTAINS, die die Spalten LastName, Title, HireDate und Notes aus der Tabelle Employees auswählt, in der die Employees.Notes-Spalte alle Formen des Wortes „sale“ enthält. Answer_FullText3.sql ist ein vollständiges Skript für dieses Verfahren. 86(1RUWKZLQG 6(/(&7/DVW1DPH7LWOH+LUH'DWH1RWHV )520HPSOR\HHV :+(5(&217$,16QRWHV )25062),1)/(&7,21$/VDOH *2 2. Führen Sie die Abfrage aus, um zu überprüfen, ob sie vier Zeilen zurückgibt. 8QWHUULFKWVHLQKHLW$EIUDJHQYRQ9ROOWH[WLQGL]HV Ç So suchen Sie in der „Employees.Notes“-Spalte nach den Wörtern „cold“ und „toast“ In diesem Verfahren suchen Sie in der Employees.Notes-Spalte nach den Wörtern „cold“ und „toast“. Answer_FullText4.sql ist ein vollständiges Skript für dieses Verfahren. 1. Schreiben Sie eine SELECT-Anweisung mit der Suchfunktion FREETEXT, die die Spalten LastName, Title, HireDate und Notes aus der EmployeesTabelle auswählt, in der die Employees.Notes-Spalte die Wörter „cold“ und „toast“ enthält. Führen Sie die Anweisung anschließend aus. 86(1RUWKZLQG 6(/(&7/DVW1DPH7LWOH+LUH'DWH1RWHV )520HPSOR\HHV :+(5()5((7(;7QRWHV FROGXQGWRDVW *2 2. Führen Sie die Abfrage aus, um zu überprüfen, ob sie eine einzige Zeile zurückgibt. Ç So suchen Sie in der „Employees.Notes“-Spalte mit Einträgen zu Bestellungen, die nach London geliefert wurden, nach den Wörtern „french“ und „university“ In diesem Verfahren suchen Sie in der Employees.Notes-Spalte mit Einträgen zu Bestellungen, die nach London geliefert wurden, nach den Wörtern „french“ und „university“. Answer_FullText5.sql ist ein vollständiges Skript für dieses Verfahren. 1. Schreiben Sie eine SELECT-Anweisung mit der Suchfunktion CONTAINS, die die eindeutigen Zeilen auswählt, die die Spalten LastName, Title und HireDate aus der Employees-Tabelle anzeigt, in der die Employees.notesSpalte die Wörter „french“ und „university“ enthält. Die Employees.notesSpalte enthält Einträge zu Bestellungen für London, die der Angestellte entgegengenommen hat. 86(1RUWKZLQG 6(/(&7',67,1&7/DVW1DPH7LWOH+LUH'DWH )520HPSOR\HHV$6H ,11(5-2,12UGHUVDVR 21H(PSOR\HH,' R(PSOR\HH,' :+(5(6KLS&LW\ /RQGRQ $1'&217$,16QRWHV IUHQFKDQGXQLYHUVLW\ *2 2. Führen Sie die Abfrage aus, um zu überprüfen, ob sie vier Zeilen zurückgibt. 8QWHUULFKWVHLQKHLW$EIUDJHQYRQ9ROOWH[WLQGL]HV Ç So verknüpfen Sie eine abgeleitete Tabelle, in der in den Einträgen zu Bestellungen, die nach London geliefert wurden, nach dem Wort „sales“ gesucht wird, das in der Nähe des Wortes „manager“ steht In diesem Verfahren verknüpfen Sie eine abgeleitete Tabelle, in der in den Einträgen zu Bestellungen, die nach London geliefert wurden, nach dem Wort „sales“ gesucht wird, das in der Nähe des Wortes „manager“ steht. Answer_FullText6.sql ist ein vollständiges Skript für dieses Verfahren. 1. Schreiben Sie eine SELECT-Anweisung, die die OrderID und die EmployeeID aus der Orders-Tabelle anzeigt. Dabei sollen die FreetextSuchergebnisse in absteigender Reihenfolge beginnend mit der genauesten Übereinstimmung angezeigt werden. Es wird in der Notes-Spalte der Employees-Tabelle nach dem Wort „sales“ gesucht, das in der Nähe des Wortes „manager“ steht. 86(1RUWKZLQG 6(/(&7>5$1.@2UGHU,'(PSOR\HH,' )5202UGHUV$6R ,11(5-2,1&217$,167$%/((PSOR\HHVQRWHV VDOHV1($5PDQDJHU $6H 21R(PSOR\HH,' H>.(<@ :+(5(6KLS&LW\ /RQGRQ 25'(5%<>5$1.@'(6& *2 2. Führen Sie die Abfrage aus, um zu überprüfen, ob sie sechs Zeilen zurückgibt. 8QWHUULFKWVHLQKHLW$EIUDJHQYRQ9ROOWH[WLQGL]HV /HUQ]LHONRQWUROOH ,QKDOWGLHVHU)ROLH 9HUWLHIHQ6LHGLH/HUQ]LHOH GLHVHU8QWHUULFKWVHLQKHLW LQGHP6LHGLH.HUQSXQNWH ZLHGHUKROHQ (LQVWLHJ 'LH)UDJHQ]XU/HUQ]LHO NRQWUROOHEH]LHKHQVLFKDXI HLQLJHGHU6FKOVVHONRQ ]HSWHGLH,QKDOWGLHVHU 8QWHUULFKWVHLQKHLWVLQG (LQIKUXQJLQGHQ0LFURVRIW 6HDUFK'LHQVW .RPSRQHQWHQGHV0LFURVRIW 6HDUFK'LHQVWHV =XVDPPHQVWHOOHQYRQ,QIRUPDWLRQHQ]X 9ROOWH[WLQGL]HV 6FKUHLEHQYRQ 9ROOWH[WDEIUDJHQ ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** 1. Warum sollten Sie die Volltextsucherweiterungen anstelle der standardmäßigen Transact-SQL-Syntax zum Abfragen von Textdaten verwenden? Die standardmäßige Transact-SQL-Syntax gibt nur Mustervergleiche für Textfelder zurück, und es können keine regulären Indizes genutzt werden. Volltextabfragen sind für Wortübereinstimmungen und für die NEAR-Suche indiziert und optimiert. 2. Sie führen eine Volltextsuchabfrage aus, und es wird ein leeres Recordset für Ergebnisse zurückgegeben. Sie wissen, dass die Tabelle Daten enthält, die übereinstimmen sollten. Was ist zu tun? Ermitteln Sie den Zeitpunkt, zu dem der Volltextindex zuletzt aktualisiert wurde, indem Sie den Eigenschaftswert „PopulateCompletionAge“ untersuchen. Überprüfen Sie auch die „PopulateStatus“-Einstellung und die „ItemCount“-Einstellung für die entsprechenden Werte. 3. Sie möchten den Inhalt der garden description-Spalte für alle Formen des Wortes „cultivate“ durchsuchen, die in der Nähe des Wortes „roses“ stehen. Welche Schlüsselwörter würden Sie in Ihrer SELECT-Anweisung zum Erstellen dieser Suche verwenden? CONTAINS, FORMSOF und NEAR. 8QWHUULFKWVHLQKHLW$EIUDJHQYRQ9ROOWH[WLQGL]HV 4. In Ihrem Resultset möchten Sie eine Rangfolge erstellen. Welche Form von CONTAINS verwenden Sie dazu? CONTAINSTABLE 5. Welches Tabellenmerkmal ist beim Erstellen eines neuen Projekts und beim Laden der Datenbankstruktur oder beim Einfügen einer neuen Tabelle in ein bestehendes Projekt erforderlich, um die semantischen Beziehungen für eine Tabelle zu definieren? Für alle Tabellen ist ein definierter Primärschlüssel erforderlich. Unterrichtseinheit 9: Einführung zu Programmierobjekten Inhalt Übersicht 1 Anzeigen des Textes eines Programmierobjekts 2 Einführung zu Sichten 4 Vorteile von Sichten 6 Erstellen von Sichten 8 Einführung zu gespeicherten Prozeduren 13 Einführung zu Triggern 18 Einführung zu benutzerdefinierten Funktionen 19 Empfohlene Methoden 25 Übungseinheit A: Arbeiten mit Sichten 26 Lernzielkontrolle 33 Die in diesen Unterlagen enthaltenen Angaben und Daten, einschließlich URLs und anderer Verweise auf Internetwebsites, können ohne vorherige Ankündigung geändert werden. Die in den Beispielen genannten Firmen, Organisationen, Produkte, Domänennamen, E-Mail-Adressen, Logos, Personen, Orte und Ereignisse sind frei erfunden und jede Ähnlichkeit mit bestehenden Firmen, Organisationen, Produkten, Domänennamen, E-Mail-Adressen, Logos, Personen, Orten oder Ereignissen ist rein zufällig, soweit nichts anderes angegeben ist. Die Benutzer sind verantwortlich für das Einhalten aller anwendbaren Urheberrechtsgesetze. Unabhängig von der Anwendbarkeit der entsprechenden Urheberrechtsgesetze darf ohne ausdrückliche schriftliche Erlaubnis der Microsoft Corporation kein Teil dieses Dokuments für irgendwelche Zwecke vervielfältigt oder in einem Datenempfangssystem gespeichert oder darin eingelesen werden, unabhängig davon, auf welche Art und Weise oder mit welchen Mitteln (elektronisch, mechanisch, durch Fotokopieren, Aufzeichnen, usw.) dies geschieht. Microsoft Corporation kann Inhaber von Patenten oder Patentanträgen, Marken, Urheberrechten oder anderen gewerblichen Schutzrechten sein, die den Inhalt dieses Dokuments betreffen. Die Bereitstellung dieses Dokuments gewährt keinerlei Lizenzrechte an diesen Patenten, Marken, Urheberrechten oder anderen gewerblichen Schutzrechten, es sei denn, dies wurde ausdrücklich durch einen schriftlichen Lizenzvertrag mit der Microsoft Corporation vereinbart. 2001 Microsoft Corporation. Alle Rechte vorbehalten. Microsoft, BackOffice, MS-DOS, PowerPoint, Visual Studio, Windows, Windows Media und Windows NT sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Die in diesem Dokument aufgeführten Namen tatsächlicher Firmen und Produkte sind möglicherweise Marken der jeweiligen Eigentümer. 8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ LLL +LQZHLVHIUGHQ.XUVOHLWHU 3UlVHQWDWLRQ 0LQXWHQ hEXQJVHLQKHLW 0LQXWHQ Diese Unterrichtseinheit beschreibt die Erstellung von Programmierobjekten, die es dem Benutzer ermöglichen, Daten anzuzeigen und zu bearbeiten, ohne dass er die Komplexität der zugrunde liegenden Datenbankstruktur kennen muss. Die Unterrichtseinheit umfasst eine Einführung zu den Programmierobjekten, wie Sichten, gespeicherte Prozeduren, Trigger und benutzerdefinierte Funktionen, und beschreibt die Vorteile, die sich durch ihre Verwendung ergeben. Am Ende dieser Unterrichtseinheit werden die Kursteilnehmer in der Lage sein, die folgenden Aufgaben auszuführen: Anzeigen des Textes eines Programmierobjekts. Beschreiben des Sichtenkonzepts. Auflisten der Vorteile der Verwendung von Sichten. Erstellen von Sichten. Beschreiben gespeicherter Prozeduren. Beschreiben der Trigger. Beschreiben benutzerdefinierter Funktionen. 8QWHUODJHQXQG9RUEHUHLWXQJ In diesem Abschnitt werden die erforderlichen Unterlagen und vorbereitenden Aufgaben erläutert, die nötig sind, um diese Unterrichtseinheit zu unterrichten. (UIRUGHUOLFKH8QWHUODJHQ Um diese Unterrichtseinheit zu unterrichten, benötigen Sie folgende Unterlagen: Die Microsoft® PowerPoint®-Datei 2316B_09.ppt Die Beispieldatei C:\Moc\2316B\Demo\Ex_09.sql, die alle Beispielskripts der Unterrichtseinheit enthält, soweit in der Unterrichtseinheit nichts anderes angegeben ist. 9RUEHUHLWHQGH$XIJDEHQ Zur Vorbereitung dieser Unterrichtseinheit gehen Sie folgendermaßen vor: Lesen Sie alle Unterlagen. Arbeiten Sie die Übungseinheit durch. LY 8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ 6WUDWHJLHIUGLH8QWHUULFKWVHLQKHLW Verwenden Sie die folgende Strategie, um diese Unterrichtseinheit zu präsentieren: Die library-Datenbank wurde während der Installation des Kurses zufallsgesteuert aufgefüllt. Dies führt bei einigen Abfagen zu nicht vorhersagbaren Ergebnissen. Dies ist der Grund für Angaben wie „Es kommt zu etwa diesen Ergebnissen“. Anzeigen des Textes eines Programmierobjekts Geben Sie eine Einführung zur gespeicherten Systemprozedur sp_helptext. Einführung zu Sichten Beschreiben Sie das Sichtenkonzept. Betonen Sie, dass Sichten nichts anderes als gespeicherte Abfragen sind. Vorteile von Sichten Listen Sie die Vorteile der Verwendung von Sichten auf. Erstellen von Sichten Sichten ermöglichen das Speichern einer vordefinierten Abfrage als ein Objekt in der Datenbank, um es zu einem späteren Zeitpunkt zu verwenden. Sie bieten eine einfache Möglichkeit, vertrauliche Daten zu schützen oder die Komplexität einer Datenbankstruktur zu verbergen und Informationen bereitzustellen, ohne dass der Benutzer Transact-SQL-Anweisungen schreiben und ausführen muss. Erläutern Sie, wie Sichten erstellt, geändert und gelöscht werden. Weisen Sie darauf hin, dass es besonders wichtig ist, die Anweisung zum Erstellen der Sicht zu testen, bevor die Sicht tatsächlich damit erstellt wird. Besprechen Sie die Einschränkungen und Richtlinien, die von den Benutzern beachtet werden müssen. Beschreiben Sie, wie die Sichtdefinition verschlüsselt werden kann. Listen Sie die Systemtabellen mit den Sichtdefinitionsinformationen auf. Einführung zu gespeicherten Prozeduren Dieser Abschnitt gibt eine Einführung zu gespeicherten Prozeduren und beschreibt, wie Anwendungsentwurf und -leistung mit Hilfe gespeicherter Prozeduren verbessert werden können, indem Geschäftregeln zum Verarbeiten allgemeiner Abfragen und Datenänderungen zusammengefasst werden. Weisen Sie darauf hin, dass in diesem Abschnitt die Funktion und die Vorteile der Verwendung von gespeicherten Prozeduren erläutert werden. Betonen Sie, dass dabei auf die Funktionsweise gespeicherter Prozeduren nicht im Einzelnen eingegangen wird. Geben Sie einen Überblick über die Elemente einer gespeicherten Prozedur. Da die Kursteilnehmer im Rahmen dieses Kurses bereits gespeicherte Systemprozeduren ausgeführt haben, sollte ihnen deren Funktionsweise bekannt sein. Betonen Sie, dass die Hauptaufgabe in diesem Abschnitt darin besteht, gespeicherte Prozeduren zu erstellen, die in der lokalen Datenbank eines Benutzers definiert sind. 8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ Y Erläutern Sie, wie gespeicherte Prozeduren verarbeitet werden, um deutlich zu machen, warum sie schneller ausgeführt werden als Batches. Vergleichen Sie die Verarbeitungsleistung gespeicherter Prozeduren mit der von Batches. Ermuntern Sie die Kursteilnehmer dazu, in ihren Anwendungen gespeicherte Prozeduren zu erstellen, indem Sie noch einmal deren Vorteile betonen. Einführung zu Triggern Trigger sind ein hilfreiches Tool für Datenbankimplementierer, die möchten, dass vordefinierte Aktionen ausgeführt werden, sobald in einer bestimmten Tabelle Daten eingefügt, aktualisiert oder gelöscht werden. Das Ziel dieses Abschnitts ist es, auf die Funktionsweise von Triggern aufmerksam zu machen. Er gibt deshalb nur einen kurzen Überblick. Definieren Sie Trigger. Weisen Sie darauf hin, dass es sich bei einem Trigger um eine spezielle Form einer gespeicherten Prozedur handelt, der einer bestimmten Tabelle zugewiesen ist. Erläutern Sie abschließend die folgenden drei Kernpunkte: Trigger werden automatisch aufgerufen, Trigger werden nur durch eine Triggeraktion in der Triggertabelle aufgerufen, Trigger sind Transaktionen. Einführung zu benutzerdefinierten Funktionen Zusätzlich zu den integrierten Systemfunktionen von Microsoft SQL Server™ 2000 können Benutzer eigene benutzerdefinierte Funktionen erstellen. Erläutern Sie die allgemeine Syntax zum Erstellen einer Funktion, insbesondere den Befehl CREATE FUNCTION, den Funktionsnamen, die Eingabeparameter und einige der Einschränkungen beim Erstellen einer benutzerdefinierten Funktion. $QSDVVXQJVLQIRUPDWLRQHQ Dieser Abschnitt beschreibt die Anforderungen zum Einrichten der Übungseinheiten für eine Unterrichtseinheit sowie die Konfigurationsänderungen, die während der Übungseinheiten an den Kursteilnehmercomputern vorgenommen werden. Diese Informationen sollen Ihnen beim Replizieren oder Anpassen der Microsoft Official Curriculum-Courseware (MOC) helfen. :LFKWLJ Die Übungseinheit in dieser Unterrichtseinheit hängt von der Schulungsraumkonfiguration ab, die im Abschnitt „Anpassungsinformationen“ am Ende des Dokuments Handbuch für das Einrichten von Schulungscomputern für Kurs 2316B, Abfragen von Microsoft SQL Server 2000 mit Hilfe von Transact-SQL, angegeben ist. (LQULFKWHQGHUhEXQJVHLQKHLW Es gibt keine Anforderungen zum Einrichten der Übungseinheit, die die Replikation oder die Anpassung betreffen. (UJHEQLVVHGHUhEXQJVHLQKHLW Auf den Kursteilnehmercomputern gibt es keine Konfigurationsänderungen, die die Replikation oder die Anpassung betreffen. LL 8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ This page is intentionally left blank. 8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ hEHUVLFKW ,QKDOWGLHVHU)ROLH *HEHQ6LHHLQHhEHUVLFKW EHUGLH7KHPHQXQG/HUQ ]LHOHGLHVHU8QWHUULFKWV HLQKHLW (LQVWLHJ ,QGLHVHU8QWHUULFKWVHLQKHLW HUKDOWHQ6LH,QIRUPDWLRQHQ ]X3URJUDPPLHUREMHNWHQ $Q]HLJHQGHV7H[WHVHLQHV3URJUDPPLHUREMHNWV (LQIKUXQJ]X6LFKWHQ 9RUWHLOHYRQ6LFKWHQ (UVWHOOHQYRQ6LFKWHQ (LQIKUXQJ]XJHVSHLFKHUWHQ3UR]HGXUHQ (LQIKUXQJ]X7ULJJHUQ (LQIKUXQJ]XEHQXW]HUGHILQLHUWHQ)XQNWLRQHQ ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Diese Unterrichtseinheit beschreibt die Erstellung von Programmierobjekten, die es dem Benutzer ermöglichen, Daten anzuzeigen und zu bearbeiten, ohne dass er die Komplexität der zugrunde liegenden Datenbankstruktur kennen muss. Die Unterrichtseinheit umfasst eine Einführung zu den Programmierobjekten, wie Sichten, gespeicherte Prozeduren, Trigger und benutzerdefinierte Funktionen, und beschreibt die Vorteile, die sich durch ihre Verwendung ergeben. Am Ende dieser Unterrichtseinheit werden Sie in der Lage sein, die folgenden Aufgaben auszuführen: Anzeigen des Textes eines Programmierobjekts. Beschreiben des Sichtenkonzepts. Auflisten der Vorteile der Verwendung von Sichten. Erstellen von Sichten. Beschreiben gespeicherter Prozeduren. Beschreiben der Trigger. Beschreiben benutzerdefinierter Funktionen. 8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ $Q]HLJHQGHV7H[WHVHLQHV3URJUDPPLHUREMHNWV ,QKDOWGLHVHU)ROLH %HVFKUHLEHQ6LHZLHGHU 7HVWHLQHV3URJUDPPLHU REMHNWVDQJH]HLJWZLUG (;(&VSBKHOSWH[W> #REMQDPH @ QDPH (LQVWLHJ 6LHN|QQHQGLH7H[W GHILQLWLRQHLQHV3URJUDP PLHUREMHNWVPLW+LOIHHLQHU VSH]LHOOHQJHVSHLFKHUWHQ 6\VWHPSUR]HGXUDQ]HLJHQ 86(OLEUDU\ 86(OLEUDU\ (;(&VSBKHOSWH[W GER2YHUGXH9LHZ (;(&VSBKHOSWH[W GER2YHUGXH9LHZ *2 *2 1LFKW MHGHV 3URJUDPPLHUREMHNW YHUIJW EHU HLQHQ PLW LKP YHUEXQGHQHQ 7H[W ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Viele Verwaltungs- und Informationsaktivitäten in Microsoft® SQL Server™ 2000 können mit Hilfe gespeicherter Systemprozeduren ausgeführt werden. Sie können zum Beispiel die gespeicherte Systemprozedur sp_helptext zum Abrufen des Textes eines Programmierobjekts verwenden. 6\QWD[ 0HWKRGLVFKHU+LQZHLV 9HUZHQGHQ6LHLQGLHVHU 8QWHUULFKWVHLQKHLWLPPHU VSBKHOSWH[W]XP$Q]HLJHQ GHU'HILQLWLRQYRQ 3URJUDPPLHUREMHNWHQ (;(&VSBKHOSWH[W>#REMQDPH @ QDPH Der Parameter ist der Name des Objekts in der aktuellen Datenbank, dessen Definitionstext von SQL Server angezeigt wird. Die gespeicherte Systemprozedur sp_helptext druckt den Text, der zum Erstellen eines Objekts verwendet wird, in mehreren Zeilen aus, wobei jede Zeile 255 Zeichen der Transact-SQL-Definition enthält. Die Definition ist nur im Text in der syscomments-Tabelle der aktuellen Datenbank enthalten. %HLVSLHO (UJHEQLV 8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ In diesem Beispiel wird der Text zurückgegeben, der die dbo.OverdueViewSicht definiert. 86(OLEUDU\ (;(&VSBKHOSWH[W GER2YHUGXH9LHZ *2 7H[W 2YHUGXH9LHZ)UDJW2QORDQ9LHZDOV9HUNQSIXQJEHU 7DEHOOHQDE /LVWHWGLH0LWJOLHGHU7LWHOXQG$XVOHLKLQIRUPDWLRQHQHLQHV ]XU=HLWDXVJHOLHKHQHQXQGEHUIlOOLJHQ([HPSODUHVDXI &5($7(9,(:GER2YHUGXH9LHZ $6 6(/(&7 )5202QORDQ9LHZ :+(5(2QORDQ9LHZGXHBGDWH*(7'$7( 7LSS Verwenden Sie EXEC sp_helptext, um die Definitionen neu erstellter Programmierobjekte zu überprüfen. 8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ (LQIKUXQJ]X6LFKWHQ ,QKDOWGLHVHU)ROLH 6WHOOHQ6LHGDV.RQ]HSWYRQ 6LFKWHQYRUXQGJHEHQ6LH HLQ%HLVSLHO title title WLWOHBQR WLWOHBQR (LQVWLHJ %HLHLQHU6LFKWKDQGHOWHV VLFKXPHLQHDOWHUQDWLYH 0HWKRGH]XP$Q]HLJHQGHU 'DWHQDXVHLQHURGHU PHKUHUHQ7DEHOOHQ WLWOH WLWOH /DVWRIWKH0RKLFDQV /DVWRIWKH0RKLFDQV 7KH9LOODJH:DWFK7RZHU 7KH9LOODJH:DWFK7RZHU 3RHPV 3RHPV TitleView TitleView WLWOH WLWOH /DVWRIWKH0RKLFDQV /DVWRIWKH0RKLFDQV 7KH9LOODJH:DWFK7RZHU 7KH9LOODJH:DWFK7RZHU 3RHPV 3RHPV DXWKRU DXWKRU -DPHV)HQLPRUH -DPHV)HQLPRUH&RRSHU &RRSHU .DWH'RXJODV:LJJLQ .DWH'RXJODV:LJJLQ :LOIUHG2ZHQ :LOIUHG2ZHQ V\QRSVLV V\QRSVLV aaa aaa aaa aaa aaa aaa 86(OLEUDU\ 86(OLEUDU\ *2 *2 &5($7(9,(:GER7LWOH9LHZ &5($7(9,(:GER7LWOH9LHZ $6 $6 6(/(&7WLWOHDXWKRU 6(/(&7WLWOHDXWKRU )520WLWOH )520WLWOH *2 *2 DXWKRU DXWKRU -DPHV)HQLPRUH -DPHV)HQLPRUH&RRSHU &RRSHU .DWH'RXJODV:LJJLQ .DWH'RXJODV:LJJLQ :LOIUHG2ZHQ :LOIUHG2ZHQ Sicht Sichtdes desBenutzers Benutzers ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** 0HWKRGLVFKHU+LQZHLV 9HUJHJHQZlUWLJHQ6LHGHQ .XUVWHLOQHKPHUQGDVVGDV 6FKUHLEHQYRQ$GKRF$E IUDJHQLQDQGHUHQ8QWHU ULFKWVHLQKHLWHQGLHVHV .XUVHVEHKDQGHOWZLUG :HLVHQ6LHGDUDXIKLQGDVV LQGLHVHU8QWHUULFKWVHLQKHLW GDV6SHLFKHUQYRQ$EIUDJHQ DOV2EMHNWH6LFKWHQJH VSHLFKHUWH3UR]HGXUHQXQG 7ULJJHULQGHU'DWHQEDQN EHVFKULHEHQZLUG Bei einer Sicht handelt es sich um eine alternative Methode zum Anzeigen der Daten aus einer oder mehreren Tabellen. Eine Sicht ist mit einer virtuellen Tabelle oder einer gespeicherten Abfrage vergleichbar. Die Daten, auf die über eine Sicht zugegriffen wird, sind nicht als wirkliche Objekte in der Datenbank gespeichert. Was in der Datenbank gespeichert wird, ist eine SELECT-Anweisung. Das Resultset der SELECTAnweisung bildet die virtuelle Tabelle, die von der Sicht zurückgegeben wird. Sie können diese virtuelle Tabelle verwenden, indem Sie in Transact-SQLAnweisungen auf den Namen der Sicht wie auf einen Tabellennamen verweisen. Sie können eine Sicht zu folgenden Zwecken verwenden: Einschränken des Benutzerzugriffs auf bestimmte Zeilen einer Tabelle Sie können zum Beispiel festlegen, dass ein Mitarbeiter nur die Zeilen einer Arbeitsprotokolltabelle sieht, in denen seine Arbeitsdaten aufgezeichnet werden. Einschränken des Benutzerzugriffs auf bestimmte Spalten Sie können zum Beispiel festlegen, dass Mitarbeiter ohne Festanstellung zwar die Spalten für Name, Büro, Rufnummer und Abteilung sehen, jedoch keine Spalten mit Gehältern oder persönlichen Informationen. Verknüpfen von Spalten aus mehreren Tabellen zu einer einzigen Tabelle Aggregieren von Informationen statt Bereitstellen von Detailinformationen Sie können zum Beispiel die Summe einer Spalte oder den höchsten bzw. niedrigsten Wert aus einer Spalte anzeigen. %HLVSLHO $EIUDJH (UJHEQLV 8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ In diesem Beispiel wird die TitleView-Sicht in der library-Datenbank erstellt. Die Sicht zeigt zwei Spalten der title-Tabelle an. 86(OLEUDU\ *2 &5($7(9,(:GER7LWOH9LHZ $6 6(/(&7WLWOHDXWKRU )520WLWOH *2 6(/(&7IURP7LWOH9LHZ *2 WLWOH /DVWRIWKH0RKLFDQV 7KH9LOODJH:DWFK7RZHU 6HOI+HOS&RQGXFW3HUVHYHUDQFH URZVDIIHFWHG author -DPHV)HQLPRUH&RRSHU .DWH'RXJODV:LJJLQ 6DPXHO6PLOHV 8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ 9RUWHLOHYRQ6LFKWHQ ,QKDOWGLHVHU)ROLH (UOlXWHUQ6LHZDUXP %HQXW]HU6LFKWHQHUVWHOOHQ RGHUYHUZHQGHQ z (LQVWLHJ 6LFKWHQELHWHQPHKUHUH 9RUWHLOH .RQ]HQWULHUHQGHU'DWHQIU%HQXW]HU z .RQ]HQWULHUHQ DXIDXVVFKOLHOLFKZLFKWLJHRGHU JHHLJQHWH'DWHQ =XJDQJ ]X YHUWUDXOLFKHQ 'DWHQ HLQVFKUlQNHQ 9HUEHUJHQGHU'DWHQEDQNNRPSOH[LWlW z z 9HUEHUJHQNRPSOH[HU'DWHQEDQNHQWZUIH 9HUHLQIDFKHQ YRQ$EIUDJHQHLQVFKOLHOLFK YHUWHLOWHU $EIUDJHQIU KHWHURJHQH 'DWHQ 9HUHLQIDFKHQGHU9HUZDOWXQJYRQ%HQXW]HUEHUHFKWLJXQJHQ 2UJDQLVLHUHQYRQ'DWHQIUGHQ([SRUWLQDQGHUH $QZHQGXQJHQ ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Sichten bieten unter anderem die folgenden Vorteile: Sie konzentrieren Daten für Benutzer, verbergen die Komplexität von Daten, vereinfachen die Verwaltung von Berechtigungen und organisieren Daten für den Export in andere Anwendungen. .RQ]HQWULHUHQGHU'DWHQIU%HQXW]HU Sichten schaffen eine kontrollierte Umgebung, die den Zugriff auf bestimmte Daten ermöglicht und andere Daten verbirgt. Es ist möglich, nicht benötigte, vertrauliche oder ungeeignete Daten aus einer Sicht auszuschließen. Benutzer können die Anzeige von Daten in einer Sicht ähnlich wie in einer Tabelle bearbeiten. Darüber hinaus können sie (mit den entsprechenden Berechtigungen und einigen Einschränkungen) die von einer Sicht erzeugten Daten ändern. 9HUEHUJHQGHU'DWHQEDQNNRPSOH[LWlW Sichten verbergen die Komplexität des Datenbankentwurfs vor dem Benutzer. Dies bietet Entwicklern die Möglichkeit, den Entwurf zu ändern, ohne dass sich dies auf den Benutzerdialog mit der Datenbank auswirkt. Darüber hinaus kann eine benutzerfreundlichere Anzeige der Daten erstellt werden, indem Namen verwendet werden, die einfacher zu verstehen sind als die in Datenbanken häufig verwendeten unverständlichen Namen. Komplexe Abfragen, einschließlich verteilter Abfragen für heterogene Daten, können ebenfalls durch Sichten verborgen werden. Der Benutzer fragt die Sicht ab, statt die Abfrage zu schreiben oder ein Skript auszuführen. 8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ 9HUHLQIDFKHQGHU9HUZDOWXQJYRQ%HQXW]HU EHUHFKWLJXQJHQ Statt Benutzern die Berechtigung zum Abfragen bestimmter Spalten in Basistabellen zu erteilen, können Datenbankbesitzer Benutzern die Berechtigung erteilen, Daten nur über Sichten abzufragen. Auf diese Weise werden auch Änderungen am Entwurf der zugrunde liegenden Basistabellen geschützt. Benutzer können die Sicht ohne Unterbrechung weiter abfragen. 2UJDQLVLHUHQYRQ'DWHQIUGHQ([SRUWLQDQGHUH $QZHQGXQJHQ Sie können eine Sicht auf der Basis einer komplexen Abfrage erstellen, die mehrere Tabellen miteinander verknüpft, und die Daten dann zur weiteren Analyse in eine andere Anwendung exportieren. 8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ (UVWHOOHQYRQ6LFKWHQ ,QKDOWGLHVHU)ROLH *HEHQ6LHHLQHQhEHUEOLFN EHUGLH7KHPHQGLHVHV $EVFKQLWWV 'HILQLHUHQYRQ6LFKWHQ (LQVWLHJ (LQVFKUlQNXQJHQEHLP(UVWHOOHQYRQ6LFKWHQ %HLVSLHO$Q]HLJHQYRQ,QIRUPDWLRQHQDXVPHKUHUHQ 7DEHOOHQ ,QGLHVHP$EVFKQLWWZLUG EHVFKULHEHQZLH6LFKWHQ HUVWHOOWZHUGHQ ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Dieser Abschnitt beschreibt, wie Sichten erstellt werden, und erläutert Einschränkungen, die beim Erstellen von Sichten zu beachten sind. Er stellt darüber hinaus ein Beispiel für eine Anzeige von Informationen aus mehreren verknüpften Tabellen an einem zentralen Ort bereit. 8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ 'HILQLHUHQYRQ6LFKWHQ ,QKDOWGLHVHU)ROLH %HVFKUHLEHQ6LHZLH 6LFKWHQGHILQLHUWZHUGHQ (LQVWLHJ %HLP(UVWHOOHQHLQHU6LFKW EHUSUIW64/6HUYHUGLH ([LVWHQ]GHU2EMHNWHDXI GLHLQGHU6LFKWYHUZLHVHQ ZLUG Beispiel Beispiel 1: 1: Erstellen Erstellen einer einer Sicht Sicht 86(OLEUDU\ 86(OLEUDU\ *2 *2 &5($7(9,(:GER8QSDLG)LQHV9LHZ0HPEHU7RWDO8QSDLG)LQHV &5($7(9,(:GER8QSDLG)LQHV9LHZ0HPEHU7RWDO8QSDLG)LQHV $6 $6 6(/(&7PHPEHUBQRVXPILQHBDVVHVVHGILQHBSDLG 6(/(&7PHPEHUBQRVXPILQHBDVVHVVHGILQHBSDLG )520ORDQKLVW )520ORDQKLVW *5283%<PHPEHUBQR *5283%<PHPEHUBQR +$9,1*680ILQHBDVVHVVHGILQHBSDLG! +$9,1*680ILQHBDVVHVVHGILQHBSDLG! *2 *2 Beispiel Beispiel 2: 2: Abfragen Abfragen einer einer Sicht Sicht 6(/(&7 6(/(&7 )5208QSDLG)LQHV9LHZ )5208QSDLG)LQHV9LHZ *2 *2 ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Beim Erstellen einer Sicht überprüft SQL Server die Existenz der Objekte, auf die in der Sicht verwiesen wird. Der Sichtname muss den Regeln für Be(PSIHKOHQ6LHGHQ.XUVWHLO zeichner entsprechen. Die Angabe eines Besitzernamens für die Sicht ist QHKPHUQHLQHNRQVLVWHQWH %HQHQQXQJVNRQYHQWLRQ]XP optional. Sie sollten eine konsistente Benennungskonvention entwickeln, um Sichten von Tabellen zu unterscheiden. Sie können zum Beispiel das Wort 8QWHUVFKHLGHQYRQ6LFKWHQ „View“ als Suffix für jedes Objekt verwenden, das Sie erstellen. Auf diese XQG7DEHOOHQ]XHQWZLFNHOQ Weise können Sie ähnliche Objekte (Tabellen und Sichten) beim Abfragen der XQGGERDOV%HVLW]HUQDPH INFORMATION_SCHEMA.TABLES-Sicht leicht unterscheiden. DQ]XJHEHQ 0HWKRGLVFKHU+LQZHLV 6\QWD[ CREATE VIEW owner.view_name [(column[, n.])] [WITH ENCRYPTION] AS select_statement [WITH CHECK OPTION] Zum Ausführen der CREATE VIEW-Anweisung müssen Sie Mitglied der Rollen sysadmin (Systemadministratoren), db_owner (Datenbankbesitzer) oder db_ddladmin (Administrator für die Datendefinitionssprache) sein oder Ihnen muss die Berechtigung für CREATE VIEW erteilt worden sein. Außerdem müssen Sie die SELECT-Berechtigung für alle Tabellen oder Sichten haben, auf die in der Sicht verwiesen wird. Um Situationen zu vermeiden, in denen der Besitzer einer Sicht und der Besitzer einer zugrunde liegenden Tabelle nicht identisch sind, wird empfohlen, dass der dbo-Benutzer sämtliche Objekte in einer Datenbank besitzt. Geben Sie beim Erstellen eines Objekts immer den dbo-Benutzer als Besitzername an; andernfalls wird das Objekt mit Ihrem Benutzernamen als Objektbesitzer erstellt. 8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ Der Inhalt einer Sicht wird mit einer SELECT-Anweisung angegeben. Von wenigen Einschränkungen abgesehen, können Sichten beliebig komplex sein. Spaltennamen müssen in den beiden folgenden Fällen angegeben werden: 0HWKRGLVFKHU+LQZHLV 6SDOWHQQDPHQN|QQHQDXI ]ZHL$UWHQDQJHJHEHQ ZHUGHQLQGHU6(/(&7 $QZHLVXQJXQWHU9HUZHQ GXQJGHV6SDOWHQDOLDVRGHU LQGHU&5($7(9,(: $QZHLVXQJ %HLVSLHO %HLVSLHO Spalten der Sicht basieren auf einem arithmetischen Ausdruck, einer integrierten Funktion oder einer Konstante. Spalten in zu verknüpfenden Tabellen haben identische Namen. :LFKWLJ Beim Erstellen von Sichten muss die SELECT-Anweisung zum Definieren der Sicht unbedingt getestet werden, um sicherzustellen, dass SQL Server das erwartete Resultset zurückgibt. Erstellen Sie die Sicht erst, nachdem Sie die SELECT-Anweisung geschrieben und getestet sowie die Ergebnisse überprüft haben. Dies ist ein Beispiel für eine Sicht, die eine Spalte (TotalUnpaidFines) mit den Werten erstellt, die durch Subtrahieren des Wertes der fine_paid-Spalte von der fine_assessed-Spalte berechnet werden. 86(OLEUDU\ *2 &5($7(9,(:GER8QSDLG)LQHV9LHZ0HPEHU7RWDO8QSDLG)LQHV $6 6(/(&7PHPEHUBQRVXPILQHBDVVHVVHGILQHBSDLG )520ORDQKLVW *5283%<PHPEHUBQR +$9,1*680ILQHBDVVHVVHGILQHBSDLG! *2 In diesem Beispiel wird die Sicht abgefragt, um die Ergebnisse anzuzeigen. 6(/(&7 )5208QSDLG)LQHV9LHZ *2 Es kommt zu etwa den folgenden Ergebnissen. (UJHEQLV 0HPEHU 7RWDO8QSDLG)LQHV 7744 83.2 URZVDIIHFWHG :DUQXQJ18//:HUWZLUGGXUFKHLQH$JJUHJDW2SHUDWLRQ JHO|VFKW 8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ (LQVFKUlQNXQJHQEHLP(UVWHOOHQYRQ6LFKWHQ ,QKDOWGLHVHU)ROLH %HVFKUHLEHQ6LHGLH(LQ VFKUlQNXQJHQEHLP(U VWHOOHQYRQ6LFKWHQ .|QQHQDXIPD[LPDO6SDOWHQYHUZHLVHQ (LQVWLHJ .|QQHQQLFKWGLH&20387( RGHU&20387(%< .ODXVHOHQWKDOWHQ %HDFKWHQ6LHGLHVH(LQ VFKUlQNXQJHQEHLP 'HILQLHUHQYRQ6LFKWHQ .|QQHQGLH25'(5%<.ODXVHO QXULQ9HUELQGXQJPLW HLQHU723.ODXVHOHQWKDOWHQ .|QQHQQLFKWGDV6FKOVVHOZRUW,172HQWKDOWHQ .|QQHQQLFKWDXIWHPSRUlUH7DEHOOHQYHUZHLVHQ 0XVVDOVHLQ]HOQHU 7UDQVDFW64/6WDSHODXVJHGUFNW ZHUGHQ ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Beachten Sie beim Erstellen von Sichten die folgenden Einschränkungen: Sichten können auf maximal 1024 Spalten verweisen. Die CREATE VIEW-Anweisung kann nicht die COMPUTE- oder COMPUTE BY-Klausel enthalten. Die CREATE VIEW-Anweisung kann die ORDER BY-Klausel nur enthalten, wenn die SELECT-Anweisung eine TOP-Klausel enthält. Die CREATE VIEW-Anweisung kann nicht das Schlüsselwort INTO enthalten. Sichten können nicht auf temporäre Tabellen verweisen. Die CREATE VIEW-Anweisung kann nicht mit anderen Transact-SQLAnweisungen in einem einzigen Batch zusammengefasst werden. 8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ %HLVSLHO$Q]HLJHQYRQ,QIRUPDWLRQHQDXVPHKUHUHQ7DEHOOHQ ,QKDOWGLHVHU)ROLH *HEHQ6LHHLQ%HLVSLHOIU GDV$Q]HLJHQYRQ,QIRUPD WLRQHQDXVPHKUHUHQ 7DEHOOHQ PHPEHU PHPEHUBQR PHPEHUBQR 11 11 12 12 13 13 14 14 ODVWQDPH ODVWQDPH Thomas Thomas Thomas Thomas Funk Funk Rudd Rudd MXYHQLOH ILUVWQDPH ILUVWQDPH Gary Gary Clair Clair Frank Frank Clair Clair PLGGOHLQLWLDO PLGGOHLQLWLDO ~~~ ~~~ ~~~ ~~~ ~~~ ~~~ ~~~ ~~~ SKRWRJUDSK SKRWRJUDSK ~~~ ~~~ ~~~ ~~~ ~~~ ~~~ ~~~ ~~~ PHPEHUBQR PHPEHUBQR 12 12 13 13 DGXOWBQR DGXOWBQR ELUWKBGDWH ELUWKBGDWH 11 11 66 (LQVWLHJ 6LHZHUGHQKlXILJ6LFKWHQ ]XP$Q]HLJHQYRQ,QIRUPD WLRQHQDXVPHKUHUHQYHU NQSIWHQ7DEHOOHQDQHLQHP ]HQWUDOHQ2UWHUVWHOOHQ 86(OLEUDU\ 86(OLEUDU\ *2 *2 &5($7(9,(:GERELUWKGD\YLHZ &5($7(9,(:GERELUWKGD\YLHZ ODVWQDPHILUVWQDPHELUWKBGDWH ODVWQDPHILUVWQDPHELUWKBGDWH $6 $6 6(/(&7ODVWQDPHILUVWQDPH 6(/(&7ODVWQDPHILUVWQDPH &219(57FKDUELUWKBGDWH &219(57FKDUELUWKBGDWH )520PHPEHU )520PHPEHU ,11(5-2,1MXYHQLOH ,11(5-2,1MXYHQLOH 21PHPEHUPHPEHUBQR 21PHPEHUPHPEHUBQR MXYHQLOHPHPEHUBQR MXYHQLOHPHPEHUBQR *2 *2 %LUWKGD\9LHZ ODVWQDPH ODVWQDPH ILUVWQDPH ILUVWQDPH %LUWK'DWH %LUWK'DWH Thomas 92.01.16 Thomas Gary Gary 92.01.16 Funk Frank 84.01.18 Funk Frank 84.01.18 ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Sie werden häufig Sichten zum Anzeigen von Informationen aus mehreren verknüpften Tabellen an einem zentralen Ort erstellen. %HLVSLHO 0HWKRGLVFKHU+LQZHLV 'LH&219(57)XQNWLRQ LQGHU$EIUDJHlQGHUWGLH ELUWKBGDWH6SDOWHGLHPLW GHPGDWHWLPH'DWHQW\S GHILQLHUWLVWLQGDV$16, )RUPDW In diesem Beispiel wird die birthdayview-Sicht erstellt, die die Tabellen member und juvenile verknüpft. 86(OLEUDU\ *2 &5($7(9,(:GERELUWKGD\YLHZ ODVWQDPHILUVWQDPHELUWKBGDWH $6 6(/(&7ODVWQDPHILUVWQDPH &219(57FKDUELUWKBGDWH )520PHPEHU ,11(5-2,1MXYHQLOH 21PHPEHUPHPEHUBQR MXYHQLOHPHPEHUBQR *2 Wenn Sie die Sicht nach NULL-Werten in der birthday-Spalte abfragen, werden korrekterweise keine Zeilen zurückgegeben. (UJHEQLV 6(/(&7 )520ELUWKGD\YLHZ :+(5(ELUWKBGDWHLVQXOO *2 ODVWQDPH ILUVWQDPH ELUWKGD\ URZVDIIHFWHG 8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ (LQIKUXQJ]XJHVSHLFKHUWHQ3UR]HGXUHQ ,QKDOWGLHVHU)ROLH *HEHQ6LHHLQHQhEHUEOLFN EHUGLH7KHPHQGLHVHV $EVFKQLWWV 'HILQLHUHQJHVSHLFKHUWHU3UR]HGXUHQ (LQVWLHJ 9RUWHLOHGHU9HUZHQGXQJJHVSHLFKHUWHU3UR]HGXUHQ 'LHVHU$EVFKQLWWJLEWHLQH (LQIKUXQJ]XJHVSHLFKHU WHQ3UR]HGXUHQXQGOLVWHW HLQLJH9RUWHLOHGHU9HU ZHQGXQJJHVSHLFKHUWHU 3UR]HGXUHQDXI ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** .HUQSXQNWH %HWRQHQ6LHGDVVLQGLHVHP $EVFKQLWWDXIGLH)XQNWLRQV ZHLVHJHVSHLFKHUWHU3UR]H GXUHQQLFKWLP(LQ]HOQHQ HLQJHJDQJHQZLUG9HU ZHLVHQ6LHGLH.XUVWHLO QHKPHUDXIGLH,QIRUPD WLRQHQLQGHU64/6HUYHU 2QOLQHGRNXPHQWDWLRQ Dieser Abschnitt gibt eine Einführung zu gespeicherten Prozeduren und listet einige Vorteile der Verwendung gespeicherter Prozeduren auf. 8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ 'HILQLHUHQJHVSHLFKHUWHU3UR]HGXUHQ ,QKDOWGLHVHU)ROLH 'HILQLHUHQ6LHJHVSHLFKHUWH 3UR]HGXUHQ (LQVWLHJ (LQHJHVSHLFKHUWH3UR]HGXU LVWHLQHEHQDQQWH$XIOLVWXQJ YRQYRUNRPSLOLHUWHQ 7UDQVDFW64/$QZHLVXQ JHQGLHDXIGHP6HUYHU JHVSHLFKHUWLVW (LQHJHVSHLFKHUWH3UR]HGXULVWHLQHEHQDQQWH$XIOLVWXQJ YRQ YRUNRPSLOLHUWHQ7UDQVDFW64/$QZHLVXQJHQ (LQHJHVSHLFKHUWH3UR]HGXUIDVVWVLFKZLHGHUKROHQGH $XIJDEHQ]XVDPPHQ *HVSHLFKHUWH 3UR]HGXUHQ KDEHQ IROJHQGH 0HUNPDOH z 6LHHQWKDOWHQ$QZHLVXQJHQGLH2SHUDWLRQHQDXVIKUHQ z 6LHDN]HSWLHUHQ(LQJDEHSDUDPHWHU z z 6LHN|QQHQHLQHQ6WDWXVZHUW ]XUFNJHEHQGHU(UIROJ RGHU)HKOHUPHOGHW 6LHN|QQHQPHKUHUH$XVJDEHSDUDPHWHU]XUFNJHEHQ ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Eine gespeicherte Prozedur ist eine benannte Auflistung von vorkompilierten Transact-SQL-Anweisungen, die auf dem Server gespeichert ist. Die Verwendung einer gespeicherten Prozedur ist eine Methode, sich wiederholende Aufgaben zusammenzufassen, um sie effizienter auszuführen. Gespeicherte Prozeduren unterstützen benutzerdeklarierte Variablen, ablaufgesteuerte Ausführung und andere erweiterte Programmierfunktionen. Gespeicherte Prozeduren in SQL Server entsprechen in vieler Hinsicht Prozeduren in anderen Programmiersprachen und bieten daher folgende Funktionalitäten und Merkmale: Sie können Anweisungen enthalten, die Operationen in der Datenbank ausführen, was auch die Möglichkeit einschließt, andere gespeicherte Prozeduren aufzurufen. Sie akzeptieren Eingabeparameter. Sie können einen Statuswert an eine aufrufende gespeicherte Prozedur oder ein Batch zurückgeben, der einen Erfolg oder Fehler (sowie den Grund für den Fehler) meldet. Sie können mehrere Werte in Form von Ausgabeparametern an die aufrufende gespeicherte Prozedur oder den Batch zurückgeben. %HLVSLHO 8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ Dieses Beispiel zeigt die Erstellung einer einfachen gespeicherten Prozedur mit einer komplexen SELECT-Anweisung. Die gespeicherte Prozedur gibt alle Autoren (mit Vor- und Nachnamen) sowie ihre Titel und Veröffentlichungen aus vier verknüpften Tabellen der pubs-Datenbank zurück. Die gespeicherte Prozedur verwendet keine Parameter. 86(SXEV *2 &5($7(352&('85(DXBLQIRBDOO $6 6(/(&7DXBOQDPHDXBIQDPHWLWOHSXEBQDPH )520DXWKRUV$6D ,11(5-2,1WLWOHDXWKRU$6WD21DDXBLG WDDXBLG ,11(5-2,1WLWOHV$6W21WWLWOHBLG WDWLWOHBLG ,11(5-2,1SXEOLVKHUV$6S21WSXEBLG SSXEBLG *2 8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ 9RUWHLOHGHU9HUZHQGXQJJHVSHLFKHUWHU3UR]HGXUHQ ,QKDOWGLHVHU)ROLH (UOlXWHUQ6LHGLH9RUWHLOH YRQJHVSHLFKHUWHQ 3UR]HGXUHQ *HPHLQVDPH1XW]XQJGHU$QZHQGXQJVORJLN (LQVWLHJ 9HUEHUJHQ YRQ'HWDLOVGHV'DWHQEDQNVFKHPDV %HUHLWVWHOOXQJYRQ6LFKHUKHLWVPHFKDQLVPHQ /HLVWXQJVYHUEHVVHUXQJ 5HGX]LHUXQJGHV'DWHQYHUNHKUVLP1HW]ZHUN *HVSHLFKHUWH3UR]HGXUHQ ELHWHQ]DKOUHLFKH9RUWHLOH ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Gespeicherte Prozeduren bieten zahlreiche Vorteile. Durch die Verwendung von gespeicherten Prozeduren kann die Auslastung der zur Ausführung benötigten Ressourcen erheblich verringert und die Ausführungszeit verkürzt werden. Sie bieten folgende Vorteile: Gemeinsame Nutzung der Anwendungslogik mit anderen Anwendungen und dadurch Gewährleistung der Datenkonsistenz bei Zugriffen und Änderungen. Geschäftsfunktionen können mit Hilfe gespeicherter Prozeduren zusammengefasst werden. Sie haben die Möglichkeit, in gespeicherten Prozeduren zusammengefasste Geschäftsregeln oder Richtlinien an einem einzigen Ort zu ändern. Auf allen Clients können dieselben gespeicherten Prozeduren verwendet werden, wodurch Datenkonsistenz bei Zugriffen und Änderungen gewährleistet ist. Benutzer erhalten keinen Einblick in die Details der Datenbanktabelle. Wenn eine Gruppe von gespeicherten Prozeduren alle Geschäftsfunktionen unterstützt, die Benutzer ausführen müssen, müssen die Benutzer niemals direkt auf die Tabellen zugreifen. Bereitstellung von Sicherheitsmechanismen. Benutzern können Berechtigungen zum Ausführen einer gespeicherten Prozedur erteilt werden, auch wenn sie nicht berechtigt sind, auf die in der gespeicherten Prozedur referenzierten Tabellen oder Sichten zuzugreifen. Leistungsverbesserung. Mit gespeicherten Prozeduren werden mehrere Aufgaben als eine Reihe von Transact-SQL-Anweisungen implementiert. Auf die Ergebnisse der ersten Transact-SQL-Anweisungen kann eine Bedingungslogik angewendet werden, um zu ermitteln, welche der nachfolgenden Transact-SQL-Anweisungen ausgeführt wird. Diese TransactSQL-Anweisungen und die Bedingungslogik werden als Teil eines einzelnen Ausführungsplanes auf dem Server gespeichert. 8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ 'HU'DWHQYHUNHKULP1HW] ZHUNZLUGUHGX]LHUWGDIU GDV6HQGHQYRQ$QIRUGH UXQJHQZHQLJHU3DNHWH EHQ|WLJWZHUGHQ Reduzierung des Datenverkehrs im Netzwerk. Anstatt mehrere hundert Transact-SQL-Anweisungen über das Netzwerk zu senden, können Benutzer eine komplexe Operation ausführen, indem Sie nur eine einzelne Anweisung senden. Dadurch wird die Anzahl der zwischen Server und Client übermittelten Anforderungen reduziert. 8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ (LQIKUXQJ]X7ULJJHUQ ,QKDOWGLHVHU)ROLH (UOlXWHUQ6LHGDV.RQ]HSW HLQHV7ULJJHUV (LQVWLHJ (LQ7ULJJHULVWHLQHVSH]LHOOH )RUPHLQHUJHVSHLFKHUWHQ 3UR]HGXU (LQ 7ULJJHU LVWHLQHVSH]LHOOH)RUPHLQHUJHVSHLFKHUWHQ 3UR]HGXU 7ULJJHU ]HLFKQHQVLFKGXUFKIROJHQGH0HUNPDOHDXV z 7ULJJHU VLQGPLWHLQHU7DEHOOHYHUNQSIW z 7ULJJHU ZHUGHQDXWRPDWLVFKDXIJHUXIHQ z 7ULJJHU N|QQHQQLFKWGLUHNWDXIJHUXIHQZHUGHQ z 7ULJJHU VLQG7HLOGHU7UDQVDNWLRQYRQGHUVLHDXVJHO|VW ZXUGHQ ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Ein Trigger ist eine spezielle Form einer gespeicherten Prozedur, der ausgeführt wird, sobald Daten in einer Tabelle geändert werden, die vom Trigger geschützt %HWRQHQ6LHGDVVLQGLHVHP wird. $EVFKQLWWDXIGLH)XQNWLRQV .HUQSXQNWH ZHLVHYRQ7ULJJHUQQLFKWLP (LQ]HOQHQHLQJHJDQJHQ ZLUG9HUZHLVHQ6LHGLH .XUVWHLOQHKPHUDXIGLH,QIRU PDWLRQHQLQGHU 64/6HUYHU2QOLQHGRNX PHQWDWLRQ Die beste Verwendungsmöglichkeit von Triggern liegt in der Aufrechterhaltung der Datenintegrität auf der unteren Ebene, nicht in der Ausgabe von Abfrageergebnissen. Der Hauptvorteil von Triggern besteht darin, dass sie eine komplexe Verarbeitungslogik enthalten können. Trigger zeichnen sich durch folgende Merkmale aus: 7ULJJHUVLQGPLWHLQHU7DEHOOHYHUNQSIW Trigger werden für eine bestimmte Tabelle definiert, die als Triggertabelle bezeichnet wird. 7ULJJHUZHUGHQDXWRPDWLVFKDXIJHUXIHQ Bei einem Versuch, Daten in eine Tabelle einzufügen oder Daten in einer Tabelle zu aktualisieren oder zu löschen, wird der Trigger automatisch ausgeführt, wenn für die spezielle Aktion ein Trigger für die Tabelle definiert wurde. Der Trigger kann nicht umgangen werden. 7ULJJHUN|QQHQQLFKWGLUHNWDXIJHUXIHQZHUGHQ Im Gegensatz zu gespeicherten Standardsystemprozeduren können Trigger nicht direkt aufgerufen werden und keine Parameter übergeben oder übernehmen. 7ULJJHUVLQG7HLOGHU7UDQVDNWLRQYRQGHUVLHDXVJHO|VWZXUGHQ Der Trigger und die den Trigger auslösende Anweisung werden als eine einzelne Transaktion behandelt, für die an einer beliebigen Stelle innerhalb des Triggers ein Rollback ausgeführt werden kann. Die Anweisung, die den Trigger auslöst, gilt als Anfang einer impliziten Transaktion, sofern keine explizite BEGIN TRANSACTION-Anweisung eingefügt wird. Der Benutzer, der den Trigger aufgerufen hat, muss außerdem berechtigt sein, alle Anweisungen für alle Tabellen auszuführen. Wenn der Trigger fehlschlägt, gilt das auch für die Transaktion, die ihn aufgerufen hat. 8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ (LQIKUXQJ]XEHQXW]HUGHILQLHUWHQ)XQNWLRQHQ ,QKDOWGLHVHU)ROLH *HEHQ6LHHLQHQhEHUEOLFN EHUGLH7KHPHQGLHVHV $EVFKQLWWV $UWHQYRQEHQXW]HUGHILQLHUWHQ)XQNWLRQHQ (LQVWLHJ (UVWHOOHQHLQHUEHQXW]HUGHILQLHUWHQ)XQNWLRQ 'LHVHU$EVFKQLWWJLEWHLQH hEHUVLFKWEHUEHQXW]HU GHILQLHUWH)XQNWLRQHQXQG HUOlXWHUWZDUXPXQGZLHVLH YHUZHQGHWZHUGHQ ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Funktionen sind Teilroutinen, die aus einer oder mehreren Transact-SQLAnweisungen bestehen und die Sie dazu verwenden können, Code für eine %HWRQHQ6LHGDVVLQGLHVHP erneute Verwendung zusammenzufassen. Zusätzlich zu den integrierten $EVFKQLWWDXIGLH)XQNWLRQV Systemfunktionen von Microsoft SQL Server 2000 können Benutzer eigene ZHLVHYRQEHQXW]HUGHILQLHU benutzerdefinierte Funktionen erstellen. WHQ)XQNWLRQHQQLFKWLP(LQ .HUQSXQNWH ]HOQHQHLQJHJDQJHQZLUG 9HUZHLVHQ6LHGLH.XUVWHLO QHKPHUDXIGLH,QIRUPD WLRQHQLQGHU64/6HUYHU 2QOLQHGRNXPHQWDWLRQ 8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ $UWHQYRQEHQXW]HUGHILQLHUWHQ)XQNWLRQHQ ,QKDOWGLHVHU)ROLH 6WHOOHQ6LHGDV.RQ]HSW HLQHUEHQXW]HUGHILQLHUWHQ )XQNWLRQYRUXQGHUOlXWHUQ 6LHGLH9RUWHLOH (LQVWLHJ (VJLEWGUHL$UWHQYRQEH QXW]HUGHILQLHUWHQ)XQN WLRQHQ 6NDODUIXQNWLRQHQ z z (QWVSUHFKHQHLQHULQWHJULHUWHQ)XQNWLRQ *HEHQHLQHQHLQ]HOQHQ'DWHQZHUW]XUFN GHUDXVHLQHU 5HLKHYRQ$QZHLVXQJHQ]XVDPPHQJHVHW]WZLUG $XVPHKUHUHQ$QZHLVXQJHQEHVWHKHQGH)XQNWLRQHQPLW 7DEHOOHQUFNJDEH z ,QKDOW HQWVSULFKWGHPHLQHUJHVSHLFKHUWHQ3UR]HGXU z 9HUZHLVHZLHEHLHLQHU6LFKW ,QOLQH)XQNWLRQHQPLW7DEHOOHQUFNJDEH z z (QWVSUHFKHQHLQHU 6LFKW PLW 3DUDPHWHUQ *HEHQHLQH 7DEHOOH DOV (UJHEQLV HLQHU HLQ]HOQHQ 6(/(&7$QZHLVXQJ ]XUFN ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Mit SQL Server können Sie eigene Funktionen entwerfen und so die integrierten Systemfunktionen erweitern und neue hinzufügen. Sie können benutzerdefinierte Funktionen wie integrierte Systemfunktionen als Teil einer TransactSQL-Abfrage verwenden. An eine benutzerdefinierte Funktion können mehrere Eingabeparameter übergeben werden, sie kann aber auch ohne Eingabeparameter ausgeführt werden. Sie gibt entweder einen skalaren Wert oder eine Tabelle zurück. Als Eingabeparameter können alle Datentypen außer timestamp, cursor und table verwendet werden. Benutzerdefinierte Funktionen unterstützen keine Ausgabeparameter. SQL Server 2000 unterstützt drei Arten von benutzerdefinierten Funktionen: 6NDODUIXQNWLRQHQ Diese Art der benutzerdefinierten Funktion gibt einen einzelnen Datenwert zurück, und zwar mit dem Datentyp, der in einer RETURNS-Klausel definiert wird. Der Hauptteil der Funktion, der in einem BEGIN-END-Block definiert ist, enthält die Reihe von Transact-SQL-Anweisungen, die den Wert zurückgeben. Es können alle Datentypen außer text, ntext, image, cursor und timestamp zurückgegeben werden. $XVPHKUHUHQ$QZHLVXQJHQEHVWHKHQGH)XQNWLRQHQPLW 7DEHOOHQUFNJDEH Diese Art der benutzerdefinierten Funktion gibt eine Tabelle zurück, die von einer oder mehreren Transact-SQL-Anweisungen erstellt wurde. Der Hauptteil der Funktion ist in einem BEGIN-END-Block definiert und entspricht dem einer gespeicherten Prozedur. Im Gegensatz zu einer gespeicherten Prozedur kann auf eine aus mehreren Anweisungen bestehende Funktion mit Tabellenrückgabe jedoch wie auf eine Sicht in der FROM-Klausel einer SELECTAnweisung verwiesen werden. 8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ ,QOLQH)XQNWLRQHQPLW7DEHOOHQUFNJDEH Diese Art der benutzerdefinierten Funktion gibt eine Tabelle zurück, die das Ergebnis einer einzelnen SELECT-Anweisung ist. Eine Inline-Funktion mit Tabellenrückgabe liefert eine Datendarstellung, die der einer Sicht entspricht. Diese Funktionsart bietet mehr Flexibilität bei der Verwendung von Parametern als Sichten und erweitert die Features von indizierten Sichten. 8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ (UVWHOOHQHLQHUEHQXW]HUGHILQLHUWHQ)XQNWLRQ ,QKDOWGLHVHU)ROLH %HVFKUHLEHQ6LHGLH &5($7()81&7,21 $QZHLVXQJ (LQVWLHJ 6LHHUVWHOOHQHLQHEHQXW]HU GHILQLHUWH)XQNWLRQDXIIDVW GLHVHOEH:HLVHZLHHLQH 6LFKWRGHUHLQHJHVSHLFKHUWH 3UR]HGXU (UVWHOOHQHLQHUEHQXW]HUGHILQLHUWHQ)XQNWLRQ 86(1RUWKZLQG 86(1RUWKZLQG *2 *2 &5($7()81&7,21IQB1HZ5HJLRQ &5($7()81&7,21IQB1HZ5HJLRQ #P\LQSXWQYDUFKDU #P\LQSXWQYDUFKDU 5(78516QYDUFKDU 5(78516QYDUFKDU %(*,1 %(*,1 ,)#P\LQSXW,618// ,)#P\LQSXW,618// 6(7#P\LQSXW 6(7#P\LQSXW 1LFKWDQZHQGEDU© 1LFKWDQZHQGEDU© 5(7851#P\LQSXW 5(7851#P\LQSXW (1' (1' *2 *2 (LQVFKUlQNXQJHQIUEHQXW]HUGHILQLHUWH)XQNWLRQHQ ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Sie erstellen eine benutzerdefinierte Funktion auf fast dieselbe Weise wie eine Sicht oder eine gespeicherte Prozedur. (UVWHOOHQHLQHUEHQXW]HUGHILQLHUWHQ)XQNWLRQ Benutzerdefinierte Funktionen werden mit der CREATE FUNCTION-Anweisung erstellt. Der voll gekennzeichnete Name einer benutzerdefinierten Funktion (database_name.owner_name.function_name) muss eindeutig sein. Die Anweisung gibt die Eingabeparameter mit ihrem jeweiligen Datentyp, die Verarbeitungsanweisungen und den Wert an, der mit jedem Datentyp zurückgegeben wird. 6\QWD[ CREATE FUNCTION [ owner_name. ] function_name ( [ { @parameter_name scalar_parameter_data_type [ = default ] } [ ,...n ] ] ) RETURNS scalar_return_data_type [ WITH < function_option> [,...n] ] [ AS ] BEGIN function_body RETURN scalar_expression END %HLVSLHO 8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ In diesem Beispiel wird eine benutzerdefinierte Funktion erstellt, die einen NULL-Wert durch die Wörter „Nicht anwendbar “ ersetzt. 86(1RUWKZLQG *2 &5($7()81&7,21IQB1HZ5HJLRQ#P\LQSXWQYDUFKDU 5(78516QYDUFKDU %(*,1 ,)#P\LQSXW,618// 6(7#P\LQSXW 1LFKWDQZHQGEDU 5(7851#P\LQSXW (1' *2 Geben Sie bei einem Verweis auf eine skalare benutzerdefinierte Funktion den Funktionsbesitzer und den Funktionsnamen in einer zweiteiligen Syntax an. (UJHEQLV 6(/(&7/DVW1DPH&LW\ GERIQB1HZ5HJLRQ5HJLRQ$65HJLRQ &RXQWU\ )520(PSOR\HHV *2 /DVW1DPH &LW\ 5HJLRQ &RXQWU\ Davolio Seattle WA USA Fuller Tacoma WA USA Leverling Kirkland WA USA Peacock Redmond WA USA Buchanan London Nicht anwendbar UK Suyama London Nicht anwendbar UK King London Nicht anwendbar UK Callahan Seattle WA USA Dodsworth London Nicht anwendbar UK 8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ (LQVFKUlQNXQJHQIUEHQXW]HUGHILQLHUWH)XQNWLRQHQ Nicht deterministische Funktionen, z. B. GETDATE(), können unterschiedliche Ergebniswerte zurückgeben, auch wenn Sie jedes Mal mit denselben Eingabewerten aufgerufen werden. Integrierte nicht deterministische Funktionen dürfen im Hauptteil von benutzerdefinierten Funktionen nicht verwendet werden. Bei den folgenden integrierten Funktionen aus anderen Kategorien handelt es sich immer um nicht deterministische Funktionen: @@ERROR FORMATMESSAGE IDENTITY USER_NAME @@IDENTITY GETANSINULL NEWID @@ERROR @@ROWCOUNT GETDATE PERMISSIONS @@IDENTITY @@TRANCOUNT GetUTCDate SESSION_USER @@ROWCOUNT APP_NAME HOST_ID STATS_DATE @@TRANCOUNT CURRENT_TIMESTAMP HOST_NAME SYSTEM_USER CURRENT_USER IDENT_INCR TEXTPTR DATENAME IDENT_SEED TEXTVALID 8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ (PSIRKOHQH0HWKRGHQ ,QKDOWGLHVHU)ROLH 6WHOOHQ6LHGLHHPSIRKOHQHQ 0HWKRGHQIU3URJUDPPLHU REMHNWHYRU hEHUSUIHQ6LH2EMHNWGHILQLWLRQHQ hEHUSUIHQ6LH2EMHNWGHILQLWLRQHQ PLW+LOIH PLW+LOIH YRQ YRQ µ(;(&VSBKHOSWH[W§ µ(;(&VSBKHOSWH[W§ (LQVWLHJ 9HUZHQGHQ6LH6LFKWHQ]XP$XI]HLFKQHQXQGHUQHXWHQ 9HUZHQGHQ6LH6LFKWHQ]XP$XI]HLFKQHQXQGHUQHXWHQ 9HUZHQGHQYRQ$EIUDJHQ 9HUZHQGHQYRQ$EIUDJHQ 'LHVVLQGHPSIRKOHQH 0HWKRGHQIUGLH9HUZHQ GXQJYRQ3URJUDPPLHU REMHNWHQ 9HUZHQGHQ 9HUZHQGHQ 6LH 6LH JHVSHLFKHUWH JHVSHLFKHUWH 3UR]HGXUHQ 3UR]HGXUHQ ]XP ]XP =XVDPPHQ =XVDPPHQ IDVVHQYRQNRPSOH[HQ3UR]HGXUHQ IDVVHQYRQNRPSOH[HQ3UR]HGXUHQ 9HUZHQGHQ6LHEHQXW]HUGHILQLHUWH)XQNWLRQHQXP$XVGUFNH 9HUZHQGHQ6LHEHQXW]HUGHILQLHUWH)XQNWLRQHQXP$XVGUFNH ]XVDPPHQ]XIDVVHQ ]XVDPPHQ]XIDVVHQ ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** Die im Folgenden aufgeführten empfohlenen Methoden sollen Sie bei der Verwendung von Programmierobjekten unterstützen: Überprüfen Sie Objektdefinitionen, indem Sie den mit dem Objekt verknüpften Text mit Hilfe der gespeicherten Systemfunktion EXEC sp_helptext anzeigen. Verwenden Sie, aus Gründen der Konsistenz und Effizienz, Sichten zum Aufzeichnen und erneuten Verwenden von allgemeinen Abfragen Verwenden Sie gespeicherte Prozeduren, um komplexe Prozeduren mit mehreren Anweisungen zusammenzufassen. Verwenden Sie benutzerdefinierte Funktionen, um allgemeine Ausdrücke zusammenzufassen. Zusätzliche Informationen zu den folgenden Themen erhalten Sie in der SQL Server-Onlinedokumentation. Thema Suchbegriff Verwenden gespeicherter Prozeduren “Effekte von gespeicherten Prozeduren auf die Anwendungsleistung” Verwenden von Sichten “Gegenüberstellung von Abfragen und Sichten” Verwenden von Triggern “Erzwingen von Geschäftsregeln mit Triggern” 8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ hEXQJVHLQKHLW$$UEHLWHQPLW6LFKWHQ ,QKDOWGLHVHU)ROLH *HEHQ6LHHLQH(LQIKUXQJ LQGLHhEXQJVHLQKHLW (LQVWLHJ ,QGLHVHUhEXQJVHLQKHLW ZHUGHQ6LH6LFKWHQHUVWHOOHQ XQGlQGHUQ ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** (UOlXWHUQ6LHGLH/HUQ]LHOH GHUhEXQJVHLQKHLW /HUQ]LHOH Am Ende dieser Übungseinheit werden Sie in der Lage sein, die folgenden Aufgaben auszuführen: Generieren einer Sicht mit Hilfe einer SQL Query Analyzer-Vorlage. Ändern einer Sicht mit Hilfe des Objektkatalogs von SQL Query Analyzer. 9RUDXVVHW]XQJHQ Um diese Übungseinheit zu bearbeiten, benötigen Sie Folgendes: Die Skriptdateien für diese Übungseinheit, die sich in C:\Moc\2316B\Labfiles\L09 befinden. Die Antwortdateien für diese Übungseinheit, die sich in C:\Moc\2316B\Labfiles\L09\Answers befinden. Die library-Datenbank muss installiert sein. :HLWHUH,QIRUPDWLRQHQ Weitere Informationen finden Sie in der Hilfe zu SQL Query Analyzer unter „Verwenden von Vorlagen in SQL Query Analyzer“. Daneben sind die folgenden Informationsquellen verfügbar: Das library-Datenbankschema. Die Microsoft SQL Server-Onlinedokumentation. 8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ 6]HQDULR Der Aufbau des Schulungsraumes soll die Organisation des weltweit agierenden Handelsunternehmens Northwind Traders widerspiegeln. Das Unternehmen hat den fiktiven Domänennamen ist nwtraders.msft. Der primäre DNS-Server für nwtraders.msft ist der Kursleitercomputer, der die Internetprotokolladresse (IP-Adresse) 192.168.x.200 besitzt (wobei x die zugewiesene Schulungsraumnummer ist). Der Name des Kursleitercomputers ist London. Die folgende Tabelle stellt den Benutzernamen, den Computernamen und die IP-Adresse für jeden Kursteilnehmercomputer in der fiktiven Domäne nwtraders.msft bereit. Suchen Sie den Benutzernamen Ihres Computers und notieren Sie ihn. Benutzername Computername IP-Adresse SQLAdmin1 Vancouver 192.168.x.1 SQLAdmin2 Denver 192.168.x.2 SQLAdmin3 Perth 192.168.x.3 SQLAdmin4 Brisbane 192.168.x.4 SQLAdmin5 Lisbon 192.168.x.5 SQLAdmin6 Bonn 192.168.x.6 SQLAdmin7 Lima 192.168.x.7 SQLAdmin8 Santiago 192.168.x.8 SQLAdmin9 Bangalore 192.168.x.9 SQLAdmin10 Singapore 192.168.x.10 SQLAdmin11 Casablanca 192.168.x.11 SQLAdmin12 Tunis 192.168.x.12 SQLAdmin13 Acapulco 192.168.x.13 SQLAdmin14 Miami 192.168.x.14 SQLAdmin15 Auckland 192.168.x.15 SQLAdmin16 Suva 192.168.x.16 SQLAdmin17 Stockholm 192.168.x.17 SQLAdmin18 Moscow 192.168.x.18 SQLAdmin19 Caracas 192.168.x.19 SQLAdmin20 Montevideo 192.168.x.20 SQLAdmin21 Manila 192.168.x.21 SQLAdmin22 Tokyo 192.168.x.22 SQLAdmin23 Khartoum 192.168.x.23 SQLAdmin24 Nairobi 192.168.x.24 9HUDQVFKODJWH=HLWIUGLHhEXQJVHLQKHLW0LQXWHQ 8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ hEXQJ *HQHULHUHQHLQHU6LFKWPLW+LOIHHLQHU64/4XHU\$QDO\]HU9RUODJH In dieser Übung verwenden Sie eine SQL Query Analyzer-Vorlage, um eine Sicht zu erstellen und den Parametern in der Sicht Werte zuzuweisen. Das Verzeichnis C:\Moc\2316B\Labfiles\L09\Answers enthält fertige Skripts für diese Übung. Ç So erstellen Sie eine Transact-SQL-Anweisung aus einer SQL Query Analyzer-Vorlage In diesem Verfahren erstellen Sie eine Transact-SQL-Anweisung mit Hilfe einer SQL Query Analyzer-Vorlage. Answer_Template1.sql enthält ein fertiges Skript für diesen Schritt. 1. Melden Sie sich mit Hilfe der Informationen in der folgenden Tabelle an der Schulungsraumdomäne nwtraders an. Option Eingabe Benutzername SQLAdminx (wobei x die Ihrem Computernamen zugewiesene Nummer ist, wie in der Schulungsraumdomäne nwtraders.msft festgelegt) Kennwort password 2. Öffnen Sie SQL Query Analyzer und melden Sie sich gegebenenfalls mit Microsoft Windows®-Authentifizierung am (lokalen) Server an. Sie sind berechtigt, sich an SQL Server anzumelden und SQL Server zu verwalten, da Sie als SQLAdminx angemeldet und damit Mitglied der lokalen Administratorgruppe von Windows 2000 sind. Alle Mitglieder dieser Gruppe werden automatisch der SQL Server-Rolle sysadmin zugeordnet. 3. Klicken Sie in der Liste DB auf library. 4. Klicken Sie auf der Symbolleiste auf Vorlage einfügen. 5. Doppelklicken Sie im Dialogfenster Vorlage einfügen auf Create View, und öffnen Sie dann die Basisvorlage zum Erstellen von Sichten (Create View Basic Template.tql). 6. Überprüfen Sie den Inhalt der Datei im Bearbeitungsbereich. Worin unterscheidet sich das generierte Skript von Standard-Transact-SQL? Das generierte Skript enthält Vorlagenparameter anstelle von erwarteten Bezeichnernamen, und zwar im Format <Parametername, Datentyp, Wert>. ____________________________________________________________ ____________________________________________________________ 8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ Ç So ersetzen Sie Vorlagenparameter In diesem Verfahren werden Sie Vorlagenparameter ersetzen. Answer_Template2.sql enthält ein fertiges Skript für diesen Schritt. 1. Klicken Sie im Menü Bearbeiten auf Vorlageparameter ersetzen. 2. Geben Sie im Dialogfeld Vorlageparameter ersetzen in der Wert-Spalte den Namen AustenTitlesView ein, um den view_name-Parameter zu ändern. 3. Geben Sie im Dialogfeld Vorlageparameter ersetzen in der Wert-Spalte die folgende Anweisung ein, um den select_statement-Parameter zu ändern. 6(/(&7)520WLWOH:+(5(DXWKRU -DQH$XVWHQ 4. Klicken Sie im Dialogfeld Vorlageparameter ersetzen auf Alle ersetzen, um alle auftretenden Parameter durch die neu zugewiesenen Werte zu ersetzen Ç So überprüfen Sie die Syntax und erstellen Sie die Sicht In diesem Verfahren werden Sie Transact-SQL-Anweisungen überprüfen und ausführen, um die Sicht zu erstellen. Answer_View1.sql enthält ein fertiges Skript für diesen Schritt. 1. Klicken Sie im Menü Abfrage auf Analysieren. Es wird überprüft, ob die Syntax des neu erstellten Transact-SQL-Skripts gültig ist. 2. Erstellen Sie die Sicht, indem Sie das Skript im Bearbeitungsbereich ausführen. 3. Klicken Sie auf der Symbolleiste auf Neue Abfrage, um ein neues Abfragefenster zu öffnen. Es wird eine neue Verbindung mit SQL Server geöffnet. 4. Schreiben Sie eine Abfrage, die in der SELECT-Anweisung einen Stern enthält, um alle Daten der AustenTitlesView-Sicht abzurufen. 86(OLEUDU\ 6(/(&7 )520$XVWHQ7LWOHV9LHZ *2 8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ 5. Führen Sie die Abfrage aus, um zu überprüfen, ob die gewünschten Ergebnisse zurückgegeben werden. Welche Spalten werden von der Abfrage der Sicht zurückgegeben? Die Spalten „title_no“, „title“, „author“ und „synopsis“. ____________________________________________________________ ____________________________________________________________ Worin liegen die Vorteile bei der Verwendung von SQL Query AnalyzerVorlagen zum Generieren von Transact-SQL-Skripts? Durch die Verwendung von SQL Query Analyzer-Vorlagen zum Generieren von Transact-SQL-Skripts werden wiederholte Eingaben und Fehler vermieden sowie die Konsistenz durch erneute Verwendung von Standardcode und -syntax aufrechterhalten. ____________________________________________________________ ____________________________________________________________ 8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ hEXQJ bQGHUQHLQHU6LFKWPLW+LOIHGHV2EMHNWNDWDORJVYRQ64/4XHU\ $QDO\]HU In dieser Übung verwenden Sie den Objektkatalog von SQL Query Analyzer zur Skripterstellung und Bearbeitung von Transact-SQL-Anweisungen, um die in Übung 1 erstellte Sicht zu ändern. C:\Moc\2316B\Labfiles\L09\Answers enthält fertige Skripts für diese Übung. Ç So suchen Sie das Objekt „dbo.AustenTitlesView“ In diesem Verfahren suchen Sie das Objekt dbo.AustenTitlesView. 1. Erweitern Sie im Objektkatalogbereich den Ordner library. 2. Erweitern Sie Sichten und dann das Objekt dbo.AustenTitlesView. Ç So generieren Sie ein Skript zum Ändern der Sicht In diesem Verfahren generieren Sie ein Skript, das eine Sicht ändert. Answer_View2.sql enthält ein fertiges Skript für diesen Schritt. 1. Klicken Sie mit der rechten Maustaste auf dbo.AustenTitlesView. 2. Wählen Sie Skript in neuem Fenster erstellen für die Objektausführung mit aus. 3. Klicken Sie auf ALTER. Es wird eine Reihe von Transact-SQL-Anweisungen erzeugt, die das Objekt dbo.AustenTitlesView ändern, das in einem neuen Fensterbereich erstellt wurde. Welche anderen Skripttypen können Sie für dieses Sichtobjekt erstellen? Sie können Skripts für das Sichtobjekt zum Erstellen, Ändern und Löschen erstellen. Darüber hinaus können Sie Skripts erstellen, die Operationen mit dem Objekt ausführen, z. B. SELECT, INSERT, UPDATE und DELETE. ____________________________________________________________ ____________________________________________________________ Ç So kopieren Sie eine Spaltenliste aus dem Objektkatalog In diesem Verfahren kopieren Sie eine Spaltenliste aus dem Objektkatalog. Answer_View3.sql enthält ein fertiges Skript für diesen Schritt. 1. Klicken Sie im Menü Abfrage auf Analysieren. Es wird überprüft, ob die Syntax des neu erstellten Transact-SQL-Skripts gültig ist. 2. Erweitern Sie dbo.AustenTitlesView und erweitern Sie dann Spalten. 3. Ziehen Sie den Ordner Spalten aus dem Objektkatalogbereich in den Bearbeitungsbereich, und platzieren Sie den Ordner hinter dem Stern in der SELECT-Anweisung der Sichtdefinition. 4. Löschen Sie den Stern in der SELECT-Anweisung. 8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ Ç So kopieren Sie einen Objektnamen aus dem Objektkatalog In diesem Verfahren kopieren Sie einen Objektnamen aus dem Objektkatalog. Answer_View4.sql enthält ein fertiges Skript für diesen Schritt. 1. Löschen Sie im Bearbeitungsbereich den Sichtnamen AustenTitlesView direkt hinter der ALTER VIEW-Anweisung. 2. Ziehen Sie das Objekt dbo.AustenTitlesView aus dem Objektkatalogbereich in den Bearbeitungsbereich, und platzieren Sie das Objekt hinter die ALTER VIEW-Anweisung. Ç So überprüfen Sie die Syntax und ändern Sie die Sicht In diesem Verfahren überprüfen Sie die Syntax und ändern Sie die Sicht. Answer_View5.sql enthält ein fertiges Skript für diesen Schritt. 1. Klicken Sie im Menü Abfrage auf Analysieren. Es wird überprüft, ob die Syntax des neu erstellten Transact-SQL-Skripts gültig ist. 2. Führen Sie das Skript im Bearbeitungsbereich aus, um die Sicht zu ändern. 3. Klicken Sie auf der Symbolleiste auf Neue Abfrage, um ein neues Abfragefenster zu öffnen. Es wird eine neue Verbindung mit SQL Server geöffnet. 4. Schreiben Sie eine SELECT-Anweisung zum Abrufen aller Daten aus der Sicht dbo.AustenTitlesView. 86(OLEUDU\ 6(/(&7WLWOHBQRWLWOHDXWKRUV\QRSVLV )520GER$XVWHQ7LWOHV9LHZ *2 5. Führen Sie die Abfrage aus, um zu überprüfen, ob die gewünschten Ergebnisse zurückgegeben werden. Warum sollten Sie beim Erstellen von Transact-SQL-Anweisungen alle Spalten aufzählen? Sie sollten Spaltennamen immer ausdrücklich referenzieren, um ihre gewünschte Verwendung und relative Reihenfolge sicherzustellen. Die Syntax SELECT * ruft Spalten in der Reihenfolge ab, in der sie definiert wurden. Diese Reihenfolge kann von Tabelle zu Tabelle unterschiedlich sein oder sich nachträglich ändern. ____________________________________________________________ ____________________________________________________________ 8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ /HUQ]LHONRQWUROOH ,QKDOWGLHVHU)ROLH 9HUWLHIHQ6LHGLH/HUQ]LHOH GLHVHU8QWHUULFKWVHLQKHLW LQGHP6LHGLH.HUQSXQNWH ZLHGHUKROHQ (LQVWLHJ 'LH)UDJHQ]XU/HUQ]LHO NRQWUROOHEH]LHKHQVLFKDXI HLQLJHGHU6FKOVVHONRQ ]HSWHGLH,QKDOWGLHVHU 8QWHUULFKWVHLQKHLWVLQG $Q]HLJHQGHV7H[WHVHLQHV3URJUDPPLHUREMHNWV (LQIKUXQJ]X6LFKWHQ 9RUWHLOHYRQ6LFKWHQ (UVWHOOHQYRQ6LFKWHQ (LQIKUXQJ]XJHVSHLFKHUWHQ3UR]HGXUHQ (LQIKUXQJ]X 7ULJJHUQ (LQIKUXQJ]XEHQXW]HUGHILQLHUWHQ)XQNWLRQHQ ****************NUR FÜR DIE VERWENDUNG DURCH DEN KURSLEITER ZULÄSSIG**************** *HKHQ6LHDQKDQGGLHVHU )UDJHQGLH7KHPHQGHU 8QWHUULFKWVHLQKHLWGXUFK .OlUHQ6LHRIIHQH)UDJHQ GHU.XUVWHLOQHKPHUEHYRU 6LHPLWGHU/HUQ]LHONRQWUROOH EHJLQQHQ 1. Welche Vorteile bieten Sichten? Benutzer konzentrieren sich nur auf die benötigten Daten; Benutzer können Daten einfacher bearbeiten; die Komplexität von Datenbanken und Abfragen wird vor den Benutzern verborgen, sodass verständlichere Namen angezeigt werden können; Sichten stellen einen Sicherheitsmechanismus bereit, weil Benutzer nur auf Daten in Sichten zugreifen können. 2. Welche Vorteile bieten gespeicherte Prozeduren? Zusammenfassen der gemeinsam benutzten Anwendungslogik, erhöhte Leistung, verbesserte Sicherheitsverwaltung und reduzierter Netzverkehr. 3. Warum würden Sie zum Zusammenfassen einer Abfrage eine Sicht und keine gespeicherte Prozedur verwenden? Wenn Sie eine Sicht zum Zusammenfassen einer Abfrage verwenden, können Sie die Sicht sofort erneut als Teil einer SELECT-Anweisung beim Schreiben einer anderen Abfrage verwenden. 8QWHUULFKWVHLQKHLW(LQIKUXQJ]X3URJUDPPLHUREMHNWHQ 4. Sie haben eine Abfrage entwickelt, die die Tabellen member, title und loanhist miteinander verknüpft, um die für jedes Mitglied festgesetzten, bezahlten und erlassenen Mahngebühren sowie den Titel jedes überfälligen Buches aufzulisten und um die Anzahl der Tage zu berechnen, die jedes Buch überfällig ist. Andere Entwickler möchten Ihre Vorarbeit für die Erstellung eigener Abfragen nutzen. Wie können Sie dies am besten erreichen? Erstellen Sie eine Sicht für Ihre Abfrage. Anschließend müssen die anderen Entwickler ihre Abfragen und Sichten gegen Ihre Sicht ausführen. Dadurch wird sichergestellt, dass alle Abfragen konsistente Ergebnisse zurückgeben und die Arbeit und das Geschäftswissen, das in der ursprünglichen Sicht zusammengefasst ist, nicht erneut erstellt werden muss. 5. Beschreiben Sie die drei Arten von benutzerdefinierten Funktionen. Skalarfunktionen entsprechen integrierten Funktionen. Aus mehreren Anweisungen bestehende Funktionen mit Tabellenrückgabe entsprechen gespeicherten Prozeduren. Inline-Funktionen mit Tabellenrückgabe entsprechen Sichten. 6. Was unterscheidet einen Trigger von einer gespeicherten Prozedur? Ein Trigger ist eine spezielle Form einer gespeicherten Prozedur, der mit einer Tabelle verknüpft ist und automatisch ausgeführt wird, sobald versucht wird, Daten in der Tabelle zu ändern. Trigger können nicht direkt aufgerufen werden und akzeptieren keine Parameter. Anhang A: Fallstudie der libraryDatenbank (LQIKUXQJ Die Fallstudie der library-Datenbank gibt eine Übersicht über die Vorgänge in der Bibliothek West Municipal, beschreibt die täglichen Bibliotheksfunktionen und stellt eine Datenbank vor, die für die Bibliothek entworfen wurde. hEHUVLFKWEHU9RUJlQJHLQGHU%LEOLRWKHN Vor dem Implementieren einer Datenbank für Bibliothekare und Mitglieder wurden mit den Bibliothekaren der Bibliothek West Municipal Interviews durchgeführt, um die Geschäftsanforderungen der Bibliothek zu bewerten. In den folgenden Abschnitten werden die Entscheidungen erläutert, die die Datenbankentwickler während des Entwurfsvorgangs getroffen haben. In der folgenden Abbildung wird das Gesamtschema der Datenbank dargestellt, das für die Bibliothek entworfen wurde. Diagramm der library-Datenbank member PK loan member_no loanhist PK,FK1 isbn PK,FK1 copy_no lastname firstname middleinitial photograph FK3 FK2 reservation PK,FK1 isbn PK,FK1 copy_no PK out_date title_no member_no out_date due_date FK2 PK,FK1 isbn PK,FK2 member_no log_date remarks adult PK,FK1 member_no street city state zip phone_no expr_date copy item PK PK,FK1 isbn PK copy_no isbn FK1 title_no translation cover loanable juvenile PK,FK2 member_no FK1 adult_member_no birth_date FK2 title PK title_no title author synopsis title_no on_loan title_no member_no due_date in_date fine_assessed fine_paid fine_waived remarks $QKDQJ$)DOOVWXGLHGHUOLEUDU\'DWHQEDQN 7lJOLFKH%LEOLRWKHNVIXQNWLRQHQ Es gibt viele tägliche Bibliotheksfunktionen. Die folgenden Funktionen gehören zu den wichtigsten. (LQGHXWLJHV,GHQWLIL]LHUHQYRQ%FKHUQ Einige Bücher können den gleichen Buchtitel haben, deshalb können Buchtitel nicht zur Identifikation verwendet werden. Bibliothekare nennen Bücher Titel. Titel werden durch die internationale Standardbuchnummer (ISBN) identifiziert. Bücher mit dem gleichen Buchtitel können unterschiedliche ISBN-Nummern haben, wenn sie in unterschiedlichen Sprachen oder mit verschiedenen Einbänden (mit oder ohne festen Einband) erhältlich sind. 9RUEHVWHOOHQYRQ%FKHUQ Falls ein Mitglied ein Buch ausleihen möchte, das bereits verliehen ist, wird das Buch für das Mitglied vorbestellt. Wenn das Buch ankommt, muss der Bibliothekar das Mitglied benachrichtigen, das bereits am längsten wartet. Mitglieder können bis zu vier Bücher gleichzeitig vorbestellen. %HVWLPPHQGHU9HUIJEDUNHLWHLQHV%XFKHV Bibliothekare müssen jederzeit bestimmen können, wie viele Exemplare eines Buches verliehen sind und für welche Bücher Vorbestellungen vorliegen. Für jeden Buchtitel in der Bibliothek ist eine Zusammenfassung vorhanden, die einen Satz oder auch mehrere Seiten umfassen kann. Bibliothekare möchten auf die Zusammenfassungen zugreifen können, wenn Mitglieder Informationen zu Büchern wünschen. 5HJLVWULHUHQYRQ0LWJOLHGHUQ Um ein Bibliotheksmitglied zu werden, müssen Personen Postanschriften und Telefonnummern angeben. Ein Bibliothekar gibt an die Person dann eine nummerierte, maschinenlesbare Karte aus. Diese Karte gilt ein Jahr. Jugendliche (Personen unter 18 Jahren) können Mitglieder einer Bibliothek werden, aber ein Erwachsener muss unterschreiben, wenn Jugendliche Mitglied der Bibliothek werden. Deshalb gilt die Mitgliedskarte eines Jugendlichen nur solange, bis die Mitgliedskarte des entsprechenden Erwachsenen abläuft. Die einzigen Informationen, die der Bibliothekar zu jugendlichen Mitgliedern behält, sind deren Name und Geburtsdatum. Der Bibliothekar muss erkennen können, wann ein jugendliches Mitglied 18 Jahre alt wird, und dann muss die Mitgliedschaft automatisch in die Mitgliedschaft eines Erwachsenen umgewandelt werden. Einen Monat vor Ablauf der Mitgliedskarte muss ein Bibliothekar das Mitglied benachrichtigen. $QKDQJ$)DOOVWXGLHGHUOLEUDU\'DWHQEDQN $XVFKHFNHQYRQ%FKHUQ Bücher können für 14 Tage ausgecheckt werden. Mitglieder dürfen nur vier Bücher gleichzeitig auschecken. Wenn ein Buch überfällig ist, haben Mitglieder eine Woche Zeit, bevor der Bibliothekar ihnen eine Benachrichtigung zusendet. Nachdem die Mitglieder die Bücher gefunden haben, die sie auschecken möchten, bringen Sie diese Bücher zum Ausleihtisch. Ein Bibliothekar zieht dann die Mitgliedskarte durch ein Gerät, das die Kartennummer magnetisch liest. Auf einem Bildschirm werden Informationen zum Konto des Mitglieds wie Name, Adresse, Telefonnummer und Ablaufdatum der Karte angezeigt. Idealerweise werden abgelaufene Karten und Karten, die bald ablaufen, hervorgehoben. Auf dem Bildschirm werden außerdem Informationen zu noch ausgeliehenen Büchern angezeigt, einschließlich des Buchtitels, des Auscheckdatums und des Fälligkeitsdatums. Diese Informationen sind nützlich, da sie in chronologischer Reihenfolge dargestellt werden, wobei das ausgeliehene Buch, das am überfälligsten ist, an erster Position und das zuletzt ausgeliehene Buch an letzter Position angezeigt wird. Durch Hervorheben wird außerdem angezeigt, dass ausgeliehene Bücher überfällig sind oder bald überfällig werden. Wenn bei einem Konto eines Mitglieds alles in Ordnung ist, dann checkt der Bibliothekar die Bücher aus. Bibliothekare checken Bücher aus, indem Sie einen Scanner über den Buchrücken führen (ISBN-Nummer und die Nummer des Exemplars sind auf den Buchrücken codiert). Die ISBN-Nummer, der Buchtitel und Informationen zum Autor werden auf dem Computerbildschirm angezeigt. Wenn Bücher nicht verliehen werden können, wird eine Warnmeldung angezeigt. (LQFKHFNHQYRQ%FKHUQ Wenn Bücher zurückgebracht werden, checken Bibliothekare sie ein, indem sie einen Scanner über die Buchrücken führen. Die ISBN-Nummer, der Buchtitel und Informationen zum Autor werden dann auf dem Computerbildschirm angezeigt. Außerdem wird die Mitgliedsnummer, der Mitgliedsname und das Fälligkeitsdatum des Buches angezeigt. Manchmal werden Bücher versehentlich ins Regal zurück gestellt, bevor Sie vom Bibliothekar eingecheckt wurden. Wenn ein Mitglied versucht, ein Buch auszuchecken, das in der Datenbank als ausgechecktes Buch aufgeführt ist, müssen Bibliothekare auf die Auscheckinformationen zugreifen können, einschließlich des Namens des Mitglieds, des Auscheckdatums und des Fälligkeitsdatums. Wenn ein Mitglied ein Buch auschecken möchte, das offiziell noch für ein anderes Mitglied ausgecheckt ist, informiert eine Meldung Bibliothekare darüber, dass das Buch bereits ausgecheckt ist. Dann können Bibliothekare die Datensätze sofort aktualisieren, da sie zunächst die vorherige Ausleihe löschen müssen, bevor sie mit dem Auschecken fortfahren können. *HQHULHUHQYRQ9HUZHQGXQJVEHULFKWHQ Gelegentlich müssen Bibliothekare Verwendungsinformationen zusammenstellen. Meist werden diese Informationen vom Stadtrat oder vom Planungsausschuss gefordert. Von diesen Gruppen werden im Allgemeinen Informationen zum Umfang der Zirkulation, zur Beliebtheit verschiedener Bücher, zur Zuverlässigkeit der Rückgabe und zur durchschnittlichen Länge der Ausleihdauer gewünscht. Deshalb müssen die Bibliothekare schnell Zusammenfassungen dieser Informationen vorbereiten können. $QKDQJ$)DOOVWXGLHGHUOLEUDU\'DWHQEDQN Zu den häufig gestellten Fragen gehören die folgenden: Wie viele Bücher hat die Bibliothek im letzten Jahr verliehen? Wie groß ist der Prozentsatz der Mitglieder, die im letzten Jahr ein Buch ausgeliehen haben? Wie groß war die größte Anzahl von Büchern, die von einer Person ausgeliehen wurde? Wie hoch ist der Prozentsatz der Bücher, die mindestens einmal im letzten Jahr ausgeliehen wurden? Wie hoch ist der Prozentsatz aller ausgeliehenen Bücher, die überfällig werden? Wie lange werden Bücher im Durchschnitt ausgeliehen? Wann werden in der Bibliothek die meisten Bücher ausgeliehen? $QKDQJ$)DOOVWXGLHGHUOLEUDU\'DWHQEDQN (QWZXUIGHU%LEOLRWKHNVGDWHQEDQN Basierend auf den Informationen der Bibliothekare hat der Datenbankentwickler des Projekts entschieden, die Entitäten des vorherigen Szenarios in drei Gruppen von Tabellen zu implementieren: Tabellen mit Informationen zu Mitgliedern, Tabellen mit Informationen zu Titeln (Büchern) und Tabellen mit Informationen zum Ausleihen. ,QIRUPDWLRQHQ]X0LWJOLHGHUQ In der ersten Gruppe von Tabellen werden die zwei Arten von Mitgliedern dargestellt, die Bücher in der Bibliothek West Municipal ausleihen. Wie die folgende Abbildung zeigt, besteht die erste Gruppe aus drei Tabellen: member, adult und juvenile. member member_no lastname PK 1 2 3 4 5 6 adult juvenile member_no street PK, FK NN 1 2 6 Elm St Bowery Ave Bowery Ave firstname NN Anderson Barr Barr Anderson Anderson Henson city Andrew Andrew Bill Bill Sally Jack state zip NN NN NN Seattle WA Seattle WA Kent WA member_no adult_member_no PK, FK FK, NN NN 3 4 5 2 1 1 Jun 01 1980 Mar 01 1978 Nov 05 1982 middle_i photo A R NULL B A NULL ~~~ ~~~ ~~~ NN 98022 98022 98206 ~~~ ~~~ phone_no expr_date NULL (206)555-1212 NULL Jun 06 1992 Aug 07 1992 Mar 03 1993 NN birth_date Die member-Tabelle ist die Mastertabelle, und adult und juvenile sind Untertabellen. Die drei Tabellen verwenden die member_no-Spalte als Primärschlüssel. Da die Werte in dieser Spalte für jedes Mitglied unterschiedlich sind und jede Zeile mit Informationen eindeutig identifizieren, stellt die member_no-Spalte eine gute Wahl für den Primärschlüssel dar. Die Entitäten können auf verschiedene Weise dargestellt werden: Als eine einzige Tabelle oder als member- und juvenile-Tabellen. Falls eine einzige Tabelle für alle Mitglieder verwendet werden würde, würden zahlreiche Adressen dupliziert werden, da die Jugendlichen in diesem Modell die gleiche Adresse wie ihre Eltern haben. Bibliothekare müssen die Möglichkeit haben, nur die Geburtsdaten der Jugendlichen nachzuverfolgen. Daher verhindert die Aufteilung der Informationen zur Mitgliedschaft auf mehrere Tabellen die Spalten mit NULL-Werten, die sich für die Geburtsdaten der Erwachsenen ergeben hätten. Die oben beschriebene Aufteilung der Tabellen stellt außerdem das Szenario so dar, dass die Mitgliedschaft in der Bibliothek widergespiegelt wird: Die Beziehung member-adult ist eine 1:1-Beziehung, während die Beziehung adultjuvenile eine 1:n-Beziehung ist. $QKDQJ$)DOOVWXGLHGHUOLEUDU\'DWHQEDQN ,QIRUPDWLRQHQ]X7LWHOQ Die title-, item- und copy-Tabellen bilden eine logische zweite Gruppe. Die Mastertabelle dieser Gruppe ist die title-Tabelle. Für jede Auflistung in der title-Tabelle ist mindestens einen Eintrag in der item-Tabelle vorhanden, da ein Buch in mehreren Sprachen verfügbar, als Taschenbuch oder mit festem Einband vorhanden und ausleihbar bzw. nicht ausleihbar sein kann. Die Beziehung title-item ist eine 1:n-Beziehung. Außerdem kann es für jede Auflistung in der item-Tabelle ein oder mehrere Exemplare des Titels geben. Die Beziehung title-copy ist eine 1:n-Beziehung. title title_no PK 1 2 3 4 item isbn PK 1 2 3 4 5 copy isbn title_no FK, NN 1 2 3 4 2 title NN author NN synopsis Gone With the Wind Color Purple Hotel Winnie the Pooh Mitchell W alker Hailey Milne ~~~ ~~~ language cover English French French NULL English softback NULL hardback hardback softback ~~~ loanable Y N Y NULL Y copy_no title_no on_loan PK, FK PK FK, NN NN 1 1 2 3 4 4 1 2 1 1 1 2 1 1 2 3 4 4 Y Y N Y Y Y Die item-Tabelle enthält die loanable-Spalte. Anstatt die Informationen aus dieser Spalte in die copy-Tabelle einzuschließen, geht der Datenbankentwickler davon aus, dass alle Exemplare eines bestimmten Titels ausgeliehen werden können oder nicht. Beachten Sie, dass die copy-Tabelle einen Primärschlüssel aufweist, der aus zwei Spalten besteht. Diese Art von Primärschlüssel wird als zusammengesetzter Schlüssel bezeichnet. Die Kombination aus isbn und copy_no identifiziert jede Zeile in der Tabelle eindeutig. Die copy-Tabelle enthält eine duplizierte title_no-Spalte. Für diese Tabellengruppe wurde die Normalisierung aufgehoben, um die Anzahl der zum Abrufen von Informationen erforderlichen Verknüpfungen zu verringern. Die on_loan-Spalte der copy-Tabelle enthält abgeleitete Daten. Dies sind Daten, die jedes Mal mit einer Abfrage generiert werden könnten, wenn die Informationen benötigt werden. Aber diese Informationen sind in der Tabelle enthalten, damit sie immer verfügbar sind und die Anzahl von Berechnungen reduziert wird, die durchgeführt werden müssen. Die on_loan-Spalte wird mit Hilfe von Informationen aus der loan-Tabelle (unten) aufgefüllt. Da die loanTabelle häufig geändert wird, könnten Sperren verhindern, dass ein Benutzer diese Informationen erhält. Die copy-Tabelle wird sehr wahrscheinlich nur für Lesezugriffe verwendet, sodass nicht verhindert werden muss, dass Benutzer auf in dieser Tabelle gespeicherte Informationen zugreifen. $QKDQJ$)DOOVWXGLHGHUOLEUDU\'DWHQEDQN ,QIRUPDWLRQHQ]XP$XVOHLKHQ Die reservation-, loan- und loanhist-Tabellen enthalten die Bibliotheksinformationen zum Ausleihen. In der reservation-Tabelle werden die aktuellen Vorbestellungen für jedes Buch nachverfolgt; in der loan-Tabelle werden Informationen zu derzeit ausgeliehenen Büchern nachverfolgt, und in der loanhist-Tabelle werden Informationen zu Büchern gespeichert, die ausgeliehen und wieder zurückgebracht wurden. $QPHUNXQJ In der folgenden Abbildung steht FK1 für einen zusammengesetzten Fremdschlüssel. FK definiert einen einspaltigen Fremdschlüssel. reservation reservation loan loan LVEQ PHPEHUBQR ORJBGDWH ORJBGDWH VWDWH VWDWH UHPDUNV UHPDUNV LVEQ PHPEHUBQR 3.). 11 3.). 3.). 3.). 11 :$ :$ aaa aaa 18// :$ 18// :$ 18// 18// :$ aaa :$ aaa LVEQ FRS\BQR WLWOHBQR WLWOHBQR PHPEHUBQR PHPEHUBQR LVEQ FRS\BQR 3.). 3.). ).11 ).11 ).11 ).11 3.). 3.). RXWBGDWH RXWBGDWH 11 11 GXHBGDWH GXHBGDWH 11 11 loanhist loanhist LVEQ LVEQ FRS\BQR FRS\BQR RXWBGDWH RXWBGDWH WLWOHBQR WLWOHBQR PHPEHUBQR PHPEHUBQR GXHBGDWH GXHBGDWH 3.). 3.). 3.). ).11 ).11 ).11 3.). 11 11 ).11 LQBGDWH LQBGDWH ILQHBDVVHVVHG ILQHBDVVHVVHG ILQHBSDLG ILQHBSDLG ILQHBZDLYHG ILQHBZDLYHG 18// 18// UHPDUNV UHPDUNV aaa aaa aaa aaa aaa aaa aaa aaa Die loan- und loanhist-Tabellen können kombiniert werden, um die Redundanz zu reduzieren; allerdings kann dies zu anderen Problemen führen. Die loanhistTabelle enthält den Verlauf aller Ausleihen und könnte daher eine unhandliche Größe erreichen. Im Verlauf der Zeit möchten Bibliothekare möglicherweise Informationen aus diesen Dateien sichern. Daher ist es sinnvoll, diese Informationen in einer eigenen Tabelle zu speichern. Darüber hinaus erfordert dieses Geschäftsmodell mehrere Abfragen der loanhist-Tabelle. Diese Abfragen können leichter implementiert und schneller ausgeführt werden, wenn die Verlaufsinformationen getrennt von den Informationen zum Ausleihen gespeichert werden. Die loan- und loanhist-Tabellen stellen außerdem unterschiedliche Funktionen der Anwendung dar. Wenn ein Mitglied ein Buch auscheckt wird, wird ein Eintrag in der loan-Tabelle vorgenommen. Wenn ein Mitglied ein Buch zurückgibt, wird ein Eintrag in der loanhist-Tabelle vorgenommen, und der entsprechende Eintrag wird aus der loan-Tabelle gelöscht. Durch Verwalten getrennter Tabellen für jede Funktion und Aufheben der Normalisierung der Tabellen können Benutzer schneller auf die Informationen zugreifen. Allerdings führt die Aufhebung der Normalisierung für die Tabellen auch zu einem erhöhten Verwaltungsaufwand. Wenn z. B. item.title_no aktualisiert wird, muss die title_no-Spalte in den loan-, loanhist- und copy-Tabellen aktualisiert werden. Da Aktualisierungen der title_no-Spalte möglicherweise unregelmäßig durchgeführt werden, kann die Aufhebung der Normalisierung Abfragen beschleunigen. This page is intentionally left blank. Anhang B: Datenbankschemas PK FK2 FK1 PK PK CategoryName Description Picture CategoryID Categories ProductName SupplierID CategoryID QuantityPerUnit UnitPrice UnitsInStock UnitsOnOrder ReorderLevel Discontinued ProductID Products CompanyName ContactName ContactTitle Address City Region PostalCode Country Phone Fax HomePage SupplierID Suppliers TerritoryDescription RegionID FK1 PK CompanyName Phone ShipperID Shippers UnitPrice Quantity Discount PK,FK1 OrderID PK,FK2 ProductID Order Details PK,FK1 EmployeeID PK,FK2 TerritoryID EmployeeTerritories TerritoryID Territories RegionDescription RegionID PK PK Region CustomerID EmployeeID OrderDate RequiredDate ShippedDate ShipVia Freight ShipName ShipAddress ShipCity ShipRegion ShipPostalCode ShipCountry FK1 FK2 FK3 OrderID Orders LastName FirstName Title TitleOfCourtesy BirthDate HireDate Address City Region PostalCode Country HomePhone Extension Photo Notes ReportsTo PhotoPath EmployeeID PK PK Employees CustomerDesc CustomerTypeID PK CompanyName ContactName ContactTitle Address City Region PostalCode Country Phone Fax CustomerID Customers PK,FK2 CustomerID PK,FK1 CustomerTypeID CustomerCustomerDemo PK CustomerDemographics Diagramm der NorthwindDatenbank juvenile street city state zip phone_no expr_date PK,FK1 member_no adult lastname firstname middleinitial photograph member_no FK1 adult_member_no birth_date PK,FK2 member_no PK member isbn title_no translation cover loanable PK FK1 item log_date remarks PK,FK1 isbn PK,FK2 member_no reservation PK FK3 FK2 title author synopsis title_no title title_no member_no out_date due_date PK,FK1 isbn PK,FK1 copy_no loan FK2 PK,FK1 PK title_no on_loan isbn copy_no copy FK2 title_no member_no due_date in_date fine_assessed fine_paid fine_waived remarks PK,FK1 isbn PK,FK1 copy_no PK out_date loanhist Diagramm der library-Datenbank sales stor_name stor_address city state zip stor_id FK1,I1 lorange hirange royalty title_id roysched ord_date qty payterms PK,FK1 stor_id PK ord_num PK,FK2,I1 title_id PK stores title type pub_id price advance royalty ytd_sales notes pubdate title_id titles discounttype stor_id lowqty highqty discount FK1 I1 PK FK1 discounts au_ord royaltyper au_id title_id titleauthor pub_name city state country pub_id PK,FK1,I1 PK,FK2,I2 PK publishers logo pr_info PK,FK1 pub_id pub_info FK2 I1 I1 I1 FK1 PK fname minit lname job_id job_lvl pub_id hire_date emp_id employee I1 I1 PK job_desc min_lvl max_lvl job_id au_lname au_fname phone address city state zip contract au_id authors PK jobs Diagramm der pubsDatenbank PK prod_name prod_id Produce FK1 FK2 buyer_id prod_id qty Sales PK buyer_name buyer_id Buyers Diagramm der joindbDatenbank