SQL-Grundlagen

+ andere TechDocs
+ SQL-Beispielkommandos
+ MySQL
+ PostgreSQL
+ SQL mit Java/JDBC
+


SQL (Structured Query Language) hat sich als Abfragesprache f�r relationale Datenbanken durchgesetzt.
Zu den bekanntesten freien SQL-Datenbanken z�hlen MySQL, PostgreSQL und MaxDB.
Zu den gr��ten kommerziellen Datenbankherstellern z�hlen Oracle und IBM.



Inhalt

  1. Vergleich MySQL, PostgreSQL und MaxDB
  2. Anlage einer Database und einer Tabelle
  3. JDBC (Java DataBase Connectivity)
  4. ODBC (Open DataBase Connectivity)
  5. Datenbank-Clientprogramm
  6. SQL-Anweisungen
    1. SELECT (SQL Data Query Language)
    2. DML (SQL Data Manipulation Language)
    3. DDL (SQL Data Definition Language)
    4. DCL (SQL Data Control Language)
  7. Einige SQL-Datentypen und -Funktionen in unterschiedlichen Datenbanken
  8. Weiterf�hrende Informationen


Vergleich MySQL, PostgreSQL und MaxDB

Zu den bekanntesten freien SQL-Datenbanken z�hlen MySQL, PostgreSQL und MaxDB.

MySQL wird besonders h�ufig zusammen mit Web-Servern eingesetzt. Zum Beispiel Online-Shops beinhalten oft gro�e Datenmengen, aber kommen mit einfach strukturierten Tabellen aus. Beliebt ist die 'LAMP'-Kombination: Linux + Apache + MySQL + PHP.

PostgreSQL ist auch f�r komplexere Anwendungen geeignet, in denen ANSI-SQL-Konformit�t, Views, Stored Procedures und Trigger ben�tigt werden. Es sollte m�glichst nur PostgreSQL ab mindestens Version 7.1 verwendet werden, da �ltere Versionen ohne besondere Ma�nahmen pro Datenbankzeile nur bis zu 8 KByte verwalten konnten.

MaxDB ist der Nachfolger der SAP® DB (und damit auch von Adabas) und pr�destiniert f�r ERP-Anwendungen.


  MySQL 3.23 / 4.1 / 5.x PostgreSQL 7.2 ... 8.0 MaxDB 7.5
Web techdocs/mysql.htm,
http://www.mysql.com
techdocs/postgresql.htm,
http://www.postgresql.de
http://maxdb.sap.com, http://www.sdn.sap.com/irj/sdn/maxdb
Lizenz GPL oder kommerziell BSD-Lizenz GPL oder kommerziell
Dokumentation,
Installation,
Hilfsprogramme
gute Doku,
einfache Installation,
viele Hilfsprogramme
(z.B. MySQLCC, phpMyAdmin, DBDesigner)
m��ige Doku,
wenige Hilfsprogramme
(z.B. pgAdmin, phpPgAdmin)
einfache Installation,
Hilfsprogramme (z.B. Database Manager / WebDBM, SQL Studio / WebSQL)
Betriebssystem Unix/Linux,
Windows
vorzugsweise Unix/Linux;
bis Vers. 7.x Windows nur m�hsam mit Cygwin,
ab Vers. 8 auch ohne Cygwin
Unix/Linux,
Windows
ANSI-SQL-Konformit�t weniger weitgehend SQL99 weitgehend SQL99
Benutzerberechtigungen mit GRANT ja ja ja
Transaktionen bis MySQL 3.23:
nur mit Zus�tzen InnoDB, BDB;
ab MySQL 4.1:
ja
ja
('read committed' und 'serializable')
ja
Foreign Keys, Subselects MySQL 3.23: nein;
MySQL 4.1: ja
ja ja
Views, Stored Procedures, Trigger bis MySQL 4.1: nein;
ab MySQL 5.x: ja
ja ja
BLOB z.B. LONGBLOB per BYTEA (Byte Array)
oder OID (Object Identifier)
ja
JDBC-Type-4-Treiber ja ja ja
Einsatzbereich, Geschwindigkeit optimiert f�r Webserver mit eher einfacheren Zugriffen, vielen Lesezugriffen und wenigen Schreiboperationen schnell bei vielen gleichzeitigen Benutzern und komplexeren Operationen;
Verarbeitung geographischer Daten
optimiert f�r SAP® ERP;
auch f�r andere komplexe Anwendungen im kommerziellen Umfeld; auch OLTP

Im Vergleich zu solchen freien Datenbanken bieten kommerzielle Systeme wie zum Beispiel von Oracle Vorteile wie �berlegenere Clusterkonzepte, h�heren Funktionsumfang bei Views, Stored Procedures und Triggern, h�here Sicherheit und ausgefeiltere Backup- und Recovery-M�glichkeiten.



