среда, 4 декабря 2013 г.

c++

/*Problema 17 - Metoda 1
Se da un graf neorientat cu n noduri.  Numarul de noduri si muchiile grafului se citesc din fisierul "graf.txt".
Sa se verifice daca graful este complet si sa se afiseze un mesaj adecvat.
Daca graful nu este complet si se afiseaza muchiile care ar trebui adaugate astfel  оncвt  graful sa devina complet.
Exemplu: Daca fisierul "graf.txt" are urmatorul continut:
5
1 3
1 4
1 5
2 4
3 5
Se va afisa mesajul "Graful nu este complet" dupa care se vor afisa muchiile lipsa:
1 2
2 3
2 5
3 4
4 5
*/

#include<iostream.h>
#include<fstream.h>
ifstream f("graf.txt");

int n,m,i,j,a[10][10];//m nr de muchii

void citeste()
{
//citesc numarul de noduri n
f>>n;
//initializez matricea de adiacenta cu 0
for(i=1;i<=n;i++)
                for(j=1;j<=n;j++)
                               a[i][j]=0;

//citesc muchiile din fisierul de intrare graf.txt
while(!f.eof())
{
int m=0;//numar cate muchii are graful
f>>i>>j;//citesc muchia
a[i][j]=a[j][i]=1;
if(a[i][j]==1)
                m++;
//completez matricea de adiacenta cu valori de 1 acolo unde exista muchii
}
}

void matrice_adiacenta()
{
int i,j;
cout<<"Matricea de adiacenta este:"<<endl;
for(i=1;i<=n;i++)
{
                for(j=1;j<=n;j++)
                               cout<<a[i][j]<<" ";
cout<<endl;
}
cout<<endl;
}

//Un graf este complet daca numarul de muchii este egal cu n*(n-1)/2
void graf_complet()
{
if(m==n*(n-1)/2)
                cout<<"Graful este complet";
else
                cout<<"Graful nu este complet";
cout<<endl;
}

void muchii_lipsa()
{
//parcurg matricea de adiacenta de deasupra diagonalei principale
cout<<"Muchiile care lipsesc pentru ca graful sa devina complet sunt: "<<endl;
for(i=1;i<=n-1;i++)
                for(j=i+1;j<=n;j++)
                               if(a[i][j]==0)
                                               cout<<i<<" "<<j<<endl;
               

}

int main()
{
citeste();
matrice_adiacenta();
graf_complet();
muchii_lipsa();
return 0;
f.close();
}



/*Problema 18
Se da un graf neorientat cu n noduri.  Numarul de noduri si muchiile grafului se citesc din fisierul „graf.txt”.
Sa se verifice daca graful este regulat. In situatia in care graful nu este regulat sa se afiseze nodurile terminale
si numarul de noduri izolate. (Un graf neorientat se numeste regulat daca toate nodurile sale au acelasi grad).
Exemplu: Daca fisierul „graf.txt” are urmatorul continut:
5
1 3
1 5
2 4
3 5
Se va afisa mesajul “Graful nu este regulat” dupa care se vor afisa nodurile terminale: 2, 4 si numarul de noduri izolate: 0 */

#include<iostream.h>
#include<fstream.h>
ifstream f("graf.txt");

int n,a[10][10];

void citeste()
{
int i,j;
f>>n;//citesc numarul de noduri din fisier
//initializez matricea de adiacenta cu 0
for(i=1;i<=n;i++)
                for(j=1;j<=n;j++)
                               a[i][j]=0;
//citesc muchiile din fisier
while(!f.eof())//cat timp nu s-a ajuns la sfarsitul fisierului
{
f>>i>>j;
a[i][j]=a[j][i]=1;
}
f.close();
}


void afisare_matrice_adiacenta()
{
int i,j;
for(i=1;i<=n;i++)
{
                for(j=1;j<=n;j++)
                                cout<<a[i][j]<<" ";

cout<<endl;
}
cout<<endl;
}

//determin gradul unui nod x
int grad(int x)
{
int i,gr=0;
                for(i=1;i<=n;i++)
                if(a[i][x]==1)
                               gr++;
return gr;
}

//verific daca graful este regulat
//Un graf neorientat se numeste regulat daca toate nodurile sale au acelasi grad
int regulat()
{
int i,g,ok=1;//pp ca graful e regulat
g=grad(1);//determin gradul primului nod in vederea compararii cu celelalte
//daca toate sunt egale cu gradul primului nod atunci graful este regulat
for(i=1;i<=n;i++)
                if(g!=grad(i))
                               ok=0;//noduri cu grade diferite
return ok;          
}

void afisare_regulat()
{
if(regulat()==1)
                cout<<"\nGraful este regulat";
else
                cout<<"\nGraful nu este regulat";
}

void noduri_terminale()
{
int i;
cout<<"\nNodurile terminale sunt: ";
for(i=1;i<=n;i++)
       if(grad(i)==1)
                                  cout<<i<<" ";
}

void noduri_izolate()
{
int i,nr=0;
for(i=1;i<=n;i++)
                if(grad(i)==0)
                               nr++;
cout<<"\nNumarul nodurilor izolate este "<<nr;
}

int main()
{
citeste();
afisare_matrice_adiacenta();
afisare_regulat();
noduri_terminale();
noduri_izolate();
return 0;
}

/*
Fisierul text „graf.in” contine pe prima linie un numar natural n reprezentand numarul de varfuri ale unui graf neorientat,
 iar pe fiecare din urmatoarele n randuri cate n valori de 0 si 1 separate prin spatii, reprezentand elementele unei linii a matricei de adiacenta corespunzatoare grafului.
a)Sa se scrie o functie grad ce primeste ca parametru un numar natural x si returneaza gradul varfului x.
b)Sa se scrie programul C++ care citeste datele din fisier si care afiseaza in fisirul text „graf.out”, pe primul rand, separate
prin cate un spatiu varfurile terminale ale grafului, sau mesajul „Nu exista”, daca in graf nu sunt varfuri terminale, folosind apeluri
utile ale subprogramului grad.

Exemplu: Daca fisierul ”graf.in”  are forma:
     5
     0 0 1 0 1
     0 0 0 1 1
     1 0 0 0 0
     0 1 0 0 0
     1 1 0 0 0 
atunci fisierul „graf.out” va contine numerele 3 si 4.
*/


#include<fstream.h>
ifstream f("graf.in");
ofstream g("graf.out");

int k,n,a[10][10],d[10],i,j;

void citeste()
{
//citesc numarul de noduri
f>>n;
//citesc matricea de adiacenta din fisier              
for(i=1;i<=n;i++)
                for(j=1;j<=n;j++)
                               f>>a[i][j];
f.close();
}

void scrie()
{
g<<"Matricea de adiacenta este:";
g<<"\n";
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
                g<<a[i][j]<<" ";
g<<"\n";
}
g<<"\n";
}

int grad(int x)
{
int gr=0;
for(j=1;j<=n;j++)
                if(a[x][j]==1)
                               gr++;
return gr;
}0


void varf_terminal()
{
int gasit=0;//pp ca nu sunt noduri terminale
g<<"\nVarfurile terminale sunt: ";
for(i=1;i<=n;i++)
                if(grad(i)==1)
                               {
                               g<<i<<" ";
                               gasit=1;
                               };
                if(gasit==0)
                               g<<"Nu exista varfuri terminale in graf!";

}

int main()
{
citeste();
scrie();
varf_terminal();
return 0;
}
/*
Fisierul text "muchii.txt" contine pe prima linie un numar natural n reprezentвnd numarul de vвrfuri ale unui graf neorientat, pe al doilea
rвnd un numar natural m reprezentвnd numarul de munchii ale unui graf neorientat, iar pe fiecare din urmatoarele m rвnduri cвte doua
 numere naturale, separate pritr-un spatiu, reprezantвnd extremitatile unei muchii a grafului.
a)            Sa se scrie o functie grad ce primeste ca parametru un numar natural x si returneaza gradul vвrfului x.
b)           Sa se scrie programul C++ care citeste datele din fisier, construieste matricea de adiacenta asociata grafului, si care afiseaza
 оn fisirul text "grade.txt", separate prin cвte un spatiu vвrfurile de grad maxim ale grafului, folosind apeluri utile ale subprogramului grad.

Exemplu: Daca fisierul "muchii.txt"  are forma:
     5
     6
     1 2
     2 3
     2 4
     3 4
     3 5
     4 5
atunci fisierul "grade.txt" va contine numerele 2, 3 si 4.

Descriere solutie
Gradul unui vвrf x reprezinta numarul muchiilor incidente cu vвrful x.
Pentru determinarea vвrfurilor de grad maxim se memoreaza gradele vвrfurilor оntr-un vector, fiecare element d[i]
a vectorului va memora gradul vвrfului i. Se determine elementul maxim din vector, apoi se afiseaza pozitiile ocupate
оn vector de valoarea maxima.
*/

#include<fstream.h>
ifstream f("muchii.txt");
ofstream g("grade.txt");

int n,m,i,j,a[10][10],d[20];

void citeste()
{
int k;
f>>n>>m;//citesc numarul de vrfuri si numarul de muchii din fisier
//initializez matricea de adiacenta cu 0
for(i=1;i<=n;i++)
                for(j=1;j<=n;j++)
                               a[i][j]=0;
//incrementez vectorul gradelor cu 0
for(k=1;k<=m;k++)
                d[k]=0;
//citesc muchiile din fisier si construiesc matricea de adiacenta
for(k=1;k<=m;k++)       
                {
                f>>i>>j;
                a[i][j]=1;a[j][i]=1;
                d[i]++;d[j]++;
                }
}

void afisare_vector_grade()
{
g<<"Vectorul gradelor este:";
for(i=1;i<=n;i++)
                g<<d[i]<<" ";
g<<"\n";
}


void afisare_matrice()
{
g<<"\nMatricea de adiacenta este:";
g<<"\n";
for(i=1;i<=n;i++)
                {
                for(j=1;j<=n;j++)
                               g<<a[i][j]<<" ";
                g<<"\n";
                }
g<<"\n";
}

//determin maxim din vectorul gradelor
int grad_max()
{
int max;
max=d[1];
for(i=2;i<=n;i++)
                if(d[i]>max)
                               max=d[i];
return max;
}

//afisez nodurile de grad maxim
void afisare_grad_max()
{
int k;
g<<"\nVarfurile cu grad maxim sunt:";
for(k=1;k<=n;k++)
                if(d[k]==grad_max())
                               g<<k<<" ";
}


int main()
{
citeste();
afisare_vector_grade();
afisare_matrice();
g<<"Gradul maxim este:"<<grad_max();
afisare_grad_max();
return 0;
}

#include<fstream.h>
ifstream f("adiacenta.in");
ofstream g("noduri.out");

int n,a[10][10];

void citeste()
{
int i,j;
f>>n;
for(i=1;i<=n;i++)
                for(j=1;j<=n;j++)
                               f>>a[i][j];
f.close();
}


//Gradul extern al unui nod x reprezinta numarul arcelor care ies din nodul  x
int grad_extern(int x)
{
int j,gr=0;
for(j=1;j<=n;j++)
                if(a[x][j]==1)
                               gr++;
return gr;
}


//gradul intern al unui nod x reprezinta numarul arcelor care intra оn nodul x (segmentul x ------ j)
int grad_intern(int x)
{
int i,gr=0;
for(i=1;i<=n;i++)
                if(a[i][x]==1)
                               gr++;
return gr;
}

void afisare_grad()
{
int i;
g<<"Nodurile care au gradul intern egal cu gradul extern sunt:";
for(i=1;i<=n;i++)
                if(grad_intern(i)==grad_extern(i))
                               g<<i<<" ";
                              
}

int main()
{
citeste();
afisare_grad();
g.close();
return 0;
}

