background image

 

 

SQL - język relacyjnych i 

obiektowo-relacyjnych baz 

danych 

Podstawy

Wykład 2

background image

 

 

Historia baz danych i 

języka baz danych SQL

•      1961–  Integrated  Data  Store  IDS  (Charles 
Bachman) 

– 

pierwszy 

SZBD, 

początek 

sieciowego modelu danych.

•    1965-70  –  Information  Management  System 
IMS (IBM) – hierarchiczny model danych.

•  1970 – Edgar Codd – relacyjny model danych.
•  1971 – CODASYL, sieciowy model danych.
•    1976  –  Peter  Chen  –  model  związków  encji 
(ERD, ERM).

background image

 

 

Historia baz danych i 

języka baz danych SQL

•  Początek  lat  siedemdziesiątych 

  w  laboratorium 

badawczym IBM w San Jose powstał prototyp języka 
SQL o nazwie Sequel. 

• 1973 

 pierwszy system zarządzania relacyjną 

bazą danych (System R w firmie IBM). 

• 1979 

 firma Relational Software (później Oracle) 

wprowadziła na rynek pierwszą komercyjną wersję 
systemu zarządzania relacyjną bazą danych.

• 1987 pierwszy standard języka SQL (ISO), 

• Kolejne wersje standardu: 1989, 1992 SQL2, 1999 
SQL’1999  –  model  obiektowo-relacyjny,  trwają 
prace nad następnymi standardami SQL3 i SQL4.

 

background image

 

 

Historia baz danych i 

języka baz danych SQL

• 

Lata osiemdziesiąte – badania nad dedukcyjnymi i 

obiektowymi bazami danych.

• 1997 – Standard obiektowych baz danych ODMG 
2.0.

• 1999 – Nieoficjalna wersja nowego standardu 
języka obiektowo-relacyjnych baz danych (SQL’1999)

• Lata dziewięćdziesiąte – rozszerzenie baz danych o 
nowe aspekty: architektury wielowarstwowe, 
rozproszenie, równoległość, Internet, hurtownie 
danych, OLAP, multimedia, GIS (Geographical 
Information Systems), ERP (Enterprise Resource 
Planning), MRP (Management Resource Planning).

background image

 

 

Programowanie w modelach 

sieciowym i hierarchicznym

• Modele sieciowy i hierarchiczny opierały się 
na pojęciu pliku jako zbioru rekordów przy 
czym rekordy były rozszerzone o pola 
wskaźnikowe kierujące do rekordów w innych 
plikach. 

• Nie było potrzeby wprowadzania nowego 
języka programowania – wystarczał Cobol i/lub 
PL/I.

background image

 

 

Programowanie w modelu 

relacyjnym - język SQL

 

• Specjalny język dostępu i manipulowania 
danymi w bazie danych – operujący na obiektach 
modelu relacyjnego – relacjach czyli tabelach.

• Potrzeba określenia sposobu użycia instrukcji 
tego języka w programach  konwencjonalnych 
języków programowania jak C, C++, Java, Visual 
Basic – również objęte Standardem SQL.

• Powszechne użycie narzędzi generowania 
aplikacji klienckich jak Oracle Forms, Visual 
Basic, MS Access.

background image

 

 

SQL: typy napisowe, 

Standard

 

Stałe są zapisywane w pojedynczych apostrofach np.:  

'Jan III', 'Kowalski'

• CHARACTER(N), CHAR(N) – napis znakowy stałej 
długości N. 

• NATIONAL CHARACTER(N), NATIONAL CHAR(N) 

 napis znakowy stałej długości N zapisany w 

alfabecie narodowym. 
• CHARACTER VARYING(N), VARCHAR(N) 

 napis 

znakowy zmiennej długości. 
• NATIONAL CHARACTER VARYING(N), NATIONAL 
CHAR VARYING(N), NCHAR VARYING(N) 

 napis 

znakowy zmiennej długości zapisany w alfabecie. 
• BIT(N) 

 ciąg bitów długości N. Ciągi bitów są 

głównie używane do reprezentowania danych 
graficznych i dźwiękowych. 
• BIT VARYING(N) 

 ciąg bitów zmiennej długości.

background image

 

 

SQL: typy napisowe, 

Oracle

 

Stałe są zapisywane w pojedynczych apostrofach np.:  