Anlage einer Database und einer Tabelle


MySQL

Hinweise zur Installation und Benutzung von MySQL gibt es unter mysql.htm.
Eine einfache Kurzanleitung zur Anlage einer Database und einer Tabelle finden Sie unter mysql.htm#CreateDatabase.


PostgreSQL

Hinweise zur Installation und Benutzung von PostgreSQL gibt es unter postgresql.htm.
Eine einfache Kurzanleitung zur Anlage einer Database und einer Tabelle finden Sie unter postgresql.htm#CreateDatabase.


Oracle DB

Um in einer eingerichteten Oracle-Datenbank eine Tabelle anzulegen, k�nnen Sie die folgende Zeilen in eine einfache ASCII-Textdatei mit der Dateiendung '.sql' speichern und diese SQL-Kommandodatei z.B. mit den Oracle-Tools SQL*Plus oder VAW einlesen und ausf�hren:


connect myLogin/myPassword@myDatabaseServer;
DROP TABLE myOwner.myTable;
CREATE TABLE myOwner.myTable (
  FIELDNAME_XY1 VARCHAR(32)  NOT NULL,
  FIELDNAME_XY2 VARCHAR(32)  NOT NULL,
  FIELDNAME_XY3 NUMERIC(8,2) NULL,
  FIELDNAME_XY4 CHAR(1)      NULL,
  CONSTRAINT FK_myTable_FIELDNAME_XY1 FOREIGN KEY( FIELDNAME_XY1 )
    REFERENCES myOwner.otherTable( OTHER_NAME ),
  PRIMARY KEY( FIELDNAME_XY1, FIELDNAME_XY2 ),
  UNIQUE( FIELDNAME_XY2, FIELDNAME_XY3 ) );
INSERT INTO myOwner.myTable VALUES ( 'abc', 'xyz', 4711, 'X' );
GRANT SELECT ON myOwner.myTable TO myRole;
SELECT * FROM myOwner.myTable;

hSqlDb

Infos zur Java-Datenbank hSqlDb gibt es unter http://hsqldb.org und im Javamagazin 2003.03 ab Seite 97.
Hinweise zur Installation von hSqlDb und eine einfache Kurzanleitung zur Anlage einer Database und einer Tabelle gibt es unter java-sql.htm#hSqlDb.



JDBC (Java DataBase Connectivity)

Von in Java programmierten Anwendungen aus erfolgt der Datenbankanbindung per JDBC-Treiber. Weiteres hierzu erfahren Sie unter SQL mit Java/JDBC.



ODBC (Open DataBase Connectivity)

Viele Anwendungen k�nnen mit SQL-Datenbanken �ber ODBC kommunizieren. Vorraussetzung ist die Einrichtung eines ODBC-Treibers auf dem Client-Rechner.


ODBC-System-DSN unter Windows erstellen f�r eine Microsoft-Access-Datenbank (.mdb-Datei)

  1. Unter Windows XP:
    Start | Systemsteuerung | Leistung und Wartung | Verwaltung | Datenquellen (ODBC);
    Unter �lteren Windows-Versionen:
    Start | Einstellungen | Systemsteuerung,
    falls es hier einen ODBC-Datenquellen-Administrator gibt: anklicken,
    sonst: Verwaltung | Datenquellen (ODBC) w�hlen.
  2. System-DSN | Hinzuf�gen | Microsoft Access-Treiber (*.mdb),
    Datenquellenname (DSN-Name) vergeben,
    Ausw�hlen des Datenbankdateipfades zur .mdb-Datei.

