1. Obiecte importante in SQL
- SQL are componente:
- literali (constante)
- limitatori
- comentarii
- indentificatori
- cuvinte cheie rezervate
2. Literali
- Literal este o constanta de tip alfa-numeric (sir de caractere), hexazecimala sau numerica
- Tipul alfa-numeric contine unu sau mai multe simboluri plasati intre ghilimele (' ') sau (" "), Se recomanda (" "). Pentru a include ghilimele in sirul de caractere trebuie folosite doua ghhilimele alturate.
- Tipul de date hexazecimal incep cu simbolurile 0x dupa care urmeaza un numar par de simboluri alfa-numerice
Exemple:
- 'ABC' - corect
- "ABC" - corect
- '9868' - corect
- 0x53514C0D - corect
- 'Apostoful se prezinta asa: can' ' t ' - corect
- 'AB'C' - incorect
- 'New York" - incorect
- Constantele numerice cuprind valorile intregi sau cu virgula fixa/ mobila (130; -130.00; -0.357E5; 22.3E-3)
- Constantele au proprietatile: tip de date si lungime, exactitatea si coeficientul de scalabilitate
3. Limitatorii
- In T-SQL ghilimelele duble au doua intrebuintari: pentru siruri de caractere si pentru a fi folositi in calitate de limitatori pentru asa numitii indentificatori cu limitari(delimited identifier)
- delimited identifier este un caz special al identificatorilor care se foloseste pentru a permite folosirea cuvintelor cheie in calitate de indentificatori cit si pentru a folosi spatii in numele obj. BD
- Folosirea ghilimelelor duble in T-SQL se determina prin parametrul QUOTED_IDENTIFIER al instructiunii SET. Daca acest parametru are valoarea ON(by default), identificatorii dintre ghilimelele duble vor fi tratati ca indentificatori cu linite
4. Comentarii
- Sunt doua tipuri de comentarii: /* text */ si doua defisuri ( -- ) care comenteaza doar rindul curent
5. Identificatori
- Se folosesc pentru a denumi obj. BD (BD, tabele, indexi)
- Pot avea pina la 128 simboluri si contin litere, cifre sau _, @, #, &
- Primul simbol poate fi litera sau _, @, #,
- Simbolul initial # indica obiect temporar
- Simbolul @ indica o variabila
6. Cuvintele cheie rezervate
- Nu se pot folosi la denumirea obj.
7. Tipuri de date
- Toate valorile in coloana trebuie sa aiba un singur tip (in afara de tipul de date SQL_VARIANT)
- Tipuri de date
- numerice
- caracter
- temporale (data si/sau timpul)
- alte tipuri
INTEGER | 4yte (-2 147 483 648 - 2 147 483 647) |
SMALLINT | 2 byte (-32 768 - 32 767) |
TYNYINT | 1bye (0 - 255) |
BIGINT | 8byte (-2^63 - 2^63 - 1) |
DECIMAL (p,[s]) |
cu virgula fixata. Argumrtul p (precision) indica numarul de biti, iar s (scale) - numarul de biti care urmeaza dupa virgula. In dependenta de p, valoarea DECIMAL se pastreaza in 5..17 byte |
NUMERIC (p,[s]) |
Sinonim cu DECIMAL |
REAL | cu virgula mobila |
FLOAT[(p)] | cu virgula mobila, daca p<25 trebuie 4 byte, daca p>25 trebuie 8 byte |
MONEY | Reprezentarea banilor, corespunde tipului DECIMAL pe 8 byte. |
SMALLMONEY | La fel ca MONEY, doar ca are 4 byte |
8. Tipuri de date caracter
CHAR[(n)] | cuprinde n byte (n<=8000) |
VARCHAR[(n)] | 0<n<8000 |
NCHAR[(n)] | siruri de caractere de lungime fixa. pentru fiecarea simbol trebuie 2 byte (simboluri <=4000) |
NVARCHAR[(n)] | siruri de caractere cu lungime variabila; pentru fiecarea simbol trebuie 2 byte (simboluri <=4000) |
9. Tipuri de date temporale
- DATETIME
- SMALLDATETIME
- DATE
- TIME
- DATETIME2
- DATETIMEOFFSET
10. Alte tipuri de date
- binare
- BIT
- CURSOR
- UNIQUEIDENTIFIER
- SQL_VQRIANT
- TABLE
- XML
- spatiale
- HIERARCHYID
- TIMESETAMP
- determintae de utilizator
11. Tipuri de date binare si BIT
- binare: BINARY si VARBYNARY; descriu obj. in formatul intern al sistemului si se folosesc pentru pastrarea sirurilor de biti
- BIT contine doar un bit
BINARY[(n)] | sir de biti cu lungime fixa de n byte (0<n<8000) |
VARBINARY[(n)] | sir de biti cu lungime variabila de n byte (0<n<8000) |
BIT | pastreaza valori logice; poate avea trei stari: FALSE, TRUE si NULL |
12. Tipuri de date obj. mari
- LOB(Large OBject) - poate pastra obj. al datelor cu marimea <= 2GB
- In T-SQL sunt urmatoarele tipuri de date LOB
- VARCHAR(max)
- NVARCHAR(max)
- VARBINARY(max)
13. Tipuri de date UNIQUEIDENTIFIER
- numar de identificare pastrat in 16 byti; este IDENTIFICATOR
14. Tipuri de date SQL_VARIANT
- Pentru pastrarea valorilor de diferite tipuri
- Fiecare valoarea de acest tip are doua parti: valoarea si informatia care descrie aceasta valoare(lungimea, scale, exactitatea)
- Pentru a accesa valorile coloanei de tip SQL_VARIANT se foloseste functia T-SQL SQL_VARIANT_PROPERTY
15. Tipuri de date HIERARCHYID
- Pastreaza ierarhia completa.
- Functii cu care lucreaza: GetLevel(); GetAncestor(); GetDescendent; Read(); si Write();
16. Tipuri de date TIMESTAMP
- Indica coloana, determinata ca VARBINARY(8) sau BINARY(8), in dependenta de proprietatea coloanei de a primi valoarea NULL
- Poate sa determine timpul ultimei modificari in coloane. (sinonim = ROWVERSION)
17. Tipuri de pastrare
- Sunt doua tipuri de pastrare a LOB-obj.
- FILESTREAM
- pastrare si folosire coloane rare (sparse columns)
18. Pastrare de tip FILESTREAM
- Fisierele mari (video) se pastreaza in afara BD
- pastrarea de tip FILESTREAM administreaza obj. LOB care se pastreaza in sistemul de fisiereNTFS
- Proprietati
- datele de tip FILESTREAM pot fi pastrate cu ajutorul instructiunii CREATE TABLE, iar pentru lucrul cu ele se poate de folosit (SELECT, INSERT, UPDATE di DELETE)
- Sistemul de administrarea al BD asigura nivel de securitate egal datelor de tip FILESTREAM cit si al datelor din interiorul BD
19. Tabele rare
- Are scop minimizarea volumului pe disc pe care il ocupa BD
- Coloanele acestui tip permit optimizarea pastrarii coloanelor la care majoritatea valorilor sunt NULL
-Se creaza la fel ca tabelele simple,doar ca dupa denumirea coloanei se pune cuvintul cheie SPARSE
20. Functiile SQL
- Pot fi agregate si scalare
21. Functiile agregate
- Executa calcule asupra unue grupe de valori ai coloanei si intotdeauna intoarce o singura valoare
- Tipuri:
- obisnuite
- statice
- determintae de utilizator
- analitice
- Functiile obisnuite
- AVG - media aritmetica a valorilor din coloana (datele trebuie sa fie numerice)
- MAX si MIN - determina maximul si minimul dintre valorile tabelului(datele pot fi numerice caracter si temporale)
- SUM - suma valorilor din coloana (datele trebuie sa fie numerice)
- COUNT - numarul de valori diferite de NULL. COUNT(*) - returneaza numarul de rinduri (cu tot cu NULL)
- COUNT_BIG - analog COUNT, doar ca returneaza tip de date BIGINT
22. Functiile scalare
- Se folosesc pentru crearea expresiilor scalare
- Executa calcule pentru o singura valoare din coloana sau lista de coloane
- Categorii:
- numerice
- functiile datei
- functii sir de caractere
- de sistem
- al metadatelor
23. Functiile numerice
- Sunt functii matematice:
ABS(n) | modul |
ACOS(n) | arccosinus de n, returneaza float |
ASIN(n) | arcsinus de n, returneaza float |
ATAN(n) | arctangenta de n, returneaza float |
ATN2(n,m) | arctangenta de n/m, returneaza float |
CEILING(n) | rotungire la intreg catre mai mare |
COS(n) | cosinus de n, returneaza float |
COT(n) | cotangenta de n, returneaza float |
DEGRESS(n) | radiani in grade |
EXP(n) | exponentiala e^n |
FLOOR(n) | rotungire la intreg catre mai mic |
LOG(n) | logaritm de n |
LOG10(n) | logaritm in baza 10 de n |
PI() | returneaza valoarea pi(3,14) |
POWER(x,y) | calculeaza x ^y |
RADIANS(n) | grade in radiani |
RAND() | returneaza unn float arbitrar cuprins intre 0 si 1 |
ROUND(n,p,[t]) | rotungeste n cu exactitatea pina la p |
ROWCOUNT_BIG | numarul de coloane care a fost prelucrat de ultima instructiune T-SQL |
SIGN(n) | semnul lui n; +1 daca e pozitiv; -1 daca e negativ |
SQRT(n) | radical de ordinul 2 |
SQUARE(n) | = n^2 |
TAN(n) | tangenta de n,returneaza float |
24. Functiile temporale
- Prelucreaza data,timpul
GETDATE() | returneaza data si timpul curent al sistemului |
DATEPART(item, date) |
SELECT DATEPART(month, '01.01.2005') = 1 (1 = ianuarie) |
DATENAME(item, date) | SELECT DATENAME(weekday,'01.01.2005') = Sanday |
DATEDIFF(item, dat1, dat2) | calculeaza diferenta dintre dat1 si dat2 ,returneaza rezultatul de tip intreg al argumentului item |
DATEADD(i, n, d) | adauga n-unitati indicate in i cu data indicata d |
25. Functiile sir de caractere
- Prelucreaza valorile coloanelor care au tip de date caracter
ASCII (simbol) | codul ASCII al simbolului |
CHAR(numar intreg) | simbol din codul ASCII |
CHARINDEX(z1,z2) | pozitia intiala al subsirului z1 in sirul z2 |
DIFFERENCE(z1, z2) |
returneaza numar intreg intre 0..4 ,care este diferenta intre valorile SOUNDEX al sirurilor z1,z2 SOUNDEX returneaza numarul,care caracterizeaza sonoritatea sirului |
LEFT(z, length) | numarul primelor simboluri, dati de length |
LEN(z) | numarul de simboluri ale lui z |
LOWER(z1) | litere mari in litere mici |
LTRIM(z) | sterge spatiile de la inceput |
NCHAR(i) | returneaza simbolul un Unicode, dat in forma de numar intreg |
QUOTENAME(char_string) | returneaza sirul in Unicode cu adaugarea limitatorului |
PATINDEX(%p%, expr) | returneaza pozitia initiala al primului sablon p din expresia expr |
REPLACE(str1,str2,str3) | Schimba intrarile str2 din str1 cu str3 |
REPLICATE(z, i) | repeta de i ori sirul z |
REVERSE(z) | afiseaza z in ordine inversa |
RIGHT(z,length) | returneaza ultimele length simboluri din sirul z |
RTRIM(z) | sterge spatiile de la sfirsit |
SOUNDEX(a) | returneaza codul SOUNDEX, folosit pentru a determina asemanarile intre doua siruri |
SPACE(length) | returneaza un sir de spatii, cu lungimea length |
STR(f,[len[,d]]) | transforma expresia data in forma cu virgula mobila in sir |
STUFF(z1,a,length,z2) | sterge din z1 length-simboluri,incepind cu pozitia a si pune in locul lor z2 |
SUBSTRING(z,a,length) | scoate din z, incepind cu pozitia a, uin sir de lungime length |
UNICODE(z) | returneaza codul Unicode al primului simbol al siruluiz |
UPPER(z) | litere mici in litere mari |
25. Functiile de sistem
- Prezinta informatia despre obj. BD
- Majoritatea folosesc identificatorul numeric intern (ID),care se atribuie fiecarui obj.
CAST (a AS type [(length)]) | transforma expresia a in tipul de date type |
COALESCE(a1,a2,...) | returneaza prima expresie din lista care nu este NULL |
COL_LENGTH(obj,col) | returneaza lunghimea coloanei |
CONVERT(type[(length)],a) | echivalent CAST |
CURRENT_TIMESTAMP | returneaza data si ora curenta |
CURRENT_USER | returneaza numele userului curent |
DATALENGTH(z) | returneaza numarul de byte ai expresiei z |
GETANSINULL('dbname') | returneaza 1 daca valoarea folosita NULL corespunde standartelor ASCII |
ISNULL(expr,value) | returneaza valoarea expr, daca nu este NULL, in caz contrar returneaza valoarea value |
ISNUMERIC(expresion) | determina daca expresion este numerica |
NEWID() | creaza un identificatorr, destinar pentru pastrarea tipului UNIQUEIDENTIFIER |
NEWSEQUENTITALID() | creaza identificator GUID |
NULLIF(expr1,expr2) | returneaza NULL, daca valorile sunt egale |
SERVERPROPERTY(propertyname) | returneaza iformatia despre proprietatile BD |
USER_ID([user_name]) | returneaza identificatorul utilizatorului user_name |
USER_NAME([id]) | returneaza numele utilizatorului cu identificatorul id |
SYSTEM_USER | returneaza numele utilizatorului curent |
26. Functiile metadatelor
- returneaza informatie despre BD si despre obj
COL_NAME(tab_id, col_id) | returneaza numele coloanei cu identificatorul idicat |
COLUMNPROPERTY(id,col,property) | returneaza informatia despre coloana indicata |
DATABASEPROPERTYEX(database,property) | returneaza valoarea property ai BD |
DB_ID([db_name]) | identificatorul BD |
DB_NAME([db_id]) | numele BD |
INDEX_COL(table, i, no) | numele indext al coloanei din tabel |
INDEXPROPERTY(obj_id,index_name, property) | proprietatile indexului sau statistica pentru identificatorul indicat |
OBJECT_NAME(obj_id) | numel obj. cu identificatorul obj_id |
OBJECT_ID(obj_name) | identificatorul obj_name |
OBJECTPROPERTY(obj_id, property) | informatia despre obj |
27. Operatorii scalari
- Se folosesc pentru lucrul cu valorile scalare
- T-SQL sustine operatiile numerice, logice si concatenarea
- Op. unari: +, -
- Op.binari: +, -, *, / ,%
Op.logici: ~ -- NOT; & -- AND; | -- OR; ^-- XOR;
28. Variabile globale
- Variabile speciale care se folosesc ca constante
- sunt prefixate cu @@
@@CONNECTIONS | numarul de tentative de intrare in sistema, de cind aceasta a fost pornita |
@@CPU_BUSY | timpul de ocupare al procesorului |
@@ERROR | informatia despre valoarea ultimei instructiuni T-SQL |
@@IDENTITY | ultima valoare instrodusa in coloana |
@@LANGID | identificatorul limbei care se foloseste |
@@LANGUAGE | numele limbei care se foloseste |
@@MAX_CONNECTIONS | numarul maxim de conectiuni cu sistema |
@@PROCID | identificatorul procedurii utilizator, folosita in acest moment |
@@ROWCOUNT | numarul de coloane care au fost atinse de ultima instructiune |
@@SERVERNAME | informatia despre serverul local |
@@SPID | indentificatorul procesului server |
@@VERSION | versiunea curenta a SO |
29. Valoarea NULL
- Se folosest cind informatia in celula nu este cunoscuta
- Daca un operand are val. NULL atunci rezultatul este NULL
- NULL != 0