Documente Academic
Documente Profesional
Documente Cultură
[... ] corespunde oricărui caracter plasat între paranteze drepte. Puteţi specifica un meniu de caractere prin
precizarea extremităţilor domeniului, separate printr-o liniuţă (* Pentru a nega sensul clasei (astfel încât să
corespundă tuturor caracterelor care nu se află j listă), specificaţi * ca prim caracter al clasei:
"abc" REGEXP "[a-z]" ^ 1
"abc" REGEXP "[Aa-z]" ^o
* corespunde oricărui număr de elemente la fel cu cel anterior semnului. De exemplu,: corespunde oricărui
număr de caractere x:
"abcdef" REGEXP "a.*f" o 1
"abc" REGEXP "[0-9]*abc' ^1
"abc" REGEXP " [0-9][0-9]*" <* O
„Orice număr" înseamnă şi zero apariţii, motiv pentru care a doua expresie este ac vărată.
'mod şi mod$ ancorează o corespondenţă cu un model astfel încât modelul mod punde numai atunci când survine
la începutul sau la sfârşitul unui şir, iar "mod$ cor punde numai dacă mod corespunde întregului şir:
"abc" REGEXP "b" <* 1
"abc" REGEXP "'b" * O
"abc" REGEXP "b$" oO
"abc" REGEXP "Aabc$" o 1
"abcd" REGEXP "Aabc$" •* O
Modelul REGEXP poate fi luat din coloana unui tabel, deşi această operaţie va fi mai le decât un model de tip
constantă, în cazul în care coloana conţine numeroase va diferite. Modelul trebuie examinat şi convenit în formă
internă de fiecare dată valoarea din coloană se modifică.
Stabilirea corespondenţelor cu expresiile regulate din MySQL dispune si de alte > tere model speciale. Vezi
Anexa C pentru mai multe informaţii.
Precedenţa operatorilor
Când MySQL evaluează c expresie, examinează operatorii pentru a determina ordineăl care trebuie să grupeze
termenii expresiei. Unii operatori au o precedenţă mai ridicată,; sunt mai „puternici" decât alţi1., în sensul că
sunt evaluaţi înaintea altora. De exemjj înmulţirea si împărţirea au o precedenţă mai ridicată decât adunarea şi
scade Următoarele două expresii sunt echivalente, deoarece * şi / sunt evaluate înainte de + $L 3
1+2*3-4/5 •* 6.2
1 + 6 - .8 t* 6.2
Precedenţa operatorilor este prezentată în lista următoare, în ordine descrescătoare^
Operatorii menţionaţi pe aceeaşi linie au aceeaşi precedenţă. Operatorii cu un nivd
precedenţă mai ridicat sunt evaluaţi înaintea operatorilor cu un nivel de precedenţă i
redus.
BINARY
NOT !
- (minus unar)
Capitolul 2 Lucrul cu date în MySQL şi SQL 151
/%
&
<<==<=> i= <> >= > IN IS LIKE REGEXP RLIKE
BETWEEN
AND &&
OR II
Puteţi folosi paranteze pentru a ignora precedenţa operatorilor şi pentru a modifica
ordinea în care sunt evaluaţi termenii unei expresii:
1+2*3-4/5 * 6.2
(1 + 2) * (3 - 4) / 5 * -0.6
Valorile NULL în expresii
Fiţi atent când folosiţi valoarea NULL în expresii, deoarece rezultatul s-ar putea să nu fie întotdeauna cel scontat,
îndrumările următoare vă vor ajuta să evitaţi surprizele.
Dacă specificaţi NULL ca operand pentru orice operator aritmetic sau la nivel de bit, rezultatul este NULL:
1 + NULL <* NULL
1 | NULL O NULL
Dacă folosiţi NULL cu un operator logic, valoarea NULL este considerată falsă:
1 AND NULL O O
1 OR NULL O 1
O AND NULL •* O
0 OR NULL ^ O
NULL ca operand pentru orice operator de comparaţie produce un rezultat NULL, cu
excepţia operatorilor <=>, IS NULL şi IS NOT NULL, care sunt special concepuţi pentru manipularea valorilor
NULL:
1 = NULL O NULL NULL = NULL
•* NULL 1 <=> NULL O O NULL <=> NULL
•* 1
1 IS NULL <* 0
NULL IS NULL •* 1
In general, funcţiile returnează NULL dacă primesc argumente NULL, cu excepţia acelor funcţii concepute
pentru a manipula argumente NULL. De exemplu, IFNULL() poate manipula argumente NULL şi returnează
„adevărat" sau „fals" în consecinţă. STRCMP() presupune argumente non-NULL; dacă descoperă că i-aţi
transferat un argument NULL, returnează NULL, nu „adevărat" sau „fals".
In cadrul operaţiilor de sortare, valorile NULL se grupează la un loc. NULL este plasat, după sortare, înaintea
tuturor valorilor non-NULL (inclusiv şirul vid) în cazul unei sortări ascendente, respectiv după toate aceste
valori la o sortare descendentă.
"VC&fV.
m*m-"->-
••• -'V'"*;.
&w?5
152 Partea l Utilizarea generală a sistemului MySQL
Conversia de tip
MySQL execută automat conversii masive de tip, în conformitate cu genul de operaţii pe care o efectuaţi, ori de
câte ori o valoare de un tip este folosită într-un context cari necesită o valoare de un alt tip. Conversia de tip se
poate produce din oricare din urmă| toarele motive:
• Conversia operanzilor la un tip adecvat pentru evaluarea unui operator
• Conversia argumentului unei funcţii la un tip scontat de funcţie
• Conversia unei valori pentru repartizarea într-o coloană de tabel care este de un alt tîj
Expresia următoare necesită conversia de tip. Expresia constă din operatorul de adur şi doi operanzi, 1 şi "2":
1 + "2"
Operanzii sunt de tipuri diferite (număr si şir), deci MySQL îl converteşte pe unul pent a-i aduce la un numitor
comun. Dar care este operandul care trebuie modificat? în: caz, + este un operator numeric, deci MySQL doreşte
ca operanzii să fie numere şi coi verteşte şirul " 2" în numărul 2. Apoi, evaluează expresia pentru a produce
rezultatul 3.^
Iată un alt exemplu. Funcţia CONCAT () concatenează şirurile pentru a produce dref rezultat un şir mai lung.
Pentru aceasta, funcţia îşi interpretează argumentele sub for de şiruri, indiferent de tipul acestora. Dacă îi
transferaţi o mulţime de numere, CONCAT(| le va converti în şiruri, după care va returna rezultatul concatenării
acestora:
CONCAT(1,2,3) <* "123"
Dacă apelul la funcţia CONCAT face parte dintr-o expresie mai mare, vor mai avea loc alte conversii de tip. Să
luăm următoarea expresie şi rezultatul ei:
REPEATCX'.CONCATH^.SJ/IO) ^> 'XXXXXXXXXXXX"
CONCAT (1,2,3) produce şirul" 123". Expresia " 123" /10 este convertită în 123 /10, deoa împărţirea este un
operator aritmetic. Rezultatul aceste expresii va fi 12.3 într-un cone cu virgulă mobilă, dar funcţia REPEAT ()
presupune un număr întreg de repetări, deciv execută o împărţire întreagă pentru a se obţine rezultatul 12.
Apoi, func REPEAT(' X' ,12) are ca rezultat un şir format din 12 caractere ' X'.
Un principiu general care trebuie reţinut este acela că MySQL încearcă să convertea valorile în tipul cerut de o
expresie, în loc de a genera o eroare, în funcţie de cont MySQL va converti valorile fiecăreia din cele trei
categorii generale (numere, şiruri i date si ore) în valori ale oricăreia din celelalte categorii. Totuşi, valorile nu
pot fi înţ deauna convertite dintr-un tip în altul. Dacă o valoare care trebuie convertită într-un t dat nu este o
valoare admisă pentru tipul respectiv, conversia eşuează. Conversia^ numere a unor obiecte precum " abc" care
nu prezintă un aspect numeric are ca re valoarea 0.
Conversia în tipuri dată şi oră a unor obiecte care au aspectul unor date sau ore rezultat valoarea „zero" pentru
tipul respectiv. De exemplu, conversia şirului "abc" înţj dată are ca rezultat data de tip zero "0000-00-00". Pe de
altă parte, orice valoare poat? tratată sub forma unui şir, deci în general conversia unei valori într-un şir nu
constitute problemă.