background image

 

 

 
 
 

Materiały szkoleniowe 

Podstawy języka SQL 

 

Prowadzący 

Anna Pijanowska - Kuśnierz 

Paweł Żołnierczyk 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

 

Podstawy języka SQL

 

Strona 2 

 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

Podstawy języka SQL

 

 

 

 

Strona 3 

Spis treści 

Zawartość tabel wykorzystywanych na kursie ___________________________________5 

Zawartość tabeli DEPT _______________________________________________________ 6 

Zawartość tabeli EMP ________________________________________________________ 6 

Zawartość tabeli SALGRADE__________________________________________________ 6 

Budowa tabel wykorzystywanych na kursie_______________________________________ 7 

Relacyjny model danych____________________________________________________9 

Operatory relacyjne _________________________________________________________ 10 

Własności relacyjnej bazy danych______________________________________________ 10 

Przegląd języka SQL______________________________________________________13 

Zasady SQL ________________________________________________________________ 14 

Ćwiczenia __________________________________________________________________ 28 

Funkcje grupowe ________________________________________________________31 

Stosowanie funkcji grupowych ________________________________________________ 32 

Klauzula GROUP BY ________________________________________________________ 33 

Wybierane wyrażenia a funkcje grupowe________________________________________ 34 

Klauzula HAVING __________________________________________________________ 35 

Kolejność występowania klauzul _______________________________________________ 36 

Ćwiczenia __________________________________________________________________ 37 

Wybieranie danych z wielu tabel ____________________________________________39 

Złączenie równościowe _______________________________________________________ 40 

Złączenia nierównościowe ____________________________________________________ 41 

Ćwiczenia __________________________________________________________________ 43 

Inne metody łączenia tabel_________________________________________________47 

Złączenia zewnętrzne ________________________________________________________ 48 

Połączenie tabeli samej ze sobą ________________________________________________ 48 

Operatory zbiorowe _________________________________________________________ 49 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

 

Podstawy języka SQL

 

Strona 4 

Ćwiczenia __________________________________________________________________52 

Podzapytania ___________________________________________________________ 55 

Podzapytania zagnieżdżone____________________________________________________56 

Podzapytania zwracające jeden wiersz __________________________________________56 

Podzapytania zwracające wiele wierszy__________________________________________57 

Ćwiczenia __________________________________________________________________62 

Język definiowania danych ________________________________________________ 63 

Struktury danych ORACLE ___________________________________________________64 

Tworzenie tabel _____________________________________________________________64 

Warunki integralności ________________________________________________________65 

Tworzenie tabeli przez zapytanie _______________________________________________70 

Zmiana definicji tabeli________________________________________________________71 

Język manipulowania danymi ______________________________________________ 75 

Wstawianie wierszy __________________________________________________________76 

Modyfikacja wierszy _________________________________________________________77 

Usuwanie wierszy ____________________________________________________________77 

Transakcje _________________________________________________________________78 

Perspektywy ____________________________________________________________ 81 

Perspektywy ________________________________________________________________82 

Tworzenie perspektyw________________________________________________________82 

Usuwanie perspektywy _______________________________________________________83 

Użytkownicy i uprawnienia ________________________________________________ 85 

Zarządzanie użytkownikami ___________________________________________________86 

Uprawnienia w bazie Oracle ___________________________________________________87 

Role _______________________________________________________________________90 

 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

Podstawy języka SQL

 

 

 

 

Strona 5 

Zawartość tabel wykorzystywanych na kursie 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

 

Podstawy języka SQL

 

Strona 6 

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 
     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 
 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

Podstawy języka SQL

 

 

 

 

Strona 7 

Budowa tabel wykorzystywanych na kursie 

Podczas  kursu  będziemy  korzystać  z  uprzednio  utworzonych  tabel  opisujących 
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 
wysokości pensji, którą otrzymuje.  

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 

 

 

 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

 

Podstawy języka SQL

 

Strona 8 

Tabela SALGRADE — tabela „widełek” zaszeregowania 

Kolumna 

Opis 

GRADE 

Numer grupy zaszeregowania 

LOSAL 

LOW  SALARY  —  dolna  granica  widełek  płacowych  dla  stawki 
zaszeregowania GRADE 

HISAL 

HIGH SALARY — górna granica widełek   

 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

Podstawy języka SQL

 

 

 

 

Strona 9 

Relacyjny model danych 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

 

Podstawy języka SQL

 

Strona 10 

 

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 

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 KARTEZJAŃSKI   wynik połączenia każdy z każdym wierszy z dwóch relacji 

ZŁĄCZENIE  

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. 

 

 

 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

Podstawy języka SQL

 

 

 

 

Strona 11 

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. 

 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

 

Podstawy języka SQL

 

Strona 12 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

Podstawy języka SQL

 

 

 

 

Strona 13 

Przegląd języka SQL 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

 

Podstawy języka SQL

 

Strona 14 

 

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 

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  

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

Podstawy języka SQL

 

 

 

 

Strona 15 

TURNER     SALESMAN  
JAMES      CLERK     
WARD       SALESMAN  
FORD       ANALYST   
SMITH      CLERK     
SCOTT      ANALYST   
ADAMS      CLERK     
MILLER     CLERK     
 

Nazwy kolumn oddzielamy przecinkami.  

Aby wybrać wszystko z danej tabeli wpisujemy * (gwiazdkę) zamiast listy kolumn. 

 
SELECT * 
FROM 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 
  

W klauzuli SELECT mogę też być użyte: 

  wyrażenia arytmetyczne, 

  aliasy (nazwy zastępcze) kolumn, 

  konkatenacja,  

  literały. 

Wyrażenia arytmetyczne 

W  wyrażeniu  arytmetycznym  mogą  występować  nazwy  kolumn,  stałe  wartości  liczbowe 
oraz operatory arytmetyczne:  

  dodawanie 

  odejmowanie 

  mnożenie 

  dzielenie 

Przykład 

 
SELECT ENAME, SAL*12 
FROM EMP; 
 
ENAME          SAL*12     
---------- ---------- 
KING            60000 
BLAKE           34200 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

 

Podstawy języka SQL

 

Strona 16 

CLARK           29400 
JONES           35700 
MARTIN          15000 
ALLEN           19200 
TURNER          18000 
JAMES           11400 
WARD            15000 
FORD            36000 
SMITH            9600 
SCOTT           36000 
ADAMS           13200 
MILLER          15600 
 

W wyrażeniach zachowywany jest następujący priorytet działań: 

  mnożenie, 

  dzielenie, 

  dodawanie, 

  odejmowanie. 

Np.  w  wyrażeniu  arytmetycznym  250  +12*34  najpierw  zostanie  obliczona  wartość 
wyrażenia  12*24,  a  do  wyniku  zostanie  dodana  wartość  250.  Kolejność  wykonywania 
działań można zmienić przy pomocy nawiasów. Na przykład w wyrażeniu arytmetycznym 
(250  +12)*34  najpierw  zostanie  obliczona  wartość  wyrażenia  250+12,  a  wynik  zostanie 
pomnożony przez 34. 

Aliasy kolumn 

Domyślne  nagłówki  kolumn  możemy  zastąpić  innymi  nazwami,  które  będą  bardziej 
znaczące.  

Można  używać  polskich  liter.  Alias  podaje  się  bezpośrednio  po  nazwie  kolumny,  której 
nazwę  chcemy  zmienić.  Spacje  w  aliasie  nie  są  dopuszczane,  można  natomiast  utworzyć 
alias ze spacją biorąc całość w podwójne apostrofy. 

Przykład 

 
SELECT ENAME NAZWISKO, SAL*12 WYNAGR, COMM PROWIZJA 
FROM EMP; 
 
NAZWISKO   WYNAGR     PROWIZJA   
---------- ---------- ---------- 
KING            60000            
BLAKE           34200            
CLARK           29400            
JONES           35700            
MARTIN          15000       1400 
ALLEN           19200        300 
TURNER          18000          0 
JAMES           11400            
WARD            15000        500 
FORD            36000            
SMITH            9600            
SCOTT           36000            
ADAMS           13200            
MILLER          15600            

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

Podstawy języka SQL

 

 

 

 

Strona 17 

Operator konkatenacji 

Operator konkatenacji (||) pozwala na łączenie kolumny z kolumną, literałem, wyrażeniem 
arytmetycznym  lub  wartością  stałą.  Argumenty  są  łączone  i  tworzą  jedna  kolumnę 
wynikową. 

Aby  połączyć  kolumny  EMPNO  i  ENAME  i  opatrzyć  je  tytułem  PRACOWNIK, 
napiszemy: 

 
SELECT EMPNO||ENAME PRACOWNIK 
FROM EMP; 
 
PRACOWNIK                                          
-------------------------------------------------- 
7839KING                                           
7698BLAKE                                          
7782CLARK                                          
7566JONES                                          
7654MARTIN                                         
7499ALLEN                                          
7844TURNER                                         
7900JAMES                                          
7521WARD                                           
7902FORD                                           
7369SMITH                                          
7788SCOTT                                          
7876ADAMS                                          
7934MILLER                                         

Literały 

Oprócz kolumn na liście SELECT mogą znajdować się literały (ciągi znaków lub liczby). 
Wtedy dla każdego wiersza zostanie wypisana ta sama wartość literału: 

 
SELECT ENAME PRACOWNIK, ' PRACUJE W DEPARTAMENCIE', DEPTNO DEPARTAMENT 
FROM EMP; 
 
PRACOWNIK    'PRACUJE W DEPARTAMENCIE' DEPARTAMENT                                     
-----------  ------------------------- ----------- 
KING         'PRACUJE W DEPARTAMENCIE'  10                                             
BLAKE        'PRACUJE W DEPARTAMENCIE'  30                                            
CLARK        'PRACUJE W DEPARTAMENCIE'  10                                            
JONES        'PRACUJE W DEPARTAMENCIE'  20                                            
MARTIN       'PRACUJE W DEPARTAMENCIE'  30                                           
ALLEN        'PRACUJE W DEPARTAMENCIE'  30                                            
TURNER       'PRACUJE W DEPARTAMENCIE'  30                                           
JAMES        'PRACUJE W DEPARTAMENCIE'  30                                            
WARD         'PRACUJE W DEPARTAMENCIE'  30                                             
FORD         'PRACUJE W DEPARTAMENCIE'  20                                             
SMITH        'PRACUJE W DEPARTAMENCIE'  20                                            
SCOTT        'PRACUJE W DEPARTAMENCIE'  20                                            
ADAMS        'PRACUJE W DEPARTAMENCIE'  20                                            
MILLER       'PRACUJE W DEPARTAMENCIE'  10                                           

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

 

Podstawy języka SQL

 

Strona 18 

Obsługa wartości NULL  

Jeśli wartość wiersza w kolumnie jest nieokreślona, to mówimy, że na ona wartość NULL. 
Nie jest to tożsame z wartością 0. 

Wartość  wyrażenia  w którym  będzie występować wartość  NULL również  będzie  NULL. 
Dlatego  też  wyrażenie  SAL*12+COMM  zwróci  NULL  tam,  gdzie  COMM  było  równe 
NULL. 

 
SELECT ENAME, SAL*12+COMM 
FROM EMP; 
 
ENAME      SAL*12+COM 
---------- ---------- 
KING                  
BLAKE                 
CLARK                 
JONES                 
MARTIN          16400 
ALLEN           19500 
TURNER          18000 
JAMES                 
WARD            15500 
FORD                  
SMITH                 
SCOTT                 
ADAMS                 
MILLER                
 

Aby  w wyrażeniu  potraktować wartość NULL  jako  wartość różną od NULL, trzeba użyć 
funkcji NVL. 

 

SELECT ENAME, SAL*12+NVL(COMM,0) ROCZNE_WYN 
FROM EMP; 
 
