Upload
valda-albracht
View
102
Download
0
Embed Size (px)
Citation preview
Betrieb von DatenbankenMarco Skulschus & Marcus Wiederstein
Datenmanipulation
Lehrbuch, Kapitel 4
Seminar-Inhalt
•Grundlagen•Einfache Abfragen•Komplexe Abfragen•Datenmanipulation•Grundlagen T-SQL•Programm-Module in der DB•Administration
Modul-Inhalt
1. Datenstrukturen anlegen
2. Daten bearbeiten
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
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
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
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
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
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 ]}
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.
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
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.
Fragen...
Modul-Inhalt
1. Datenstrukturen anlegen
2. Daten bearbeiten
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
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
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 } ] } } ]
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 } ] } } ]
Fragen...