/*
Problema 26
Fi?ierul text "arce.txt" con?ine pe prima linie un num?r natural n reprezentвnd num?rul de noduri ale unui graf orientat, pe al doilea rвnd un num?r natural m reprezentвnd num?rul de arce ale unui graf orientat, iar pe fiecare din urm?toarele m rвnduri cвte dou? numere naturale separate prin spa?ii, reprezentвnd arcele corespunz?toare unui graf orientat.
a)            S? se scrie o func?ie grad_intern ce prime?te ca parametru un num?r natural x ?i returneaz? gradul intern al nodului x.
Func?ia grad_extern prime?te ca parametru un num?r natural x ?i returneaz? gradul extern al nodului x.
b)           S? se scrie programul C++ care cite?te datele din fi?ier, construie?te matricea de adiacen?? asociat? grafului, ?i care afi?eaz? оn fi?irul text "izolate.txt", separate prin cвte un spa?iu nodurile izolate ale grafului, sau mesajul "Nu exist?", dac? оn graf nu sunt noduri izolate, folosind apeluri utile ale subprogramelor grad_intern ?i grad_extern.

Exemplu: Dac? fi?ierul "arce.txt"  are forma:
     5
     3
     1 2
     2 1
     2 4
atunci fi?ierul "izolate.txt" va con?ine numerele 3 ?i 5.

*/

#include<fstream.h>
ifstream f("arce.txt");
ofstream g("izolate.txt");

int n,m,a[20][20];

void citeste()
{
int i,j,k;
f>>n>>m;//citesc numarul de vrfuri si numarul de muchii din fisier
//initializez matricea de adiacenta cu 0
for(i=1;i<=n;i++)
                for(j=1;j<=n;j++)
                               a[i][j]=0;

//citesc muchiile din fisier si construiesc matricea de adiacenta
for(k=1;k<=m;k++)       
                {
                f>>i>>j;
                a[i][j]=1;
                }
}

//cerinta a)
int grad_extern(int x)
{
    int j,k=0;
    for(j=1;j<=n;j++)
        k=k+a[x][j];
    return k;
}
//cerinta a)
int grad_intern(int x)
{
    int i,k=0;
    for(i=1;i<=n;i++)
        k=k+a[i][x];
    return k;
}

void afisare_matrice()
{
int i,j;
g<<"Matricea de adiacenta este:";
g<<"\n";
for(i=1;i<=n;i++)
                {
                for(j=1;j<=n;j++)
                               g<<a[i][j]<<" ";
                g<<"\n";
                }
g<<"\n";
}
void afisare_grade_izolate()
{
                int i,ok=0;//pp ca nu exista noduri izolate
                g<<"Nodurile izolate ale grafului sunt:";
for(i=1;i<=n;i++)
                if(grad_extern(i)==0&&grad_intern(i)==0)
                               {
                               g<<i<<" ";ok=1;//am gasit un nod izolat}
                }
                if(ok==0)
                               g<<"Nu exista!";
}

int main()
{
                citeste();
                afisare_matrice();
                afisare_grade_izolate();
    f.close();
    g.close();
    return 0;
}

/*Problema 27.
Se citesc numere naturale din fisierul text "numere.txt".
Sa se afiseze numerele care au proprietatea de palindrom (numarul citit de la dreapta la stвnga este egal
cu numarul citit de la sвnga la dreapta) si suma cifrelor sa fie para. Se vor folosi: un subprogram palin care va implementa
un algoritm de determinare a proprietatii de numar palindrom si un subprogram care sa calculeze suma cifrelor unui numar natural.
Exemplu: Pentru numerele 12, 12321, 565, 45, 18, 121 se va afisa  565, 121.
*/


#include<fstream.h>
ifstream f("numere.txt");
ofstream g("numere.out");

int v[10],n,i;

void citeste()
{
i=1,n=0;
while(!f.eof())
{
f>>v[i];i++;n++;
}
}

int nrinv(int n)
{
int ninv=0;
while(n!=0)
{
ninv=ninv*10+n%10;
n=n/10;
}
return ninv;
}

int suma_cifre(int n)
{
int s=0;
while(n!=0)
{
s=s+n%10;
n=n/10;
}
return s;
}

void palin()
{
g<<"Numerele palindrom cu suma cifrelor para sunt: ";
for(i=1;i<n;i++)
                if(v[i]==nrinv(v[i])&&suma_cifre(v[i])%2==0)
                               g<<v[i]<<" ";    
}

int main()
{
citeste();
palin();
return 0;
}

#include<fstream.h>
#include<math.h>
ifstream f("date.in");
ofstream g("date.out");

int n,i,j,a[10][10];

void citeste()
{
f>>n;
for(i=1;i<=n;i++)
                for(j=1;j<=n;j++)
                               f>>a[i][j];
f.close();
}

void afisare_matrice()
{
g<<"\nMatricea este: "<<"\n";
for(i=1;i<=n;i++)
                {
                for(j=1;j<=n;j++)
                               g<<a[i][j]<<" ";
                g<<"\n";
                }
}

int nrprim(int n)
{
int d,prim=1;//pp ca nr este prim
for(d=2;d<=sqrt(n);d++)
                if(n%d==1)
                               prim=0;
return prim;
}
 
void afisare_prime()
{
int s=0,k=0;
g<<"Numerele prime de deasupra diagonalei principale sunt:";
for(i=1;i<=n-1;i++)
                for(j=i+1;j<=n;j++)
                               if(nrprim(a[i][j]==1)&&(a[i][j]>0)&&(a[i][j]!=1))
                                               {
                                               g<<a[i][j]<<" ";
                                               k++;//numar elementele prime
                                               s=s+a[i][j];//construiesc suma elementelor prime
                                               }
g<<"\nMedia aritmetica a numerelor prime aflate deasupra diagonalei principale este "<<float(s)/k<<".";                      
}

int main()
{
citeste();
afisare_matrice();
afisare_prime();
f.close();
g.close();
return 0;
}

#include<fstream.h>
ifstream f("date.in");
ofstream g("date.out");

int a[10][10], n,i,j;

void citeste()
{
for(i=1;i<=n;i++)
                for(j=1;j<=n;j++)
                               f>>a[i][j];
}

int nrinv(int n)
{
int ninv=0;
while(n)
{
ninv=ninv*10+n%10;
n=n/10;
}
return ninv;
}

void palindrom()
{
int nr=0;
for(i=1;i<=n-1;i++)
                for(j=1;j<=n-1;j++)
                               if(i+j<n+1&&nrinv(a[i][j])==a[i][j])
                               nr++;
if(nr)
                g<<nr;
else
                g<<"Nu exista!";
}

int main()
{
f>>n;
if(n>=1&&n<=50)
{
citeste();
palindrom();
}
else
                g<<"Numarul "<<n<<" nu respecta restrictia problemei!";
return 0;

}

oracle

Pb1 Oracle

a)            Crearea tabelelor pacienti si consultatii
CREATE TABLE pacienti
(
cnp_p NUMBER(13) PRIMARY KEY,
nume VARCHAR2(30) NOT NULL,
data_nasterii DATE NOT NULL,
sex CHAR(1) NOT NULL
)

desc pacienti


INSERT INTO pacienti VALUES (2921904555777, 'Grig Adela', '19-Mar-1990', 'F')
INSERT INTO pacienti VALUES (2890207555777, 'Alexa Mara', '22-Jun-1989', 'F')
INSERT INTO pacienti VALUES (2910410555777, 'Darie Ada', '02-Feb-1991', 'F')
INSERT INTO pacienti VALUES (1892411555777, 'Vlad Cristi', '27-Nov-1998', 'B')
INSERT INTO pacienti VALUES (2902512555777, 'Pop Ana', '12-May-1990', 'F')
INSERT INTO pacienti VALUES (1911708555777, 'Georgescu Paul', '11-Jul-1992', 'B')

SELECT cnp_p, nume, to_char(data_nasterii,'DD-MM-YYYY') AS "DATA_NASTERII", sex FROM pacienti

CREATE TABLE consultatii
(
id NUMBER(2) PRIMARY KEY,
cnp_pacient NUMBER(13) REFERENCES pacienti(cnp_p),
data_consult DATE NOT NULL,
medic VARCHAR2(30) NOT NULL,
specialitate VARCHAR2(30) NOT NULL,
pret NUMBER(4) NOT NULL,
diagnostic VARCHAR2(25)
)

INSERT INTO consultatii
VALUES(11,2902512555777, '04 April 2009', 'Filip Dan', 'generalist', 130, 'diabet')
INSERT INTO consultatii
VALUES(12,1892411555777, '12 MAR 2010', 'Zota Ana', 'dentar', 110, NULL)
INSERT INTO consultatii
VALUES(13,1911708555777, '01 dec 2012', 'Popescu Ion', 'generalist', 75, 'obezitate')
INSERT INTO consultatii
VALUES(14,1911708555777, '05 oct 2010', 'Zota Ana', 'dentar', 130, NULL)
INSERT INTO consultatii
VALUES(15,2921904555777, '15 feb 2010', 'Zota Ana', 'dentar', 120, NULL)
INSERT INTO consultatii
VALUES(16,2890207555777, '01 dec 2012', 'Zota Ana', 'dentar', 90, NULL)

SELECT id, cnp_pacient,to_char(data_consult,'DD-MM-YYYY') AS "DATA_CONSULT",specialitate,pret,diagnostic
FROM consultatii

b)
SELECT medic,specialitate
FROM consultatii
WHERE data_consult='01 dec 2012'
ORDER BY medic

c)
SELECT SUM(pret)
FROM pacienti, consultatii
WHERE UPPER(nume)='GEORGESCU PAUL' AND cnp_p=cnp_pacient

//Problema 2 Oracle

CREATE TABLE destinatii
(
id NUMBER(3) PRIMARY KEY,
numeD VARCHAR2(40) NOT NULL,
pret NUMBER(3) NOT NULL
)

INSERT INTO destinatii VALUES (1, 'Viena', 110)
INSERT INTO destinatii VALUES (2, 'Paris', 230)
INSERT INTO destinatii VALUES (3, 'Budapesta', 50)
INSERT INTO destinatii VALUES (4, 'New York', 600)
INSERT INTO destinatii VALUES (5, 'Londra', 400)

SELECT id AS "Id", numeD, pret AS "PRE?" FROM destinatii

CREATE TABLE clienti
(
idd NUMBER(3) NOT NULL REFERENCES destinatii(id),
idc NUMBER(3) PRIMARY KEY,
nume VARCHAR2(35) NOT NULL,
prenume VARCHAR2(40) NOT NULL,
adresa VARCHAR2(50) NOT NULL,
telefon VARCHAR2(10)
)


INSERT INTO clienti VALUES (1,11,'POP','INA','IA?I','0744123567')
INSERT INTO clienti VALUES (2,22,'DASCAL','GINA','DEVA','0744123566')
INSERT INTO clienti VALUES (2,33,'MIRON','DANA','CLUJ','0744123565')
INSERT INTO clienti VALUES (3,44,'MIRON','DAN','CLUJ','0744123564')
INSERT INTO clienti VALUES (4,55,'CARP','VLAD','BACAU','0744123563')
INSERT INTO clienti VALUES (5,66,'POPA','ANA','BACAU','0744123562')
INSERT INTO clienti VALUES (1,77,'POP','ION','IA?I','0744123561')
INSERT INTO clienti VALUES (1,88,'AVRAM','ANCA','CLUJ','0744123560')

SELECT * FROM clienti
ORDER BY idc

b)

SELECT nume, prenume
FROM destinatii, clienti
WHERE UPPER(numeD)='VIENA' AND idd=id
ORDER BY nume,prenume

c)

SELECT NUMED FROM destinatii
WHERE pret=(SELECT MAX(pret) FROM destinatii)
UNION
SELECT numeD FROM destinatii
WHERE pret=(SELECT MIN(pret) FROM destinatii);

//pb 3 Oracle
a)            Construiti baza de date cu tabele corespunzatoare si relatiile reprezentate оn ERD. Populati tabelele cu оnregistrari relevante pentru cerintele urmatoare.

CREATE TABLE abonati
(
cnp NUMBER(13) PRIMARY KEY,
nume VARCHAR2(40) NOT NULL,
prenume VARCHAR2(40) NOT NULL
)

INSERT INTO abonati VALUES (2921904555777,'Grig', 'Adela')
INSERT INTO abonati VALUES (2890207555777,'Alexa', 'Mara')
INSERT INTO abonati VALUES (2910410555777,'Darie', 'Ada')
INSERT INTO abonati VALUES (1892411555777,'Vlad', 'Cisti')
INSERT INTO abonati VALUES (2902512555777,'Pop', 'Ana')

