Auswahl  

Übersicht der wichtigsten SQL-Befehle 

Oracle
SQL
RDBMS 10.x
05.09.19 (MD)
05.09.19 (MP)
sql, sql-befehle

Body

Der SELECT Befehl

INFO ERKLÄRUNG BEISPIEL
SELECT * FROM tabellen_name wählt alle Spalten der Tabelle aus SELECT *
FROM emp;
ausdruck as "..." Spalten-Aliasnamen verwenden SELECT ename as "Name"
FROM emp;
... || ... Verkettungsoperator SELECT ename||job
FROM emp;
... ||'...'||... Zeichenkette verwenden SELECT 'Hallo '||user||' wie geht`s?'
FROM dual;
DISTINCT spalte schließt doppelte Zeilen aus SELECT DISTINCT job FROM emp;
ORDER BY spalte [desc/asc] sortiert in bestimmter Reihenfolge SELECT ename, sal
FROM emp
ORDER BY sal desc;
ORDER BY alias_spalte sortiert nach Aliasnamen SELECT ename, job beruf, sal
FROM emp
ORDER BY beruf, ename;

Die WHERE Bedingung

INFO ERKLÄRUNG BEISPIEL
WHERE bedingung WHERE bedingung(en) SELECT * FROM emp
WHERE ename = 'SMITH';
WHERE ... >, >, = <,<>, = Vergleichsoperatoren SELECT ename FROM emp
WHERE deptno <> 10;
WHERE ... BETWEEN ... AND zeigt Zeilen auf einem Wertebereich basierend an SELECT * FROM emp
WHERE sal BETWEEN 1000 AND 2000;
WHERE ... IN(...,...,...) teste auf Werte in einer Liste SELECT * FROM emp
WHERE mgr IN (7902, 7782, 7839);
WHERE ... LIKE '%... %' sucht nach gültigen Zeichenfolgen SELECT * FROM emp
WHERE ename LIKE 'A%';
WHERE... IS [NOT] NULL testet auf (nicht) Null-Werte SELECT * FROM emp
WHERE comm IS NOT NULL;
WHERE... AND ... setzt voraus das beide Bedingungen wahr sind SELECT * FROM emp
WHERE sal = 1300 AND deptno = 10;
WHERE... OR... setzt voraus das mind. eine der Bedingungen war ist SELECT * FROM emp
WHERE sal>2000 OR job LIKE 'SAL%';
WHERE... NOT... setzt voraus das eine Bedingung nicht erfüllt ist SELECT * FROM emp
WHERE ename NOT BETWEEN 'CLARK' AND 'SCOTT';
WHERE(... OR...) AND... Klammern verwenden um Priorität durchzusetzen SELECT *
FROM emp
WHERE (deptno = 10 OR depnto = 20)
AND sal>2500;

Die CASE Bedingung

INFO BESCHREIBUNG BEISPIEL
CASE... WHEN... THEN... Das Pendant zum If-Then-Else Statement in PL/SQL SELECT emp,
CASE
WHEN sal>3000 THEN 'Das Gehalt ist größer als 3000'
WHEN sal<2500 THEN 'Das Gehalt ist kleiner als 2500'
ELSE 'ERROR'
END;
FROM emp;
CASE [exp] WHEN... THEN... Man kann Spalte auch schon beim Wort CASE mit angeben SELECT emp,
CASE owner
WHEN 'SYS' THEN 'Der Owner ist SYS'
WHEN 'SYSTEM' THEN 'Der Owner ist SYSTEM'
END;
FROM all_tables;

Arithmetische Funktionen

INFO BESCHREIBUNG BEISPIEL
CEIL (x) rundet auf nächsthöhere ganze Zahl auf SELECT ceil(-9.7) FROM dual;
MOD (m, n) gibt Rest der Division m:n als (ganze) Zahl wieder SELECT mod(5,2) FROM dual;
POWER (x, y) ermittelt den Wert der Potent x^y SELECT power(2,3) FROM dual;
ROUND (x[,n]) rundet auf n Dezimalstellen auf oder ab SELECT round(2.456,2) FROM dual;
SQRT (x) zieht die Wurzel von X SELECT sqrt(256) FROM dual;
TRUNC (x[,n]) schneidet Wert nach n Dezimalstellen ohne
Runden ab
SELECT trunc(94.89, 1) FROM dual;

Datumsfunktionen