ENAME      ROCZNE_WYN 
---------- ---------- 
KING            60000 
BLAKE           34200 
CLARK           29400 
JONES           35700 
MARTIN          16400 
ALLEN           19500 
TURNER          18000 
JAMES           11400 
WARD            15500 
FORD            36000 
SMITH            9600 
SCOTT           36000 
ADAMS           13200 
MILLER          15600 

 

W  powyższym  przykładzie  wartości  różne  od  NULL  zachowują  swoją  wartość,  zaś 
wartości NULL zostaną potraktowane jak 0. 

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') 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

Podstawy języka SQL

 

 

 

 

Strona 19 

Eliminacja duplikatów 

Domyślnie  wyświetlane  są  wyniki  zapytania  bez  eliminowania  powtarzających  się 
wartości, np.:  

 
SELECT DEPTNO 
FROM EMP; 
 
DEPTNO     
---------- 
        10 
        30 
        10 
        20 
        30 
        30 
        30 
        30 
        30 
        20 
        20 
        20 
        20 
        10 

Słowo kluczowe DISTINCT 

Eliminację powtarzających się wartości uzyskujemy stosując słowo kluczowe DISTINCT 
w klauzuli SELECT. 

 
SELECT DISTINCT DEPTNO 
FROM EMP; 
 
DEPTNO     
---------- 
        10 
        20 
        30 
 

Można  też  zażądać  wyspecyfikowania  wzajemnie  różnych  list  wartości  poprzez  podanie 
w klauzuli SELECT wielu nazw kolumn.  

 

Słowo  kluczowe  DISTINCT  odnosi  się  do  wszystkich  nazw  kolumn 
występujących w klauzuli SELECT. 

 
SELECT DISTINCT JOB, DEPTNO 
FROM EMP; 
 
JOB       DEPTNO     
--------- ---------- 
ANALYST           20 
CLERK             10 
CLERK             20 
CLERK             30 
MANAGER           10 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

 

Podstawy języka SQL

 

Strona 20 

MANAGER           20 
MANAGER           30 
PRESIDENT         10 
SALESMAN          30 

Klauzula ORDER BY 

Aby określić kolejność, w jakiej będą zwracane wyniki, należy użyć klauzuli ORDER BY 
(uporządkuj wg). Klauzula ORDER BY musi być ostatnią klauzulą polecenia SELECT. 

 
SELECT ENAME, JOB 
FROM EMP 
ORDER BY ENAME; 
       
ENAME      JOB       
---------- --------- 
ADAMS      CLERK     
ALLEN      SALESMAN  
BLAKE      MANAGER   
CLARK      MANAGER   
FORD       ANALYST   
JAMES      CLERK     
JONES      MANAGER   
KING       PRESIDENT 
MARTIN     SALESMAN  
MILLER     CLERK     
SCOTT      ANALYST   
SMITH      CLERK     
TURNER     SALESMAN  
WARD       SALESMAN  
 

Domyślnie dane są  sortowane w porządku rosnącym (ASCENDING) — od najmniejszych 
do  największych  liczb,  od  wcześniejszych  do  późniejszych  dat,  zaś  ciągi  znakowe  są 
sortowane wg ustawień NLS (określanych przy tworzeniu bazy danych). 

Aby  odwrócić  kolejność  sortowania  należy  użyć  słowa  DESC  (DESCENDING)  użytego 
bezpośrednio po nazwie kolumny wyspecyfikowanej w klauzuli ORDER BY. 

 
SELECT ENAME, JOB, HIREDATE 
FROM EMP 
ORDER BY HIREDATE DESC; 
 
ENAME      JOB       HIREDATE  
---------- --------- --------- 
ADAMS      CLERK     83/01/12  
SCOTT      ANALYST   82/12/09  
MILLER     CLERK     82/01/23  
JAMES      CLERK     81/12/03  
FORD       ANALYST   81/12/03  
KING       PRESIDENT 81/11/17  
MARTIN     SALESMAN  81/09/28  
TURNER     SALESMAN  81/09/08  
CLARK      MANAGER   81/06/09  
BLAKE      MANAGER   81/05/01  
JONES      MANAGER   81/04/02  
WARD       SALESMAN  81/02/22  
ALLEN      SALESMAN  81/02/20  
SMITH      CLERK     80/12/17  
 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

Podstawy języka SQL

 

 

 

 

Strona 21 

Można  sortować  według  kilku  kolumn,  wtedy  po  słowie  kluczowym  ORDER  BY  należy 
podać nazwy kolumn, po których chcemy sortować. 

 
SELECT ENAME, JOB, DEPTNO 
FROM EMP 
ORDER BY  DEPTNO, ENAME; 
 
ENAME      JOB       DEPTNO     
---------- --------- ---------- 
CLARK      MANAGER           10 
KING       PRESIDENT         10 
MILLER     CLERK             10 
ADAMS      CLERK             20 
FORD       ANALYST           20 
JONES      MANAGER           20 
SCOTT      ANALYST           20 
SMITH      CLERK             20 
ALLEN      SALESMAN          30 
BLAKE      MANAGER           30 
JAMES      CLERK             30 
MARTIN     SALESMAN          30 
TURNER     SALESMAN          30 
WARD       SALESMAN          30 
 

 

Nazwy  kolumn,  po  których  sortujemy,  muszą  być  wyspecyfikowane 
w klauzuli SELECT. 

Sortowanie  dotyczy  tylko  wyniku  zapytania  wyświetlanego  na  ekranie.  Dane  w  tabelach 
nie są sortowane. 

Klauzula WHERE 

Klauzula WHERE odpowiada operacji selekcji. 

Klauzula  ta  specyfikuje  kryteria  doboru  wierszy.  Klauzula  WHERE,  o  ile  jest,  musi 
występować bezpośrednio po klauzuli FROM. 

Operatory w klauzuli WHERE mogą być dwojakiego rodzaju:  

  operatory logiczne,  

  operatory SQL. 

Operatory logiczne 

Dane  znakowe  i  ciągi  znaków  w  klauzuli  WHERE  muszą  być  ujęte  w  pojedyncze 
apostrofy. Przy porównywaniu znaków Oracle rozróżnia małe i wielkie litery. 

 

 

 

 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

 

Podstawy języka SQL

 

Strona 22 

Aby  wybrać  nazwiska,  zawód  i  numer  departamentu  dla  wszystkich  zatrudnionych  na 
stanowisku CLERK, napiszemy: 

 

SELECT ENAME, JOB, DEPTNO 
FROM EMP 
WHERE JOB='CLERK'; 
       
ENAME      JOB       DEPTNO     
---------- --------- ---------- 
JAMES      CLERK             30 
SMITH      CLERK             20 
ADAMS      CLERK             20 
MILLER     CLERK             10 
 

Aby wybrać wszystkich zatrudnionych po 01.01.1982r., napiszemy: 

 

SELECT ENAME, JOB, DEPTNO 
FROM EMP 
WHERE HIREDATE>'82/01/01' 
       
ENAME      JOB       DEPTNO     
---------- --------- ---------- 
SCOTT      ANALYST           20 
ADAMS      CLERK             20 
MILLER     CLERK             10 

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: 

 
SELECT ENAME, JOB, DEPTNO 
FROM EMP 
WHERE COMM>SAL; 
       
ENAME      JOB       DEPTNO     
---------- --------- ---------- 
MARTIN     SALESMAN          30 

Operatory SQL 

Wyróżniamy 4 operatory SQL, działające na wszystkich typach danych: 

  BETWEEN... AND, 

  IN (lista), 

  LIKE, 

  IS NULL. 

Operator BETWEEN...AND 

Operator BETWEEN...AND służy do sprawdzenia,  czy wartość znajduje  się w podanym 
przedziale (wliczając w to krańce przedziału). Górna granica musi następować po dolnej.  

 

 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

Podstawy języka SQL

 

 

 

 

Strona 23 

Aby  wybrać  wszystkich,  którzy  zarabiają  od  1000  do  1500,  wliczając  w  to  tych,  którzy 
zarabiają 1000 i 1500, napiszemy: 

 
SELECT ENAME, JOB, DEPTNO 
FROM EMP 
WHERE SAL BETWEEN 1000 AND 1500;       
 
ENAME      JOB       DEPTNO     
---------- --------- ---------- 
MARTIN     SALESMAN          30 
TURNER     SALESMAN          30 
WARD       SALESMAN          30 
ADAMS      CLERK             20 
MILLER     CLERK             10 

Operator IN 

Operator  IN  służy  do  sprawdzania,  czy  dana  wartość  znajduje  się  na  wyspecyfikowanej 
liście. Aby wybrać podwładnych osób o identyfikatorach 7839 i 7902, napiszemy: 

 
SELECT ENAME, JOB, DEPTNO 
FROM EMP 
WHERE MGR IN (7839,7902); 
       
ENAME      JOB       DEPTNO     
---------- --------- ---------- 
BLAKE      MANAGER           30 
CLARK      MANAGER           10 
JONES      MANAGER           20 
SMITH      CLERK             20 
 

Dane znakowe występujące na liście należy ująć w pojedyncze apostrofy. 

Operator LIKE 

Operator  LIKE  służy  do  wybierania  wartości  odpowiadających  podanemu  wzorcowi. 
Wzorzec tworzą dwa specjalne symbole: 

  % (znak procent) — odpowiada dowolnemu ciągowi znaków, 

  _ (znak podkreślenia) — odpowiada dokładnie jednemu dowolnemu znakowi. 

Aby wybrać osoby, które jako drugą literę w nazwisku mają literę "A", napiszemy: 

 
SELECT ENAME, JOB, DEPTNO 
FROM EMP 
WHERE ENAME LIKE '_A%'; 
       
ENAME      JOB       DEPTNO     
---------- --------- ---------- 
MARTIN     SALESMAN          30 
JAMES      CLERK             30 
WARD       SALESMAN          30 
 

 

 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

 

Podstawy języka SQL

 

Strona 24 

Aby wybrać osoby, których nazwisko składa się z pięciu liter, napiszemy: 

 
SELECT ENAME, JOB, DEPTNO 
FROM EMP 
WHERE ENAME LIKE '_____'; 
       
ENAME      JOB       DEPTNO     
---------- --------- ---------- 
BLAKE      MANAGER           30 
CLARK      MANAGER           10 
JONES      MANAGER           20 
ALLEN      SALESMAN          30 
JAMES      CLERK             30 
SMITH      CLERK             20 
SCOTT      ANALYST           20 
ADAMS      CLERK             20 

Operator IS NULL 

Operator IS NULL służy do wyszukiwania wartości NULL. 

Aby wybrać dane o osobach, które nie posiadają szefa, napiszemy: 

 
SELECT ENAME, JOB, DEPTNO 
FROM EMP 
WHERE MGR IS NULL; 
       
ENAME      JOB       DEPTNO     
---------- --------- ---------- 
KING       PRESIDENT         10 
 

Nie  można  napisać  w  klauzuli  WHERE  warunku  MGR=NULL,  gdyż  wtedy  Oracle  nie 
wyszuka żadnych wartości. 

Operatory negacji 

Operatory negacji służą do zaprzeczania warunkom w klauzuli WHERE. 

!= 

nie jest równy (VAX, UNIX, PC) 

^=, _= 

nie jest równy (IBM) 

<> 

nie jest równy (wszystkie systemy operacyjne) 

NOT kolumna= 

nie jest równy 

NOT kolumna> 

nie jest większy 

NOT BETWEEN 

nie jest w podanym przedziale 

NOT IN 

nie jest w zbiorze 

NOT LIKE 

nie jest zgodny z maską 

IS NOT NULL 

nie jest NULL 

 

 

 

Aby wybrać wszystkie osoby, które nie zarabiają więcej niż 2000, napiszemy: 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

Podstawy języka SQL

 

 

 

 

Strona 25 

 
SELECT ENAME, SAL 
FROM EMP 
WHERE NOT SAL>2000;  
 
ENAME      SAL        
---------- ---------- 
MARTIN           1250 
ALLEN            1600 
TURNER           1500 
JAMES             950 
WARD             1250 
SMITH             800 
ADAMS            1100 
MILLER           1300 
 

Aby wybrać osoby, które nie otrzymują prowizji, napiszemy: 

 
SELECT ENAME, JOB, COMM 
FROM EMP 
WHERE COMM IS NOT NULL  
 

ENAME      JOB       COMM       
---------- --------- ---------- 
MARTIN     SALESMAN        1400 
ALLEN      SALESMAN         300 
TURNER     SALESMAN           0 
WARD       SALESMAN         500 

Tworzenie złożonych kryteriów 

Do budowania warunków złożonych służą operatory AND (i) oraz OR (lub). 

Warunek (X  AND  Y)  jest  prawdziwy  wtedy  i  tylko  wtedy,  gdy  X  jest prawdziwy  i Y  jest 
prawdziwy. 

Warunek (X OR Y) jest prawdziwy wtedy i tylko wtedy, gdy X jest prawdziwy lub Y jest 
prawdziwy. 

Operator AND ma większy priorytet niż operator OR. 

Aby  wybrać  wszystkich  pracowników  zatrudnionych  na  stanowisku  'MANAGER' 
i zarabiających więcej niż 2000, napiszemy: 

 
SELECT ENAME, JOB, SAL 
FROM EMP 
WHERE SAL>2000 

 

AND JOB='MANAGER'  
 
NAME      JOB       SAL        
---------- --------- ---------- 
BLAKE      MANAGER         2850 
CLARK      MANAGER         2450 
JONES      MANAGER         2975 
 

Ponieważ  operator  AND  ma  wyższy  priorytet  niż  operator  OR,  to  poniższy  przykład 
znajdzie  nam  wszystkie  osoby  zatrudnione  na  stanowisku  'CLERK'  oraz  te  osoby 
zatrudnione na stanowisku 'MANAGER', których zarobki przekraczają 1000. 

 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

 

Podstawy języka SQL

 

Strona 26 

SELECT ENAME, JOB, SAL 
FROM EMP 
WHERE SAL>1000 

 

AND JOB='MANAGER' OR JOB='CLERK'; 
 
ENAME      JOB       SAL        
---------- --------- ---------- 
BLAKE      MANAGER         2850 
CLARK      MANAGER         2450 
JONES      MANAGER         2975 
JAMES      CLERK            950 
SMITH      CLERK            800 
ADAMS      CLERK           1100 
MILLER     CLERK           1300 
 

Poniższy  przykład,  w  którym  zastosowano  nawiasy  zmieniające  kolejność  wykonywania 
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, SAL 
FROM EMP 
WHERE SAL>1000 

 

AND (JOB='MANAGER' OR JOB='CLERK'); 
 
ENAME      JOB       SAL        
---------- --------- ---------- 
BLAKE      MANAGER         2850 
CLARK      MANAGER         2450 
JONES      MANAGER         2975 
ADAMS      CLERK           1100 
MILLER     CLERK           1300 

Hierarchia operatorów 

W  każdym  wyrażeniu,  o  ile  nawiasy  nie  wskazują  inaczej,  operacje  są  wykonywane 
począwszy  od  operatorów  o  najwyższym  priorytecie.  Jeśli  dwa  operatory  o  tym  samym 
priorytecie występują obok siebie, to są one wykonywane od lewej do prawej. 

1.  =, <>, <=, >=, >,<, BETWEEN…AND, IN, LIKE, IS NULL 

2.  NOT 

3.  AND 

4.  OR 

Aby  zapis  był  bardziej  przejrzysty  i  w  celu  uniknięcia  błędów,  zaleca  się  stosowanie 
nawiasów. 

Krótki opis poleceń właściwych dla SQL*Plus 

Pod SQL*Plus najczęściej uruchamiamy skrypty SQL-owe. 

 

 

 

Najczęściej używane polecenia: 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

Podstawy języka SQL

 

 

 

 

Strona 27 

SPOOL plik;  

wszystkie  polecenia  SQL  do  czasu  wydania  rozkazu  SPOOL  OFF  będą 
zapisywane do pliku plik 

@plik 

uruchomienie skryptu plik 

ed plik 

edycja pliku plik w domyślnym edytorze 

SPOOL OFF 

kończy wysyłanie danych do pliku 

DESC 

wyświetla opis struktury tabeli 

CONNECT 

zmiana podłączenia do bazy 

EXIT 

wyjście z programu 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

 

Podstawy języka SQL

 

Strona 28 

 

Ćwiczenia 

1.Wybierz wszystkie dane z tablicy SALGRADE. 

 
    GRADE     LOSAL     HISAL 
--------- --------- --------- 
        1       700      1200 
        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 
 

 

 

 

 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

Podstawy języka SQL

 

 

 

 

Strona 29 

5. Wybierz wszystkie, wzajemnie różne stanowiska pracy. 

 

JOB 
--------- 
ANALYST 
CLERK 
MANAGER 
PRESIDENT 
SALESMAN

 

 

6.  Wybierz  dane  o  pracownikach  zatrudnionych  w  departamentach  10  i  20  w  kolejności 
alfabetycznej ich nazwisk. 

 
    EMPNO ENAME      JOB             MGR HIREDATE       SAL      COMM    DEPTNO 
--------- ---------- --------- --------- -------- --------- --------- --------- 
     7876 ADAMS      CLERK          7788 83/01/12      1100                  20 
     7782 CLARK      MANAGER        7839 81/06/09      2450                  10 
     7902 FORD       ANALYST        7566 81/12/03      3000                  20 
     7566 JONES      MANAGER        7839 81/04/02      2975                  20 
     7839 KING       PRESIDENT           81/11/17      5000                  10 
     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 
 

7.  Wybierz  nazwiska  i  stanowiska  pracy  wszystkich  pracowników  z  departamentu  20 
zatrudnionych na stanowisku CLERK. 

 
ENAME      JOB 
---------- --------- 
SMITH      CLERK 
ADAMS      CLERK 
 
 

8. Wybierz następujące informacje o wszystkich pracownikach, którzy posiadają szefa. 

 
ENAME      JOB             SAL 
---------- --------- --------- 
BLAKE      MANAGER        2850 
CLARK      MANAGER        2450 
JONES      MANAGER        2975 
MARTIN     SALESMAN       1250 
ALLEN      SALESMAN       1600 
TURNER     SALESMAN       1500 
JAMES      CLERK           950 
WARD       SALESMAN       1250 
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 
ALLEN             19500 
TURNER            18000 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

 

Podstawy języka SQL

 

Strona 30 

JAMES             11400 
WARD              15500 
FORD              36000 
SMITH              9600 
SCOTT             36000 
ADAMS             13200 
MILLER            15600 
 

10.  Wybierz  następujące  dane  o  tych  pracownikach,  którzy  zostali  zatrudnieni  w  1982 
roku. 

 
ENAME         DEPTNO HIREDATE 
---------- --------- --------- 
SCOTT             20 09-DEC-82 
MILLER            10 23-JAN-82 
 

11. Wybierz nazwiska, roczną pensję oraz prowizję tych wszystkich pracowników, których 
miesięczna  pensja  przekracza  prowizję.  Wyniki  posortuj  według  malejących  zarobków. 
Jeśli dwóch lub więcej pracowników ma taką samą pensję, uporządkuj dane o nich według 
nazwisk zgodnie z alfabetem. 

 

ENAME      ANNUAL_SAL      COMM 
---------- ---------- --------- 
ALLEN           19200       300 
TURNER          18000         0 
WARD            15000       500 
 

12. Spowoduj wyświetlenie następujących wyników. 

 
Kto, gdzie, kiedy? 
------------------------------------------------------------------------------- 
KING pracuje na stanowisku PRESIDENT w zespole 10 od 17-NOV-81 
BLAKE pracuje na stanowisku MANAGER w zespole 30 od 01-MAY-81 
CLARK pracuje na stanowisku MANAGER w zespole 10 od 09-JUN-81 
JONES pracuje na stanowisku MANAGER w zespole 20 od 02-APR-81 
MARTIN pracuje na stanowisku SALESMAN w zespole 30 od 28-SEP-81 
ALLEN pracuje na stanowisku SALESMAN w zespole 30 od 20-FEB-81 
TURNER pracuje na stanowisku SALESMAN w zespole 30 od 08-SEP-81 
JAMES pracuje na stanowisku CLERK w zespole 30 od 03-DEC-81 
WARD pracuje na stanowisku SALESMAN w zespole 30 od 22-FEB-81 
FORD pracuje na stanowisku ANALYST w zespole 20 od 03-DEC-81 
SMITH pracuje na stanowisku CLERK w zespole 20 od 17-DEC-80 
SCOTT pracuje na stanowisku ANALYST w zespole 20 od 09-DEC-82 
ADAMS pracuje na stanowisku CLERK w zespole 20 od 12-JAN-83 
MILLER pracuje na stanowisku CLERK w zespole 10 od 23-JAN-82  

 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

Podstawy języka SQL

 

 

 

 

Strona 31 

Funkcje grupowe 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

 

Podstawy języka SQL

 

Strona 32 

 

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] wyrażenie) 

wartość średnia wyrażeń, NULL nie jest 
uwzględniane 

COUNT ([DISTINCT | ALL] wyrażenie) 

ilość wystąpień wartości wyrażeń różnych od 
NULL, gwiazdka (*) użyta w miejscu 
wyrażenia powoduje obliczenia ilości 
wszystkich wierszy łącznie z duplikatami 
i wartościami NULL 

MAX ([DISTINCT | ALL] wyrażenie) 

maksymalna wartość wyrażenia 

MIN ([DISTINCT | ALL] wyrażenie) 

minimalna wartość wyrażenia 

STDDEV ([DISTINCT | ALL] wyrażenie) 

odchylenie standardowe wyrażeń, bez 
uwzględniania wartości NULL 

SUM ([DISTINCT | ALL] wyrażenie) 

suma wartości wyrażeń, bez uwzględniania 
wartości NULL 

VARIANCE ([DISTINCT | ALL] 
wyrażenie) 

wariancja wyrażeń, bez uwzględniania wartości 
NULL 

 

Kwalifikator  DISTINCT  ogranicza  działanie  funkcji  grupowych  do  różnych  wartości 
argumentów.  

Kwalifikator ALL jest domyślny — funkcje grupowe nie eliminują duplikatów. 

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. 

 

 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

Podstawy języka SQL

 

 

 

 

Strona 33 

 

Można nałożyć na to polecenie warunek w klauzuli WHERE, np. aby znaleźć minimalny 
zarobek na stanowisku 'MANAGER', napiszemy: 

 
SELECT MIN(SAL) 
FROM EMP 
WHERE JOB='MANAGER'; 
 
MIN(SAL)   
---------- 
      2450 
 

Aby znaleźć, ilu pracowników pracuje w departamencie 10, napiszemy: 

 
SELECT COUNT(*) 
FROM EMP 
WHERE DEPTNO=10; 
 
COUNT(*)   
---------- 
         3 

Klauzula GROUP BY 

Do  podzielenia  wierszy  tablicy  na  grupy  używamy  klauzuli  GROUP  BY.  Pojedynczą 
grupę stanowią wszystkie wiersze, dla których wartości podane w klauzuli GROUP BY są 
identyczne. 

Aby obliczyć średnie zarobki w każdym departamencie, napiszemy: 

 
SELECT DEPTNO, AVG(SAL) 
FROM EMP 
GROUP BY DEPTNO; 
 
DEPTNO     AVG(SAL)   
---------- ---------- 
        10 2916,66667 
        20       2175 
        30 1566,66667 
 

Przed grupowaniem możemy wyeliminować pewne wiersze za pomocą klauzuli WHERE: 

 
SELECT JOB, MAX(SAL) 
FROM EMP 
WHERE JOB<>'CLERK' 
GROUP BY JOB; 
 
