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