'Jan III', 'Kowalski'

• CHAR(N) – napis znakowy stałej długości N 
(w Oracle). 
• NCHAR(N) – napis znakowy stałej długości N 
zapisany w alfabecie narodowym. 
• VARCHAR(N) i zalecane (a od 9i jedyne) 
VARCHAR2(N) – napis znakowy zmiennej 
długości. 
• NVARCHAR2(N) – napis znakowy zmiennej 
długości zapisany w alfabecie narodowym. 
• RAW(n) i LONG RAW – ciąg bitów zmiennej 
długości.

background image

 

 

Typy numeryczne i typy 

dat, 

Standard

• NUMERIC, DECIMAL, NUMERIC(P,S) – typ 
dziesiętny.

• FLOAT, REAL – typ zmiennopozycyjny.
• INTEGER – typ całkowity.

• DATE – data. 
• TIME –  godzina.
• TIMESTAMP –  data i godzina.

background image

 

 

Typy numeryczne, 

Oracle

• NUMBER(N), NUMBER(P,S) – typy 
numeryczne.

• FLOAT = NUMBER(P,S).
• INTEGER = NUMBER(38).

background image

 

 

Typy dat, 

Oracle

• DATE – data.

 

 

od 9i

 

• 

TIMESTAMP – data i godzina. 

• INTERVAL DAY TO SECOND – dzień, 
godzina, minuta i sekunda.

• INTERVAL YEAR TO MONTH – rok i miesiąc.
• TIMESTAMP WITH TIME ZONE – data i 
godzina z uwzględnieniem strefy czasowej.

• TIMESTAMP WITH LOCAL TIME – to samo 
co poprzednio z przeliczeniem strefy na 
lokalną dla klienta.

background image

 

 

SQL’1999

• Lob – duże obiekty albo binarne albo tekstowe.
• Blob - duże obiekty binarne – podtyp typu Lob.
• Clob – duże obiekty tekstowe – podtyp typu 
Lob.

• Boolean – wartości logiczne true, false i 
unknown.

background image

 

 

Oracle

• Long - dokumenty tekstowe (tylko jedna 
kolumna tego typu w tabeli).

• Blob – duże obiekty binarne.
• Bfile - duże obiekty binarne zapisywane w 
plikach.

• Clob – duże obiekty tekstowe.
• NClob – duże obiekty tekstowe zapisane w 
alfabecie narodowym.

• Rowid - identyfikatory (adresy) wierszy 
tabel.

background image

 

 

Oracle i SQL’1999

Oprócz typów standardowych (wbudowanych) 
istnieje 

możliwość 

definiowania 

przez 

użytkowników 

własnych 

typów 

danych 

związanych z opcją obiektową.

 

background image

 

 

Przykładowy schemat z 

Oracle

Związek Emp.Sal z 
wartościami w tabeli 
Salgrade:

Zarobki Emp.Sal są 
zaliczane do grupy 
Salgrade.Grade takiej, 
że:

Emp.Sal należy do 
przedziału:  
[Salgrade.Losal,   
Salgrade.Hisal]

background image

 

 

 

EMPNO ENAME     JOB       MGR HIREDATE   SAL COMM DEPTNO

----- ------- --------- ---- --------- ----- ---- ------

 7839 KING    PRESIDENT      17-NOV-81  5000          10

 7698 BLAKE   MANAGER   7839 01-MAY-81  2850          30

 7782 CLARK   MANAGER   7839 09-JUN-81  2450          10

 7566 JONES   MANAGER   7839 02-APR-81  2975          20

 7654 MARTIN  SALESMAN  7698 28-SEP-81  1250 1400     30

 7499 ALLEN   SALESMAN  7698 20-FEB-81  1600  300     30

 7844 TURNER  SALESMAN  7698 08-SEP-81  1500    0     30

 7900 JAMES   CLERK     7698 03-DEC-81   950          30

 7521 WARD    SALESMAN  7698 22-FEB-81  1250  500     30

 7902 FORD    ANALYST   7566 03-DEC-81  3000          20

 7369 SMITH   CLERK     7902 17-DEC-80   800          20

 7788 SCOTT   ANALYST   7566 09-DEC-82  3000          20

 7876 ADAMS   CLERK     7788 12-JAN-83  1100          20

 7934 MILLER  CLERK     7782 23-JAN-82  1300          10