JOB       MAX(SAL)   
--------- ---------- 
ANALYST         3000 
MANAGER         2975 
PRESIDENT       5000 
SALESMAN        1600 
 

W  klauzuli  GROUP  BY  można  podać  kilka  wyrażeń,  wtedy  wiersze  będą  grupowane 
w mniejszych grupach. 

 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

 

Podstawy języka SQL

 

Strona 34 

 

Aby  obliczyć  minimalny  zarobek  w  każdym  departamencie  w  podziałem  na  stanowiska, 
napiszemy: 

 
SELECT DEPTNO, JOB, MIN(SAL) 
FROM EMP 
GROUP BY DEPTNO, JOB; 
 
DEPTNO     JOB       MIN(SAL)   
---------- --------- ---------- 
        10 CLERK           1300 
        10 MANAGER         2450 
        10 PRESIDENT       5000 
        20 ANALYST         3000 
        20 CLERK            800 
        20 MANAGER         2975 
        30 CLERK            950 
        30 MANAGER         2850 
        30 SALESMAN        1250 

Wybierane wyrażenia a funkcje grupowe 

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 
departamentowi. 

 
SELECT AVG(SAL) 
FROM EMP 
GROUP BY DEPTNO; 
 
AVG(SAL)   
---------- 
2916,66667 
      2175 
1566,66667 
 

Aby  poprawić  to  polecenie,  umieśćmy  na  liście  wyboru  klauzuli  SELECT  także  numer 
departamentu: 

 
SELECT DEPTNO, AVG(SAL) 
FROM EMP 
GROUP BY DEPTNO; 
 
DEPTNO     AVG(SAL)   
---------- ---------- 
        10 2916,66667 
        20       2175 
        30 1566,66667 
 

 

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, 
że występują one jako argument funkcji grupującej. 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

Podstawy języka SQL

 

 

 

 

Strona 35 

Klauzula HAVING 

Do  wybierania  interesujących  nas  grup  służy  klauzula  HAVING.  W  klauzuli  HAVING 
umieszczamy warunek wyrażony za pomocą funkcji grupowej. 

Aby wybrać średnie zarobki dla grup zawodowych, gdzie maksymalne zarobki są wyższe 
niż 2000, napiszemy: 

 
SELECT JOB, AVG(SAL) 
FROM EMP 
GROUP BY JOB 
HAVING MAX(SAL)>2000; 
 
JOB       AVG(SAL)   
--------- ---------- 
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. 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

 

Podstawy języka SQL

 

Strona 36 

Kolejność występowania klauzul 

Wymagany porządek klauzul jest następujący: 

1.  SELECT lista wyrażeń 

2.  FROM tabela 

3.  WHERE warunek selekcji wierszy 

4.  HAVING warunek selekcji grup 

5.  ORDER BY wyrażenia 

6.  ; 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

Podstawy języka SQL

 

 

 

 

Strona 37 

Ćwiczenia  

1. Znajdź minimalną pensje w firmie. 

 
  MINIMUM                                                                                           
---------                                                                                         
      800                                                                                           
 

2. Znajdź minimalną, maksymalną i średnią pensję w firmie. 

 
 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.  Znajdź ś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. Znajdź różnice między najwyższą i najniższą pensją. 

 
DIFFERENCE                                                                                          
----------                                                                                          
      4200                                                                                          
 

7. Znajdź departamenty zatrudniające powyżej trzech pracowników. 

 
   DEPTNO  COUNT(*)                                                                                 
--------- ---------                                                                                 
       20         5                                                                                 
       30         6  
                                                                                 

 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

 

Podstawy języka SQL

 

Strona 38 

8.  Sprawdź,  czy  wszystkie  numery  pracowników  są  rzeczywiście  różne  (używając 
grupowania). 

 

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. 

 
      MGR  MIN(SAL)                                                                                 
--------- ---------                                                                                 
     7788      1100                                                                                 
     7782      1300                                                                                 
     7839      2450                                                                                 
     7566      3000                                                                                 
               5000                                                                                 
 

 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

Podstawy języka SQL

 

 

 

 

Strona 39 

Wybieranie danych z wielu tabel 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

 

Podstawy języka SQL

 

Strona 40 

 

Złączenie równościowe 

Chcemy uzyskać następującą  informację: dla każdego pracownika znaleźć 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          
---------- --------- -------------- 
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     

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

Podstawy języka SQL

 

 

 

 

Strona 41 

        10 MILLER     CLERK     ACCOUNTING     
        20 JONES      MANAGER   RESEARCH       
        20 SCOTT      ANALYST   RESEARCH       
        20 ADAMS      CLERK     RESEARCH       
        20 SMITH      CLERK     RESEARCH       
        20 FORD       ANALYST   RESEARCH       
        30 BLAKE      MANAGER   SALES          
        30 MARTIN     SALESMAN  SALES          
        30 ALLEN      SALESMAN  SALES          
        30 TURNER     SALESMAN  SALES          
        30 JAMES      CLERK     SALES          
        30 WARD       SALESMAN  SALES          

Aliasy tabel 

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. 

 
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 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

 

Podstawy języka SQL

 

Strona 42 

TURNER           1500          3 
BLAKE            2850          4 
CLARK            2450          4 
JONES            2975          4 
FORD             3000          4 
SCOTT            3000          4 
KING             5000          5 

Reguły łączenia tabel 

Ogólna zasada łączenia tabel: 

 

Minimalna liczba warunków łączących = liczba tabel —1 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

Podstawy języka SQL

 

 

 

 

Strona 43 

Ćwiczenia  

1.  Wybierz  nazwiska  oraz  nazwy  departamentów  wszystkich  pracowników,  w  kolejności 
alfabetycznej nazw departamentów. 

 
ENAME      DNAME                                                                                    
---------- --------------                                                                           
KING       ACCOUNTING                                                                               
CLARK      ACCOUNTING                                                                               
MILLER     ACCOUNTING                                                                               
JONES      RESEARCH                                                                                 
SCOTT      RESEARCH                                                                                 
ADAMS      RESEARCH                                                                                 
SMITH      RESEARCH                                                                                 
FORD       RESEARCH                                                                                 
BLAKE      SALES                                                                                    
MARTIN     SALES                                                                                    
ALLEN      SALES                                                                                    
TURNER     SALES                                                                                    
JAMES      SALES                                                                                    
WARD       SALES                                                                                  
 

2.  Wybierz  nazwiska  wszystkich  pracowników  wraz  z  numerami  i  nazwami 
departamentów, w których są zatrudnieni. 

 
ENAME         DEPTNO DNAME                                                                          
---------- --------- --------------                                                                 
KING              10 ACCOUNTING                                                                     
BLAKE             30 SALES                                                                          
CLARK             10 ACCOUNTING                                                                     
JONES             20 RESEARCH                                                                       
MARTIN            30 SALES                                                                          
ALLEN             30 SALES                                                                          
TURNER            30 SALES                                                                          
JAMES             30 SALES                                                                          
WARD              30 SALES                                                                          
FORD              20 RESEARCH                                                                       
SMITH             20 RESEARCH                                                                       
SCOTT             20 RESEARCH                                                                       
ADAMS             20 RESEARCH                                                                       
MILLER            10 ACCOUNTING                                                                     
 

3.  Dla pracowników o  miesięcznej  pensji  1500  podaj  ich  nazwiska,  miejsca usytuowania 
ich departamentów oraz nazwy tych departamentów. 

 

ENAME      LOCATION      DNAME                                                                      
---------- ------------- --------------                                                             
KING       NEW YORK      ACCOUNTING                                                                 
BLAKE      CHICAGO       SALES                                                                      
CLARK      NEW YORK      ACCOUNTING                                                                 
JONES      DALLAS        RESEARCH                                                                   
ALLEN      CHICAGO       SALES                                                                      
FORD       DALLAS        RESEARCH                                                                   
SCOTT      DALLAS        RESEARCH                                                                   
 

 

 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

 

Podstawy języka SQL

 

Strona 44 

4. Utwórz następującą listę pracowników z zaszeregowaniem ich do klas zarobkowych. 

 

ENAME      JOB             SAL     GRADE                                                            
---------- --------- --------- ---------                                                            
JAMES      CLERK           950         1                                                            
SMITH      CLERK           800         1                                                            
ADAMS      CLERK          1100         1                                                            
MARTIN     SALESMAN       1250         2                                                            
WARD       SALESMAN       1250         2                                                            
MILLER     CLERK          1300         2                                                            
ALLEN      SALESMAN       1600         3                                                            
TURNER     SALESMAN       1500         3                                                            
BLAKE      MANAGER        2850         4                                                            
CLARK      MANAGER        2450         4                                                        
JONES      MANAGER        2975         4                                                            
FORD       ANALYST        3000         4                                                            
SCOTT      ANALYST        3000         4                                                            
KING       PRESIDENT      5000         5                                                            
 

5. Wybierz informację o pracownikach, których zarobki odpowiadają klasie 3. 

 
ENAME      JOB             SAL     GRADE                                                            
---------- --------- --------- ---------                                                            
ALLEN      SALESMAN       1600         3                                                            
TURNER     SALESMAN       1500         3                                                            
 

6. Wybierz pracowników zatrudnionych w Dallas.  

 
ENAME            SAL LOCATION                                                                       
---------- --------- -------------                                                                  
JONES           2975 DALLAS                                                                         
FORD            3000 DALLAS                                                                         
SMITH            800 DALLAS                                                                         
SCOTT           3000 DALLAS                                                                         
ADAMS           1100 DALLAS                                                                         
 

7.Podaj następujące dane o wszystkich pracownikach, z wyjątkiem tych, którzy pracują na 
stanowisku „CLERK”. Uporządkuj je według malejących zarobków. 

 
ENAME      JOB             SAL     GRADE DNAME                                                      
---------- --------- --------- --------- --------------                                             
JAMES      CLERK           950         1 SALES                                                      
SMITH      CLERK           800         1 RESEARCH                                                   
ADAMS      CLERK          1100         1 RESEARCH                                                   
MARTIN     SALESMAN       1250         2 SALES                                                      
WARD       SALESMAN       1250         2 SALES                                                      
MILLER     CLERK          1300         2 ACCOUNTING                                                 
ALLEN      SALESMAN       1600         3 SALES                                                      
TURNER     SALESMAN       1500         3 SALES                                                      
BLAKE      MANAGER        2850         4 SALES                                                      
CLARK      MANAGER        2450         4 ACCOUNTING                                                 
JONES      MANAGER        2975         4 RESEARCH                                                   
FORD       ANALYST        3000         4 RESEARCH                                                   
SCOTT      ANALYST        3000         4 RESEARCH                                                   
KING       PRESIDENT      5000         5 ACCOUNTING                                                 
 

 

 

 

 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

Podstawy języka SQL

 

 

 

 

Strona 45 

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                                  

 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

 

Podstawy języka SQL

 

Strona 46 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

Podstawy języka SQL

 

 

 

 

Strona 47 

Inne metody łączenia tabel 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

 

Podstawy języka SQL

 

Strona 48 

 

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 
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<M.SAL; 
 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

Podstawy języka SQL

 

 

 

 

Strona 49 

NAZW_PR      PENS_PR    NAZW_SZ    PENS_SZ    
---------- ---------- ---------- ---------- 
BLAKE            2850 KING             5000 
CLARK            2450 KING             5000 
JONES            2975 KING             5000 
MARTIN           1250 BLAKE            2850 
ALLEN            1600 BLAKE            2850 
TURNER           1500 BLAKE            2850 
JAMES             950 BLAKE            2850 
WARD             1250 BLAKE            2850 
SMITH             800 FORD             3000 
ADAMS            1100 SCOTT            3000 
MILLER           1300 CLARK            2450 
 

Jak widać w klauzuli FROM,  odwołaliśmy się dwukrotnie do tej  samej  tabeli  za pomocą 
dwóch aliasów E i M. 

