Comenzi de baza SQL

download Comenzi de baza SQL

of 4

description

Comenzi de baza SQL

Transcript of Comenzi de baza SQL

***'Ordinea operatiilor' 1 Operatorii aritmetici2 Operatorul de concatenare3 Conditiile de comparare4 IS[NOT] NULL, LIKE, [NOT] IN5 [NOT] BETWEEN6 NOT conditia logica7 AND conditia logica8 OR conditia logica ***Functii pentru manipularea sirurilor:1 SUBSTR('HelloWorld', 1, 5) = Hello2 INSTR ('HelloWorld', 'W') = 63 LPAD (salary, 10, '*') = *****240004 RPAD (salary, 10, '*') = 24000********Functii numerice1 MOD(1600, 300) = 100***Default Date Display DD-MON-RR***Functii generale - orice tip de data, permitand si utilizarea valorii NULL1 NVL(expr1, expr2)- If expr1 is null, then NVL returns expr2.- If expr1 is not null, then NVL returns expr1.2 NVL2(expr1, expr2, expr3) - If expr1 is null, then NVL2 returns expr3.- If expr1 is not null, then NVL2 returns expr2.3 NULLIF(expr1, expr2)4 COALESCE(expr1, expr2, ..., exprn)- Returns the first non-null expr in the expression list.***JOIN- NONECHIJOIN - identic cu ECHIJOIN dar cu orice alta operatie in afara de '='- SELF JOIN - SELECT T1.COLX, T2.COLY FROM TABEL T1, TABEL T2 WHERE T1.COL1=T2.COL2***Functii de grup- STDDEV([DISTINCT|ALL] x) - standard deviation of n, ignorand valorile nule- VARIANCE ([DISTINCT|ALL] x) - variatia lui n, ignorand valorile nule***Nu se pot folosi aliasuri in clauza GROUP BY***Operatori pentru subselecturi: -single row -multi-row IN(egal cu fiecare valoare din lista), ANY(compara valoarea cu fiecare valoare returnata de subselect)***Subselecturile le putem intalni in clauzele: SELECT, WHERE, HAVING si FROM***MERGE :MERGE INTO table [AS alias]USING {table sau view sau subquery} [AS alias]ON (join_condition)WHEN MATCHED THENUPDATE SET col1 = val1WHEN NOT MATCHED THENINSERT (col_list) VALUES (val_list);***clauza INTO - specifica tabela unde se vor face adaugiri sau modificari***clauza USING - sursa de informatii***clauza ON - conditia prin care MERGE stie ce operatie sa faca adaugare sau modificareWHEN (NOT) MATCHED THEN - indica serverului cum sa trateze conditia de join***Reguli de denumire pt obiectele bazei de date (inclusiv coloane)**Trebuie sa inceapa cu o litera**Sa aiba lungimea cuprinsa intre 1 si 30 de caractere**Poate contine doar A-Z, a-z, 0-9, _, $ si #**Sa nu fie un cuvant rezervat de serverul Oracle**Sa nu existe nume duplicate pentru aceeasi schema (acelasi OWNER)***ALTER:- SET UNUSED[COLUMN] - marcheaza coloana ca nefolosita- DROP UNUSED COLUMNS - sterge coloanele nefolosite*** RENAME x TO y - modifica numele lui x in y*** TRUNCATE TABLE t - sterge tabela t si in acelasi timp elibereaza spatiul de stocare alocat tabelei*** COMMENT ON{TABLE sau COLUMN}{tabela sau tabela.coloana} IS text - adauga un comentariu ***VIEW- FORCE[NOFORCE]--creeaza view chiar daca tabela nu exista sau sintaxa din select este incorecta - WITH CHECK OPTION -- verifica faptul ca doar randurile ce sunt accesibile viewului sa poata fi adaugate sau modificate- WITH READ ONLY -- ne asigura ca nu putem face operatii DML ***Sequence- [INCREMENT BY n] -- implicit 1- [START WITH n] -- implicit 1, NU poate fi alterat- [{MAXVALUE n sau NOMAXVALUE}] -- implicit 10^27 (asc), -1 (desc)- [{MINVALUE n sau NOMINVALUE}] -- implicit 1 (asc), -10^26 (desc)- [{CYCLE sau NOCYCLE}]- [{CACHE n sau NOCACHE}]; -- n = 20***ROLLUP - Calculeaza subtotaluri de la cele mai mici detalii la totaluri generale - Este util la creare de rapoarte - SELECT FROM GROUP BY ROLLUP(column_list); - Creaza subtotaluri la nivel n+1 unde n este numarul de coloane grupate***CUBE- Calculeaza toate combinatiile posibile de subtotaluri- Folosit la generarea rapoartelor- SELECT FROM GROUP BY CUBE(column_list);- Creaza 2n combinatii de subtotaluri unde n este numarul de coloane grupate****** O grupare de 4 coloane cu CUBE, are o reducere de 93.75% la accesarea tabelei, ROLLUP-ul are 80%)****** Se pot folosi rollup-uri/cube-uri partial in GROUP BY: GROUP BY exp1, CUBE(exp2, exp3, ....)****** ROLLUP/CUBE pot fi folosite cu toate functiile colective (MAX, MIN, AVG, etc.)****** HAVING se aplica la toate datele returnate****** NULL-urile sunt generate pentru dimensionare la nivel de subtotal***GROUPING()- Util pentru a distinge intre NULL-uri din data si NULL-uri generate de extensiile ROLLUP/CUBE- Returneaza:- 1 pentru extensiile - generate NULL , 0 pentru datele cu valori NULL- Poate fi folosit cu DECODE pentru interpretari customizate- SELECT .. GROUPING(column name) .. GROUP BY ...- SELECT .. DECODE(GROUPING(col), 1, Sub, col)) ...***FUNCTII ANALITICE: - Ranking Functions- Windowing Functions- Reporting Functions- Lag/Lead Functions- Statistics Functions- Functiile se apeleaza dupa toate join-urile, dupa clauzele WHERE, GROUP BY si HAVING , dar inaintea clauzei ORDER BY - Syntax: () OVER ( [PARTITION BY [, ]] ORDER BY [ASC|DESC] [NULLS FIRST|NULLS LAST])- PARTITION BY [, ] aceasta clauza divide rezultatul query-ului in grupuri in interiorul carora opereaza functiile analitice- Daca clauza PARTITION BY lipseste , functia opereaza pe intreg setul de date - poate fi orice expresie valida care se refera la coloane- ORDER BY [ASC|DESC] [NULLS FIRST|NULLS LAST]- Cu ORDER BY, setul de randuri folosite este randul curent si toate randurile precedente din partitie (o fereastra in crestere)- Fara ORDER BY, toate randurile din partitie vor fi folosite- Clauza ORDER BY poate fi folosita sa rezolve problema valorilor care se repeta- NULL-urile sunt considerate a fi mai mari decat orice alta valoare.**** Ranking Functions- Calculeaza rangul unei inregistrari in concordanta cu celelalte inregistrari din baza de date pe baza unui set de masuratori - RANK() and DENSE_RANK()- permit ierarhizarea item-urilor intr-un set de date sau sub-grup.- Functia RANK() lasa spatii in secventa de ierarhizare sequence cand se intalnesc valori egale in ierarhie.- Functia DENSE_RANK() nu lasa spatii in secventa de ierarhizare sequence cand se intalnesc valori egale in ierarhie.- CUME_DIST() and PERCENT_RANK()- CUME_DIST() calculeaza pozitia unei valori specifice relativ la setul de valori- CD = (# valoarea rangului)/(numarul total # de valori)- Return values are between 0 and 1- PERCENT_RANK() intoarce procentul rangului unei valori relativ la un grup de valori - PR = (rangul unui rand in partitie - 1)/(# numarul randurilor intr-o grupare - 1)- NTILE(n)- Divide setul de date intr-un numar specific de bucati- Ia ca argument numarul de bucati - ROW_NUMBER()- asigneaza un numar unic fiecarui rand intr-o partitie- Numarul randului incepe cu 1 si se incrementeaza secvential in cadrul fiecarei partitii - E mai bun decat RANK() , DENSE_RANK() pentru queri-urile top-N*Inregistrarilor cu acelasi rang nu li se vor atribui (in mod automat ) acelasi numar de rang*** Windowing Functions- Folosite la calculul de medii , totaluri- Aduce o valoare pentru fiecare rand returnat pentru un set de date , valoare care depinde de celelalte inregistrari din fereastra corepunzatoare- Windowing functions includ sume si medii partiale si totale, min/max , functii statistice , prima si ultima valoare din inregistrarile selectate- Syntax:* SUM|AVG|MAX|MIN|COUNT|FIRST_VALUE|LAST_VALUE} OVER( PARTITION BY [, ]ORDER BY [ASC|DESC] [NULLS FIRST|NULLS LAST]ROWS | RANGE{ UNBOUNDED PRECEDING | PRECEDING} |BETWEEN{UNBOUNDED PRECEDING | PRECEDING}AND {CURRENT ROW | FOLLOWING} } )