Tabela EMP

background image

 

 

Tabele DEPT i SALGRADE

DEPT

DEPTNO DNAME       LOC

------ ----------- --------

    10 ACCOUNTING  NEW YORK

    20 RESEARCH    DALLAS

    30 SALES       CHICAGO

    40 OPERATIONS  BOSTON

SALGRADE

GRADE LOSAL HISAL

----- ----- -----

    1   700  1200

    2  1201  1400

    3  1401  2000

    4  2001  3000 

    5  3001  9999

background image

 

 

DDL – Data Definition 

Language

Tworzenie tabeli

CREATE TABLE nazwa_tabeli(

nazwa_kolumny 

 

 

typ_danych 

więzy_spójności,...);

background image

 

 

Tworzenie tabeli Dept i 

Salgrade

CREATE TABLE Dept(

Deptno NUMBER(2) PRIMARY KEY,
Dname VARCHAR2(14),
Loc VARCHAR2(13)

);
CREATE TABLE  Salgrade(

Grade NUMBER(2) PRIMARY KEY,
Losal NUMBER(7,2) NOT NULL,
Hisal NUMBER(7,2) NOT NULL,
CONSTRAINT  chk_salgrade_1  CHECK  (Losal 

< Hisal)
);

background image

 

 

Tworzenie tabeli Emp

CREATE TABLE Emp(

Empno NUMBER(4) PRIMARY KEY,
Ename VARCHAR2(10),
Job VARCHAR2(9),
Mgr NUMBER(4) REFERENCES Emp,
Hiredate DATE,
Sal NUMBER(7,2),
Comm NUMBER(7,2),
Deptno  NUMBER(2)  NOT  NULL  REFERENCES 

Dept,

CONSTRAINT chk_Emp_1 CHECK (Comm < Sal)

);

background image

 

 

Więzy spójności

• NOT  NULL  –  pseudo-wartość  Null  nie  jest 

dozwolona w danej kolumnie,

• PRIMARY KEY – kolumna stanowi klucz główny,
• REFERENCES nazwa_tabeli – kolumna stanowi klucz 

obcy  odwołujący  się  do  klucza  głównego  podanej 
tabeli,

• UNIQUE  –  kolumna  stanowi  klucz  jednoznaczny 

(wartości w kolumnie nie powtarzają się),

• CHECK  –  warunek  jaki  ma  być  spełniony  dla 

wartości w wierszu.

Opcjonalne  słowo  kluczowe  CONSTRAINT  wprowadza 

explicite nazwę dla więzów spójności.

 

background image

 

 

SQL*Plus – interfejs do 

bazy danych Oracle

 

describe

 

tabela - wyświetl schemat tabeli

 

SQL>

 

describe dept

 

 Name               Null?           Type

 ------------------ -------------- ---------------------

 DEPTNO         NOT NULL NUMBER(2)

 DNAME                               VARCHAR2(14)

 LOC                                     VARCHAR2(13)

Przedrostek

 

SQL>

 

sygnalizuje  linię  poleceń  w 

programie SQL*Plus.

 

background image

 

 

Wyświetlenie zawartości 

tabeli Dept 

SELECT * FROM Dept;

DEPTNO DNAME             LOC

------------ 

-------------------- 

----------------

        10     ACCOUNTING NEW YORK

        20     RESEARCH       DALLAS

        30     SALES                CHICAGO

        40     OPERATIONS   BOSTON

background image

 

 

DDL – Data Definition 

Language 

Usuwanie tabeli

DROP TABLE

 

nazwa_tabeli;

Przy istniejących więzach spójności referencyjnej:

DROP TABLE 

nazwa_tabeli

 CASCADE 

CONSTRAINTS;

(samo

 

CASCADE

 

w Standardzie)

background image

 

 

Usuwanie tabeli - przykłady

• DROP TABLE Emp;

 Gdy  inne  tabele  mają  klucze  obce  odwołujące 
się  do  danej  tabeli,  jej  usunięcie  się  nie 
powiedzie np.

• DROP TABLE Dept;

gdy  w  tabeli  Emp  jest  klucz  obcy  Deptno 
odwołujący  się  do  klucza  głównego  tabeli  Dept 
trzeba użyć:

• DROP TABLE Dept CASCADE CONSTRAINTS;

background image

 

 