Operatory zbiorowe 

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 
zbiorowych zwracały te samy typy wierszy, np.: (liczba, ciąg znaków, ciąg znaków, data). 

Operator UNION 

Operator  zbiorowy  UNION  jest  używany  do  tworzenia  sumy  dwóch  zbiorów  wierszy 
(wyników  zapytania  SELECT).  Aby  otrzymać  wszystkie,  wzajemnie  różne  wiersze 
zwracane w wyniku dwóch poleceń SELECT, napiszemy: 

 
SELECT JOB  
FROM EMP 
WHERE DEPTNO=30 
UNION 
SELECT JOB  
FROM EMP 
WHERE DEPTNO=10 
       
JOB       
--------- 
CLERK     
MANAGER   
PRESIDENT 
SALESMAN 
 

Operacja  UNION  (podobnie  jak  inne  operatory  zbiorowe)  powoduje  automatyczną 
eliminację duplikatów. Aby otrzymać w wyniku wszystkie wiersze z obu tabel należy użyć 
operatora UNION ALL. 
 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

 

Podstawy języka SQL

 

Strona 50 

Operator INTERSECT 

Operator  zbiorowy  INTERSECT  (przecięcie  zbiorów)  powoduje  wybranie  wierszy 
wspólnych dla wyników obu zapytań SELECT. 

 
SELECT JOB  
FROM EMP 
WHERE DEPTNO=30 
INTERSECT 
SELECT JOB  
FROM EMP 
WHERE DEPTNO=20 
       
JOB       
--------- 
CLERK     
MANAGER   

Operator MINUS 

Operator  zbiorowy  MINUS  (różnica  zbiorów)  powoduje  wybranie  wierszy  zwracanych 
przez pierwszy rozkaz, nie zwracanych przez rozkaz drugi. 

 
SELECT JOB  
FROM EMP 
WHERE DEPTNO=30 
MINUS 
SELECT JOB  
FROM EMP 
WHERE DEPTNO=20 
       
JOB       
--------- 
SALESMAN  
 

Zapytanie  może  się  składać  z  więcej  niż  dwóch  zapytań  SELECT  połączonych 
operatorami  zbiorowymi.  W  takim  przepadku  najwyższy  priorytet  ma  operator 
INTERSECT,  potem  operatory  UNION  i  MINUS  (równe  priorytety).  W  przypadkach 
wątpliwych najlepiej stosować nawiasy. 

Klauzula ORDER BY w zapytaniach z operatorami zbiorowymi 

W zapytaniach  z operatorami  zbiorowymi  można  użyć klauzuli  ORDER BY.  Odnosi się 
ona zawsze do wyniku zapytania i  może być użyta tylko raz. Umieszcza  się ją zawsze na 
końcu  zapytania.  Ponieważ  na  listach  wyboru  poleceń  SELECT  nazwy  mogą  być  różne, 
w klauzuli ORDER BY specyfikuje się nie nazwę kolumny, tylko jej pozycję. 

 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

Podstawy języka SQL

 

 

 

 

Strona 51 

SELECT EMPNO, ENAME, SAL 
FROM EMP 
UNION 
SELECT ID, NAME, SALARY  
FROM EMP_HISTORY 
ORDER BY 2; 
 

Wyniki  powyższego  zapytania  zostaną  posortowane  wg  kolumny  drugiej,  czyli  wg 
nazwisk pracowników. 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

 

Podstawy języka SQL

 

Strona 52 

Ćwiczenia  

1. Znajdź departament w którym nikt nie jest zatrudniony. 

 
   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.  Znajdź  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                                                                                               
 

 

 

 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

Podstawy języka SQL

 

 

 

 

Strona 53 

5.  Znajdź  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 

 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

 

Podstawy języka SQL

 

Strona 54 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

Podstawy języka SQL

 

 

 

 

Strona 55 

Podzapytania 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

 

Podstawy języka SQL

 

Strona 56 

 

Podzapytania zagnieżdżone 

Podzapytanie to polecenie SELECT zagnieżdżone w innym poleceniu SELECT.  

 

SELECT kolumna_1, kolumna_2, … 
FROM    tabela 
WHERE  kolumna =  (SELECT kolumna 
                                 FROM    tabela 

                                 WHERE  warunek); 

 

Podzapytanie  to  wewnętrzny  SELECT  wykonywany  w  pierwszej  kolejności,  po  to,  aby 
jego wynik został użyty do wykonania zapytania zewnętrznego. 

Podzapytania zwracające jeden wiersz 

Podzapytania zwracające pojedynczą wartość można traktować jak zwykłe wyrażenie. 

Aby znaleźć pracowników zarabiających powyżej średniej, możemy postąpić następująco: 

 

1. znaleźć średnią pensję: 

 
SELECT AVG(SAL) 
FROM EMP; 
 
AVG(SAL)   
---------- 
2073,21429 
 

2. znaleźć  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 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

Podstawy języka SQL

 

 

 

 

Strona 57 

FORD       ANALYST         3000 
SCOTT      ANALYST         3000 
 

Aby znaleźć wszystkich zatrudnionych na tym samym stanowisku co SMITH, napiszemy: 

 
SELECT ENAME, JOB 
FROM EMP 
WHERE JOB=(SELECT JOB 
           FROM EMP 
           WHERE ENAME='SMITH'); 
 
ENAME      JOB       
---------- --------- 
JAMES      CLERK     
SMITH      CLERK     
ADAMS      CLERK     
MILLER     CLERK     

Podzapytania zwracające wiele wierszy 

Jeśli  w  firmie pracowałoby  więcej osób  o  nazwisku  SMITH,  to  poprzednie podzapytanie 
nie  miałoby  sensu.  Co  więcej  zapytanie  wewnętrzne  zamiast  pojedynczej  wartości 
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. 

 
SELECT ENAME, JOB 
FROM EMP 
WHERE JOB IN (SELECT JOB 
              FROM EMP 
              WHERE ENAME='SMITH'); 
 

Spróbujmy  teraz  znaleźć  pracowników,  których  pensja  jest  na  liście  najwyższych 
zarobków w departamentach. 

 
SELECT ENAME, SAL, DEPTNO 
FROM EMP 
WHERE SAL IN (SELECT MAX(SAL) 
              FROM EMP 
              GROUP BY DEPTNO); 
 
ENAME      SAL        DEPTNO     
---------- ---------- ---------- 
BLAKE            2850         30 
FORD             3000         20 
SCOTT            3000         20 
KING             5000         10 
 

Rozważmy  teraz  sytuację,  że  w  firmie  pracuje  osoba,  której  zarobki  pokrywają  się 
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. 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

 

Podstawy języka SQL

 

Strona 58 

Warunek, w którym porównujemy wiele wartości 

Spróbujmy przerobić powyższe zapytanie: 

 
SELECT ENAME, SAL, DEPTNO 
FROM EMP 
WHERE (SAL,DEPTNO) IN (SELECT MAX(SAL), DEPTNO 
                       FROM EMP 
                       GROUP BY DEPTNO); 
 
ENAME      SAL        DEPTNO     
---------- ---------- ---------- 
BLAKE            2850         30 
FORD             3000         20 
SCOTT            3000         20 
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 
należy najwyższa pensja. 

Kolumny  na  liście  wyboru  wewnętrznego  (w  klauzuli  WHERE  lub  HAVING)  muszą 
występować  w  kolejności  i  typach  zgodnych  z  kolejnością  i  typami  występującymi 
w klauzuli SELECT zewnętrznego polecenia. 

Operatory ALL i ANY 

Operatory  ALL  i  ANY  można  stosować  w  podzapytaniach  zwracających  więcej  niż  jeden 
wiersz.  Podaje  się  je  w  klauzulach  WHERE  i  HAVING  razem  z  operatorami 
porównywania. 

Operator ANY — wiersz zostanie wybrany, jeśli wyrażenie jest zgodne  co najmniej z jedną 
wartością wybraną w podzapytaniu. 

 
SELECT ENAME, SAL, DEPTNO 
FROM EMP 
WHERE SAL > ANY (SELECT DISTINCT SAL 
                 FROM EMP 
                 WHERE DEPTNO=10); 
 
ENAME      SAL        DEPTNO     
---------- ---------- ---------- 
KING             5000         10 
BLAKE            2850         30 
CLARK            2450         10 
JONES            2975         20 
ALLEN            1600         30 
TURNER           1500         30 
FORD             3000         20 
SCOTT            3000         20 

 

Najniższy  zarobek  w  departamencie  10  wynosi  1300.  Zapytanie  wybierze  wszystkich, 
którzy zarabiają więcej niż 1300. 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

Podstawy języka SQL

 

 

 

 

Strona 59 

Aby  nie  były  wybierane  wielokrotnie  te  same  zarobki  (3000  jest  większe  i  od  1300  i  od 
2450  —  zostałoby  wybrane  dwukrotnie),  często  stosuje  się  razem  z  operatorami  ALL 
i ANY słowo kluczowe DISTINCT. 

 
SELECT ENAME, SAL, DEPTNO 
FROM EMP 
WHERE DEPTNO=10; 
 
ENAME      SAL        DEPTNO     
---------- ---------- ---------- 
KING             5000         10 
CLARK            2450         10 
MILLER           1300         10 
 

Operator  ALL  —  warunek  musi  być  spełniony  przez  wszystkie  wartości  wybrane 
w podzapytaniu. 

Wybierzmy  wszystkich  pracowników,  którzy  zarabiają  więcej  niż  ktokolwiek 
w departamencie 30: 

 
SELECT ENAME, SAL, DEPTNO 
FROM EMP 
WHERE SAL > ALL (SELECT DISTINCT SAL 
                 FROM EMP 
                 WHERE DEPTNO=30) 
ORDER BY SAL; 
 
ENAME      SAL        DEPTNO     
---------- ---------- ---------- 
JONES            2975         20 
FORD             3000         20 
SCOTT            3000         20 
KING             5000         10 
 

Najwyższy  zarobek  w  departamencie  30  wynosi  2850.  Zapytanie  wybierze  wszystkich, 
którzy zarabiają więcej niż 2850. 

Klauzula HAVING z zagnieżdżonymi zapytaniami 

Podzapytania  mogą  występować  również  w  klauzuli  HAVING  (przypominamy  — 
klauzula  HAVING  odnosi  się  do  grup  wierszy).  Nie  istnieje  limit  na  liczbę  poziomów 
zagnieżdżania podzapytań. 

Aby  wybrać  zawody,  w  których  średnia  płaca  jest  wyższa  niż  średnia  płaca  w  zawodzie 
'MANAGER', napiszemy: 

 
SELECT JOB, AVG(SAL) 
FROM EMP 
HAVING AVG(SAL) > (SELECT AVG(SAL) 
                   FROM EMP 
                   WHERE JOB='MANAGER') 
GROUP BY JOB; 
 
JOB       AVG(SAL)   
--------- ---------- 
ANALYST         3000 
PRESIDENT       5000 
 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

 

Podstawy języka SQL

 

Strona 60 

Aby wybrać stanowisko, na którym są najniższe średnie zarobki, napiszemy: 

 
SELECT JOB, AVG(SAL) 
FROM EMP 
HAVING AVG(SAL) = (SELECT MIN(AVG(SAL)) 
                   FROM EMP 
                   GROUP BY JOB) 
GROUP BY JOB; 
 
JOB       AVG(SAL)   
--------- ---------- 
CLERK         1037,5 

Sortowanie danych w podzapytaniu 

W  podzapytaniu  nie  może  występować  klauzula  ORDER  BY.  Klauzula  ORDER  BY 
może wystąpić tylko raz dla całego zapytania i wtedy musi pojawić się jako ostatnia. 

Zapytania skorelowane 

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ę 
zapytanie  zewnętrzne.  W  przypadku  zapytania  skorelowanego  podzapytanie  jest 
wykonywane dla każdego wiersza z zapytania zewnętrznego. 

 

