19
Betrieb von Datenbanken Marco Skulschus & Marcus Wiederstein Datenmanipulation Lehrbuch, Kapitel 4

Betrieb von Datenbanken Marco Skulschus & Marcus Wiederstein Datenmanipulation Lehrbuch, Kapitel 4

Embed Size (px)

Citation preview

Page 1: Betrieb von Datenbanken Marco Skulschus & Marcus Wiederstein Datenmanipulation Lehrbuch, Kapitel 4

Betrieb von DatenbankenMarco Skulschus & Marcus Wiederstein

Datenmanipulation

Lehrbuch, Kapitel 4

Page 2: Betrieb von Datenbanken Marco Skulschus & Marcus Wiederstein Datenmanipulation Lehrbuch, Kapitel 4

Seminar-Inhalt

•Grundlagen•Einfache Abfragen•Komplexe Abfragen•Datenmanipulation•Grundlagen T-SQL•Programm-Module in der DB•Administration

Page 3: Betrieb von Datenbanken Marco Skulschus & Marcus Wiederstein Datenmanipulation Lehrbuch, Kapitel 4

Modul-Inhalt

1. Datenstrukturen anlegen

2. Daten bearbeiten

Page 4: Betrieb von Datenbanken Marco Skulschus & Marcus Wiederstein Datenmanipulation Lehrbuch, Kapitel 4

Datenstrukturen anlegen: Übersicht

SQL

Structured Query Language

DML

(Dat

a M

anipu

lation

Lan

guag

e)

DDL

(Data Definition Langugage)

DCL(Data Control Language)

CREATEALTERDROP

SELECTUPDATEDELETEINSERT

GRANTREVOKE

Page 5: Betrieb von Datenbanken Marco Skulschus & Marcus Wiederstein Datenmanipulation Lehrbuch, Kapitel 4

Datenstrukturen anlegen: Übersicht

SQL

Structured Query Language

DML

(Dat

a M

anipu

lation

Lan

guag

e)

DDL

(Data Definition Langugage)

DCL(Data Control Language)

CREATEALTERDROP

SELECTUPDATEDELETEINSERT

GRANTREVOKE

Page 6: Betrieb von Datenbanken Marco Skulschus & Marcus Wiederstein Datenmanipulation Lehrbuch, Kapitel 4

Datenstrukturen anlegen: Tabellen

<data type> ::= [ type_schema_name . ] type_name [ ( precision [ , scale ] | max | [ { CONTENT | DOCUMENT } ] xml_schema_collection ) ]

2<column_definition> ::=

column_name <data_type>

[ COLLATE collation_name ] [ NULL | NOT NULL ] [ [ CONSTRAINT constraint_name ] DEFAULT constant_expression ] | [ IDENTITY [ ( seed ,increment ) ] [ NOT FOR REPLICATION ] ] [ ROWGUIDCOL ] [ <column_constraint> [ ...n ] ]

3

CREATE TABLE