SELECT * FROM abonati

CREATE TABLE interventii
(
idi VARCHAR2(5) PRIMARY KEY,
cnp NUMBER(13) REFERENCES abonati(cnp) NOT NULL,
tip_interventie VARCHAR2(30) NOT NULL,
data_inregistrarii DATE NOT NULL,
termen_limita NUMBER(5) NOT NULL,
stare VARCHAR2(20) NOT NULL
)

INSERT INTO interventii VALUES('1.', 2921904555777, 'deranjament', '04-APR-2013', 2, 'neefectuat')
INSERT INTO interventii VALUES('2.', 2890207555777, 'Instalare', '12-MAR-2012', 3, 'efectuat')
INSERT INTO interventii VALUES('3.', 2910410555777, 'deranjament', '01-DEC-2012', 2, 'efectuat')
INSERT INTO interventii VALUES('4.', 1892411555777, 'Mutare', '05-NOV-2012', 2, 'efectuat')
INSERT INTO interventii VALUES('5.', 2902512555777, 'Instalare', '15-FEB-2013', 3, 'efectuat')
INSERT INTO interventii VALUES('6.', 2890207555777, 'deranjament', '01-JAN-2013', 4, 'efectuat')
INSERT INTO interventii VALUES('7.', 2921904555777, 'deranjament', '01-JAN-2013', 4, 'efectuat')
INSERT INTO interventii VALUES('8.', 2902512555777, 'deranjament', '21-DEC-2012', 2, 'neefectuat')

SELECT idi,cnp, tip_interventie AS "TIP", TO_CHAR(data_inregistrarii,'DD-MM-YYYY') AS "DATA INREGISTRARII", termen_limita AS "TERMEN LIMITA", stare
FROM interventii
ORDER BY idi

b)Sa se afiseze alfabetic abonatii care au solicitat interventii оn data de 1 ianuarie 2013.

SELECT nume, prenume
FROM abonati a, interventii b
WHERE data_inregistrarii='01-Jan-2013' AND a.cnp=b.cnp
ORDER BY nume, prenume

c)Afisati data оnregistrarii interventiilor care au termenul limita depasit?


SELECT  TO_CHAR(data_inregistrarii, 'DD-MM-YYYY') AS "DATA INREGISTRARII"
FROM interventii
WHERE stare='neefectuat'
//Pb 4 Oracle
a)            Construiti baza de date cu tabele corespunzatoare si relatiile reprezentate оn ERD. Populati tabelele cu оnregistrari relevante pentru cerintele urmatoare.

CREATE TABLE filme
(
idf NUMBER(5) PRIMARY KEY,
nume VARCHAR2(40) NOT NULL,
data_lansarii DATE NOT NULL
)


INSERT INTO filme VALUES (1,'KING-KONG','04-APR-2008')
INSERT INTO filme VALUES (2,'PE ARIPILE VВNTULUI','12-MAR-1950')
INSERT INTO filme VALUES (3,'FRATII JDERI','01-DEC-1965')
INSERT INTO filme VALUES (4,'MARGELATU','05-NOV-1983')
INSERT INTO filme VALUES (5,'VERONICA','15-FEB-1977')


SELECT idf AS "ID", nume, TO_CHAR(data_lansarii, 'DD-MM-YYYY') AS "DATA LANSARII"
FROM filme


CREATE TABLE actori
(
idf NUMBER(5) REFERENCES filme(idf),
ida NUMBER(5) PRIMARY KEY,
nume_artist VARCHAR2(40) NOT NULL,
nationalitate VARCHAR2(30) NOT NULL
)


INSERT INTO actori VALUES (1,11,'Fay Wray','Americana')
INSERT INTO actori VALUES (2,22, 'Vivien Leigh','Americana')
INSERT INTO actori VALUES (3,33, 'Florin Piersic','Romвna')
INSERT INTO actori VALUES (1,44, 'Bill Williams','Americana')
INSERT INTO actori VALUES (4,88, 'Florin Piersic','Romвna')
INSERT INTO actori VALUES (5,55, 'Margareta Pislaru','Romвna')
INSERT INTO actori VALUES (4,66, 'Mircea Diaconu','Romвna')
INSERT INTO actori VALUES (2,77, 'Clark Gable','Americana')

SELECT * FROM actori
ORDER BY ida

b)           Sa se afiseze cel mai vechi film si actorii care au jucat оn acesta.

SELECT nume, nume_artist
FROM filme a, actori b
WHERE data_lansarii=(SELECT MIN(data_lansarii) FROM FILME) AND a.idf=b.idf

c)            Pentru actorul “Florin Piersic” sa se afiseze toate informatiile detinute precum si toate filmele оn care joaca.

SELECT nume_artist, nationalitate, nume, TO_CHAR(data_lansarii, 'DD-MM-YYYY') AS "DATA LANSARII"
FROM filme a, actori b
WHERE UPPER(nume_artist)='FLORIN PIERSIC' AND a.idf=b.idf


//Pb 5 Oracle 2013

a)Construiti baza de date cu tabele corespunzatoare si relatiile reprezentate оn ERD. Populati tabelele cu оnregistrari relevante pentru cerintele urmatoare.

CREATE TABLE stapani
(
cnp NUMBER(13) PRIMARY KEY,
nume VARCHAR2(40) NOT NULL,
adresa VARCHAR2(50) NOT NULL
)

DESC stapani

INSERT INTO stapani VALUES (2921904555777,'Grig Adelina','Cluj')
INSERT INTO stapani VALUES (2890207555777,'Alexa Mara','Brasov')
INSERT INTO stapani VALUES (2910410555777,'Darie Ada','Bacau')
INSERT INTO stapani VALUES (1892411555777,'Vladoi Cristinel','Bucuresti')
INSERT INTO stapani VALUES (2902512555777,'Pop Ana','Iasi')
INSERT INTO stapani VALUES (1911708555777,'Antonescu Paul','Bucuresti')

CREATE TABLE caini
(
id NUMBER(5) PRIMARY KEY,
cnp NUMBER(13) REFERENCES stapani(cnp),
nume_caine VARCHAR2(40) NOT NULL,
premiu VARCHAR2(30) NOT NULL
)

DESC caini

INSERT INTO caini VALUES (1,2921904555777,'Fay',1)
INSERT INTO caini VALUES (2,2890207555777, 'Dino', 2)
INSERT INTO caini VALUES (3,2910410555777, 'Figaro',1)
INSERT INTO caini VALUES (4,1892411555777, 'Lord',3)
INSERT INTO caini VALUES (5,2902512555777, 'Mozart',3)
INSERT INTO caini VALUES (6,1911708555777, 'Niko',2)
INSERT INTO caini VALUES (7,2921904555777, 'Oscar',0)
INSERT INTO caini VALUES (8,1892411555777, 'Spot',2)

SELECT * FROM caini
ORDER BY id

b)Pentru stapвnul “Cristinel” sa se afiseze toate informatiile detinute precum si toti cвinii cu care a participat la campionat si premiile obtinute de acestia.


SELECT a.cnp, nume, adresa, nume_caine, premiu
FROM stapani a, caini b
WHERE UPPER(nume) LIKE '%CRISTINEL%' AND a.cnp=b.cnp

c)Sa se afiseze lista cвinilor alfabetic dupa premii, оmpreuna cu numele stapвnilor.

SELECT  nume_caine, premiu, nume
FROM stapani a, caini b
WHERE a.cnp=b.cnp
ORDER BY premiu, nume_caine

//Pb 6 Oracle 2013

a)Construiti baza de date cu tabele corespunzatoare si relatiile reprezentate оn ERD. Populati tabelele cu оnregistrari relevante pentru cerintele urmatoare.

               
CREATE TABLE specii
(
ids NUMBER(4) PRIMARY KEY,
denumire VARCHAR2(40) NOT NULL,
caracteristici VARCHAR2(200)
)

DESCRIBE specii

INSERT INTO specii VALUES(1, 'ovine', 'corp acoperit de blana')
INSERT INTO specii VALUES(2, 'marsupiale', 'prezenta unei pungi, numita marsupiu')
INSERT INTO specii VALUES(3, 'cabaline', 'erbivor, marime considerabila')

SELECT * FROM specii

CREATE TABLE animale
(
ida NUMBER(4) PRIMARY KEY,
ids NUMBER(4) REFERENCES specii(ids) NOT NULL,
nume VARCHAR2(40) NOT NULL,
data_nasterii DATE NOT NULL
)

DESCRIBE animale

INSERT INTO animale VALUES(11, 1, 'Oaie', '04-APR-2008')
INSERT INTO animale VALUES(22, 2, 'Cangur', '12-FEB-2007')
INSERT INTO animale VALUES(33, 2, 'urs koala', '01-DEC-2007')
INSERT INTO animale VALUES(44, 3, 'Cal', '05-NOV-2008')
INSERT INTO animale VALUES(55, 1, 'Capra', '15-FEB-2009')
INSERT INTO animale VALUES(66, 3, 'Iapa', '03-MAY-2008')
INSERT INTO animale VALUES(77, 2, 'lupul marsupial', '12-MAR-2007')

SELECT ida, ids, nume, TO_CHAR(data_nasterii,'DD-MM-YYYY') AS "DATA_NA?TERII"
FROM animale
ORDER BY ida

b)Care este  cel mai bвtrвn animal din gradina zoologica ?i din ce specie face parte?

SELECT nume, TO_CHAR(data_nasterii,'DD-MM-YYYY') AS "DATA_NA?TERII", denumire
FROM animale a, specii b
WHERE data_nasterii=(SELECT MIN(data_nasterii) FROM animale) AND a.ids=b.ids

c)Sa se afiseze toate animalele alfabetic pe specii.

SELECT denumire, nume
FROM animale a, specii b
WHERE a.ids=b.ids
ORDER BY denumire, nume

//Pb 8 Oracle 2013

a)Construiti baza de date cu tabele corespunzatoare si relatiile reprezentate оn ERD. Populati tabelele cu оnregistrari relevante pentru cerintele urmatoare.

CREATE TABLE clienti
(
idc NUMBER(3) PRIMARY KEY,
nume VARCHAR2(50) NOT NULL,
prenume VARCHAR2(50) NOT NULL,
adresa VARCHAR2(150) NOT NULL
);

DESC clienti

INSERT INTO clienti VALUES(1, 'POP','INA','IA?I')
INSERT INTO clienti VALUES(2, 'DASCAL','GINA','DEVA')
INSERT INTO clienti VALUES(3, 'MIRON','DANA','CLUJ')
INSERT INTO clienti VALUES(4, 'MIRON','DAN','CLUJ')
INSERT INTO clienti VALUES(5, 'CARP','VLAD','BACAU')
INSERT INTO clienti VALUES(6, 'POPA','ANA','BACAU')

SELECT * FROM clienti
ORDER BY idc

CREATE TABLE reclame
(
idc NUMBER(3) REFERENCES clienti(idc),
idr NUMBER(3) PRIMARY KEY,
denumire VARCHAR2(40) NOT NULL,
durata NUMBER(3) NOT NULL,
nr_difuzari NUMBER(3) NOT NULL,
tarif NUMBER(4) NOT NULL
);

desc reclame

INSERT INTO reclame VALUES(1,11,'COCA-COLA', 2,4,200)
INSERT INTO reclame VALUES(2,22,'LENOR', 1,2,150)
INSERT INTO reclame VALUES(2,33,'ARIEL', 1,2,140)
INSERT INTO reclame VALUES(4,44,'ORANGE', 2,3,220)
INSERT INTO reclame VALUES(5,55,'URSUS', 1,1,123)
INSERT INTO reclame VALUES(3,66,'COLGATE', 1,1,125)
INSERT INTO reclame VALUES(6,77,'POIANA', 2,1,100)
INSERT INTO reclame VALUES(5,88,'CIUC', 1,1,130)

SELECT * FROM reclame
ORDER BY idr

b)Sa se afiseze pentru fiecare client reclamele comandate. Clientii vor fi afisati alfabetic.
SELECT a.idc, nume, prenume, adresa, denumire
FROM clienti a, reclame b
WHERE a.idc=b.idc

