CONNECT BYORDER BYUPDATE i
	DELETE ze skorelowanymi podzapytaniamiNULL
	w składowych zapytania z UNION| Funkcja | Opis | 
|---|---|
MIN | Minimum | 
MAX | Maksimum | 
AVG | Średnia arytmetyczna | 
SUM | Suma | 
COUNT | Liczba wierszy/wartości | 
VARIANCE | Wariancja | 
STDDEV | Odchylenie standardowe | 
LOWER(e)
e z wszystkimi literami zmienionymi na małe.
UPPER(e)
e z wszystkimi literami zmienionymi na  wielkie.
INITCAP(e)
e, przy czym litery początkowe wszystkich
	wyrazów zmienia na wielkie, a pozostałe litery na małe. 
CONCAT(e1, e2)
e1 z e2 (równoważne
	operatorowi ||).
SUBSTR(e,m[,n])
n znaków napisu e od pozycji
	m.m jest ujemne, odliczanie rozpoczyna sie od końca
	e.n pominięto, przekazywana są wszystkie znaki do
	końca e (lub początku gdy n jest ujemne).
LENGTH(e)
e.
INSTR(e,m)
m w
e.
LPAD(e,n,s)
e do
n znaków napisem s z lewej strony.
RPAD(e,n,s)
e do
n znaków napisem s z prawej strony.
e LIKE wzorzec
TRUE wtedy i tylko wtedy, gdy e
pasuje do wzorca.  W wzorcu:% oznacza dowolny napis;_ oznacza dowolny znak.
LOWER('SQL Course')		= 'sql course'
UPPER('SQL Course')		= 'SQL COURSE'
INITCAP('SQL Course')		= 'Sql Course'
CONCAT('Good', 'String')	= 'GoodString'
SUBSTR('String',1,3)		= 'Str'
LENGTH('String')		= '6'
INSTR('String', 'r')		= '3'
LPAD(sal,10,'*')		= '******5000'
Do kolumn i tabel można dodać komentarze:
COMMENT ON TABLE emp IS 'wszyscy pracownicy firmy'; COMMENT ON COLUMN emp.empno IS 'identyfikator pracownika';
CONNECT BYSELECT FROM WHERE START WITH CONNECT BY
PRIOR może występować także w klauzuli SELECT
(przykład poniżej).
WHERE działa na już zbudowanej hierarchii (a więc później
niż to sugeruje zapis).  Można w nim użyc pseudokolumny LEVEL.
CONNECT BY 
	(to zapytanie pominie SMITHa i jego podwładnych):
SELECT level, ename, PRIOR ename
  FROM emp
  START WITH ename = 'KING'
  CONNECT BY mgr = PRIOR empno 
    AND ename <> 'SMITH';
 	Natomiast nastepujące zapytanie pominie SMITHa, ale zostawi 
	jego podwładnych:
SELECT level, ename, PRIOR ename FROM emp WHERE ename <> 'SMITH' START WITH ename = 'KING' CONNECT BY mgr = PRIOR empno;
TO_DATE(napis, format) TO_CHAR(wyrażenie_datowe, format)
format) jest opcjonalny.
	Jego wartość domyślna to 'DD-MON-YY'.SYSDATE.format jest napisem, który może zawierać nastepujące 
	elementy:
fm przełącza między występowaniem lub nie dopełniania wyników
     zerami/odstępami.| Formaty daty | Znaczenie | 
|---|---|
SCC lub CC | 
Wiek. Jeśli użyto S, to daty ujemne są
				poprzedzone przez BC. | 
YYYY lub SYYYY | 
Rok. Jeśli użyto S, to daty ujemne są
				poprzedzone przez BC. | 
YYY lub YY lub Y | 
Ostatnie 3, 2, 1 cyfra (y) roku. | 
Y,YYY | 
Rok z przecinkiem we wskazanym miejscu. | 
IYYY, IYY, IY, I | 
4-, 3-, 2-, 1-cyfrowy rok zgodnie ze standardem ISO. | 
SYEAR lub YEAR | 
Rok słownie. Jeśli użyto S, to daty ujemne są
				poprzedzone przez BC. | 