ODBC-System-DSN unter Windows erstellen f�r ein Oracle-RDBMS

  1. ODBC f�r Oracle-RDBMS nur einrichten, wenn besondere Gr�nde vorliegen.
    Z.B. f�r Java/JSP sollte unbedingt hierauf verzichtet werden, da der direkte JDBC-Treiber wesentlich schneller ist.
  2. Die Anbindung einer Applikation �ber ODBC an Oracle verl�uft normalerweise durch folgende Schichten:
    Application, ODBC Driver manager (odbc32.dll), Oracle Driver (sqora*.dll), OCI layer (ora*.dll), SQL*Net Driver, Network Software (TCP/IP), SQL*Net Listener, Oracle RDBMS.
  3. Falls Verbindungsfehler auftreten: Genau pr�fen, ob eine Firewall die Verbindung oder den Zugriff auf die Ports blockiert.
  4. Mit 'Ping' die TCP/IP-Verbindung �berpr�fen, z.B. mit: 'Ping OraServ'.
  5. Oracle-Client (und SQL*Net) von Oracle-CD installieren.
  6. Die 'SQL*Net Configuration Files' 'SqlNet.ora' und 'TnsNames.ora' (z.B. unter 'C:\OraWindows\Net80\Admin') �berpr�fen, anpassen oder eventuell mit dem 'Network Manager' neu generieren. Ihr Inhalt muss zusammenpassen und zur Datei 'Listener.ora' auf dem Oracle-Server passen.
    Beide Dateien darf es nur genau einmal auf dem Client-Rechner geben, um Mehrdeutigkeiten zu vermeiden (sie k�nnen sich auch im Netzwerk befinden, wenn unter 'HKEY_Local_Machine\Software\Oracle\TNS_ADMIN' der Pfad eingetragen ist).
    Drei beispielhafte Eintr�ge f�r 'TnsNames.ora' (TNS = Transparent Network Substrate = Teil des Netzwerkprotokolls SQL*Net, Port = normalerweise 1521 oder 1526, SID = System Identifier, ORCL = Oracle, NMP = Named Pipes):
    MeinDbServer.world = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP) (Host = 127.0.0.1) (Port = 1521) ) ) (CONNECT_DATA = (SID = ORCL) ) )
    MeinDbServer.world = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = NMP) (Server = MeinDbServer) (Pipe = ORAPIPE) ) ) (CONNECT_DATA = (SID = ORCL) ) )
    MeinDbServer.world = (DESCRIPTION = (ADDRESS = (COMMUNITY = TCP.world) (PROTOCOL = TCP) (Host = OraServ) (Port = 1526) ) (CONNECT_DATA = (SID = MeinDbServer) (GLOBAL_NAME = MeinDbServer.world) ) )

  7. Mit 'TnsPing' die SQL*Net-Verbindung �berpr�fen, z.B. mit: 'TnsPing MeinDbServer'.
    Ist 'TnsPing' nicht installiert, kann die Verbindung notfalls auch mit 'telnet <hostname> <port>' gepr�ft werden.
    Zus�tzlich kann auf dem Oracle-Server mit 'lsnrctl' �berpr�ft werden, f�r welche Instanz der Listener des Servers das Netzwerk abh�rt, zum Beispiel so: 'lsnrctl status'.
  8. Eventuell mit den Oracle-Tools 'SQL*Plus', 'Plus80W' oder 'VAW' die Verbindung pr�fen.
  9. 'Start' | 'Einstellungen' | 'Systemsteuerung',
    unter Windows XP: 'Leistung und Wartung',
    falls es hier einen 'ODBC-Datenquellen-Administrator' gibt: anklicken,
    sonst: 'Verwaltung' | 'Datenquellen (ODBC)' w�hlen,
    'System-DSN' | 'Hinzuf�gen' | 'Microsoft ODBC f�r Oracle',
    'Datenquellenname' ('Data Source Name', 'DSN-Name') beliebig vergeben,
    'Server-Namen' ('SQL*Net Connect String') eintragen exakt so wie in 'TnsNames.ora' (z.B. 'MeinDbServer').
  10. Mit 'ODBC-Test' die Funktion der ODBC-Verbindung pr�fen.
  11. Falls es Probleme mit dem Dezimaltrennzeichen (',' bzw. '.') gibt (z.B. Oracle-Fehler ORA-01722, ung�ltige Zahl): Den Eintrag unter 'HKEY_Local_Machine\Software\Oracle\Home0\NLS_LANG' pr�fen und entweder auf 'German_Germany.WE8ISO8859P1' oder auf 'AMERICAN_AMERICA.WE8ISO8859P1' setzen. Au�erdem sollte die Einstellung des Dezimaltrennzeichens in der Windows-Systemsteuerung unter 'Regionale Einstellungen' | 'Anpassen' | 'Zahlen' �berpr�ft werden.
  12. Aktuelle Microsoft-ODBC-Treiber (msorcl32.dll) gibt es unter: http://www.microsoft.com/data.
  13. Aktuelle Oracle-ODBC-Treiber und Hinweise gibt es unter: http://technet.oracle.com/tech/windows/content.html, rechts unter 'Quick Picks' auf 'ODBC' klicken und dann links auf 'Software' oder unten auf 'PDF ODBC FAQ'.

