Home - qdidactic.com
Didactica si proiecte didacticeBani si dezvoltarea cariereiStiinta  si proiecte tehniceIstorie si biografiiSanatate si medicinaDezvoltare personala
referate stiintaSa fii al doilea inseamna sa fii primul care pierde - Ayrton Senna





Aeronautica Comunicatii Drept Informatica Nutritie Sociologie
Tehnica mecanica

Sql


Qdidactic » stiinta & tehnica » informatica » sql
Modelul relational si limbajul SQL



Modelul relational si limbajul SQL


Modelul relational si limbajul SQL


Modelul de date relational sta la baza majoritatii SGBD-urilor comerciale care se folosesc la ora actuala. Popularitatea crescanda a modelului relational si raspandirea tot mai larga a bazelor de date relationale se datoreaza robustetii acestui model precum si faptului ca dispune de limbaje pentru descriere si manipularea datelor de nivel inalt, simple, dar foarte puternice, numite generic limbaje relationale.

Modelul relational implica structurarea datelor sub forma de relatii, care sunt colectii (multimi) de tupluri, fiecare tuplu fiind la randul sau o multime de valori ale atributelor relatiei.



O baza de date relationala este perceputa de utilizatori ca o colectie de tabele bidimensionale care sunt usor de inteles. Corespondenta dintre termenii relationali si termenii folositi de utilizatori:

relatie: tabel;

tuplu: rand (linie, inregistrare) dintr-un tabel;

atribut: coloana (camp);

domeniu: multimea de valori ale unui atribut.

cardinalitate: numarul de linii ale tabelului;

grad: numar de coloane ale tabelului;

cheie primara: identificator unic al unui tuplu intr-un tabel.


Dintre SGBD-urile existente la ora actuala, le vom studia pe cele mai simple, MySQL si Access.


Orice SGBD necesita un limbaj de interogare pentru a permite utilizatorului sa acceseze datele. SQL (Structured Query Language) este limbajul utilizat de majoritatea sistemelor de baze de date relationale.

Limbajul SQL a fost dezvoltat intr-un prototip de sistem de administrare a bazelor de date relationale - System R -de IBM la mijlocul anilor 1970. In anul 1979 corporatia Oracle introduce prima implementare a libmajului SQL in varianta comerciala. In anul 1986 Institutul National American de Standarde (ANSI), a definit standardul limbajului SQL pentru bazele de date relationale. Organizatia Internationala de Standarde (ISO) a adoptat de asemenea SQL ca limbaj standard pentru SGBD-uri relationale, sub denumirea de SQL-92 (sau, mai simplu, SQL2). Toate SGBD-urile relationale suporta diferite variante (dialecte) de SQL si toti producatorii de SGBD trebuie sa se alinieze la standardul ISO, pentru a asigura vanzarea produselor lor.

Limbajul SQL inglobeaza o componenta de descriere a datelor relationale (LDD - Limbaj de Descriere a Datelor, traducere de la DDL- Data Description Language) si o componenta de manipulare a datelor (LMD - Limbaj de Manipulare a Datelor, traducere de la DML - Data Manipulation Language), componentele teoretice necesare in limbajele relationale.

Caracteristicile acestui limbaj sunt:

SQL este prezentat in limba engleza. Foloseste cuvinte (ca select, insert, delete) ca parti ale setului de comenzi.

SQL este un limbaj neprocedural: specifica ce informatii se doresc, nu modul in care cum se obtin. Cu alte cuvinte SQL nu cere sa se specifice metoda de acces la date.

Comenzile (instructiunile) SQL opereaza asupra tabelelor si, in cea mai mare parte a situatiilor, rezultatul returnat este tot un tabel.


Cele mai utilizate comenzi SQL sunt:

CREATE     crearea,

ALTER        modificarea,

DROP          stergerea unor obiecte ale bazei de date (tabele, indecsi, etc)


INSERT      introducerea de linii noi intr-un tabel;

UPDATE     modificarea unora din liniile existente dintr-un tabel;

DELETE     stergerea unor linii dintr-un tabel.


SELECT    este comanda folosita pentru adresarea de cereri (interogari - query) bazelor de date


Pentru scrierea comenzilor SQL trebuie sa fie respectate mai multe reguli:

Comenzile SQL pot fi scrise pe una sau mai multe linii.

Clauzele sunt uzual plasate pe linii separate.

Cuvintele de comanda nu pot fi separate pe mai multe linii.

Comenzile SQL nu sunt 'case sensitive'; totusi, pentru a evidentia sintaxa SQL, in acest indrumr cuvintele-cheie vor fi scrise cu majuscule;


1.1. Structura lexicala a limbajului SQL


O comanda SQL este o secventa de elemente componente (tokens) terminata cu semnul “;”. Un element component poate fi: cuvant cheie (key word), identificator (identifier), constanta (literal) sau un caracter special. Elementele sunt, in general, separate printr-unul sau mai multe spatii albe (whitespace) (caracter spatiu, caracter linie noua sau caracter tab), dar separatorii pot lipsi daca nu exista ambiguitati in secventa de entitati a unei comenzi. O comanda se poate scrie pe una sau mai multe linii, iar intr-o linie se pot introduce una sau mai multe comenzi.


Cuvinte cheie si identificatori. Cuvintele cheie sunt elemente componente cu semnificatie fixa in limbajul SQL. Acestea pot fi comenzi (SELECT, UPDATE, INSERT, etc.), tipuri de date (INTEGER, DECIMAL, NUMERIC, CHAR, etc.) sau cuvinte cerute in anumite pozitii ale unei comenzi (WHERE, SET, VALUES, etc.). De exemplu

SELECT * FROM SECTIE WHERE IdSectie = ‘S1’;


INSERT INTO SECTIE VALUES ( S2’, Productie’, 500);

Toate cuvintele scrise ingrosat (bold) in comenzile de mai sus sunt cuvinte cheie.

Identificatorii sunt elemente componente care denumesc tabele, coloane sau alte obiecte ale bazei de date. In exemplul de mai sus, SECTIE, IdSectie sunt identificatori.

In SQL cuvintele cheie si identificatorii trebuie sa inceapa cu o litera sau caracterul “_” (subliniere – underscore), iar caracterele urmatoare pot fi litere, cifre sau caracterul subliniere. Cuvintele cheie si identificatorii au aceeasi structura lexicala si nu pot fi diferentiati fara a cunoaste limbajul In cuvintele cheie si identificatori nu se diferentiaza caracterele mici de cele mari (sunt case-insensitive), deci comenzile INSERT, insert, sau Insert, etc. sunt identice. Pentru evidentierea tipurilor si a comenzilor SQL acestea vor fi scrise in continuare, totusi, cu majuscule.

Pe langa acest fel de identificatori (formati dintr-o secventa de litere, cifre si caracterul subliniere), mai exista si un alt tip de identificatori, identificatorii delimitati (quoted identifiers), constand dintr-o secventa de caractere incadrata (la inceput si la sfarsit) de caracterul dublu apostrof (“). Un identificator delimitat este intotdeauna identificator (niciodata cuvant cheie), iar literele mari sunt diferite de literele mici (este case-sensitive). De exemplu, elementul “SELECT” este un identificator delimitat si poate denumi un tabel sau o coloana (atribut), in timp ce elementul SELECT este un cuvant cheie si utilizarea lui ca nume de tabel sau de atribut va produce o eroare de interpretare a comenzii.

Un identificator delimitat poate contine orice caracter cu exceptia caracterulul dublu apostrof, permitand crearea unor nume (de tabele, coloane, etc.) mai complexe, care sa contina spatii sau caractere speciale ( &, %, etc.), ceea ce cu identificatori obisnuiti (ne-delimitati) nu este posibil.


Constante. Constantele (literale) pot fi siruri de caractere, numere intregi sau numere reale. Ele se reprezinta aproximativ la fel ca in alte limbaje de programare (de exemplu C/C++).

O constanta sir de caractere consta dintr-o secventa de caractere delimitata (la inceput si la sfarsit) cu cate un caracter apostrof simplu: ‘Acesta este un sir’. Caracterul apostrof simplu dintr-o constanta sir se poate reprezinta prin dublare sau precedat de caracterul backslash.

O constanta de tip intreg consta dintr-o secventa de cifre zecimale (de la 0 la 9) si semn (care poate sa lipseasca daca numarul este pozitiv); in memorie este stocata pe 4 octeti (32 de biti) si are gama de reprezentare de la -2147483648 la +2147483647.

O constanta numar real (cu virgula flotanta) se poate introduce intr-una din urmatoarele forme:

cifre.[cifre][e[+-]cifre]

[cifre].cifre[e[+-]cifre]

cifree[+-]cifre

unde cifre reprezinta o secventa de cifre zecimale (de la 0 la 9), e este exponentul, iar partile incadrate intre paranteze drepte sunt optionale. De exemplu: 3.5; 4.; .001; 5e2; 1.925e-3; sunt constante reale. In memorie, constantele reale sunt reprezentate ca numere cu virgula mobila, dubla precizie