Aby znaleźć osoby, które zarabiają mniej niż wynosi średnia w ich zawodach, napiszemy: 

 
SELECT ENAME, SAL, DEPTNO, AVG(SAL) 
FROM EMP E 
WHERE SAL < (SELECT AVG(SAL) 
             FROM EMP 
             WHERE JOB=E.JOB) 
ORDER BY JOB; 
  
ENAME      SAL        DEPTNO     
---------- ---------- ---------- 
JAMES             950         30 
SMITH             800         20 
CLARK            2450         10 
MARTIN           1250         30 
WARD             1250         30 

Operator EXIST 

W przypadku zapytań skorelowanych czasami interesuje nas tylko, czy wiersz spełniający 
podane warunki istnieje. Wtedy stosujemy operator EXIST. 

 

 

 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

Podstawy języka SQL

 

 

 

 

Strona 61 

Aby  za  pomocą  operatora  EXIST  znaleźć  pracowników,  którzy  mają  podwładnych, 
napiszemy: 

 
SELECT ENAME, SAL, DEPTNO 
FROM EMP E 
WHERE EXISTS (SELECT EMPNO 
              FROM EMP 
              WHERE EMP.MGR=E.EMPNO) 
ORDER BY DEPTNO; 
 
ENAME      SAL        DEPTNO     
---------- ---------- ---------- 
KING             5000         10 
CLARK            2450         10 
JONES            2975         20 
SCOTT            3000         20 
FORD             3000         20 
BLAKE            2850         30 
 

Aby znaleźć departament, w którym nikt nie pracuje: 

 
SELECT DNAME, DEPTNO 
FROM DEPT D 
WHERE NOT EXISTS (SELECT 1 
                  FROM EMP E 
                  WHERE E.DEPTNO=D.DEPTNO) 
ORDER BY DEPTNO; 
 
DNAME          DEPTNO     
-------------- ---------- 
OPERATIONS             40 
 

Zauważmy,  że  zapytanie  wewnętrzne  nie  musi  zwracać  żadnej  wartości  z  tabeli,  istotne 
jest, czy w ogóle zostanie zwrócony wiersz, a nie jego zawartość. 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

 

Podstawy języka SQL

 

Strona 62 

Ćwiczenia 

1.  Znajdź  pracowników  zarabiających  maksymalna  pensję  na  ich  stanowiskach  pracy. 
Uporządkuj ich według malejących zarobków. 

 
JOB       ENAME            SAL                                                                      
--------- ---------- ---------                                                                      
PRESIDENT KING            5000                                                                      
ANALYST   FORD            3000                                                                      
ANALYST   SCOTT           3000                                                                      
MANAGER   JONES           2975                                                                      
SALESMAN  ALLEN           1600                                                                      
CLERK     MILLER          1300                                                                      
 

2.  Znajdź  pracowników  zarabiających  minimalną  pensję  na  ich  stanowiskach  pracy. 
Uporządkuj ich według wzrastających pensji. 

 

JOB       ENAME            SAL                                                                      
--------- ---------- ---------                                                                      
CLERK     SMITH            800                                                                      
SALESMAN  MARTIN          1250                                                                      
SALESMAN  WARD            1250                                                                      
MANAGER   CLARK           2450                                                                      
ANALYST   FORD            3000                                                                      
ANALYST   SCOTT           3000                                                                      
PRESIDENT KING            5000                                                                      
 

3  Wskaż  dla  każdego  departamentu  ostatnio  zatrudnionych  pracowników.  Uporządkuj 
według dat zatrudnienia. 

 

   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, znajdź departamenty, w których nikt nie pracuje. 

 

   DEPTNO DNAME                                                                                     
--------- --------------                                                                            
       40 OPERATIONS                                                                                
 
 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

Podstawy języka SQL

 

 

 

 

Strona 63 

Język definiowania danych 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

 

Podstawy języka SQL

 

Strona 64 

 

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; 

  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) 

VARCHAR (n) 

ciąg  znaków  zmiennej  długości,  parametr  n  wskazuje  maksymalną 
długość ciągu 

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 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

Podstawy języka SQL

 

 

 

 

Strona 65 

LONG 

ciąg  znaków  zmiennej  długości  o  maksymalnym  zakresie  2  GB, 
w tabeli może być tylko jedna kolumna typu LONG 

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 
jedna kolumna typu LONG RAW 

ROWID 

do przechowywania adresów fizycznych wierszy 

Polecenie tworzenia tabel 

Do budowania tabel służy polecenie CREATE TABLE: 

 

CREATE TABLE nazwa_tablicy 
(nazwa_kolumny typ (rozmiar), 

 nazwa_kolumny typ (rozmiar), 

…); 

 

Przykład 

Tworzenie tabeli DEPT: 

 
CREATE TABLE DEPT 
(DEPTNO     NUMBER(2), 
 DNAME      VARCHAR2(12), 
 LOC        VARCHAR2(12)); 

Warunki integralności 

Podczas  definiowania  tabeli  mamy  możliwość  określić,  jakie  warunki  powinny  spełniać  
dane  w  wierszach  wprowadzanych  do  tablicy.  Warunki  takie  nazywa  się  warunkami 
integralności (constraints). 

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. 

Opcje NULL i NOT NULL 

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 
(nazwa_kolumny typ (rozmiar) [NULL | NOT NULL], 

 nazwa_kolumny typ (rozmiar) [NULL | NOT NULL], 

…); 

 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

 

Podstawy języka SQL

 

Strona 66 

Opcja NULL (domyślna) oznacza, że pola tej kolumny mogą przyjmować wartość NULL. 

Opcja NOT NULL oznacza, że pola tej kolumny  muszą mieć określoną wartość, nie mogą 
przyjmować wartości NULL. 

 

Przykład 

 
CREATE TABLE DEPT ( 
DEPTNO       NUMBER NOT NULL, 
DNAME        VARCHAR2(12)); 

Polecenie DESCRIBE 

Aby zobaczyć, jakie tabele ma kolumny i jakie są na nie nałożone warunki, napiszemy: 

 

DESC [DESCRIBE] nazwa_tabeli;   

 

Przykład 

 
DESC DEPT; 
 
Nazwa kolumny                       Wartość           Typ 
------------------------------     --------          ---- 
DEPTNO                              NOT NULL      NUMBER(2) 
DNAME                                              CHAR(14) 
LOC                                                CHAR(13) 

Klauzula CONSTRAINT 

Do  definiowania  innych  niż  NOT  NULL  warunków  integralności  służy  klauzula 
CONSTRAINT. Warunki mogą być wpisanie bezpośrednio przy definicji kolumny lub na 
końcu po zdefiniowaniu wszystkich kolumn. 

 

Warunek umieszczony przy definicji kolumny: 

 

CREATE TABLE nazwa_tablicy 
(... 

 nazwa_kolumny typ (rozmiar) 
CONSTRAINT nazwa_warunku typ_warunku [warunek], 
…); 

 

 

 

 

 

 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

Podstawy języka SQL

 

 

 

 

Strona 67 

Warunek umieszczony po definicjach wszystkich kolumn: 

 

CREATE TABLE nazwa_tablicy 
(... 

 nazwa_kolumny typ (rozmiar), 

 … 
 CONSTRAINT nazwa_warunku typ_warunku warunek, 
 CONSTRAINT nazwa_warunku typ_warunku warunek, 

 …); 

 

 nazwa_warunku  —  jest  identyfikatorem  warunku  integralności,  nie  jest  wymagane 

jego  podanie,  ale  wtedy  system  nada  warunkowi  własny,  zazwyczaj  nieczytelny 
identyfikator.  Identyfikator  jest  potrzebny  przy  komendach  włączających 
i wyłączających warunki integralności. 

 typ_warunku  —  jeden  z  następujących:  CHECK,  PRIMARY  KEY,  UNIQUE, 

FOREIGN KEY. 

 warunek  —  dodatkowe  informacje  w  zależności  od  typu  warunku,  w  przypadku 

umieszczenia  klauzuli  CONSTRAINT  po  definicjach  kolumn  warunek  musi  być 
zawsze określony. 

Warunek CHECK 

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. 

 

CONSTRAINT CHECK (warunek logiczny); 

 

Warunek  logiczny  musi  być  prosty,  nie  wolno  stosować  podzapytań.  Nie  wolno  też 
używać  funkcji,  których  wartość  zależy  od  okoliczności  wywołania,  np.  SYSDATE  czy 
USER. 

 

Przykład 

 
CREATE TABLE emp 
(... 
 ENAME VARCHAR2(10) CONSTRAINT upper_name_ch CHECK (ENAME=UPPER(ENAME)), 
 ...); 

Warunek PRIMARY KEY 

Definiuje  klucz  główny  tabeli.  Jeśli  kluczem  głównym  jest  jedna  kolumna,  wygodniej 
warunek  zapisać  po  definicji  tej  kolumny.  W  przypadku  klucza  głównego  opartego  na 
kilku kolumnach wygodniej zdefiniować go po definicji wszystkich kolumn. 

 

 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

 

Podstawy języka SQL

 

Strona 68 

Definicja warunku przy definicji kolumny: 

 

kolumna typ rozmiar CONSTRAINT nazwa_warunku PRIMARY KEY; 

 

Definicja warunku po definicji wszystkich kolumn: 

 

CONSTRAINT nazwa_warunku  
PRIMARY KEY (kolumna_1, kolumna_2, …); 

 

W  tabeli  może  być  tylko  jeden  klucz  główny.  Wszystkie  kolumny  wchodzące  w  skład 
klucza  głównego  są  obowiązkowe  —  nie  musimy  dodatkowo  nakładać  warunku  NOT 
NULL.  Dla  każdego  wiersza  zestaw  wartości  dla  klucza  głównego  musi  być  unikalny  — 
inaczej Oracle zgłosi błąd. 

 

Przykład 

 
CREATE TABLE emp  
( empno NUMBER(4) CONSTRAINT emp_pk PRIMARY KEY, 
...); 
 

lub 

 
CREATE TABLE emp  
( empno NUMBER(4), 
..., 
CONSTRAINT emp_pk PRIMARY KEY (empno), 
...); 

Warunek UNIQUE 

Definiuje klucz unikalny tabeli.  Klucz unikalny jest podobny  do klucza głównego, z tym, 
że nie wymusza automatycznie warunku NOT NULL na swoich kolumnach. 

Jeśli  kluczem  unikalnym  jest  jedna  kolumna,  wygodniej  warunek  zapisać  po  definicji  tej 
kolumny. W przypadku klucza opartego na kilku kolumnach wygodniej zdefiniować go po 
definicji wszystkich kolumn. 

 

Definicja warunku przy definicji kolumny: 

 

kolumna typ rozmiar CONSTRAINT nazwa_warunku UNIQUE 

 

Definicja warunku po definicji wszystkich kolumn: 

 

CONSTRAINT nazwa_warunku UNIQUE (kolumna_1, kolumna_2,...) 

 

W  tabeli  może  być  wiele  kluczy  unikalnych.  Dla  każdego  wiersza  zestaw  wartości  dla 
klucza unikalnego musi być unikalny — inaczej Oracle zgłosi błąd. Warunek NOT NULL 
można do kolumn klucza unikalnego dopisać osobno. 

 

 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

Podstawy języka SQL

 

 

 

 

Strona 69 

Przykład 

 
CREATE TABLE dept  
( dname VARCHAR2(12) CONSTRAINT dept_uk UNIQUE 
...); 

Warunek FOREIGN KEY 

Definiuje klucz obcy,  reprezentujący  związek z  inną tabelą.  Sprawia że,  wartości kolumn 
z tym kluczem  mogą przyjmować tylko wartości z klucza głównego lub unikalnego innej, 
wskazanej tabeli. 

Jeśli  kluczem  obcym  jest  jedna  kolumna,  wygodniej  warunek  zapisać  po  definicji  tej 
kolumny. W przypadku klucza opartego na kilku kolumnach wygodniej zdefiniować go po 
definicji wszystkich kolumn. 

 