c)Afisati numele si prenumele clientului care a comandat reclama cu un numar maxim de difuzari.
ORDER BY nume, prenume

SELECT nume, prenume, adresaa)          Construiti baza de date cu tabele corespunzatoare si relatiile reprezentate оn ERD. Populati tabelele cu оnregistrari relevante pentru cerintele urmatoare.
FROM clienti a, reclame b
WHERE nr_difuzari=(SELECT MAX(nr_difuzari) FROM reclame) AND a.idc=b.idc

//Problema 9 Oracle

PROBLEMA 9
a)Construiti baza de date cu tabele corespunzatoare si relatiile reprezentate оn ERD. Populati tabelele cu оnregistrari relevante pentru cerintele urmatoare.

CREATE TABLE masini
(
idm NUMBER(3) PRIMARY KEY,
marca VARCHAR2(50) NOT NULL,
nr_locuri NUMBER(3) NOT NULL,
nr_inmatriculare VARCHAR2(50) NOT NULL
);

DESC masini

INSERT INTO masini VALUES(1, 'RENAULT',18,'SV-09-ABC')
INSERT INTO masini VALUES(2, 'MERCEDES',12,'SV-02-FGH')
INSERT INTO masini VALUES(3, 'VW',8,'SV-03-IJK')
INSERT INTO masini VALUES(4, 'MERCEDES',18,'B-100-ION')
INSERT INTO masini VALUES(5, 'FORD',20,'B-102-LIC')


SELECT * FROM masini
ORDER BY idm

CREATE TABLE curse
(
idc NUMBER(3) PRIMARY KEY,
idm NUMBER(3) REFERENCES masini(idm),
destinatie VARCHAR2(50) NOT NULL,
data_plecarii DATE NOT NULL,
ora_plecarii NUMBER(3) NOT NULL,
data_intoarcerii DATE NOT NULL
);

desc curse

INSERT INTO curse VALUES(11,1,'BUCURE?TI','03-MAR-2013', 10,'04-MAR-2013')
INSERT INTO curse VALUES(22,2,'IA?I','03-FEB-2013', 10,'03-FEB-2013')
INSERT INTO curse VALUES(33,3,'CLUJ','01-APR-2013', 11,'03-APR-2013')
INSERT INTO curse VALUES(44,1,'IA?I','01-MAY-2013', 15,'01-MAY-2013')
INSERT INTO curse VALUES(55,4,'BUCURE?TI','01-MAY-2013', 6,'02-MAY-2013')
INSERT INTO curse VALUES(66,5,'TIMI?OARA','15-APR-2013', 8,'17-APR-2013')
INSERT INTO curse VALUES(77,1,'CLUJ','10-APR-2013', 10,'11-APR-2013')
INSERT INTO curse VALUES(88,5,'CLUJ','20-MAR-2013', 22,'22-MAR-2013')

SELECT idc,idm,destinatie, TO_CHAR(data_plecarii, 'DD.MM.YYYY') AS "DATA PLECARII", ora_plecarii AS "ORA PLECARII", TO_CHAR(data_intoarcerii,'DD.MM.YYYY') AS "DATA INTOARCERII" FROM curse
ORDER BY idc

b)Sa se afiseze numerele de оnmatriculare ale masinilor care efectueaza curse ce dureaza mai mult de o zi.

SELECT DISTINCT nr_inmatriculare
FROM masini a, curse b
WHERE a.idm=b.idm AND data_intoarcerii-data_plecarii>1

c)Cвte persoane ar putea fi transportate cu masinile care pleaca оn cursa pe 1 mai 2013?

SELECT SUM(nr_locuri) AS "NUMAR PERSOANE"
FROM masini a, curse b
WHERE a.idm=b.idm AND data_plecarii='01-MAY-2013'

//Pb 10 Oracle


a)Construiti baza de date cu tabele corespunzatoare si relatiile reprezentate оn ERD. Populati tabelele cu оnregistrari relevante pentru cerintele urmatoare.


CREATE TABLE edituri
(
cod NUMBER(3) PRIMARY KEY,
nume VARCHAR2(30) NOT NULL,
adresa VARCHAR2(200) NOT NULL,
telefon VARCHAR2(10)
)


INSERT INTO edituri VALUES (1, 'NEMIRA', '1 Mai, 40, Bucuresti','0744123567')
INSERT INTO edituri VALUES (2, 'NICULESCU', 'Calea Unirii 23, Bucuresti','0744123566')
INSERT INTO edituri VALUES (3, 'ALL', 'Calea Unirii 67, Bucuresti','0744123565')
INSERT INTO edituri VALUES (4, 'ERC PRESS', 'Florilor 1, Bucuresti','0744123565')
INSERT INTO edituri VALUES (5, 'PETRION', 'Pandurilor 67, Bucuresti','0744123563')


SELECT *
FROM edituri ORDER by cod



CREATE TABLE carti
(
cod NUMBER(3) REFERENCES edituri(cod),
idc NUMBER(3) PRIMARY KEY,
titlu VARCHAR2(50) NOT NULL,
autor VARCHAR2(50) NOT NULL,
pret NUMBER(4) NOT NULL
)

INSERT INTO carti VALUES (1,11, 'ION', 'ION REBREANU',29)
INSERT INTO carti VALUES (2,22, 'MARA', 'IOAN SLAVICI',31)
INSERT INTO carti VALUES (3,33, 'POVE?TI', 'ION CREANGA',19)
INSERT INTO carti VALUES (4,44, 'POEZII', 'MIHAI EMINESCU',15)
INSERT INTO carti VALUES (5,55, 'AMINTIRI DIN COPILARIE', 'ION CREANGA',22)
INSERT INTO carti VALUES (2,66, 'POEZII', 'GEORGE CO?BUC',29)
INSERT INTO carti VALUES (1,77, 'LORELEI', 'IONEL TEODOREANU',20)
INSERT INTO carti VALUES (5,88, 'DUMBRAVA MINUNATA', 'MIHAIL SADOVEANU',18)


SELECT *
FROM carti ORDER by idc

b)Afisati cartile aparute la editura Nemira ordonate alfabetic.

SELECT titlu, autor, pret
FROM edituri a, carti b
WHERE a.cod=b.cod and UPPER(nume)='NEMIRA'
ORDER BY titlu,autor

c)Care este valoarea cartilor scrise de Ion Creanga?

SELECT SUM(pret) AS "VALOARE"
FROM carti
WHERE UPPER(autor)='ION CREANGA'

//Pb 11 Oracle 2013

a)Construiti baza de date cu tabele corespunzatoare si relatiile reprezentate оn ERD. Populati tabelele cu оnregistrari relevante pentru cerintele urmatoare.


CREATE TABLE departamente
(
cod NUMBER(3) PRIMARY KEY,
denumire VARCHAR2(30) NOT NULL
)



INSERT INTO departamente VALUES (1,'CONTABILITATE')
INSERT INTO departamente VALUES (2,'APROVIZIONARE')
INSERT INTO departamente VALUES (3,'DESFACERE')
INSERT INTO departamente VALUES (4,'TRANSPORTURI')
INSERT INTO departamente VALUES (5,'PRODUC?IE')


SELECT *
FROM departamente ORDER by cod



CREATE TABLE angajati
(
cod NUMBER(3) REFERENCES edituri(cod),
idc NUMBER(3) PRIMARY KEY,
titlu VARCHAR2(50) NOT NULL,
autor VARCHAR2(50) NOT NULL,
pret NUMBER(4) NOT NULL
)

CREATE TABLE angajati
(
cnp NUMBER(13) PRIMARY KEY,
nume VARCHAR2(50) NOT NULL,
functia VARCHAR2(20) NOT NULL,
salar NUMBER(4) NOT NULL,
cod_depart NUMBER(3) REFERENCES departamente(cod)
);



INSERT INTO angajati VALUES (2921904555777,'Grig Adelina','COORDONATOR DEPARTAMENT',1800,5)
INSERT INTO angajati VALUES (2890207555777,'Alexa Mara','ECONOMIST',1500,2)
INSERT INTO angajati VALUES (2910410555777,'Darie Ada','COORDONATOR DEPARTAMENT',1800,3)
INSERT INTO angajati VALUES (1892411555777,'Vladoi Cristinel','INGINER',1602,5)
INSERT INTO angajati VALUES (2902512555777,'Pop Ana','INGINER',1710,4)
INSERT INTO angajati VALUES (1911708555777,'Antonescu Paul','ECONOMIST',1403,1)
INSERT INTO angajati VALUES (2901907555777,'Ionescu Ana','COORDONATOR DEPARTAMENT',1800,1)
INSERT INTO angajati VALUES (2890909555777,'Alex Dana','INGINER',1653,5)
INSERT INTO angajati VALUES (1910210555777,'Darie Mihai','COORDONATOR DEPARTAMENT',1800,4)
INSERT INTO angajati VALUES (2882411555777,'Vlad Cristina','INGINER',1689,5)
INSERT INTO angajati VALUES (2922512555777,'Radu Anda','ECONOMIST',1500,3)
INSERT INTO angajati VALUES (1911709555777,'Anton Mihai','COORDONATOR DEPARTAMENT',1800,2)


SELECT cnp, nume AS "NUME ?I PRENUME", functia AS "FUNC?IA", salar, cod_depart
FROM angajati


b)Sa se afiseze lista departamentelor cu sefii acestora(se va afisa denumirea departamentului si numele coordonatorului).


SELECT denumire AS "DEPARTAMENT", nume AS "COORDONATOR DEPARTAMENT"
FROM departamente a, angajati b
WHERE a.cod=b.cod_depart and UPPER(functia)='COORDONATOR DEPARTAMENT'


c)Sa se afiseze numarul de angajati din fiecare departament.

SELECT denumire AS "DEPARTAMENT", COUNT (*) AS "NUMARUL DE ANGAJA?I"
FROM departamente a, angajati b
WHERE a.cod=b.cod_depart
GROUP BY denumire
CREATE TABLE diriginti
(
id_d NUMBER(2) PRIMARY KEY,
nume VARCHAR2(25) NOT NULL,
prenume VARCHAR2(30) NOT NULL,
specialitate VARCHAR(15) NOT NULL
)

DESCRIBE diriginti

SELECT * FROM DIRIGINTI

INSERT INTO diriginti VALUES(1, 'POP', 'INA', 'FIZICA')
INSERT INTO diriginti VALUES(2, 'DASCAL', 'GINA', 'MATEMATICA')
INSERT INTO diriginti VALUES(3, 'MIRON', 'DANA', 'CHIMIE')
INSERT INTO diriginti VALUES(4, 'MIRON', 'DAN', 'INFORMATICA')
INSERT INTO diriginti VALUES(5, 'CARP', 'VLAD', 'ISTORIE')
INSERT INTO diriginti VALUES(6, 'POPA', 'ANA', 'BIOLOGIE')


CREATE TABLE elevi
(
cnp NUMBER(13) PRIMARY KEY,
nume VARCHAR2(50) NOT NULL,
adresa VARCHAR2(50) NOT NULL,
media NUMBER(4,2) NOT NULL,
id_d NUMBER(2) REFERENCES diriginti(id_d)
)

INSERT INTO elevi VALUES(2961904555777, 'Grig Adelina', '1 Mai, 40, Bucuresti', 9.40, 5)
INSERT INTO elevi VALUES(2950207555777, 'Alexa Mara',           'Calea Unirii 23, Bucuresti',          10.00,    2)
INSERT INTO elevi VALUES(2960410555777, 'Darie Ada',               'Calea Unirii 67, Bucuresti',          9.00,      3)
INSERT INTO elevi VALUES(1972411555777, 'Vladoi Cristinel', 'Florilor 1, Bucuresti',        8.80,      6)
INSERT INTO elevi VALUES(2962512555777, 'Pop Ana', 'Pandurilor 67, Bucuresti',            9.50,      4)
INSERT INTO elevi VALUES(1971708555777, 'Antonescu Paul', 'Calea Unirii 76, Bucuresti',           10.00,    1)
INSERT INTO elevi VALUES(2981907555777, 'Ionescu Ana', 'Trandafirilor 1, Bucuresti',   8.80,      1)
INSERT INTO elevi VALUES(2980909555777, 'Alex Dana', 'P. Rares 67, Bucuresti',             9.00,      5)
INSERT INTO elevi VALUES(1990210555777, 'Darie Mihai', '1 Mai, 46, Bucuresti',               10.00,    4)
INSERT INTO elevi VALUES(2972411555777, 'Vlad Cristina','Calea Unirii 123, Bucuresti', 8.90,      6)
INSERT INTO elevi VALUES(2962912555777, 'Radu Anda',            '1 Mai, 489, Bucuresti',  9.22,      3)
INSERT INTO elevi VALUES(1951709555777, 'Anton Mihai', 'Calea Unirii 237, Bucuresti', 9.10,     2)