Caractere speciale. Unele caractere care nu sunt litere sau cifre pot avea rol de operatori SQL sau pot avea o semnificatie speciala in cadrul comenzilor SQL. De exemplu, caracterul punct si virgula (;) este folosit pentru terminarea comenzilor; caracterul punct (.) este folosit ca punct zecimal sau pentru calificarea numelor; caracterul asterix (*) este folosit ca operator de inmultire sau la selectii; etc. Astfel de caractere vor fi prezentate gradat de-a lungul lucrarii, atunci cand sunt descrise comenzile in care intervin.


Operatori. Un operator este compus dintr-unul sau mai mai multe caractere speciale (care nu sunt litere sau cifre), ca de exemplu: + - * / % < > = ~ ! @ # & | ^ ? ‘ $, sau este un cuvint cheie (ca de exemplu: AND, OR, NOT, BETWEEN, etc.). Un operator poate fi invocat intr-una din urmatoarele trei forme:

expresie operator expresie (pentru operatorii binari)

operator expresie (pentru operatorii unari prefix)

expresie operator (pentru operatorii unari postfix)

O expresie SQL consta dintr-un operand sau dintr-o secventa de operanzi, operatori si paranteze. Un operand poate fi numele unei coloane (a unui tabel), o constanta (literal); parantezele sunt folosite pentru a preciza ordinea operatiilor, daca acesta nu este cea implicita, data de precedenta operatorilor.

Operatorii folositi in limbajul SQL pot fi aritmetici (matematici), logici, de comparatie SQL, sau relationali.

Operatorii aritmetici ai limbajului SQL2 sunt compusi din unul sau mai multe caractere speciale si au notatie si semnificatie asemanatoare cu a celor definiti in diferite limbaje de programare, cu mici diferente care se pot remarca din lista de mai jos. Operatorii aritmetici binari sunt: + (adunarea), - (scaderea), * (inmultirea), / (impartirea) % (modulo), ^ (ridicarea la putere), & (AND orientat pe biti), | (OR orientat pe biti), # (XOR orientat pe biti) , << (deplasarea la stanga), >> (deplasarea la dreapta). Tot operatori aritmetici sunt si operatorii binari de comparatie: < (mai mic), > (mai mare), <= (mai mic sau egal), >= (mai mare sau egal), = (egal), <> (sau !=) (diferit). Operatorii aritmetici unari sunt: @ (valoarea absoluta), ! (factorial), !! (factorial, operator postfix), ~ (NOT orientat pe biti).

Operatorii logici ai limbajului SQL2 sunt notati prin cuvinte cheie: AND, OR, NOT. Toti acesti operatori se aplica unor variabile logice cu 3 valori (trivalente): TRUE (1), FALSE (0) si NULL, valoarea NULL avand semnificatie de lipsa de informatie. Operatorii logici SQL returneaza o valoare logica trivalenta (TRUE, FALSE sau NULL), asa cum se poate vedea din tabelele de adevar date mai jos.


A

B

A AND B

A OR B


A

NOT A

TRUE

TRUE

TRUE

TRUE


TRUE

FALSE

TRUE

FALSE

FALSE

TRUE


FALSE

TRUE

TRUE

NULL

NULL

TRUE


NULL

NULL

FALSE

FALSE

FALSE

FALSE




FALSE

NULL

FALSE

NULL




NULL

NULL

NULL

NULL





Operatorii de comparatie SQL sunt urmatorii:

A BETWEEN min AND max compara valoarea A cu doua valori, min si max (inclusiv),

fiind echivalent cu expresia: A>= min AND A<=max

A IN (v1, v2, …)         compara valoarea A cu o lista de valori (v1, v2, …)

A IS NULL (IS NOT NULL)      compara valoarea A cu NULL (sau NOT NULL)

A LIKE model_sir             compara valoarea A cu un model de sir de caractere;

rezultatul este TRUE daca in A exista un subsir identic cu cel din model

In constanta model_sir, caracterul % semnifica orice subsir posibil; de exemplu, expresia: ‘reluare’ LIKE ‘%lua%’ are valoarea TRUE.

Pentru operatorii de comparatie, valoarea de comparat (A) este, de regula, valoarea unui atribut al unui tuplu al unei relatii, dat prin numele coloanei corespunzatoare a tabelului care reprezinta relatia respectiva, o constanta, sau valoarea unei expresii. Operatorii de comparatie (atat cei aritmetici, cat si operatorii de comparatie specifici limbajului SQL), returneaza (evalueaza) valoarea booleana TRUE (1), daca conditia de comparatie este indeplinita si FALSE (0) daca conditia de comparatie nu este indeplinita. Valoarea NULL este returnata daca ambii operanzi comparati au valoarea NULL.


Operatorii relationali sunt notati prin cuvintele cheie: UNION (reuniune), INTERSECT (intersectie), MINUS (diferenta). Ei vor fi studiati pe larg in lucrarea privind algebra relationala.


1.2. Domenii si tipuri de date SQL2


Domeniile atributelor se definesc pe baza tipurilor de date predefinite ale limbajului SQL.

In limbajul SQL (standardul SQL2) sunt predefinite mai multe tipuri de date: numeric, sir de caractere, data (calendaristica), timp, etc. Denumirile tipurilor de date, ca si limitele acestora (valoare minima, valoare maxima) prezinta diferite variatii in functie de implementare (versiunea de SGBD), dar in general sunt destul de asemanatoare. In toate specificatiile de sintaxa, parantezele drepte [..] sunt folosite pentru parametrii optionali ai unei comenzi.


Tipul numeric include numere intregi de diferite dimensiuni (INTEGER sau INT reprezentat pe 4 octeti, SMALLINT, reprezentat pe 2 octeti), numere reale reprezentate in virgula flotanta, cu diferite precizii (FLOAT, reprezentat pe 4 octeti, REAL si DOUBLE [PRECIZION] reprezentat pe 8 octeti) si numere zecimale reprezentate cu precizia dorita (tipul NUMERIC sau DECIMAL).

Formatul de reprezentare a numerelor zecimale cu precizia dorita este: NUMERIC [(p,s)] (sau DECIMAL [(p,s)]), unde p (precizia) este numarul total de cifre afisate, iar s (scara) este numarul de cifre dupa punctul zecimal. In reprezentarea acestui tip de date poate sa lipseasca parametrul s si atunci se considera s = 0 (nici-o cifra dupa punctul zecimal), sau pot lipsi ambii parametri si, in acest caz, se pot reprezenta numere cu orice precizie si scara (pana la limita admisa de implementarea sistemului). Pentru a pastra precizia dorita, numerele de tip DECIMAL sau NUMERIC sunt memorate ca sir de caractere, fiecare caracter reprezentand o cifra zecimala, punctul zecimal sau semnul.


Tipul sir de caractere permite definirea sirurilor de caractere de lungime fixa (CHAR(n) sau CHARACTER(n)), precum si a sirurilor de caractere de lungime variabila (VARCHAR(n)). Ambele tipuri pot reprezenta siruri de maximum n caractere, cu diferenta ca, pentru siruri de lungime mai mica decat n, la tipul CHAR(n) se completeaza sirul cu spatii albe pana la n caractere, in timp ce la tipul VARCHAR(n) se memoreaza numai atatea caractere cate are sirul dat.


Tipul data calendaristica (DATE) contine zece pozitii cu trei componente, an, luna, zi, in formatul yyyy-mm-dd, adica 4 pozitii pentru an, 2 pozitii pentru luna, 2 pozitii pentru zi, componentele fiind despartite prin linii. Sunt admise numai date valide (adica valori pozitive diferite de zero, luna 12, etc.).


Tipul timp (TIME) are formatul HH:MM:SS (ora, minut, secunda) si, de asemenea, se admit numai valori valide.


Pe langa aceste tipuri definite in standardul SQL2, implementarile limbajului SQL in diferite SGBD-uri prezinta variante de tipuri de date specifice implementarii respective. De exemplu, SQL implementat de SGBD Ingres adauga tipul INTEGER1, ca numar intreg reprezentat pe 1 octet (SMALLINT fiind reprezentat pe 2 octeti, iar INTEGER pe 4 octeti); in SGBD Oracle7, tipul sir de caractere de lungime variabila este numit VARCHAR2, etc.


1. 3. Functii definite in limbajul SQL2


In SQL2 sunt definte mai multe categorii de functii:

Functii agregat (totalizatoare)

Functii matematice

Functii pentru manevrarea sirurilor de caractere

Functii pentru data calendaristica si ora

Functii de conversie

Functii diverse


Functiile agregat calculeaza un rezultat din mai multe linii ale unui tabel. Aceste functii vor fi detaliate in paragraful urmator, la descrierea comenzii SELECT. Toate celelalte categorii de functii se folosesc in expresii (care pot sa apara in mai multe clauze ale comenzilor SQL) si primesc unul sau mai multe argumente, returnand valoarea calculata, sau NULL, in caz de eroare. Majoritatea versiunilor de SQL furnizeaza functii de calcul trigonometric (sin, cos, etc.), functii de calcul al logaritmului (ln, log), al puterii (pow), functii de rotunjire (floor, ceil), etc. Argumentele functiilor pot fi constante (literale) sau valori ale atributelor specificate prin numele coloanelor corespunzatoare.




Contact |- ia legatura cu noi -| contact
Adauga document |- pune-ti documente online -| adauga-document
Termeni & conditii de utilizare |- politica de cookies si de confidentialitate -| termeni
Copyright © |- 2024 - Toate drepturile rezervate -| copyright