SQL bietet Befehle für die Datendefinition an (DDL statements, data definition language). Mit diesen Befehlen legt man zum Beispiel die Domänen der einzelnen Attribute der Relationen fest. Weil man Relationen in einfacher Weise auch als Tabellen darstellen kann, spricht SQL in der Regel von Tabellen (tables). Man darf sich aber dabei nicht verleiten lassen zu glauben, daß die Anordnung der einzelnen Tupel innerhalb der Tabelle irgendeine Bedeutung hätte.
Im folgenden wird eine kurze Übersicht über die einzelnen Datendefinitionsbefehle gegeben.
nnnnnn¯ CREATE TABLE tableNameCREATE TABLE dient zum Erstellen einer neuen Relation (Tabelle) mit den angegebenen Attributen (Spalten). Zusätzlich kann man Integritätsbedingungen definieren. Im folgenden Beispiel ist das Attribut no jeweils der Primärschlüssel der Relationen, weiters muß für jeden Eintrag in der Relation Addresses ein Eintrag in der Relation Friends mit entsprechendem Wert von no existieren (referentielle Integrität)."
("
colElem {"
,"
colElem}"
)"
colElem = colDefinition tableConstraint.
colDefinition = colIdent dataType [DEFAULT defValue] {colConstraint}.
defValue = literal NULL USER.
colConstraint = NOT NULL UNIQUE PRIMARY KEY
REFERENCES tableName referencedColumns
CHECK
"
("
searchCondition"
)"
.tableConstraint = UNIQUE
"
("
colIdent {"
,"
colIdent}"
)"
PRIMARY KEY
"
("
colIdent {"
,"
colIdent}"
)"
CHECK
"
("
searchCondition"
)"
FOREIGN KEY referencingCols REFERENCES
referencedTable referencedColumns.
firstName CHAR(32), lastName CHAR(32) NOT NULL)
CREATE TABLE Addresses (no INTEGER NOT NULL PRIMARY KEY
REFERENCES Friends no, street CHAR(50), town CHAR(20),
zipCode INTEGER)
nn¯ ALTER TABLE tableName (ADD colIdent dataTypeALTER TABLE dient zum Hinzufügen und Entfernen von Attributen (Spalten) zu beziehungsweise von einer Relation (Tabelle). Die neuen Attribute in bestehenden Tupeln erhalten entweder Nullwerte oder die Werte, die man bei der Tabellendefinition voreingestellt hat ( DEFAULT defValue).ADD
"
("
colIdent dataType {"
,"
colIdent dataType}"
)"
DROP [COLUMN] colIdent [CASCADE RESTRICT])
nn¯ DROP TABLE tableName [CASCADE RESTRICT]DROP TABLE löscht die angegebene Relation (Tabelle).
nn¯ CREATE [UNIQUE] INDEX indexName ON tableNameCREATE INDEX erstellt einen neuen Index über Spalten einer Tabelle. Mittels eines Indizes können gewisse Abfragen wesentlich schneller abgearbeitet werden.colIdent [ASC DESC] {
"
,"
colIdent [ASC DESC]}
nn¯ DROP INDEX indexNameDROP INDEX löscht den angegebenen Index.
nnnn¯ CREATE VIEW viewName [CREATE VIEW erstellt eine neue logische Sicht auf eine bestehende Tabelle oder auf das Ergebnis einer Abfrage. Eine Erklärung der Syntax von Abfragen folgt weiter hinten. Der Stern im folgenden Beispiel ist synonym mit dem Schlüsselwort ALL."
("
colIdent {"
,"
colIdent}"
)"
] AS queryquery = SELECT [ALL DISTINCT] selectList FROM tableList
[WHERE searchCondition]
[GROUP BY colName {
"
,"
colName}][HAVING searchCondition].
WHERE town = 'LINZ'
nn¯ DROP VIEW viewName [CASCADE RESTRICT]DROP VIEW löscht eine logische Sicht.
nnnn¯ GRANT (ALL grantPrivilege {GRANT dient zum Erteilen von Rechten auf Relationen."
,"
grantPrivilege} ON tableName)TO (PUBLIC userName {, userName})
grantPrivilege = DELETE INSERT SELECT
UPDATE [colIdent {
"
,"
colIdent}]REFERENCES [colIdent {
"
,"
colIdent}].
nnnn¯ REVOKE (ALL revokePrivilege {REVOKE widerruft Rechte auf Relationen."
,"
revokePrivilege} ON tableName)FROM (PUBLIC userName {
"
,"
userName}) [CASCADE RESTRICT]revokePrivilege = DELETE INSERT SELECT UPDATE
REFERENCES.