SELECT *
FROM elevi

b)           Sa se. afiseze numele dirigintilor a caror elevi au media 10. Se va afisa numele elevului, numele dirigintelui si specialitatea dirigintelui.

SELECT a.nume AS "Numele elevului", b.nume AS "Nume diriginte", prenume AS "Prenume diriginte", specialitate
FROM elevi a, diriginti b
WHERE media='10.00' AND a.id_d=b.id_d

c)            Sa se afiseze media generala a fiecareiclase. Se va afisa numele dirigintelui si media generala a clasei.

SELECT a.id_d, b.nume, b.prenume, a."Media Clasei"
FROM(SELECT id_d, AVG(media) AS "Media Clasei" FROM elevi GROUP BY id_d) a, diriginti b
WHERE a.id_d=b.id_d
ORDER BY id_d

Pb 13

a)            Construiti baza de date cu tabele corespunzatoare si relatiile reprezentate оn ERD. Populati tabelele cu оnregistrari relevante pentru cerintele urmatoare.


create table cladiri
(
cod_cladire number(2) primary key,
adresa varchar2(50) not null,
nr_nivele number(2) not null
)


insert into cladiri values(1,'1 Mai,40,Bucuresti',1)
insert into cladiri values(2,'Calea Uniri 23,Bucuresti',4)
insert into cladiri values(3,'Calea Unirii 67,Bucuresti',2)
insert into cladiri values(4,'Florilor 1,Bucuresti',3)
insert into cladiri values(5,'Pandurilor 67, Bucuresti',2)

SELECT * FROM cladiri
ORDER BY cod_cladire

create table apartamente
(
cod_cladire number(1) references cladiri(cod_cladire) not null,
cod_apartamente number(2) primary key,
nr_camere number(2)not null,
etaj number(2) not null,
obs varchar2(50)
)


insert into apartamente values(2,1,2,1,'Are centrala proprie')
insert into apartamente values(1,12,1,2,' ')
insert into apartamente values(1,11,3,1,' ')
insert into apartamente values(2,2,3,2,'Reanovat')
insert into apartamente values(3,10,2,1,'Are centrala proprie')
insert into apartamente values(4,5,2,3,' ')
insert into apartamente values(5,6,4,1,'Renovat')
insert into apartamente values(3,3,1,1,' ')

select * from apartamente

b)           Afisati apartamentele care se afla оn cladiri care au mai mult de 2 nivele.


select a.adresa, b.cod_apartamente, b.nr_camere, b.etaj, b.obs
from cladiri a, apartamente b
where nr_nivele>'2'  AND  a.cod_cladire=b.cod_cladire

c)            Sa se afiseze la ce adresa se gaseste apartamentul care are cele mai multe camere.

select adresa
from cladiri a,apartamente b
where nr_camere=(select max(nr_camere)from apartamente) and a.cod_cladire=b.cod_cladire

Problema 14
a)            Construiti baza de date cu tabele corespunzatoare si relatiile reprezentate оn ERD. Populati tabelele cu оnregistrari relevante pentru cerintele urmatoare.

CREATE TABLE cluburi
(
cod_club NUMBER(2) PRIMARY KEY,
denumire VARCHAR2(30) NOT NULL,
localitate VARCHAR2(20) NOT NULL
)

desc cluburi


INSERT INTO cluburi VALUES(1,'Club Zenit','Cluj')
INSERT INTO cluburi VALUES(2,'Club DINAMO','Bucuresti')
INSERT INTO cluburi VALUES(3,'Club Steaua','Bacau')
INSERT INTO cluburi VALUES(4,'Club Rapid','Bucuresti')
INSERT INTO cluburi VALUES(5,'Club Piticot','Suceava')
INSERT INTO cluburi VALUES(6,'Club Ardealul','Cluj')

SELECT * FROM cluburi
ORDER BY cod_club

CREATE TABLE sportivi
(
cod_club NUMBER(2) REFERENCES cluburi(cod_club),
cods NUMBER(3) Primary Key,
nume VARCHAR2(30) NOT NULL,
prenume VARCHAR2(30) NOT NULL,
varsta NUMBER(3) NOT NULL
)

INSERT INTO sportivi VALUES (1, 11, 'Pop', 'Ina', 15)
INSERT INTO sportivi VALUES (2,22,'Dascal','Gina',20)
INSERT INTO sportivi VALUES (2,33,'Miron','Dana',21)
INSERT INTO sportivi VALUES (4,44,'Miron','Dan',19)
INSERT INTO sportivi VALUES (5,55,'Carp','Vlad',17)
INSERT INTO sportivi VALUES (3,66,'Popa','Ana',21)
INSERT INTO sportivi VALUES (6,77, 'Avram', 'Mona', 17)
INSERT INTO sportivi VALUES (5,88,'Enache','Cristi',18)

SELECT * FROM sportivi
ORDER BY cods

b)           Sa se afiseze cluburile alfabetic ?i media de vвrsta a sportivilor fiecarui club.

SELECT denumire, a."media de varsta" FROM
(SELECT cod_club, AVG(varsta) AS "media de varsta" FROM sportivi GROUP BY cod_club) a, cluburi b
WHERE a.cod_club=b.cod_club
ORDER BY denumire

c)            Sa se afiseze alfabetic cei(cel) mai batrвni sportivi оmpreuna cu cluburile lor.

SELECT nume, prenume,varsta,denumire
FROM  sportivi b, cluburi a
WHERE varsta=(SELECT MAX(VARSTA) FROM sportivi) AND a.cod_club=b.cod_club
ORDER by nume asc,prenume asc;

Problema 15

a)            Construiti baza de date cu tabele corespunzatoare si relatiile reprezentate оn ERD. Populati tabelele cu оnregistrari relevante pentru cerintele urmatoare.

CREATE TABLE apartamente15
(
coda NUMBER(2) PRIMARY KEY,
nr_camere NUMBER(2) NOT NULL,
nr_ap NUMBER(2) NOT NULL,
suma_restante NUMBER(4) NOT NULL
)


INSERT INTO apartamente15 VALUES(1,              2,            20,          0)
INSERT INTO apartamente15 VALUES(2,              3,            21,          75)
INSERT INTO apartamente15 VALUES(3,              4,            22,          100)
INSERT INTO apartamente15 VALUES(4,              3,            23,          0)
INSERT INTO apartamente15 VALUES(5,              4,            24,          200)
INSERT INTO apartamente15 VALUES(6,              2,            25,          50)

select * from apartamente15

CREATE TABLE locatari
(
codl NUMBER(3) PRIMARY KEY not null,
coda NUMBER(2) REFERENCES apartamente15(coda) not null,
nume VARCHAR2(20) not null,
prenume VARCHAR2(30) not null,
loc_munca VARCHAR2(50)
)


INSERT INTO locatari VALUES(111,          1,            'POP',    'INA',     'SC ASTAR')
INSERT INTO locatari VALUES(112,          2,            'DASCAL',            'GINA', 'GPN2')
INSERT INTO locatari VALUES(113,          4,            'MIRON',             'DANA',                'GPN2')
INSERT INTO locatari VALUES(114,          4,            'MIRON',             'DAN',   'SC EMPOS')
INSERT INTO locatari VALUES(115,          3,            'CARP', 'VLAD', 'SC GEN 1')
INSERT INTO locatari VALUES(116,          3,            'CARP', 'ANA',   'SC GEN 1')
INSERT INTO locatari VALUES(117,          5,            'AVRAM',            'MONA',              'GPN2')
INSERT INTO locatari VALUES(118,          6,            'ENACHE',           'CRISTI',               'AUTOSERVICE')Pb1 Oracle

a)            Crearea tabelelor pacienti si consultatii
CREATE TABLE pacienti
(
cnp_p NUMBER(13) PRIMARY KEY,
nume VARCHAR2(30) NOT NULL,
data_nasterii DATE NOT NULL,
sex CHAR(1) NOT NULL
)

desc pacienti


INSERT INTO pacienti VALUES (2921904555777, 'Grig Adela', '19-Mar-1990', 'F')
INSERT INTO pacienti VALUES (2890207555777, 'Alexa Mara', '22-Jun-1989', 'F')
INSERT INTO pacienti VALUES (2910410555777, 'Darie Ada', '02-Feb-1991', 'F')
INSERT INTO pacienti VALUES (1892411555777, 'Vlad Cristi', '27-Nov-1998', 'B')
INSERT INTO pacienti VALUES (2902512555777, 'Pop Ana', '12-May-1990', 'F')
INSERT INTO pacienti VALUES (1911708555777, 'Georgescu Paul', '11-Jul-1992', 'B')

SELECT cnp_p, nume, to_char(data_nasterii,'DD-MM-YYYY') AS "DATA_NASTERII", sex FROM pacienti

CREATE TABLE consultatii
(
id NUMBER(2) PRIMARY KEY,
cnp_pacient NUMBER(13) REFERENCES pacienti(cnp_p),
data_consult DATE NOT NULL,
medic VARCHAR2(30) NOT NULL,
specialitate VARCHAR2(30) NOT NULL,
pret NUMBER(4) NOT NULL,
diagnostic VARCHAR2(25)
)

INSERT INTO consultatii
VALUES(11,2902512555777, '04 April 2009', 'Filip Dan', 'generalist', 130, 'diabet')
INSERT INTO consultatii
VALUES(12,1892411555777, '12 MAR 2010', 'Zota Ana', 'dentar', 110, NULL)
INSERT INTO consultatii
VALUES(13,1911708555777, '01 dec 2012', 'Popescu Ion', 'generalist', 75, 'obezitate')
INSERT INTO consultatii
VALUES(14,1911708555777, '05 oct 2010', 'Zota Ana', 'dentar', 130, NULL)
INSERT INTO consultatii
VALUES(15,2921904555777, '15 feb 2010', 'Zota Ana', 'dentar', 120, NULL)
INSERT INTO consultatii
VALUES(16,2890207555777, '01 dec 2012', 'Zota Ana', 'dentar', 90, NULL)

SELECT id, cnp_pacient,to_char(data_consult,'DD-MM-YYYY') AS "DATA_CONSULT",specialitate,pret,diagnostic
FROM consultatii

b)
SELECT medic,specialitate
FROM consultatii
WHERE data_consult='01 dec 2012'
ORDER BY medic

c)
SELECT SUM(pret)
FROM pacienti, consultatii
WHERE UPPER(nume)='GEORGESCU PAUL' AND cnp_p=cnp_pacient

//Problema 2 Oracle

CREATE TABLE destinatii
(
id NUMBER(3) PRIMARY KEY,
numeD VARCHAR2(40) NOT NULL,
pret NUMBER(3) NOT NULL
)

INSERT INTO destinatii VALUES (1, 'Viena', 110)
INSERT INTO destinatii VALUES (2, 'Paris', 230)
INSERT INTO destinatii VALUES (3, 'Budapesta', 50)
INSERT INTO destinatii VALUES (4, 'New York', 600)
INSERT INTO destinatii VALUES (5, 'Londra', 400)

SELECT id AS "Id", numeD, pret AS "PRE?" FROM destinatii

CREATE TABLE clienti
(
idd NUMBER(3) NOT NULL REFERENCES destinatii(id),
idc NUMBER(3) PRIMARY KEY,
nume VARCHAR2(35) NOT NULL,
prenume VARCHAR2(40) NOT NULL,
adresa VARCHAR2(50) NOT NULL,
telefon VARCHAR2(10)
)


