Sunteți pe pagina 1din 23

INFORMATIC*I*

IF.03. Limbajul SQL

Capitolul IF.03. Limbajul SQL


Cuvinte-cheie:
Tranzacie, commit, roll back, mulime de selecie, uplu,
n-uplu, cardinal, indexare, diagram E-R

IA.03.1. Generaliti
n 1992 ANSI (American National Standards Institute) a definitivat varianta standard a unui
limbaj destinat sistemelor de gestiune a bazelor de date denumit Structured Query Language,
prescurtat SQL (pronunai "es-q-el"). Frazele SQL permit crearea, actualizarea, interogarea i
distrugerea bazelor de date relaionale. Dei toate sistemele de gestiune de baze de date folosesc
SQL, adesea ele implementeaz i funcii care nu exist n standard.
SQL este un limbaj declarativ. Spre deosebire de un limbaj procedural, un astfel de limbaj
este constituit din comenzi, de multe ori foarte complexe, care se execut imediat. Practic o sesiune
de lucru n SQL este constituit dintr-o succesiune de cicluri, fiecare coninnd scrierea unei
comenzi, trimiterea ei spre serverul de baze de date, executarea ei i afiarea imediat a rezultatului
produs.
Comenzile pot fi salvate individual n vederea executrii ulterioare. Ele pot fi de asemenea
memorate n fiiere de comenzi care pot fi lansate n execuie printr-o singur comand dup care se
execut automat.

IA.03.2. Comenzile de baz ale limbajului SQL


Comenzile de baz ale limbajului SQL care sunt: Create, Alter, Select, Insert, Update,
Delete i Drop, sunt suportate de toate sistemele de gestiune de baze de date i permit realizarea
tuturor activitilor majore legate de crearea i exploatarea bazelor de date relaionale. Cuvintele
cheie ale limbajului SQL pot fi scrise att cu litere mici ct i cu majuscule.
Odat instalat aplicaia Oracle XE se pot da comenzi SQL folosind interpretorul de
comenzi SQL Plus, executabil ntr-o fereastr Command. Pentru lansarea sa n execuie se
acceseaz Run SQL Command Line din grupul de comenzi Oracle Database 11g Express Edition:

Dup lansarea n execuie a interpertorului este necesar conectarea la serverul Oracle XE


printr-o comand connect, ca n exemplul urmtor, dup care pot fi introduse comenzi. Comenzile
-1-

INFORMATIC*I*

IF.03. Limbajul SQL

SQL pot fi introduse pe mai multe linii, marcarea sfritului introducerii unei comenzi realizndu-se
printr-un caracter '/'.

Introducerea comenzilor SQL poate fi realizat ns i folosind o interfa grafic. Pentru aceasta se
lanseaz n execuie aplicaia Oracle SQL Developer i se realizeaz conectarea la serverul de baze
de date Oracle XE.

Dup conectare, n fereastra afiat se selecteaz tabul Worksheet, se introduce comanda


SQL dorit i se apas butonul
(Run Statement) :
-2-

INFORMATIC*I*

IF.03. Limbajul SQL

Aplicaia va afia n fereastra Script Output rezultatul executrii comenzii :

n orice moment al lucrului cu Oracle SQL Developer se poate iniia o sesiune de lucru cu
interpretorul SQL selectnd butonul SQL :

Aplicaia va solicita precizarea conexiunii care va fi folosit dup care va afia interfaa
specific.

-3-

INFORMATIC*I*

IF.03. Limbajul SQL

Observaie : Unele comenzi SQL, respectiv cele care modific date sau tabele din baza date
necesit dup executare apsarea butonului Commit. Pentru a evita problemele cauzate de
eventualele pene (hardware, reea etc.) care ar putea interveni pe timpul executrii unor astfel de
comenzi, serverele de baze de date implementeaz conceptul de tranzacie. De fiecare dat cnd
este lansat o comand care modific date din baz este iniiat automat o tranzacie. Dac operaia
asupra bazei este reuit modificarea devine efectiv prin executarea comenzii commit. n caz de
eroare se execut comanda roll back, care va aduce baza de date n starea iniial, efectul comenzii
SQL date fiind anulat.
Commit