Per ODBC erreichbare Datenbank (z.B. Oracle DB) mit MS-Access bearbeiten

  1. "Microsoft Access" starten.
  2. "Leere Access-Datenbank" erstellen.
  3. Directory und Dateiname (*.mdb) w�hlen, "Erstellen".
  4. "Einf�gen", "Tabelle" w�hlen.
  5. Entweder, wenn urspr�ngliche ODBC-Datenbank mit MS-Access bearbeitet werden soll, "Tabelle verkn�pfen" w�hlen,
    sonst, wenn eine eigenst�ndige lokale Kopie einiger Tabellen erstellt werden soll, "Tabelle importieren" w�hlen.
  6. Als "Dateityp" "ODBC Databases ()" w�hlen.
  7. Reiter "Computerdatenquelle" w�hlen.
  8. Unter "Datenquellenname" den vorher eingerichteten ODBC-DSN-Namen ausw�hlen, "OK".
  9. "Benutzername", "Kennwort" und "Server" eingeben.
  10. Die zu verkn�pfenden Tabellen ausw�hlen, "OK".
  11. Wenn nach Prim�rschl�ssel (Primary Key) gefragt wird: falls bekannt, ausw�hlen, sonst nichts ausw�hlen.


Datenbank-Clientprogramm

�ber Datenbank-Clientprogramme k�nnen Datenbanken bequem bearbeitet werden. Die Datenbanken bieten daf�r speziell zur Datenbank passende Administrationstools an. Es gibt aber auch universellere Tools mit vielleicht etwas geringerem Leistungsumfang, aber daf�r f�r diverse verschiedene Datenbanken geeignet.

Zu Eclipse gibt es Datenbank-Clients als Eclipse-Plug-ins. Siehe dazu QuantumDB, SQLExplorer, jOra und Clay.

F�r die Oracle DB wird gerne Toad von Quest verwendet. Mittlerweile gibt es Toad auch f�r andere Datenbanken, zum Beispiel f�r MySQL.

Image Als universelles Stand-alone-Programm ist SQuirreL recht beliebt (sowohl unter Windows als auch Linux etc.). Es setzt ein installiertes Java voraus und wird folgenderma�en installiert:

  1. Installation unter Windows:
  2. SQuirreL (z.B. squirrel-sql-3.1-install.jar) downloaden von http://squirrel-sql.sourceforge.net oder http://www.squirrelsql.org.
  3. Im Kommandozeilenfenster eingeben:
    java -jar squirrel-sql-3.1-install.jar.
    Als Installationszielverzeichnis zum Beispiel 'D:\Tools\SQuirreL' angeben.
  4. Den zur Datenbank passenden JDBC-Treiber in das SQuirreL-'lib'-Verzeichnis (z.B. 'D:\Tools\SQuirreL\lib') kopieren.
  5. SQuirreL starten (�ber Icon oder �ber 'D:\Tools\SQuirreL\squirrel-sql.bat').
  6. Falls sich SQuirreL mit Fehlermeldung verabschiedet: �berpr�fen, ob eine zu SQuirreL passende Java-Version installiert ist. SQuirreL 2.4 ben�tigt zum Beispiel mindestens Java 5 und SQuirreL 3.0 mindestens Java 6. Falls verschiedene Java-Version installiert sind und eine �ltere im "JAVA_HOME" eingetragen sein muss: In der "squirrel-sql.bat" (bzw. analog in "squirrel-sql.sh") "LOCAL_JAVA" auf Java 6 setzen:
    'SET LOCAL_JAVA=C:\Program Files\Java\jdk1.6\bin\java'.
  7. Im 'Drivers'-Fenster muss vor dem gew�nschten JDBC-Treiber (z.B. 'MySQL Driver') ein blauer OK-Haken sein.
  8. Im 'Alias'-Fenster mit dem blauen '+'-Zeichen eine neue Datenbankverbindung einrichten: Zuerst den korrekten 'Driver' w�hlen (z.B. 'MySQL Driver'), dann 'URL', 'User Name' und 'Password' eintragen. Die URL lautet f�r MySQL zum Beispiel 'jdbc:mysql://MyDbComputerNameOrIP:3306/myDatabaseName'. Weitere Beispiel-URLs f�r andere Datenbanken finden Sie in den Folgekapiteln unter 'JDBC'.
  9. Anschlie�end k�nnen Sie durch Doppelklick auf den neu erstellten 'Alias'-Eintrag eine Verbindung zur Datenbank herstellen und es �ffnet sich ein neues Fenster.
  10. SQL-Kommandos k�nnen Sie unter dem 'SQL'-Tabulatorreiter eingeben.
  11. Vorhandene Tabellen und deren Eigenschaften und Dateninhalte k�nnen Sie am bequemsten ansehen, indem Sie unter dem 'Objects'-Tabulatorreiter die [+]-Zeichen anklicken, bis Sie unter 'TABLE' die Tabellennamen sehen. Klicken Sie darauf.
  12. Vergr��ern Sie Ihr Tabellenansichtsfenster und achten Sie darauf, dass der senkrechte Fensterteiler nicht am rechten Rand steht. Ziehen Sie den Fensterteiler mit den kleinen schwarzen Dreiecken in die Mitte, um in der rechten Fensterh�lfte die Reiter 'Info', 'Content' u.s.w. zu sehen. Klicken Sie auf 'Content', um den Tabellendateninhalt zu sehen.
  13. Erstellen Sie von bestehenden Tabellen ein Tabellen�bersichtsdiagramm (inklusive Foreign-Key-Beziehungen), indem Sie die Tabellen im 'Objects'-Fenster markieren und �ber die rechte Maustaste 'Add to graph' w�hlen. Unter dem Tabulatorreiter 'New table graph' sehen Sie die Tabellen-Veranschaulichungen, die Sie frei verschieben k�nnen. Klicken Sie im 'New table graph'-Fenster mit der rechten Maustaste auf den wei�en Hintergrund f�r weitere Optionen.
  14. Sehen Sie sich die SQuirreL-Doku an unter: http://squirrel-sql.sourceforge.net/paper/SQuirreL_de.pdf.
  15. Falls SQuirreL-Einstellungen von einem Rechner zu einem anderen transportiert werden sollen: Die lokalen Einstellungen sind unter Windows gespeichert unter: 'C:\Users\<Benutzername>\.squirrel-sql'.


SQL-Anweisungen


SELECT (SQL Data Query Language)

(siehe auch "Einfache Beispiele f�r SQL-Kommandos")
SELECT * FROM meineTabelle; Alle Daten einer Tabelle lesen.
SELECT * FROM "meine Tabelle"; Normalerweise unterscheidet SQL nicht zwischen Gro�-/Kleinschreibung. Wird der Tabellenname in Anf�hrungszeichen gesetzt, muss Gro�-/Kleinschreibung exakt stimmen und der Tabellenname immer genau so geschrieben werden.
Einige Datenbanken akzeptieren dann auch Leerzeichen im Tabellennamen (was eigentlich nicht erlaubt ist).
SELECT feldName1, feldName2 FROM meineTabelle;
Bestimmte Felder (Spalten) einer Tabelle lesen.
SELECT feldName1, feldName2 FROM meineTabelle
ORDER BY feldName2, feldName1 DESC;

Spalte(n) zur Sortierung vorgeben, entweder per Feldnamen oder auch per Spaltennummern.
Bei Spaltennummern beachten: Die erste Spalte ist 1 (und nicht 0).
Ohne DESC aufsteigend, mit absteigend.
SELECT * FROM meineTabelle
WHERE feldName1 = 'xy'
AND feldName2 < 100
AND feldName3 BETWEEN 1 AND 10;

Die Zeilen der Tabelle lesen, deren Elemente die Bedingung erf�llen.
'=' testet auf Gleichheit, '<>' auf Ungleichheit und '<', '<=', '>' und '>=' vergleichen.
Textstrings werden z.B. f�r Oracle DB, MySQL und MS Access mit einfachen Hochkommas, aber z.B. f�r InterBase mit doppelten Hochkommas eingeschlossen.
SELECT * FROM meineTabelle
WHERE UPPER(feldName1) = UPPER('xy');

Vergleich mit Ignorierung von Gro�-/Kleinschreibung. Kommandos sind unterschiedlich je nach Datenbank. Gro�schreibung wird z.B. bei der Oracle DB mit UPPER() und bei MS-Access mit UCASE() erreicht.
SELECT * FROM meineTabelle
WHERE feldName1 LIKE 'B%';

Die Zeilen der Tabelle lesen, deren Element in der Spalte feldName1 mit einem gro�en B beginnt (oder mit '%abc%' den Teilstring 'abc' enth�lt).
'_' ist Platzhalter f�r genau einen Zeichen, '__' f�r zwei Zeichen und '%' f�r eins oder mehrere Zeichen.
SELECT * FROM meineTabelle
WHERE feldName1 IN( 11, 13, 17 );

Selektiere Zeilen, wo feldName1 in angegebener Menge enthalten ist.
SELECT * FROM meineTabelle1
WHERE feldName1
IN( SELECT feldName2 FROM meineTabelle2 );

Wie vorher, aber angegebene Menge ist Resultat von weiterer Abfrage (mit einspaltigem Ergebnis).
SELECT meineTabelle1.feldName3, meineTabelle2.feldName4
FROM meineTabelle1, meineTabelle2
WHERE meineTabelle1.fremdSchl�sselFeld = meineTabelle2.prim�rSchl�sselFeld;

Join zweier Tabellen.
Leider ist die Syntax nicht bei allen Datenbanken gleich. Die gezeigte Schreibweise gilt z.B. f�r Oracle DB, MySQL und MS Access.
Prim�rschl�sselspalte und Fremdschl�sselspalte k�nnen in der Datenbank entsprechend definiert werden.
SELECT Autor.Name, Autor.Vorname, Buch.Titel, Gebiet.Bez, Verlag.Name_Kurz
FROM Autor, Buch, Gebiet, Verlag
WHERE Buch.Autor_Nr = Autor.Nr
AND Buch.Gebiet_Abk = Gebiet.Abk
AND Buch.Verlag_Nr = Verlag.Nr;

Join vierer Tabellen.
Bei Verkn�pfung von n Tabellen sind n-1 Join-Kriterien erforderlich.
SELECT * FROM Kunde K
JOIN Bestellung B ON K.kdkey=B.kdkey;

Join zweier Tabellen in einer f�r die Datenbank InterBase verst�ndlichen Syntax.
SELECT feldName1 "Nachname", feldName2 "Vorname" FROM meineTabelle;
Aliasnamen: F�r Feldnamen andere Bezeichnungen vorgeben.
SELECT Nachname || ', ' || Vorname "Name" FROM meineTabelle;
Konkatenation mit ||: Zwei Spalten werden zu einer Ausgabespalte (mit dem neuen Namen "Name") verbunden.
SELECT SUBSTR( Name, 1, 1 ) FROM meineTabelle;
Teilstring extrahieren. Parameter: String, Startposition, L�nge.
SELECT DISTINCT feldName1 FROM meineTabelle;
DISTINCT bedeutet Zusammenfassung gleicher Elemente zu einer Zeile.
SELECT COUNT(*) "Anzahl" FROM meineTabelle;
Eingebaute Aggregatfunktionen: COUNT() (Anzahl), MIN(), MAX(), AVG() (Durchschnitt), SUM().
SELECT ZahlungsEmpfaenger, SUM(Betrag) FROM Rechnungen GROUP BY ZahlungsEmpfaenger;
GROUP BY reduziert die returnierten Reihen pro Group-Wert auf eine Reihe.
GROUP BY normalerweise zusammen mit Aggregatfunktionen (z.B. SUM, AVG ...).
SELECT TO_CHAR( Datum, 'YYYY' ) FROM meineTabelle;
Datentypkonvertierung: TO_CHAR() (String), TO_NUMBER() (Zahl), TO_DATE() (Datum).
SELECT * FROM meineTabelle where date = TO_DATE( '2002-01-23_14:51', 'yyyy-MM-dd_HH24:mi' );
Datumsformatkonvertierung mit TO_DATE() (z.B. bei der Oracle DB).
SELECT * FROM meineTabelle where date = TO_DATE( '2017-01-01 01:02:03.0', 'YYYY-MM-DD HH24:MI:SS.FF' );
Datumsformatkonvertierung mit Sekunden-Nachkommastellen mit TO_DATE() (z.B. bei der Oracle DB).
SELECT SYSDATE FROM DUAL; SYSDATE ist das aktuelle System-Datum. DUAL ist ein Dummy-Name als Platzhalter f�r eine Tabelle, wo eigentlich keine Tabelle ben�tigt wird. SYSDATE und DUAL werden nicht von allen Datenbanken unterst�tzt (aber z.B. von der Oracle DB).
SELECT * FROM meineTabelle
WHERE Datum >= (SYSDATE - 28);

Die Zeilen der Tabelle lesen, deren Eintrag im Datumsfeld nicht �lter als vier Wochen ist. Datums-Kommando ist unterschiedlich je nach Datenbank, z.B. SYSDATE bei der Oracle DB und NOW() bei MS-Access.
SELECT 1 FROM DUAL WHERE EXISTS
(
SELECT 1 FROM MeineTabelle WHERE ... );

EXISTS pr�ft Existenz.
SELECT * FROM meineTabelle
WHERE feldName1 IS NULL
AND feldName2 IS NOT NULL;

SQL returniert NULL, wenn ein Feld leer ist. Es gibt normalerweise keine Leerstrings. NULL kann nicht mit Vergleichsoperatoren gepr�ft werden, sondern mit IS NULL bzw. IS NOT NULL.
SELECT Name, NVL( TO_CHAR(GebJahr), '?' ) FROM meineTabelle;
NVL() ersetzt NULL Values durch etwas anderes.
Select * from ( Select rownum rn, rslt1.* from (
Select * from MeineTabelle
where ... order by ... ) rslt1 )
where rn = 10;

Die 10. Zeile eines sortierten Ergebnisses auslesen.
SELECT title, text FROM books
WHERE CONTAINS( text, '!door' ) > 0;

