CATEGORII DOCUMENTE |
Vom prezenta foarte pe scurt principalele elemente ce intra in componenta unei comenzi SQL.
Toate obiectele dintr-o baza de date, tabele, coloane, vizualizari, indexi, sinonime, etc, au un nume.
Numele poate fi orice sir de maxim de litere, cifre si caracterele speciale: caracterul de subliniere (underscore ), diez ( ), si dolar ( ), primul caracter fiind obligatoriu o litera. Evident numele unui obiect din baza de date trebuie sa fie unic.
Ca in orice limbaj, si in SQL exista o lista de cuvinte rezervate. Acestea sunt cuvinte pe care nu le puteti folosi cu alt scop, ca de exemplu pentru denumirea tabelelor voastre.
O constanta sau literal este o valoare fixa ce nu poate fi modificata. Exista:
- constante numerice, de exemplu etc. Se observa ca daca un numar real are partea intreaga egala cu zero, ea nu mai trebuie precizata.
- constante alfanumerice (sau sir de caractere). Constantele sir de caractere sunt scrise intre apostrofuri si sunt case-sensitive. Exemple: 'abc' 'Numele'
Variabilele sunt date care pot avea in timp valori diferite. O variabila are intotdeauna un nume pentru a putea fi referita.
SQL suporta doua tipuri de variabile:
variabilele asociate numelor coloanelor din tabele
variabile sistem.
O expresie este formata din variabile, constante, operatori si functii. Functiile vor face obiectul a doua dintre urmatoarele capitole ale manualului. In continuare ne vom ocupa de operatorii ce pot fi folositi in expresii.
Operatori aritmetici
Operatorii aritmetici permisi in SQL sunt cei patru operatori din matematica: adunare , scadere , inmultire , impartire . Ordinea de efectuare a operatiilor aritmetice este cea din matematica (mai intai inmultirea si impartirea si apoi adunarea si scaderea).
Operatori alfanumerici
Exista un singur operator alfanumeric si anume operatorul de concatenare a doua siruri (doua bare verticale fara spatii intre ele).
De exemplu expresia 'abc'||'xyz' are valoarea 'abcxyz'
Operatori de comparatie
Pe langa operatorii obisnuiti de comparatie: < > <= >= <> sau (pentru diferit), , SQL mai implementeaza urmatorii operatori speciali:
LIKE - despre care vom discuta putin mai tarziu in acest capitol
BETWEEN - testeaza daca o valoare se gaseste intr-un interval definit de doua valori. Astfel expresia
x BETWEEN a AND b
este echivalenta cu expresia
(x>=a) AND (x<=b)
IN - testeaza daca o valoare apartine unei multimi de valori specificate. De exemplu expresia:
x IN (a,b,c)
este echivalenta cu
(x=a) OR (x=b) OR (x=c)
IS NULL si IS NOT NULL - se folosesc pentru a testa daca o expresie are valoarea NULL sau nu. Comparatia cu NULL nu se poate face folosind operatorii obisnuiti si respectiv <>
Operatori logici
In ordinea prioritatii lor, acestia sunt:
NOT - negatia logica
AND - si logic, expresia a AND b este adevarata daca si numai daca ambii operanzi a si b au valoarea adevarat.
OR - sau logic, expresia a OR b este adevarata daca si numai daca cel putin unul dintre operanzii a si b au valoarea adevarat.
Comanda SELECT este utilizata pentru a extrage date din baza de date. Setul de date returnate prin intermediul unei comenzi SELECT este compusa, ca si tabelele bazei de date, din linii si coloane, si vor putea fi simplu afisate, sau vom putea popula o tabela cu datele returnate de catre comanda SELECT, asa cum vom vedea intr-un capitol urmator.
Cu ajutorul comenzii SELECT putem realiza urmatoarele tipuri de operatii:
selectia - consta in filtrarea liniilor ce vor fi afisate. Vom folosi clauza WHERE pentru a defini criteriul sau criteriile pe care trebuie sa le indeplineasca o linie pentru a fi returnata de catre comanda SELECT
proiectia - consta in alegerea doar a anumitor coloane pentru a fi afisate.
join - consta in preluarea datelor din doua sau mai multe tabele, 'legate' conform unor reguli precizate.
Figura II.1.11. Operatiile realizate cu ajutorul comenzii SELECT
Cea mai simpla forma a comenzii SELECT are sintaxa:
SELECT Lista_expresii
FROM tabela
In clauza SELECT se va preciza o lista de coloane sau expresii ce se vor afisa, separate prin cate un spatiu. In clauza FROM precizam tabela din care se vor extrage coloanele ce vor fi afisate sau pe baza carora vom realiza diverse calcule.
Vom exemplifica modul de folosire al comenzii SELECT pe tabela Persoane, avand urmatoarea structura si continut:
Tabelul II.1.1.
COD |
NUME |
PRENUME |
LOCALITATE |
FIRMA |
JOB |
SALARIU |
Ionescu |
Gheorghe |
Brasov | ||||
Georgescu |
Maria |
Iasi | ||||
Marinescu |
Angela |
Sibiu | ||||
Antonescu |
Elena |
Sibiu | ||||
Bischin |
Paraschiva |
Brasov | ||||
Olaru |
Angela |
Ploiesti | ||||
Vasilescu |
Vasile |
Cluj-Napoca | ||||
Popescu |
Ioan |
Bucuresti |
Pentru a afisa toate datele (toate coloanele si toate liniile) din tabela persoane vom scrie simplu:
SELECT * FROM persoane
Observati ca in locul listei de coloane am scris un singur asterisc, ceea ce inseamna ca dorim sa afisam toate coloanele tabelei.
Daca insa dorim sa afisam doar informatiile din cateva coloane ale tabelei, de exemplu dorim sa afisam numele, prenumele si localitatea fiecarei persoane vom preciza numele coloanelor in clauza SELECT
SELECT nume, prenume, localitate FROM persoane
rezultatul fiind cel din tabelul II.1.2.Tabelul II.1.2
NUME |
PRENUME |
LOCALITATE |
Ionescu |
Gheorghe |
Brasov |
Georgescu |
Maria |
Iasi |
Marinescu |
Angela |
Sibiu |
Antonescu |
Elena |
Sibiu |
Bischin |
Paraschiva |
Brasov |
Olaru |
Angela |
Ploiesti |
Vasilescu |
Vasile |
Cluj-Napoca |
Popescu |
Ioan |
Bucuresti |
Dupa cum am precizat, putem realiza si calcule cu coloanele unei tabele. De exemplu pentru a afisa pentru fiecare persoana, salariul marit cu 10% folosim urmatoarea comanda:
SELECT nume, prenume, salariu, salariu * 1.10
FROM persoane
si obtinem:Tabelul II.1.3.
NUME |
PRENUME |
SALARIU |
SALARIU*1.10 |
Ionescu |
Gheorghe | ||
Georgescu |
Maria | ||
Marinescu |
Angela | ||
Antonescu |
Elena | ||
Bischin |
Paraschiva | ||
Olaru |
Angela | ||
Vasilescu |
Vasile | ||
Popescu |
Ioan |
Daca priviti tabelul II.1.3. puteti observa ca in capul de tabel afisat sunt trecute numele coloanelor cu majuscule sau expresia care a generat acea coloana, tot cu majuscule. Daca dorim ca in capul de tabel sa apara alt text, sau sa nu se foloseasca doar majuscule va trebui sa folosim un ALIAS pentru coloana respectiva. Aliasul este introdus in clauza SELECT, imediat dupa numele coloanei respective astfel:
SELECT nume, prenume, salariu AS SalariuVechi,
salariu * 1.10 AS SalariuNou FROM persoane
In aceasta comanda am stabilit doua aliase SalariuVechi si respectiv SalariuNou. Trebuie subliniat ca nu este obligatorie folosirea cuvantului AS pentru a defini un alias, insa este de preferat sa il utilizam pentru o mai mare claritate. Comanda anterioara va afisa:Tabelul II.1.4.
NUME |
PRENUME |
SALARIUVECHI |
SALARIUNOU |
Ionescu |
Gheorghe | ||
Georgescu |
Maria | ||
Marinescu |
Angela | ||
Popescu |
Ioan |
Puteti observa ca desi in comanda SELECT am scris aliasele folosind atat litere mici cat si litere mari, la afisare acestea sunt scrise tot cu majuscule. Pentru a evita acest lucru, trebuie sa introducem aliasul intre ghilimele:
SELECT nume, prenume, salariu AS 'SalariuVechi',
salariu * 1.10 AS 'SalariuNou' FROM persoane
rezultatul obtinut de aceasta data fiind cel din tabelul II.1.5.
De asemenea daca dorim ca aliasul sa contina mai multe cuvinte de exemplu Salariul Nou respectiv Salariul Vechi, va trebui sa folosim si de aceasta data ghilimele, in caz contrar generandu-se o eroare. De exemplu comanda urmatoare va afisa tabelul II.1.6:
SELECT nume||' '||prenume 'Numele si prenumele',
salariu AS 'Salariu Vechi',
salariu * 1.10 AS 'Salariu Nou' FROM persoane
Tabelul II.1.5.
NUME |
PRENUME |
SalariuVechi |
SalariuNou |
Ionescu |
Gheorghe | ||
Georgescu |
Maria | ||
Marinescu |
Angela | ||
Popescu |
Ioan |
Tabelul II.1.6.
Numele si prenumele |
Salariu Vechi |
Salariu Nou |
Ionescu Gheorghe | ||
Georgescu Maria | ||
Marinescu Angela | ||
Popescu Ioan |
In cadrul clauzei SELECT, se pot folosi orice fel expresii in care se folosesc nume de coloane, constante, operatori, functii etc. De exemplu, comanda urmatoare va afisa tabelul II.1.7.
SELECT nume||' '||prenume||' are salariul egal cu '||
salariu AS 'Informatii persoane' FROM persoane
Tabelul II.1.7.
Informatii persoane |
Ionescu Gheorghe are salariul egal cu 300 |
Georgescu Maria are salariul egal cu 890 |
Marinescu Angela are salariul egal cu 2100 |
Sa analizam rezultatul rularii urmatoarei comenzi:
SELECT localitate, firma
FROM persoane
In tabelul II.1.8 se poate observa ca in localitatea Brasov exista doua persoane care lucreaza la aceeasi firma avand codul 22.
LOCALITATE |
FIRMA |
Brasov | |
Iasi | |
Sibiu | |
Sibiu | |
Brasov | |
Ploiesti | |
Cluj-Napoca | |
Bucuresti |
Tabelul II.1.8.
Daca dorim sa vedem la ce firme lucreaza persoanele din fiecare localitate, insa o firma sa fie afisata o singura data pentru o localitate anume, deci combinatia valorilor localitate si firma sa fie unica, vom folosi clauza DISTINCT in cadrul clauzei SELECT astfel:
SELECT DISTINCT localitate, firma FROM persoane
LOCALITATE |
FIRMA |
Brasov | |
Bucuresti | |
Cluj-Napoca | |
Iasi | |
Ploiesti | |
Sibiu | |
Sibiu |
combinatia (Brasov, 22) fiind afisata acum o singura data (tabelul II.1.9.).
Tabelul II.1.9.
LOCALITATE |
Brasov |
Bucuresti |
Cluj-Napoca |
Iasi |
Ploiesti |
Sibiu |
Dar daca dorim sa afisam doar localitatile ce apar in tabela Persoane, fiecare localitate sa fie afisata o singura data? Vom scrie:
SELECT DISTINCT localitate FROM persoane
rezultatul fiind acum:
Tabelul II.1.10.
Imaginati-va ca tabela persoane contine date despre mii de persoane si ca la un moment dat va intereseaza doar informatiile despre persoanele dintr-o anumita localitate. Pentru a putea selecta doar acele linii care ne intereseaza, trebuie sa adaugam clauza WHERE la comanda SELECT. In aceasta clauza vom preciza conditiile pe care trebuie sa le indeplineasca o linie pentru a fi afisata. Asadar clauza WHERE permite realizarea operatiei de selectie (fig II.1.11).
De exemplu pentru a afisa toate persoanele care provin din Bucuresti sau Brasov vom scrie:
SELECT * FROM persoane
WHERE localitate='Brasov' OR localitate='Bucuresti'
care va afisa:
Tabelul II.1.11.
COD |
NUME |
PRENUME |
LOCALITATE |
FIRMA |
JOB |
SALARIU |
Ionescu |
Gheorghe |
Brasov | ||||
Bischin |
Paraschiva |
Brasov | ||||
Popescu |
Ioan |
Bucuresti |
E acum timpul sa vedem cum se foloseste operatorul LIKE. Acesta este utilizat pentru a verifica daca un sir de caractere respecta un anumit 'model'. Daca valoarea se potriveste modelului, operatorul va returna valoarea true (adevarat) in caz contrar va returna valoarea False (fals).
In model se pot utiliza urmatoarele caractere speciale:
caracterul de subliniere (underscore ) tine locul unui singur caracter, oricare ar fi acesta.
caracterul procent ( ) tine locul la zero sau mai multe caractere, oricare ar fi acestea.
De exemplu, daca dorim sa afisam toate persoanele al caror prenume contine litera a pe orice pozitie, vom scrie:
SELECT * FROM persoane
WHERE lower(prenume) LIKE '%a%'
Modelul '%a%' precizeaza ca in fata caracterului a, in prenume, se pot gasi oricate caractere, inclusiv zero caractere, iar dupa caracterul a se gasesc de asemenea oricate caractere, inclusiv zero. Am folosit functia LOWER pentru a transforma toate caracterele in litere mici, altfel numele care incep cu litera A, intrucat acesta e scris cu majuscule, nu ar fi fost afisat.
Rezultatul rularii acestei comenzi arata astfel:
Tabelul II.1.12.
COD |
NUME |
PRENUME |
LOCALITATE |
FIRMA |
JOB |
SALARIU |
Georgescu |
Maria |
Iasi | ||||
Marinescu |
Angela |
Sibiu | ||||
Antonescu |
Elena |
Sibiu | ||||
Bischin |
Paraschiva |
Brasov | ||||
Olaru |
Angela |
Ploiesti | ||||
Vasilescu |
Vasile |
Cluj-Napoca | ||||
Popescu |
Ioan |
Bucuresti |
Daca insa dorim sa afisam persoanele al caror prenume contine litera a pe a doua pozitie vom folosi caracterul underscore in model:
SELECT * FROM persoane
WHERE prenume LIKE '_a%'
Tabelul II.1.13.
COD |
NUME |
PRENUME |
LOCALITATE |
FIRMA |
JOB |
SALARIU |
Georgescu |
Maria |
Iasi | ||||
Bischin |
Paraschiva |
Brasov | ||||
Vasilescu |
Vasile |
Cluj-Napoca |
In cazul in care trebuie sa verificam daca un sir contine unul dintre caracterele speciale underscore ( ), backslash ( ), procent ( ) vom scrie in model caracterul respectiv precedat de orice caracter special (de exemplu sau &), iar dupa model vom preciza cu ajutorul clauzei ESCAPE care este caracterul special care introduce secventa corespunzatoare caracterelor
Pentru a afisa persoanele din tabela employees al caror job_id contine caracterul underscore (_) pe a treia pozitie de la sfarsit folosim comanda:
SELECT first_name, job_id FROM employees
WHERE job_id LIKE '%&_ _ _' ESCAPE '&'
sau
SELECT first_name, job_id FROM employees
WHERE job_id LIKE '%_ _ _' ESCAPE ''
iar daca dorim sa afisam persoanele al caror job_id contine un caracter underscore oriunde in sir vom utiliza comanda:
SELECT first_name, job_id FROM employees
WHERE job_id LIKE '%&_%' ESCAPE '&'
sau
SELECT first_name, job_id FROM employees
WHERE job_id LIKE '%_%' ESCAPE ''
Rezultatele afisate sunt cele din tabelul II.1.14, respectiv II.1.15.
Tabelul II.1.14.
|
Tabelul II.1.15.
|
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 1661
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved