CONNECT BY
ORDER BY
UPDATE i
DELETE ze skorelowanymi podzapytaniami
NULL
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 BYPRIOR 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 ustawien, 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łowiu jest kopiowany do wyniku. |
| Przyrostki | Znaczenie |
TH
| Liczebnik cyfrowo (np. DDTH dla 4TH).
|
SP
| Słownie (np. DDSP dla FOUR).
|
SPTH lub THSP
| Liczebik 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 roliSą pewne role predefiniowane:
PUBLIC
DBA
CREATE USER
DROP USER
DROP ANY TABLE
BACKUP 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
| Bazy danych (powrót) | Krzysztof Stencel |