Ausrufezeichenoperator f�r phonetische Suche mit 'soundex' (nicht in allen Datenbanken implementiert, aber z.B. in der Oracle DB).

DML (SQL Data Manipulation Language)

INSERT INTO tabelleAutor ( Nr, NachName, VorName, GebJahr )
VALUES ( 1, 'B�ll', 'Heinrich', 1917 );

Daten in bestehende Tabelle einf�gen.
Zahlenwerte ohne Hochkommas und Datentextstrings mit einfachen Hochkommas angeben.
Soll der Wert eines Feldes nicht gesetzt werden, kann der entsprechende Feldname weggelassen werden oder alternativ als Datenelement NULL angegeben werden.
UPDATE tabelleAutor
SET Name = Otto, GebJahr = 1954, Beruf = NULL
WHERE Nr = 10;

Daten in Tabelle �ndern.
Auf NULL setzen bedeutet Feld l�schen.
DELETE FROM tabelleAutor
WHERE Datum < (SYSDATE - 3650);

Zeilen l�schen (hier alle �lter als 10 Jahre alten Eintr�ge).
COMMIT; Transaktion: Die seit dem vorherigen COMMIT-Kommando eingegebenen SQL-DML-Kommandos wirklich ausf�hren.
ROLLBACK; Transaktion: Die seit dem vorherigen COMMIT-Kommando eingegebenen SQL-DML-Kommandos r�ckg�ngig machen.
LOCK TABLE meineTabelle
IN EXCLUSIVE MODE NOWAIT;

Locking einer ganzen Tabelle (bis zum n�chsten COMMIT oder ROLLBACK).
(Locking einzelner Reihen geschieht automatisch bei �nderungen.)
SELECT * FROM meineTabelle
WHERE meinFeldname = 'xy'
FOR UPDATE OF meinFeldname;

Locking bestimmter per SELECT ... WHERE ... ausgew�hlter Datens�tze (bis zum n�chsten COMMIT oder ROLLBACK) schon beim Lesezugriff, damit zwischen Lesezugriff und sp�terer �nderung kein anderer Benutzer diese Datens�tze �ndern kann.

DDL (SQL Data Definition Language)

CREATE TABLE Autor (
Nr INT
CONSTRAINT Pk_Autor PRIMARY KEY,
Name VARCHAR(80)
CONSTRAINT Nn_Autor_Name NOT NULL,
VorName VARCHAR(80)
CONSTRAINT Nn_Autor_VorName NOT NULL,
GebJahr INT,
Geschl CHAR(1)
CONSTRAINT Ch_Autor_Geschl
CHECK ( TYP IN ('m', 'w') ),
UNIQUE( Nr ),
UNIQUE( Name, VorName ) );

Tabelle anlegen.
Namen/Bezeichner d�rfen bis 30 Zeichen lang sein und keine Leerzeichen, Umlaute oder Sonderzeichen enthalten.
Die SQL-Datentypen sind in unterschiedlichen Datenbanken leider verschieden definiert. Siehe dazu auch unten die Tabelle 'SQL-Datentypen und -Funktionen in unterschiedlichen Datenbanken'.
INT und FLOAT kann in allen SQL-Datenbanken verwendet werden.
NUMERIC(p,s) (oder DECIMAL(p,s), oder NUMBER(p,s)) speichert bei einigen Datenbanken Flie�kommazahlen mit Angabe der maximalen Stellenanzahl und Nachkommastellenzahl.
DATE ist entweder nur Datum oder Kombination aus Datum und Uhrzeit.
CHAR(n) reserviert Speicherplatz in der festen angegebenen L�nge (h�chstens 255 Zeichen).
VARCHAR(n) definiert Strings variabler L�nge. n gibt die maximale L�nge an (je nach Datenbank h�chstens 255 oder 2000 Zeichen).
Die Datentypen f�r lange Texte oder Bin�rdaten (z.B. Bilder) hei�en bei verschiedenen Datenbanken unterschiedlich, z.B. BLOB (Binary Large Object), LONGBLOB, LONG RAW, LONG, LONGCHAR, MEMO. Die maximale Gr��e kann z.B. 64 KByte oder 4 GByte betragen.
CONSTRAINT ... PRIMARY KEY definiert Prim�rschl�sselspalten.
CONSTRAINT ... REFERENCES definiert Fremdschl�sselspalten.
CONSTRAINT ... NOT NULL erzwingt Eingabewerte.
CONSTRAINT ... CHECK ... erm�glicht zus�tzliche Pr�fungen.
UNIQUE mit einem Parameter stellt sicher, dass es keine zwei gleichen Elemente in dieser Spalte gibt. Bei zwei Parametern gilt das Gleiche f�r Element-Kombinationen.
ALTER TABLE meineTabelle
MODIFY ( Nr NUMERIC(5) );