BC lub AD | 
Oznacznik BC/AD | 
B.C. lub A.D. | 
Oznacznik BC/AD z kropkami. | 
Q | 
Kwartał roku. | 
MM | 
Miesiąc dwucyfrowo. | 
MONTH | 
Nazwa miesiąca uzupełniona odstępami do dziewięciu znaków. | 
MON | 
Trzyliterowy skrót nazwy miesiąca. | 
RM | 
Miesiąc cyframi rzymskimi. | 
WW lub W | 
Tydzień roku lub miesiąca. | 
DDD, DD lub D | 
Dzień roku, miesiąca lub tygodnia. | 
DAY | 
Nazwa dnia tygodnia uzupełniona odstępami do dziewięciu znaków. | 
DY | 
Trzyliterowy skrót nazwy dnia tygodnia. | 
J | 
Dzień wg kalendarz juliańskiego; liczba dni do 31-12-4713 p.n.e. | 
RR | 
Dwucyfrowy numer roku, ale z okienkowaniem wieków, tzn. jeśli
 
  | 
| Formaty czasu | Znaczenie | 
AM lub PM | 
Oznacznik AM/PM. | 
A.M. lub P.M. | 
Oznacznik AM/PM. | 
HH, HH12 lub HH24 | 
Godzina dnia: wg lokalnych ustawień, 1-12, lub 0-23. | 
MI | 
Minuta (0-59). | 
SS | 
Sekunda (0-59). | 
SSSSS | 
Liczba sekund północy (0-86399). | 
| Inne formaty | Znaczenie | 
/  .  , | 
Znaki przestankowe są kopiowane do wyniku. | 
" dnia " | 
Napis w cudzysłowie jest kopiowany do wyniku. | 
| Przyrostki | Znaczenie | 
TH | 
Liczebnik cyfrowo (np. DDTH dla 4TH). | 
SP | 
Słownie (np. DDSP dla FOUR). | 
SPTH lub THSP | 
Liczebnik słownie (np. DDSPTH dla FOURTH). | 
| Format | wynik | 
|---|---|
HH24:MI:SS | 15:45:32 | 
DD "of" MONTH | 12 of OCTOBER | 
ddspth | fourteenth | 
fmDD Month YYYY | 
17 November 1981
1 May 1981
9 June 1981
2 April 1981
28 September 1981
20 February 1981 | 
data + liczba
daty podaną liczbę dni. Wynikiem
	jest DATE.
data - liczba
daty podaną liczbę dni. Wynikiem
        jest DATE.
data - data
daty do drugiej
	daty.
data + liczba/24
daty podaną liczbę godzin. Wynikiem
        jest DATE.
MONTHS_BETWEEN(d1, d2)
d1 i d2.
	Wynik może być dodatni albo ujemny. Wynik nie musi być liczbą
	całkowitą.  Ułamek odpowiada kawałkowi miesiąca.
ADD_MONTHS(data, n)
n kalendarzowych miesięcy do daty.
	Liczba n musi być całkowita, ale może być ujemna.
NEXT_DAY(data, 'znak')
dacie, który jest dniem tygodnia
	wskazanym przez 'znak'.  'znak' może być liczbą
	lub pierwszą literą nazwy dnia tygodnia.
LAST_DAY(data)
datę.
ROUND(data[,'fmt'])
daty do jednostki określonej przez
	model formatu 'fmt'. Jeśli nie podano
	'fmt' zaokrąglenie nastepuje do najbliższej pełnej daty.
TRUNC(data[, 'fmt'])
daty do jednostki określonej przez
        model formatu 'fmt'. Jeśli nie podano
        'fmt' obcięcie nastepuje do najbliższej pełnej.
MONTHS_BETWEEN('01-SEP-95','11-JAN-94')	= 19.6774194
ADD_MONTHS ('11-JAN-94',6)		= '11-JUL-94'
NEXT_DAY ('01-SEP-95','FRIDAY')		= '08-SEP-95'
LAST_DAY('01-SEP-95')			= '30-SEP-95'
ROUND('25-JUL-95','MONTH')		= '01-AUG-95'
ROUND('25-JUL-95','YEAR')		= '01-JAN-96'
TRUNC('25-JUL-95','MONTH')		= '01-JUL-95'
TRUNC('25-JUL-95','YEAR')		= '01-JAN-95'
NVL(x, y)
x nie jest NULL, to przekazuje
x.x  jest NULL, to przekazuje y.
DECODE(e, s1, r1 
      			   [, s2, r2,...,]
      			   [, defautl])