INFO BESCHREIBUNG BEISPIEL
ADD_MONTHS('DD.MM.YYYY',n) fügt n Monate hinzu SELECT add_months(sysdate, 3) FROM dual;
LAST_DAY('DD.MM.YYYY') gibt den letzten Tag des Monats zurück SELECT last_day('07.05.19') FROM dual;
NEXT_DAY('DD.MM.YYYY', day) gibt den darauffolgenden Tag an SELECT next_day(sysdate,'MONDAY') FROM dual;
MONTHS_BETWEEN('...','...') berechnet Anzahl der Monate zwischen zwei Daten SELECT months_between(sysdate, '01.01.19') FROM dual;
ROUND(date[,fmt]) rundet Datum auf fmt-Einheit auf oder ab SELECT round(to_date('16.05.19'), 'MM') FROM dual;
TRUNC(date[,fmt]) schneidet Datum auf fmt-Einheit ab SELECT trunc(sysdate, 'YY') FROM dual;

Konvertierungsfunktionen

INFO BESCHREIBUNG BEISPIEL
TO_CHAR(date,'fmt') Datumskonvertierung (Datum -> Zeichenkette) SELECT to_char(sysdate, 'DAY DD-MM-YYYY') FROM dual;
TO_CHAR(number, 'fmt') zeigt eine Zahl als Zeichen an (Zahl -> Zeichenkette) SELECT to_char(sal, 'L99,999.99') FROM emp;
TO_NUMBER(char[,'fmt']) konvertiert Zeichenkette in Zahl SELECT to_number(sal) FROM emp;
TO_DATE('...', 'fmt') konvertiert Zeichenkette mit Datum in Datumswert SELECT ename, hiredate FROM emp
WHERE hiredate = to_date('Februar 22,
1981', 'Month DD. YYYY');)
NVL(spalte, ausdruck) konvertiert NULL-Werte in aktuellen Wert SELECT ename, sal*12+nvl(comm, 0) FROM emp;
DECODE (col, search1, result1[, search2, result2, ...][,default]) ermöglicht bedingte Abfragen (If-Then-Else) SELECT ename, deptno, sal
decode(depnto, 10, sal*1.05,20,sal*1.15,sal)
erhöhung
FROM emp;

Stringfunktionen

INFO BESCHREIBUNG BEISPIEL
GREATEST/LEAST(Ausdruck) ermittelt den größten/kleinsten Wert aus einer Wertemenge SELECT least(-1,3,456) FROM dual;
LENGTH('...') gibt Länge einer Zeichenkette als Zahl wieder SELECT ename, length(ename) FROM emp;
INSTR('...','a'[,x,y]) gibt Position eines bestimmten Zeichens als Zahl an SELECT instr('Suchmaschine', 'h', 1)
FROM dual;
=>4
SELECT instr('Suchmaschine', 'h', 1, 2)
FROM dual;
=>9
SELECT instr('Suchmaschine', 'h', 5)
FROM dual;
=>9
SUBSTR('...',x[,y]) extrahiert Zeichenkette der angegebenen Länge SELECT substr('Marco', 1, 3) FROM dual;
=>Mar
SELECT substr('Marco', 4) FROM dual;
=>co
SELECT substr('Marco',-1) FROM dual;
=>o
LTRIM/RTRIM(Ausdruck[,'SET']) entfernt Zeichen eines Strings von Links nach Rechts SELECT ename, RTRIM(ename, 'ER') FROM emp;
TRIM(leading|trailing|both 'X' FROM Ausdruck) entfernt Zeichen eines Strings am Anfang oder Ende oder beides SELECT TRIM(leading ' ' FROM ' Hallo '
FROM dual;
LPAD/RDAP(spalte) füllt Zeichenwert mit Leerzeichen zum rechts-/ linksbündigen Blocksatz auf SELECT ename, LDAP(sal, 10, '*') gehalt
FROM emp;
LOWER(spalte/ausdruck) wandelt in Kleinbuchstaben um SELECT lower(ename) FROM emp;
UPPER(spalte/ausdruck) wandelt in Großbuchstaben um SELECT upper(ename) FROM emp;
INITCAP(spalte/ausdruck) wandelt jeweils den ersten Buchstaben eines Wortes um SELECT initcap(ename) FROM emp;
REPLACE(spalte,'x','y') Ersetzt Zeichen 'x' durch 'y' innerhalb eines Strings SELECT ename, replace(ename, 'R', '#' FROM emp;
TRANSLATE(spalte, 'str1', 'str2') ersetzt String innerhalb eines Strings durch einen neuen String SELECT ename, translate(ename, 'ABCDEF', 'GHJKL') FROM emp;

Tabellenverknüpfung durch Joins

INFO BESCHREIBUNG BEISPIEL
Equijoin identische Werte in 2 Spalten verschiedener Tabellen SELECT ename, e.deptno, dname, loc
FROM emp e JOIN dept d;
  alte Syntax SELECT ename, e.deptno, dname, loc
FROM emp e, dept d, WHERE e.deptno = d.deptno;
  USING-Klausel SELECT ename, deptno, dname, loc
FROM emp JOIN dept USING(deptno);
  Natural Join, Verknüpfung erfolgt durch gleiche Spalten
SELECT empno, deptno, dname, loc
FROM emp natural JOIN dept;
Self Join verknüpft eine Tabelle mit sich selbst SELECT t1.ename "Hiwi", t2.ename "Chef"
FROM emp t1, emp 2 WHERE t1.mgr = t2.empno;
  alte Syntax SELECT t1.ename "Hiwi", t2.ename "Chef"
FROM emp t1 JOIN emp t2
ON (t1.mgr = t2.empno);
Non-Equijoin keine Spalte einer Tabelle entspricht direkt einer Spalte einer anderen Tabelle SELECT ename, job, sal grade
FROM emp e, salgrade s
WHERE sal BETWEEN s.local and s.hisal;
Outer Join zeigt auch Zeilen an die nicht der Join Bedingung entsprechen  
  {LEFT|RIGHT|FULL} Outer Join SELECT empno, ename, dname, d.deptno
FROM emp e RIGHT OUTER JOIN dept d
ON (e.deptno = d.deptno);
  alte Syntax SELECT empno, ename, dname, d.deptno
FROM emp e, dept d
WHERE e.deptno(+) = d.deptno;
Cross Join entspricht dem Kreuzprodukt SELECT empno, ename, sal, dname
FROM emp CROSS JOIN dept;

SET-Operatoren

INFO BESCHREIBUNG BEISPIEL
UNION gibt alle Zeilen aus Mehrfachabfragen zurück (doppelte werden ausgeblendet) SELECT empno, ename, dname, loc, d.deptno
FROM emp e, dept d
WHERE e.deptno = d.deptno(+)
UNION
SELECT empno, ename, dname, loc, d.deptno
FROM emp e, dept d
WHERE e.deptno(+) = d.deptno;
UNION ALL gibt alle, auch doppelte Zeilen aus Mehrfachabfragen zurück  
INTERSECT gibt ausschließlich gemeinsame Zeilen aus beiden Anfragen zurück  
MINUS gibt nur die Zeilen zurück, die von der ersten, nicht aber von der Zweiten Abfrage zurück gegeben werden(Abfrage 1 minus Abfrage 2)  

Gruppenfunktionen

INFO BESCHREIBUNG BEISPIEL
COUNT(*/Ausdruck/Spalte) zählt alle ausgewählten Zeilen SELECT count(*) FROM emp WHERE deptno = 30;
MIN/MAX(spalte/ausdruck) ermittelt minimalen / maximalen Wert eines Ausdrucks SELECT min(sal), max(sal) FROM emp;
AVG/SUM(spalte/ausdruck) Durchschnitts/Summenwert einer Spalte SELECT sum(sal), avg(sal) FROM emp;
grpfkt(NVL(spalte, n)) auch NULL-Werte gehen in die Berechnungen mit ein SELECT avg(nvl(comm, 0)) FROM emp;
GROUP BY spalte[, spalte] unterteilt Zeilen einer Tabelle in Gruppen SELECT job, avg(sal)
FROM emp GROUP BY job;
HAVING group_cond legt fest welche Gruppen angezeigt werden sollen SELECT deptno, job, count(*), avg(sal)
FROM emp GROUP B> deptno, job
HAVING count(*) = 1 AND avg(sal>2000);

Unterabfragen

INFO BESCHREIBUNG BEISPIEL
Single-Row UA gibt eine Zeile aus der inneren SELECT Anweisung zurück(=,><,<>) SELECT * FROM emp WHERE sal >
(SELECT avg(sal) FROM emp);
SELECT ename, sal FROM emp
WHERE deptno = (SELECT deptno FROM dept WHERE loc = 'DALLAS')
AND sal > (SELECT sal FROM emp
WHERE ename = 'TURNER');
Multiple-Row Unterabfrage gibt mehrere Zeilen Zurück in, ANY, ALL  
IN Unterabfrage entspricht einem Listenelement SELECT ename, sal deptno FROM emp
WHERE sal IN (SELECT max(sal)
FROM emp GROUP BY deptno);
ANY Unterabfrage Wert wird mit jedem einzelnen Unterabfragewert verglichen SELECT ename, job, sal FROM emp
WHERE sal < ANY (SELECT sal FROM emp
WHERE job = 'SALESMAN');
ALL Unterabfrage Wert wird mit allen Unterabfragewert verglichen

Besuchen Sie uns doch bei einer unsere über 40 Oracle Schulungen in München - Unterhaching.