Sunteți pe pagina 1din 6

1

Capitolul III.
DEFINIREA I INTEROGAREA DATELOR FOLOSIND LIMBAJUL SQL
3.1 Tipuri de date
3.2 Instruciuni DDL (Data Definition Language)
3.3 Instruciuni DQL
3.4 Interogri din tabele multiple

Convenii de sintax folosite n acest capitol
Instruciunile SQL DDL au mai multe opiuni dect alte instruciuni SQL. De aceea, am adoptat
n acest capitol urmtoarele convenii pentru a prezenta sintaxa instruciunilor DDL:
Cuvintele cheie i cuvintele rezervate din SQL sunt scrise cu majuscule, cum ar fi
CREATE TABLE.
Informaiile pe care ar trebui s le furnizai la scrierea instruciunilor sunt scrise cu italice, cum
ar fi nume_coloan.
Elementele opionale sunt ncadrate n paranteze ptrate, cum ar fi [WITH TIME ZONE].
Opiunile dintr-o list de elemente posibile sunt separate de o bar verticala (simbolul logic
pentru sau"), cum ar fi TABLE | VIEW | INDEX.
Elementele de grup care sunt explicate sau analizate ulterior pe componente (de obicei dup
descrierea unui tip principal de instruciune) sunt ncadrate de caracterele mai mic dect" i
mai mare dect", cum ar fi <specificaii_pentru_coloan>
Un element care se poate repeta este urmat de trei puncte, cum ar fi [,<restricie_pentru_tabel>...].
Toate celelalte simboluri, n special virgulele i parantezele, fac parte din sintaxa
SQL obligatorie i, ca urmare, trebuie s fie incluse aa cum sunt scrise n coninutul cursului.

3.1 Tipuri de date

Tipurile de date care apar n coloanele MySQL sunt diferite n funcie de tipul lor. MySQL aloc
spaiu pe disc n funcie de tipul de date specificat de utilizator.
SQL accept trei categorii de tipuri de date:
tipuri predefinite: furnizate de ctre productor ca parte nativa a sistemului RDBMS
tipuri construite: tipuri de colecii, conin matrice sau seturi de tipuri de date predefinite
tipuri definite de utilizator: permit utilizatorului bazei de date s defineasc propriile tipuri de
date, adaptate unor scopuri specifice.

3.1.1 Tipuri de date pentru caractere
Tipurile de date pentru caractere conin iruri de caractere, adic litere, cifre i alte simboluri
permise de sistemul de calcul pe care se afl baza de date. De exemplu, este mai bine s stocai
numerele de telefon, codurile potale, numerele de asigurri sociale, CNP i alte numere de acest gen
ca iruri de caractere.
Tipurile de date standard pentru caractere sunt:
Caracter cu lungime fix. Un ir de caractere cu lungime finit. Lungimea
este specificat ntotdeauna, indicnd dimensiunea irurilor de caractere stocate.
irurile de caractere mai scurte sunt completate la dreapta cu spaii, astfel nct
2
toate irurile de caractere dintr-o coloan de acest tip de date s aib aceeai
lungime n numr de caractere. Sintaxa SQL este:
CHARACTER (lungime) | CHAR(lungime)
Exemplu: CNP CHAR(13)
Caracter naional. O variant a tipului de date CHARACTER, stocat ntr-un
set de caractere al unei anumite limbi. Acest tip de date poate fi folosit pentru
traducerea irurilor de caractere n diferite limbi. Sintaxa SQL este:
NATIONAL CHARACTER(lungime) | NCHAR(lungime)
Exemplu: MOVIE_TITLE NCHAR(100)
Caracter variabil. Un ir de caractere cu lungime variabil. Lungimea este
specificat ntotdeauna, indicnd dimensiunea maxim a irurilor de caractere
stocate. Sintaxa SQL este:
CHARACTER VARYING(lungime_maxim) | VARCHAR(lungime_maxim)
Exemplu: CUSTOMER_NAME VARCHAR(125)
Caracter naional variabil. O variant a tipului de date pentru iruri de
caractere cu lungime variabil, stocat ntr-un set de caractere al unei anumite
limbi. Sintaxa SQL este:
NATIONAL CHARACTER VARYING(lungime_maxim) | NVARCHAR(lungime_maxim)
Exemplu: MOVIETITLE NVARCHAR(100)

Tipurile de string-uri (iruri) n MySQL sunt BLOB (un obiect binar mic), TEXT (un ir text
mic), CHAR (ir de caractere de lungime fix), VARCHAR (ir de caractere de lungime variabil),
ENUM (o enumerare; coloanelor li se poate atribui un membru al enumerrii) i SET (un set;
coloanelor li se pot atribui mai muli membri ai unui set). n tabelul urmtor putei vedea mrimea
maxim admis pentru cele mai folosite dintre ele precum i spaiul alocat pe disc pentru fiecare:
Tip Mrime maxim Bytes
TINYTEXT (ir text foarte mic) sau
TINYBLOB (obiect binar foarte mic)
2^8-1 255
TEXT sau BLOB 2^16-1 (64K-1) 65535
MEDIUMTEXT (ir text de dimensiuni medii) sau
MEDIUMBLOB (obiect binar de dimensiuni medii)
2^24-1 (16M-1)
1677721
5
LONGBLOB (obiect binar de dimensiuni mari) 2^32-1 (4G-1)
4294967
295

Observaie: Cmpul de tip BLOB poate conine o cantitate variabil de informaie, similar cu
TEXT ns diferit printr-un singur aspect: cutarea ntr-un cmp BLOB este case sensitive (se face
diferena ntre majuscule i minuscule), iar ntr-un cmp TEXT nu este. Tipul VARCHAR este similar
tipului TEXT cu deosebirea c ntr-o coloan de tip VARCHAR putem specifica numrul maxim de
caractere admis.

3.1.2 Tipuri de date numerice
Aa cum sugereaz i numele, tipurile de date numerice stocheaz numai numere. Acestea sunt
utile mai ales pentru atributele folosite n calcule. Ca regul general, majoritatea proiectanilor de
3
baze de date folosesc tipuri numerice numai pentru atributele care urmeaz s fie folosite n calcule
matematice, cum ar fi preuri, cantiti i taxe procentuale.
Tipurile numerice standard sunt:
Numeric: Un tip numeric exact care include o precizie i o scal. Sintaxa SQL este:
NUMERIC(precizie, scal)
Exemplu: EMPLOYEE_HOURLY_RATE NUMERIC(5,2)
n sistemul MySQL tipul de dat numeric apare sub forma:
- FLOAT - un numr cu virgul mobil n simpl precizie;
- DOUBLE - un numr cu virgul mobil n dubl precizie;
Zecimal: Un tip numeric exact care include o precizie i o scal. Totui,
precizia folosit de fapt de DBMS va fi egal sau mai mare dect precizia
specificat. Aceasta este o diferen subtil faa de tipul NUMERIC, avnd
scopul de a permite maparea tipului DBMS cu un tip nativ al platformei pe care
ruleaz sistemul DBMS. (O platform este o combinaie ntre un sistem de operare i un sistem
hardware, cum ar fi Windows XP pe Intel, Linux pe Intel sau Solarix pe Sun.) Sintaxa SQL este:
DECIMAL(precizie, scal). Acest tip de dat este tratat de sistemul MySQL ca un numr cu
virgul mobil reprezentat sub form de ir.
Exemplu: EMPLOYEE_HOURLY_RATE DEC IMAL (5,2)
ntreg: Un tip numeric exact care include numai precizia, scris INTEGER sau INT. Numerele
ntregi nu au cifre zecimale, aa c scala nu este necesar, deoarece este ntotdeauna zero.
Sintaxa SQL este:
INTEGER(precizie) | INT(precizie)
Exemplu: CUSTOMER_ACCOUNT_ID INTEGER(11)

n MySQL, putei ntlni urmtoarele tipuri de date numerice ntregi:
Valori numerice:
Tip Bytes De la Pn la
TINYINT (ntreg foarte mic) 1 - 128 127
SMALLINT (ntreg mic) 2 - 32768 32767
MEDIUMINT (ntreg de dimensiune medie) 3 - 8388608 8388607
INT (ntreg standard) 4 - 2147483648 2147483647
BIGINT (ntreg mare) 8 - 9223372036854775808 9223372036854775807


Observaie: Toate tipurile de mai sus au un atribut opional (nestandard), UNSIGNED. Putei
folosi acest atribut n definirea tipului de date al unei coloane atunci cnd dorii s conin doar valori
pozitive. Un cmp de tip TINYINT va putea conine numere ntre -128 i 127 n timp ce alt cmp,
TINYINT UNSIGNED va putea avea valori ntre 0 i 255. La fel, pentru SMALLINT valorile sunt de
la -32768 pn la 32767 n timp ce pentru SMALLINT UNSIGNED ele pot fi ntre 0 i 65535.
Dac ntr-un cmp TINYINT care are valori ntre -128 i 127 vei ncerca s introducei o valoare mai
mica de -128 ea va fi convertit n cea mai mica valoare admis, -128. La fel i invers, va fi convertit
n 127 n acest caz.

3.1.3 Tipuri de date temporale
Aa cum sugereaz i numele, tipurile de date temporale (numite i tipuri pentru date i ore)
4
stocheaz date care msoar timpul, ntr-un mod oarecare. Aa cum am menionat anterior, standardele
pentru aceste tipuri de date au rmas n urma bazelor de date comerciale, aa c majoritatea sistemelor
DBMS nu se conformeaz n totalitate standardului.
Tipurile de date temporale conin urmtoarele componente, numite de standard cmpuri.

Numele cmpului (cuvnt cheie SQL) Definiie
YEAR Anul calendaristic, pe dou sau patru cifre
MONTH Luna din an
DAY Ziua din lun
HOUR Ora din zi
MINUTE Minutul din or
SECOND Secunda din minut
TIMEZONEHOUR Valoarea orei cu diferena de fus orar (zon orar). De exemplu, Pacific
Standard Time nseamn +8 ore fa de UTC (Coordinated Universal Time).
TIMEZONEMINUTE Valoarea minutului cu diferena de fus orar (zon orar). De obicei este zero,
dar exist pe glob cteva zone orare cu diferene de jumtate de or.

Cmpurile TIMEZONE_HOUR i TIMEZONE_MINUTE sunt incluse n toate tipurile de date
temporale pentru care este specificat cuvntul cheie WITH TIMEZONE.

Tipurile de date temporale sunt:
Data. O dat calendaristic, incluznd cmpurile YEAR, MONTH i DAY.
Sintaxa SQL este:
DATE [WITH TIMEZONE]
Exemplu: DATE_ENROLLED DATE
Ora. Un tip de date pentru or, incluznd cmpurile HOUR, MINUTE i
SECOND. Sintaxa SQL este:
TIME [WITH TIMEZONE]
Exemplu: TIME_ENROLLED TIME
Marc temporal. Un tip de date combinat pentru dat i or, incluznd cmpurile YEAR,
MONTH, DAY, HOUR, MINUTE i SECOND. Sintaxa SQL este:
TIMESTAMP [WITH TIMEZONE]
Exemplu: DATETIMEENROLLED TIMESTAMP
I nterval. Un interval de timp, incluznd cmpurile specificate printr-un calificator de interval
(interval qualifier), care, n esen, reprezint precizia intervalului. Sintaxa SQL este:
INTERVAL cmpdestart TO cmpdesfrit | INTERVAL cmp
Exemple: MEMBERSHlPDURATIONINTERVAL YEAR TO DAY
TIMEWORKED INTERVAL HOUR TO MINUTE
RENTALDAYS INTERVAL DAY

n MySQL, vei ntlni urmtoarele tipuri de date temporale
Dat / timp:
Column type Format
DATETIME (o valoare pentru dat i or) 'YYYY-MM-DD hh:mm:ss'
DATE (o valoare pentru dat) 'YYYY-MM-DD'
5
TIMESTAMP (o valoare pentru amprenta de timp) 'YYYYMMDDhhmmss'
TIME (o valoare pentru timp) 'hh:mm:ss'
YEAR (o valoare pentru an) 'YYYY'


Observaie: Tipul de cmp TIMESTAMP ofer posibilitatea de a data automat operaiile de tip
INSERT i UPDATE. El este compus implicit din 14 caractere pentru formatul
'YYYYMMDDhhmmss' dar putem s specificm la crearea unui tabel c dorim s conin mai puine
caractere.
Timestamp
Column type Display format
TIMESTAMP(14) YYYYMMDDHHMMSS
TIMESTAMP(12) YYMMDDHHMMSS
TIMESTAMP(10) YYMMDDHHMM
TIMESTAMP(8) YYYYMMDD
TIMESTAMP(6) YYMMDD
TIMESTAMP(4) YYMM
TIMESTAMP(2) YY


3.1.4 Tipuri de date pentru obiecte mari
Obiectele mari permit stocarea unor date care depesc cu mult posibilitile de stocare ale
tipurilor de date prezentate pn acum, ajungnd deseori la dimensiuni de civa megaoctei.
Obiect mare pentru caractere. Un obiect mare pentru caractere, scris n SQL sub forma CLOB.
Obiect mare pentru caractere n format naional. Un obiect mare pentru caractere, stocat ntr-
o anumit limb, scris n SQL sub forma NLOB.
Obiect mare binar. Un obiect mare care conine date binare, cum ar fi o imagine sau o
secven sonor, scris n SQL sub forma BLOB.

3.1.5 Tipul de date logic
Exist un tip standard de date care nu este ncadrat n nici una dintre categoriile prezentate
anterior:
Boolean. Stocheaz o valoare logic adevrat sau fals. Sintax SQL este:
BOOLEAN
Exemplu: PREFERRED_CUSTOMER BOOLEAN

Observaie: MySQL stocheaz fizic datele unui tabel ntr-un fiier pe hard disc i cu ct tabelul e
mai mare, cu att mrimea acestui fiier crete. Versiunea 3.22 a MySQL are o limit de 4 GB pentru
mrimea unui tabel. n versiunile superioare aceast limit este extins pn la 8 milioane TB pentru
tipul de tabel MyISAM. Cu toate acestea, sistemele de operare pot avea propriile limitri ale mrimii
fiierelor. Mrimea implicit a tabelelor MySQL este de aproximativ 4 GB. Putei verifica mrimea
maxim pentru un tabel cu ajutorul comenzii SHOW TABLE STATUS. Pe platforma Windows va
trebui s folosii sistemul de fiiere NTFS dac dorii s avei tabele mai mari de 4 GB.

Tabelul urmtor prezint n ncheierea acestui paragraf cele mai folosite tipuri de date n sistemul
6
de management a bazelor de date MySQL.
Tip Semnificaie
int() numr ntreg 32 bii
bigint() numr ntreg 64 bii
tinyint() numr ntreg (-128 la 127 sau 0 la 255) 8 bii
mediumint() numr ntreg 24 bii
smallint() numr ntreg 16 bii
char() seciune cu lungime fix de la 0 la 255 caractere
varchar() seciune cu lungime variabil de la 0 la 255 caractere
float() numr mic cu virgul flotant
double numr mare cu virgul flotant
text ir cu maximum 65535 caractere
date() data n format YYYY-MM-DD
date data n format YYYY-MM-DD HH:MM:SS
time ora n format HH:MM:SS

Observaie: Pentru ca baza de date s funcioneze mai bine coloanelor li se pot aduga
modificatori de coloan. Tipul de date ntregi ncepe de la valori negative la pozitive. Dac se adaug
opiunea UNSIGNED, care este un modificator de coloan, nu vor mai fi valori negative ci vor ncepe
de la 0. Ali modificatori sunt: AUTO_INCREMENT funcioneaz cu orice tip ntreg. La fiecare rnd
nou adugat n baza de date numrul asociat va fi incrementat. NULL nseamn fr valoare (diferit de
spaiu sau zero). NOT NULL inseamn c orice nregistrare va fi considerat ceva. PRIMARY KEY
este rolul primei coloane din tabel, totodat reprezentand elementul de referin pentru fiecare linie.

S-ar putea să vă placă și