Sunteți pe pagina 1din 21

1

Capitolul II Structurarea bazelor de date


Scurt istoric
n anii '60, A.F. Codd, cercettor la I.B.M., a studiat posibilitatea ameliorrii modului de stocare a datelor n fiiere deoarece existena informaiilor redundante predispunea la erori greu de depistat. n 1970 a publicat un articol, "A Relational Model of Data for Large Shared Databanks " care a schimbat complet concepiile privind structura bazelor de date. Un programator, Larry Ellison, sesiznd importana practic a teoriei lui Codd, a realizat un produs software, Oracle, i o firm pentru promovarea acestuia, Oracle Corporation. L. Ellison a devenit astfel unul dintre cei mai bogai oameni de pe planet.

Anomalii rezolvate de modelul relaional


S presupunem c ntr-o bibliotec, bibliotecara pstreaz evidena crilor cu ajutorul calculatorului, ntr-un fiier pentru cri avnd urmtoarea structur: NrInv Autor Titlu Editura Locul Anul apariiei

Avnd n vedere posibilitile unui calculator legate de parcurgerea fiierelor, s-ar prea c vor putea fi realizate uor o mulime de rapoarte. n timpul exploatrii pe calculator a fiierului s-au depistat ns probleme cauzate de modul de structurare a informaiilor. 1. Anomalia la actualizarea datelor: Conducerea bibliotecii a impus ca numele autorului s fie scris cu majuscule. Pentru autorii mai puin prolifici nu e nici o problem, dar unii se regsesc n fiier de zeci sau chiar sute de ori. Modificarea n sute de locuri a aceluiai nume poate conduce la erori greu de depistat. Aceast anomalie poart numele de anomalia la actualizare. Pentru eliminarea ei, modelul relaional propune structurarea informaiilor n dou tabele: un tabel cu numele autorilor i un tabel cu cri: CodAutor Autor

NrInv

CodAutor

Titlu

Editura

Locul

Anul apariieie

2
n momentul nregistrrii unei cri, dac autorul exista deja n tabelul de autori, i se noteaz codul care apoi este folosit la nregistrarea crii. Dac autorul nu exist n fiierul de autori, el va fi adugat, n momentul adugrii atribuindu-se un cod. n acest mod, modificarea numelui autorilor se realizeaz simplu, numele fiecrui autor aprnd o singur dat. 2. Anomalia la tergerea datelor: Aceast anomalie poate aprea dac se cere tergerea din fiierul de cri a nregistrrii corespunznd unei cri pierdute. Odat cu titlul crii se terge i editura care a publicat-o. Ulterior, dac se dorete realizarea unui raport privind editurile cu care biblioteca are relaii, n raport nu va mai figura editura care a realizat cartea suprimat. Acest anomalie poart numele de anomalia la tergerea datelor. 3. Anomalia la adugarea datelor: Dac se dorete nregistrarea n baza de date a bibliotecii a datelor unei noi edituri, n modelul elaborat acest lucru nu este posibil fr adugarea unei prime cri achiziionate de la aceasta. Dac nu s-a cumprat nici o carte, baza noastr prezint o anomalie la adugarea datelor.

Normalizarea
Modelul relaional elaborat de Codd propune soluii pentru eliminarea acestor anomalii. Procesul de structurare a bazei de date n vederea eliminrii anomaliilor sesizate poart numele de normalizare. Normalizarea const n aducerea bazei de date ntr-una dintre formele normale, cele mai importante fiind cele 3 forme prezentate n continuare. 1. Prima form normal Prima form normal cere ca tabelele n care sunt pstrate informaiile s satisfac urmtoarelor cerine: a. Fiecare coloan trebuie s pstreze o informaie elementar (care nu se mai poate descompune). n exemplul prezentat, dac o carte are mai muli autori coloana CodAutor ar trebui s conin mai multe coduri, deci acest mod de structurare nu respect aceast cerin. b. Fiecare coloan trebuie s aib un nume unic; c. Tabelul nu poate avea dou linii coninnd informaii identice. Fiecare tabel din componena unei baze de date normalizate conine o cheie primar. O cheie primar este un cmp care are valori distincte pentru toate liniile tabelului. Uneori, mai rar, cheia primar este obinut prin alturarea valorilor dintr-un ansamblu de mai multe cmpuri. Pot exista n baza de date tabele care nu au o cheie primar. Tabelele pentru care s-a definit o cheie primar respect, de regul, cerina enunat.

