Documente Academic
Documente Profesional
Documente Cultură
___________________________________________________________________________
CODAGENT
DATA
CANT
PRET
TERMENLIVR
PRODUSE CODPRODUS
DENPRODUS
UM
STOC
___________________________________________________________________________
3. Comenzi SQL Comenzile referitoare la bazele de date sunt comune tuturor versiunilor de SQL si sunt impartite in urmatoarele categorii: 1) Comenzi LDD (Limbaj de Definire a Datelor - Data Definition Language) Comanda CREATE ALTER DROP Scop Creaza un obiect nou (tabela, utilizator, rol, etc) Modifica o parte dintre proprietatile unui obiect Elimina un obiect din baza de date
___________________________________________________________________________ 2) Comenzi LMD (Limbaj de Manipulare a Datelor - Data Manipulation Language) Comanda Scop SELECT Regaseste inregistrari in tabele sau vederi. DELETE Sterge inregistrari din tabele INSERT Adauga o noua inregistrare in tabela UPDATE Modifica valorile unor inregistrari din tabele 3) Comenzi LPT (Limbaj pentru Procesarea Tranzactiilor) Comanda Scop COMMIT Finalizeaza o tranzactie ROLLBACK Anuleaza o tranzactie SAVEPOINT Defineste un punct de salvare, in locul in care tranzactia salveaza toate operatiile effectuate pana in momentul respective, inainte de a continua urmatorul set de modificari effectuate in baza de date. 4) Comenzi LCD (Limbaj de Control al Datelor - Data Control Language) Comanda GRANT REVOKE Scop Acorda utilizatorilor drepturile necesare pentru accesul si manipularea obiectelor din baza de date Anuleaza anumite drepturi utilizatorilor
___________________________________________________________________________
___________________________________________________________________________ create table firme (codfirma number(2) constraint PKey_firme primary key, denfirma varchar2(20) not null, loc varchar2(20), contbanca varchar(15), zona varchar2(15) CONSTRAINT FZONA_CK check (zona in ('MOLDOVA','ARDEAL','BANAT','MUNTENIA','DOBROGEA','TRANSILVANIA'))); create table agenti (codagent varchar2(3) constraint pk_agent primary key, numeagent varchar2(25) not null, dataang date default sysdate, datanast date, zona varchar2(15) CONSTRAINT AGZONA_CK check (zona in('MOLDOVA','ARDEAL','BANAT','MUNTENIA','DOBROGEA', 'TRANSILVANIA')), functia varchar2(20), codsef varchar2(3)); create table comenzi (nrcom number(4) constraint pk_comenzi primary key, codfirma number(2) not null, codagent varchar2(3) not null, data date default sysdate, CONSTRAINT FKAgent FOREIGN KEY (codagent) REFERENCES agenti(codagent), CONSTRAINT FKFirme FOREIGN KEY (codfirma) REFERENCES firme(codfirma)); create table produse (codprodus number(3) constraint pk_produse primary key, denprodus varchar2(20) not null, um varchar2(3), stoc number(4)); create table rindcom (nrcom number(4), codprodus number(3) not null, cant number(10), pret number(8), termenliv date, CONSTRAINT FKComenzi FOREIGN KEY (nrcom) REFERENCES comenzi(nrcom), CONSTRAINT FKProduse FOREIGN KEY (codprodus) REFERENCES produse(codprodus)); CREAREA UNEI TABELE PE BAZA CAMPURILOR DIN ALTA TABELA: CREATE TABLE nume_tabela AS SELECT [*, nume campuri] FROM nume_tabela_sursa WHERE [conditie];
___________________________________________________________________________ Exemplu: Tabela firme_buc va contine firmele din Bucuresti CREATE TABLE FIRME_BUC AS SELECT * FROM FIRME WHERE LOC='BUCURESTI'; COMANDA DESCRIBE SAU DESC PERMITE VIZUALIZAREA STRUCTURII UNEI TABELE Exemplu: Sa se vizualizeze structura tabelei AGENTI; DESC AGENTI;
Exemple - dupa fiecare comanda vizualizati structura tabelei cu DESCRIBE sau DESC: ALTER TABLE agenti RENAME TO personal; Sau RENAME AGENTI TO PERSONAL; ALTER TABLE PERSONAL ADD (EMAIL VARCHAR2(10), VARSTA NUMBER(2)); ALTER TABLE PERSONAL MODIFY (EMAIL VARCHAR2(30)); ALTER TABLE PERSONAL DROP COLUMN EMAIL; ALTER TABLE PERSONAL SET UNUSED COLUMN FUNCTIA; ALTER TABLE PERSONAL DROP UNUSED COLUMNS; ALTER TABLE PERSONAL ADD (CONSTRAINT check_varsta CHECK (varsta>18 and varsta<60));
6
___________________________________________________________________________ ALTER TABLE PERSONAL DISABLE CONSTRAINT check_varsta; ALTER TABLE PERSONAL DROP CONSTRAINT check_varsta;
VIZUALIZAREA OBIECTELOR CE APARTIN UNUI ANUMIT UTILIZATOR: SELECT * FROM USER_TABLES; SELECT TABLE_NAME, cluster_name FROM USER_TABLES; SELECT * FROM USER_CATALOG; SELECT DISTINCT OBJECT_TYPE FROM USER_OBJECTS; SELECT TABLE_NAME, CONSTRAINT_TYPE, CONSTRAINT_NAME FROM USER_CONSTRAINTS; SELECT TABLE_NAME , COMMENTS FROM USER_TAB_COMMENTS;
___________________________________________________________________________ MODIFY (redefinire cmpuri existente); DROP COLUMN cmp; ADD CONSTRAINT nume_restricie TIP_RESTRICIE .; DROP CONSTRAINT nume_restricie; DISABLE CONSTRAINT nume_restricie; ENABLE CONSTRAINT nume_restricie; RENAME TO nume_nou_tabel;
___________________________________________________________________________
Dupa actualizarea datelor se va utiliza comanda select * from [nume_tabela_actualizata]; pentru a vizualiza rezultatel!
___________________________________________________________________________ insert into produse values ('333','biscuiti','pac','3000'); insert into produse values('444','servetele','pac','1100'); insert into comenzi values('100','10','2',to_date('oct 12,04','mon dd,yy')); insert into comenzi values('200','20','3',to_date('oct 6,04','mon dd,yy')); insert into comenzi values('300','40','1',to_date('nov 30,04','mon dd,yy')); insert into comenzi values('400','30','2',to_date('dec 12,04','mon dd,yy')); insert into comenzi values('500','50','1',to_date('jan 15,05','mon dd,yy')); insert into rindcom values('100','111','150','5000',to_date('oct 31,04','mon dd,yy')); insert into rindcom values('200','222','300','20000',to_date('nov 30,04','mon dd,yy')); insert into rindcom values('300','444','1000','1500',to_date('dec 25,04','mon dd,yy')); insert into rindcom values('300','111','200','5000',to_date('jan 31,05','mon dd,yy')); insert into rindcom values('400','333','1500','5000',to_date('jan 31,05','mon dd,yy')); insert into rindcom values('500','111','100','5000',to_date('feb 20,05','mon dd,yy')); Atentie! Pt dataang si datanast se va utiliza functia de conversie to_date. Ex: to_date('jan 20,05','mon dd,yy') b) adaugarea datelor pe baza valorilor din alte tabele: INSERT INTO TABELA SELECT [LISTA DE CAMPURI] FROM TABELA_SURSA WHERE [CONDITIE]; Exemple: Sa se creeze tabela STOC_MIN cu aceeasi structura cu a tabelei PRODUSE care sa contina informatii depre produsele cu stocul mai mic decat 1000 unitati. Create table stoc_min as select * from produse where 2=3; Insert into stoc_min select * from produse where stoc<=1000;
11
___________________________________________________________________________
12
___________________________________________________________________________ WHERE termenliv>TO_DATE('01-02-05','DD-MM-YY'); Sa se stearga toate inregistrarile din tabela stoc_min: DELETE FROM stoc_min;
Frazele SQL: Nu sunt case sensitive; Pot fi scrise pe mai multe linii; Cuvintele cheie nu pot fi prescurtate sau scrise pe mai multe linii. In construirea frazelor SQL se utilizeaza urmatorii operatori: <, >, =, >=, <=, NOT BETWEEN ... AND ... Operatori de comparatie ntre dou valori (inclusiv).
SELECT codprodus, cant FROM rindcom WHERE cant BETWEEN 10 AND 15;
13
___________________________________________________________________________ IN(list) egal cu oricare valoare din list SELECT codagent, numeagent FROM agenti WHERE codagent IN (1, 3); SELECT codprod, cant FROM rindcom WHERE cant IN (400,500,1000); LIKE similar cu un ablon % - oricte caractere; _ - un caracter; SELECT denfirma, loc FROM firme WHERE loc LIKE B%; SELECT denfirma, loc FROM firme WHERE loc LIKE _I%; IS NULL are valoarea NULL SELECT denfirma, loc FROM firme WHERE loc IS NULL; Atributele se specific n ordinea n care se doresc a fi afiate, nu obligatoriu n ordinea n care apar n descrierea tabelelor.
-
Afiarea se face implicit cu litere mari, la stnga pentru datele de tip dat calendaristic i caracter, i la dreapta pentru datele numerice. Valoarea NULL, ca i n alte limbaje, semnific valoare ne-disponibil, ne-alocat, i nu este acelai lucru cu blank sau zero. Cu ajutorul frazelor select se pot extrage informaii din baza de date. Utiliznd aceast instruciune se pot realiza toate cele trei operaii specifice modelului relaional. Operator unar, prin care se obine o nou relaie care conine toate atributele relaiei iniiale i un numr redus de tupluri. Reducerea se face dup o condiie numit condiie de selecie.
Selecia:
Proiecia:
Operator unar, prin care se obine o nou relaie care conine un numr redus de atribute fa de relaia iniial i toate valorile sau combinaiile distincte de valori ale acestor atribute. Atributele care se regsesc n relaia rezultat se numesc atribute de proiecie.
14
___________________________________________________________________________ Jonciunea: Operator binar, caz particular de produs cartezian. Relaia rezultat va conine tuplurile corespunztore atributelor de join care se afl ntr-o anumit relaie. Cel mai utilizat caz de jonciune este acela n care atributele de join au aceeai semnificaie, relaia n care acestea trebuie s se afle este de egalitate, unul dintre atribute e cheie primar ntr-una dintre relaii, iar cellalt este cheie extern.
EXEMPLE: 1. Sa se selecteze toti agentii din tabela agenti: SELECT * FROM agenti; 2. Sa se selecteze campurile codagent, numeagent si zona din tabela agenti: SELECT codagent, numeagent, zona FROM agenti; 3. Sa se selecteze numai firmele din Bucuresti: SELECT * FROM firme WHERE upper(loc) LIKE %BUCURESTI%; 4. Sa se selecteze comenzile incheiate de agentul cu codul = 1: SELECT * FROM comenzi WHERE codagent = 1; Realizarea Join-urilor (jonciunilor) ntre relaii. Tipuri de join-uri a. Join de egalitate (de echivalen - equijoin) 5. Sa se selecteze comenzile emise de agentii societatii (in clauza WHERE se va preciza conditia de legatura dintre tabele) SELECT agenti.*, comenzi.* FROM agenti, comenzi WHERE agenti.codagent= comenzi.codagent; 6. Sa se selecteze comenzile incheiate de agentul Toma Alina numai in luna octombrie: SELECT agenti.*, comenzi.* FROM agenti, comenzi WHERE agenti.codagent = comenzi.codagent AND lower(comenzi.data) like %oct%
15
___________________________________________________________________________ AND upper(agenti.numeagent) = TOMA ALINA; 7. Sa se calculeze valoarea fiecarui produs (val_prod =cant* pret) si sa se afiseze pretul, cantitatea, valoarea si stocul disponibil: SELECT produse.denprodus, rindcom.cant, rindcom.pret, rindcom.cant * rindcom.pret AS Val_Prod, produse.stoc FROM produse, rindcom WHERE produse.codprodus= rindcom. codprodus; 8. Sa se selecteze numai produsele cu valoarea cuprinsa intre 1 si 3 mil: SELECT produse.denprodus, rindcom.cant, rindcom.pret, rindcom.cant * rindcom.pret AS Val_Prod, produse.stoc FROM produse, rindcom WHERE produse.codprodus= rindcom. codprodus and rindcom.cant * rindcom.pret BETWEEN 500000 AND 2000000; b. Join extern 9. S se afieze codul produsului, denumirea produsului i cantitatea comandata corespunzatoare: SELECT p.codprodus, p.denprodus, rc.cant, rc.pret FROM produse p, rindcom rc WHERE p.codprodus = rc.codprodus (+); c. Join tabel cu aceeai tabel 10. S se afieze numele fiecarui agent i numele sefului direct superior: SELECT agent.numeagent||' lucreaza pentru: '||sefi. numeagent FROM agenti agent, agenti sefi WHERE agent.codsef=sefi.codagent; Realizarea Subcererilor (se utilizeaza 2 fraze SELECT imbricate) 11. Sa se selecteze firmele care sunt in aceaasi zona cu firma SC MEDIA SA: SELECT * FROM firme WHERE zona = (SELECT zona FROM firme WHERE denfirma= SC MEDIA SA); 12. S se afieze produsele care au preul unitar cel mai mic: SELECT p.denprodus, rc.pret FROM produse p, rindcom rc WHERE p.codprodus = rc.codprodus And rc.pret=(select min(rindcom.pret) from rindcom);
16
___________________________________________________________________________
___________________________________________________________________________ DROP COLUMN cmp; ADD CONSTRAINT nume_restricie TIP_RESTRICIE .; DROP CONSTRAINT nume_restricie; DISABLE CONSTRAINT nume_restricie; ENABLE CONSTRAINT nume_restricie; RENAME TO nume_nou_tabel;
18
19
FUNCTII
Funcii single-row (sau scalare). O funcie single-row ntoarce un singur rnd rezultat pentru fiecare rnd al tabelei interogate sau view Funcii de grup (sau agregate). O funcie de grup ntoarce un singur rnd rezultat pentru un grup de rnduri interogate. Funciile de grup pot apare n clauza HAVING
FUNCII DE GRUP AVG([DISTINCT|ALL] n) calculeaza media elementelor COUNT({* | [DISTINCT|ALL] expr}) intoarce numarul total al elementelor MAX([DISTINCT|ALL] expr) intoarce elementul maxim MIN([DISTINCT|ALL] expr) intoarce elementul minim SUM([DISTINCT|ALL] n) - calculeaza suma elementelor Se utilizeaza urmatoarele clauze: GROUP BY grupeaza datele in functie de un anumit camp; ORDER BY ordoneaza datele in functie de un anumit camp; HAVING permite stabilirea unor criterii de selectie asupra functiilor de grup; 13. S se afieze valoarea maxim, valoarea medie, valoarea minim i valoarea total a produselor comandate: SELECT avg(rc.cant * rc.pret), max(rc.cant * rc.pret), min(rc.cant * rc.pret), sum(rc.cant * rc.pret) FROM rindcom rc; 14. S se afieze data primei comenzi ncheiate i data celei mai vechi comenzi ncheiate: SELECT min(data), max(data) FROM comenzi; 15. S se afieze numrul de produse al cror stoc>200: SELECT count(*) Nr_prod FROM produse WHERE stoc>200; 16. S se afieze numrul total de comenzi incheiate: SELECT count(nrcom) Numar_Comenzi FROM comenzi; 17. S se afieze numrul de produse vndute: SELECT count(distinct(codprodus)) Produse_Vandute FROM rindcom;
20
___________________________________________________________________________ 18. S se afieze cantitatea medie vndut din fiecare produs i s se realizeze ordonarea n funcie de aceasta (se utilizeaza functia AVG() si clauza GROUP BY pt gruparea datelor in functie de produse, iar ordonarea se realizeaza cu ajutorul functiei ORDER BY ). SELECT codprodus, avg(cant) Medie_Prod FROM rindcom GROUP BY codprodus ORDER BY avg(cant); 19. S se afieze produsele i cantitatea medie vndut numai acele produse a cror cantitate medie este mai mare de 1500 (conditia se specifica in clauza HAVING si nu in clauza WHERE deoarece este utilizata functia de grup AVG si conditia este avg(cant)>800) SELECT codprodus, avg(cant) FROM rindcom GROUP BY codprodus HAVING avg(cant)>800; 20. Sa se calculeze valoarea totala a fiecarei comenzi si sa se sorteze descrescator in functie de valoare: SELECT comenzi.nrcom, SUM(rindcom.cant * rindcom.pret) Total_Comanda FROM comenzi, rindcom WHERE rindcom.nrcom=comenzi.nrcom GROUP BY comenzi.nrcom ORDER BY Total_Comanda DESC; 21. Sa se afiseze numai comenzile care au valoarea cuprinsa intre 3 si 5 mil (conditia va fi mentionata in clauza HAVING pt ca se utilizeaza o functie de grup - SUM): SELECT comenzi.nrcom, SUM(rindcom.cant * rindcom.pret) Total_Comanda FROM comenzi, rindcom WHERE rindcom.nrcom=comenzi.nrcom GROUP BY comenzi.nrcom HAVING SUM(rindcom.cant * rindcom.pret) BETWEEN 1000000 AND 3000000 ORDER BY Total_Comanda DESC;
21
___________________________________________________________________________
Functia LOWER() , UPPER() 23. Sa se afiseze firmele din zona muntenia: SELECT codfirma, upper(denfirma), upper(loc), upper(zona) FROM firme WHERE lower(zona)=muntenia; Funcia CONCAT() , funcia LENGTH() , funcia SUBSTR() 24. S se afieze denumirea firmei concatenat cu localitatea i lungimea atributului denumirea firmei, numai pentru localitile al cror nume ncepe cu C SELECT denfirma, concat(denfirma,loc), length(denfirma) FROM firme WHERE substr(loc,1,1)='C';
___________________________________________________________________________ NEXT_DAY(data, 'FRIDAY'), LAST_DAY(data) FROM comenzi; 28. S se afieze comenzile incheiate in luna trecuta: SELECT nrcom, data FROM comenzi WHERE round(MONTHS_BETWEEN(sysdate, data))=1; Funcia ROUND() 29. S se afieze comenzile incheiate in 2004. Se va rotunji data ncheierii la prima zi din luna corespunztoare dac data ncheierii este n prima jumatate a lunii sau la prima zi din luna urmtoare: SELECT nrcom, data, ROUND(data, 'MONTH') FROM comenzi WHERE data LIKE '%04';
Funcii de conversie
Funcia TO_CHAR(d [, fmt ]) 30. S se afieze comenzile i data ncheierii in format MM/YY SELECT nrcom, TO_CHAR(data, 'MM/YY') data_incheierii FROM comenzi; Funcia TO_DATE(char [, fmt ]) Funcia TO_NUMBER(char [,fmt ]) 31. S se afieze comenzile i data ncheierii n formatul Month dd, YYYY SELECT nrcom, data FROM comenzi WHERE data=TO_DATE( 'January 15, 2005', 'Month dd,YYYY'); Funcia EXTRACT () 32. S se afieze informaii despre comenzile ncheiate n anul 2004 SELECT nrcom, data FROM comenzi WHERE EXTRACT (YEAR from data) = 2004;
23
___________________________________________________________________________ CREAREA UNEI TABELE PE BAZA CAMPURILOR DIN ALTA TABELA: CREATE TABLE nume_tabela AS SELECT [*, nume campuri] FROM nume_tabela_sursa [WHERE conditie]; Exemplu: Tabela firme_buc va contine firmele din Bucuresti CREATE TABLE FIRME_BUC AS SELECT * FROM FIRME WHERE LOC='BUCURESTI'; ADAUGAREA DATELOR PE BAZA VALORILOR DIN ALTE TABELE: INSERT INTO nume_tabela SELECT [*, nume campuri] FROM nume_tabela_sursa [WHERE conditie]; Exemple: Sa se creeze tabela STOC_MIN cu aceeasi structura cu a tabelei PRODUSE care sa contina informatii depre produsele cu stocul mai mic decat 1000 unitati. Create table stoc_min as select * from produse where 2=3; INSERT INTO STOC_MIN SELECT * FROM PRODUSE WHERE STOC<=1000; select * from stoc_min;
24
___________________________________________________________________________ GESTIUNEA ALTOR OBIECTE ALE BAZEI DE DATE 1. TABELE VIRTUALE CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW nume_view AS subcerere [WITH READ ONLY] Sa se realizeze o tabela virtuala cu toate firmele din Bucuresti: CREATE VIEW firme_buc_v AS SELECT * FROM firme WHERE upper(loc)='BUCURESTI'; SELECT * FROM firme_buc_v; Sa se realizeze o tabela virtuala care sa contina numai produsele pentru care unitatea de masura (um)=buc. CREATE VIEW PROD_BUC_V AS SELECT codprodus COD_PRODUS, denprodus DENUMIRE, um UNITATE FROM produse WHERE um='buc'; SELECT * FROM PROD_BUC_V; Sa se stearga inregistrarile din tabela virtuala PROD_BUC_V pentru produsele care au stocul mai mare de 1000. DELETE FROM PROD_BUC_V WHERE STOC>1000; Sa realizeze o tabela virtuala cu toti agentii din Muntenia. Tabela virtuala nu va putea fi actualizata: CREATE VIEW agenti_zona_v AS SELECT * FROM agenti WHERE upper(zona)='MUNTENIA' WITH READ ONLY; SELECT * FROM firme_buc_v; Sa se stearga tabela virtuala PROD_BUC_V: DROP VIEW PROD_BUC_V; Vizualizarea informatiilor despre tabelele virtuale:
25
___________________________________________________________________________ SELECT VIEW_NAME, TEXT FROM USER_VIEWS; 2. INDECSI Permit accesul rapid la date prin sortarea logica a inregistrarilor. Sunt gestionati automat de catre serverul Oracle. Se creaza automat la introducerea unei restrictii de cheie primara sau de unicitate sau manual de catre utilizator.
CREATE INDEX nume_index ON Nume_tabel (cmp); DROP INDEX nume_index; Exemple: Sa se creeze un index pe tabela agenti pe coloana numeagent: CREATE INDEX AGENTI_NUMEAG_IDX ON AGENTI(NUMEAGENT); Vizualizarea inecsilor unui anumit utilizator: Select * from user_indexes; Sa se strearga indexul creat anterior: DROP INDEX AGENTI_NUMEAG_IDX; 3. SECVENTE Sunt utilizate pentru asigurarea unicitatii cheilor primare sau a valorilor pentru care s-a impus o restrictie de tip UNIQUE. Pot fi utilizate pentru mai multe tabele. Pentru fiecare secventa se va preciza valoarea de inceput, pasul de incrementare si valoarea maxima generate.
CREATE SEQUENCE nume_secven STRAT WITH valoare_iniial INCREMENT BY pasul_de_incrementare MAXVALUE valoare_maxim NOCYCLE; ALTER SEQUENCE nume_secven ...; DROP SEQUENCE nume_secven; Exemple: Sa se creeze o secventa pentru asigurarea unicitatii cheii primare din tabela Comenzi. Create sequence seq_nrcomanda start with 500 Increment by 10
26
___________________________________________________________________________ Maxvalue 1000 nocycle; Insert into comenzi values (seq_nrcomanda.nextval, '10', '3', to_date('oct 12,05', 'mon dd,yy')); Sa se afiseze valoarea curenta a secventei: Select seq_rcomanda.currval from dual; Sa se modifice pasul de incrementare pentru secventa anterioara: Alter sequence seq_nrcomanda increment by 100; Sa se strearga secventa seq_rcomanda: Drop sequence seq_rcomanda; Sa se vizualizeze informatiile depre secventele utilizatorilor: Select * from user_sequences; 4. SINONIME Sunt nume alternative utilizate pentru referirea obiectelor unei baze de date Pot fi sinonime publice (accesibile tuturor utilizatorilor) sau private. Sinonimele publice pot fi create numai de administratorul bazei de date
CREATE SYNONYM nume_sinonim FOR nume_tabel; DROP SYNONYM nume_sinonim; Exemple: Sa se creeze un sinonim pentru tabela rindcom: Create synonym detalii_comanda for rindcom; Sa se strearga sinonimul creat anterior: Drop synonym detalii_comanda; Vizualizarea sinonimelor se realizeaza astfel Select * from user synonyms;
27
1. S se creeze tabelele Faculti, Catedre i Persoane pe baza schemei de mai sus, innd cont de urmtoarele: FACULTI Nume coloan Tipul restriciei Tip dat Lungime CATEDRE Nume coloan Tipul restriciei Tip dat Lungime PERSOANE Nume coloan Tipul restriciei CODP Primary key NUME FUNCIA Check DATAANG CODCAT Foreign key - refer tabela Catedre, coloana CODCAT Date Varchar2 7 CODCAT Primary key Varchar2 7 DENCAT Not null Varchar2 40 CODFAC Foreign key - refer tabela Faculti, coloana CODFAC Varchar2 5 CODFAC Primary key Varchar2 5 DENFAC Not null Varchar2 100
Number 3
Varchar2 30
Varchar2 5
Atributul FUNCIA poate lua valorile: Prof (profesor), Conf (confereniar), Lect (lector), Asist (asistent), Prep (preparator)
28
___________________________________________________________________________ 2. S se redenumeasc tabela Persoane n Angajati. 3. S se adauge n tabela Angajati coloana Salariu, avnd tipul Number(4). 4. S se adauge n tabela Angajati o restricie de integritate avnd numele VerificaSalariu asupra cmpului Salariu, care s nu permit introducerea de valori mai mici dect 1000 si mai mari dect 5000. 5. Modificai proprietile cmpului DenFac din tabela Facultati, astfel nct lungimea acestuia s fie de 60 6. Dezactivai restricia de integritate VerificaSalariu existent n tabela Angajati. 7. S se adauge n tabele urmtoarele informaii: FACULTI CODFAC CSIE CIG COM CATEDRE CODCAT IE CIB EM STAT ANGAJATI CODP 1 2 3 4 5 6 NUME Ionescu Popescu Georgescu Stanescu Tudor Zaharia FUNCIA Prof Prof Asist Conf Lect Prep 04-FEB-2005 23-APR-2002 10-OCT-2001 DATAANG 12-NOV-1994 CODCAT IE CIB IE EM IE EM SALARIU 2200 2000 1000 1400 1500 900 DENCAT Informatica Economica Cibernetica Economica Economie Matematica Statistica si Previziune Economica CODFAC CSIE CSIE CSIE CSIE DENFAC Cibernetica, Statistica si Informatica Economica Contabilitate si Informatica de Gestiune Comert
8. n tabela Angajati modificai n Marinescu numele angajatului cu Codp egal cu 3 (cmpul Nume). 9. n tabela Angajati modificai n Lect funcia angajatului cu Codp egal cu 4 (cmpul Functia).
29
___________________________________________________________________________ 10. n tabela Angajati cretei cu 10% salariile angajailor care au n prezent salariul mai mic dect 1400 (cmpul Salariu). 11. n tabela Angajati modificai codul catedrei (cmpul CodCat) angajatului cu Codp egal cu 4 astfel nct s fie acelasi cu codul catedrei unde este ncadrat angajatul cu Codp egal cu 2, utiliznd clauza SELECT. 12. S se afieze toate informaiile despre Facultati. 13. S se afieze numele i funcia tuturor angajatilor, ordonai descresctor dup nume. 14. S se afieze angajaii al cror nume incepe cu litera S. 15. S se afiseze numele asistenilor i lectorilor (funciile sunt codificate prin Asist, respectiv Lect). 16. S se creeze o tabel virtual avnd numele PersonalCatedre, care s conin pentru fiecare angajat de la catedrele cu codul IE i CIB: numele, funcia i denumirea catedrei. 17. S se afieze salariile maxim, minim i mediu pentru toate persoanele angajate dup anul 2000. 18. S se afieze numrul de persoane de la catedra cu CodCat egal cu IE. 19. S se afieze salariul mediu pentru fiecare catedr. (gruparea se va face n funcie de codul catedrei) 20. S se afieze salariul mediu corespunztor fiecrei funcii, numai n cazul n care acesta depete 1200. 21. S se afieze informaii despre persoanele angajate la aceeai catedr ca i Ionescu. 22. S se afieze persoanele care au salariul mai mare dect salariul mediu. 23. S se afieze denumirea catedrei i numrul de persoane de la fiecare catedr, cu excepia catedrei de Informatic Economic i numai pentru acele catedre care au mai mult de o persoan. 24. S se afieze pentru fiecare funcie numrul de angajai. 25. tergei tuplul corespunztor codului Codp egal cu 2.
30