SQL
Limbajul SQL (Structured Query Language) se bazeaza pe studiile lui E.F. Codd, prima implementare a acestui limbaj datand din 1970.
SQL este un limbaj complet standardizat si se poate utiliza pentru a accesa baze de date Oracle, SQL Server, DB2, MySQL s.a.
SQL utilizeaza o sintaxa foarte simpla si usor de folosit. Comenzile SQL sunt grupate in cinci categorii, astfel:
Limbajul de interogare - permite regasirea liniilor memorate in tabelele bazelor de date. Comanda utilizata este SELECT.
Limbajul de manipulare a datelor - permite modificarea continutului tabelelor. Comenzile utilizate sunt:
INSERT - pentru adaugarea de noi linii intr-un tabel;
UPDATE - pentru modificarea valorilor memorate intr-un tabel;
DELETE - pentru stergerea liniilor dintr-un tabel.
Limbajul de definire a datelor - permite definirea structurii tabelelor ce compun bazele de date. Comenzile utilizate sunt:
CREATE - pentru crearea structurii unei baze de date sau a unui tabel;
ALTER - pentru modificarea structurii unei baze de date sau a unui tabel;
DROP - pentru stergerea structurii bazei de date;
RENAME - pentru schimbarea numelui unui tabel;
Limbajul de control al tranzactiilor. Comenzile utilizate sunt:
COMMIT - pentru ca modificarile efectuate asupra bazei de date sa devina permanente;
ROLLBACK - permite renuntarea la ultimele modificari asupra bazei de date;
SAVEPOINT - pentru definirea unui punct de salvare la care se poate reveni, renuntand la modificarile facute dupa acest punct asupra bazei de date.
Limbajul de control a datelor - permite definirea si modificarea drepturilor asupra bazelor de date. Comenzile utilizate sunt:
GRANT - pentru acordarea unor drepturi altor utilizatori asupra bazei de date;
REVOKE - pentru anularea anumitor drepturi ale utilizatorilor.
Principalele elemente care compun o comanda SQL
NUME - toate obiectele dintr-o baza de date, tabele, coloane, indecsi etc., au un nume. Numele poate fi orice sir de maximum 30 de litere, cifre si caractere speciale ("_", "#", "$"), primul caracter fiind obligatoriu o litera.
CUVINTE REZERVATE - la fel ca in orice limbaj si in SQL exista o lista de cuvinte rezervate. Aceste cuvinte nu pot fi utilizate in alt scop decat cel definit initial.
CONSTANTE - o constanta este o valoare fixa care nu poate fi modificata. Exista:
constante numerice, de exemplu 4, 12.34, .9 (se observa ca daca un numar real are partea intreaga egala cu zero, atunci ea nu mai trebuie precizata);
constante alfa-numerice (sau sir de caractere). Constantele sir de caractere sunt scrise intre apostrofuri si sunt case-sensitive ('abc', 'baza de date')
VARIABILE - o variabila este o data care poate avea in timp valori diferite. O variabila are intotdeauna un nume pentru a putea fi referita. SQL accepta 2 tipuri de variabile:
variabile asociate numelor coloanelor;
variabile sistem.
EXPRESII - o expresie este formata din variabile, constante si functii. Operatorii care pot fi utilizati sunt impartiti astfel:
operatori aritmetici;
operatori alfa-numerici;
operatori de comparatie;
operatori logici.
Cu ajutorul comenzii SELECT se pot realiza urmatoarele tipuri de operatii:
Selectia - consta in filtrarea liniilor care vor fi afisate;
Proiectia - consta in alegerea doar a anumitor coloane pentru a fi afisate;
| ||||||
Uniune (JOIN) - consta in prelucrarea datelor din doua sau mai multe tabele "legate" conform unor reguli precizate;
|
Sintaxa:
SELECT [DISTINCT] lista_de_expresii
FROM nume_tabel
WHERE conditie - clauza optionala
ORDER BY criterii_sortare_rezultat - clauza optionala;
Efectul:
Se parcurg rand pe rand liniile tabelului specificat in clauza FROM. Din fiecare linie, continand date pentru care conditia aflata in clauza WHERE este adevarata, va rezulta o linie in raspunsul cererii.
In cazul in care clauza WHERE lipseste, toate liniile tabelului din clauza FROM vor avea o linie corespondenta in rezultatul cererii. Linia de rezultat este compusa pe baza listei de expresii aflata pe clauza SELECT.
Daca exista cuvantul cheie DISTINCT, din rezultat se elimina liniile duplicat.
Inainte de a trimite rezultatul, serverul il sorteaza in functie de criteriile specificate de clauza ORDER BY. In cazul in care clauza ORDER BY lipseste, liniile din rezultat sunt intr-o ordine independenta de continutul lor sau de ordinea in care ele au fost adaugate in tabel.
Numarul coloanelor
din rezultat este egal cu numarul expresiilor din lista clauzei SELECT.
Aceste expresii dau si numele coloanelor din rezultat.
Evaluarea valorii de
adevar a conditiei din WHERE se face doar pe baza datelor aflate pe
linia respectiva. Deoarece parcurgerea liniilor specificata de o
cerere SELECT se face dupa un plan de executie generat de server,
folosirea clauzei ORDER BY este obligatorie in cazul in care se doreste un
rezultat sortat dupa anumite criterii.
Nume de coloane sau *
Ex.1. SELECT nume, prenume, data_nastere
FROM studenti_tabel
Ex.2. SELECT *
FROM studenti_tabel
Expresii aritmetice
Ex.3. SELECT tip, suma, (suma+20)*1.1
FROM bursa_tabel
Expresii concatenate
Ex.4. SELECT `Specializarea` ||nume||` are codul`,cod_spec
FROM specializare_tabel
Alias de coloana
nu poate fi mai lung de 30 de caractere;
incepe cu o litera si contine litere, cifre sau e pus intre ghilimele;
nu poate fi folosit decat in cererea curenta;
sistemul nu stocheaza in baza de date sau altundeva aceste nume alternative.
Ex.5. SELECT tip AS "Tip bursa", `are valoarea` ||suma|| `.lei` AS Descriere
FROM bursa_tabel
Tip bursa |
DESCRIERE |
||
Bursa_soc |
are valoarea |
.lei |
|
Bursa_mer |
are valoarea |
.lei |
Clauza WHERE
Sintaxa: WHERE expresie_logica
Ex.6. SELECT nume, grupa, codspec
FROM studenti_tabel
WHERE an = 4;
Operatori de comparare: (< )mai mic, (<=) mai mic sau egal, (>) mai mare, (>=) mai mare sau egal, (<>, !=, ^=) diferit.
Conditii compuse: (AND, OR, NOT).
Operatorul BETWEEN
Sintaxa: expresie BETWEEN valoare.min AND valoare.max
Ex. 7. SELECT nume, an, punctaj
FROM studenti_tabel
WHERE punctaj BETWEEN 2000 AND 4000;
Operatorul IN
Sintaxa: expresie IN (val_1, val_2, val_3,, val_n)
Ex. 8. SELECT nume, data_nastere
FROM studenti_tabel
WHERE grupa IN (113, 114, 116)
Operatorul IN ignora valorile nule din lista.
Pentru a putea folosi in clauza WHERE siruri de caractere si date calendaristice, acestea trebuie introduse intre ghilimele simple (` `), singura exceptie fiind constantele numerice.
Ex.9. - listeaza toti angajatii care sunt pe pozitia de contabil:
SELECT *
FROM angajati_tabel
WHERE functie = `CONTABIL`
Ex.10. - listeaza toti angajatii care au data de angajare 17-dec-1990:
SELECT *
FROM angajati_tabel
WHERE data_angajare=`17-dec-1990`
Ex.11. - listeaza toti angajatii care sunt in departamentul 10:
SELECT *
FROM angajati_tabel
WHERE nr_dept = 10
Operatorul LIKE
Daca nu se cunoaste valoarea exacta cautata, cu ajutorul conditiei LIKE putem sa selectam randuri care se potrivesc cu un model specificat de caractere. Pentru construirea modelului sirului cautat pot fi folosite doua simboluri:
% - orice secventa de 0 sau mai multe caractere;
_ - un singur caracter.
Ex.12. - listeaza toti angajatii al caror nume incepe cu litera S:
SELECT *
FROM angajati_tabel
WHERE nume LIKE `S%`
Ex.13. - listeaza toti angajatii care au numele din 4 caractere:
SELECT *
FROM angajati_tabel
WHERE nume LIKE `_ _ _ _`
Ex.14. - listeaza toti angajatii care au al doilea caracter din nume `O`:
SELECT *
FROM angajati_tabel
WHERE nume LIKE `_O%`
Conditia IS NULL
Pentru a verifica valori de tip NULL exista conditia IS NULL sau negarea acesteia IS NOT NULL.
O valoare nula nu este la fel cu 0 care este un numar. Daca valoarea NULL este utilizata intr-o comparatie, trebuie sa se foloseasca IS NULL sau IS NOT NULL, altfel rezultatul este intotdeauna FALSE.
Ex.15. - listeaza toti angajatii care nu au comision:
SELECT *
FROM angajati_tabel
WHERE comision IS NULL
Negarea expresiilor:
Operator |
Semnificatie |
!= |
diferit de |
< > |
|
NOT BETWEEN |
nu se afla intre cele 2 valori |
NOT IN |
nu se afla in lista |
NOT LIKE |
diferit de sirul |
IS NOT NULL |
nu este o valoare nula |
Prioritate de executie:
Dar ordinea se poate modifica daca se folosesc paranteze.
Clauza ORDER BY
Cu ajutorul clauzei ORDER BY randurile vor fi afisate in ordinea solicitata (cu toate acestea nu se va modifica ordinea interna a randurilor din baza de date). Ea trebuie sa fie ultima clauza din cerere.
Sintaxa: SELECT nume_coloana
FROM nume_tabel
WHERE conditie ORDER BY
[ASC/DES];
Ex.16. - listeaza toti angajatii ordonandu-i dupa data angajarii (in ordine descrescatoare)
SELECT *
FROM angajati_tabel
ORDER BY data_angajare DESC;
Randurile pot fi ordonate dupa mai multe coloane. Numarul maxim de coloane dupa care se pot ordona randurile este numarul maxim de coloane existente in tabel.
Comenzi pentru actualizarea bazelor de date
SQL prezinta comenzi specifice pentru modificarea continutului unui tabel, intelegand prin aceasta trei actiuni prin care se actualizeaza baza de date:
adaugarea de noi linii la cele existente intr-un tabel;
Comanda utilizata pentru adaugarea de inregistrari este INSERT cu formatul:
INSERT
INTO nume_tabel (lista de campuri)
VALUES (lista de valori)
Ex.17. INSERT
INTO clienti_tabel (CodClient, NumeClient, AdresaClient)
VALUES (1009, "UPB-SRL", "spl.Indep.313")
Pentru o utilizare mai usoara putem folosi comanda DESCRIBE clienti_tabel care va afisa campurile tabelului in ordinea lor, precum si tipul fiecarui camp.
stergerea unor linii existente;
Stergerea uneia sau mai multor inregistrari se realizeaza prin comanda DELETE care are sintaxa:
DELETE
FROM nume_tabel
WHERE conditie
Ex.18. DELETE
FROM clienti_tabel
WHERE CodClient=1003
modificarea valorii unui atribut.
Comanda utilizata este UPDATE care are formatul general:
UPDATE nume_tabel
SET atribut = expresie
WHERE conditie
Modificarea se va produce pentru toate liniile tabelului care indeplinesc conditia specificata.
Ex.19. UPDATE facturi_tabel
SET ValoareTotala = 3000
WHERE NrFactura = 1122
Functii
Functiile se clasifica in doua tipuri:
functii referitoare la o singura inregistrare (LCASE() - converteste caracterele din mari in mici, UCASE() - converteste caracterele din mici in mari, CONCAT() - echivalent cu operatorul de concatenare ||, LEN() - returneaza numarul de caractere etc.);
functii referitoare la mai multe inregistrari (AVG() - valoarea medie, COUNT() - numarul de randuri, MAX(), MIN(), SUM() etc).
Functiile referitoare la o singura inregistrare returneaza un singur rezultat pentru fiecare rand al tabelului, pe cand functiile referitoare la mai multe inregistrari returneaza un singur rezultat pentru fiecare grup de inregistrari din tabel.
Ex.20. SELECT AVG(salariu), MAX (salariu), MIN(salariu)
FROM angajati_tabel
WHERE functie = `VANZATOR`
Comenzi pentru descrierea datelor
Comanda CREATE TABLE creeaza un tabel vid, cu o anumita structura. De exemplu:
Ex.21.
CREATE TABLE CLIENTI
(CodClient INT(7) NOT NULL,
NumeClient CHAR(25) NOT NULL,
AdresaCLient CHAR(25),
CodPostal INT(4) NOT NULL DEFAULT 1100,
PRIMARY KEY(CodClient)
Atributul CodClient este de tip INT, valoarea sa fiind reprezentata pe sapte pozitii. Celelalte atribute contin siruri de caractere. Valorile pentru CodClient, NumeClient si CodPostal nu pot fi nule. Pentru CodPostal valoarea implicita, pe care o ia automat la adaugarea unei linii in tabelul CLIENTI, este 1100.
In calitate de cheie primara a relatiei a fost investit atributul CodClient.
Cele mai multe dialecte SQL admit urmatoarele tipuri de date:
TEXT |
||
CHAR(SIZE) |
Sir de caractere de lungime (SIZE) |
|
VARCHAR(SIZE) |
Sir de caractere de lungime variabila |
|
TINYTEXT |
Sir de caractere (<255 caract.) |
|
TEXT |
Sir de caractere de lungime maxima 65535 caract. |
|
BLOB |
Binary Large OBjects |
|
MEDIUMTEXT | ||
MEDIUMBLOB | ||
LONGTEXT | ||
LONGBLOB | ||
ENUM | ||
NUMERIC |
||
TINYINT(SIZE) |
Numere intregi -128:127 (0:255 UNSIGNED) |
|
SMALLINT(SIZE) |
-32768:32767 (0:65535 UNSIGNED) |
|
MEDIUMINT(SIZE) | ||
INT(SIZE) | ||
BIGINT(SIZE) | ||
FLOAT(SIZE, D) |
Numere reale cu virgula mobila cu (SIZE) numar total de pozitii, din care D la partea fractionara. |
|
DOUBLE(SIZE, D) | ||
DECIMAL(SIZE, D) | ||
DATA |
||
DATE() |
Format YYYY-MM-DD |
|
DATETIME() |
Format YYYY-MM-DD HH:MM:SS |
|
TIME() |
HH:MM:SS |
|
YEAR() | ||
Exista posibilitatea adaugarii ulterioare a unui nou atribut la cele existente, stergerii unui atribut sau de modificare a tipului sau lungimii sale. Operatiunea nu este atat de frecventa fiind recomandabil sa se desfasoare cat mai rar; o buna analiza desfasurata in faza de proiectare a bazei de date elimina, de obicei, acest gen de probleme.
Daca in tabelul CLIENTI se doreste pastrarea si a codului fiscal al fiecarui furnizor, este necesara adaugarea atributului CodFiscal, care este un sir de caractere de lungime 8. Comanda utilizata este:
Ex.22.
ALTER TABLE CLIENTI
ADD CodFiscal CHAR(8)
Cheile straine sunt declarate cu ajutorul optiunii FOREIGN KEY. Pentru tabelul FACTURI_EMISE cheie primara este atributul NrFactura, in timp ce CodClient este cheie straina catre tabelul CLIENTI.
Ex.23.
CREATE TABLE FACTURI_EMISE
(NrFactura DECIMAL(8) NOT NULL,
DataFactura DATE,
CodClient DECIMAL(7) NOT NULL,
ValoareTotala DECIMAL(17) NOT NULL,
TVA DECIMAL(14),
PRIMARY KEY(NrFactura)
FOREIGN KEY(CodClienti) REFERENCES CLIENTI)
Stergerea unui tabel din baza de date este realizabila cu ajutorul comenzii DROP TABLE. De obicei aceasta comanda se utilizeaza atunci cand pe parcursul lucrului s-au creat tabele intermediare, temporare.
JOIN-URI
Pentru a prelucra date din mai multe tabele, forma de baza a unei instructiuni SELECT consta in adaugarea unei conditii de legatura (JOIN) in clauza WHERE.
Ex.24.
SELECT table1.column, table2.column
FROM table1, table2
WHERE table1.column = table2.column
Numele coloanei trebuie prefixat de numele tabelului in situatiile cand acelasi nume de coloana apare in mai multe tabele.
Un JOIN cu doua sau mai multe tabele care returneaza doar linii ce au valori echivalente pentru coloanele specificate este denumit SIMPLE JOIN sau INNER JOIN.
Ex.25.
SELECT column.name
FROM table_name1 INNER JOIN teble_name2
ON table_name1.column_name = table_name2.column.name;
Atunci cand un JOIN returneaza atat liniile care se potrivesc cat si cele care nu se potrivesc, acesta se numeste OUTER JOIN.
Exista trei tipuri de OUTER JOIN:
LEFT OUTER JOIN
Ex.26. - sunt afisati si acei angajati care nu au desemnat un id_dept:
SELECT a.nume, a.id_dept, d.denumire
FROM angajati a
LEFT OUTER JOIN departament d
ON a.id_dept = d.id_dept;
RIGHT OUTER JOIN
Ex.27. - sunt afisate si acele departamente care nu au angajati:
SELECT a.nume, a.id_dept, d.denumire
FROM angajati a
RIGHT OUTER JOIN departament d
ON a.id_dept = d.id_dept;
FULL OUTER JOIN
Ex.28. - sunt afisati si acei angajati care nu au un departament si acele departamente care nu au angajati:
SELECT a.nume, a.id_dept, d.denumire
FROM angajati a
FULL OUTER JOIN departament d
ON a.id_dept = d.id_dept;
Politica de confidentialitate |
.com | Copyright ©
2024 - Toate drepturile rezervate. Toate documentele au caracter informativ cu scop educational. |
Personaje din literatura |
Baltagul – caracterizarea personajelor |
Caracterizare Alexandru Lapusneanul |
Caracterizarea lui Gavilescu |
Caracterizarea personajelor negative din basmul |
Tehnica si mecanica |
Cuplaje - definitii. notatii. exemple. repere istorice. |
Actionare macara |
Reprezentarea si cotarea filetelor |
Geografie |
Turismul pe terra |
Vulcanii Și mediul |
Padurile pe terra si industrializarea lemnului |
Termeni si conditii |
Contact |
Creeaza si tu |