Comenzile introduse n fereastra SQL Commands pot fi terminate prin ';', '/' sau se poate
chiar omite caracterul terminal. Astfel pentru suprimarea tabelului cafea se poate scrie:
drop table cafea;
sau pur i simplu
drop table cafea
efectul fiind acelai.
Comenzile SQL pot fi memorate individual apsnd butonul Save:

Comenzile memorate pot fi readuse n fereastra aplicaiei prin deschiderea fiierului n care
au fost salvate (File / Open) dup care pot fi reexecutate.
-4-

INFORMATIC*I*

IF.03. Limbajul SQL

IA.03.3. Tipuri de date suportate de Oracle SQL


a. iruri de caractere
Pentru pstrarea irurilor de caractere, Oracle definete patru tipuri de date:
-

VARCHAR sau VARCHAR2 - pentru iruri de caractere de lungime variabil.


Cele dou tipuri opereaz n acest moment identic dar se recomand folosirea
tipului VARCHAR2.

NVARCHAR2 pentru iruri de caractere de lungime variabil n format


UNICODE (16 bii / caracter),

CHAR - pentru iruri de caractere avnd lungime fix,

NCHAR - pentru iruri de caractere avnd lungime fix, n format UNICODE.

Indiferent de tip, la declararea unui cmp trebuie precizat lungimea:


nume varchar2(50)
Pentru VARCHAR2 lungimea specificat este cea maxim admis n timp ce pentru
CHAR ea va fi efectiv utilizat, irurile de lungime mai mic fiind completate la dreapta cu spaii.
Rezult c VARCHAR2 este mai eficient, n exemplele prezentate n continuare acest tip fiind
utilizat sistematic.
b. Date numerice
Datele numerice pot fi declarate n Oracle folosind unul dintre tipurile urmtoare:
-

NUMBER - pentru numere zecimale,

BINARY_FLOAT - pentru numere reale (memorate fr conversie n baza 10),

BINARY_DOUBLE- pentru numere reale n dubl precizie (memorate fr


conversie).

Cel mai frecvent se folosete tipul NUMBER.


NUMBER se poate scrie:

Pentru declararea unei date de tip

inaltime number(3)
sau,
inaltime number(3,0)
Pentru numere care au o parte ntreag i una zecimal se scrie:
pret NUMBER(7,2)
nsemnnd reprezentarea cmpului pret folosind 7 poziii zecimale, ultimele dou fiind folosite
pentru partea real.
Exemple:
Numr

Declaraie

Valoare memorat

123.89

NUMBER

123.89

123.89

NUMBER(3)

123.89

NUMBER(6,2)

123.89

123.89

NUMBER(6,1)

123.9

124

-5-

INFORMATIC*I*

IF.03. Limbajul SQL


123.89

NUMBER(3)

eroare (depire)

123.89

NUMBER(4,2)

eroare (depire)

BINARY_FLOAT i BINARY_DOUBLE sunt tipuri recomandate n cazul n care datele


astfel reprezentate sunt folosite la calcule mai complicate.
c. Tipuri pentru timp i dat calendaristic
Pentru declararea cmpurilor care vor pstra data calendaristic sau timpul, Oracle
folosete tipurile DATE i TIMESTAMP.
Formatele implicite de introducere a datei i a timpului rezult din tabelul urmtor.
Valoare

Tip dat

12-MAR-2007

DATE

2007-02-01 01:02:04.1234

TIMESTAMP

Val. memorat

d. Tipuri pentru memorarea imaginilor


Pentru declararea cmpurilor destinate pstrrii n baza de date a imaginilor, Oracle
folosete tipurile CLOB sau BLOB.

IA.03.4. Crearea tabelelor n SQL