�nderung an bestehender Tabellenstruktur.
ALTER TABLE meineTabelle
ADD ( Tel NUMERIC(20), Fax NUMERIC(20) );

Spalten hinzuf�gen.
DROP TABLE meineTabelle INCLUDING CONTENTS;
Tabelle l�schen.
CREATE SEQUENCE Buch$Nr
INCREMENT BY 1 MINVALUE 1;

INSERT INTO Buch ( Nr, Autor_Nr, Titel )
VALUES ( Buch$Nr.NEXTVAL, 10, 'meinBuchTitel' );

Fortlaufende Nummer vergeben (z.B. f�r Prim�rkey).
ALTER SESSION
SET nls_date_format = 'YYYY-MM-DD'
;

Format der Datumsangabe f�r Oracle-Datenbank �ndern.

DCL (SQL Data Control Language)

GRANT SELECT, DELETE, UPDATE, REFERENCES(Nr) ON meineTabelle TO Mueller;
Rechte vergeben.
REVOKE DELETE ON meineTabelle FROM Mueller;
Rechte entziehen.


Einige SQL-Datentypen und -Funktionen in unterschiedlichen Datenbanken


  MySQL 3.23
JDBC 2.0a (mm)
PostgreSQL 7.2
JDBC 2, 7.2
Oracle 8.0
JDBC 8.1.6 (Oracle)
Oracle 8.0
ODBC 1.2 (msorcl32.dll)
MS Access 2000
ODBC 2.0001
INT, INTEGER INT (32 bit signed,
BIGINT 64 bit signed)
INT4 NUMBER (38 Stellen) INTEGER
FLOAT FLOAT (16 St., E+/-38
DOUBLE 24 St., E+/-308)
FLOAT8 (mit variabler
Nachkommastellenzahl)
FLOAT
(38 Stellen signed)
FLOAT (38 Stellen signed)
Nachkommastellenzahl 0,2,4,...
DOUBLE
DECIMAL DECIMAL ohne
Nachkommastellen
NUMERIC mit variabler
Nachkommastellenzahl
NUMBER ohne Nachkommastellen --
NUMERIC DECIMAL ohne
Nachkommastellen
NUMERIC mit variabler
Nachkommastellenzahl
NUMBER ohne Nachkommastellen DOUBLE mit variabler
Nachkommastellenzahl
DECIMAL(p,s)
NUMERIC(p,s)
DECIMAL mit vorgegebener
Nachkommastellenzahl
NUMERIC mit vorgegebener
Nachkommastellenzahl
NUMBER mit variabler
Nachkommastellenzahl
NUMBER mit vorgegebener
Nachkommastellenzahl
--
NUMBER -- -- NUMBER mit variabler
Nachkommastellenzahl
NUMBER
Nachkommastellenzahl 0,2,4,...
DOUBLE mit variabler
Nachkommastellenzahl
NUMBER(p,s) -- -- NUMBER mit variabler
Nachkommastellenzahl
NUMBER mit vorgegebener
Nachkommastellenzahl
--
DATE DATE
(2000-11-28)
DATE
(2002-03-14)
DATE
(2000-11-28 16:59:57.0)
DATE
(2000-11-28 16:59:57)
DATETIME
(2000-11-28 16:59:57)
DATETIME DATETIME
(2000-11-28 16:59:57)
TIMESTAMP
(2002-03-14 11:12:13)
-- DATETIME
(2000-11-28 16:59:57)
CHAR(n) VARCHAR (bis 255 Zeichen) BPCHAR CHAR (bis 255 Zeichen) CHAR (bis 255 Zeichen)
VARCHAR(n) VARCHAR (bis 255 Zeichen) VARCHAR VARCHAR2 (bis 2000 Zeichen) VARCHAR (bis 255 Zeichen)
BLOB, ... BLOB (bis 64 KByte)
LONGBLOB (bis 4 GByte)
als BYTEA oder per
OID (Object Identifier)
BLOB (bis 4 GByte)
LONG RAW (bis 2 GByte)
kein BLOB, aber:
LONGCHAR (bis 64 KByte)
MEMO (bis 64 KByte)
UPPER / UCASE UPPER und UCASE UPPER UPPER UCASE
SYSDATE / NOW SYSDATE und NOW NOW() SYSDATE NOW()



Weiterf�hrende Informationen





Weitere Themen: andere TechDocs | SQL-Beispielkommandos | MySQL | PostgreSQL | JSP | Webanwendungen | SAP BAPI®
© 1998-2007 Torsten Horn, Aachen