Jump to content
Main menu
Main menu
move to sidebar
hide
Navigation
Aphorismen
Applications
Business Economics & Admin.
My Computers
Cooking
Devices
Folders
Food
Hardware
Infos
Software Development
Sports
Operation Instructions
Todos
Test
Help
Glossary
Community portal
adaptions
Sidebar anpassen
Wiki RB4
Search
Search
Create account
Log in
Personal tools
Create account
Log in
Pages for logged out editors
learn more
Contributions
Talk
Editing
SQL
Page
Discussion
English
Read
Edit
View history
Toolbox
Tools
move to sidebar
hide
Actions
Read
Edit
View history
General
What links here
Related changes
Special pages
Page information
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
==Einleitung== SQL bildet einen Standard fĂŒr Datendefinition, -manipulation, -management, und -zugriffsbeschrĂ€nkungen. SQL basiert auf dem Konzept von relationalen Datenbanken. SQL ist eine Entwicklung von IBM und wurde erstmals 1986 vom ANSI standardisiert. Es existieren heute mehrere durch Jahreszahlen gekennzeichnete Richtlinien: SQL-89, SQL-92 (SQL2) und SQL-93 (SQL-3). Die verschiedenen Datenbankhersteller haben die SQL Normen ganz oder teilweise in ihren Produkten umgesetzt. MS Access unterstĂŒtzt SQL-89, wĂ€hrend die meisten Mainframe-Hersteller SQL-92 implementieren. Der Sprachumfang von SQL setzt sich aus drei Teilen zusammen: der Data Definition Language (DDL) und der Data Manipulation Language (DML). Der weitere Teil, mit dem eine Datenbank geschĂŒtzt werden kann, nennt sich Data Control Language (DCL). Die DDL stellt alles zur VerfĂŒgung, was man benötigt um eine Datenbank zu definieren, die Struktur einer DB zu modifizieren oder eine DB zu löschen. Mit der DML spezifiziert man, was man aus einer DB auslesen bzw. was man einfĂŒgen möchte. Embedded SQL erlaubt es SQL-Statements innerhalb von Programmiersprachen zu verwenden. Sie werden innerhalb des Codes besonders gekennzeichnet. Bei der Compilierung werden diese gekennzeichneten Statements von einem PrĂ€compiler in die entsprechende Sprache ĂŒbersetzt, so dass reiner Quelltext entsteht. Diese 'statische' Ăbersetzung bezieht sich immer auf eine bestimmte Datenbankart. Dynamisches SQL erlaubt es SQL-Statements zur Laufzeit zu generieren. Ein Call Level Interface (CLI) ist in der Regel als Funktionsbibliothek realisiert. Constraints sind EinschrĂ€nkungen fĂŒr die Daten die in eine Tabelle eingegeben werden können. Constraints werden u.a. auch im Oracle-Kontext IntegritĂ€tsregeln genannt. ==Begriffe== Zentrales Element von relationalen Datenbanken (DB) sind Tabellen/Relationen, die die eigentlichen Daten enthalten. Objekte/Entities werden durch Relationenschemas beschrieben. Relationenschemas bestehen aus einer Anzahl Attributen. Eine Datenbank bzw. ein Datenbankschema besteht aus n Tabellen. Metadaten sind Daten, welche die Struktur der Daten innerhalb einer DB beschreiben. Sie werden im sogenannten data dictionary gespeichert. Die Struktur einer ganzen DB wird als konzeptionelle Sicht oder auch vollstĂ€ndiges logisches Modell bezeichnet. Das Schema gehört zu den Metadaten und ist eine benannte Kollektion zusammengehörigen Tabellen, wodurch ein Namensraum aufgespannt werden kann. Ein Katalog ist eine benannte Kollektion von Schemata, wodurch eine weitere Stufe des Namensraums aufgespannt wird. Ein Attribut einer Relation kann eine endliche Anzahl von Werten annehmen. Die Gesamtmenge dieser Werte wird als ''DomĂ€ne'' des Attributs bezeichnet. Constraints sind Regeln, die festlegen, welche Werte die Attribute einer Tabelle annehmen dĂŒrfen. Es gibt drei Arten von Constraints: Spalten-Constraints, Tabellen-Constraints und Zusicherungen (assertions), daĂ sind Constraints, die mehr als eine Tabelle betreffen. Ein Spalten-Constraint ist z.B. daĂ Check-constraint bzw. in Access GĂŒltigkeitsregel. ===Relationen/Tabellen=== In der DB Theorie sind Tabellen Relationen bzw. eine Tabelle ist eine Relation. Die Spalten in Tabellen heiĂen Felder und die Zeilen DatensĂ€tze. Ein gemeinsames Feld in mehreren Tabellen verknĂŒpft diese Tabellen. Eine Relation ist eine Teilmenge des kartesischen Produkts ĂŒber den Wertebereich der Attribute eines Relationenschemas. Eine Relation zum Relationenschema R wird durch r(R) gekennzeichnet. DB_Relation.jpg Ein ''(Spalten-)Attribut'' ist eine bestimmte Eigenschaft eines Feldes in einer Tabellenspalte. Wie sich jedermann/frau vorstellen kann, werden Tabellenspalten durch die Angabe des Datentyps charakterisiert. Beispielsweise können diese Datentypen vom Typ DATE, CHAR, VARCHAR, INTEGER...u.s.w. sein. Attribute von Feldern charaktierisieren aber ĂŒber den Datentyp hinaus das Verhalten der DatensĂ€tze in einer Spalte. Z.B. kann hier festgelegt werden, daĂ z.B. eine Spalte vom Typ VARCHAR(20) nicht mehr in der GröĂe wachsen darf, auch wenn jemand einen lĂ€ngeren String ablegen möchte. Das Attribut, daĂ das Feld variabel ist, ist meist die Standardeinstellung. Ein weiteres Attribut ist z.B. die Festlegung, daĂ ein Feld in einer Tabellenspalte konstant sein muĂ. Im Normalfall geht man davon aus, daĂ alle Werte verĂ€ndert werden können, es gibt jedoch manchmal die Forderung nach der Festlegung von Werten, z.B. nach einem MonatsabschluĂ bei der Finanzzbuchhaltung oder bei einer Umstellung der MwSt. im April 1998 und zu Beginn 2000. Ein weiteres Attribut kann sein, daĂ eine automatische Sortierung in auf-oder absteigender Reihenfolge vorgenommen wird. Ein ''PrimĂ€rschlĂŒssel'' (primary key) unterscheidet die DatensĂ€tze in einer Tabelle, d.h. jeder Datensatz ist anhand des PrimĂ€rschlĂŒssels eindeutig zu identifizieren. Es gibt auch zusammengesetzte PrimĂ€rschlĂŒssel, wobei die Attribute nicht leer sein dĂŒrfen. Ein ''FremdschlĂŒssel'' (foreign key) ist eine Spalte oder eine Gruppe von Spalten in einer Tabelle, die einen PrimĂ€rschlĂŒssel in einer anderen Tabelle referenziert. Ein FremdschlĂŒssel muĂ selbst nicht eindeutig sein, aber er muĂ einen eindeutigen PrimĂ€rschlĂŒssel referenzieren. Ein ''SekundĂ€rschlĂŒssel'' beinhaltet all die Attribute, die potentiellen PrimĂ€rschlĂŒsselcharakter haben, aber nicht als PrimĂ€rschlĂŒssel herangezogen wurden, sondern nur ergĂ€nzenden Charakter haben. Ein '''Surrogat Key''' ist ein kĂŒnstlicher PrimĂ€rschlĂŒssel, der keine Bedeutung trĂ€gt, wie z.B. der Name als PrimĂ€rschlĂŒssel fĂŒr eine Tabelle User. ===1:n Relation=== Zu DatensĂ€tzen in Tabelle A gibt es immer genau eine Entsprechung in Tabelle B. Zu Tabelle B gibt es keine Entsprechung, eine oder mehrere Entsprechungen in Tabelle A. Der Fremd-Key in der Detailtabelle ist der PrimĂ€r-Key in der Mastertabelle. 1_zu_n_Relation.jpg ===n:m Relation=== Zu Tabelle B gibt es keine Entsprechung, eine oder mehrere Entsprechungen in Tabelle A. Zu Tabelle A gibt es keine Entsprechung, eine oder mehrere Entsprechungen in Tabelle B. Dies ist nur möglich, indem eine dritte Tabelle definiert wird (die als Verbindungstabelle bezeichnet wird), deren PrimĂ€rschlĂŒssel aus zwei Feldern besteht, den FremdschlĂŒsseln aus den Tabellen A und B. Eine m:n-Beziehung besteht eigentlich aus zwei 1:n-Beziehungen mit einer dritten Tabelle. m_zu_n_Relation.jpg ===ER- Diagramme=== ER_Diagramme.jpg ===Entity IntegritĂ€t === Um die Entity-IntegritĂ€t zu besitzen, muĂ eine Tabelle ĂŒber einen PrimĂ€rschlĂŒssel verfĂŒgen, der jede Zeile in der Tabelle eindeutig identifiziert. Um die Entity-IntegritĂ€t zu gewĂ€hrleisten, muĂ man sicherstellen, daĂ die Spalte oder die Spalten, die den PrimĂ€rschlĂŒssel bilden, keine Nullwerte enthalten. AuĂerdem muĂ der PrimĂ€rschlĂŒssel das Constraint UNIQUE erfĂŒllen. ===DomĂ€nenintegritĂ€t=== Damit ist gewĂ€hrleistet, daĂ jeder Eintrag in einer Spalte einen gĂŒltigen Wert besitzt. ===Referentielle IntegritĂ€t=== Die Regeln der referentielle IntegritĂ€t verbieten verwaiste FremdschlĂŒssel, d.h. es können keine Zeilen einer Tabelle (Mastertabelle) gelöscht werden, die in einer anderen Tabelle (Detailtabelle) als FremdschlĂŒssel werden. ===Index=== Ein Index beschleunigt das Suchen und Sortieren von DatensĂ€tzen. Die Daten in einer Tabelle werden in der Regel in der Reihenfolge gespeichert wie sie eingegeben werden. Im Index wird die Position der Daten nachgeschlagen. Sie können Indizes auf ein einzelnes Feld oder auf mehrere Felder legen. Zusammengesetzte Indizes erlauben das Unterscheiden zwischen DatensĂ€tzen, deren Inhalt im ersten Feld möglicherweise identisch ist Ein Index sollte fĂŒr Spalten nach denen oft gesucht oder sortiert wird ein Index angelegt werden, allerdings kostet die Verwaltung jeder zusĂ€tzlicher Indexe zusĂ€tzliche Rechenzeit. ===Joins=== Man verbindet zwei Tabellen in einem Join ĂŒber eine connecting bzw. join column. Beispielsituation: [[Image:join1.jpg]] '''Inner joins''' between two tables returns rows of data that exist across all joined tables, excluding rows that may only exist in one of the tables but not the other table. '''Outer joins''' return every row that exists in the left (in a left outer join) or right (in a right outer join) joined table, while rendering NULL values on rows whose foreign key does not match a record in the other (right or left) table. The "left" table refers to the table to the left of the JOIN statement in the query, whereas the "right" table refers to the table to the right of the JOIN statement in the query. Ein '''inner join''' kombiniert DatensĂ€tze aus zwei Tabellen, sobald ein gemeinsames Feld dieselben Werte enthĂ€lt (unabhĂ€ngig ob es primary oder foreign key Felder sind): [[Image:join2.jpg]] '''Left joins''' schlieĂen alle DatensĂ€tze aus der ersten (linken) Tabelle von zwei Tabellen ein, auch wenn keine entsprechenden Werte fĂŒr DatensĂ€tze in der zweiten (rechten) Tabelle vorhanden sind: [[Image:join3.jpg]] '''Right joins''' schlieĂen alle DatensĂ€tze aus der zweiten (rechten) Tabelle von zwei Tabellen ein, auch wenn keine entsprechenden Werte fĂŒr DatensĂ€tze in der ersten (linken) Tabelle vorhanden sind. [[Image:join4.jpg]] Man kann auch''' kombinierte Joins''' ausfĂŒhren: [[Image:join5.jpg]] ===View=== A view is an alternative way of looking at the data in one or more tables. Views are sometimes called virtual tables (virtuelle Tabellen) or derived tables (abgeleitete Tabellen). Im Gegensatz dazu werden 'echte' Tabellen oft base tables (Basistabellen) genannt. Ein View enthĂ€lt keine Kopie der Daten, sondern die realen Daten. ==Datentypen== SQL-92 unterstĂŒtzt folgende Datentypen: INTEGER, SMALLINT, NUMERIC(<Decimal>,<Nachkomma>), DECIMAL, REAL, DOUBLE PRECISION, FLOAT, , , BIT, BIT VARYING, DATE, TIME, TIMESTAMP. Es gibt einen besonderen Wert, den NULL Wert. {| border=1 cellpadding=2 cellspacing=0 |- |CHAR(<LENGTH>) |s. CHARACTER | | |- |CHARACTER(<LENGTH>) | | | |- |CHARACTER VARYING | | | |- |VARCHAR(<LENGTH>) |s. CHARACTER VARYING | | |} ==AusdrĂŒcke und Operatoren== ==Operatoren== ===Berechnungsoperatoren=== '''+ - * / ||''' bei Access wird statt || der + Operator verwendet. ===logische Operatoren=== '''= <> < > <= >= AND NOT''' ===Funktionen=== '''AVG()''' '''COUNT()''' '''MAX()''' '''MIN()''' '''SUM()''' ===Strings=== '<string>' ===Sonderzeichen=== Sonderzeichen werden mit einem Backslash gequoted. ==Befehle== <Spaltenliste> := '''*''' | (<Ausdruck> ['''AS''' <Alias>] {''',''' <Ausdruck> [ '''AS''' <Alias>] } ) ===DomĂ€ne erzeugen=== {| border=1 cellpadding=2 cellspacing=0 |- |<Tabelle erzeugen> |:= |'''CREATE''' '''DOMAIN''' <DomainName>''' '''<DomainType> \\'''CHECK''' ???''';''' |} ===Tabelle erzeugen=== {| border=1 cellpadding=2 cellspacing=0 |- |<Tabelle erzeugen> |:= |'''CREATE''' '''TABLE''' <TableName>''' ('''<Cols>''');''' |- |<Cols> |:= | <Col> { ''','''<Col> } [,<Constraints>] |- |<Col> |:= |<ColumnName> <ColumnType> [<ColConstraint> {{{ |}}} <KeyInfo>] |- |<ColumnType> |:= |'''TEXT'''['''('''<Laenge>''')'''] {{{ |}}} |- |<ColConstraint> |:= |'''NOT NULL '''{{{ |}}}''' UNIQUE '''{{{ |}}} <CheckColConstraint> |- |<CheckColConstraint> |:= |'''CHECK (''' <CheckColExpression> ''')''' |- |<KeyInfo> |:= |'''PRIMARY KEY''' |- |<Constraints> |:= |'''CONSTRAINT''' <ConstraintName> \\(<PrimaryKeyConstraint> {{{ |}}} <ForeignKeyConstraint> {{{ |}}} <CheckConstraint>) |- |<PrimaryKeyConstraint> |:= |'''PRIMARY KEY('''<ColName>{''','''<ColName>''')''' |- |<ForeignKeyConstraint> |:= |'''FOREIGN KEY('''<ColName>''')''' \\'''REFERENCES''' <ForeignTableName> '''('''<ForeignPrimaryKey>''')'''\\['''ON DELETE '''['''CASCADE '''{{{ |}}}''' SET NULL''']] |- |<CheckConstraint> |:= |'''CHECK (''' <CheckExpression> ''')''' |} PRIMARY KEY schlieĂt NOT NULL mit ein ====Beispiel==== MySQL: create table VUser (ID INT NOT NULL AUTO_INCREMENT, USER CHAR(30), PASSWORD CHAR(30), PRIMARY KEY (ID)); MS-Access: CREATE TABLE KUNDE ( KUNDE_ID INTEGER PRIMARY KEY, VORNAME CHARACTER(15), NAME CHARACTER(20) NOT NULL, ) ====SpezialitĂ€ten==== MS Access: *PRIMARY KEY als Colattribut wird nicht unterstĂŒtzt, sondern muĂ ĂŒber Constraint erfolgen *CHECK ... als Colattribut geht nicht und muĂ als GĂŒltigkeitsregel fĂŒr eine Spalte angelegt werden ===Tabelle verĂ€ndern=== {| border=1 cellpadding=2 cellspacing=0 |- |<Tabelle verĂ€ndern> |:= |'''ALTER''' '''TABLE''' <TableName> <Change>''';''' |- |<Change> |:= |'''ADD''' <ColName> <ColType> {, '''ADD''' <ColName> <ColType>} {{{ |}}}\\'''RENAME''' <TableName> {{{ |}}}\\'''MODIFY''' <ColName> <ColType> {{{ |}}} \\'''DROP''' '''COLUMN''' <ColName> {{{ |}}}\\'''RENAME''' '''COLUMN''' <ColName> |} ====Beispiel==== MySQL: ALTER TABLE <TableName> ADD K1SIZE INT, ADD K2SIZE INT; ===Tabelle löschen=== {| border=1 cellpadding=2 cellspacing=0 |- |<Tabelle löschen> |:= |'''DROP''' '''TABLE''' <TableName>''';''' |} ====Beispiel==== MySQL: DROP TABLE VUser; ===View erzeugen=== {| border=1 cellpadding=2 cellspacing=0 |- |<View erzeugen> |:= |'''CREATE VIEW '''<ViewName> [<ViewSpaltenliste>] '''AS''' <SelectionList> '''FROM''' <Source> |- |<SelectionList> |:= |??? |- |<Source> |:= |(<TableName> {{{ |}}} <ViewName>) <Condition> |- |<Condition> |:= | |} Die Viewspaltenliste muĂ nur angegeben werden, wenn die Spalten in der View andere Namen als in den Ausgangstabellen haben sollen. MS Acess: *In MS Access gibt es diesen Befehl nicht. Eine Abfrage ist immer ein View. ===Selektion=== {| border=1 cellpadding=2 cellspacing=0 |- |<Selection> |:= |'''SELECT '''['''DISTINCT''']''' '''[<SpaltenExpressions> ]\\'''FROM''' <Tabellenliste> \\['''WHERE''' <PrĂ€dikat>] \\['''GROUP BY''' <Bedingung>] \\['''HAVING''' <Bedingung>] \\['''ORDER''' '''BY''' <Sortierfelder> [('''ASC'''{{{ |}}}'''DESC''')]] |- |<SpaltenExpressions>> |:= |'''COUNT ('''<Spalte>''')''' {{{ |}}} \\<Spalte> <MathematicalExpression> {{{ |}}} \\<Spalte> ['''AS''' <Alias>] {,<SpaltenExpression>} |- |<Spalte> |:= |'''* '''{{{ |}}} ''' '''[<Tabellenname>'''.'''] <Spaltenname> |- |<Tabellenliste> |:= |<Tabellenname> ['''AS''' <Alias>] {''',''' <Tabellenname> ['''AS''' <Alias>]} |} SQL wertet diese Klauseln in der Reihenfolge '''FROM''', '''WHERE''', '''GROUP''' '''BY''', '''HAVING''' und schlieĂlich '''SELECT''' aus. '''ORDER BY''' wird nach '''SELECT''' ausgefĂŒhrt d.h. in funktionaler Notation ausgedrĂŒckt '''ORDER BY(SELECT(HAVING(GROUP BY(WHERE(FROM'''...''')))))'''. EnthĂ€lt die <Tabellenliste> mehr als eine Tabelle, wird das kartesische Produkt gebildet, d.h. jede Zeile der einen Tabelle mit der Zeile der anderen Tabelle kombiniert, d.h. bei n Zeilen in Tabelle 1 und m Zeilen in Tabelle 2 die resultierende virtuelle Tabelle n*m Zeilen enthĂ€lt. '''DISTINCT''' verhindert doppelte EintrĂ€ge. Es wirkt auf alle angegebenen Spalten. Aliasing mit '''AS''' eignet sich um Mehrdeutigkeiten zu vermeiden, oder wenn man beispielsweise zu Testzwecken die Abfrage auf eine andere Tabelle ausfĂŒhren möchte. Im Rest der Selektion wird nur noch der <Alias> verwendet. MS Access: Die Syntax fĂŒr das Erzeugen einer Tabelle aus einer Selektion lautet '''SELECT''' <SpaltenExpression> '''INTO''' <TabellenName> '''FROM''' ... ====WHERE PrĂ€dikat==== {| border=1 cellpadding=2 cellspacing=0 |- |<PrĂ€dikat> |:= |<VergleichsprĂ€dikat> {{{ |}}} <LIKEPrĂ€dikat> {{{ |}}} <INPrĂ€dikat> {{{ |}}} <NOTINPrĂ€dikat> {{{ |}}} <BEETWEENPrĂ€dikat> {{{ |}}} <NULLPrĂ€dikat> {{{ |}}} <ALLPrĂ€dikat> {{{ |}}} <SOMEPrĂ€dikat> {{{ |}}} <ANYPrĂ€dikat> {{{ |}}} <EXISTSPrĂ€dikat> {{{ |}}} <UNIQUEPrĂ€dikat> {{{ |}}} <OVERLAPSPrĂ€dikat> {{{ |}}} <MATCHPrĂ€dikat> {{{ |}}} <ISPrĂ€dikat> { <LogicalOperator> <PrĂ€dikat>} {{{ |}}} <Klammern> |- |<ANYPrĂ€dikat> |:= | |- |<BETWEENPrĂ€dikat> |:= |<Spalte> '''BETWEEN''' <Value1> '''AND''' <Value2> |- |<INPrĂ€dikat> |:= |<Spalte> '''IN (''' <Values> ''')''' |- |<ISPrĂ€dikat> |:= |<Spalte> '''IS '''['''NOT'''] [ <Value> {{{ |}}} '''NULL''' ] |- |<LIKEPrĂ€dikat> |:= |<Spalte> ['''NOT'''] '''LIKE''' '''''''<LikeString>'''' '''[ '''ESCAPE''' '''''''<EscapeChar>''''''' ] |- |<LIKEString> |:= |{ <Letter> {{{ |}}} '''%''' {{{ |}}} ''''''_ } % is the wildcard character, _ represents a single character |- |<LogicalOperator> |:= |'''AND''' {{{ |}}} '''OR ''' |- |<NOTINPrĂ€dikat> |:= |<Spalte> '''NOT''' '''IN (''' <Values> ''')''' |- |<VergleichsprĂ€dikat> |:= |<Vergleichsoperand> <Vergleichsoperator> <Vergleichsoperand> |- |<Vergleichsoperator> |:= |'''=''', '''<''', '''>''', '''<>''', '''<=''', '''>=''' |- |<Klammern> |:= |'''( )''' |- |<EXISTPrĂ€dikat> |:= |['''NOT'''] '''EXISTS''' '''('''<Selection>''') '''(s. 6.6.2), wenn mindestens eins exisitiert. |} Die Grenzwerte des BETWEENPrĂ€dikats gehören immer zum spezifizierten Wertebereich. Der erste Wert des BETWEENPrĂ€dikats darf nicht gröĂer als der zweite sein.% steht fĂŒr eine beliebige Zeichenfolge mit 0 bis n Zeichen, _ steht fĂŒr ein einzelnes Zeichen. ====Beispiele/Examples fĂŒr Selektionen==== Der folgende Befehl gibt alle Daten der Tabelle Adressen wieder: SELECT * FROM Adressen; Der Befehl gibt alle Daten des kartesische Produkt der Tabellen Kunde und Verkauf zurĂŒck: SELECT * FROM KUNDE, VERKAUF; Der folgende Befehl zeigt die Verwendung von Aliasen: SELECT A.ID, B.Name FROM Tab1 AS A, Tab2 AS B WHERE A.ID = B.ID; Beispiel fĂŒr Exists: select * from anwender AS A where not exists (select B.AnwenderID from bewertungen AS B where B.BewertungID = 3 and B.BefragungID = 2 and B.AnwenderID = A.ID) Fehlende Foreign Keys: SELECT * FROM `produktattribute` pa WHERE pa.variantennummer NOT IN (SELECT variantennummer FROM preise) ===Selektionsparameter=== MS Access: {| border=1 cellpadding=2 cellspacing=0 |- |<Selektionsparameter> |:= |'''PARAMETERS''' {'''['''} <ParaName> {''']'''} <Parametertype> {''',''' <ParaName> <Parametertype>''';'''\\<Selection> |} ===Schema erzeugen=== {| border=1 cellpadding=2 cellspacing=0 |- |<Schema erzeugen> |:= |'''CREATE''' '''SCHEMA''' <SchemaName>''';''' |} ===Daten einfĂŒgen oder kopieren=== ====Beispiel==== MySQL: INSERT INTO user (host, user, password) VALUES ('localhost', 'horst', password('horst')); INSERT INTO menux (id,name,comment,parent_id) SELECT menu.ID, menu.Name, menu.Comment, menu.ParentID FROM menu; ====SpezialitĂ€ten:==== MS Access: MS Access wandelt die VALUES-Notation immer in eine SELECT-Notation um ===Daten aktualisieren=== {| border=1 cellpadding=2 cellspacing=0 |- |<Daten aktualisieren> |:= |'''UPDATE '''<TabellenName> '''SET''' \\<Spaltenset>''' '''{''','''<Spaltenset>}\\[''' WHERE '''<PrĂ€dikat>''' ''']''';''' |- |<Spaltenset> |:= |<Spaltenname> '''=''' <Expression> |} ====Beispiel==== MySQL: UPDATE <TableName> SET <ColumnName>=3, <Columnname>='x' WHERE <TableName>.OID = 324534; ===Daten löschen=== {| border=1 cellpadding=2 cellspacing=0 |- |<Daten löschen> |:= |'''DELETE FROM '''<TabellenName> \\[''' WHERE '''<PrĂ€dikat>''' ''']''';''' |- |<Daten löschen> |:= |''''''TRUNCATE TABLE'''''' <TabellenName>; |} ====Beispiel==== MySQL: alle Daten aus einer Tabelle löschen DELETE FROM <TableName>; ==Datenbankschutz== In SQL können folgende DB Objekte geschĂŒtzt werden: *Tabellen *Spalten *Sichten *DomĂ€nen *ZeichensĂ€tze *Sortierfolgen *Ăbersetzungstabellen ==Datenmodellierung== ===Abbildung eines OO-Modells auf ein relationales Modell=== eine Tabelle pro Klasse eine Spalte pro Attribut 1:1 Beziehungen durch foreign key bei Aggregation Daten mit in der Klassentabelle 1:n Beziehungen das referenzierte Objekt erhĂ€lt Id des referenzierenden Objekts als foreign key m:n Beziehungen durch Hilfstabelle Vererbung: alle Unterklassen mit Basisklassen in einer Tabelle (flache Abbildung) ist performantt, evtl. viele leere Felder, Tabelle muĂ bei jeder Subclass geĂ€ndert werden Vererbung: alle Unterklassen in separater Tabelle (hierachische Abbildung), neue Subclasses entkoppelt, jeder Zugriff erforder ein Join ==Transaktionen== Ănderungen werden innerhalb eines Transaktionskontext durchgefĂŒhrt Ănderungen nur innerhalb der Transaktion sichtbar Ănderungen werden bei Commit fĂŒr alle sichtbar Ănderungen lassen sich durch ein Rollback zurĂŒcknehmen ===pessimistisches Sperren=== Objekt wird vor dem Schreiben bis zum Ende der Transaktion explizit gesperrt, keine Ănderungskonflikte, Performance ===optimistisches Sperren=== Objekt wird nicht gesperrt Schreiben nur dann erfolgreich, wenn das Objekt seit dem Lesen nicht verĂ€ndert wurde performant mehrfache Eingabe von Ănderungen ==Literatur== *Microsoft Access 97: Das Handbuch *SQL fĂŒr Dummies *SQL.vsd
Summary:
Please note that all contributions to Wiki RB4 may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see
Uwe Heuer Wiki New:Copyrights
for details).
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Toggle limited content width