e = s1, to przekazuje r1.e = s2, to przekazuje r2.e = s3, to przekazuje r3.default
(jeśli nie podano default, to przekazuje NULL).SELECT job, sal, DECODE(job, 'ANALYST', SAL*1.1, 'CLERK', SAL*1.15, 'MANAGER', SAL*1.20, SAL) REVISED_SALARY FROM emp; JOB SAL REVISED_SALARY --------- --------- -------------- PRESIDENT 5000 5000 MANAGER 2850 3420 MANAGER 2450 2940 ... 14 rows selected.
CREATE USER użytkownik IDENTIFIED BY hasło;
Zmiana hasla:
ALTER USER użytkownik IDENTIFIED BY nowe_hasło;
GRANT przywilej [, przywilej...] TO użytkownik [, użytkownik...];
Takimi przywilejami są:
CREATE SESSION
CREATE TABLE
CREATE SEQUENCE
CREATE VIEW
CREATE PROCEDURE
CREATE (ANY)  PROCEDURE | TRIGGER | TYPEALTER  (ANY)  PROCEDURE | TRIGGER | TYPEDROP   (ANY)  PROCEDURE | TRIGGER | TYPEEXECUTE (ANY) PROCEDURE | TYPEANY, przywilej dotyczy tylko twojego schematu.
Musisz mieć przywilej EXECUTE, aby móc wywołać podprogram w
PL/SQL, jeśli nie jesteś jego właścicielem.  Przywileje obiektowe do
obiektów, z których ten podprogram korzysta muszą być nadane wprost (a nie
przez rolę). Podprogram PL/SQL wykonuje się z prawami właściciela (set uid).
Słowo kluczowe PROCEDURE dotyczy procedur, funkcji
oraz pakietów składowanych.
CREATE ROLE rola;
Przykład:
CREATE ROLE szef; GRANT create table to szef; -- nadanie roli prawa GRANT szef to józio, kazio; -- nadanie użytkownikowi roli
Są pewne role predefiniowane:
PUBLIC
DBA
CREATE USERDROP USERDROP ANY TABLEBACKUP ANY TABLE| Przywilej | Tabela | Perspektywa | Sekwencja | Procedura | 
|---|---|---|---|---|
| ALTER | X | X | ||
| DELETE | X | X | ||
| EXECUTE | X | |||
| INDEX | X | |||
| INSERT | X | X | ||
| REFERENCES | X | |||
| SELECT | X | X | X | |
| UPDATE | X | X | 
GRANT przywilej_obiektowy [(kolumny)]
     ON	obiekt
     TO	{użytkownik|rola|PUBLIC}
     [WITH GRANT OPTION];
REVOKE {przywilej [, przywilej...]|ALL}
     ON	obiekt
     FROM	{uzytkownik[, użytkownik...]|rola|PUBLIC}
     [CASCADE CONSTRAINTS];  -- jest konieczne w celu usunięcia wszystkich
			     -- więzów spójności referencyjnej utworzonych
			     -- na mocy przywileju REFERENCES
TO_CHAR(napis, format) TO_NUMBER(wyrazenie_datowe, format)
format) jest opcjonalny.| Element | Opis | Przykład | Wynik | 
|---|---|---|---|
9 | 
Cyfra (liczba dziewiątek określa szerokość pola) | 999999 | 
1234 | 
0 | 
Wyświetl wiodące zera | 099999 | 
001234 | 
$ | 
Ruchomy znak dolara | $999999 | 
$1234 | 
L | 
Ruchomy znak lokalnej waluty | L999999 | 
zł1234 | 
. | 
Kropka dzisiętna na wskazanej pozycji | 9999.99 | 
1234.00 | 
, | 
Przecinek na wskazanej pozycji | 999,999 | 
1,234 | 
MI | 
Znak minus z prawej strony (przy wartościah ujemnych) | 9999MI | 
1234- | 
PR | 
Liczby ujemne w nawiasach | 9999PR | 
<1234> | 
EEEE | 
Notacja inżynierska (w formacie muszą być cztery E) | 
9.9EEEE | 
1.2E+03 | 
V | 
Pomnóż przez 10 n razy (n to liczba dziewiątek po V) | 
9999V99 | 
123400 | 
ROUND(e, [n])
e do n miejsc po
	przecinku.n, jest to zaokrąglenie do zera miejsc po
	przecinku.n jest ujemne, zaokrągla się cyfry na lewo od
	przecinka dziesiętnego.