DDL – Data Definition 

Language 

 Zmiana schematu tabeli

  W Standardzie

ALTER TABLE Emp ADD COLUMN Pesel CHAR(11);

Podobnie

 

MODIFY COLUMN, DROP COLUMN

.

  W Oracle

  

ALTER TABLE Emp ADD (Pesel CHAR(11)); 

ALTER 

TABLE 

Emp 

MODIFY 

(Pesel 

VARCHAR2(11)); 

ALTER TABLE Emp DROP (Pesel);

 

background image

 

 

Dodawanie nowych więzów 
spójności

    W Standardzie

ALTER TABLE Emp 

ADD CONSTRAINT Emp_Sal_comm 

CHECK (Sal + Comm <=10000);

 

    W Oracle (nawiasy są opjonalne)

ALTER TABLE Emp 

ADD (CONSTRAINT Emp_Sal_comm 

CHECK (Sal + Comm <=10000));

background image

 

 

Definiowanie kluczy 

obcych

•  

Jeśli klucz obcy w tabeli A odwołuje się do klucza 

głównego  w  tabeli  B,  a  klucz  obcy  w  tabeli  B 

odwołuje  się  do  klucza  głównego  w  tabeli  A,  to 

mamy  do  czynienia  z  cyklicznymi  powiązaniami 

REFERENCES. 
•  Wykonujemy  instrukcje  CREATE  TABLE  nie 

definiując kluczy obcych. 
• Za pomocą instrukcji ALTER TABLE wprowadzamy 

więzy  REFERENCES  odwołujące  się  do  istniejących 

już tabel.

 

ALTER TABLE Emp 
ADD CONSTRAINT fk_Emp_dept 
FOREIGN KEY (Deptno) REFERENCES Dept;

background image

 

 

Indeksy

• Indeksy stanowią podstawową strukturę 
danych w bazach danych umożliwiającą:

– sprawdzanie warunku jednoznaczności 
klucza (głównego, jednoznacznego);

– szybkie wyszukiwanie informacji w 
tabelach. 

Nie ma ich w Standardzie SQL2!

background image

 

 

Zakładanie indeksów  

(Oracle)

CREATE [UNIQUE] INDEX nazwa_indeksu  
ON nazwa_tabeli
(kolumna [ASC|DESC] ,...);

• 

UNIQUE 

– 

wartości 

pozycji 

indeksu 

jednoznacznie  muszą  określać  wiersz  tabeli; 
indeks 

taki 

nazywa 

się 

indeksem 

jednoznacznym;  opcja  ta  umożliwia  realizację 
więzów spójności UNIQUE;

•  ASC  (domyślne)  i  DESC  –  w  jakiej  kolejności 
utrzymywać  pozycje  indeksu:  rosnącej  czy 
malejącej.  Może  to  przyśpieszyć  wypisywanie 
wierszy tabeli w wymaganym porządku.

 

background image

 

 

Przykłady

   CREATE UNIQUE INDEX Ind_Emp_Num 
    ON Emp(Empno);

tworzy  indeks  jednoznaczny  na  kolumnie  Empno  tabeli 
Emp.

 

–  System  będzie  zapewniać,  że  wartości  w  kolumnie 
Empno nie będą się powtarzały.

   CREATE INDEX Ind_Emp_Naz 
    ON Emp(Ename DESC);

tworzy zwykły indeks na kolumnie Ename tabeli Emp.

–  Wartości w kolumnie Ename mogą się powtarzać. 

– Pozycje  indeksu są trzymane w  odwrotnym 
porządku leksykograficznym (DESC).

 

background image

 

 

Usuwanie Indeksów

Indeks można usunąć z bazy danych za pomocą 
następującej instrukcji:

 

           

DROP INDEX

 nazwa_indeksu;

 

System  zarządzania  bazą  danych  zwykle  sam 
zakłada  indeksy  dla  kluczy  głównych  i 
jednoznacznych.

background image

 

 

DML - Data Modification 

Language

Wstawianie danych

INSERT INTO

 

nazwa_tabeli

 

VALUES

 (wartość,...);

 Przykład:

INSERT INTO 

Emp

 VALUES 

