This is an old revision of the document!
Cererile de interogare SQL folosesc în exculsivitate comanda DML SELECT. Această comandă este utilizată atât pentru interogarea obiectelor create de utilizator cât și a obiectelor de la nivelul sistemului de gestiune.
Sintaxa ceririi SELECT:
SELECT [DISTINCT | ALL] [schema.TABLE.]expression [[AS] expression_alias] FROM [schema.]TABLE[@dblink] [table_alias] [WHERE conditions] [[START WITH conditions] CONNECT BY [NOCYCLE] conditions]] [{UNION [ALL]|INTERSECT|MINUS} SELECT command] [[GROUP BY expressions] [HAVING conditions]] [ORDER BY expressions|positions [ASC|DESC]] [FOR UPDATE OF schema.TABLE.COLUMN [NOWAIT]]
Unde:
Ex. 1. Să se creeze o copie a tabelului DEPT care să se numească departamente cu următoarele coloane: id_dep number(2), den_dep varchar2(14), locatie varchar2(13).
CREATE TABLE departamente AS SELECT deptno id_dep, name den_dep, loc locatie FROM dept;
Ex. 2. Să se creeze o copie a tabelului EMP care să se numească angajati.
CREATE TABLE angajati AS SELECT empno id_ang, ename nume, job functie, mgr id_sef, hiredate data_ang, sal salariu, comm comision, deptno id_dep FROM emp;
Ex. 3. Să se selecteze toate înregistrările și toate coloanele din tabela angajați
SELECT * FROM angajati;
Ex. 4. Să se selecteze id-ul și numele departamentului din tabela departamente.
SELECT id_dep, den_dep FROM departamente;
Ex. 5. Să se selecteze id-ul, numele, funcția și data angajării pentru toți angajații din firmă, ordonați descrescător în funcție de id. Concatenați id-ul cu numele.
SELECT id_ang||'-'||nume angajat, functie, data_ang FROM angajati ORDER BY id_ang DESC;
Ex. 6. Să se selecteze id-ul, numele, funcția și venitul lunar pentru toți angajații din firmă. Să se adauge la select o coloană goală care să se numească semnătura. Concatenați id-ul cu numele. Ordonați după departament.
SELECT id_ang||'-'||nume angajat, functie, salariu+nvl(comision,0) AS "venit lunar", ' ' AS semnatura FROM angajati ORDER BY id_dep;
Ex. 7. Să se selecteze numele și funcția angajaților.
SELECT nume, 'cu functie', functie FROM angajati;
Ex. 8. Să se facă o listă cu numele departamentului și codul acestuia. Ordonați după numele departamentului.
SELECT den_dep||' are codul '||id_dep "Lista Departamente" FROM departamente ORDER BY den_dep ASC;
Clauza WHERE este folosită pentru a compara valorile unei coloane, valori literale, expresii aritmetice sau funcții și poate avea patru tipuri de parametri:
AND returnează adevărat dacă toate condițiile sunt adevărate.
OR este adevărat dacă cel puțin una dintre condiții este adevărată.
Se pot combina operatorii AND și OR în aceeași expresie logică în clauza WHERE, iar în acest caz operatorii AND sunt evaluați primii și apoi operatorii OR (precedența operatorului AND este mai mare decât cea a operatorului OR).
Dacă operatorii au precedență egală atunci ei se evaluează de la stânga la dreapta.
Operatorii de comparație pot fi de două feluri: operatori logici și operatori SQL
Operator Logic | Semnificație |
---|---|
= | Egal |
> | Mai mare decât |
>= | Mai mare sau egal decât |
< | Mai mic decât |
<= | Mai mic sau egal decât |
Operator SQL | Semnificație |
---|---|
val BETWEEN val1 AND val2 | Verifică daca o valoare se află între două valori date (inclusiv). Echivalent cu val >= val1 AND val <= val2 |
IN (list) | Compară dacă valoarea se află în lista de valori list. val IN (a,b,c) este echivalent cu val = a OR val = b OR val = c |
LIKE string | Compară cu un model de tip caracter/șir de caractere |
IS NULL | Verifică dacă o valoare este NULL |
Operatorii de negație pot fi de două feluri: operatori logici și operatori SQL.
Operator Logic | Semnificație |
---|---|
!= | Diferit de (Unix, Windows) |
^= | Diferit de (IBM) |
<> | Diferit de (Toate OS) |
NOT val { = | > | >= | < | <= } | Neagă operatorul de comparație |
Operator SQL | Semnificație |
---|---|
NOT BETWEEN val1 AND val2 | Verifică daca o valoare nu se află între două valori date (inclusiv) |
NOT IN (list) | Compară dacă valoarea nu se află în lista de valori list. |
NOT LIKE string | Compară cu un model de tip caracter/șir de caractere |
IS NOT NULL | Verifică dacă o valoare nu este NULL |
Precedența operatorilor logici este următoarea:
=,<,<=,>,>=,<>,!=,^=, BETWEEN, IN, LIKE, IS NULL
)NOT
(pentru inversarea rezultatului unei expresii logice)AND
OR
Ex. 9. Să se listeze toți angajații din departamentul 10.
SELECT a.id_ang ecuson, a.nume, a.data_ang AS "Data Angajarii", a.salariu FROM angajati a WHERE id_dep = 10;
Ex. 10. Să se selecteze toți angajații care au funcția MANAGER. Ordonați după id-ul departamentului.
SELECT id_dep "Nr. deptartament", nume, functie, salariu, data_ang AS "Data Angajarii" FROM angajati WHERE LOWER(functie) = 'manager' ORDER BY id_dep;
Ex. 11. Selectați toate persoanele care s-au angajat intr-o anumită perioadă.
SELECT id_dep departament, functie, nume, data_ang AS "Data Angajarii" FROM angajati WHERE data_ang BETWEEN '1-MAY-1981' AND '31-DEC-1981' ORDER BY 1, 2 DESC;
SELECT id_dep departament, functie, nume, data_ang AS "Data Angajarii" FROM angajati WHERE data_ang >= '1-MAY-1981' AND data_ang <= '31-DEC-1981' ORDER BY 1, 2 DESC;
Ex. 12. Să se listeze id-ul, numele, funcția, venitul lunar pentru angajații care au următoarele id-uri: 7499,7902, 7876.
SELECT id_ang AS ecuson, nume, functie, salariu + nvl(comision,0) "Venit lunar" FROM angajati WHERE id_ang IN (7499,7902,7876) ORDER BY nume;
SELECT id_ang AS ecuson, nume, functie, salariu + nvl(comision,0) "Venit lunar" FROM angajati WHERE id_ang = 7499 OR id_ang = 7902 OR id_ang = 7876 ORDER BY nume;
LIKE
poate fi folosit cu simbolurile _
și %
pentru a selecta liniile care se potrivesc cu un caracter sau un subșir de caractere.
Simbol | Semnificație |
---|---|
_ | Înlocuit într-un șir, poate să fie orice caracter |
% | Orice secvență de mai multe caractere |
Ex. 13. Să se selecteze toate persoanele care au fost angajate în anul 1980.
SELECT id_ang AS ecuson, nume, functie, data_ang AS "Data Angajarii" FROM angajati WHERE data_ang LIKE '%80';
Ex. 14. Să se selecteze toate persoanele al căror nume începe cu litera F și numele funcției are 7 caractere.
SELECT id_ang AS ecuson, nume, functie, data_ang AS "Data Angajarii" FROM angajati WHERE nume LIKE 'F%' AND functie LIKE '_______';
NULL
, atunci operatorul de comparație trebuie să fie IS [NOT] NULL
.
Dacă se folosește orice alt operator rezultatul va fi întotdeauna FALSE. Dacă în loc de IS [NOT] NULL
se utilizau expresiile comision = NULL
sau comision <> NULL
rezultatul ar fi fost FALSE.
Ex. 15. Să se listeze angajații din departamentul 20 care nu au primit comision.
SELECT id_ang AS ecuson, nume, functie, salariu, comision FROM angajati WHERE (comision = 0 OR comision IS NULL) AND id_dep = 20 ORDER BY nume;
Atenție când folosiți operatorii de comparație și negație pe șiruri de caractere.
lower(parameter)
este o funcție de sistem care transformă toate caracterele din șirul de caractere parameter în litere mici.
Funcția inversă este upper(parameter)
care transformă toate caracterele din parameter în litere mari.
Parametrul poate să fie un șir de caractere, o expresie(funcție) care întoarce un șir de caractere sau un nume de coloană în care se țin valori de tip șir de caractere.
Ex. 16. Să se listeze angajații care au primit comision și au funcția SALESMAN.
SELECT id_ang AS ecuson, nume, functie, salariu, comision FROM angajati WHERE (comision != 0 AND comision IS NOT NULL) AND functie = UPPER('salesman') ORDER BY nume;
Ex. 17. Să se selecteze toți angajații care au funcția MANAGER și salariul peste 1500, și toți angajații care au funcția ANALYST.
SELECT id_ang AS ecuson, nume, functie, salariu, id_dep departament FROM angajati WHERE salariu > 1500 AND LOWER(functie) = 'manager' OR UPPER(functie) = 'ANALYST' ORDER BY functie, nume DESC;