[ database_name . [ schema_name ] . | schema_name . ] table_name ( { <column_definition> | <computed_column_definition> }

[ <table_constraint> ] [ ,...n ] ) [ ON { partition_scheme_name ( partition_column_name ) | filegroup | "default" } ] [ { TEXTIMAGE_ON { filegroup | "default" } ]

[ ; ]

1

Page 7: Betrieb von Datenbanken Marco Skulschus & Marcus Wiederstein Datenmanipulation Lehrbuch, Kapitel 4

Datenstrukturen anlegen: Spalten

CREATE TABLE

[ database_name . [ schema_name ] . | schema_name . ] table_name ( { <column_definition> | <computed_column_definition> }

[ <table_constraint> ] [ ,...n ] ) [ ON { partition_scheme_name ( partition_column_name ) | filegroup | "default" } ] [ { TEXTIMAGE_ON { filegroup | "default" } ]

[ ; ]

1

<computed_column_definition> ::=column_name AS computed_column_expression[ PERSISTED [ NOT NULL ] ][ [ CONSTRAINT constraint_name ] { PRIMARY KEY | UNIQUE } [ CLUSTERED | NONCLUSTERED ] [ WITH FILLFACTOR = fillfactor | WITH ( <index_option> [ , ...n ] ) ] | [ FOREIGN KEY ] REFERENCES referenced_table_name [ ( ref_column ) ] [ ON DELETE { NO ACTION | CASCADE } ] [ ON UPDATE { NO ACTION } ] [ NOT FOR REPLICATION ] | CHECK [ NOT FOR REPLICATION ] ( logical_expression ) [ ON { partition_scheme_name ( partition_column_name ) | filegroup | "default" } ]]

2

Page 8: Betrieb von Datenbanken Marco Skulschus & Marcus Wiederstein Datenmanipulation Lehrbuch, Kapitel 4

Datenstrukturen anlegen: Schlüssel

Varianten der Definition von Primär- und Fremdschlüsseln:– Bei der Spaltendefinition– Am Ende der Tabellendefinition außerhalb

der Spalten– Außerhalb der Tabellendefinition in einem

ALTER-Befehl

Page 9: Betrieb von Datenbanken Marco Skulschus & Marcus Wiederstein Datenmanipulation Lehrbuch, Kapitel 4

Datenstrukturen anlegen: Änderungen

ALTER TABLE [ database_name . [ schema_name ] . | schema_name . ] table_name { ALTER COLUMN column_name { [ type_schema_name. ] type_name [ ( { precision [ , scale ] | max | xml_schema_collection } ) ] [ NULL | NOT NULL ] [ COLLATE collation_name ] | {ADD | DROP } { ROWGUIDCOL | PERSISTED } } | [ WITH { CHECK | NOCHECK } ] ADD { <column_definition> | <computed_column_definition> | <table_constraint> } [ ,...n ]

DROP { [ CONSTRAINT ] constraint_name [ WITH ( <drop_clustered_constraint_option> [ ,...n ] ) ] | COLUMN column_name } [ ,...n ] | [ WITH { CHECK | NOCHECK } ] { CHECK | NOCHECK } CONSTRAINT { ALL | constraint_name [ ,...n ] } | { ENABLE | DISABLE } TRIGGER { ALL | trigger_name [ ,...n ] } | SWITCH [ PARTITION source_partition_number_expression ] TO [ schema_name. ] target_table [ PARTITION target_partition_number_expression ]}

Page 10: Betrieb von Datenbanken Marco Skulschus & Marcus Wiederstein Datenmanipulation Lehrbuch, Kapitel 4

Datenstrukturen anlegen: Sichten

Sichten stellen gespeicherte Abfragen dar. Sie wirken in ihrer Funktionsweise und Benutzung wie

gewöhnliche Tabellen. Sichten sind eine hervorragende Möglichkeit, um komplexe

Datenstrukturen für den Abruf zu vereinfachen, in dem die Sichtdefinition bereits benötigte Umrechnungen, Funktionsaufrufe und natürlich Verknüpfungen sowie Filter enthält. – Strukturen: Durch die Erstellung einer Sicht ist es möglich, bspw.

mehrere Tabellen zu verknüpfen und dadurch die Komplexität von sehr weit und damit sehr gut normalisierten Datenmodellen wieder zu vereinfachen.

– Daten: Durch die Erstellung einer Sicht ist es möglich, die Daten bereits soweit zu filtern, dass ein Benutzer gerade nicht alle Daten sehen kann, sondern nur einen Teil.

Page 11: Betrieb von Datenbanken Marco Skulschus & Marcus Wiederstein Datenmanipulation Lehrbuch, Kapitel 4

Datenstrukturen anlegen: Sichten

CREATE VIEW HumanResources.vEmployee2

AS

SELECT e.EmployeeID, c.FirstName,

c.MiddleName,

c.LastName, c.Phone,

c.EmailAddress

FROM HumanResources.Employee e INNER JOIN Person.Contact c

ON c.ContactID = e.ContactID

INNER JOIN HumanResources.EmployeeAddress ea

ON e.EmployeeID = ea.EmployeeID

Page 12: Betrieb von Datenbanken Marco Skulschus & Marcus Wiederstein Datenmanipulation Lehrbuch, Kapitel 4

Datenstrukturen anlegen: Index

Für die Optimierung von Abfragen, d.h. für ihre beschleunigte Ausführung, kann man Indizes (Singular: Index) für eine Tabelle angeben.

– Mit einem so genannten Clustered Index ordnet man die Reihen der Tabelle nach der angegebenen Sortierung physikalisch, d.h. auf der Festplatte, bereits in der benötigten Reihenfolge. Da die Daten nur einmal physikalisch geordnet werden können, ist auch nur ein solcher Index pro Tabelle zulässig. Sofern die Tabelle einen Primärschlüssel besitzt, wird dieser Clustered Index automatisch erstellt.

– Im Gegensatz dazu kann man auch einen Non-Clustered Index erstellen. Er betrifft nicht die physikalische Speicherung bzw. Sortierung der Daten. Stattdessen befindet sich die Sortierung in einer zusätzlichen Baumstruktur, die wie die schon erwähnten Techniken Lexikon, Wörterbuch oder Stichwortverzeichnis fungieren.

Page 13: Betrieb von Datenbanken Marco Skulschus & Marcus Wiederstein Datenmanipulation Lehrbuch, Kapitel 4

Fragen...

Page 14: Betrieb von Datenbanken Marco Skulschus & Marcus Wiederstein Datenmanipulation Lehrbuch, Kapitel 4

Modul-Inhalt

1. Datenstrukturen anlegen

2. Daten bearbeiten

Page 15: Betrieb von Datenbanken Marco Skulschus & Marcus Wiederstein Datenmanipulation Lehrbuch, Kapitel 4

Daten bearbeiten: Übersicht

SQL

Structured Query Language

DML

(Dat

a M

anipu

lation

Lan

guag

e)

DDL

(Data Definition Langugage)

DCL(Data Control Language)

CREATEALTERDROP

SELECTUPDATEDELETEINSERT

GRANTREVOKE

Page 16: Betrieb von Datenbanken Marco Skulschus & Marcus Wiederstein Datenmanipulation Lehrbuch, Kapitel 4

Daten bearbeiten: Einfügen

INSERT [ INTO] { <object> | rowset_function_limited [ WITH ( <Table_Hint_Limited> [ ...n ] ) ] }{ [ ( column_list ) ] { VALUES ( { DEFAULT | NULL | expression } [ ,...n ]

) | derived_table | execute_statement } } | DEFAULT VALUES

Page 17: Betrieb von Datenbanken Marco Skulschus & Marcus Wiederstein Datenmanipulation Lehrbuch, Kapitel 4

Daten bearbeiten: Aktualisieren

UPDATE { <object> | rowset_function_limited } SET { column_name = { expression | DEFAULT | NULL } | { udt_column_name.{ { property_name = expression | field_name = expression } | method_name ( argument [

,...n ] ) } } | @variable = expression | @variable = column = expression [ ,...n ] } [ ,...n ] [ FROM{ <table_source> } [ ,...n ] ] [ WHERE { <search_condition> | { [ CURRENT OF { { [ GLOBAL ] cursor_name } | cursor_variable_name } ] } } ]

Page 18: Betrieb von Datenbanken Marco Skulschus & Marcus Wiederstein Datenmanipulation Lehrbuch, Kapitel 4

Daten bearbeiten: Löschen

DELETE [ FROM ] { <object> | rowset_function_limited [ WITH ( <table_hint_limited> [ ...n ] ) ] } [ FROM <table_source> [ ,...n ] ] [ WHERE { <search_condition> | { [ CURRENT OF { { [ GLOBAL ] cursor_name } | cursor_variable_name } ] } } ]

Page 19: Betrieb von Datenbanken Marco Skulschus & Marcus Wiederstein Datenmanipulation Lehrbuch, Kapitel 4

Fragen...