INSERT INTO clienti VALUES (1,11,'POP','INA','IA?I','0744123567')
INSERT INTO clienti VALUES (2,22,'DASCAL','GINA','DEVA','0744123566')
INSERT INTO clienti VALUES (2,33,'MIRON','DANA','CLUJ','0744123565')
INSERT INTO clienti VALUES (3,44,'MIRON','DAN','CLUJ','0744123564')
INSERT INTO clienti VALUES (4,55,'CARP','VLAD','BACAU','0744123563')
INSERT INTO clienti VALUES (5,66,'POPA','ANA','BACAU','0744123562')
INSERT INTO clienti VALUES (1,77,'POP','ION','IA?I','0744123561')
INSERT INTO clienti VALUES (1,88,'AVRAM','ANCA','CLUJ','0744123560')

SELECT * FROM clienti
ORDER BY idc

b)

SELECT nume, prenume
FROM destinatii, clienti
WHERE UPPER(numeD)='VIENA' AND idd=id
ORDER BY nume,prenume

c)

SELECT NUMED FROM destinatii
WHERE pret=(SELECT MAX(pret) FROM destinatii)
UNION
SELECT numeD FROM destinatii
WHERE pret=(SELECT MIN(pret) FROM destinatii);

//pb 3 Oracle
a)            Construiti baza de date cu tabele corespunzatoare si relatiile reprezentate оn ERD. Populati tabelele cu оnregistrari relevante pentru cerintele urmatoare.

CREATE TABLE abonati
(
cnp NUMBER(13) PRIMARY KEY,
nume VARCHAR2(40) NOT NULL,
prenume VARCHAR2(40) NOT NULL
)

INSERT INTO abonati VALUES (2921904555777,'Grig', 'Adela')
INSERT INTO abonati VALUES (2890207555777,'Alexa', 'Mara')
INSERT INTO abonati VALUES (2910410555777,'Darie', 'Ada')
INSERT INTO abonati VALUES (1892411555777,'Vlad', 'Cisti')
INSERT INTO abonati VALUES (2902512555777,'Pop', 'Ana')

SELECT * FROM abonati

CREATE TABLE interventii
(
idi VARCHAR2(5) PRIMARY KEY,
cnp NUMBER(13) REFERENCES abonati(cnp) NOT NULL,
tip_interventie VARCHAR2(30) NOT NULL,
data_inregistrarii DATE NOT NULL,
termen_limita NUMBER(5) NOT NULL,
stare VARCHAR2(20) NOT NULL
)

INSERT INTO interventii VALUES('1.', 2921904555777, 'deranjament', '04-APR-2013', 2, 'neefectuat')
INSERT INTO interventii VALUES('2.', 2890207555777, 'Instalare', '12-MAR-2012', 3, 'efectuat')
INSERT INTO interventii VALUES('3.', 2910410555777, 'deranjament', '01-DEC-2012', 2, 'efectuat')
INSERT INTO interventii VALUES('4.', 1892411555777, 'Mutare', '05-NOV-2012', 2, 'efectuat')
INSERT INTO interventii VALUES('5.', 2902512555777, 'Instalare', '15-FEB-2013', 3, 'efectuat')
INSERT INTO interventii VALUES('6.', 2890207555777, 'deranjament', '01-JAN-2013', 4, 'efectuat')
INSERT INTO interventii VALUES('7.', 2921904555777, 'deranjament', '01-JAN-2013', 4, 'efectuat')
INSERT INTO interventii VALUES('8.', 2902512555777, 'deranjament', '21-DEC-2012', 2, 'neefectuat')

SELECT idi,cnp, tip_interventie AS "TIP", TO_CHAR(data_inregistrarii,'DD-MM-YYYY') AS "DATA INREGISTRARII", termen_limita AS "TERMEN LIMITA", stare
FROM interventii
ORDER BY idi

b)Sa se afiseze alfabetic abonatii care au solicitat interventii оn data de 1 ianuarie 2013.

SELECT nume, prenume
FROM abonati a, interventii b
WHERE data_inregistrarii='01-Jan-2013' AND a.cnp=b.cnp
ORDER BY nume, prenume

c)Afisati data оnregistrarii interventiilor care au termenul limita depasit?


SELECT  TO_CHAR(data_inregistrarii, 'DD-MM-YYYY') AS "DATA INREGISTRARII"
FROM interventii
WHERE stare='neefectuat'
//Pb 4 Oracle
a)            Construiti baza de date cu tabele corespunzatoare si relatiile reprezentate оn ERD. Populati tabelele cu оnregistrari relevante pentru cerintele urmatoare.

CREATE TABLE filme
(
idf NUMBER(5) PRIMARY KEY,
nume VARCHAR2(40) NOT NULL,
data_lansarii DATE NOT NULL
)


INSERT INTO filme VALUES (1,'KING-KONG','04-APR-2008')
INSERT INTO filme VALUES (2,'PE ARIPILE VВNTULUI','12-MAR-1950')
INSERT INTO filme VALUES (3,'FRATII JDERI','01-DEC-1965')
INSERT INTO filme VALUES (4,'MARGELATU','05-NOV-1983')
INSERT INTO filme VALUES (5,'VERONICA','15-FEB-1977')


SELECT idf AS "ID", nume, TO_CHAR(data_lansarii, 'DD-MM-YYYY') AS "DATA LANSARII"
FROM filme


CREATE TABLE actori
(
idf NUMBER(5) REFERENCES filme(idf),
ida NUMBER(5) PRIMARY KEY,
nume_artist VARCHAR2(40) NOT NULL,
nationalitate VARCHAR2(30) NOT NULL
)


INSERT INTO actori VALUES (1,11,'Fay Wray','Americana')
INSERT INTO actori VALUES (2,22, 'Vivien Leigh','Americana')
INSERT INTO actori VALUES (3,33, 'Florin Piersic','Romвna')
INSERT INTO actori VALUES (1,44, 'Bill Williams','Americana')
INSERT INTO actori VALUES (4,88, 'Florin Piersic','Romвna')
INSERT INTO actori VALUES (5,55, 'Margareta Pislaru','Romвna')
INSERT INTO actori VALUES (4,66, 'Mircea Diaconu','Romвna')
INSERT INTO actori VALUES (2,77, 'Clark Gable','Americana')

SELECT * FROM actori
ORDER BY ida

b)           Sa se afiseze cel mai vechi film si actorii care au jucat оn acesta.

SELECT nume, nume_artist
FROM filme a, actori b
WHERE data_lansarii=(SELECT MIN(data_lansarii) FROM FILME) AND a.idf=b.idf

c)            Pentru actorul “Florin Piersic” sa se afiseze toate informatiile detinute precum si toate filmele оn care joaca.

SELECT nume_artist, nationalitate, nume, TO_CHAR(data_lansarii, 'DD-MM-YYYY') AS "DATA LANSARII"
FROM filme a, actori b
WHERE UPPER(nume_artist)='FLORIN PIERSIC' AND a.idf=b.idf


//Pb 5 Oracle 2013

a)Construiti baza de date cu tabele corespunzatoare si relatiile reprezentate оn ERD. Populati tabelele cu оnregistrari relevante pentru cerintele urmatoare.

CREATE TABLE stapani
(
cnp NUMBER(13) PRIMARY KEY,
nume VARCHAR2(40) NOT NULL,
adresa VARCHAR2(50) NOT NULL
)

DESC stapani

INSERT INTO stapani VALUES (2921904555777,'Grig Adelina','Cluj')
INSERT INTO stapani VALUES (2890207555777,'Alexa Mara','Brasov')
INSERT INTO stapani VALUES (2910410555777,'Darie Ada','Bacau')
INSERT INTO stapani VALUES (1892411555777,'Vladoi Cristinel','Bucuresti')
INSERT INTO stapani VALUES (2902512555777,'Pop Ana','Iasi')
INSERT INTO stapani VALUES (1911708555777,'Antonescu Paul','Bucuresti')

CREATE TABLE caini
(
id NUMBER(5) PRIMARY KEY,
cnp NUMBER(13) REFERENCES stapani(cnp),
nume_caine VARCHAR2(40) NOT NULL,
premiu VARCHAR2(30) NOT NULL
)

DESC caini

INSERT INTO caini VALUES (1,2921904555777,'Fay',1)
INSERT INTO caini VALUES (2,2890207555777, 'Dino', 2)
INSERT INTO caini VALUES (3,2910410555777, 'Figaro',1)
INSERT INTO caini VALUES (4,1892411555777, 'Lord',3)
INSERT INTO caini VALUES (5,2902512555777, 'Mozart',3)
INSERT INTO caini VALUES (6,1911708555777, 'Niko',2)
INSERT INTO caini VALUES (7,2921904555777, 'Oscar',0)
INSERT INTO caini VALUES (8,1892411555777, 'Spot',2)

SELECT * FROM caini
ORDER BY id

b)Pentru stapвnul “Cristinel” sa se afiseze toate informatiile detinute precum si toti cвinii cu care a participat la campionat si premiile obtinute de acestia.


SELECT a.cnp, nume, adresa, nume_caine, premiu
FROM stapani a, caini b
WHERE UPPER(nume) LIKE '%CRISTINEL%' AND a.cnp=b.cnp

c)Sa se afiseze lista cвinilor alfabetic dupa premii, оmpreuna cu numele stapвnilor.

SELECT  nume_caine, premiu, nume
FROM stapani a, caini b
WHERE a.cnp=b.cnp
ORDER BY premiu, nume_caine

//Pb 6 Oracle 2013

a)Construiti baza de date cu tabele corespunzatoare si relatiile reprezentate оn ERD. Populati tabelele cu оnregistrari relevante pentru cerintele urmatoare.

               
CREATE TABLE specii
(
ids NUMBER(4) PRIMARY KEY,
denumire VARCHAR2(40) NOT NULL,
caracteristici VARCHAR2(200)
)

DESCRIBE specii

INSERT INTO specii VALUES(1, 'ovine', 'corp acoperit de blana')
INSERT INTO specii VALUES(2, 'marsupiale', 'prezenta unei pungi, numita marsupiu')
INSERT INTO specii VALUES(3, 'cabaline', 'erbivor, marime considerabila')

SELECT * FROM specii

CREATE TABLE animale
(
ida NUMBER(4) PRIMARY KEY,
ids NUMBER(4) REFERENCES specii(ids) NOT NULL,
nume VARCHAR2(40) NOT NULL,
data_nasterii DATE NOT NULL
)

DESCRIBE animale

INSERT INTO animale VALUES(11, 1, 'Oaie', '04-APR-2008')
INSERT INTO animale VALUES(22, 2, 'Cangur', '12-FEB-2007')
INSERT INTO animale VALUES(33, 2, 'urs koala', '01-DEC-2007')
INSERT INTO animale VALUES(44, 3, 'Cal', '05-NOV-2008')
INSERT INTO animale VALUES(55, 1, 'Capra', '15-FEB-2009')
INSERT INTO animale VALUES(66, 3, 'Iapa', '03-MAY-2008')
INSERT INTO animale VALUES(77, 2, 'lupul marsupial', '12-MAR-2007')

SELECT ida, ids, nume, TO_CHAR(data_nasterii,'DD-MM-YYYY') AS "DATA_NA?TERII"
FROM animale
ORDER BY ida

b)Care este  cel mai bвtrвn animal din gradina zoologica ?i din ce specie face parte?

SELECT nume, TO_CHAR(data_nasterii,'DD-MM-YYYY') AS "DATA_NA?TERII", denumire
FROM animale a, specii b
WHERE data_nasterii=(SELECT MIN(data_nasterii) FROM animale) AND a.ids=b.ids

c)Sa se afiseze toate animalele alfabetic pe specii.

SELECT denumire, nume
FROM animale a, specii b
WHERE a.ids=b.ids
ORDER BY denumire, nume

//Pb 8 Oracle 2013

a)Construiti baza de date cu tabele corespunzatoare si relatiile reprezentate оn ERD. Populati tabelele cu оnregistrari relevante pentru cerintele urmatoare.