(9901, 'Kowalski', 'SALESMAN', 9345, '23-JAN-

90',300,100,12);

background image

 

 

DML - Data Modification 

Language

Wstawianie danych

Można też dokonywać wstawienia ograniczając się 
do kolumn o podanych nazwach - do nie 
wymienionych system sam wstawia pseudo-wartości 
Null:

INSERT INTO

 

nazwa_tabeli(nazwa_kolumny,...)

VALUES

 

(wartość,...);

 

 Przykład:

INSERT INTO 

Emp

(Empno, Ename, Deptno) 

VALUES (9901, 'Kowalski', 10);

background image

 

 

DML - Data Modification 

Language

Modyfikowanie danych

UPDATE

 

nazwa_tabeli

 

SET

 

nazwa_kolumny = wyrażenie,...

   

[

WHERE

 

warunek];

 

 Przykład:

np. aby zwiększyć wszystkim sprzedawcom (Job =  
'SALESMAN') Sal o 10%:

UPDATE 

Emp

 SET Sal = Sal*1.1

WHERE Job = 'SALESMAN';

background image

 

 

DML - Data Modification 

Language

Usuwanie danych

DELETE FROM

 nazwa_tabeli

[

WHERE

 warunek];

Przykład:

np. aby usunąć wszystkich pracowników, którzy nie 

mają określonego stanowiska (Job IS NULL):

DELETE FROM 

Emp

WHERE Job IS NULL;

background image

 

 

DCL - Data Control 

Language

Zatwierdzanie i wycofywanie zmian 

w bazie danych

Instrukcje INSERT, DELETE i UPDATE nie dokonują 
same trwałych zmian w bazie danych. Aby zmiany 
wprowadzone przez nie utrwalić:

COMMIT [WORK];

Można też zrezygnować z wprowadzenia zmian do 
bazy danych, wycofując je za pomocą instrukcji:

ROLLBACK [WORK];

background image

 

 

Zapytania 

wybierające

• Instrukcja SELECT określa: 

–   z jakich tabel w bazie danych mają być 

sprowadzone dane,
–    jakie warunki mają spełniać dane i 
–    w jakiej postaci mają się pojawić przed 

użytkownikiem (aplikacją użytkownika). 

• Instrukcja SELECT składa się z kilku części 
nazywanych klauzulami.

 

            SELECT [DISTINCT] 
nazwa_kolumny
,...

FROM nazwa_tabeli
[WHERE warunek];

background image

 

 

Przykład - klauzule 

SELECT i FROM 

Aby wypisać nazwiska, 
zarobki i stanowiska 
pracowników firmy piszemy:

          SELECT  Ename, 
Sal, Job
     FROM Emp;

Aby  wypisać  całą  tabelę 
piszemy:

 

SELECT  *
FROM Emp;

lub

TABLE Emp;

 (Standard, 

Oracle nie

)

ENAME             SAL JOB

---------- ---------- ---------
SMITH             800 CLERK
ALLEN            1600 SALESMAN
WARD             1250 SALESMAN
JONES            2975 MANAGER
MARTIN           1250 SALESMAN
BLAKE            2850 MANAGER
CLARK            2450 MANAGER
SCOTT            3000 ANALYST
KING             5000 PRESIDENT
TURNER           1500 SALESMAN
ADAMS            1100 CLERK
JAMES             950 CLERK
FORD             3000 ANALYST
MILLER           1300 CLERK

background image

 

 

Przykład - klauzula 

WHERE

Wypisz dane o nazwiskach, zarobkach i 
stanowiskach tych pracowników firmy, którzy 
pracują w dziale o numerze 10.

 

ENAME             SAL JOB

---------- ---------- ---------

CLARK            2450 MANAGER

KING             5000 PRESIDENT

MILLER           1300 CLERK

SELECT Ename, Sal, 
Job
FROM Emp
WHERE Deptno= 10;

background image

 

 

Przykład - klauzula 

WHERE

Przy  SELECT  wypisywane  są  tylko  te  wiersze,  dla 
których  warunek  WHERE  przyjmuje  wartość  True 
(ani False ani Null).

 

SELECT Ename, Sal, Comm
FROM   Emp
WHERE  Sal <= Comm;

 

ENAME             SAL       COMM

---------- ---------- ----------

MARTIN           1250       1400

background image

 

 

Operatory logiczne

• Warunek WHERE może też być koniunkcją (AND), 

alternatywą (OR) bądź negacją (NOT) innych warunków 

logicznych. 
• Priorytety: NOT, AND, OR.

Wypisz wiersze pracowników, których zarobki są 
większe lub równe 1100 i którzy pracują na 
stanowisku 'CLERK'.

SELECT Empno, Ename, Job, Sal
FROM   Emp
WHERE  Sal>=1100 AND Job='CLERK';

     EMPNO ENAME      JOB              SAL

---------- ---------- --------- ----------
      7876 ADAMS      CLERK           1100
      7934 MILLER     CLERK           1300

background image

 

 

DISTINCT

• Powtarzające się wiersze nie są automatycznie 
eliminowane z wyników zapytania. 

• Słowo DISTINCT oznacza eliminację powtarzających 
się wierszy  - wymaga posortowania wierszy 
wynikowych, aby można było wyznaczyć grupy 
powtarzających się wierszy.

Wypisz 

identyfikatory 

osób, 

które 

mają 

podwładnych.

      MGR

----------
      7566
      7698
      7782
      7788
      7839
      7902

SELECT DISTINCT Mgr
FROM Emp;

background image

 

 

Aliasy

•      W  miejscu  nazwy  kolumny  może  wystąpić 
wyrażenie.

•      Wyrażeniom  na  liście  SELECT  mogą  zostać 
nadane nazwy czyli aliasy: 

  prosty  identyfikator  -  napis  złożony  z  liter,   
cyfr i znaków podkreślenia 

  ograniczony  identyfikator  -  dowolny  napis 
ograniczony podwójnymi cudzysłowami, np.

 

"Zarobki pracownika:"

ograniczonym 

identyfikatorze 

mogą 

występować  spacje,  które  są  niedozwolone  w 
prostym identyfikatorze.

background image

 

 

Wyrażenia

Oblicz okres zatrudnienia pracownika od daty jego 
zatrudnienia do dnia dzisiejszego – w pełnych 
latach:

SELECT Empno, Ename,
Trunc(Months_Between(Sysdate,Hiredate)/1
2) Zatrudnienie
FROM Emp;

   

EMPNO ENAME      ZATRUDNIENIE

---------- ---------- ------------

      7369 SMITH                19

      7499 ALLEN                19

      7521 WARD                 19

      7698 BLAKE                19

      7782 CLARK                19

      7566 JONES                19

      7654 MARTIN               18

      7934 MILLER               18

      7902 FORD                 18

      7839 KING                 18

      7844 TURNER               18

      7900 JAMES                18

      7788 SCOTT                17

      7876 ADAMS                17

Alias 
prosty

background image

 

 

ORDER BY

•  Wyniki  zapytania  mogą  zostać  posortowane 
w  porządku  rosnącym  -  ASC  (domyślnie)  lub 
malejącym –  DESC.

 

 

SELECT  [DISTINCT]  wyrażenie  [[AS] 

alias],...

FROM nazwa_tabeli
[WHERE warunek]
[ORDER BY wyrażenie
 [ASC|DESC],...];

• Wartości NULL są ustawiane na końcu przy 
ASC oraz na początku przy DESC.

background image

 

 

Semantyka prostego 

zapytania

1. Weź tabelę podaną w klauzuli FROM.

2. Jeśli  występuje  klauzula  WHERE,  do  każdego 

wiersza  danej  tabeli  zastosuj  warunek  WHERE. 
Pozostaw  wiersze  dające  wartość  True  (usuwając 
wiersze dające False lub Null).

3. Dla każdego pozostającego wiersza oblicz wartości 

wyrażeń na liście SELECT.

4. Jeśli  po  SELECT  występuje  DISTINCT,  usuń 

duplikaty wśród wynikowych wierszy.

5. Jeśli  występuje  klauzula  ORDER  BY,  wykonaj 

sortowanie  wynikowych  wierszy  zgodnie  ze 
specyfikacją.

background image

 

 

Operatory

1. Operatory arytmetyczne   +, -, *, /

2. Operator konkatenacji (łączenia) napisów   ||    

 np. zestawienie nazwiska pracownika z 
zajmowanym przez niego stanowiskiem

 

     

'Osoba '|| Ename || ' pracuje na 

stanowisku ' || Job 

3. Operatory porównań  =, <>, <, <=, >, >=  W 

Oracle argumenty operatorów porównań muszą 
być wyrażeniami, w Standardzie mogą być 
listami wyrażeń (ale tej samej długości) - 
wówczas porównania odbywają się po 
składowych.

4. Operator testujący  Null

    

x IS [NOT] NULL

5. Operatory logiczne NOT, AND, OR

background image

 

 

Operatory

1. Operator przynależności do listy wartości:

 

[NOT] IN (x1,....)

   

np.

 

Kolor IN ('Czarny', 

'Biały', 'Czerwony')

Przykład

       Wypisz nazwiska pracowników 

pracujących na stanowisku CLERK, ANALYST 

lub SALESMAN.

SELECT Ename
FROM Emp
WHERE Job IN(

’CLERK’, ’ANALYST’, 

’SALESMAN'

);

 

background image

 

 

Operatory

1. Operator zawierania się “między”

     

x [NOT] 

BETWEEN z AND y, 

np.

  

Sal BETWEEN 1000 AND 

2000

 Przykład

       Wypisz dane pracowników, których 

pensja mieści się w przedziale między 1000 

a 2000.

SELECT *
FROM Emp
WHERE 

Sal BETWEEN 1000 AND 2000

;

      W Oracle x,y,z,x1,… muszą być wyrażeniami, w 

Standardzie mogą być listami wyrażeń tej samej 

długości - porównania odbywają się po 

składowych.

background image

 

 

Operatory

3. Operator wzorca w tekście  

x [NOT] LIKE y

 gdzie y 

zawiera: 

znak podkreślenia  

_

  oznaczający dowolny jeden 

znak oraz 

znak 

%

 oznaczający dowolny ciąg znaków np. 

Np. gdy Ename = 'Kowalski' to 

Ename LIKE 'Kowal

%'

     i       

Ename LIKE  'Kowalsk_'

  są spełnione.

  

Przykład

       Wypisz dane pracowników, których 

nazwiska kończą się ma 

'

 

TH '

.

SELECT *
FROM Emp
WHERE 

Ename like 

'

 %

TH '

;

background image

 

 

Specjalne funkcje Oracle

Funkcja  interpretująca  Null:

        NVL(V1,V2)

    - 

wartością  jest  V2  jeśli  V1  jest  Null,  w  przeciwnym 

razie V1

•                    NVL(Sal,0)

  i 

NVL(Stopień,  'Brak')

   

umożliwiają  zinterpretowanie  wartości  Null    jako 

odpowiednio 0 bądź  'Brak'.
Funkcje konwersji:    

TO_CHAR, TO_DATE, TO_NUMBER

TO_DATE('03-27-01', 'mm-dd-yy') 

zmienia  typ  napisowy  na  datowy,  przy  czym 

informacja  o  dacie  ma  być  odczytywana  zgodnie  z 

formatem  podanym  jako  drugi  argument:  numer 

miesiąca,  dzień  i  rok  reprezentowany  przez  dwie 

cyfry.

Funkcje bez argumentów:  

Sysdate, User

background image

 

 

Funkcja NVL (Oracle)

•  Wybierz nazwiska i roczne zarobki wszystkich 
pracowników 

(uwzględnij 

prowizję 

pracowników, którzy ją mają) 

SELECT  Empno,  12*  Sal  +  NVL(Comm,  0) 
“Roczne zarobki”
FROM Emp
ORDER BY Sal DESC;

EMPNO RoczneZarobki
7839

60000

7902

36000

7788

36000

7566

35700

7698

34200

7782

29400

7499

19500

7844

18000

7934

15600

7654

16400

7521

15050

7876

13200

7900

11400

7369

9600

background image

 

 

Funkcja NVL (Oracle)

•    Gdybyśmy  nie  użyli  funkcji  NVL, 
uzyskalibyśmy taką odpowiedź: 

SELECT  Empno,  12*  Sal  +  Comm  “Roczne 
zarobki”
FROM Emp
ORDER BY Sal DESC;

EMPNO RoczneZarobki
7839
7902
7788
7566
7698
7782
7499

19500

7844

18000

7934
7654

16400

7521

15050

7876
7900
7369

Tu widać konsekwencje tego, 
że wypisywane są tylko te 
wiersze, dla których 
warunek WHERE przyjmuje 
wartość True (ani False ani 

Null

).

W Accessie zamiast funkcji 
NVL jest funkcja nz.


Document Outline