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