kurs oracle podstawy sql 4FTEY3ZEMDW5YMC7JVMVHLV3IJIVX2DSWAXXO3Y


Podstawy języka SQL
Materiały szkoleniowe
Podstawy języka SQL
Prowadzący
Anna Pijanowska - Kuśnierz
Paweł śołnierczyk
Strona 2
Podstawy języka SQL Podstawy języka SQL
Ćwiczenia __________________________________________________________________53
Podzapytania ___________________________________________________________ 56
Podzapytania zagnie\d\one____________________________________________________57
Spis treści
Podzapytania zwracające jeden wiersz __________________________________________57
Podzapytania zwracające wiele wierszy__________________________________________58
Zawartość tabel wykorzystywanych na kursie___________________________________5
Ćwiczenia __________________________________________________________________63
Zawartość tabeli DEPT _______________________________________________________ 6
Język definiowania danych ________________________________________________ 64
Zawartość tabeli EMP ________________________________________________________ 6
Struktury danych ORACLE___________________________________________________65
Zawartość tabeli SALGRADE__________________________________________________ 6
Tworzenie tabel _____________________________________________________________65
Budowa tabel wykorzystywanych na kursie_______________________________________ 7
Warunki integralności________________________________________________________66
Relacyjny model danych____________________________________________________9
Tworzenie tabeli przez zapytanie _______________________________________________72
Operatory relacyjne _________________________________________________________ 10
Zmiana definicji tabeli________________________________________________________73
Własności relacyjnej bazy danych______________________________________________ 10
Język manipulowania danymi ______________________________________________ 77
Przegląd języka SQL______________________________________________________13
Wstawianie wierszy __________________________________________________________78
Zasady SQL ________________________________________________________________ 14
Modyfikacja wierszy _________________________________________________________79
Ćwiczenia__________________________________________________________________ 28
Usuwanie wierszy____________________________________________________________79
Funkcje grupowe ________________________________________________________31
Transakcje _________________________________________________________________80
Stosowanie funkcji grupowych ________________________________________________ 32
Perspektywy ____________________________________________________________ 83
Klauzula GROUP BY ________________________________________________________ 33
Perspektywy ________________________________________________________________84
Wybierane wyra\enia a funkcje grupowe________________________________________ 34
Tworzenie perspektyw________________________________________________________84
Klauzula HAVING __________________________________________________________ 35
Usuwanie perspektywy _______________________________________________________85
Kolejność występowania klauzul _______________________________________________ 37
U\ytkownicy i uprawnienia ________________________________________________ 87
Ćwiczenia__________________________________________________________________ 38
Zarządzanie u\ytkownikami___________________________________________________88
Wybieranie danych z wielu tabel ____________________________________________40
Uprawnienia w bazie Oracle___________________________________________________89
Złączenie równościowe _______________________________________________________ 41
Role _______________________________________________________________________93
Złączenia nierównościowe ____________________________________________________ 42
Ćwiczenia__________________________________________________________________ 44
Inne metody łączenia tabel_________________________________________________48
Złączenia zewnętrzne ________________________________________________________ 49
Połączenie tabeli samej ze sobą ________________________________________________ 49
Operatory zbiorowe _________________________________________________________ 50
Strona 3 Strona 4
Podstawy języka SQL Podstawy języka SQL
Zawartość tabeli DEPT
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
Zawartość tabeli EMP
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
--------- ---------- --------- --------- -------- --------- --------- ---------
7839 KING PRESIDENT 81/11/17 5000 10
7698 BLAKE MANAGER 7839 81/05/01 2850 30
7782 CLARK MANAGER 7839 81/06/09 2450 10
7566 JONES MANAGER 7839 81/04/02 2975 20
7654 MARTIN SALESMAN 7698 81/09/28 1250 1400 30
Zawartość tabel wykorzystywanych na kursie
7499 ALLEN SALESMAN 7698 81/02/20 1600 300 30
7844 TURNER SALESMAN 7698 81/09/08 1500 0 30
7900 JAMES CLERK 7698 81/12/03 950 30
7521 WARD SALESMAN 7698 81/02/22 1250 500 30
7902 FORD ANALYST 7566 81/12/03 3000 20
7369 SMITH CLERK 7902 80/12/17 800 20
7788 SCOTT ANALYST 7566 82/12/09 3000 20
7876 ADAMS CLERK 7788 83/01/12 1100 20
7934 MILLER CLERK 7782 82/01/23 1300 10
Zawartość tabeli SALGRADE
GRADE LOSAL HISAL
--------- --------- ---------
1 700 1200
2 1201 1400
3 1401 2000
4 2001 3000
5 3001 9999
Strona 5 Strona 6
Podstawy języka SQL Podstawy języka SQL
Tabela SALGRADE  tabela  widełek zaszeregowania
Budowa tabel wykorzystywanych na kursie
Kolumna Opis
Podczas kursu będziemy korzystać z uprzednio utworzonych tabel opisujących
GRADE Numer grupy zaszeregowania
zatrudnionych w pewnej firmie, ich wynagrodzenia i miejsca pracy. Firma dzieli się na
departamenty. Ka\dy pracownik nale\y do pewnej grupy zaszeregowania, w zale\ności od
LOSAL LOW SALARY  dolna granica widełek płacowych dla stawki
wysokości pensji, którą otrzymuje.
zaszeregowania GRADE
HISAL HIGH SALARY  górna granica widełek
Tabela DEPT  tabela zawierająca wszystkie departamenty
Kolumna Opis
DEPTNO Departament number  unikalny numer departamentu
DNAME Nazwa departamentu  przechowywana w zapisie du\ymi literami
LOC Lokalizacja departamentu (miasto w którym znajduje się departament)
Tabela EMP  wykaz wszystkich pracowników
Kolumna Opis
EMPNO Employee number  unikalny numer pracownika
ENAME Nazwisko pracownika  przechowywane w zapisie du\ymi literami
JOB Etat, stanowisko pracy
MGR Identyfikator szefa (czyli EMPNO we wierszu szefa)
HIREDATE Data zatrudnienia
SAL Pensja
COMM Prowizja naliczona od początku roku, dotyczy pracowników
zatrudnionych na stanowisku SALESMAN
DEPTNO Numer departamentu w którym zatrudniony jest pracownik. Wartość
w tym polu musi odpowiadać jednemu i tylko jednemu wierszowi
w tabeli DEPT
Strona 7 Strona 8
Podstawy języka SQL Podstawy języka SQL
Relacyjna baza danych jest to zbiór dwuwymiarowych tabel. Z modelem relacyjnym
powiązane są następujące pojęcia:
" tabela,
" kolumna,
" wiersz,
" pole.
Model relacyjny opiera się na pojęciach zaczerpniętych z algebry. Pojęcia te to:
" relacja,
" operator działający na relacjach i dający w wyniku relacje.
Relacje przedstawiane są w postaci tabel, zaś wybieranie danych z tabel to wynik działania
operatorów relacyjnych na tych tabelach.
Operatory relacyjne
Relacyjny model danych
Wyró\niamy następujące operatory relacyjne:
SELEKCJA pobieranie danych z relacji, w wyniku otrzymujemy
wszystkie wiersze, które spełniają zadany warunek
PROJEKCJA operacja pobrania wszystkich wierszy, ale tylko wskazanych
kolumn z tych wierszy
ILOCZYN KARTEZJACSKI wynik połączenia ka\dy z ka\dym wierszy z dwóch relacji
ZACZENIE połączenie dwóch relacji poprzez pewne kryterium łączace
niektóre wiersze z obu relacji
SUMA ZBIOROWA wszystkie wiersze z obu relacji
CZŚĆ WSPÓLNA wiersze wspólne dla obu relacji
RÓśNICA ZBIOROWA wiersze, które występują w jednej, a nie występują w drugiej
relacji
Własności relacyjnej bazy danych
Relacyjna baza danych ma następujące własności:
" baza jest widziana przez u\ytkownika jako zbiór tabel,
" nazwy tabel w bazie muszą być unikalne,
" tabele składają się wierszy i kolumn,
" językiem słu\ącym do operowania na bazie danych jest język nieproceduralny oparty
na algebrze relacji. Obecnie standardem jest SQL.
Strona 9 Strona 10
Podstawy języka SQL Podstawy języka SQL
Tabele w relacyjnej bazie danych mają następujące własności:
" wiersze w tabeli muszą być ró\ne,
" w tabeli nie ma kolumn o tej samej nazwie,
" kolejność wierszy jest nieokreślona,
" kolejność kolumn jest nieokreślona,
" wartości pól powinny być elementarne.
Strona 11 Strona 12
Podstawy języka SQL Podstawy języka SQL
SQL jest oparty na wyra\eniach języka angielskiego. Jest językiem deklaratywnym 
podajemy tylko, co nale\y wykonać, ale nie specyfikujemy w jaki sposób.
Język SQL słu\y do następujących celów:
" specyfikowania zapytań,
" operowania danymi  DML (Data Modification Language)  wstawiania,
modyfikowania i usuwania danych z bazy danych,
" definiowania danych  DDL (Data Definition Language)  dodawania do bazy
nowych obiektów,
" sterowania danymi  DCL (Data Control Language)  określania praw dostępu do
danych.
Zasady SQL
Przegląd języka SQL
Zapisywanie poleceń SQL
" Polecenia SQL mogą być rozmieszczone w kilku liniach. Koniec polecenia SQL
zaznacza się średnikiem.
" Zaleca się umieszczanie klauzul od nowej linii.
" Mo\na u\ywać tabulacji.
" Nie wolno dzielić słowa pomiędzy linie.
" Obojętne, czy u\ywamy małych czy wielkich liter, chyba \e sprawdzamy zawartość
pola.
Podstawowy blok zapytań SQL
Za pomocą polecenia SELECT uzyskujemy informacje z bazy.
Polecenie SELECT składa się co najmniej z klauzuli SELECT i klauzuli FROM.
W klauzuli SELECT wymieniamy interesujące nas kolumny.
W klauzuli FROM wskazujemy, skąd pobrać dane.
Aby pobrać nazwiska pracowników oraz ich zawód, napiszemy:
SELECT ENAME, JOB
FROM EMP;
ENAME JOB
---------- ---------
KING PRESIDENT
BLAKE MANAGER
CLARK MANAGER
JONES MANAGER
MARTIN SALESMAN
ALLEN SALESMAN
Strona 13 Strona 14
Podstawy języka SQL Podstawy języka SQL
TURNER SALESMAN CLARK 29400
JAMES CLERK JONES 35700
WARD SALESMAN MARTIN 15000
FORD ANALYST ALLEN 19200
SMITH CLERK TURNER 18000
SCOTT ANALYST JAMES 11400
ADAMS CLERK WARD 15000
MILLER CLERK FORD 36000
SMITH 9600
SCOTT 36000
Nazwy kolumn oddzielamy przecinkami.
ADAMS 13200
Aby wybrać wszystko z danej tabeli wpisujemy * (gwiazdkę) zamiast listy kolumn. MILLER 15600
SELECT * W wyra\eniach zachowywany jest następujący priorytet działań:
FROM EMP;
" mno\enie,
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
" dzielenie,
---- ---------- --------- ---------- --------- ---------- ---------- ----------
" dodawanie,
7839 KING PRESIDENT 81/11/17 5000 10
7698 BLAKE MANAGER 7839 81/05/01 2850 30 " odejmowanie.
7782 CLARK MANAGER 7839 81/06/09 2450 10
7566 JONES MANAGER 7839 81/04/02 2975 20
Np. w wyra\eniu arytmetycznym 250 +12*34 najpierw zostanie obliczona wartość
7654 MARTIN SALESMAN 7698 81/09/28 1250 1400 30
wyra\enia 12*24, a do wyniku zostanie dodana wartość 250. Kolejność wykonywania
7499 ALLEN SALESMAN 7698 81/02/20 1600 300 30
7844 TURNER SALESMAN 7698 81/09/08 1500 0 30
działań mo\na zmienić przy pomocy nawiasów. Na przykład w wyra\eniu arytmetycznym
7900 JAMES CLERK 7698 81/12/03 950 30
(250 +12)*34 najpierw zostanie obliczona wartość wyra\enia 250+12, a wynik zostanie
7521 WARD SALESMAN 7698 81/02/22 1250 500 30
7902 FORD ANALYST 7566 81/12/03 3000 20 pomno\ony przez 34.
7369 SMITH CLERK 7902 80/12/17 800 20
7788 SCOTT ANALYST 7566 82/12/09 3000 20
7876 ADAMS CLERK 7788 83/01/12 1100 20
7934 MILLER CLERK 7782 82/01/23 1300 10
Aliasy kolumn
W klauzuli SELECT mogę te\ być u\yte:
Domyślne nagłówki kolumn mo\emy zastąpić innymi nazwami, które będą bardziej
" wyra\enia arytmetyczne,
znaczące.
" aliasy (nazwy zastępcze) kolumn,
Mo\na u\ywać polskich liter. Alias podaje się bezpośrednio po nazwie kolumny, której
" konkatenacja,
nazwę chcemy zmienić. Spacje w aliasie nie są dopuszczane, mo\na natomiast utworzyć
" literały.
alias ze spacją biorąc całość w podwójne apostrofy.
Przykład
Wyra\enia arytmetyczne
SELECT ENAME NAZWISKO, SAL*12 WYNAGR, COMM PROWIZJA
FROM EMP;
W wyra\eniu arytmetycznym mogą występować nazwy kolumn, stałe wartości liczbowe
oraz operatory arytmetyczne:
NAZWISKO WYNAGR PROWIZJA
---------- ---------- ----------
+ dodawanie
KING 60000
- odejmowanie
BLAKE 34200
* mno\enie CLARK 29400
JONES 35700
/ dzielenie
MARTIN 15000 1400
ALLEN 19200 300
Przykład
TURNER 18000 0
JAMES 11400
WARD 15000 500
SELECT ENAME, SAL*12
FORD 36000
FROM EMP;
SMITH 9600
SCOTT 36000
ENAME SAL*12
ADAMS 13200
---------- ----------
MILLER 15600
KING 60000
BLAKE 34200
Strona 15 Strona 16
Podstawy języka SQL Podstawy języka SQL
Operator konkatenacji Obsługa wartości NULL
Operator konkatenacji (||) pozwala na łączenie kolumny z kolumną, literałem, wyra\eniem Jeśli wartość wiersza w kolumnie jest nieokreślona, to mówimy, \e na ona wartość NULL.
arytmetycznym lub wartością stałą. Argumenty są łączone i tworzą jedna kolumnę Nie jest to to\same z wartością 0.
wynikową.
Wartość wyra\enia w którym będzie występować wartość NULL równie\ będzie NULL.
Aby połączyć kolumny EMPNO i ENAME i opatrzyć je tytułem PRACOWNIK, Dlatego te\ wyra\enie SAL*12+COMM zwróci NULL tam, gdzie COMM było równe
napiszemy: NULL.
SELECT EMPNO||ENAME PRACOWNIK SELECT ENAME, SAL*12+COMM
FROM EMP; FROM EMP;
PRACOWNIK ENAME SAL*12+COM
-------------------------------------------------- ---------- ----------
7839KING KING
7698BLAKE BLAKE
7782CLARK CLARK
7566JONES JONES
7654MARTIN MARTIN 16400
7499ALLEN ALLEN 19500
7844TURNER TURNER 18000
7900JAMES JAMES
7521WARD WARD 15500
7902FORD FORD
7369SMITH SMITH
7788SCOTT SCOTT
7876ADAMS ADAMS
7934MILLER MILLER
Aby w wyra\eniu potraktować wartość NULL jako wartość ró\ną od NULL, trzeba u\yć
funkcji NVL.
Literały
SELECT ENAME, SAL*12+NVL(COMM,0) ROCZNE_WYN
Oprócz kolumn na liście SELECT mogą znajdować się literały (ciągi znaków lub liczby).
FROM EMP;
Wtedy dla ka\dego wiersza zostanie wypisana ta sama wartość literału:
ENAME ROCZNE_WYN
---------- ----------
SELECT ENAME PRACOWNIK, ' PRACUJE W DEPARTAMENCIE', DEPTNO DEPARTAMENT
KING 60000
FROM EMP;
BLAKE 34200
CLARK 29400
PRACOWNIK 'PRACUJE W DEPARTAMENCIE' DEPARTAMENT
JONES 35700
----------- ------------------------- -----------
MARTIN 16400
KING 'PRACUJE W DEPARTAMENCIE' 10
ALLEN 19500
BLAKE 'PRACUJE W DEPARTAMENCIE' 30
TURNER 18000
CLARK 'PRACUJE W DEPARTAMENCIE' 10
JAMES 11400
JONES 'PRACUJE W DEPARTAMENCIE' 20
WARD 15500
MARTIN 'PRACUJE W DEPARTAMENCIE' 30
FORD 36000
ALLEN 'PRACUJE W DEPARTAMENCIE' 30
SMITH 9600
TURNER 'PRACUJE W DEPARTAMENCIE' 30
SCOTT 36000
JAMES 'PRACUJE W DEPARTAMENCIE' 30
ADAMS 13200
WARD 'PRACUJE W DEPARTAMENCIE' 30
MILLER 15600
FORD 'PRACUJE W DEPARTAMENCIE' 20
SMITH 'PRACUJE W DEPARTAMENCIE' 20
SCOTT 'PRACUJE W DEPARTAMENCIE' 20
W powy\szym przykładzie wartości ró\ne od NULL zachowują swoją wartość, zaś
ADAMS 'PRACUJE W DEPARTAMENCIE' 20
wartości NULL zostaną potraktowane jak 0.
MILLER 'PRACUJE W DEPARTAMENCIE' 10
Drugi parametr funkcji NVL określa, na jaką wartość nale\y zamienić wartość NULL:
NVL(DATA,'85/09/01')
NVL(NUMBER, 10)
NVL(MIASTO,'KRAKÓW')
Strona 17 Strona 18
Podstawy języka SQL Podstawy języka SQL
MANAGER 20
Eliminacja duplikatów
MANAGER 30
PRESIDENT 10
SALESMAN 30
Domyślnie wyświetlane są wyniki zapytania bez eliminowania powtarzających się
wartości, np.:
Klauzula ORDER BY
SELECT DEPTNO
FROM EMP;
Aby określić kolejność, w jakiej będą zwracane wyniki, nale\y u\yć klauzuli ORDER BY
DEPTNO
---------- (uporządkuj wg). Klauzula ORDER BY musi być ostatnią klauzulą polecenia SELECT.
10
30
SELECT ENAME, JOB
10
FROM EMP
20
ORDER BY ENAME;
30
30
ENAME JOB
30
---------- ---------
30
ADAMS CLERK
30
ALLEN SALESMAN
20
BLAKE MANAGER
20
CLARK MANAGER
20
FORD ANALYST
20
JAMES CLERK
10
JONES MANAGER
KING PRESIDENT
MARTIN SALESMAN
MILLER CLERK
Słowo kluczowe DISTINCT
SCOTT ANALYST
SMITH CLERK
TURNER SALESMAN
Eliminację powtarzających się wartości uzyskujemy stosując słowo kluczowe DISTINCT
WARD SALESMAN
w klauzuli SELECT.
Domyślnie dane są sortowane w porządku rosnącym (ASCENDING
ASCENDING)  od najmniejszych
ASCENDING
ASCENDING
SELECT DISTINCT DEPTNO
do największych liczb, od wcześniejszych do pózniejszych dat, zaś ciągi znakowe są
FROM EMP;
sortowane wg ustawień NLS (określanych przy tworzeniu bazy danych).
DEPTNO
Aby odwrócić kolejność sortowania nale\y u\yć słowa DESC (DESCENDING u\ytego
DESC DESCENDING
DESC DESCENDING)
DESC DESCENDING
----------
bezpośrednio po nazwie kolumny wyspecyfikowanej w klauzuli ORDER BY.
10
20
30 SELECT ENAME, JOB, HIREDATE
FROM EMP
ORDER BY HIREDATE DESC;
Mo\na te\ za\ądać wyspecyfikowania wzajemnie ró\nych list wartości poprzez podanie
w klauzuli SELECT wielu nazw kolumn.
ENAME JOB HIREDATE
---------- --------- ---------
ADAMS CLERK 83/01/12
SCOTT ANALYST 82/12/09
Słowo kluczowe DISTINCT odnosi się do wszystkich nazw kolumn MILLER CLERK 82/01/23
DISTINCT
DISTINCT
DISTINCT
JAMES CLERK 81/12/03
występujących w klauzuli SELECT.
FORD ANALYST 81/12/03
KING PRESIDENT 81/11/17
MARTIN SALESMAN 81/09/28
SELECT DISTINCT JOB, DEPTNO
TURNER SALESMAN 81/09/08
FROM EMP;
CLARK MANAGER 81/06/09
BLAKE MANAGER 81/05/01
JOB DEPTNO
JONES MANAGER 81/04/02
--------- ----------
WARD SALESMAN 81/02/22
ANALYST 20
ALLEN SALESMAN 81/02/20
CLERK 10
SMITH CLERK 80/12/17
CLERK 20
CLERK 30
MANAGER 10
Strona 19 Strona 20
Podstawy języka SQL Podstawy języka SQL
Mo\na sortować według kilku kolumn, wtedy po słowie kluczowym ORDER BY nale\y Aby wybrać nazwiska, zawód i numer departamentu dla wszystkich zatrudnionych na
ORDER BY
ORDER BY
ORDER BY
podać nazwy kolumn, po których chcemy sortować. stanowisku CLERK, napiszemy:
SELECT ENAME, JOB, DEPTNO
SELECT ENAME, JOB, DEPTNO
FROM EMP
FROM EMP
ORDER BY DEPTNO, ENAME;
WHERE JOB='CLERK';
ENAME JOB DEPTNO
ENAME JOB DEPTNO
---------- --------- ----------
---------- --------- ----------
CLARK MANAGER 10
JAMES CLERK 30
KING PRESIDENT 10
SMITH CLERK 20
MILLER CLERK 10
ADAMS CLERK 20
ADAMS CLERK 20
MILLER CLERK 10
FORD ANALYST 20
JONES MANAGER 20
Aby wybrać wszystkich zatrudnionych po 01.01.1982r., napiszemy:
SCOTT ANALYST 20
SMITH CLERK 20
ALLEN SALESMAN 30
SELECT ENAME, JOB, DEPTNO
BLAKE MANAGER 30
FROM EMP
JAMES CLERK 30
WHERE HIREDATE>'82/01/01'
MARTIN SALESMAN 30
TURNER SALESMAN 30
ENAME JOB DEPTNO
WARD SALESMAN 30
---------- --------- ----------
SCOTT ANALYST 20
ADAMS CLERK 20
MILLER CLERK 10
Nazwy kolumn, po których sortujemy, muszą być wyspecyfikowane
w klauzuli SELECT. Mo\na w klauzuli WHERE porównywać dla ka\dego wiersza wartości dwóch kolumn.
Np. \eby wybrać wszystkich, którzy otrzymują wy\szą prowizję ni\ pensję, napiszemy:
Sortowanie dotyczy tylko wyniku zapytania wyświetlanego na ekranie. Dane w tabelach
SELECT ENAME, JOB, DEPTNO
nie są sortowane.
FROM EMP
WHERE COMM>SAL;
ENAME JOB DEPTNO
Klauzula WHERE
---------- --------- ----------
MARTIN SALESMAN 30
Klauzula WHERE odpowiada operacji selekcji.
Klauzula ta specyfikuje kryteria doboru wierszy. Klauzula WHERE, o ile jest, musi
Operatory SQL
występować bezpośrednio po klauzuli FROM.
Operatory w klauzuli WHERE mogą być dwojakiego rodzaju:
Wyró\niamy 4 operatory SQL, działające na wszystkich typach danych:
" operatory logiczne,
" BETWEEN... AND,
BETWEEN... AND,
BETWEEN... AND,
BETWEEN... AND,
" operatory SQL.
" IN (lista),
IN
IN
IN
" LIKE,
LIKE,
LIKE,
LIKE,
" IS NULL.
IS NULL.
IS NULL.
IS NULL.
Operatory logiczne
Dane znakowe i ciągi znaków w klauzuli WHERE muszą być ujęte w pojedyncze
Operator BETWEEN...AND
apostrofy. Przy porównywaniu znaków Oracle rozró\nia małe i wielkie litery.
Operator BETWEEN...AND słu\y do sprawdzenia, czy wartość znajduje się w podanym
BETWEEN...AND
BETWEEN...AND
BETWEEN...AND
przedziale (wliczając w to krańce przedziału). Górna granica musi następować po dolnej.
Strona 21 Strona 22
Podstawy języka SQL Podstawy języka SQL
Aby wybrać wszystkich, którzy zarabiają od 1000 do 1500, wliczając w to tych, którzy Aby wybrać osoby, których nazwisko składa się z pięciu liter, napiszemy:
zarabiają 1000 i 1500, napiszemy:
SELECT ENAME, JOB, DEPTNO
FROM EMP
SELECT ENAME, JOB, DEPTNO
WHERE ENAME LIKE '_____';
FROM EMP
WHERE SAL BETWEEN 1000 AND 1500;
ENAME JOB DEPTNO
---------- --------- ----------
ENAME JOB DEPTNO
BLAKE MANAGER 30
---------- --------- ----------
CLARK MANAGER 10
MARTIN SALESMAN 30
JONES MANAGER 20
TURNER SALESMAN 30
ALLEN SALESMAN 30
WARD SALESMAN 30
JAMES CLERK 30
ADAMS CLERK 20
SMITH CLERK 20
MILLER CLERK 10
SCOTT ANALYST 20
ADAMS CLERK 20
Operator IN
Operator IS NULL
Operator IN słu\y do sprawdzania, czy dana wartość znajduje się na wyspecyfikowanej
IN
IN
IN
liście. Aby wybrać podwładnych osób o identyfikatorach 7839 i 7902, napiszemy:
Operator IS NULL słu\y do wyszukiwania wartości NULL.
IS NULL
IS NULL
IS NULL
Aby wybrać dane o osobach, które nie posiadają szefa, napiszemy:
SELECT ENAME, JOB, DEPTNO
FROM EMP
SELECT ENAME, JOB, DEPTNO
WHERE MGR IN (7839,7902);
FROM EMP
WHERE MGR IS NULL;
ENAME JOB DEPTNO
---------- --------- ----------
ENAME JOB DEPTNO
BLAKE MANAGER 30
---------- --------- ----------
CLARK MANAGER 10
KING PRESIDENT 10
JONES MANAGER 20
SMITH CLERK 20
Nie mo\na napisać w klauzuli WHERE warunku MGR=NULL, gdy\ wtedy Oracle nie
Dane znakowe występujące na liście nale\y ująć w pojedyncze apostrofy.
wyszuka \adnych wartości.
Operator LIKE
Operatory negacji
Operator LIKE słu\y do wybierania wartości odpowiadających podanemu wzorcowi.
LIKE
LIKE
LIKE
Operatory negacji słu\ą do zaprzeczania warunkom w klauzuli WHERE.
Wzorzec tworzą dwa specjalne symbole:
!= nie jest równy (VAX, UNIX, PC)
" % (znak procent)  odpowiada dowolnemu ciągowi znaków,
^=, _= nie jest równy (IBM)
" _ (znak podkreślenia)  odpowiada dokładnie jednemu dowolnemu znakowi.
<> nie jest równy (wszystkie systemy operacyjne)
Aby wybrać osoby, które jako drugą literę w nazwisku mają literę "A", napiszemy:
NOT kolumna= nie jest równy
NOT
NOT
NOT
SELECT ENAME, JOB, DEPTNO
NOT kolumna> nie jest większy
NOT
NOT
NOT
FROM EMP
WHERE ENAME LIKE '_A%';
NOT BETWEEN
NOT BETWEEN
NOT BETWEEN
NOT BETWEEN
nie jest w podanym przedziale
NOT IN
NOT IN
NOT IN
NOT IN
ENAME JOB DEPTNO nie jest w zbiorze
---------- --------- ----------
NOT LIKE
NOT LIKE
NOT LIKE
NOT LIKE
nie jest zgodny z maską
MARTIN SALESMAN 30
JAMES CLERK 30
IS NOT NULL
IS NOT NULL
IS NOT NULL
IS NOT NULL
nie jest NULL
WARD SALESMAN 30
Aby wybrać wszystkie osoby, które nie zarabiają więcej ni\ 2000, napiszemy:
Strona 23 Strona 24
Podstawy języka SQL Podstawy języka SQL
SELECT ENAME, JOB, SAL
SELECT ENAME, SAL FROM EMP
FROM EMP WHERE SAL>1000
WHERE NOT SAL>2000; AND JOB='MANAGER' OR JOB='CLERK';
ENAME SAL ENAME JOB SAL
---------- ---------- ---------- --------- ----------
MARTIN 1250 BLAKE MANAGER 2850
ALLEN 1600 CLARK MANAGER 2450
TURNER 1500 JONES MANAGER 2975
JAMES 950 JAMES CLERK 950
WARD 1250 SMITH CLERK 800
SMITH 800 ADAMS CLERK 1100
ADAMS 1100 MILLER CLERK 1300
MILLER 1300
Poni\szy przykład, w którym zastosowano nawiasy zmieniające kolejność wykonywania
Aby wybrać osoby, które nie otrzymują prowizji, napiszemy:
działań wybierze tylko osoby zatrudnione na stanowisku 'CLERK' lub na stanowisku
'MANAGER', które przy tym zarabiają więcej ni\ 1000.
SELECT ENAME, JOB, COMM
FROM EMP
SELECT ENAME, JOB, SAL
WHERE COMM IS NOT NULL
FROM EMP
WHERE SAL>1000
ENAME JOB COMM
AND (JOB='MANAGER' OR JOB='CLERK');
---------- --------- ----------
MARTIN SALESMAN 1400
ENAME JOB SAL
ALLEN SALESMAN 300
---------- --------- ----------
TURNER SALESMAN 0
BLAKE MANAGER 2850
WARD SALESMAN 500
CLARK MANAGER 2450
JONES MANAGER 2975
ADAMS CLERK 1100
MILLER CLERK 1300
Tworzenie zło\onych kryteriów
Do budowania warunków zło\onych słu\ą operatory AND OR (lub).
AND (i) oraz OR
AND OR
AND OR
Hierarchia operatorów
Warunek (X AND Y) jest prawdziwy wtedy i tylko wtedy, gdy X jest prawdziwy i Y jest
AND
AND
AND
prawdziwy.
W ka\dym wyra\eniu, o ile nawiasy nie wskazują inaczej, operacje są wykonywane
Warunek (X OR Y) jest prawdziwy wtedy i tylko wtedy, gdy X jest prawdziwy lub Y jest począwszy od operatorów o najwy\szym priorytecie. Jeśli dwa operatory o tym samym
OR
OR
OR
prawdziwy. priorytecie występują obok siebie, to są one wykonywane od lewej do prawej.
Operator AND OR. 1. =, <>, <=, >=, >,<, BETWEEN& AND, IN, LIKE IS NULL
AND ma większy priorytet ni\ operator OR BETWEEN& AND IN LIKE IS NULL
AND OR BETWEEN& AND IN LIKE, IS NULL
AND OR BETWEEN& AND IN LIKE IS NULL
2. NOT
NOT
NOT
NOT
Aby wybrać wszystkich pracowników zatrudnionych na stanowisku 'MANAGER'
3. AND
AND
AND
AND
i zarabiających więcej ni\ 2000, napiszemy:
4. OR
OR
OR
OR
SELECT ENAME, JOB, SAL
Aby zapis był bardziej przejrzysty i w celu uniknięcia błędów, zaleca się stosowanie
FROM EMP
nawiasów.
WHERE SAL>2000
AND JOB='MANAGER'
NAME JOB SAL
Krótki opis poleceń właściwych dla SQL*Plus
---------- --------- ----------
BLAKE MANAGER 2850
CLARK MANAGER 2450
Pod SQL*Plus najczęściej uruchamiamy skrypty SQL-owe.
JONES MANAGER 2975
Poniewa\ operator AND ma wy\szy priorytet ni\ operator OR, to poni\szy przykład
AND OR
AND OR
AND OR
znajdzie nam wszystkie osoby zatrudnione na stanowisku 'CLERK' oraz te osoby
zatrudnione na stanowisku 'MANAGER', których zarobki przekraczają 1000.
Najczęściej u\ywane polecenia:
Strona 25 Strona 26
Podstawy języka SQL Podstawy języka SQL
SPOOL plik; wszystkie polecenia SQL do czasu wydania rozkazu SPOOL OFF będą
zapisywane do pliku plik
@plik uruchomienie skryptu plik
Ćwiczenia
ed plik edycja pliku plik w domyślnym edytorze
SPOOL OFF kończy wysyłanie danych do pliku
1.Wybierz wszystkie dane z tablicy SALGRADE.
DESC wyświetla opis struktury tabeli
GRADE LOSAL HISAL
CONNECT zmiana podłączenia do bazy --------- --------- ---------
1 700 1200
EXIT wyjście z programu
2 1201 1400
3 1401 2000
4 2001 3000
5 3001 9999
2. Wybierz wszystkie dane z tablicy EMP.
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
--------- ---------- --------- --------- -------- --------- --------- ---------
7839 KING PRESIDENT 81/11/17 5000 10
7698 BLAKE MANAGER 7839 81/05/01 2850 30
7782 CLARK MANAGER 7839 81/06/09 2450 10
7566 JONES MANAGER 7839 81/04/02 2975 20
7654 MARTIN SALESMAN 7698 81/09/28 1250 1400 30
7499 ALLEN SALESMAN 7698 81/02/20 1600 300 30
7844 TURNER SALESMAN 7698 81/09/08 1500 0 30
7900 JAMES CLERK 7698 81/12/03 950 30
7521 WARD SALESMAN 7698 81/02/22 1250 500 30
7902 FORD ANALYST 7566 81/12/03 3000 20
7369 SMITH CLERK 7902 80/12/17 800 20
7788 SCOTT ANALYST 7566 82/12/09 3000 20
7876 ADAMS CLERK 7788 83/01/12 1100 20
7934 MILLER CLERK 7782 82/01/23 1300 10
3. Wybierz wszystkie dane o pracownikach, których zarobki mieszczą się w przedziale
<1000,2000>.
ENAME DEPTNO SAL
---------- --------- ---------
MARTIN 30 1250
ALLEN 30 1600
TURNER 30 1500
WARD 30 1250
ADAMS 20 1100
MILLER 10 1300
4. Wybierz numery i nazwy departamentów, sortując według nazw departamentów.
DEPTNO DNAME
--------- --------------
10 ACCOUNTING
40 OPERATIONS
20 RESEARCH
30 SALES
Strona 27 Strona 28
Podstawy języka SQL Podstawy języka SQL
ALLEN 19500
TURNER 18000
5. Wybierz wszystkie, wzajemnie ró\ne stanowiska pracy. JAMES 11400
WARD 15500
FORD 36000
JOB
SMITH 9600
---------
SCOTT 36000
ANALYST
ADAMS 13200
CLERK
MILLER 15600
MANAGER
PRESIDENT
10. Wybierz następujące dane o tych pracownikach, którzy zostali zatrudnieni w 1982
SALESMAN
roku.
6. Wybierz dane o pracownikach zatrudnionych w departamentach 10 i 20 w kolejności
ENAME DEPTNO HIREDATE
alfabetycznej ich nazwisk.
---------- --------- ---------
SCOTT 20 09-DEC-82
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
MILLER 10 23-JAN-82
--------- ---------- --------- --------- -------- --------- --------- ---------
7876 ADAMS CLERK 7788 83/01/12 1100 20
11. Wybierz nazwiska, roczną pensję oraz prowizję tych wszystkich pracowników, których
7782 CLARK MANAGER 7839 81/06/09 2450 10
7902 FORD ANALYST 7566 81/12/03 3000 20 miesięczna pensja przekracza prowizję. Wyniki posortuj według malejących zarobków.
7566 JONES MANAGER 7839 81/04/02 2975 20
Jeśli dwóch lub więcej pracowników ma taką samą pensję, uporządkuj dane o nich według
7839 KING PRESIDENT 81/11/17 5000 10
nazwisk zgodnie z alfabetem.
7934 MILLER CLERK 7782 82/01/23 1300 10
7788 SCOTT ANALYST 7566 82/12/09 3000 20
7369 SMITH CLERK 7902 80/12/17 800 20
ENAME ANNUAL_SAL COMM
---------- ---------- ---------
7. Wybierz nazwiska i stanowiska pracy wszystkich pracowników z departamentu 20 ALLEN 19200 300
TURNER 18000 0
zatrudnionych na stanowisku CLERK.
WARD 15000 500
ENAME JOB
12. Spowoduj wyświetlenie następujących wyników.
---------- ---------
SMITH CLERK
Kto, gdzie, kiedy?
ADAMS CLERK
-------------------------------------------------------------------------------
KING pracuje na stanowisku PRESIDENT w zespole 10 od 17-NOV-81
BLAKE pracuje na stanowisku MANAGER w zespole 30 od 01-MAY-81
8. Wybierz następujące informacje o wszystkich pracownikach, którzy posiadają szefa.
CLARK pracuje na stanowisku MANAGER w zespole 10 od 09-JUN-81
JONES pracuje na stanowisku MANAGER w zespole 20 od 02-APR-81
ENAME JOB SAL
MARTIN pracuje na stanowisku SALESMAN w zespole 30 od 28-SEP-81
---------- --------- ---------
ALLEN pracuje na stanowisku SALESMAN w zespole 30 od 20-FEB-81
BLAKE MANAGER 2850
TURNER pracuje na stanowisku SALESMAN w zespole 30 od 08-SEP-81
CLARK MANAGER 2450
JAMES pracuje na stanowisku CLERK w zespole 30 od 03-DEC-81
JONES MANAGER 2975
WARD pracuje na stanowisku SALESMAN w zespole 30 od 22-FEB-81
MARTIN SALESMAN 1250
FORD pracuje na stanowisku ANALYST w zespole 20 od 03-DEC-81
ALLEN SALESMAN 1600
SMITH pracuje na stanowisku CLERK w zespole 20 od 17-DEC-80
TURNER SALESMAN 1500
SCOTT pracuje na stanowisku ANALYST w zespole 20 od 09-DEC-82
JAMES CLERK 950
ADAMS pracuje na stanowisku CLERK w zespole 20 od 12-JAN-83
WARD SALESMAN 1250
MILLER pracuje na stanowisku CLERK w zespole 10 od 23-JAN-82
FORD ANALYST 3000
SMITH CLERK 800
SCOTT ANALYST 3000
ADAMS CLERK 1100
MILLER CLERK 1300
9. Wybierz nazwiska i całkowite, roczne zarobki wszystkich pracowników.
ENAME RENUMERATION
---------- ------------
KING 60000
BLAKE 34200
CLARK 29400
JONES 35700
MARTIN 16400
Strona 29 Strona 30
Podstawy języka SQL Podstawy języka SQL
Funkcje grupowe słu\ą do działania na grupach wierszy. Wynikiem funkcji grupowej jest
pojedyncza wartość dla całej grupy.
Jeśli nie wyspecyfikujemy inaczej, wszystkie wiersze tabeli są traktowane jako jedna
grupa.
Funkcja Wynik funkcji
AVG ([DISTINCT | ALL
DISTINCT ALL] wyra\enie) wartość średnia wyra\eń, NULL nie jest
DISTINCT ALL
DISTINCT ALL
uwzględniane
COUNT ([DISTINCT ALL] wyra\enie) ilość wystąpień wartości wyra\eń ró\nych od
DISTINCT | ALL
DISTINCT ALL
DISTINCT ALL
NULL, gwiazdka (*) u\yta w miejscu
wyra\enia powoduje obliczenia ilości
wszystkich wierszy łącznie z duplikatami
i wartościami NULL
MAX ([DISTINCT | ALL
DISTINCT ALL
DISTINCT ALL] wyra\enie) maksymalna wartość wyra\enia
DISTINCT ALL
MIN ([DISTINCT ALL] wyra\enie) minimalna wartość wyra\enia
DISTINCT ALL
DISTINCT | ALL
DISTINCT ALL
STDDEV ([DISTINCT ALL] wyra\enie) odchylenie standardowe wyra\eń, bez
DISTINCT | ALL
DISTINCT ALL
DISTINCT ALL
uwzględniania wartości NULL
Funkcje grupowe
SUM ([DISTINCT ALL
DISTINCT | ALL] wyra\enie) suma wartości wyra\eń, bez uwzględniania
DISTINCT ALL
DISTINCT ALL
wartości NULL
VARIANCE ([DISTINCT | ALL] wariancja wyra\eń, bez uwzględniania wartości
DISTINCT ALL
DISTINCT ALL
DISTINCT ALL
wyra\enie) NULL
Kwalifikator DISTINCT ogranicza działanie funkcji grupowych do ró\nych wartości
DISTINCT
DISTINCT
DISTINCT
argumentów.
Kwalifikator ALL
ALL jest domyślny  funkcje grupowe nie eliminują duplikatów.
ALL
ALL
Argumentami funkcji grupowych są liczby, a w przypadku funkcji MAX, MIN i COUNT
tak\e daty, znaki i ciągi znaków.
Wszystkie funkcje grupowe, za wyjątkiem COUNT(*) ignorują wartości NULL.
Stosowanie funkcji grupowych
Aby obliczyć średni zarobek w firmie, napiszemy:
SELECT AVG(SAL)
FROM EMP;
AVG(SAL)
----------
2073,21429
Zwróćmy uwagę, \e została zwrócona jedna wartość dla wszystkich wierszy. Cała firma
jest tu traktowana jako jedna grupa.
Strona 31 Strona 32
Podstawy języka SQL Podstawy języka SQL
Mo\na nało\yć na to polecenie warunek w klauzuli WHERE, np. aby znalezć minimalny Aby obliczyć minimalny zarobek w ka\dym departamencie w podziałem na stanowiska,
zarobek na stanowisku 'MANAGER', napiszemy: napiszemy:
SELECT MIN(SAL) SELECT DEPTNO, JOB, MIN(SAL)
FROM EMP FROM EMP
WHERE JOB='MANAGER'; GROUP BY DEPTNO, JOB;
MIN(SAL) DEPTNO JOB MIN(SAL)
---------- ---------- --------- ----------
2450 10 CLERK 1300
10 MANAGER 2450
10 PRESIDENT 5000
Aby znalezć, ilu pracowników pracuje w departamencie 10, napiszemy:
20 ANALYST 3000
20 CLERK 800
SELECT COUNT(*)
20 MANAGER 2975
FROM EMP
30 CLERK 950
WHERE DEPTNO=10;
30 MANAGER 2850
30 SALESMAN 1250
COUNT(*)
----------
3
Wybierane wyra\enia a funkcje grupowe
Klauzula GROUP BY
Poni\sze polecenie spowoduje obliczenie średnich zarobków w departamentach. Nie
będzie jednak zbyt u\yteczne, bo nie będzie widoczne, która średnia odpowiada któremu
Do podzielenia wierszy tablicy na grupy u\ywamy klauzuli GROUP BY. Pojedynczą departamentowi.
grupę stanowią wszystkie wiersze, dla których wartości podane w klauzuli GROUP BY są
SELECT AVG(SAL)
identyczne.
FROM EMP
Aby obliczyć średnie zarobki w ka\dym departamencie, napiszemy: GROUP BY DEPTNO;
AVG(SAL)
SELECT DEPTNO, AVG(SAL)
----------
FROM EMP
2916,66667
GROUP BY DEPTNO;
2175
1566,66667
DEPTNO AVG(SAL)
---------- ----------
10 2916,66667 Aby poprawić to polecenie, umieśćmy na liście wyboru klauzuli SELECT tak\e numer
20 2175
departamentu:
30 1566,66667
SELECT DEPTNO, AVG(SAL)
Przed grupowaniem mo\emy wyeliminować pewne wiersze za pomocą klauzuli WHERE:
FROM EMP
GROUP BY DEPTNO;
SELECT JOB, MAX(SAL)
FROM EMP DEPTNO AVG(SAL)
WHERE JOB<>'CLERK' ---------- ----------
GROUP BY JOB; 10 2916,66667
20 2175
JOB MAX(SAL) 30 1566,66667
--------- ----------
ANALYST 3000
MANAGER 2975
PRESIDENT 5000
SALESMAN 1600 Na liście wyboru klauzuli SELECT mogą występować tylko i wyłącznie
nazwy kolumn, które są przedmiotem działania klauzuli GROUP BY, chyba,
W klauzuli GROUP BY mo\na podać kilka wyra\eń, wtedy wiersze będą grupowane
\e występują one jako argument funkcji grupującej.
w mniejszych grupach.
Strona 33 Strona 34
Podstawy języka SQL Podstawy języka SQL
Klauzula HAVING
Kolejność występowania klauzul
Do wybierania interesujących nas grup słu\y klauzula HAVING. W klauzuli HAVING
umieszczamy warunek wyra\ony za pomocą funkcji grupowej.
Wymagany porządek klauzul jest następujący:
Aby wybrać średnie zarobki dla grup zawodowych, gdzie maksymalne zarobki są wy\sze
1. SELECT lista wyra\eń
ni\ 2000, napiszemy:
2. FROM tabela
SELECT JOB, AVG(SAL)
3. WHERE warunek selekcji wierszy
FROM EMP
GROUP BY JOB
4. HAVING warunek selekcji grup
HAVING MAX(SAL)>2000;
5. ORDER BY wyra\enia
JOB AVG(SAL)
6. ;
--------- ----------
ANALYST 3000
MANAGER 2758,33333
PRESIDENT 5000
Klauzula HAVING mo\e poprzedzać klauzulę GROUP BY lub odwrotnie.
Czasami to samo kryterium mo\na wyrazić zarówno za pomocą klauzuli HAVING jak
i klauzuli WHERE.
SELECT JOB, AVG(SAL)
FROM EMP
HAVING JOB<>'CLERK'
GROUP BY JOB;
JOB AVG(SAL)
--------- ----------
ANALYST 3000
MANAGER 2758,33333
PRESIDENT 5000
SALESMAN 1400
lub
SELECT JOB, AVG(SAL)
FROM EMP
WHERE JOB<>'CLERK'
GROUP BY JOB;
JOB AVG(SAL)
--------- ----------
ANALYST 3000
MANAGER 2758,33333
PRESIDENT 5000
SALESMAN 1400
W takiej sytuacji bardziej efektywne jest umieszczenie warunku w klauzuli WHERE.
Strona 35 Strona 36
Podstawy języka SQL Podstawy języka SQL
8. Sprawdz, czy wszystkie numery pracowników są rzeczywiście ró\ne (u\ywając
grupowania).
Ćwiczenia
9. Podaj najni\sze pensje wypłacane podwładnym swoich kierowników. Wyeliminuj grupy
o minimalnych zarobkach ni\szych ni\ 1000. Uporządkuj według pensji.
1. Znajdz minimalną pensje w firmie.
MGR MIN(SAL)
MINIMUM
--------- ---------
---------
7788 1100
800
7782 1300
7839 2450
7566 3000
2. Znajdz minimalną, maksymalną i średnią pensję w firmie.
5000
MIN(SAL) MAX(SAL) AVG(SAL)
--------- --------- ---------
800 5000 2073,2143
3. Oblicz minimalną, maksymalną pensje dla ka\dego stanowiska pracy.
JOB MINIMALNA_PENSJA MAKSYMALNA_PENSJA
--------- ---------------- -----------------
ANALYST 3000 3000
CLERK 800 1300
MANAGER 2450 2975
PRESIDENT 5000 5000
SALESMAN 1250 1600
4. Oblicz, ilu pracowników jest kierownikami (MANAGER).
MANAGERS
---------
3
5. Znajdz średnie miesięczne pensje oraz średnie roczne zarobki dla ka\dego stanowiska.
Uwzględnij prowizje.
JOB AVSAL AVCOMP
--------- --------- ---------
ANALYST 3000 36000
CLERK 1037,5 12450
MANAGER 2758,3333 33100
PRESIDENT 5000 60000
SALESMAN 1400 17350
6. Znajdz ró\nice między najwy\szą i najni\szą pensją.
DIFFERENCE
----------
4200
7. Znajdz departamenty zatrudniające powy\ej trzech pracowników.
DEPTNO COUNT(*)
--------- ---------
20 5
30 6
Strona 37 Strona 38
Podstawy języka SQL Podstawy języka SQL
Złączenie równościowe
Chcemy uzyskać następującą informację: dla ka\dego pracownika znalezć jego nazwisko,
zawód (tabela EMP) i nazwę departamentu, w którym pracuje (tabela DEPT).
W obu tych tabelach występuje kolumna DEPTNO, określająca numer departamentu
i zawierająca takie same wartości, mówiące o związku pomiędzy tymi tabelami.
Związek oparty o relację równości nazywamy związkiem równościowym (equi-join).
Warunek równości zapisuje się jak zwykły warunek, z tym, \e wartości do porównania są
pobierane z ró\nych tabel.
Aby powiązać ze sobą logicznie tabele EMP i DEPT, napiszemy:
SELECT ENAME, JOB, DNAME
FROM EMP, DEPT
WHERE EMP.DEPTNO=DEPT.DEPTNO;
ENAME JOB DNAME
Wybieranie danych z wielu tabel
---------- --------- --------------
KING PRESIDENT ACCOUNTING
BLAKE MANAGER SALES
CLARK MANAGER ACCOUNTING
JONES MANAGER RESEARCH
MARTIN SALESMAN SALES
ALLEN SALESMAN SALES
TURNER SALESMAN SALES
JAMES CLERK SALES
WARD SALESMAN SALES
FORD ANALYST RESEARCH
SMITH CLERK RESEARCH
SCOTT ANALYST RESEARCH
ADAMS CLERK RESEARCH
MILLER CLERK ACCOUNTING
Razem z informacjami pobranymi z tablicy EMP otrzymujemy nazwy departamentów
pobrane z tablicy DEPT. Wiersze tabeli EMP są łączone z takimi wierszami tabeli DEPT,
dla których wartość EMP.DEPTNO pokrywa się z DEPT.DEPTNO.
Poprzedzenie nazwy kolumny nazwą tabeli jest wymagane tylko wtedy, gdy w tabelach
wymienionych w klauzuli FROM występuje kolumna o tej samej nazwie (DEPTNO).
Podanie samej nazwy kolumny byłoby niejednoznaczne. Chocia\ wartość tego pola dla
obu tabeli jest taka sama, to ze względów składniowych wymagane jest wskazanie tabeli
z której będzie pobrana wartość.
W poni\szym przykładzie w klauzuli SELECT jest wymagane odwołanie do tablicy
DEPT:
SELECT DEPT.DEPTNO, ENAME, JOB, DNAME
FROM EMP, DEPT
WHERE EMP.DEPTNO=DEPT.DEPTNO
ORDER BY DEPT.DEPTNO;
DEPTNO ENAME JOB DNAME
---------- ---------- --------- --------------
10 KING PRESIDENT ACCOUNTING
10 CLARK MANAGER ACCOUNTING
Strona 39 Strona 40
Podstawy języka SQL Podstawy języka SQL
10 MILLER CLERK ACCOUNTING TURNER 1500 3
20 JONES MANAGER RESEARCH BLAKE 2850 4
20 SCOTT ANALYST RESEARCH CLARK 2450 4
20 ADAMS CLERK RESEARCH JONES 2975 4
20 SMITH CLERK RESEARCH FORD 3000 4
20 FORD ANALYST RESEARCH SCOTT 3000 4
30 BLAKE MANAGER SALES KING 5000 5
30 MARTIN SALESMAN SALES
30 ALLEN SALESMAN SALES
30 TURNER SALESMAN SALES
Reguły łączenia tabel
30 JAMES CLERK SALES
30 WARD SALESMAN SALES
Ogólna zasada łączenia tabel:
Aliasy tabel
Minimalna liczba warunków łączących = liczba tabel  1
Aliasy, czyli nazwy zastępcze, ułatwiają pisanie zapytań. Aliasy definiuje się w klauzuli
FROM. Obowiązują one jedynie w zapytaniu, w którym są zdefiniowane. Nale\y u\ywać
aliasów tak\e w klauzuli SELECT, mimo i\ tekstowo występuje ona wcześniej ni\
klauzula FROM.
Przykład u\ycia aliasów:
SELECT D.DEPTNO, ENAME, DNAME
FROM EMP E, DEPT D
WHERE E.DEPTNO=D.DEPTNO
ORDER BY D.DEPTNO;
Jeśli alias zostanie zdefiniowany dla tabeli, to oryginalnej nazwy tabeli nie wolno ju\
u\ywać w tym zapytaniu.
Złączenia nierównościowe
Złączenia nierównościowe (non-equi-join) nie są oparte o relację równości. Związek
pomiędzy wierszami dwóch tabel określa się poprzez zastosowanie innego operatora ni\
równość.
Na przykład związek pomiędzy tabelami EMP i SALGRADE jest oparty na następujących
zasadach: określenie stawki zaszeregowania pracownika polega na wskazaniu do jakiego
przedziału (LOSAL, HISAL) nale\ą jego zarobki.
Do utworzenia tego warunku zastosujemy operator BETWEEN& AND.
BETWEEN& AND
BETWEEN& AND
BETWEEN& AND
SELECT ENAME, SAL, S.GRADE
FROM EMP E, SALGRADE S
WHERE SAL BETWEEN LOSAL AND HISAL;
ENAME SAL GRADE
---------- ---------- ----------
JAMES 950 1
SMITH 800 1
ADAMS 1100 1
MARTIN 1250 2
WARD 1250 2
MILLER 1300 2
ALLEN 1600 3
Strona 41 Strona 42
Podstawy języka SQL Podstawy języka SQL
4. Utwórz następującą listę pracowników z zaszeregowaniem ich do klas zarobkowych.
ENAME JOB SAL GRADE
Ćwiczenia
---------- --------- --------- ---------
JAMES CLERK 950 1
SMITH CLERK 800 1
1. Wybierz nazwiska oraz nazwy departamentów wszystkich pracowników, w kolejności
ADAMS CLERK 1100 1
alfabetycznej nazw departamentów. MARTIN SALESMAN 1250 2
WARD SALESMAN 1250 2
MILLER CLERK 1300 2
ENAME DNAME
ALLEN SALESMAN 1600 3
---------- --------------
TURNER SALESMAN 1500 3
KING ACCOUNTING
BLAKE MANAGER 2850 4
CLARK ACCOUNTING
CLARK MANAGER 2450 4
MILLER ACCOUNTING
JONES MANAGER 2975 4
JONES RESEARCH
FORD ANALYST 3000 4
SCOTT RESEARCH
SCOTT ANALYST 3000 4
ADAMS RESEARCH
KING PRESIDENT 5000 5
SMITH RESEARCH
FORD RESEARCH
BLAKE SALES 5. Wybierz informację o pracownikach, których zarobki odpowiadają klasie 3.
MARTIN SALES
ALLEN SALES
ENAME JOB SAL GRADE
TURNER SALES
---------- --------- --------- ---------
JAMES SALES
ALLEN SALESMAN 1600 3
WARD SALES
TURNER SALESMAN 1500 3
2. Wybierz nazwiska wszystkich pracowników wraz z numerami i nazwami
6. Wybierz pracowników zatrudnionych w Dallas.
departamentów, w których są zatrudnieni.
ENAME SAL LOCATION
ENAME DEPTNO DNAME ---------- --------- -------------
---------- --------- -------------- JONES 2975 DALLAS
KING 10 ACCOUNTING FORD 3000 DALLAS
BLAKE 30 SALES SMITH 800 DALLAS
CLARK 10 ACCOUNTING SCOTT 3000 DALLAS
JONES 20 RESEARCH ADAMS 1100 DALLAS
MARTIN 30 SALES
ALLEN 30 SALES
7.Podaj następujące dane o wszystkich pracownikach, z wyjątkiem tych, którzy pracują na
TURNER 30 SALES
stanowisku  CLERK . Uporządkuj je według malejących zarobków.
JAMES 30 SALES
WARD 30 SALES
FORD 20 RESEARCH ENAME JOB SAL GRADE DNAME
SMITH 20 RESEARCH ---------- --------- --------- --------- --------------
SCOTT 20 RESEARCH JAMES CLERK 950 1 SALES
ADAMS 20 RESEARCH SMITH CLERK 800 1 RESEARCH
MILLER 10 ACCOUNTING ADAMS CLERK 1100 1 RESEARCH
MARTIN SALESMAN 1250 2 SALES
WARD SALESMAN 1250 2 SALES
3. Dla pracowników o miesięcznej pensji 1500 podaj ich nazwiska, miejsca usytuowania
MILLER CLERK 1300 2 ACCOUNTING
ich departamentów oraz nazwy tych departamentów.
ALLEN SALESMAN 1600 3 SALES
TURNER SALESMAN 1500 3 SALES
BLAKE MANAGER 2850 4 SALES
ENAME LOCATION DNAME
CLARK MANAGER 2450 4 ACCOUNTING
---------- ------------- --------------
JONES MANAGER 2975 4 RESEARCH
KING NEW YORK ACCOUNTING
FORD ANALYST 3000 4 RESEARCH
BLAKE CHICAGO SALES
SCOTT ANALYST 3000 4 RESEARCH
CLARK NEW YORK ACCOUNTING
KING PRESIDENT 5000 5 ACCOUNTING
JONES DALLAS RESEARCH
ALLEN CHICAGO SALES
FORD DALLAS RESEARCH
SCOTT DALLAS RESEARCH
Strona 43 Strona 44
Podstawy języka SQL Podstawy języka SQL
8. Przygotuj następujące dane o wszystkich pracownikach osiągających dochody do
$36000 (włącznie) oraz tych, którzy pracują na stanowisku  CLERK .
ENAME JOB ANNUAL_SAL DEPTNO DNAME GRADE
---------- --------- ---------- --------- -------------- ---------
JAMES CLERK 11400 30 SALES 1
SMITH CLERK 9600 20 RESEARCH 1
ADAMS CLERK 13200 20 RESEARCH 1
MILLER CLERK 15600 10 ACCOUNTING 2
FORD ANALYST 36000 20 RESEARCH 4
SCOTT ANALYST 36000 20 RESEARCH 4
KING PRESIDENT 60000 10 ACCOUNTING 5
Strona 45 Strona 46
Podstawy języka SQL Podstawy języka SQL
Złączenia zewnętrzne
Podczas łączenia tabel wiersz w tabeli nie mający swojego odpowiednika w drugiej tabeli
nie zostanie wybrany. Np. w przykładzie łączenia tabeli EMP i DEPT poprzez kolumnę
DEPNO nie został wybrany wiersz tabeli DEPT, gdzie DEPTNO=40 (departament
OPERATIONS), poniewa\ nikt nie pracuje w tym departamencie.
Spróbujmy poprawić to złączenie tak, aby został równie\ wybrany departament 40.
Uczynimy to za pomocą złączenia zewnętrznego (outer-join), gdzie wiersz w tabeli DEPT,
który nie ma swojego odpowiednika w tabeli EMP zostanie połączony z wierszem tabeli
EMP zawierającym same wartości NULL (mimo, \e wiersz taki w rzeczywistości nie
istnieje).
Złączenie zewnętrzne oznaczamy znakiem (+) po tej stronie równości, która dotyczy tabeli
z niepełną informacją.
SELECT ENAME, D.DEPTNO, DNAME
FROM EMP E, DEPT D
Inne metody łączenia tabel
WHERE E.DEPTNO(+)=D.DEPTNO;
ENAME DEPTNO DNAME
---------- ---------- --------------
KING 10 ACCOUNTING
CLARK 10 ACCOUNTING
MILLER 10 ACCOUNTING
JONES 20 RESEARCH
SCOTT 20 RESEARCH
ADAMS 20 RESEARCH
SMITH 20 RESEARCH
FORD 20 RESEARCH
BLAKE 30 SALES
MARTIN 30 SALES
ALLEN 30 SALES
TURNER 30 SALES
JAMES 30 SALES
WARD 30 SALES
40 OPERATIONS
Operator złączenia zewnętrznego mo\e występować tylko po jednej stronie równości.
Połączenie tabeli samej ze sobą
Dzięki aliasom mo\emy połączyć tabelę samą ze sobą. Rozpatrzmy następujący przykład
 chcemy wybrać pracowników, którzy zarabiają mniej od swoich kierowników:
SELECT E.ENAME NAZW_PR,
E.SAL PENS_PR,
M.ENAME NAZW_SZ,
M.SAL PENS_SZ
FROM EMP E, EMP M
WHERE E.MGR=M.EMPNO
AND E.SAL Strona 47 Strona 48
Podstawy języka SQL Podstawy języka SQL
NAZW_PR PENS_PR NAZW_SZ PENS_SZ
Operator INTERSECT
---------- ---------- ---------- ----------
BLAKE 2850 KING 5000
CLARK 2450 KING 5000
Operator zbiorowy INTERSECT (przecięcie zbiorów) powoduje wybranie wierszy
INTERSECT
INTERSECT
INTERSECT
JONES 2975 KING 5000
MARTIN 1250 BLAKE 2850 wspólnych dla wyników obu zapytań SELECT.
ALLEN 1600 BLAKE 2850
TURNER 1500 BLAKE 2850
SELECT JOB
JAMES 950 BLAKE 2850
FROM EMP
WARD 1250 BLAKE 2850
WHERE DEPTNO=30
SMITH 800 FORD 3000
INTERSECT
ADAMS 1100 SCOTT 3000
SELECT JOB
MILLER 1300 CLARK 2450
FROM EMP
WHERE DEPTNO=20
Jak widać w klauzuli FROM, odwołaliśmy się dwukrotnie do tej samej tabeli za pomocą
JOB
dwóch aliasów E i M.
---------
CLERK
MANAGER
Operatory zbiorowe
Operator MINUS
Operatory zbiorowe u\ywane są do działań na wynikach dwóch lub więcej zapytań
SELECT. Wa\ne jest, aby wszystkie zapytania, na których będziemy u\ywać operatorów
Operator zbiorowy MINUS (ró\nica zbiorów) powoduje wybranie wierszy zwracanych
MINUS
MINUS
MINUS
zbiorowych zwracały te samy typy wierszy, np.: (liczba, ciąg znaków, ciąg znaków, data).
przez pierwszy rozkaz, nie zwracanych przez rozkaz drugi.
SELECT JOB
FROM EMP
Operator UNION
WHERE DEPTNO=30
MINUS
SELECT JOB
Operator zbiorowy UNION jest u\ywany do tworzenia sumy dwóch zbiorów wierszy
UNION
UNION
UNION
FROM EMP
(wyników zapytania SELECT). Aby otrzymać wszystkie, wzajemnie ró\ne wiersze WHERE DEPTNO=20
zwracane w wyniku dwóch poleceń SELECT, napiszemy:
JOB
---------
SELECT JOB
SALESMAN
FROM EMP
WHERE DEPTNO=30
Zapytanie mo\e się składać z więcej ni\ dwóch zapytań SELECT połączonych
UNION
SELECT JOB operatorami zbiorowymi. W takim przepadku najwy\szy priorytet ma operator
FROM EMP
INTERSECT potem operatory UNION i MINUS (równe priorytety). W przypadkach
INTERSECT UNION MINUS
INTERSECT, UNION MINUS
INTERSECT UNION MINUS
WHERE DEPTNO=10
wątpliwych najlepiej stosować nawiasy.
JOB
---------
CLERK
Klauzula ORDER BY w zapytaniach z operatorami zbiorowymi
MANAGER
PRESIDENT
SALESMAN
W zapytaniach z operatorami zbiorowymi mo\na u\yć klauzuli ORDER BY. Odnosi się
Operacja UNION (podobnie jak inne operatory zbiorowe) powoduje automatyczną
UNION
UNION
UNION
ona zawsze do wyniku zapytania i mo\e być u\yta tylko raz. Umieszcza się ją zawsze na
eliminację duplikatów. Aby otrzymać w wyniku wszystkie wiersze z obu tabel nale\y u\yć
końcu zapytania. Poniewa\ na listach wyboru poleceń SELECT nazwy mogą być ró\ne,
operatora UNION ALL.
UNION ALL
UNION ALL
UNION ALL
w klauzuli ORDER BY specyfikuje się nie nazwę kolumny, tylko jej pozycję.
Strona 49 Strona 50
Podstawy języka SQL Podstawy języka SQL
SELECT EMPNO, ENAME, SAL
FROM EMP
UNION
SELECT ID, NAME, SALARY
Ćwiczenia
FROM EMP_HISTORY
ORDER BY 2;
1. Znajdz departament w którym nikt nie jest zatrudniony.
Wyniki powy\szego zapytania zostaną posortowane wg kolumny drugiej, czyli wg
nazwisk pracowników. DEPTNO DNAME
--------- --------------
40 OPERATIONS
2. Obok numeru i nazwiska pracownika podaj numer i nazwisko jego kierownika.
EMPNO ENAME MGRNO MGR_NAME
--------- ---------- --------- ----------
7698 BLAKE 7839 KING
7782 CLARK 7839 KING
7566 JONES 7839 KING
7654 MARTIN 7698 BLAKE
7499 ALLEN 7698 BLAKE
7844 TURNER 7698 BLAKE
7900 JAMES 7698 BLAKE
7521 WARD 7698 BLAKE
7902 FORD 7566 JONES
7369 SMITH 7902 FORD
7788 SCOTT 7566 JONES
7876 ADAMS 7788 SCOTT
7934 MILLER 7782 CLARK
3. Zmodyfikuj rozwiązanie poprzedniego zadania w ten sposób, aby wyświetlić tak\e
informacje o pracowniku KING, który nie posiada szefa.
EMPNO ENAME MGRNO MGR_NAME
--------- ---------- --------- ----------
7839 KING
7698 BLAKE 7839 KING
7782 CLARK 7839 KING
7566 JONES 7839 KING
7654 MARTIN 7698 BLAKE
7499 ALLEN 7698 BLAKE
7844 TURNER 7698 BLAKE
7900 JAMES 7698 BLAKE
7521 WARD 7698 BLAKE
7902 FORD 7566 JONES
7369 SMITH 7902 FORD
7788 SCOTT 7566 JONES
7876 ADAMS 7788 SCOTT
7934 MILLER 7782 CLARK
4. Znajdz takie stanowisko pracy (JOB), które było obsadzone zarówno w pierwszej
połowie 1982 roku jak i w pierwszej połowie 1983 roku.
JOB
---------
CLERK
Strona 51 Strona 52
Podstawy języka SQL Podstawy języka SQL
5. Znajdz tych pracowników, którzy zostali zatrudnieniu przed przyjęciem do pracy ich
kierowników.
EMPLOYEE HIREDATE MANAGER HIREDATE
---------- --------- ---------- ---------
BLAKE 01-MAY-81 KING 17-NOV-81
CLARK 09-JUN-81 KING 17-NOV-81
JONES 02-APR-81 KING 17-NOV-81
ALLEN 20-FEB-81 BLAKE 01-MAY-81
WARD 22-FEB-81 BLAKE 01-MAY-81
SMITH 17-DEC-80 FORD 03-DEC-81
6. Podaj inny sposób rozwiązania zadania 1.
DEPTNO DNAME
--------- --------------
40 OPERATIONS
Strona 53 Strona 54
Podstawy języka SQL Podstawy języka SQL
Podzapytania zagnie\d\one
Podzapytanie to polecenie SELECT zagnie\d\one w innym poleceniu SELECT.
SELECT kolumna_1, kolumna_2, &
SELECT
SELECT
SELECT
FROM tabela
FROM
FROM
FROM
WHERE kolumna = (SELECT
WHERE SELECT
WHERE SELECT kolumna
WHERE SELECT
FROM
FROM tabela
FROM
FROM
WHERE
WHERE warunek);
WHERE
WHERE
Podzapytanie to wewnętrzny SELECT wykonywany w pierwszej kolejności, po to, aby
jego wynik został u\yty do wykonania zapytania zewnętrznego.
Podzapytania
Podzapytania zwracające jeden wiersz
Podzapytania zwracające pojedynczą wartość mo\na traktować jak zwykłe wyra\enie.
Aby znalezć pracowników zarabiających powy\ej średniej, mo\emy postąpić następująco:
1. znalezć średnią pensję:
SELECT AVG(SAL)
FROM EMP;
AVG(SAL)
----------
2073,21429
2. znalezć pracowników, których pensja jest wy\sza ni\ obliczona w poprzednim
zapytaniu pensja średnia.
SELECT ENAME, JOB, SAL
FROM EMP
WHERE SAL>(wynik zapytania z punktu 1)
Powy\sze dwa rozkazy mo\na połączyć w jeden:
SELECT ENAME, JOB, SAL
FROM EMP
WHERE SAL>(SELECT AVG(SAL)
FROM EMP);
ENAME JOB SAL
---------- --------- ----------
KING PRESIDENT 5000
BLAKE MANAGER 2850
CLARK MANAGER 2450
JONES MANAGER 2975
Strona 55 Strona 56
Podstawy języka SQL Podstawy języka SQL
FORD ANALYST 3000
Warunek, w którym porównujemy wiele wartości
SCOTT ANALYST 3000
Aby znalezć wszystkich zatrudnionych na tym samym stanowisku co SMITH, napiszemy:
Spróbujmy przerobić powy\sze zapytanie:
SELECT ENAME, JOB
SELECT ENAME, SAL, DEPTNO
FROM EMP
FROM EMP
WHERE JOB=(SELECT JOB
WHERE (SAL,DEPTNO) IN (SELECT MAX(SAL), DEPTNO
FROM EMP
FROM EMP
WHERE ENAME='SMITH');
GROUP BY DEPTNO);
ENAME JOB
ENAME SAL DEPTNO
---------- ---------
---------- ---------- ----------
JAMES CLERK
BLAKE 2850 30
SMITH CLERK
FORD 3000 20
ADAMS CLERK
SCOTT 3000 20
MILLER CLERK
KING 5000 10
Powy\sze zapytanie wybierze nam osoby, które zarabiają najwięcej w swoich działach 
został nało\ony tak\e warunek, aby osoba wybierana pracowała w dziale, do którego
Podzapytania zwracające wiele wierszy
nale\y najwy\sza pensja.
Kolumny na liście wyboru wewnętrznego (w klauzuli WHERE lub HAVING) muszą
Jeśli w firmie pracowałoby więcej osób o nazwisku SMITH, to poprzednie podzapytanie
występować w kolejności i typach zgodnych z kolejnością i typami występującymi
nie miałoby sensu. Co więcej zapytanie wewnętrzne zamiast pojedynczej wartości
w klauzuli SELECT zewnętrznego polecenia.
zwróciłoby kolumnę wartości, co prowadziłoby do błędu w zewnętrznym zapytaniu.
Przekształćmy to zapytanie tak, aby wyszukiwało wszystkie osoby zatrudnione na
stanowiskach, na których pracuje jakikolwiek SMITH.
Operatory ALL i ANY
SELECT ENAME, JOB
FROM EMP
Operatory ALL i ANY mo\na stosować w podzapytaniach zwracających więcej ni\ jeden
ALL ANY
ALL ANY
ALL ANY
WHERE JOB IN (SELECT JOB
wiersz. Podaje się je w klauzulach WHERE i HAVING razem z operatorami
FROM EMP
WHERE ENAME='SMITH');
porównywania.
Operator ANY  wiersz zostanie wybrany, jeśli wyra\enie jest zgodne co najmniej z jedną
ANY
ANY
ANY
Spróbujmy teraz znalezć pracowników, których pensja jest na liście najwy\szych
wartością wybraną w podzapytaniu.
zarobków w departamentach.
SELECT ENAME, SAL, DEPTNO
SELECT ENAME, SAL, DEPTNO
FROM EMP
FROM EMP
WHERE SAL > ANY (SELECT DISTINCT SAL
WHERE SAL IN (SELECT MAX(SAL)
FROM EMP
FROM EMP
WHERE DEPTNO=10);
GROUP BY DEPTNO);
ENAME SAL DEPTNO
ENAME SAL DEPTNO
---------- ---------- ----------
---------- ---------- ----------
KING 5000 10
BLAKE 2850 30
BLAKE 2850 30
FORD 3000 20
CLARK 2450 10
SCOTT 3000 20
JONES 2975 20
KING 5000 10
ALLEN 1600 30
TURNER 1500 30
Rozwa\my teraz sytuację, \e w firmie pracuje osoba, której zarobki pokrywają się
FORD 3000 20
SCOTT 3000 20
z największym zarobkiem w danym departamencie, ona jednak pracuje w innym
departamencie. Powy\sze zapytanie wypisze taką osobę, jako \e nie został nało\ony
warunek, aby osoba pracowała w departamencie, z którego pochodzi najwy\sza pensja.
Najni\szy zarobek w departamencie 10 wynosi 1300. Zapytanie wybierze wszystkich,
którzy zarabiają więcej ni\ 1300.
Strona 57 Strona 58
Podstawy języka SQL Podstawy języka SQL
Aby nie były wybierane wielokrotnie te same zarobki (3000 jest większe i od 1300 i od Aby wybrać stanowisko, na którym są najni\sze średnie zarobki, napiszemy:
2450  zostałoby wybrane dwukrotnie), często stosuje się razem z operatorami ALL
ALL
ALL
ALL
SELECT JOB, AVG(SAL)
i ANY DISTINCT
ANY słowo kluczowe DISTINCT.
ANY DISTINCT
ANY DISTINCT
FROM EMP
HAVING AVG(SAL) = (SELECT MIN(AVG(SAL))
SELECT ENAME, SAL, DEPTNO
FROM EMP
FROM EMP
GROUP BY JOB)
WHERE DEPTNO=10;
GROUP BY JOB;
ENAME SAL DEPTNO
JOB AVG(SAL)
---------- ---------- ----------
--------- ----------
KING 5000 10
CLERK 1037,5
CLARK 2450 10
MILLER 1300 10
Sortowanie danych w podzapytaniu
Operator ALL  warunek musi być spełniony przez wszystkie wartości wybrane
ALL
ALL
ALL
w podzapytaniu.
Wybierzmy wszystkich pracowników, którzy zarabiają więcej ni\ ktokolwiek W podzapytaniu nie mo\e występować klauzula ORDER BY. Klauzula ORDER BY
w departamencie 30: mo\e wystąpić tylko raz dla całego zapytania i wtedy musi pojawić się jako ostatnia.
SELECT ENAME, SAL, DEPTNO
FROM EMP
Zapytania skorelowane
WHERE SAL > ALL (SELECT DISTINCT SAL
FROM EMP
WHERE DEPTNO=30)
ORDER BY SAL; Blok skorelowany jest szczególnym przypadkiem zagnie\d\onego zapytania. Zwykłe
podzapytanie jest wykonywane raz, na samym początku, a do jego wyników odwołuje się
ENAME SAL DEPTNO
zapytanie zewnętrzne. W przypadku zapytania skorelowanego podzapytanie jest
---------- ---------- ----------
JONES 2975 20 wykonywane dla ka\dego wiersza z zapytania zewnętrznego.
FORD 3000 20
SCOTT 3000 20
KING 5000 10
Aby znalezć osoby, które zarabiają mniej ni\ wynosi średnia w ich zawodach, napiszemy:
Najwy\szy zarobek w departamencie 30 wynosi 2850. Zapytanie wybierze wszystkich,
SELECT ENAME, SAL, DEPTNO, AVG(SAL)
którzy zarabiają więcej ni\ 2850. FROM EMP E
WHERE SAL < (SELECT AVG(SAL)
FROM EMP
WHERE JOB=E.JOB)
ORDER BY JOB;
Klauzula HAVING z zagnie\d\onymi zapytaniami
ENAME SAL DEPTNO
---------- ---------- ----------
Podzapytania mogą występować równie\ w klauzuli HAVING (przypominamy 
JAMES 950 30
klauzula HAVING odnosi się do grup wierszy). Nie istnieje limit na liczbę poziomów
SMITH 800 20
CLARK 2450 10
zagnie\d\ania podzapytań.
MARTIN 1250 30
Aby wybrać zawody, w których średnia płaca jest wy\sza ni\ średnia płaca w zawodzie
WARD 1250 30
'MANAGER', napiszemy:
SELECT JOB, AVG(SAL)
Operator EXIST
FROM EMP
HAVING AVG(SAL) > (SELECT AVG(SAL)
FROM EMP
W przypadku zapytań skorelowanych czasami interesuje nas tylko, czy wiersz spełniający
WHERE JOB='MANAGER')
EXIST.
EXIST
EXIST
GROUP BY JOB; podane warunki istnieje. Wtedy stosujemy operator EXIST
JOB AVG(SAL)
--------- ----------
ANALYST 3000
PRESIDENT 5000
Strona 59 Strona 60
Podstawy języka SQL Podstawy języka SQL
Aby za pomocą operatora EXIST znalezć pracowników, którzy mają podwładnych,
EXIST
EXIST
EXIST
napiszemy:
Ćwiczenia
SELECT ENAME, SAL, DEPTNO
FROM EMP E
WHERE EXISTS (SELECT EMPNO
1. Znajdz pracowników zarabiających maksymalna pensję na ich stanowiskach pracy.
FROM EMP
Uporządkuj ich według malejących zarobków.
WHERE EMP.MGR=E.EMPNO)
ORDER BY DEPTNO;
JOB ENAME SAL
ENAME SAL DEPTNO
--------- ---------- ---------
---------- ---------- ----------
PRESIDENT KING 5000
KING 5000 10
ANALYST FORD 3000
CLARK 2450 10
ANALYST SCOTT 3000
JONES 2975 20
MANAGER JONES 2975
SCOTT 3000 20
SALESMAN ALLEN 1600
FORD 3000 20
CLERK MILLER 1300
BLAKE 2850 30
2. Znajdz pracowników zarabiających minimalną pensję na ich stanowiskach pracy.
Aby znalezć departament, w którym nikt nie pracuje:
Uporządkuj ich według wzrastających pensji.
SELECT DNAME, DEPTNO
JOB ENAME SAL
FROM DEPT D
--------- ---------- ---------
WHERE NOT EXISTS (SELECT 1
CLERK SMITH 800
FROM EMP E
SALESMAN MARTIN 1250
WHERE E.DEPTNO=D.DEPTNO)
SALESMAN WARD 1250
ORDER BY DEPTNO;
MANAGER CLARK 2450
ANALYST FORD 3000
DNAME DEPTNO
ANALYST SCOTT 3000
-------------- ----------
PRESIDENT KING 5000
OPERATIONS 40
3 Wska\ dla ka\dego departamentu ostatnio zatrudnionych pracowników. Uporządkuj
Zauwa\my, \e zapytanie wewnętrzne nie musi zwracać \adnej wartości z tabeli, istotne
według dat zatrudnienia.
jest, czy w ogóle zostanie zwrócony wiersz, a nie jego zawartość.
DEPTNO ENAME HIREDATE
--------- ---------- ---------
30 JAMES 03-DEC-81
10 MILLER 23-JAN-82
20 ADAMS 12-JAN-83
4. Podaj następujące dane o pracownikach, których zarobki przekraczają średnią ich
departamentów. Uporządkuj według numerów departamentów.
ENAME SALARY DEPTNO
---------- --------- ---------
KING 5000 10
JONES 2975 20
FORD 3000 20
SCOTT 3000 20
BLAKE 2850 30
ALLEN 1600 30
5. Stosując podzapytanie, znajdz departamenty, w których nikt nie pracuje.
DEPTNO DNAME
--------- --------------
40 OPERATIONS
Strona 61 Strona 62
Podstawy języka SQL Podstawy języka SQL
Struktury danych ORACLE
" Nowe tabele mogą być tworzone tak\e podczas pracy u\ytkowników z bazą danych.
" Pamięć dla tabel jest przydzielana w miarę potrzeb. Pamięć dla bazy danych jako
całości przydzielana jest z góry, ale mo\liwe jest rozszerzanie jej rozmiarów przy
zastosowaniu odpowiednich opcji.
" Struktury danych mogą być modyfikowane w trakcie pracy systemu (chyba, \e
akurat na nich dokonywane są zmiany przez u\ytkowników).
" U\ytkownicy mogą zakładać własne, prywatne struktury.
Tworzenie tabel
Nazwa tabeli musi być zgodna regułami nazewnictwa obiektów bazy danych Oracle:
" nazwa obiektu musi zaczynać się od litery;
Język definiowania danych
" nazwa mo\e zawierać litery, cyfry oraz znak podkreślenia. Mo\liwe, ale nie
zalecanie jest u\ywanie znaków $ i #;
" małe i du\e litery są równowa\ne;
" długość nazwy nie mo\e przekraczać 30 znaków;
" w obrębie bazy danych nie mogą istnieć dwa obiekty o tej samej nazwie  nazwa
musi być unikalna;
" nazwa nie mo\e być nazwą zastrze\oną dla języka;
" jeśli nazwa nie spełnia tych zaleceń to musi być otoczona podwójnymi
cudzysłowami. Wtedy rozró\niane są małe i wielkie litery.
Definiując tabelę musimy podać listę kolumn opisywaną przez nazwę kolumny, jej typ
i czasami długość przechowywanej wartości.
Typy kolumn
Ka\da kolumna musi mieć określony typ danych:
CHAR (n) ciąg dowolnych znaków stałej długości, parametr n wskazuje
maksymalną długość ciągu
VARCHAR2 (n) ciąg znaków zmiennej długości, parametr n wskazuje maksymalną
długość ciągu
VARCHAR (n)
NUMBER (p,s) liczba o precyzji p i skali s, precyzja (liczba cyfr znaczących) mo\e
przyjmować wartości od 1 do 38, skala (liczba cyfr po przecinku)
wartości od -84 do 127
DATE daty w przedziale między 1 stycznia 4712 roku a 31 grudnia 4712
naszej ery, w dacie przechowywany jest tez składnik czasu
Strona 63 Strona 64
Podstawy języka SQL Podstawy języka SQL
Opcja NULL
NULL (domyślna) oznacza, \e pola tej kolumny mogą przyjmować wartość NULL.
NULL
LONG ciąg znaków zmiennej długości o maksymalnym zakresie 2 GB, NULL
w tabeli mo\e być tylko jedna kolumna typu LONG
Opcja NOT NULL oznacza, \e pola tej kolumny muszą mieć określoną wartość, nie mogą
NOT NULL
NOT NULL
NOT NULL
przyjmować wartości NULL.
RAW (n) ciąg bajtów o długości do n bajtów, maksymalne n=2000
LONG RAW ciąg bajtów o maksymalnej długości do 2 GB, w tabeli mo\e być tylko
Przykład
jedna kolumna typu LONG RAW
ROWID do przechowywania adresów fizycznych wierszy
CREATE TABLE DEPT (
DEPTNO NUMBER NOT NULL,
DNAME VARCHAR2(12));
Polecenie tworzenia tabel
Polecenie DESCRIBE
Do budowania tabel słu\y polecenie CREATE TABLE:
Aby zobaczyć, jakie tabele ma kolumny i jakie są na nie nało\one warunki, napiszemy:
CREATE TABLE nazwa_tablicy
CREATE TABLE
CREATE TABLE
CREATE TABLE
DESC DESCRIBE
(nazwa_kolumny typ (rozmiar), DESC [DESCRIBE] nazwa_tabeli;
DESC DESCRIBE
DESC DESCRIBE
nazwa_kolumny typ (rozmiar),
Przykład
& );
DESC DEPT;
Przykład
Nazwa kolumny Wartość Typ
Tworzenie tabeli DEPT:
------------------------------ -------- ----
DEPTNO NOT NULL NUMBER(2)
CREATE TABLE DEPT DNAME CHAR(14)
(DEPTNO NUMBER(2), LOC CHAR(13)
DNAME VARCHAR2(12),
LOC VARCHAR2(12));
Klauzula CONSTRAINT
Warunki integralności
Do definiowania innych ni\ NOT NULL warunków integralności słu\y klauzula
NOT NULL
NOT NULL
NOT NULL
CONSTRAINT. Warunki mogą być wpisanie bezpośrednio przy definicji kolumny lub na
Podczas definiowania tabeli mamy mo\liwość określić, jakie warunki powinny spełniać
końcu po zdefiniowaniu wszystkich kolumn.
dane w wierszach wprowadzanych do tablicy. Warunki takie nazywa się warunkami
integralności (constraints).
Warunek umieszczony przy definicji kolumny:
Mo\emy za\ądać, aby wypełnienie wartości w danej kolumnie było obowiązkowe, aby
wartości pochodziły z określonego zakresu, aby były unikalne itd.
CREATE TABLE nazwa_tablicy
CREATE TABLE
CREATE TABLE
CREATE TABLE
(...
nazwa_kolumny typ (rozmiar)
Opcje NULL i NOT NULL
CONSTRAINT nazwa_warunku typ_warunku [warunek],
CONSTRAINT
CONSTRAINT
CONSTRAINT
Podczas definiowania kolumn tabeli mo\emy za\ądać, aby wiersze tej tabeli w polach tej & );
kolumny nie dopuszczały wartości nieokreślonych.
CREATE TABLE nazwa_tablicy
CREATE TABLE
CREATE TABLE
CREATE TABLE
(nazwa_kolumny typ (rozmiar) [NULL | NOT NULL],
NULL NOT NULL
NULL NOT NULL
NULL NOT NULL
nazwa_kolumny typ (rozmiar) [NULL NOT NULL],
NULL | NOT NULL
NULL NOT NULL
NULL NOT NULL
& );
Strona 65 Strona 66
Podstawy języka SQL Podstawy języka SQL
Warunek umieszczony po definicjach wszystkich kolumn: Definicja warunku przy definicji kolumny:
CREATE TABLE nazwa_tablicy kolumna typ rozmiar CONSTRAINT PRIMARY KEY
CREATE TABLE CONSTRAINT PRIMARY KEY
CREATE TABLE CONSTRAINT nazwa_warunku PRIMARY KEY;
CREATE TABLE CONSTRAINT PRIMARY KEY
(...
Definicja warunku po definicji wszystkich kolumn:
nazwa_kolumny typ (rozmiar),
&
CONSTRAINT nazwa_warunku
CONSTRAINT
CONSTRAINT
CONSTRAINT
CONSTRAINT nazwa_warunku typ_warunku warunek,
CONSTRAINT
CONSTRAINT
CONSTRAINT
PRIMARY KEY (kolumna_1, kolumna_2, & );
PRIMARY KEY
PRIMARY KEY
PRIMARY KEY
CONSTRAINT
CONSTRAINT
CONSTRAINT nazwa_warunku typ_warunku warunek,
CONSTRAINT
& ); W tabeli mo\e być tylko jeden klucz główny. Wszystkie kolumny wchodzące w skład
NOT
klucza głównego są obowiązkowe  nie musimy dodatkowo nakładać warunku NOT
NOT
NOT
NULL. Dla ka\dego wiersza zestaw wartości dla klucza głównego musi być unikalny 
NULL
NULL
" nazwa_warunku  jest identyfikatorem warunku integralności, nie jest wymagane NULL
jego podanie, ale wtedy system nada warunkowi własny, zazwyczaj nieczytelny inaczej Oracle zgłosi błąd.
identyfikator. Identyfikator jest potrzebny przy komendach włączających
Przykład
i wyłączających warunki integralności.
" typ_warunku  jeden z następujących: CHECK, PRIMARY KEY, UNIQUE,
CHECK PRIMARY KEY UNIQUE
CHECK PRIMARY KEY UNIQUE
CHECK PRIMARY KEY UNIQUE
CREATE TABLE emp
FOREIGN KEY
FOREIGN KEY
FOREIGN KEY.
FOREIGN KEY
( empno NUMBER(4) CONSTRAINT emp_pk PRIMARY KEY,
" warunek  dodatkowe informacje w zale\ności od typu warunku, w przypadku ...);
umieszczenia klauzuli CONSTRAINT po definicjach kolumn warunek musi być
lub
zawsze określony.
CREATE TABLE emp
( empno NUMBER(4),
Warunek CHECK ...,
CONSTRAINT emp_pk PRIMARY KEY (empno),
...);
Określa warunek, jaki musi spełniać wartość w kolumnie ka\dego wstawianego wiersza,
warunek nie mo\e się odwoływać się do innych tabel.
Warunek UNIQUE
CONSTRAINT CHECK (warunek logiczny);
CONSTRAINT CHECK
CONSTRAINT CHECK
CONSTRAINT CHECK
Definiuje klucz unikalny tabeli. Klucz unikalny jest podobny do klucza głównego, z tym,
Warunek logiczny musi być prosty, nie wolno stosować podzapytań. Nie wolno te\
\e nie wymusza automatycznie warunku NOT NULL na swoich kolumnach.
NOT NULL
NOT NULL
NOT NULL
u\ywać funkcji, których wartość zale\y od okoliczności wywołania, np. SYSDATE czy
Jeśli kluczem unikalnym jest jedna kolumna, wygodniej warunek zapisać po definicji tej
USER.
kolumny. W przypadku klucza opartego na kilku kolumnach wygodniej zdefiniować go po
definicji wszystkich kolumn.
Przykład
Definicja warunku przy definicji kolumny:
CREATE TABLE emp
(...
ENAME VARCHAR2(10) CONSTRAINT upper_name_ch CHECK (ENAME=UPPER(ENAME)),
kolumna typ rozmiar CONSTRAINT UNIQUE
CONSTRAINT nazwa_warunku UNIQUE
CONSTRAINT UNIQUE
CONSTRAINT UNIQUE
...);
Definicja warunku po definicji wszystkich kolumn:
Warunek PRIMARY KEY
CONSTRAINT nazwa_warunku UNIQUE (kolumna_1, kolumna_2,...)
CONSTRAINT UNIQUE
CONSTRAINT UNIQUE
CONSTRAINT UNIQUE
Definiuje klucz główny tabeli. Jeśli kluczem głównym jest jedna kolumna, wygodniej
W tabeli mo\e być wiele kluczy unikalnych. Dla ka\dego wiersza zestaw wartości dla
warunek zapisać po definicji tej kolumny. W przypadku klucza głównego opartego na
klucza unikalnego musi być unikalny  inaczej Oracle zgłosi błąd. Warunek NOT NULL
NOT NULL
NOT NULL
NOT NULL
kilku kolumnach wygodniej zdefiniować go po definicji wszystkich kolumn.
mo\na do kolumn klucza unikalnego dopisać osobno.
Strona 67 Strona 68
Podstawy języka SQL Podstawy języka SQL
Przykład Przykład
W poni\szej tabeli emp są zdefiniowane dwa klucze obce:
CREATE TABLE dept
( dname VARCHAR2(12) CONSTRAINT dept_uk UNIQUE " deptno  z kolumną deptno tabeli dept,
...);
" mgr  z kolumną empno tabeli emp i \ądaniem usunięcia wszystkich pracowników
w przypadku usunięcia szefa.
Warunek FOREIGN KEY CREATE TABLE EMP (
EMPNO NUMBER(4) CONSTRAINT EMP_PRIMARY_KEY PRIMARY KEY,
ENAME VARCHAR(10),
JOB VARCHAR(9),
Definiuje klucz obcy, reprezentujący związek z inną tabelą. Sprawia \e, wartości kolumn
MGR NUMBER(4) CONSTRAINT EMP_SELF_KEY REFERENCES EMP (EMPNO),
z tym kluczem mogą przyjmować tylko wartości z klucza głównego lub unikalnego innej,
HIREDATE DATE,
wskazanej tabeli.
SAL NUMBER(7,2),
COMM NUMBER(7,2),
Jeśli kluczem obcym jest jedna kolumna, wygodniej warunek zapisać po definicji tej
DEPTNO NUMBER(2) NOT NULL
kolumny. W przypadku klucza opartego na kilku kolumnach wygodniej zdefiniować go po
CONSTRAINT EMP_FOREIGN_KEY FOREIGN KEY REFERENCES DEPT
ON DELETE CASCADE);
definicji wszystkich kolumn.
Definicja warunku przy definicji kolumny:
Klauzula DEFAULT
kolumna typ rozmiar CONSTRAINT
CONSTRAINT nazwa_warunku
CONSTRAINT
CONSTRAINT
Klauzula DEFAULT słu\y do wskazania, jaka wartość ma być wstawiona do kolumny,
REFERENCES
REFERENCES nazwa_tabeli lista_kolumn;
REFERENCES
REFERENCES
jeśli nie została określona konkretna wartość.
Definicja warunku po definicji wszystkich kolumn:
...
kolumna typ (rozmiar) DEFAULT
DEFAULT wyra\enie
DEFAULT
DEFAULT
CONSTRAINT nazwa_warunku
CONSTRAINT
CONSTRAINT
CONSTRAINT
...
FOREIGN KEY (lista kolumn tabeli definiowanej)
FOREIGN KEY
FOREIGN KEY
FOREIGN KEY
REFERENCES nazwa_tabeli lista_kolumn;
REFERENCES
REFERENCES
REFERENCES
Wyra\enie musi być proste, nie wolno stosować podzapytań, dozwolone są funkcje
SYSDATE i USER.
Aby klucz obcy mógł być zdefiniowany musi być zdefiniowana wcześniej tabela, do której
klucz ten się odwołuje, a na zestawie kolumn wskazanym przez klucz obcy musi być
zdefiniowany klucz główny lub unikalny. Jeśli odwołujemy się do klucza głównego obcej
tabeli, to nie musimy specyfikować listy kolumn tego klucza. Tworzenie tabeli przez zapytanie
Wynik zapytania mo\na zapamiętać jako nowa tabelę.
Własności klucza obcego
CREATE TABLE nazwa_tabeli
CREATE TABLE
CREATE TABLE
CREATE TABLE
" W tabeli z kluczem obcym nie mo\na wstawić wiersza o wartościach klucza obcego
[(nazwa_kolumny [NULL | NOT NULL], & )]
NULL NOT NULL
NULL NOT NULL
NULL NOT NULL
nie mających odpowiedników w tabeli obcej.
AS SELECT zapytanie;
AS SELECT
AS SELECT
AS SELECT
" W tabeli z kluczem obcym nie mo\na zmodyfikować wiersza na wartości klucza
obcego nie mających odpowiedników w tabeli obcej.
Lista nazw nowej tabeli mo\e być pominięta, jeśli są poprawnie wskazane nazwy kolumn
" Z tabeli obcej nie mo\na usunąć wiersza do którego odwołują się wartości klucza
w poleceniu SELECT.
obcego innej tabeli. Mo\na za\ądać usuwania wraz z wierszem wszystkich wierszy
Jeśli jest podana lista kolumn nowej tabeli, ilość pozycji musi się pokrywać z ilością
w tabeli z kluczem obcym, do których ten wiersz się odwołuje. W tym celu przy
pozycji występującą na liście wyboru polecenia SELECT.
klauzuli CONSTRAINT definiującej klucz obcy nale\y umieścić dyrektywę ON
ON
ON
ON
DELETE CASCADE.
DELETE CASCADE
DELETE CASCADE
DELETE CASCADE
Strona 69 Strona 70
Podstawy języka SQL Podstawy języka SQL
Przykład
Aby utworzyć tabelę EMP_CLERK, napiszemy:
Zarządzanie warunkami integralności
CREATE TABLE EMP_CLERK
AS
SELECT EMPNO, ENAME, JOB, SAL
Warunki integralności dodajemy do tabeli tak jak kolumny, z tym, \e u\ywamy składni
FROM EMP
takiej, jak przy definiowaniu warunków po definicjach kolumn.
WHERE JOB='CLERK';
Instrukcja przetworzona.
ALTER TABLE nazwa
ALTER TABLE
ALTER TABLE
ALTER TABLE
ADD (CONSTRAINT nazwa_warunku typ_warunku warunek,
ADD CONSTRAINT
ADD CONSTRAINT
ADD CONSTRAINT
Opis utworzonej tabeli uzyskamy poleceniem DESC
DESC:
DESC
DESC
...);
DESC EMP_CLERK
Sprawdzanie warunków integralności mo\na włączać i wyłączać:
Nazwa kolumny Wartość Typ
------------------------------ -------- ----
EMPNO NOT NULL NUMBER(4)
Włączanie:
ENAME VARCHAR2(10)
JOB VARCHAR2(9)
SAL NUMBER(7,2)
ALTER TABLE nazwa ENABLE CONSTRAINT nazwa_warunku;
ALTER TABLE ENABLE CONSTRAINT
ALTER TABLE ENABLE CONSTRAINT
ALTER TABLE ENABLE CONSTRAINT
Wyłączanie:
Zmiana definicji tabeli
ALTER TABLE nazwa DISABLE CONSTRAINT nazwa_warunku;
ALTER TABLE DISABLE CONSTRAINT
ALTER TABLE DISABLE CONSTRAINT
ALTER TABLE DISABLE CONSTRAINT
Do zmiany definicji tabeli słu\y polecenie ALTER TABLE. Umo\liwia ono dodawanie
Podczas włączania sprawdzania warunków integralności Oracle sprawdza, czy wszystkie
nowych kolumn, zmianę maksymalnego rozmiaru wartości oraz zarządzanie warunkami
wiersze tabeli spełniają zadane warunki. Jeśli choć jedno sprawdzenie zakończy się
integralności.
błędem, to warunek nie zostanie włączony.
Warunek integralności mo\na usunąć przy pomocy klauzuli DROP:
Dodawanie kolumn
ALTER TABLE nazwa
ALTER TABLE
ALTER TABLE
ALTER TABLE
Do dodania nowej kolumny słu\y klauzula ADD.
DROP CONSTRAINT nazwa_warunku;
DROP CONSTRAINT
DROP CONSTRAINT
DROP CONSTRAINT
ALTER TABLE nazwa
ALTER TABLE
ALTER TABLE
ALTER TABLE
ADD nazwa_kolumny typ (rozmiar),
ADD
ADD
ADD
Modyfikacja definicji kolumny
nazwa_kolumny typ (rozmiar),
...);
Do modyfikowania definicji kolumny słu\y klauzula MODIFY:
Przykład
ALTER TABLE nazwa
ALTER TABLE
ALTER TABLE
ALTER TABLE
MODIFY nazwa_kolumny typ (rozmiar) [NULL | NOT NULL],
MODIFY NULL NOT NULL
MODIFY NULL NOT NULL
ALTER TABLE emp MODIFY NULL NOT NULL
ADD adress VARCHAR2(40);
...);
Nie mo\na zmienić kolumny w której występują wartości NULL na NOT NULL.
NOT NULL
NOT NULL
NOT NULL
Do niepustej tabeli nie mo\na dodać kolumny o własności NOT NULL.
NOT NULL
NOT NULL
NOT NULL
Nie mo\na zmniejszyć rozmiaru kolumny ani zmienić jej rozmiaru, jeśli kolumna nie jest
pusta.
Strona 71 Strona 72
Podstawy języka SQL Podstawy języka SQL
Usuwanie tabel
Do usuwania tabel słu\y polecenie DROP TABLE.
DROP TABLE nazwa;
DROP TABLE
DROP TABLE
DROP TABLE
Usunięcie tabeli powoduje:
" utratę wszystkich danych w niej zawartych i wszystkich indeksów związanych
z tabelą,
" wszystkie perspektywy i synonimy oparte na tabeli tracą sens,
" polecenie jest automatycznie zatwierdzane (nieodwracalne),
" jeśli istnieją tablice, których klucze obce są powiązane z usuwaną tabela to usuwanie
się nie powiedzie, chyba \e dodamy na końcu klauzulę CASCADE
CONSTRAINTS,
" tabelę usunąć mo\e właściciel tabeli lub administrator bazy.
Zmiana nazwy tabeli
Nazwę tabeli zmieniamy poleceniem RENAME TABLE:
RENAME TABLE stara_nazwa TO nowa_nazwa;
RENAME TABLE TO
RENAME TABLE TO
RENAME TABLE TO
Strona 73 Strona 74
Podstawy języka SQL Podstawy języka SQL
Wstawianie wierszy
Polecenie INSERT
Polecenie INSERT słu\y do wstawiania nowych wierszy do tabeli:
INSERT INTO nazwa_tabeli [(lista_kolumn)]
INSERT INTO
INSERT INTO
INSERT INTO
VALUES (lista_wartości);
VALUES
VALUES
VALUES
Przy wstawianiu do wszystkich kolumn tabeli nie musimy podawać listy kolumn, ale
wtedy musimy wartości wprowadzać w takiej kolejności, jaka była wyspecyfikowana
podczas polecenia CREATE TABLE. Z tego względu, aby uniezale\nić się od
pózniejszych modyfikacji tabeli bezpieczniej jest podawać listę kolumn w klauzuli
Język manipulowania danymi
INSERT INTO.
Przykład
INSERT INTO dept (deptno, dname, loc)
VALUES (50, 'SERVICE', 'NEW YORK');
W ka\dym poleceniu INSERT mo\na wstawić tylko jeden wiersz.
W poleceniu INSERT dopuszczalne są funkcje SQL dotyczące pojedynczych wierszy, nie
wolno natomiast u\ywać podzapytań.
Wstawianie wierszy wybranych w podzapytaniu
Mo\emy wstawić do tabeli wiersze, które są wynikiem zapytania SELECT.
INSERT INTO nazwa_tabeli [lista_kolumn]
INSERT INTO
INSERT INTO
INSERT INTO
SELECT lista_wyra\eń
SELECT
SELECT
SELECT
FROM ...
FROM
FROM
FROM
W ten sposób mo\emy za pomocą pojedynczego polecenia INSERT wstawić wiele
wierszy.
Przykład
Aby skopiować do tabeli MANAGER wszystkich pracowników pracujących na
stanowisku MANAGER napiszemy:
Strona 75 Strona 76
Podstawy języka SQL Podstawy języka SQL
INSERT INTO manager
SELECT (empno, ename, sal, job, hiredate) DELETE FROM emp
FROM emp WHERE job='MANAGER';
WHERE job='MANAGER';
Zostaną usunięci prasownicy pracujący na stanowisku MANAGER.
Modyfikacja wierszy
Transakcje
Polecenie UPDATE
Co to jest transakcja?
Do zmiany zawartości wierszy słu\y polecenie UPDATE.
Transakcja to operacja zmiany stanu bazy, składającą się z wielu operacji aktualizacji
UPDATE nazwa_tabeli [alias] wierszy w tabeli. W przypadku przerwania operacji zmiany bazy w trakcie trwania
UPDATE
UPDATE
UPDATE
transakcji, baza powinna wrócić do stanu sprzed transakcji. Dopiero po zakończeniu
SET kolumna = { wyra\enie | podzapytanie }
SET
SET
SET
transakcji zmiany dokonane w czasie transakcji będą widoczne dla innych u\ytkowników.
[ , kolumna= { wyra\enie | podzapytanie } ...]
Transakcja rozpoczyna się automatycznie podczas wykonywania pierwszej operacji
[ WHERE warunek ];
WHERE
WHERE
WHERE
DML  zmiany stanu bazy i trwa do:
" jawnego zatwierdzenia transakcji  polecenie COMMIT. Zmiany stają się
Przykład
nieodwracalne i widoczne dla innych u\ytkowników;
UPDATE dept
" jawnego polecenia wycofania transakcji  polecenie ROLLBACK. Baza danych
SET dname='MARKETING'
wraca wtedy do stanu sprzed transakcji;
loc='DENVER'
WHERE deptno=20; " wykonania polecenia DDL (CREATE, ALTER, DROP). Ka\de takie polecenie jest
transakcją i zatwierdza niezatwierdzoną transakcję wcześniejszą;
" zakończenia sesji aplikacji  w zale\ności od aplikacji transakcja jest albo
Jeśli nie wpiszemy klauzuli WHERE, to zostaną zmodyfikowane wszystkie
zatwierdzana albo wycofywana;
wiersze tabeli.
" przerwania sesji  awaria sieci, brak zasilania  transakcje są wycofywane.
W poleceniu UPDATE mo\na u\ywać podzapytań, zarówno zagnie\d\onych jak
Transakcja powinna tworzyć spójną całość, nale\y unikać zbyt długich transakcji 
i skorelowanych.
powinno się je zatwierdzać po wykonaniu części stanowiącej logiczną całość. Dzięki temu
oszczędzamy zasoby systemowe i umo\liwiamy innym u\ytkownikom korzystanie
z wprowadzonych zmian.
Usuwanie wierszy
Polecenie COMMIT
Polecenie DELETE
Polecenie to słu\y do jawnego zatwierdzania transakcji.
COMMIT WORK
Do usuwania wierszy z tabeli słu\y polecenie DELETE. COMMIT [WORK];
COMMIT WORK
COMMIT WORK
DELETE [FROM] tabela Polecenie to powoduje:
DELETE FROM
DELETE FROM
DELETE FROM
[ WHERE warunek ]; " zakończenie transakcji,
WHERE
WHERE
WHERE
" zatwierdzenie zmian  stają się nieodwracalne,
Warunek w klauzuli WHERE określa, które wiersze będą usunięte.
" zmiany stają się widoczne dla innych u\ytkowników,
" usunięcie wszystkich blokad i wszystkich punktów zachowania.
Przykład
Strona 77 Strona 78
Podstawy języka SQL Podstawy języka SQL
Wykonanie jakiegokolwiek polecenia DDL spowoduje taki sam efekt, jak wykonanie
Automatyczny COMMIT
polecenia COMMIT.
W SQL*Plus mo\emy wymusić automatyczne zatwierdzanie transakcji po ka\dym
poleceniu INSERT, UPDATE i DELETE.
Polecenie ROLLBACK
SET AUTO [COMMIT ON
SET AUTO COMMIT ON
SET AUTO COMMIT] ON
SET AUTO COMMIT ON
Słu\y do jawnego wycofywania transakcji.
Dyrektywę odwołujemy poleceniem:
ROLLBACK [WORK
ROLLBACK WORK
ROLLBACK WORK];
ROLLBACK WORK
SET AUTO [COMMIT OFF
SET AUTO COMMIT OFF
SET AUTO COMMIT] OFF
SET AUTO COMMIT OFF
Polecenie ROLBACK powoduje:
" zakończenie transakcji,
" wycofanie wszystkich zmian dokonanych w sesji od początku transakcji,
" usunięcie wszystkich blokad i wszystkich punktów zachowania.
Punkty zachowania
Punkty zachowania stosuje się, aby podzielić transakcje na mniejsze części.
SAVEPOINT nazwa_punktu_zachowania;
SAVEPOINT
SAVEPOINT
SAVEPOINT
Wprowadzenie punktu zachowania pozwala wycofać transakcję do określonego punktu
zachowania, nie tracąc przy tym zmian wprowadzonych wcześniej.
Do wycofania zmian do ostatniego punktu zachowania słu\y następujące polecenie:
ROLLBACK [WORK TO SAVEPOINT
ROLLBACK WORK TO SAVEPOINT
ROLLBACK WORK] TO [SAVEPOINT] nazwa_punktu_zachowania;
ROLLBACK WORK TO SAVEPOINT
Polecenie to:
" wycofuje część transakcji do podanego punktu zachowania,
" zachowuje ten punkt zachowania, ale powoduje utartę wszystkich pózniejszych,
" zwalnia blokady zało\one przez polecenia wydane po tym punkcie zachowania.
Niejawne wycofanie
Niejawne całkowite wycofanie transakcji ma miejsce w przypadku np. przerwania sesji
u\ytkownika, awarii komputera, braku zasilania itp.
Niejawne częściowe wycofanie transakcji ma miejsce w przypadku błędu wykonania
polecenia. Wycofywane są wtedy zmiany dokonane przez ten błędny rozkaz.
Strona 79 Strona 80
Podstawy języka SQL Podstawy języka SQL
Perspektywy
Perspektywa (view) posiada następujące cechy:
" jest definiowana w oparciu o tabelę bazową lub inną perspektywę,.
" jest przechowywana w postaci definiującego ją rozkazu SELECT,
" nie przechowuje danych  operuje danymi zgromadzonymi w tabelach bazowych.
Perspektyw u\ywamy, aby:
" ograniczyć dostęp do wszystkich danych z tabeli,
" ułatwić u\ytkownikom pobieranie rezultatów skomplikowanych zapytań,
" aby zwolnić u\ytkowników od wnikania w struktury danych,
" aby udostępnić u\ytkownikom dane bazowe sformatowane i przedstawione
w czytelny sposób.
Perspektywy
Tworzenie perspektyw
Polecenie CREATE VIEW
Perspektywę tworzy się za pomocą polecenia CREATE VIEW:
CREATE [OR REPLACE] VIEW nazwa_perspektywy
CREATE OR REPLACE VIEW
CREATE OR REPLACE VIEW
CREATE OR REPLACE VIEW
[(lista_kolumn)]
AS
AS
AS
AS
SELECT &
SELECT
SELECT
SELECT
Lista_kolumn to lista nazw kolumn perspektywy, muszą one odpowiadać pozycjom
wyboru z listy SELECT.
Jeśli perspektywa o danej nazwie ju\ istnieje, to aby utworzyć na jej miejsce nową musimy
usunąć starą lub u\yć opcji OR REPLACE.
OR REPLACE
OR REPLACE
OR REPLACE
Przykład
Aby utworzyć perspektywę zawierająca niektóre dane o pracownikach zatrudnionych na
stanowisku 'MANAGER', napiszemy:
CREATE VIEW Emp_Manager
AS
SELECT empno, ename, sal, deptno
FROM emp
WHERE job='MANAGER';
Strona 81 Strona 82
Podstawy języka SQL Podstawy języka SQL
Perspektywy u\ywa się jak zwykłej tabeli:
SELECT *
FROM Emp_Manager
ORDER BY ename;
W definicji perspektywy nie mo\e występować klauzula ORDER BY.
U\ycie perspektyw
Perspektywy mogą słu\yć tak\e do modyfikacji danych w tabeli bazowej.
Jeśli poprzez perspektywę zmodyfikujemy dane tabeli bazowej, mo\e się okazać, \e po
modyfikacji będą one niedostępne poprzez tą perspektywę. Aby uniknąć tego mo\emy
nało\yć opcję CHECK OPTION, tak aby nie były dozwolone takie modyfikacje wierszy,
CHECK OPTION
CHECK OPTION
CHECK OPTION
które spowodują ich wyrzucenie poza perspektywę.
Przykład
CREATE VIEW Emp_Manager
AS
SELECT empno, ename, sal, job, deptno
FROM emp
WHERE job='MANAGER'
WITH CHECK OPTION;
System nie pozwoli teraz zmienić w wierszu pola job z MANAGER na inną wartość.
Usuwanie perspektywy
Perspektywę usuwa się poleceniem DROP VIEW:
DROP VIEW nazwa_perspektywy;
DROP VIEW
DROP VIEW
DROP VIEW
Perspektywa mo\e być usunięta tylko przez jej właściciela lub administratora.
Strona 83 Strona 84
Podstawy języka SQL Podstawy języka SQL
Ka\dy, kto rozpoczyna pracę z Oracle musi być zidentyfikowany poprzez podanie
identyfikatora i hasła, aby móc wykonać operacje, do których jako ten u\ytkownik jest
uprawniony.
Zarządzanie u\ytkownikami
Za zarządzanie u\ytkownikami, ich uprawnieniami i zasobami odpowiedzialny jest
administrator. Mo\e on:
" tworzyć i usuwać u\ytkowników,
" zmieniać hasła u\ytkowników,
" wymusić identyfikacje u\ytkowników przez system operacyjny,
" ograniczyć ilościowo zasoby, które mo\e zajmować u\ytkownik,
" przydzielić domyślne miejsce w bazie, gdzie będą przechowywane obiekty
u\ytkownika,
" zdefiniować uprawnienia u\ytkownika.
U\ytkownicy i uprawnienia
Dokładnie te zagadnienia są omawiane na kursach administracji.
Tworzenie u\ytkownika
U\ytkownika tworzy administrator poleceniem CREATE USER:
CREATE USER u\ytkownik
CREATE USER
CREATE USER
CREATE USER
IDENTIFIED BY hasło;
IDENTIFIED BY
IDENTIFIED BY
IDENTIFIED BY
Tak utworzony u\ytkownik istnieje ju\ w bazie, ale nie ma jeszcze \adnych uprawnień,
a w szczególności nie mo\e podłączyć się do bazy.
Usuwanie u\ytkownika
Administrator usuwa u\ytkownika poleceniem DROP USER:
DROP USER u\ytkownik;
DROP USER
DROP USER
DROP USER
Jeśli u\ytkownik jest właścicielem jakiś obiektów, to usunięcie się nie powiedzie, chyba \e
na końcu dodamy słowo kluczowe CASCADE. Wtedy razem z u\ytkownikiem usuwane są
CASCADE
CASCADE
CASCADE
utworzone przez niego obiekty.
Strona 85 Strona 86
Podstawy języka SQL Podstawy języka SQL
Odbieranie uprawnień systemowych
Zmiana hasła
Do odbierania uprawnień słu\y polecenie REVOKE:
REVOKE uprawnienie [, uprawnienie...] FROM u\ytkownik;
REVOKE FROM
REVOKE FROM
Ka\dy u\ytkownik mo\e zmienić swoje hasło. Słu\y do tego polecenie ALTER USER. REVOKE FROM
ALTER USER u\ytkownik IDENTIFIED BY hasło; Polecenie REVOKE odbiera wyspecyfikowane uprawnienie u\ytkownikowi,
ALTER USER IDENTIFIED BY
ALTER USER IDENTIFIED BY
ALTER USER IDENTIFIED BY
pozostawiając inne bez zmian.
Przykład
Jeśli u\ytkownik Adams chce zmienić hasło na 'tygrys', to pisze:
Dalsze przekazywanie uprawnień
ALTER USER Adams IDENTIFIED BY tygrys;
Domyślnie u\ytkownik nie mo\e przekazywać nadanych mu uprawnień innemu
u\ytkownikowi. Aby mógł to zrobić, podczas nadawania mu uprawnienia administrator
Uprawnienia w bazie Oracle
musi je nadać z opcją WITH ADMIN OPTION.
WITH ADMIN OPTION
WITH ADMIN OPTION
WITH ADMIN OPTION
GRANT
GRANT
GRANT
W bazie danych Oracle istnieją dwa typy uprawnień: GRANT uprawnienie [, uprawnienie...]
TO u\ytkownik
TO
TO
TO
" uprawnienia systemowe  prawo do wykonania określonej akcji lub wykonywania
pewnych akcji na określonym typie obiektów,
WITH ADMIN OPTION;
WITH ADMIN OPTION
WITH ADMIN OPTION
WITH ADMIN OPTION
" uprawnienia obiektowe  prawo do wykonywania określonej akcji na konkretnym
obiekcie.
Uprawnienia obiektowe
Uprawnienia systemowe
Właścicielem obiektu jest u\ytkownik, który go tworzy. Jeśli u\ytkownik nie udostępnia
praw do swojego obiektu, to jedynie on i administrator władają tym obiektem.
Istnieje ponad 80 ró\nych uprawnień systemowych. W celu ułatwienia pracy
Uprawnienia obiektowe definiują prawa u\ytkownika do obiektu innego u\ytkownika.
administratorom uprawnienia są grupowane w tzw. role. Predefiniowane role to:
CONNECT mo\liwość podłączenia do Oracle
Nadawanie uprawnień obiektowych
RESOURCE mo\liwość tworzenia tabel, sekwencji, indeksów i innych obiektów
DBA mo\liwość zakładania innych u\ytkowników, mo\liwość dostępu do
Uprawnienia obiektowe nadajemy poleceniem:
obiektów zastrze\onych prze innych u\ytkowników
GRANT uprawnienie [, uprawnienie...]
GRANT
GRANT
GRANT
ON obiekt
ON
ON
ON
Nadawanie uprawnień systemowych
TO u\ytkownik [, u\ytkownik];
TO
TO
TO
Do nadawania uprawnień słu\y polecenie GRANT:
Poni\sza tabela przedstawia najczęściej nadawane uprawnienia obiektowe.
GRANT uprawnienie [, uprawnienie...] TO u\ytkownik;
GRANT TO
GRANT TO
GRANT TO
Prawo Obiekt
SELECT wybieranie danych z tabeli lub perspektywy
Polecenie GRANT nadaje nowe uprawnienia u\ytkownikowi. Uprawnienia nadawane
INSERT wstawianie wierszy do tabeli lub perspektywy
kolejnymi poleceniami GRANT się kumulują.
UPDATE modyfikacje wierszy lub nieokreślonych kolumn tabeli lub perspektywy
DELETE usuwanie wierszy z tabeli lub perspektywy
ALTER zmiana definicji kolumn tabeli
Strona 87 Strona 88
Podstawy języka SQL Podstawy języka SQL
INDEX indeksowanie tabeli
REVOKE uprawnienie [, uprawnienie...]
REVOKE
REVOKE
REVOKE
REFERENCES odwołanie do tabeli w obcych kluczach
ON obiekt
ON
ON
ON
ALL wszystkie prawa
FROM u\ytkownik;
FROM
FROM
FROM
EXECUTE prawo wykonywania procedur, funkcji i pakietów
Przykład
Akcje na obiektach innego u\ytkownika
Aby nadać u\ytkownikowi Scott prawa wyboru do swojej tabeli emp, u\ytkownik Adams
napisze:
Do obiektu innego u\ytkownika odwołujemy się następująco:
GRANT SELECT
ON emp
nazwa_u\ytkownika.nazwa_obiektu
TO Scott;
Przykład
Dalsze przekazywanie uprawnień
Aby wybrać wszystko z tabeli emp u\ytkownika Adams, napiszemy:
SELECT *
Domyślnie u\ytkownik nie mo\e przekazywać nadanych mu uprawnień obiektowych
FROM Adams.emp;
innemu u\ytkownikowi. Aby mógł to zrobić, uprawnienie musi być nadane z opcją WITH
WITH
WITH
WITH
Aby ułatwić odwołania do obiektu, mo\na stworzyć dla nich synonimy.
GRANT OPTION.
GRANT OPTION
GRANT OPTION
GRANT OPTION
GRANT uprawnienie [, uprawnienie...]
GRANT
GRANT
GRANT
Synonimy
ON obiekt
ON
ON
ON
TO u\ytkownik
TO
TO
TO
Dla obiektów mo\na tworzyć nazwy zastępcze  synonimy:
WITH GRANT OPTION;
WITH GRANT OPTION
WITH GRANT OPTION
WITH GRANT OPTION
CREATE SYNONYM nazwa synonimu
CREATE SYNONYM
CREATE SYNONYM
CREATE SYNONYM
Przykład
FOR [właściciel.]nazwa_obiektu;
FOR
FOR
FOR
Aby nadać u\ytkownikowi Scott prawa wyboru do swojej tabeli emp z prawem
przekazywania tego uprawnienia dalej, u\ytkownik Adams napisze:
Synonimy usuwa się poleceniem DROP SYNONYM:
GRANT SELECT
ON emp
DROP [PUBLIC] SYNONYM
DROP PUBLIC SYNONYM
DROP PUBLIC SYNONYM nazwa_synonimu;
DROP PUBLIC SYNONYM
TO Scott
WITH GRANT OPTION;
Role
Uprzywilejowanie typu PUBLIC
Rola to zestaw uprawnień, jaki mo\na przyznawać u\ytkownikom bazy. Rola mo\e
Aby przekazać prawo do obiektu wszystkim u\ytkownikom bazy, u\ywamy opcji
zawierać zarówno uprawnienia systemowe jak i obiektowe. Dzięki rolom ułatwione jest
PUBLIC:
PUBLIC
PUBLIC
PUBLIC
administrowanie bazą. Jeśli przykładowo dla kierowników działów zdefiniowana jest rola
KIEROWNICY, to chcąc wszystkim kierownikom nadać jakieś uprawnienie wystarczy
GRANT SELECT
ON emp
dodać je do roli KIEROWNICY.
TO PUBLIC;
Tworzenie roli
Odbieranie uprawnień obiektowych
Rolę tworzy się poleceniem CREATE ROLE:
Do odbierania uprawnień obiektowych słu\y polecenie REVOKE:
Strona 89 Strona 90
Podstawy języka SQL Podstawy języka SQL
CREATE ROLE rola
CREATE ROLE
CREATE ROLE
CREATE ROLE
[IDENTIFIED BY
IDENTIFIED BY
IDENTIFIED BY hasło];
IDENTIFIED BY
Klauzula IDENTIFIED BY słu\y do określania hasła, przy pomocy którego u\ytkownik
identyfikuje się z rolą.
Definiowanie uprawnień roli
Uprawnieniami dla roli zarządzamy poleceniami GRANT i REVOKE, tak jak robiliśmy to
dla u\ytkownika. Ka\da zmiana uprawnień roli natychmiast skutkuje zmianą uprawnień
osób, które mają tą rolę nadaną.
Usuwanie roli
Do usunięcia roli słu\y polecenie DROP ROLE:
DROP ROLE rola;
DROP ROLE
DROP ROLE
DROP ROLE
Strona 91 Strona 92
Podstawy języka SQL Podstawy języka SQL
IS NULL, 22, 24, 26 ROLLBACK, 78, 79
ROWID, 65
L
S
Indeks LIKE, 22, 23, 24, 26
LONG, 65 SAVEPOINT, 79
SELECT, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
24, 25, 26, 32, 33, 34, 35, 36, 40, 41, 48, 49,
M
50, 51, 56, 57, 58, 59, 60, 61, 70, 71, 76, 77,
MAX, 32, 33, 35, 37, 57, 58
82, 83, 88, 89, 90
MIN, 32, 33, 34, 37, 38, 60
SET, 77, 80
MINUS, 50
STDDEV, 32
A
DESCRIBE, 66
MODIFY, 72
SUM, 32
DISABLE, 72
ADD, 71, 72
DISTINCT, 19, 32, 58, 59
ALL, 32, 49, 58, 59, 89
N
T
DROP, 72, 73, 78, 83, 86, 90, 91
ALTER, 71, 72, 78, 87, 89
NOT, 24, 25, 26, 61, 65, 66, 68, 70, 71, 72
TO, 73, 79, 87, 88, 89
DROP ROLE, 91
ALTER TABLE, 71, 72
NULL, 18, 24, 25, 32, 48, 65, 66, 68, 70, 71, 72
DROP SYNONYM, 90
ALTER USER, 87
NUMBER, 18, 64, 65, 66, 68, 70, 71
U
DROP TABLE, 73
AND, 23, 25, 26, 41, 48
DROP USER, 86 UNION, 49, 50, 51
AS, 70, 71, 82, 83
O
UNIQUE, 67, 68, 69
ASCENDING, 20
ON, 69, 70, 80, 88, 89, 90
E UPDATE, 77, 80, 88
AUTO, 80
ON DELETE CASCADE, 69, 70
AVG, 32, 33, 34, 35, 37, 56, 59, 60
ENABLE, 72
OR, 25, 26, 82
V
EXECUTE, 89
ORDER BY, 20, 21, 36, 40, 41, 50, 51, 59, 60,
B
EXIST, 60, 61 VALUES, 76
61, 83
VARCHAR, 64, 70
BETWEEN... AND, 22
F VARCHAR2, 64, 65, 66, 67, 69, 71
P
VARIANCE, 32
C
FOR, 90
PRIMARY KEY, 67, 68, 70
VIEW, 82, 83
FOREIGN KEY, 67, 69, 70
CASCADE, 73, 86
PUBLIC, 89, 90
FROM, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
CASCADE CONTRAINTS, 73
25, 26, 32, 33, 34, 35, 36, 40, 41, 48, 49, 50, W
CHAR, 64, 66
R
51, 56, 57, 58, 59, 60, 61, 71, 76, 77, 78, 82,
WHERE, 21, 22, 23, 24, 25, 26, 33, 35, 36, 40,
CHECK, 67, 83
83, 88, 90
RAW, 65
41, 48, 49, 50, 56, 57, 58, 59, 60, 61, 71, 77,
COMMIT, 78, 79, 80
78, 82, 83
REFERENCES, 69, 70, 89
CONSTRAINT, 66, 67, 68, 69, 70, 72
G
WITH ADMIN OPTION, 88
RENAME TABLE, 73
COUNT, 32, 33, 37
GRANT, 87, 88, 89, 91 WITH GRANT OPTION, 89
REPLACE, 82
CREATE, 78
WORK, 78, 79
REVOKE, 88, 90, 91
CREATE ROLE, 91
H
CREATE SYNONYM, 90
HAVING, 35, 36, 58, 59, 60
CREATE TABLE, 65, 66, 67, 68, 69, 70, 71, 76
CREATE USER, 86
I
D IDENTIFIED BY, 86, 87, 91
IN, 22, 23, 24, 26, 57, 58
DATE, 64, 70
INDEX, 89
DEFAULT, 70
INSERT, 76, 77, 80, 88
DELETE, 69, 70, 77, 78, 80, 88
INTERSECT, 50
DESC, 20, 27, 66, 71
INTO, 76, 77
DESCENDING, 20
Strona 93 Strona 94


Wyszukiwarka

Podobne podstrony:
KURS EXCEL podstawowy
podstawy sql
Tablice Informatyczne Oracle PL SQL
Kurs komputerowy podstawowy program300408
informatyka programowanie serwera oracle 11g sql i
Zajęcia 1 Podstawy SQL 1
Asembler Kurs Assemblera Podstawy
Zajęcia 2 Podstawy SQL 2
Podstawy baz danych zajecia 2 z SQL Tabela Biblioteka

więcej podobnych podstron