Sunteți pe pagina 1din 4

Sa se afiseze: -data introducerii produselor; -nr.

luni intre data curenta si data introducerii; -urmatoarea zi de vineri 13 dupa data introducerii; -ultima zi din luna din care face parte data introducerii; -data corespunzatoare dupa 2 luni de la data introducerii produselor.

SELECT data_introducerii, ROUND MONTHS_BETWEEN(sysdate,data_introducerii) nr_luni, NEXT_DAY(data_introducerii,'FRIDAY')urm_vineri, LAST_DAY(data_introducerii) ultima_zi, ADD_MONTHS (data_introducerii,2)"data+2l" FROM produse;

MONTHS_BETWEEN(DATA1,DATA2)->nr (ROUND->mai putine zecimale) NEXT_DAY(data,zi_saptamana)->data LAST_DAY(data)->data ADD_MONTHS(data,nr)->data

1.Sa se afiseze toate produsele cumparate iarna. SELECT denumire, data_cumpararii FROM produse p , arhiva a WHERE p.cod_produs=a.cod_produs AND EXTRACT(month FROM data_cumpararii) IN (1,2,12);

4.Functii de conversie: TO_DATE(sir,format)->insert TO_CHAR(data,format)->select TO_NUMBER(sir[precizia])->nr

2.Sa se afiseze data introducerii produselor in formatul YYYY.DD-MM

SELECT TO_CHAR(data_introducerii,'YYYY.DD-MM') data_formata FROM produse;

5.Functia DECODE si clauza CASE DECODE(camp, val_de_comp1, val_de_afisat1, val_de_afisat2,....,val_default)

Functia compara valoarea campului cu valoarea de comparat 1. Daca gaseste egalitate returneaza valoare de afisat 1, daca nu, compara cu valoare de cimparat 2. Daca nu a gasit nicio egalitate returneaza NULL sau valoarea default daca aceasta exista.

CASE camp WHEN val_de_comp1 THEN val_de_afis1 WHEN val_de_comp2 THEN val_de_afis2 ..... WHEN val_de_compn THEN val_de_afisn [ELSE val_default] END

Cele 2 variante de mai sus sunt valabile doar pt conditia de egalitate. Pt oricare alte conditii (eventual combinate) se foloseste urmatoarea varianta de CASE.

CASE WHEN camp cond1 val_de_comp1 THEN val_de_afis1 WHEN camp cond2 val_de_comp2 THEN val_de_afis2 ..... WHEN camp condn val_de_compn THEN val_de_afisn [ELSE val_default] END

3.Sa se afle tara de provenienta a clientilor in functie de email-ul acestora. Astfel daca domeniul este .ro->Romania, .uk->Anglia, .fr->franta, pentru altele restul lumii

Varianta 1: SELECT email, DECODE (upper(substr(email,length(email)-2,3)), '.RO', 'Romania', '.UK','Anglia','.FR','Franta','Restul lumii') tara FROM Clienti;

Varianta 2: SELECT email, CASE WHEN UPPER(email) LIKE '%.RO' THEN 'Romania' WHEN UPPER(email) LIKE '%UK' THEN 'Anglia' WHEN UPPER(email) LIKE '%FR' THEN 'Franta' ELSE 'Restul lumii' END tara FROM clienti;

Varianta 3: SELECT email, CASE UPPER(substr(email,length(email)-2,3))WHEN 'UK' THEN 'Anglia' WHEN 'FR' THEN 'Franta' WHEN 'RO' THEN 'Romania' ELSE 'Restul lumii' END tara FROM clienti;

4. Sa se stabileasca ce fel de produse are firma in gestiune in functie de denumirea lor. 'pix' -> 'p.ieftin' 'stilou' -> 'p.mediu' 'tus' ->'p.scump'

SELECT DECODE (LOWER(denumire),'pix','p.ieftin','fanta','p.mediu','cola','p.mediu','telefon','p.scump') "tip produs", denumire FROM produse;

Utilizarea comenzii SELECT impreuna cu alte comenzi SQL: 1.Realizarea subcecerilor/Cereri imbricate (SELECT+SELECT)

Ex: Sa se afiseze clientii care au acelsi nume cu clientul cu CNP-ul "1920516796756". SELECT * FROM clienti WHERE nume=(SELECT nume FROM clienti WHERE cnp='1920516796756');

SELECT * FROM clienti WHERE nume=(SELECT nume FROM clienti );->EROARE Obs: Subcererea trebuie sa returneze o singura inregistrare pentru operatori de tip single row(=.<,>...). Poate returna mai multe inregistrari daca operatorii sunt IN, ANY,ALL.

Ex: Sa se afiseze clientii al caror prenume se gaseste in lista de nume al clientilor. SELECT * FROM clienti WHERE prenume IN (SELECT nume FROM clienti);

Obs: Tipul de date obtinute din subcereretrebuie sa coincida cu tipul de date din interogarea initiala pe care se face comparatia

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