3
d. ntr-un tabel nu se admit grupuri de informaii care se repet. n exemplul dat Editura i Locul formeaz un grup care probabil se repet pentru toate crile provenind de la aceeai editur. 2. A doua form normal A doua form normal se refer la tabelele care au o cheie compus din valorile mai multor cmpuri. Astfel, n exemplul dat dac datele editurii sunt pstrate ntr-un tabel separat avnd structura: NumeEd Oras Adresa NumeScurt Telefon

atunci adugarea unui nou sediu pentru o editur va face ca valoarea din coloana "NumeScurt" s apar repetat, deoarece ea nu depinde de sediul editurii ci de numele acesteia. Pentru a satisface cerinele celei de-a doua forme normale, coloanele unui tabel trebuie s depind direct de toate cmpurile care formeaz o cheie primar compus. 3. A treia form normal A treia form normal rezolv anomalia care apare n cazul n care ntr-un tabel exist una sau mai multe coloane ale cror valori nu depind direct de valoarea cheii primare. n exemplul dat, s presupunem c n tabelul n care sunt nregistrate crile exist o coloan care conine numele furnizorului (firma prin care s-a achiziionat cartea). Cu siguran c prin acelai furnizor s-au achiziionat i alte cri, deci numele acestuia va aprea pe mai multe linii deoarece furnizorul nu depinde direct de carte. Coloanele unui tabel care satisface a treia form normal conin informaii care depind direct de cheia primar.

Relaii ntre tabelele unei baze de date


Pentru a satisface cerinele impuse de cele 3 forme normale prezentate, informaiile sunt de regul pstrate ntr-un ansamblu de tabele ntre care exist relaii de diferite tipuri. 1. Relaii 1 la mai muli (1 la n, one to many) Dac n exemplul considerat datele privind o editur sunt pstrate ntr-un fiier iar crile sunt nregistrate n alt fiier, ntre cele dou tabele se stabilete o dependen de tip "unul la mai muli".

cod editur
CodE

Edituri editura

Nume Adresa Telefon

NrInv

CodA

Titlu

CodE

Anul Carti

cod autor carte

Acest tip de relaie este cel mai frecvent ntlnit i st la baza modelului relaional elaborat de Codd. Cheile primare din cele dou tabele sunt CodE pentru Edituri i NrInv pentru Cri. n tabelul de cri, CodE i CodA (cod autor) sunt chei strine. O cheie strin dintr-un tabel A permite regsirea unei linii dintr-un tabel asociat, B. n tabelul asociat, B, cheia strin din tabelul A este de regul cheie primar. n cazul dat, cheia strin CodA permite regsirea n tabelul de autori a numelui acestuia iar cheia strin CodE permite gsirea numelui editurii care a publicat cartea. 2. Relaii 1 la 1 (one to one) O relaie de tipul 1 la 1 apare n cazul n care unei linii dintr-un tabel i corespunde o singur linie n tabelul cu care acesta este n legtur. n cazul n care fiecrei nregistrri dintr-un tabel i corespunde o nregistrare n al doilea tabel nu este necesar nregistrarea informaiilor n dou tabele separate. 3. Relaii mai muli la mai muli (m la n, many to many) O relaie de acest tip apare n exemplul dat ntre tabela de autori i cea de cri. Astfel un scriitor poate fi autor la mai multe cri iar o carte poate avea mai muli autori (CodA_2 respectiv NrInv_3 de exemplu). n astfel de situaii se va proceda la crearea unui tabel suplimentar, de legtur, care va transforma relaia evideniat (many to many) n relaii one to many. Fiecare articol din tabelul de legtur va conine o pereche de chei strine, una fiind cheie primar n primul tabel i una n al doilea tabel:

Autori
CodA_1 CodA_2 CodA_3 CodA_4 CodA_5 CodA_6 CodA_7

Cri
NrInv_1 NrInv_2 NrInv_3 NrInv_4 NrInv_5 NrInv_6 NrInv_7 NrInv_8 NrInv_9

Autori
CodA_1 CodA_2 CodA_3 CodA_4 CodA_5 CodA_6 CodA_7

Tab. de legtur
CodA_2 CodA_2 CodA_3 CodA_6 CodA_2 NrInv_1 NrInv _3 NrInv _3 NrInv _3 NrInv _8

Cri
NrInv _1 NrInv _2 NrInv _3 NrInv _4 NrInv _5 NrInv _6 NrInv _7 NrInv _8 NrInv _9

Capitolul III Limbajul SQL


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 S.G.B.D. folosesc SQL, adesea ele implementeaz i funcii care nu exist n standard. Comenzile de baz ale limbajului SQL care sunt Create, 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, serverul Oracle XE ofer dou interfee pentru introducerea comenzilor SQL: a. Introducerea comenzilor SQL folosind interpretorul de comenzi SQL *Plus executabil ntr-o fereastr de tip Command Prompt Lansarea n execuie a interpretorului se realizeaz accesnd Run SQL Command Line din grupul de comenzi Oracle Database 10g 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 SQL pot fi introduse pe mai multe linii, marcarea sfritului introducerii unei comenzi realizndu-se printr-un caracter '/'.

b. Introducerea comenzilor SQL folosind interfaa grafic:

Dup conectare se selecteaz SQL Commands / Enter Command.

Comenzile introduse n fereastra SQL Commands pot fi terminate prin ';' ca n MySQL de exemplu 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 reexecutate prin selectare cu mouse-ul (dublu clic):

Tipuri de date suportate de Oracle a. iruri de caractere


Pentru pstrarea irurilor de caractere, Oracle definete patru tipuri de date: VARCHAR2 - pentru iruri de caractere de lungime variabil, 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 (memorate fr conversie). reale n dubl precizie

Cel mai frecvent se folosete tipul NUMBER. Pentru declararea unei date de tip NUMBER se poate scrie: inaltime number(3)

10
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
123 . 8 9 123 . 8 9 123 . 8 9 123 . 8 9 123 . 8 9 123 . 8 9

Declarai e
NUMBER NUMBER(3) NUMBER(6,2) NUMBER(6,1) NUMBER(3) NUMBER(4,2)

Valoare memorat
123 . 8 9 124 123 . 8 9 123 . 9

eroare (depire) 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 12-MAR-2007 Tip dat DATE Val. memorat

2007-02-01 01:02:04.1234 TIMESTAMP

d. Tipuri pentru memorarea imaginilor


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

11 Crearea tabelelor n Oracle XE 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)

Crearea tabelelor va fi realizat mai uor folosind interfaa serverului Oracle XE, aa cum s-a procedat n primele cursuri. n cazul n care n momentul crerii unui tabel se impun restricii asupra cmpurilor, se declar chei strine sau se declar o cheie primar, fraza SQL corespunztoare va conine un numr de restricii introduse folosind cuvntul rezervat "constraints". Exemplu:

CREATE TABLE "DEMO_ORDERS" ( "ORDER_ID" NUMBER NOT NULL ENABLE, "CUSTOMER_ID" NUMBER NOT NULL ENABLE, "ORDER_TOTAL" NUMBER(8,2), "ORDER_TIMESTAMP" DATE, "USER_ID" NUMBER,

12
CONSTRAINT "DEMO_ORDER_PK" PRIMARY KEY ("ORDER_ID") ENABLE, CONSTRAINT "DEMO_ORDER_TOTAL_MIN" CHECK (order_total >= 0) ENABLE, CONSTRAINT "DEMO_ORDERS_CUSTOMER_ID_FK" FOREIGN KEY ("CUSTOMER_ID") REFERENCES "DEMO_CUSTOMERS" ("CUSTOMER_ID") ENABLE, CONSTRAINT "DEMO_ORDERS_USER_ID_FK" FOREIGN KEY ("USER_ID") REFERENCES "DEMO_USERS" ("USER_ID") ENABLE ) /

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. Cele patru constrngeri declarate se refer la cheia primar, limitarea unei valori i declar dou cmpuri ca fiind chei strine, preciznd i tabelele legate. n primul exemplu cheia primar a fost declarat adugnd descrierii cmpului ID_regiune cuvintele PRIMARY KEY. Din aceste exemple 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 aplicaiei. Aa cum s-a vzut deja, interfaa permite i afiarea comenzilor create. Deoarece n timpul realizrii unei baze de date se pot produce incidente mergnd pn la distrugerea serverului Oracle XE, este bine s fie pstrate ntrun fiier avnd extensia .sql un numr ct mai mare de fraze a croir executare s permit refacerea tabelelor i repopularea lor cu date.

Comanda DROP TABLE


Comanda DROP TABLE permite suprimarea unui tabel. este: DROP TABLE Nume_tabel Pentru a da comanda folosind interfaa grafic se selecteaz succesiv Object Browser / Browse / Tables, se selecteaz apoi tabelul i se apas butonul Drop: Sintaxa comenzii

13

Comanda SELECT
Comanda SELECT creeaz o mulime de selecie. Aceasta poate conine un articol, mai multe articole sau niciunul. Articolele din mulimea de selecie conin numai cmpurile indicate de programator. 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. 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 5 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 se poate folosi asistentul Query Builder.

14
Aplicaia va afia trei panouri: n stnga un panou coninnd tabelele cuprinse n schema curent :

n centru un panou coninnd tabelele selectate:

clic

clic
Not: JOB_ID din Jobs = JOB_ID din Employees. Pentru impunerea legturii se va selecta succesiv cu mouse-ul JOB_ID din Employees i din Jobs. n partea de jos un panou cuprinznd cmpurile selectate i alte specificaii:

15 Selectarea dintr-un singur tabel


Exemple fundamentale: SELECT Nume, Prenume FROM cititor SELECT * FROM cititor SELECT * FROM cititor WHERE nume = 'Popescu' SELECT nume, prenume, adresa FROM cititor WHERE nume LIKE 'Po%' SELECT Nume, Prenume FROM cititor ORDER BY Nume Numele coloanelor scrise dup SELECT precizeaz cmpurile mulimii de selecie. Dac se dorete ca mulimea de selecie s aib aceeai structur cu tabelul, n locul listei de coloane se pune *. Clauza WHERE permite limitarea mulimii de selecie prin introducerea unei condiii care specific nregistrrile cutate. n cazul selectrii din mai multe tabele, aceast clauz poate fi folosit i pentru a introduce legturile dintre tabele. La scrierea condiiei se pot folosi operatorii logici AND, OR sau NOT precum i operatorii relaionali: = > < >= <= <> sau != LIKE Egal Mai mare Mai mic Mai mare sau egal Mai mic sau egal Diferit de *Vezi nota

Not: Operatorul LIKE permite selectarea liniilor care conin n cmpul testat iruri de caractere n care se regsete o succesiune de caractere precizat. Pentru definirea succesiunii de caractere cutat se poate folosi caracterul generic "%". De exemplu clauza WHERE nume LIKE 'Po%' va permite selectarea liniilor n care nume = Pop i nume=Popescu. Clauza WHERE prenume LIKE '%a' permite selectarea tuturor liniilor n care prenumele se termin n "a". Exemple: SELECT * FROM cititor WHERE nume = 'Popescu' AND prenume='Mihai' SELECT * FROM cititor WHERE nume = 'Popescu' OR nume='Mihai' SELECT * FROM cititor WHERE nume = 'Popescu' AND prenume IN('Ioan','Vasile','Grigore')

16