Definicja warunku przy definicji kolumny: 

 

kolumna typ rozmiar CONSTRAINT nazwa_warunku  

   

 

          REFERENCES nazwa_tabeli lista_kolumn; 

 

Definicja warunku po definicji wszystkich kolumn: 

 

CONSTRAINT nazwa_warunku  
FOREIGN KEY (lista kolumn tabeli definiowanej) 
REFERENCES nazwa_tabeli lista_kolumn; 

 

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. 

Własności klucza obcego 

  W tabeli z kluczem obcym nie można wstawić wiersza o wartościach klucza obcego 

nie mających odpowiedników w tabeli obcej. 

  W  tabeli  z  kluczem  obcym  nie  można  zmodyfikować  wiersza  na  wartości  klucza 

obcego nie mających odpowiedników w tabeli obcej. 

  Z  tabeli  obcej  nie  można  usunąć  wiersza  do  którego  odwołują  się  wartości  klucza 

obcego  innej  tabeli.  Można zażądać usuwania wraz z wierszem  wszystkich  wierszy 
w  tabeli  z  kluczem  obcym,  do  których  ten  wiersz  się  odwołuje.  W  tym  celu  przy 
klauzuli  CONSTRAINT  definiującej  klucz  obcy  należy  umieścić  dyrektywę  ON 
DELETE CASCADE. 

 

 

 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

 

Podstawy języka SQL

 

Strona 70 

Przykład 

W poniższej tabeli emp są zdefiniowane dwa klucze obce:  

  deptno — z kolumną deptno tabeli dept, 

  mgr — z kolumną empno tabeli emp i żądaniem usunięcia wszystkich pracowników 

w przypadku usunięcia szefa. 

 
 CREATE TABLE EMP ( 
 EMPNO     NUMBER(4) CONSTRAINT EMP_PRIMARY_KEY PRIMARY KEY, 
 ENAME     VARCHAR(10), 
 JOB       VARCHAR(9), 
 MGR       NUMBER(4) CONSTRAINT EMP_SELF_KEY REFERENCES EMP (EMPNO), 
 HIREDATE  DATE, 
 SAL       NUMBER(7,2), 
 COMM      NUMBER(7,2), 
 DEPTNO    NUMBER(2) NOT NULL 
           CONSTRAINT EMP_FOREIGN_KEY FOREIGN KEY REFERENCES DEPT  
           ON DELETE CASCADE); 

Klauzula DEFAULT 

Klauzula  DEFAULT  służy  do  wskazania,  jaka  wartość  ma  być  wstawiona  do  kolumny, 
jeśli nie została określona konkretna wartość. 

 

... 

kolumna typ (rozmiar) DEFAULT wyrażenie 

... 

 

Wyrażenie  musi  być  proste,  nie  wolno  stosować  podzapytań,  dozwolone  są  funkcje 
SYSDATE  i USER. 

Tworzenie tabeli przez zapytanie 

Wynik zapytania można zapamiętać jako nowa tabelę. 

 

CREATE TABLE nazwa_tabeli 
[(nazwa_kolumny [NULL | NOT NULL], …)] 
AS SELECT zapytanie; 

 

Lista nazw nowej tabeli może być pominięta, jeśli są poprawnie wskazane nazwy kolumn 
w poleceniu SELECT. 

Jeśli  jest  podana  lista  kolumn  nowej  tabeli,  ilość  pozycji  musi  się  pokrywać  z  ilością 
pozycji występującą na liście wyboru polecenia SELECT. 

 

 

 

 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

Podstawy języka SQL

 

 

 

 

Strona 71 

Przykład 

Aby utworzyć tabelę EMP_CLERK, napiszemy: 

 
CREATE TABLE EMP_CLERK 
AS 
SELECT EMPNO, ENAME, JOB, SAL 
FROM EMP 
WHERE JOB='CLERK'; 
 
Instrukcja przetworzona. 
 

Opis utworzonej tabeli uzyskamy poleceniem DESC: 

 
DESC EMP_CLERK 
 
Nazwa kolumny                  Wartość  Typ 
------------------------------ -------- ---- 
EMPNO                          NOT NULL NUMBER(4) 
ENAME                                   VARCHAR2(10) 
JOB                                     VARCHAR2(9) 
SAL                                     NUMBER(7,2) 

Zmiana definicji tabeli 

Do  zmiany  definicji  tabeli  służy  polecenie  ALTER  TABLE.  Umożliwia  ono  dodawanie 
nowych  kolumn,  zmianę  maksymalnego  rozmiaru  wartości  oraz  zarządzanie  warunkami 
integralności. 

Dodawanie kolumn 

Do dodania nowej kolumny służy klauzula ADD. 

 

ALTER TABLE nazwa 
ADD nazwa_kolumny typ (rozmiar), 
        nazwa_kolumny typ (rozmiar), 

 ...); 

  

Przykład 

 
ALTER TABLE emp 
ADD    adress VARCHAR2(40); 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

 

Podstawy języka SQL

 

Strona 72 

 

Zarządzanie warunkami integralności 

Warunki  integralności  dodajemy  do  tabeli  tak  jak  kolumny,  z  tym,  że  używamy  składni 
takiej, jak przy definiowaniu warunków po definicjach kolumn. 

 

ALTER TABLE nazwa 
ADD (CONSTRAINT nazwa_warunku typ_warunku warunek, 
...); 

 

Sprawdzanie warunków integralności można włączać i wyłączać: 

 

Włączanie: 

 

ALTER TABLE nazwa ENABLE CONSTRAINT nazwa_warunku; 

 

Wyłączanie: 

 

ALTER TABLE nazwa DISABLE CONSTRAINT nazwa_warunku; 

 

Podczas  włączania  sprawdzania  warunków  integralności  Oracle  sprawdza,  czy  wszystkie 
wiersze  tabeli  spełniają  zadane  warunki.  Jeśli  choć  jedno  sprawdzenie  zakończy  się 
błędem, to warunek nie zostanie włączony. 

 

Warunek integralności można usunąć przy pomocy klauzuli DROP: 

 

ALTER TABLE nazwa 
DROP  CONSTRAINT nazwa_warunku; 

Modyfikacja definicji kolumny 

Do modyfikowania definicji kolumny służy klauzula MODIFY: 

 

ALTER TABLE nazwa 
MODIFY nazwa_kolumny typ (rozmiar) [NULL | NOT NULL], 
...); 

 

Nie można zmienić kolumny w której występują wartości NULL na NOT NULL. 

Do niepustej tabeli nie można dodać kolumny o własności NOT NULL. 

Nie można zmniejszyć rozmiaru kolumny ani zmienić jej rozmiaru, jeśli kolumna nie jest 
pusta. 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

Podstawy języka SQL

 

 

 

 

Strona 73 

Usuwanie tabel 

Do usuwania tabel służy polecenie DROP TABLE. 

 

DROP TABLE nazwa; 

 

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; 

 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

 

Podstawy języka SQL

 

Strona 74 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

Podstawy języka SQL

 

 

 

 

Strona 75 

Język manipulowania danymi 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

 

Podstawy języka SQL

 

Strona 76 

 

Wstawianie wierszy 

Polecenie INSERT 

Polecenie INSERT służy do wstawiania nowych wierszy do tabeli: 

 

INSERT INTO nazwa_tabeli  [(lista_kolumn)] 
VALUES (lista_wartości); 

 

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óźniejszych  modyfikacji  tabeli  bezpieczniej  jest  podawać  listę  kolumn  w  klauzuli 
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] 
SELECT lista_wyrażeń 
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: 

 
 
 
 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

Podstawy języka SQL

 

 

 

 

Strona 77 

INSERT INTO manager 
SELECT (empno, ename, sal, job, hiredate) 
FROM emp 
WHERE job='MANAGER'; 

Modyfikacja wierszy 

Polecenie UPDATE 

Do zmiany zawartości wierszy służy polecenie UPDATE. 

 

UPDATE nazwa_tabeli [alias] 
SET kolumna = { wyrażenie | podzapytanie } 
   

[ , kolumna= { wyrażenie | podzapytanie } ...] 

[ WHERE warunek ]; 

 

Przykład 

 
UPDATE  

dept 

SET     

dname='MARKETING' 

 

 

loc='DENVER' 

WHERE   

deptno=20; 

 

Jeśli  nie  wpiszemy  klauzuli  WHERE,  to  zostaną  zmodyfikowane  wszystkie 
wiersze tabeli. 

W  poleceniu  UPDATE  można  używać  podzapytań,  zarówno  zagnieżdżonych  jak 
i skorelowanych. 

Usuwanie wierszy 

Polecenie DELETE 

Do usuwania wierszy z tabeli służy polecenie DELETE. 

 

DELETE  [FROM]  tabela 
[ WHERE warunek ]; 

 

Warunek w klauzuli WHERE określa, które wiersze będą usunięte. 

Przykład    

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

 

Podstawy języka SQL

 

Strona 78 

 
DELETE FROM emp 
WHERE job='MANAGER'; 
 

Zostaną usunięci prasownicy pracujący na stanowisku MANAGER. 

Transakcje 

Co to jest transakcja? 

Transakcja  to  operacja  zmiany  stanu  bazy,  składającą  się  z  wielu  operacji  aktualizacji 
wierszy  w  tabeli.  W  przypadku  przerwania  operacji  zmiany  bazy  w  trakcie  trwania 
transakcji,  baza  powinna  wrócić  do  stanu  sprzed  transakcji.  Dopiero  po  zakończeniu 
transakcji zmiany dokonane w czasie transakcji będą widoczne dla innych użytkowników. 

Transakcja  rozpoczyna  się  automatycznie  podczas  wykonywania  pierwszej  operacji 
DML — zmiany stanu bazy i trwa do: 

  jawnego  zatwierdzenia  transakcji  —  polecenie  COMMIT.  Zmiany  stają  się 

nieodwracalne i widoczne dla innych użytkowników; 

  jawnego  polecenia  wycofania  transakcji  —  polecenie  ROLLBACK.  Baza  danych 

wraca wtedy do stanu sprzed transakcji; 

  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 

zatwierdzana albo wycofywana; 

  przerwania sesji — awaria sieci, brak zasilania — transakcje są wycofywane. 

 

Transakcja  powinna  tworzyć  spójną  całość,  należy  unikać  zbyt  długich  transakcji  — 
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. 

Polecenie COMMIT 

Polecenie to służy do jawnego zatwierdzania transakcji. 

 

COMMIT [WORK]; 

 

Polecenie to powoduje: 

  zakończenie transakcji, 

  zatwierdzenie zmian — stają się nieodwracalne, 

  zmiany stają się widoczne dla innych użytkowników, 

  usunięcie wszystkich blokad i wszystkich punktów zachowania. 

 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

Podstawy języka SQL

 

 

 

 

Strona 79 

Wykonanie  jakiegokolwiek  polecenia  DDL  spowoduje  taki  sam  efekt,  jak  wykonanie 
polecenia COMMIT. 

Polecenie ROLLBACK 

Służy do jawnego wycofywania transakcji. 

 

ROLLBACK [WORK]; 

 

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; 

 

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] nazwa_punktu_zachowania; 

 

Polecenie to: 

  wycofuje część transakcji do podanego punktu zachowania, 

  zachowuje ten punkt zachowania, ale powoduje utartę wszystkich późniejszych, 

  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. 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

 

Podstawy języka SQL

 

Strona 80 

Automatyczny COMMIT 

W  SQL*Plus  możemy  wymusić  automatyczne  zatwierdzanie  transakcji  po  każdym 
poleceniu INSERT, UPDATE i DELETE. 

 

SET AUTO [COMMIT] ON 

 

Dyrektywę odwołujemy poleceniem: 

 

SET AUTO [COMMIT] OFF 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

Podstawy języka SQL

 

 

 

 

Strona 81 

Perspektywy 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

 

Podstawy języka SQL

 