Comanda CREATE TABLE
Comanda CREATE TABLE servete la crearea unui nou tabel i la descrierea cmpurilor
acestuia. Ea are formatul general:
CREATE TABLE nume
(nume_cmp tip_cmp [(marime [,precizie])]
[NULL | NOT NULL]
[PRIMARY KEY | UNIQUE]
[,nume_cmp tip_cmp [(marime [,precizie])]
[NULL | NOT NULL]
)
Exemplu:
CREATE TABLE regiune
(ID_regiune CHAR(2) NOT NULL PRIMARY KEY,
nume VARCHAR2(40)
)
Observaie: Cutarea unui articol ntr-un tabel folosind cheia primar este deosebit de
eficient datorit indexrii automate operate pentru acel cmp. Indexarea presupune pstrarea
ntr-un fiier separat, pentru fiecare articol al tabelului, a valorii cheii primare i a adresei fizice a
articolului. Fiierul astfel obinut va fi ncrcat n memorie i va fi pstrat ordonat dup valorile
cheii primare. Cutarea unui articol folosind cheia primar va putea deveni astfel foarte eficient
-6-

INFORMATIC*I*

IF.03. Limbajul SQL

deoarece n locul unei cutri sistematice a articolului, n tot fiierul, se va putea cuta n fisierul de
index din memorie, folosind un algoritm de cutare binar. Folosind acest algoritm de exemplu
gsirea unui articol ntr-un fiier de index (ordonat) avnd 65000 articole necesit maximum 16
operaii de tip comparare de valori.
Crearea tabelelor poate fi ns realizat mai uor folosind Oracle SQL Developer, aa cum
s-a procedat deja. n cazul n care trebuie impuse restricii asupra cmpurilor (declararea cheii
primare, declararea unor chei strine sau impunerea indexrii dup unul sau mai multe cmpuri)
fraza SQL corespunztoare va deveni din ce n ce mai complicat, recurgerea la intefaa grafic
fiind practic obligatorie.

Obs. n fraza SQL afiat denumirile cmpurilor, constrngerilor sau denumirea tabelului apar ntre
ghilimele. Aceast scriere permite folosirea de denumiri coninnd spaii (de evitat!). Dac denumirile nu
pot da natere la confuzii, ghilimelele pot fi omise.

-7-

INFORMATIC*I*

IF.03. Limbajul SQL

Din cele prezentate se observ diversitatea modatitilor de scriere a unei comenzi SQL. Pentru a
limita volumul de cunotine legate de sintaxa limbajului, n cele ce urmeaz comenzile vor fi realizate i
testate folosind interfaa grafic afiat de Oracle SQL Developer.
Observaie : Aa cum s-a vzut deja, interfaa permitegrafic utilizat permite afiarea comenzilor de
creare a tabelelor create. Deoarece n timpul realizrii unei baze de date se pot produce incidente mergnd
pn la distrugerea serverului Oracle XE, este bine s se creeze copii ale domeniului (schemei) pe care se
lucreaz (folosind procedura cunoscut deja). Se pot ns salva separat, ntr-un fiier text avnd extensia .sql
numai comenzile de descriere a tabelelor bazei de date. Executarea acestui fiier de comenzi va realiza
refacerea tabelelor, fr repopularea lor cu date.
Ordinea n care se execut comenzile de creare a tabelelor bazei este important deoarece crearea
unui tabel care conine chei strine nu poate fi realizat naintea crerii tabelului referit.
Suprimarea unui tabel se realizeaz folosind comanda DROP TABLE. Sintaxa comenzii este:
DROP TABLE Nume_tabel
Pentru a da comanda de tergere a unui tabel folosind interfaa grafic se selecteaz n meniul
contextual afiat la selectarea tabelului Table / Drop :

IA.03.5. Comanda SELECT


Comanda SELECT creeaz o mulime de selecie.
n teoria mulimilor o mulime (a1, a2, , an) de obiecte distincte poart numele de n-uplu.
Valoarea n este denumit cardinalul mulimii iar un element ai al acesteia se numete uplu ((eng.
tuple).
O mulime de selecie poate conine un obiect, mai multe obiecte sau niciunul. Elementele
dintr-o mulime de selecie conin numai cmpurile indicate n comanda de creare a acesteia. Din
acest punct de vedere se poate considera c SELECT creaz un subtabel coninnd numai
informaiile specificate. Cmpurile nregistrrilor mulimii de selecie pot proveni dintr-un tabel
sau din mai multe tabele legate.
-8-

INFORMATIC*I*

IF.03. Limbajul SQL

Comanda SELECT are formatul general:


SELECT [DISTINCT] coloana1 [,coloana2]
FROM tabel_1[,tabel_2, ...]
[WHERE condiii]
[GROUP BY list-coloane]
[HAVING conditii]
[ORDER BY list-coloane [ASC | DESC] ]
Dintre cele cinci clauze ale comenzii SELECT numai clauza FROM este obligatorie.
Fiecare dintre clauze are la rndul ei reguli i parametri pentru construcie, fcnd din SELECT cea
mai complex comand a limbajului SQL. n frazele SELECT irurile de caractere se pun ntre
caractere ' (apostrof).
Pentru construirea unei comenzi SELECT folosind interfaa grafic a aplicaiei Oracle SQL
Developer se selecteaz succesiv schema (conexiunea) i tabul Query Builder.

drag & drop

Dup selectarea tabului Query Builder se aduc n zona grafic tabelele din care se selecteaz
informaii (trire cu mouse-ul, drag & drop), ca n imagine.
Observaie: Dac ntre tabelele selectate exist relaii, ca n exemplul din figur
(ANGAJATI.ID_ANGAJAT = COPII.ID_PARINTE), aplicaia va simboliza aceasta printr-o linie.
La capetele liniei apar simbolurile 1 i indicnd o legtur de tip 1 la n.
Cmpurile care trebuie s fie incluse n mulimea de selecie se indic tot prin selectare cu
mouse-ul, ca n figur :

cmpuri incluse n
mulimea de selecie
-9-

INFORMATIC*I*

IF.03. Limbajul SQL

a. Selectarea informaiilor dintr-un singur tabel


Exemple fundamentale:
SELECT Nume, Prenume FROM angajati

Dup precizarea cmpurilor se apas butonul


rezultatul executrii comenzii SELECT create.

(Run Statement) i aplicaia afieaz

Pentru a vedea comanda SELECT se selecteaz tabul Worksheet sau se apas butonul SQL
din panoul Query Result :

Comanda afiat poate fi copiat folosind butonul Copy

- 10 -

INFORMATIC*I*

IF.03. Limbajul SQL

SELECT * FROM angajati

Dac n locul indicrii cmpurilor se selecteaz * mulimea de selecie va conine toate


cmpurile tabelului.
SELECT Nume, Prenume FROM angajati ORDER BY Nume

Dup indicarea cmpurilor folosite la sortare se poate folosi Sort Type pentru a modifica
sensul acesteia (ASCENDING sau DESCENDING). n cazul n care se folosesc mai multe cmpuri,
acestea sunt separate prin virgul.
SELECT * FROM Angajati ORDER BY salar DESC, Nume ASC, Prenume ASC
SELECT nume, prenume FROM angajati WHERE nume = 'Pop'

- 11 -

INFORMATIC*I*

IF.03. Limbajul SQL

Folosirea unor criterii de selecie (Criteria) va genera o comand SQL n care va fi


prezent i clauza WHERE.
SELECT nume, prenume FROM angajati WHERE nume LIKE 'Po%'
n clauza WHERE a comenzii SELECT se poate folosi caracterul generic % , cu sensul
de orice ir de caractere . Comanda precedent va permite selectarea liniilor n care nume = Pop
sau nume=Popescu. Clauza WHERE prenume LIKE '%a' de exemplu permite selectarea tuturor
liniilor n care prenumele se termin n "a".
Pentru a introduce criterii complexe, ca n exemplul anterior sau n exemplele urmtoare,
se va selecta tabul Worksheet i comanda va fi tastat n fereastra afiat.
La scrierea condiiei se pot folosi operatorii logici AND, OR sau NOT precum i operatorii
relaionali:
=

Egal

>

Mai mare

<

Mai mic

>=

Mai mare sau egal

<=

Mai mic sau egal

<> sau !=

Diferit de

LIKE

*Vezi nota

Exemple suplimentare:
SELECT * FROM angajati WHERE nume = 'Popescu' AND
prenume='Mihai'
SELECT * FROM angajati WHERE nume = 'Popescu' OR nume='Mihai'
SELECT * FROM angajati WHERE nume = 'Popescu' AND prenume
IN('Ioan','Vasile','Grigore')
Clauza IN specific o mulime creia trebuie s-i aparin cmpul specificat (prenume).
SELECT * FROM angajati WHERE nume = 'Popescu' AND data_nasterii
BETWEEN '12-MAY-1968' AND '29-MAY-1980'
Clauza BETWEEN permite definirea unui interval cruia trebuie s-i aparin cmpul
specificat (data_nasterii).
Clauza DISTINCT permite realizarea unei mulimi de selecie care conine nregistrri
distincte, care difer prin cel puin o valoare a unui cmp. De exemplu :
SELECT DISTINCT Localitate FROM angajati

- 12 -

INFORMATIC*I*

IF.03. Limbajul SQL

Ultima fraz va provoca afiarea numelor localitilor n care domiciliaz angajaii. Fr


clauza DISTINCT, numele oraului Cluj-Napoca de exemplu ar fi fost probabil repetat de mai multe
ori.
Clauza GROUP BY permite gruparea nregistrrilor dup valoarea unui cmp.
Exemplul 1:
SELECT Localitate, COUNT(*) as Nr_Cititori FROM Cititor GROUP BY Localitate
n cazul n care se realizeaz o grupare, fiecare dintre liniile mulimii de selecie se refer
la un grup de nregistrri i nu la nregistrri simple. n exemplul precedent, GROUP BY Localitate
precizeaz cmpul dup care se realizeaz gruparea. nafara valorii cmpului dup care se face
gruparea, n astfel de situaii liniile mulimii de selecie pot conine rezultatul aplicrii unor funcii
matematice asupra articolelor care formeaz grupul (suma valorilor dintr-un cmp, media valorilor,
valoarea maxim sau minim, numrul de articole care formeaz grupul etc). Pentru cmpurile care
vor conine rezultatul aplicrii unor funcii se recomand folosirea clausei AS nume pentru
atribuirea unui nume relevant coloanei respective. n exemplul dat s-a afiat rezultatul funciei
COUNT(*), care numr nregistrrile din grup. Funciile care pot fi apelate pentru cmpuri
numerice sunt prezentate n tabelul de mai jos.

MIN

returneaz cea mai mic valoare dintr-o


coloan (cmp numeric)

MAX

returneaz cea mai mare valoare dintr-o


coloan (cmp numeric)

SUM

returneaz suma valorilor numerice


dintr-o coloan (cmp numeric)

AVG

returneaz media valorilor dintr-o coloan


(cmp numeric)

COUNT

returneaz numrul de valori dintr-o


coloan

COUNT DISTINCT

returneaz numrul de valori distincte


dintr-o coloan

Exemplul 2:
SELECT Sectie, MAX(salar) as Sal_Max FROM Angajati
GROUP BY Sectie
Se pot ns aplica aceleai funcii i ntregului fiier, fr gruparea articolelor, caz n
care mulimea de selecie va conine o singur nregistrare:
SELECT AVG(salar) FROM Angajati
SELECT AVG(salar) FROM Angajati WHERE functie='Zidar'
SELECT COUNT(*) FROM Cititor

- 13 -

INFORMATIC*I*

IF.03. Limbajul SQL

Clauza HAVING servete la precizarea unui filtru care se aplic grupurilor de articole,
dac este prezent clauza GROUP BY.
Exemplu:
SELECT Sectie, AVG(Salar) FROM Angajati GROUP BY Sectie HAVING
AVG(Salar) > 500
Dac n fraza SELECT lipsete clauza GROUP BY, folosirea clauzei HAVING nu se
justific, ea avnd acelai efect ca i clauza WHERE.
O situaie aparte prezint comenzile SELECT care nu realizeaz o mulime de selecie ci un
calcul matematic. n acest caz from nume_tabel va fi nlocuit prin from dual, ca n exemplul
urmtor:

Cuvntul rezervat dual astfel folosit permite respectarea sintaxei comenzii SELECT.
b. Selectarea din mai multe tabele
Principial o baz de date relaional presupune repartizarea datelor n mai multe tabele.
Aa cum s-a vzut deja, acest mod de stocare permite eliminarea informaiilor redondante. Pentru a
gsi articolele dintr-un tabel n relaie cu nregistrri din alt tabel trebuie ns inclus n frazele
SELECT condiia de legtur dintre cele dou tabele. Reprezentarea grafic reprezentnd tabelele
bazei de date i relaiile dintre ele poart numele de diagram E-R (entiti-relaii, eng. entityrelationship). Exemplu fundamental:

- 14 -

INFORMATIC*I*

IF.03. Limbajul SQL

Comanda SQL corespunztoare este urmtoarea:

Comanda generat conine clauza suplimentar JOIN.


legturilor existente ntre tabele.

Aceasta permite definirea

Legturile dintre tabele pot fi impuse i folosind clauza WHERE, ca n exemplul urmtor:
SELECT Edituri.Nume, Carti.Titlu, Carti.Anul
Nume='Minerva' AND Edituri.CodE=Carti.CodE

FROM

Edituri,

Carti

WHERE

A doua condiie coninut n clauza WHERE este cea care leag tabelele Edituri i Carti.
Folosind JOIN, exemplul anterior poate fi scris astfel:
SELECT Edituri.Nume, Carti.Titlu, Carti.Anul
FROM Edituri INNER JOIN Carti ON Edituri.CodE=Carti.CodE
WHERE Nume='Minerva'
Clauza JOIN este ns singura soluie ntr-o alt situaie, respectiv cnd ntr-un tabel se
accept pentru o cheie strin valori nule. Un exemplu simplu este cel al tabelelor Angajati i Soi
prezentate n continuare.

- 15 -

INFORMATIC*I*

IF.03. Limbajul SQL

Dintre angajaii din primul tabel doi sunt cstorii, n cazul lor ID_SOT are valori nenule.
Dac se dorete realizarea unei mulimi de selecie care s cuprind angajaii, iar pentru cei
cstorii numele i prenumele soului/soiei, fraza SELECT ar putea fi urmtoarea:
SELECT Angajati.Nume, Angajati.Prenume,Soti.Nume_prenume
FROM Angajati, Soti WHERE Angajati.ID_SOT=SOTI.ID_SOT
Rezultat:

Rezultatul nu este probabil cel dorit deoarece prin condiia pus sunt exclui din mulimea
de selecie angajaii necstorii.
Soluia este oferit de clauza LEFT OUTER JOIN:
SELECT Angajati.Nume, Angajati.Prenume,Soti.Nume_prenume
FROM Angajati LEFT OUTER JOIN Soti on Angajati.ID_SOT=SOTI.ID_SOT
Rezultatul va cuprinde toate liniile din primul tabel iar pentru liniile din primul tabel care
au corespondent n al doilea tabel, va include i informaiile corespunztoare din al doilea tabel.

- 16 -

INFORMATIC*I*

IF.03. Limbajul SQL

Similar se poate folosi clauza RIGHT OUTER JOIN pentru includerea tuturor
nregistrrilor din al doilea tabel i selectarea din primul doar a celor care satisfac relaia de
legtur.
Observaie: Pentru a impune n Query Builder tipul de clauz JOIN dorit se selecteaz cu
butonul drept al mouse-ului linia care unete cele dou tabele i se indic folosind meniul
contextual, soluia dorit.

Limbajul SQL permite nlocuirea unei mulimi care contribuie la selecie printr-o alt fraz
SELECT, ca n exemplul urmtor.
SELECT Edituri.Nume, Carti.Titlu, Carti.Anul FROM Edituri, Carti WHERE
Nume='Minerva' AND Edituri.CodE=Carti.CodE AND Titlu.Data IN (SELECT Data FROM
Carti WHERE Data BETWEEN '12-MAY-1975' AND '29-MAY-1980')

Utilizarea parametrilor
SQL permite ca la scrierea comenzii SELECT s se foloseasc parametrii.
acestora sunt cerute ntr-o fereastr separat, n momentul executrii interogrii.
Exemplu :
SELECT * from ANGAJATI WHERE id_angajat > :valoare

- 17 -

Valorile

INFORMATIC*I*

IF.03. Limbajul SQL

Aplicaia va afia o fereastr de dialog n care va cere definirea valorii parametrului


valoare:

Rezultat:

IA.03.6. Comanda INSERT


Comanda INSERT adaug un rnd ntr-un tabel existent.
Exemplu:
INSERT INTO Edituri(CodE,Nume,Adresa,Telefon) VALUES(121,
'Albatros','B-dul Tomis Nr. 32 Constanta','0745654765')
Lista de cmpuri de dup numele tabelului poate fi omis dac toate cmpurile primesc
valori iar acestea sunt scrise n ordinea definit la creare (n care ele apar n capul de tabel). Dac
un cmp nu primete valoare el va primi implicit valoarea NULL, dac la creare, prin modul de
declarare a cmpului, introducerea unei astfel de valori este autorizat.

IA.03.7. Comanda DELETE


Comanda DELETE suprim una sau mai multe nregistrri dintr-un tabel. Ca i n cazul
comenzii SELECT, pentru definirea unui set de nregistrri care vor fi terse se utilizeaz clauza
WHERE.
Exemple:
DELETE FROM Autori WHERE CodAut=7
- 18 -

INFORMATIC*I*

IF.03. Limbajul SQL

DELETE FROM Edituri


Ultima comand suprim toate nregistrrile din tabelul Edituri.

IA.03.8. Comanda UPDATE


Comanda UPDATE permite modificarea unei nregistrri sau a unui set de nregistrri.
Pentru precizarea setului de nregistrri afectate se folosete clauza WHERE.
Exemplu:
UPDATE Edituri SET Adresa='str. 1 Mai Nr. 12', Telefon='0745343435'
WHERE Nume='Dacia'
UPDATE Angajati SET Salar=Salar*1.2 WHERE Salar<450

IA.03.8. Comanda ALTER


Comanda ALTER permite modificarea structurii unui tabel. Modificrile care pot fi
operate sunt suprimarea unei coloane, adugarea unei coloane sau modificarea constrngerilor
aferente unei coloane.
Exemple:
a. Suprimarea unei coloane:
ALTER TABLE Edituri DROP COLUMN adresa
b. Adugarea unei coloane:
ALTER TABLE Edituri ADD COLUMN adresa varchar2(45) NULL
Observaie: Modificrile n structura unei baze de date sunt rare i apar n primele etape de
dezvoltare. Din acest motiv comanda ALTER este rar folosit, de regul modificrile dorite fiind
impuse folosind interfaa grafic oferit de Oracle SQL Developer.

IA.03.9. Aplicaii
1. Introducei cteva comenzi SQL, folosind i opiunea de salvare a acestor comenzi:
toi autorii n ordine alfabetic, afind toate cmpurile tabelului;
select * from autori order by nume asc
numele i prenumele autorilor n ordine alfabetic;
select nume, prenume from autori order by nume asc
titlurile crilor din bibliotec;
- 19 -

INFORMATIC*I*

IF.03. Limbajul SQL

select titlu from carti


titlurile crilor aprute n anul 1991;
select titlu from carti where an_apar=1991
titlurile crilor aprute n anul specificat de utilizator (variabil);
select titlu from carti where an_apar=:an
titlul crilor i anul de apariie pentru crile care au codul > 2;
select titlu, an_apar from carti where cod_carte>2
titlul crii, anul apariiei i codul crii pentru crile aprute nainte de 1991 i care
au codul < 2;
select titlu, an_apar,
an_apar<=1991 and cod_carte>2

cod_carte

from

carti

where

numele i prenumele cititorilor care au nume care ncep cu Po;


select nume, prenume from cititori where nume like 'Po%'
afiarea localitilor de unde provin cititorii;
select distinct localitatea from cititori
afiarea numrului de cri din biblitec;
select count(*) as nr from carti
2. Introducei i alte comenzi SQL pentru a afla date din celelalte tabele.
3. Introducei cteva comenzi SQL, folosind i opiunea de salvare a acestor comenzi:
selectarea crilor i a editurilor corespunztoare
SELECT CARTI.TITLU,
EDITURI.NUME FROM CARTI
INNER JOIN EDITURI ON EDITURI.COD_EDIT = CARTI.COD_EDIT
ORDER BY EDITURI.NUME

selectarea tuturor crilor i vizualizarea titlului, a anului apariiei i a autorului:

- 20 -

INFORMATIC*I*

IF.03. Limbajul SQL

SELECT CARTI.TITLU, CARTI.AN_APAR, AUTORI.NUME,


AUTORI.PRENUME FROM CARTI INNER JOIN AUTCARTI
ON CARTI.COD_CARTE = AUTCARTI.COD_CARTE
INNER JOIN AUTORI ON AUTORI.COD_AUT = AUTCARTI.COD_AUTOR

titlul crii (n ordine alfabetic), numele i prenumele autorului i editura:

SELECT CARTI.TITLU, AUTORI.NUME, AUTORI.PRENUME,


EDITURI.NUME AS EDITURA FROM CARTI
INNER JOIN AUTCARTI ON CARTI.COD_CARTE = AUTCARTI.COD_CARTE
INNER JOIN AUTORI ON AUTORI.COD_AUT = AUTCARTI.COD_AUTOR
INNER JOIN EDITURI ON EDITURI.COD_EDIT = CARTI.COD_EDIT
ORDER BY CARTI.TITLU

Observaie: n SQL || (dou caractere | ) reprezint operatorul de concatenare. Folosind


acest operator se pot genera n mulimea de selecie valori obinute prin concatenarea valorilor
coninute n coloane distincte. Folosind acest operator, problema precedent poate fi rezolvat
astfel:

- 21 -

INFORMATIC*I*

IF.03. Limbajul SQL

SELECT CARTI.TITLU,
AUTORI.NUME || ' ' || AUTORI.PRENUME AS NUME_AUTOR,
EDITURI.NUME AS EDITURA
FROM CARTI
INNER JOIN AUTCARTI ON CARTI.COD_CARTE = AUTCARTI.COD_CARTE
INNER JOIN AUTORI ON AUTORI.COD_AUT = AUTCARTI.COD_AUTOR
INNER JOIN EDITURI ON EDITURI.COD_EDIT = CARTI.COD_EDIT
ORDER BY CARTI.TITLU

titlul crii, numele i prenumele autorului, numele i prenumele cititorului pentru


crile mprumutatate nainte de 01 feb 2011.

SELECT CARTI.TITLU,
AUTORI.NUME || ' ' || AUTORI.PRENUME as Autor,
CITITORI.NUME || ' ' || CITITORI.PRENUME AS Cititor,
IMPRUMUT.DATA_IMPRUMUT
FROM CARTI INNER JOIN AUTCARTI
ON CARTI.COD_CARTE = AUTCARTI.COD_CARTE
INNER JOIN AUTORI
ON AUTORI.COD_AUT = AUTCARTI.COD_AUTOR
INNER JOIN IMPRUMUT
ON CARTI.COD_CARTE = IMPRUMUT.COD_CARTE
INNER JOIN CITITORI
ON CITITORI.COD_CIT = IMPRUMUT.COD_CIT
WHERE IMPRUMUT.DATA_IMPRUMUT < '01 feb 2012'
- 22 -

INFORMATIC*I*

IF.03. Limbajul SQL

- 23 -

S-ar putea să vă placă și