IN specific o mulime creia trebuie s-i aparin cmpul specificat (prenume). SELECT * FROM cititor 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 ORDER BY servete la impunerea ordinii de afiare a nregistrrilor mulimii de selecie. Ordonarea poate fi realizat dup valorile unuia sau a mai multor cmpuri, cresctor (ASC) sau descresctor (DESC). n cazul n care se folosesc mai multe cmpuri, acestea sunt separate prin virgul. SELECT * FROM Cititor ORDER BY Nume,Prenume,ID_cititor ASC SELECT * FROM Angajati ORDER BY salar DESC, Nume ASC, Prenume

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 cititor Ultima fraz va provoca afiarea numelor localitilor n care domiciliaz cititorii. Fr clauza DISTINCT, numele oraului Cluj-Napoca ar fi fost repetat de mai multe ori. cmp. Clauza GROUP BY permite gruparea nregistrrilor dup valoarea unui 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 dintrun 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

17
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 MAX SUM AVG COUNT COUNT DISTINCT


Exemplul 2:

returneaz cea mai mic valoare dintr-o coloan (cmp numeric) returneaz cea mai mare valoare dintr-o coloan (cmp numeric) returneaz suma valorilor numerice dintr-o coloan (cmp numeric) returneaz media valorilor dintr-o coloan (cmp numeric) returneaz numrul de valori dintr-o coloan returneaz numrul de valori distincte dintr-o coloan

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

18

Cuvntul rezervat dual astfel folosit permite respectarea sintaxei comenzii SELECT.

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 legate de o nregistrare din alt tabel trebuie ns indicat n frazele SELECT condiia de legtur dintre cele dou tabele. Exemple: SELECT Nume, Titlu, Anul FROM Edituri, Carti WHERE Nume='Minerva' AND Edituri.CodE=Carti.CodE A doua condiie coninut n clauza WHERE este cea care leag tabelele Edituri i Carti. Limbajul SQL permite nlocuirea unei mulimi care contribuie la selecie printr-o alt fraz SELECT, ca n exemplul urmtor. SELECT Nume, Titlu, 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') Odat cu standardizarea limbajului SQL, pentru introducerea legturilor stabilite ntre tabele prin definirea de chei primare i strine s-a definit i o alt modalitate, respectiv clauza JOIN. Folosind JOIN, exemplul anterior poate fi scris astfel: SELECT Nume, Titlu, Anul FROM Edituri INNER JOIN Carti ON Edituri.CodE=Carti.CodE WHERE Nume='Minerva'

19
Clauza JOIN este ns i 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.

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

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

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.

Utilizarea parametrilor
SQL permite ca la scrierea comenzii SELECT s se foloseasc parametrii. Valorile acestora sunt cerute ntr-o fereastr separat, n momentul executrii interogrii. Exemplu : sql>select * from edituri where cod_edit > :coded;

21

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

Comanda DELETE
Comanda DELETE suprim una sau mai multe nregistrri dintr-un fiier. 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 DELETE FROM Edituri Ultima comand suprim toate nregistrrile din tabelul Edituri.

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

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

  • Or Curs9 10
    Or Curs9 10
    Document41 pagini
    Or Curs9 10
    225701
    Încă nu există evaluări
  • Oracle Curs5 6
    Oracle Curs5 6
    Document35 pagini
    Oracle Curs5 6
    225701
    Încă nu există evaluări
  • Or Curs9 10
    Or Curs9 10
    Document41 pagini
    Or Curs9 10
    225701
    Încă nu există evaluări
  • Oracle Curs3 4
    Oracle Curs3 4
    Document39 pagini
    Oracle Curs3 4
    225701
    Încă nu există evaluări
  • Or Curs5 6
    Or Curs5 6
    Document37 pagini
    Or Curs5 6
    Andrei
    Încă nu există evaluări
  • Oracle 2
    Oracle 2
    Document21 pagini
    Oracle 2
    225701
    Încă nu există evaluări
  • Oracle PDF
    Oracle PDF
    Document23 pagini
    Oracle PDF
    225701
    Încă nu există evaluări