Strona 82 

 

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. 

Tworzenie perspektyw 

Polecenie CREATE VIEW 

Perspektywę tworzy się za pomocą polecenia CREATE VIEW: 

 

CREATE [OR REPLACE] VIEW nazwa_perspektywy 
  [(lista_kolumn)] 
AS 
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. 

 

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'; 
 

 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

Podstawy języka SQL

 

 

 

 

Strona 83 

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, 
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; 

 

Perspektywa może być usunięta tylko przez jej właściciela lub administratora. 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

 

Podstawy języka SQL

 

Strona 84 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

Podstawy języka SQL

 

 

 

 

Strona 85 

Użytkownicy i uprawnienia 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

 

Podstawy języka SQL

 

Strona 86 

 

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. 

 

Dokładnie te zagadnienia są omawiane na kursach administracji.  

Tworzenie użytkownika 

Użytkownika tworzy administrator poleceniem CREATE USER: 

 

CREATE USER użytkownik 
IDENTIFIED BY hasło; 

 

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; 

 

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ą 
utworzone przez niego obiekty. 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

Podstawy języka SQL

 

 

 

 

Strona 87 

 

Zmiana hasła 

Każdy użytkownik może zmienić swoje hasło. Służy do tego polecenie ALTER USER. 

 

ALTER USER użytkownik IDENTIFIED BY hasło; 

 

Przykład 

Jeśli użytkownik Adams chce zmienić hasło na 'tygrys', to pisze: 

 
ALTER USER Adams IDENTIFIED BY tygrys; 

Uprawnienia w bazie Oracle 

W bazie danych Oracle istnieją dwa typy uprawnień: 

  uprawnienia systemowe — prawo do wykonania  określonej akcji  lub wykonywania 

pewnych akcji na określonym typie obiektów, 

  uprawnienia  obiektowe  —  prawo  do  wykonywania  określonej  akcji  na  konkretnym 

obiekcie. 

Uprawnienia systemowe 

Istnieje  ponad  80  różnych  uprawnień  systemowych.  W  celu  ułatwienia  pracy 
administratorom uprawnienia są grupowane w tzw. role. Predefiniowane role to: 

 

CONNECT 

możliwość podłączenia do Oracle 

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 
obiektów zastrzeżonych prze innych użytkowników 

Nadawanie uprawnień systemowych 

Do nadawania uprawnień służy polecenie GRANT: 

 

GRANT uprawnienie [, uprawnienie...] TO użytkownik;  

 

Polecenie  GRANT  nadaje  nowe  uprawnienia  użytkownikowi.  Uprawnienia  nadawane 
kolejnymi poleceniami GRANT się kumulują. 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

 

Podstawy języka SQL

 

Strona 88 

Odbieranie uprawnień systemowych 

Do odbierania uprawnień służy polecenie REVOKE: 

 

REVOKE uprawnienie [, uprawnienie...] FROM użytkownik;  

 

Polecenie 

REVOKE 

odbiera 

wyspecyfikowane 

uprawnienie 

użytkownikowi, 

pozostawiając inne bez zmian. 

Dalsze przekazywanie uprawnień 

Domyślnie  użytkownik  nie  może  przekazywać  nadanych  mu  uprawnień  innemu 
użytkownikowi.  Aby  mógł  to  zrobić,  podczas  nadawania  mu  uprawnienia  administrator 
musi je nadać z opcją WITH ADMIN OPTION. 

 

GRANT uprawnienie [, uprawnienie...] 
TO użytkownik 
WITH ADMIN OPTION;  

Uprawnienia obiektowe 

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. 

Uprawnienia obiektowe definiują prawa użytkownika do obiektu innego użytkownika. 

Nadawanie uprawnień obiektowych 

Uprawnienia obiektowe nadajemy poleceniem: 

 

GRANT uprawnienie [, uprawnienie...] 
ON obiekt 
TO użytkownik [, użytkownik]; 

 

 Poniższa tabela przedstawia najczęściej nadawane uprawnienia obiektowe. 

Prawo 

Obiekt 

SELECT 

wybieranie danych z tabeli lub perspektywy 

INSERT 

wstawianie wierszy do tabeli lub perspektywy 

UPDATE 

modyfikacje wierszy lub nieokreślonych kolumn tabeli lub perspektywy 

DELETE 

usuwanie wierszy z tabeli lub perspektywy 

ALTER 

zmiana definicji kolumn tabeli 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

Podstawy języka SQL

 

 

 

 

Strona 89 

INDEX 

indeksowanie tabeli 

REFERENCES  odwołanie do tabeli w obcych kluczach 

ALL 

wszystkie prawa 

EXECUTE 

prawo wykonywania procedur, funkcji i pakietów 

 

Przykład 

Aby  nadać użytkownikowi Scott prawa wyboru do swojej tabeli  emp, użytkownik Adams 
napisze: 

 
GRANT SELECT 
ON emp 
TO Scott; 

Dalsze przekazywanie uprawnień 

Domyślnie  użytkownik  nie  może  przekazywać  nadanych  mu  uprawnień  obiektowych 
innemu użytkownikowi. Aby mógł to zrobić, uprawnienie  musi być nadane z opcją WITH 
GRANT OPTION. 

 

GRANT uprawnienie [, uprawnienie...] 
ON obiekt 
TO użytkownik 
WITH GRANT OPTION;  

 

Przykład 

Aby  nadać  użytkownikowi  Scott  prawa  wyboru  do  swojej  tabeli  emp  z  prawem 
przekazywania tego uprawnienia dalej, użytkownik Adams napisze: 

 
GRANT SELECT 
ON emp 
TO Scott 
WITH GRANT OPTION; 

Uprzywilejowanie typu PUBLIC 

Aby  przekazać  prawo  do  obiektu  wszystkim  użytkownikom  bazy,  używamy  opcji 
PUBLIC: 

 
GRANT SELECT 
ON emp 
TO PUBLIC; 

Odbieranie uprawnień obiektowych 

Do odbierania uprawnień obiektowych służy polecenie REVOKE: 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

 

Podstawy języka SQL

 

Strona 90 

 

REVOKE uprawnienie [, uprawnienie...] 
ON obiekt 
FROM użytkownik;  

Akcje na obiektach innego użytkownika 

Do obiektu innego użytkownika odwołujemy się następująco: 

 

nazwa_użytkownika.nazwa_obiektu 

 

Przykład 

Aby wybrać wszystko z tabeli emp użytkownika Adams, napiszemy: 

 
SELECT * 
FROM Adams.emp; 
 

Aby ułatwić odwołania do obiektu, można stworzyć dla nich synonimy. 

Synonimy 

Dla obiektów można tworzyć nazwy zastępcze — synonimy: 

 

CREATE SYNONYM nazwa synonimu 
FOR [właściciel.]nazwa_obiektu; 

 

Synonimy usuwa się poleceniem DROP SYNONYM: 

 

DROP [PUBLIC] SYNONYM nazwa_synonimu; 

Role 

Rola  to  zestaw  uprawnień,  jaki  można  przyznawać  użytkownikom  bazy.  Rola  może 
zawierać  zarówno  uprawnienia  systemowe  jak  i  obiektowe.  Dzięki  rolom  ułatwione  jest 
administrowanie bazą. Jeśli przykładowo dla kierowników działów zdefiniowana jest rola 
KIEROWNICY,  to  chcąc  wszystkim  kierownikom  nadać  jakieś  uprawnienie  wystarczy 
dodać je do roli KIEROWNICY. 

Tworzenie roli 

Rolę tworzy się poleceniem CREATE ROLE: 

 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

Podstawy języka SQL

 

 

 

 

Strona 91 

CREATE ROLE rola  
[IDENTIFIED BY  hasło]; 

 

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; 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

 

Podstawy języka SQL

 

Strona 92 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

Podstawy języka SQL

 

 

 

 

Strona 93 

Indeks

ADD, 71, 72 

ALL, 32, 49, 58, 59, 89 

ALTER, 71, 72, 78, 87, 89 

ALTER TABLE, 71, 72 

ALTER USER, 87 

AND, 23, 25, 26, 41, 48 

AS, 70, 71, 82, 83 

ASCENDING, 20 

AUTO, 80 

AVG, 32, 33, 34, 35, 37, 56, 59, 60 

BETWEEN... AND, 22 

CASCADE, 73, 86 

CASCADE CONTRAINTS, 73 

CHAR, 64, 66 

CHECK, 67, 83 

COMMIT, 78, 79, 80 

CONSTRAINT, 66, 67, 68, 69, 70, 72 

COUNT, 32, 33, 37 

CREATE, 78 

CREATE ROLE, 91 

CREATE SYNONYM, 90 

CREATE TABLE, 65, 66, 67, 68, 69, 70, 71, 76 

CREATE USER, 86 

DATE, 64, 70 

DEFAULT, 70 

DELETE, 69, 70, 77, 78, 80, 88 

DESC, 20, 27, 66, 71 

DESCENDING, 20 

 

DESCRIBE, 66 

DISABLE, 72 

DISTINCT, 19, 32, 58, 59 

DROP, 72, 73, 78, 83, 86, 90, 91 

DROP ROLE, 91 

DROP SYNONYM, 90 

DROP TABLE, 73 

DROP USER, 86 

ENABLE, 72 

EXECUTE, 89 

EXIST, 60, 61 

FOR, 90 

FOREIGN KEY, 67, 69, 70 

FROM, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 

25,  26,  32,  33,  34,  35,  36,  40,  41,  48,  49,  50, 
51,  56,  57,  58,  59,  60,  61,  71,  76,  77,  78,  82, 
83, 88, 90 

GRANT, 87, 88, 89, 91 

HAVING, 35, 36, 58, 59, 60 

IDENTIFIED BY, 86, 87, 91 

IN, 22, 23, 24, 26, 57, 58 

INDEX, 89 

INSERT, 76, 77, 80, 88 

INTERSECT, 50 

INTO, 76, 77 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.

background image

 

Podstawy języka SQL

 

Strona 94 

IS NULL, 22, 24, 26 

LIKE, 22, 23, 24, 26 

LONG, 65 

MAX, 32, 33, 35, 37, 57, 58 

MIN, 32, 33, 34, 37, 38, 60 

MINUS, 50 

MODIFY, 72 

NOT, 24, 25, 26, 61, 65, 66, 68, 70, 71, 72 

NULL, 18, 24, 25, 32, 48, 65, 66, 68, 70, 71, 72 

NUMBER, 18, 64, 65, 66, 68, 70, 71 

ON, 69, 70, 80, 88, 89, 90 

ON DELETE CASCADE, 69, 70 

OR, 25, 26, 82 

ORDER  BY,  20,  21,  36,  40,  41,  50,  51,  59,  60, 

61, 83 

PRIMARY KEY, 67, 68, 70 

PUBLIC, 89, 90 

RAW, 65 

REFERENCES, 69, 70, 89 

RENAME TABLE, 73 

REPLACE, 82 

REVOKE, 88, 90, 91 

ROLLBACK, 78, 79 

ROWID, 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, 
50,  51,  56,  57,  58,  59,  60,  61,  70,  71,  76,  77, 
82, 83, 88, 89, 90 

SET, 77, 80 

STDDEV, 32 

SUM, 32 

TO, 73, 79, 87, 88, 89 

UNION, 49, 50, 51 

UNIQUE, 67, 68, 69 

UPDATE, 77, 80, 88 

VALUES, 76 

VARCHAR, 64, 70 

VARCHAR2, 64, 65, 66, 67, 69, 71 

VARIANCE, 32 

VIEW, 82, 83 

WHERE,  21,  22,  23,  24,  25,  26,  33,  35,  36,  40, 

41,  48,  49,  50,  56,  57,  58,  59,  60,  61,  71,  77, 
78, 82, 83 

WITH ADMIN OPTION, 88 

WITH GRANT OPTION, 89 

WORK, 78, 79 

 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.


Document Outline