CREATE TABLE clienti
(
idc NUMBER(3) PRIMARY KEY,
nume VARCHAR2(50) NOT NULL,
prenume VARCHAR2(50) NOT NULL,
adresa VARCHAR2(150) NOT NULL
);

DESC clienti

INSERT INTO clienti VALUES(1, 'POP','INA','IA?I')
INSERT INTO clienti VALUES(2, 'DASCAL','GINA','DEVA')
INSERT INTO clienti VALUES(3, 'MIRON','DANA','CLUJ')
INSERT INTO clienti VALUES(4, 'MIRON','DAN','CLUJ')
INSERT INTO clienti VALUES(5, 'CARP','VLAD','BACAU')
INSERT INTO clienti VALUES(6, 'POPA','ANA','BACAU')

SELECT * FROM clienti
ORDER BY idc

CREATE TABLE reclame
(
idc NUMBER(3) REFERENCES clienti(idc),
idr NUMBER(3) PRIMARY KEY,
denumire VARCHAR2(40) NOT NULL,
durata NUMBER(3) NOT NULL,
nr_difuzari NUMBER(3) NOT NULL,
tarif NUMBER(4) NOT NULL
);

desc reclame

INSERT INTO reclame VALUES(1,11,'COCA-COLA', 2,4,200)
INSERT INTO reclame VALUES(2,22,'LENOR', 1,2,150)
INSERT INTO reclame VALUES(2,33,'ARIEL', 1,2,140)
INSERT INTO reclame VALUES(4,44,'ORANGE', 2,3,220)
INSERT INTO reclame VALUES(5,55,'URSUS', 1,1,123)
INSERT INTO reclame VALUES(3,66,'COLGATE', 1,1,125)
INSERT INTO reclame VALUES(6,77,'POIANA', 2,1,100)
INSERT INTO reclame VALUES(5,88,'CIUC', 1,1,130)

SELECT * FROM reclame
ORDER BY idr

b)Sa se afiseze pentru fiecare client reclamele comandate. Clientii vor fi afisati alfabetic.
SELECT a.idc, nume, prenume, adresa, denumire
FROM clienti a, reclame b
WHERE a.idc=b.idc

c)Afisati numele si prenumele clientului care a comandat reclama cu un numar maxim de difuzari.
ORDER BY nume, prenume

SELECT nume, prenume, adresaa)          Construiti baza de date cu tabele corespunzatoare si relatiile reprezentate оn ERD. Populati tabelele cu оnregistrari relevante pentru cerintele urmatoare.
FROM clienti a, reclame b
WHERE nr_difuzari=(SELECT MAX(nr_difuzari) FROM reclame) AND a.idc=b.idc

//Problema 9 Oracle

PROBLEMA 9
a)Construiti baza de date cu tabele corespunzatoare si relatiile reprezentate оn ERD. Populati tabelele cu оnregistrari relevante pentru cerintele urmatoare.

CREATE TABLE masini
(
idm NUMBER(3) PRIMARY KEY,
marca VARCHAR2(50) NOT NULL,
nr_locuri NUMBER(3) NOT NULL,
nr_inmatriculare VARCHAR2(50) NOT NULL
);

DESC masini

INSERT INTO masini VALUES(1, 'RENAULT',18,'SV-09-ABC')
INSERT INTO masini VALUES(2, 'MERCEDES',12,'SV-02-FGH')
INSERT INTO masini VALUES(3, 'VW',8,'SV-03-IJK')
INSERT INTO masini VALUES(4, 'MERCEDES',18,'B-100-ION')
INSERT INTO masini VALUES(5, 'FORD',20,'B-102-LIC')


SELECT * FROM masini
ORDER BY idm

CREATE TABLE curse
(
idc NUMBER(3) PRIMARY KEY,
idm NUMBER(3) REFERENCES masini(idm),
destinatie VARCHAR2(50) NOT NULL,
data_plecarii DATE NOT NULL,
ora_plecarii NUMBER(3) NOT NULL,
data_intoarcerii DATE NOT NULL
);

desc curse

INSERT INTO curse VALUES(11,1,'BUCURE?TI','03-MAR-2013', 10,'04-MAR-2013')
INSERT INTO curse VALUES(22,2,'IA?I','03-FEB-2013', 10,'03-FEB-2013')
INSERT INTO curse VALUES(33,3,'CLUJ','01-APR-2013', 11,'03-APR-2013')
INSERT INTO curse VALUES(44,1,'IA?I','01-MAY-2013', 15,'01-MAY-2013')
INSERT INTO curse VALUES(55,4,'BUCURE?TI','01-MAY-2013', 6,'02-MAY-2013')
INSERT INTO curse VALUES(66,5,'TIMI?OARA','15-APR-2013', 8,'17-APR-2013')
INSERT INTO curse VALUES(77,1,'CLUJ','10-APR-2013', 10,'11-APR-2013')
INSERT INTO curse VALUES(88,5,'CLUJ','20-MAR-2013', 22,'22-MAR-2013')

SELECT idc,idm,destinatie, TO_CHAR(data_plecarii, 'DD.MM.YYYY') AS "DATA PLECARII", ora_plecarii AS "ORA PLECARII", TO_CHAR(data_intoarcerii,'DD.MM.YYYY') AS "DATA INTOARCERII" FROM curse
ORDER BY idc

b)Sa se afiseze numerele de оnmatriculare ale masinilor care efectueaza curse ce dureaza mai mult de o zi.

SELECT DISTINCT nr_inmatriculare
FROM masini a, curse b
WHERE a.idm=b.idm AND data_intoarcerii-data_plecarii>1

c)Cвte persoane ar putea fi transportate cu masinile care pleaca оn cursa pe 1 mai 2013?

SELECT SUM(nr_locuri) AS "NUMAR PERSOANE"
FROM masini a, curse b
WHERE a.idm=b.idm AND data_plecarii='01-MAY-2013'

//Pb 10 Oracle


a)Construiti baza de date cu tabele corespunzatoare si relatiile reprezentate оn ERD. Populati tabelele cu оnregistrari relevante pentru cerintele urmatoare.


CREATE TABLE edituri
(
cod NUMBER(3) PRIMARY KEY,
nume VARCHAR2(30) NOT NULL,
adresa VARCHAR2(200) NOT NULL,
telefon VARCHAR2(10)
)


INSERT INTO edituri VALUES (1, 'NEMIRA', '1 Mai, 40, Bucuresti','0744123567')
INSERT INTO edituri VALUES (2, 'NICULESCU', 'Calea Unirii 23, Bucuresti','0744123566')
INSERT INTO edituri VALUES (3, 'ALL', 'Calea Unirii 67, Bucuresti','0744123565')
INSERT INTO edituri VALUES (4, 'ERC PRESS', 'Florilor 1, Bucuresti','0744123565')
INSERT INTO edituri VALUES (5, 'PETRION', 'Pandurilor 67, Bucuresti','0744123563')


SELECT *
FROM edituri ORDER by cod



CREATE TABLE carti
(
cod NUMBER(3) REFERENCES edituri(cod),
idc NUMBER(3) PRIMARY KEY,
titlu VARCHAR2(50) NOT NULL,
autor VARCHAR2(50) NOT NULL,
pret NUMBER(4) NOT NULL
)

INSERT INTO carti VALUES (1,11, 'ION', 'ION REBREANU',29)
INSERT INTO carti VALUES (2,22, 'MARA', 'IOAN SLAVICI',31)
INSERT INTO carti VALUES (3,33, 'POVE?TI', 'ION CREANGA',19)
INSERT INTO carti VALUES (4,44, 'POEZII', 'MIHAI EMINESCU',15)
INSERT INTO carti VALUES (5,55, 'AMINTIRI DIN COPILARIE', 'ION CREANGA',22)
INSERT INTO carti VALUES (2,66, 'POEZII', 'GEORGE CO?BUC',29)
INSERT INTO carti VALUES (1,77, 'LORELEI', 'IONEL TEODOREANU',20)
INSERT INTO carti VALUES (5,88, 'DUMBRAVA MINUNATA', 'MIHAIL SADOVEANU',18)


SELECT *
FROM carti ORDER by idc

b)Afisati cartile aparute la editura Nemira ordonate alfabetic.

SELECT titlu, autor, pret
FROM edituri a, carti b
WHERE a.cod=b.cod and UPPER(nume)='NEMIRA'
ORDER BY titlu,autor

c)Care este valoarea cartilor scrise de Ion Creanga?

SELECT SUM(pret) AS "VALOARE"
FROM carti
WHERE UPPER(autor)='ION CREANGA'

//Pb 11 Oracle 2013

a)Construiti baza de date cu tabele corespunzatoare si relatiile reprezentate оn ERD. Populati tabelele cu оnregistrari relevante pentru cerintele urmatoare.


CREATE TABLE departamente
(
cod NUMBER(3) PRIMARY KEY,
denumire VARCHAR2(30) NOT NULL
)



INSERT INTO departamente VALUES (1,'CONTABILITATE')
INSERT INTO departamente VALUES (2,'APROVIZIONARE')
INSERT INTO departamente VALUES (3,'DESFACERE')
INSERT INTO departamente VALUES (4,'TRANSPORTURI')
INSERT INTO departamente VALUES (5,'PRODUC?IE')


SELECT *
FROM departamente ORDER by cod



CREATE TABLE angajati
(
cod NUMBER(3) REFERENCES edituri(cod),
idc NUMBER(3) PRIMARY KEY,
titlu VARCHAR2(50) NOT NULL,
autor VARCHAR2(50) NOT NULL,
pret NUMBER(4) NOT NULL
)

CREATE TABLE angajati
(
cnp NUMBER(13) PRIMARY KEY,
nume VARCHAR2(50) NOT NULL,
functia VARCHAR2(20) NOT NULL,
salar NUMBER(4) NOT NULL,
cod_depart NUMBER(3) REFERENCES departamente(cod)
);



INSERT INTO angajati VALUES (2921904555777,'Grig Adelina','COORDONATOR DEPARTAMENT',1800,5)
INSERT INTO angajati VALUES (2890207555777,'Alexa Mara','ECONOMIST',1500,2)
INSERT INTO angajati VALUES (2910410555777,'Darie Ada','COORDONATOR DEPARTAMENT',1800,3)
INSERT INTO angajati VALUES (1892411555777,'Vladoi Cristinel','INGINER',1602,5)
INSERT INTO angajati VALUES (2902512555777,'Pop Ana','INGINER',1710,4)
INSERT INTO angajati VALUES (1911708555777,'Antonescu Paul','ECONOMIST',1403,1)
INSERT INTO angajati VALUES (2901907555777,'Ionescu Ana','COORDONATOR DEPARTAMENT',1800,1)
INSERT INTO angajati VALUES (2890909555777,'Alex Dana','INGINER',1653,5)
INSERT INTO angajati VALUES (1910210555777,'Darie Mihai','COORDONATOR DEPARTAMENT',1800,4)
INSERT INTO angajati VALUES (2882411555777,'Vlad Cristina','INGINER',1689,5)
INSERT INTO angajati VALUES (2922512555777,'Radu Anda','ECONOMIST',1500,3)
INSERT INTO angajati VALUES (1911709555777,'Anton Mihai','COORDONATOR DEPARTAMENT',1800,2)


SELECT cnp, nume AS "NUME ?I PRENUME", functia AS "FUNC?IA", salar, cod_depart
FROM angajati


b)Sa se afiseze lista departamentelor cu sefii acestora(se va afisa denumirea departamentului si numele coordonatorului).


SELECT denumire AS "DEPARTAMENT", nume AS "COORDONATOR DEPARTAMENT"
FROM departamente a, angajati b
WHERE a.cod=b.cod_depart and UPPER(functia)='COORDONATOR DEPARTAMENT'


c)Sa se afiseze numarul de angajati din fiecare departament.

SELECT denumire AS "DEPARTAMENT", COUNT (*) AS "NUMARUL DE ANGAJA?I"
FROM departamente a, angajati b
WHERE a.cod=b.cod_depart
GROUP BY denumire
CREATE TABLE diriginti
(
id_d NUMBER(2) PRIMARY KEY,
nume VARCHAR2(25) NOT NULL,
prenume VARCHAR2(30) NOT NULL,
specialitate VARCHAR(15) NOT NULL
)