TRUNC(e, [n])
e do n miejsc po
        przecinku.n, jest to obcięcie do zera miejsc po
        przecinku.n jest ujemne, obcina się cyfry na lewo od
        przecinka dziesiętnego.
MOD(m, n)
n przez m.
ROUND(45.926, 2) = 45.93 TRUNC(45.926, 2) = 45.92 MOD(1600, 300) = 100 ROUND(45.923, 2) = 45.92 ROUND(45.923, 0) = 46 ROUND(45.923, -1) = 50
ORDER BYRENAME nazwa_stara TO nazwa_nowa;
TRUNCATE nazwa_tabeli;
DELETE FROM nazwa_tabeli;
SAVEPOINT nazwa;
nazwa.
ROLLBACK;
ROLLBACK to nazwa;
SAVEPOINT nazwa.
COMMIT;
W Oracle każde polecenie DDL powoduje automatyczne COMMIT
przed i po swoim wykonaniu,  niezależnie od tego czy się powiedzie.
UPDATE i
	DELETE ze skorelowanymi podzapytaniamiSET jak i
	WHERE.SELECT
	(przykład).SPOOL nazwa_pliku
nazwa_pliku i
	na konsolę.
SPOOL OFF
Można to wykorzystać do automatycznego tworzenia skryptów. Np. wynik tego zapytania kasuje wszystkie tabele:
SELECT 'drop table ' || table_name || ' cascade constraints;' FROM user_tables;
Skrypt kasujący wszystkie tabele: dropall.sql.
Zawiera wiele cech SQL2 a nawet SQL3.
UNION ALL, INTERSECT ALL,
   EXCEPT ALL działają tak jak powinny na multizbiorach.(FULL/LEFT/RIGHT OUTER)/INNER JOIN ON.TABLE(...).
	SELECT ... FROM A, TABLE (SELECT * FROM B WHERE b1 = A.a1) BA ...
CREATE TABLE ... UNDER ...SELECT * FROM A;A i z jej
	podtabel, ale tylko te kolumny, które są w A.SELECT * FROM ONLY(A);A, ale nie wiersze, które są w
	podtabelach A.
SELECT * FROM OUTER(A);A i z jej
        podtabel. Drukuje wszystkie kolumny podtabel. Jeśli dany wiersz nie 
	zawiera odpowiedniej wartości, używa się NULL.
FROM mogą występować aplikacje funkcji wierszowych:
SELECT t.c1, z.c5
     FROM t, TABLE( tf3(t.c2) ) AS z
     WHERE t.c3 = z.c4;
  t jest przed tf3 we FROM, więc 
	t.c2 jest znane.
   
   Na podstawie wartości wiersza z t, 
   funkcja tf3 wylicza wiersz, który jest
   złączany z wierszem z t. 
   Jest to pewna forma złączenia zależnego.
W przypadku grupowania na innym poziomie niz najwyższy 
   "niegrupowane-tym-razem" kolumny sa wypelniane NULLami.
Grupowanie może być po wielu GROUPING SETS.
GROUPING SETS ((a,b), (b,c), (d))
ROLLUP(a,b,c)
GROUPING SETS: (a,b,c), (a,b), (a) i ()
CUBE(a,b)
GROUPING SETS:(a,b), (a), (b) i ().
ROLLUP grupuje po coraz mniejszym zbiorze, 
za każdym razem odrzucając ostatnie kryterium.
CUBE grupuje po każdym pozdbiorze swego argumentu.
NULL w
	składowych zapytania z UNIONJeśli napiszemy:
SELECT deptno, ename FROM emp UNION SELECT NULL, dname FROM dept;
będzie błąd (niezgodność typów danych). Aby to zadziałało trzeba użyć konwersji typów i napisać:
SELECT deptno, ename FROM emp UNION SELECT TO_NUMBER(NULL), dname FROM dept;
Składnia:
CREATE [ FORCE | NOFORCE ] VIEW nazwa AS SELECT ... [ WITH CHECK OPTION [ CONSTRAINT nazwa_wiezu ] ] [ WITH READ ONLY ];
NOFORCE
FORCE
WITH CHECK OPTION
WHERE pespektywy.  Jeśli
	falsyfikują operacja DML jest odrzucana.
	To są więzy spójności jak każde inne i można mu nadać im nazwę poprzez
	CONSTRAINT.
WITH READ ONLY