DESCRIBE diriginti

SELECT * FROM DIRIGINTI

INSERT INTO diriginti VALUES(1, 'POP', 'INA', 'FIZICA')
INSERT INTO diriginti VALUES(2, 'DASCAL', 'GINA', 'MATEMATICA')
INSERT INTO diriginti VALUES(3, 'MIRON', 'DANA', 'CHIMIE')
INSERT INTO diriginti VALUES(4, 'MIRON', 'DAN', 'INFORMATICA')
INSERT INTO diriginti VALUES(5, 'CARP', 'VLAD', 'ISTORIE')
INSERT INTO diriginti VALUES(6, 'POPA', 'ANA', 'BIOLOGIE')


CREATE TABLE elevi
(
cnp NUMBER(13) PRIMARY KEY,
nume VARCHAR2(50) NOT NULL,
adresa VARCHAR2(50) NOT NULL,
media NUMBER(4,2) NOT NULL,
id_d NUMBER(2) REFERENCES diriginti(id_d)
)

INSERT INTO elevi VALUES(2961904555777, 'Grig Adelina', '1 Mai, 40, Bucuresti', 9.40, 5)
INSERT INTO elevi VALUES(2950207555777, 'Alexa Mara',           'Calea Unirii 23, Bucuresti',          10.00,    2)
INSERT INTO elevi VALUES(2960410555777, 'Darie Ada',               'Calea Unirii 67, Bucuresti',          9.00,      3)
INSERT INTO elevi VALUES(1972411555777, 'Vladoi Cristinel', 'Florilor 1, Bucuresti',        8.80,      6)
INSERT INTO elevi VALUES(2962512555777, 'Pop Ana', 'Pandurilor 67, Bucuresti',            9.50,      4)
INSERT INTO elevi VALUES(1971708555777, 'Antonescu Paul', 'Calea Unirii 76, Bucuresti',           10.00,    1)
INSERT INTO elevi VALUES(2981907555777, 'Ionescu Ana', 'Trandafirilor 1, Bucuresti',   8.80,      1)
INSERT INTO elevi VALUES(2980909555777, 'Alex Dana', 'P. Rares 67, Bucuresti',             9.00,      5)
INSERT INTO elevi VALUES(1990210555777, 'Darie Mihai', '1 Mai, 46, Bucuresti',               10.00,    4)
INSERT INTO elevi VALUES(2972411555777, 'Vlad Cristina','Calea Unirii 123, Bucuresti', 8.90,      6)
INSERT INTO elevi VALUES(2962912555777, 'Radu Anda',            '1 Mai, 489, Bucuresti',  9.22,      3)
INSERT INTO elevi VALUES(1951709555777, 'Anton Mihai', 'Calea Unirii 237, Bucuresti', 9.10,     2)

SELECT *
FROM elevi

b)           Sa se. afiseze numele dirigintilor a caror elevi au media 10. Se va afisa numele elevului, numele dirigintelui si specialitatea dirigintelui.

SELECT a.nume AS "Numele elevului", b.nume AS "Nume diriginte", prenume AS "Prenume diriginte", specialitate
FROM elevi a, diriginti b
WHERE media='10.00' AND a.id_d=b.id_d

c)            Sa se afiseze media generala a fiecareiclase. Se va afisa numele dirigintelui si media generala a clasei.

SELECT a.id_d, b.nume, b.prenume, a."Media Clasei"
FROM(SELECT id_d, AVG(media) AS "Media Clasei" FROM elevi GROUP BY id_d) a, diriginti b
WHERE a.id_d=b.id_d
ORDER BY id_d

Pb 13

a)            Construiti baza de date cu tabele corespunzatoare si relatiile reprezentate оn ERD. Populati tabelele cu оnregistrari relevante pentru cerintele urmatoare.


create table cladiri
(
cod_cladire number(2) primary key,
adresa varchar2(50) not null,
nr_nivele number(2) not null
)


insert into cladiri values(1,'1 Mai,40,Bucuresti',1)
insert into cladiri values(2,'Calea Uniri 23,Bucuresti',4)
insert into cladiri values(3,'Calea Unirii 67,Bucuresti',2)
insert into cladiri values(4,'Florilor 1,Bucuresti',3)
insert into cladiri values(5,'Pandurilor 67, Bucuresti',2)

SELECT * FROM cladiri
ORDER BY cod_cladire

create table apartamente
(
cod_cladire number(1) references cladiri(cod_cladire) not null,
cod_apartamente number(2) primary key,
nr_camere number(2)not null,
etaj number(2) not null,
obs varchar2(50)
)


insert into apartamente values(2,1,2,1,'Are centrala proprie')
insert into apartamente values(1,12,1,2,' ')
insert into apartamente values(1,11,3,1,' ')
insert into apartamente values(2,2,3,2,'Reanovat')
insert into apartamente values(3,10,2,1,'Are centrala proprie')
insert into apartamente values(4,5,2,3,' ')
insert into apartamente values(5,6,4,1,'Renovat')
insert into apartamente values(3,3,1,1,' ')

select * from apartamente

b)           Afisati apartamentele care se afla оn cladiri care au mai mult de 2 nivele.


select a.adresa, b.cod_apartamente, b.nr_camere, b.etaj, b.obs
from cladiri a, apartamente b
where nr_nivele>'2'  AND  a.cod_cladire=b.cod_cladire

c)            Sa se afiseze la ce adresa se gaseste apartamentul care are cele mai multe camere.

select adresa
from cladiri a,apartamente b
where nr_camere=(select max(nr_camere)from apartamente) and a.cod_cladire=b.cod_cladire

Problema 14
a)            Construiti baza de date cu tabele corespunzatoare si relatiile reprezentate оn ERD. Populati tabelele cu оnregistrari relevante pentru cerintele urmatoare.

CREATE TABLE cluburi
(
cod_club NUMBER(2) PRIMARY KEY,
denumire VARCHAR2(30) NOT NULL,
localitate VARCHAR2(20) NOT NULL
)

desc cluburi


INSERT INTO cluburi VALUES(1,'Club Zenit','Cluj')
INSERT INTO cluburi VALUES(2,'Club DINAMO','Bucuresti')
INSERT INTO cluburi VALUES(3,'Club Steaua','Bacau')
INSERT INTO cluburi VALUES(4,'Club Rapid','Bucuresti')
INSERT INTO cluburi VALUES(5,'Club Piticot','Suceava')
INSERT INTO cluburi VALUES(6,'Club Ardealul','Cluj')

SELECT * FROM cluburi
ORDER BY cod_club

CREATE TABLE sportivi
(
cod_club NUMBER(2) REFERENCES cluburi(cod_club),
cods NUMBER(3) Primary Key,
nume VARCHAR2(30) NOT NULL,
prenume VARCHAR2(30) NOT NULL,
varsta NUMBER(3) NOT NULL
)

INSERT INTO sportivi VALUES (1, 11, 'Pop', 'Ina', 15)
INSERT INTO sportivi VALUES (2,22,'Dascal','Gina',20)
INSERT INTO sportivi VALUES (2,33,'Miron','Dana',21)
INSERT INTO sportivi VALUES (4,44,'Miron','Dan',19)
INSERT INTO sportivi VALUES (5,55,'Carp','Vlad',17)
INSERT INTO sportivi VALUES (3,66,'Popa','Ana',21)
INSERT INTO sportivi VALUES (6,77, 'Avram', 'Mona', 17)
INSERT INTO sportivi VALUES (5,88,'Enache','Cristi',18)

SELECT * FROM sportivi
ORDER BY cods

b)           Sa se afiseze cluburile alfabetic ?i media de vвrsta a sportivilor fiecarui club.

SELECT denumire, a."media de varsta" FROM
(SELECT cod_club, AVG(varsta) AS "media de varsta" FROM sportivi GROUP BY cod_club) a, cluburi b
WHERE a.cod_club=b.cod_club
ORDER BY denumire

c)            Sa se afiseze alfabetic cei(cel) mai batrвni sportivi оmpreuna cu cluburile lor.

SELECT nume, prenume,varsta,denumire
FROM  sportivi b, cluburi a
WHERE varsta=(SELECT MAX(VARSTA) FROM sportivi) AND a.cod_club=b.cod_club
ORDER by nume asc,prenume asc;

Problema 15

a)            Construiti baza de date cu tabele corespunzatoare si relatiile reprezentate оn ERD. Populati tabelele cu оnregistrari relevante pentru cerintele urmatoare.

CREATE TABLE apartamente15
(
coda NUMBER(2) PRIMARY KEY,
nr_camere NUMBER(2) NOT NULL,
nr_ap NUMBER(2) NOT NULL,
suma_restante NUMBER(4) NOT NULL
)


INSERT INTO apartamente15 VALUES(1,              2,            20,          0)
INSERT INTO apartamente15 VALUES(2,              3,            21,          75)
INSERT INTO apartamente15 VALUES(3,              4,            22,          100)
INSERT INTO apartamente15 VALUES(4,              3,            23,          0)
INSERT INTO apartamente15 VALUES(5,              4,            24,          200)
INSERT INTO apartamente15 VALUES(6,              2,            25,          50)

select * from apartamente15

CREATE TABLE locatari
(
codl NUMBER(3) PRIMARY KEY not null,
coda NUMBER(2) REFERENCES apartamente15(coda) not null,
nume VARCHAR2(20) not null,
prenume VARCHAR2(30) not null,
loc_munca VARCHAR2(50)
)


INSERT INTO locatari VALUES(111,          1,            'POP',    'INA',     'SC ASTAR')
INSERT INTO locatari VALUES(112,          2,            'DASCAL',            'GINA', 'GPN2')
INSERT INTO locatari VALUES(113,          4,            'MIRON',             'DANA',                'GPN2')
INSERT INTO locatari VALUES(114,          4,            'MIRON',             'DAN',   'SC EMPOS')
INSERT INTO locatari VALUES(115,          3,            'CARP', 'VLAD', 'SC GEN 1')
INSERT INTO locatari VALUES(116,          3,            'CARP', 'ANA',   'SC GEN 1')
INSERT INTO locatari VALUES(117,          5,            'AVRAM',            'MONA',              'GPN2')
INSERT INTO locatari VALUES(118,          6,            'ENACHE',           'CRISTI',               'AUTOSERVICE')
INSERT INTO locatari VALUES(119,          2,            'DASCAL',            'MIHAI',               'ROMPETROL')
INSERT INTO locatari VALUES(120,          1,            'POP',    'VASILE',              'SC ASTAR')

SELECT * FROM locatari
ORDER BY codl

b)           Care este cea mai mare datorie si care sunt persoanele ce locuiesc оn acest/aceste apartamente

SELECT b.nume, b.prenume, a.suma_restante
FROM apartamente15 a, locatari b
WHERE a.coda=b.coda AND suma_restante=(select max(suma_restante) from apartamente15)

c)            Sa se afiseze alfabetic locatarii si numarul apartamentului lor, care au acelasi loc de munca cu cel citit de la tastatura.

SELECT b.nume, b.prenume, a.nr_ap
FROM locatari b, apartamente15 a
WHERE loc_munca=:loc_munca AND a.coda=b.coda
ORDER BY nume asc, prenume asc
INSERT INTO locatari VALUES(119,          2,            'DASCAL',            'MIHAI',               'ROMPETROL')
INSERT INTO locatari VALUES(120,          1,            'POP',    'VASILE',              'SC ASTAR')

SELECT * FROM locatari
ORDER BY codl

b)           Care este cea mai mare datorie si care sunt persoanele ce locuiesc оn acest/aceste apartamente

SELECT b.nume, b.prenume, a.suma_restante
FROM apartamente15 a, locatari b
WHERE a.coda=b.coda AND suma_restante=(select max(suma_restante) from apartamente15)

c)            Sa se afiseze alfabetic locatarii si numarul apartamentului lor, care au acelasi loc de munca cu cel citit de la tastatura.

SELECT b.nume, b.prenume, a.nr_ap
FROM locatari b, apartamente15 a
WHERE loc_munca=:loc_munca AND a.coda=b.coda

ORDER BY nume asc, prenume asc