Documente Academic
Documente Profesional
Documente Cultură
Mysql 150 p-4
Mysql 150 p-4
[... ] corespunde oricrui caracter plasat ntre paranteze drepte. Putei specifica un meniu de caractere prin
precizarea extremitilor domeniului, separate printr-o liniu (* Pentru a nega sensul clasei (astfel nct s
corespund tuturor caracterelor care nu se afl j list), specificai * ca prim caracter al clasei:
"abc" REGEXP "[a-z]" ^ 1
"abc" REGEXP "[Aa-z]" ^o
* corespunde oricrui numr de elemente la fel cu cel anterior semnului. De exemplu,: corespunde oricrui
numr de caractere x:
"abcdef" REGEXP "a.*f" o 1
"abc" REGEXP "[0-9]*abc' ^1
"abc" REGEXP " [0-9][0-9]*" <* O
Orice numr" nseamn i zero apariii, motiv pentru care a doua expresie este ac vrat.
'mod i mod$ ancoreaz o coresponden cu un model astfel nct modelul mod punde numai atunci cnd survine
la nceputul sau la sfritul 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, dei aceast operaie va fi mai le dect un model de tip
constant, n cazul n care coloana conine numeroase va diferite. Modelul trebuie examinat i convenit n form
intern de fiecare dat valoarea din coloan se modific.
Stabilirea corespondenelor cu expresiile regulate din MySQL dispune si de alte > tere model speciale. Vezi
Anexa C pentru mai multe informaii.
Precedena operatorilor
Cnd MySQL evalueaz c expresie, examineaz operatorii pentru a determina ordinel care trebuie s grupeze
termenii expresiei. Unii operatori au o preceden mai ridicat,; sunt mai puternici" dect ali1., n sensul c
sunt evaluai naintea altora. De exemjj nmulirea si mprirea au o preceden mai ridicat dect adunarea i
scade Urmtoarele 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
Precedena operatorilor este prezentat n lista urmtoare, n ordine descresctoare^
Operatorii menionai pe aceeai linie au aceeai preceden. Operatorii cu un nivd
preceden mai ridicat sunt evaluai 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
Putei folosi paranteze pentru a ignora precedena operatorilor i pentru a modifica
ordinea n care sunt evaluai termenii unei expresii:
1+2*3-4/5 * 6.2
(1 + 2) * (3 - 4) / 5 * -0.6
Valorile NULL n expresii
Fii atent cnd folosii valoarea NULL n expresii, deoarece rezultatul s-ar putea s nu fie ntotdeauna cel scontat,
ndrumrile urmtoare v vor ajuta s evitai surprizele.
Dac specificai NULL ca operand pentru orice operator aritmetic sau la nivel de bit, rezultatul este NULL:
1 + NULL <* NULL
1 | NULL O NULL
Dac folosii 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 comparaie produce un rezultat NULL, cu
excepia operatorilor <=>, IS NULL i IS NOT NULL, care sunt special concepui 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, funciile returneaz NULL dac primesc argumente NULL, cu excepia acelor funcii concepute
pentru a manipula argumente NULL. De exemplu, IFNULL() poate manipula argumente NULL i returneaz
adevrat" sau fals" n consecin. STRCMP() presupune argumente non-NULL; dac descoper c i-ai
transferat un argument NULL, returneaz NULL, nu adevrat" sau fals".
In cadrul operaiilor 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 sortri 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 operaii pe care o efectuai, ori de
cte 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 funcii la un tip scontat de funcie
Conversia unei valori pentru repartizarea ntr-o coloan de tabel care este de un alt tj
Expresia urmtoare necesit conversia de tip. Expresia const din operatorul de adur i doi operanzi, 1 i "2":
1 + "2"
Operanzii sunt de tipuri diferite (numr si ir), deci MySQL l convertete 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 dorete
ca operanzii s fie numere i coi vertete irul " 2" n numrul 2. Apoi, evalueaz expresia pentru a produce
rezultatul 3.^
Iat un alt exemplu. Funcia CONCAT () concateneaz irurile pentru a produce dref rezultat un ir mai lung.
Pentru aceasta, funcia i interpreteaz argumentele sub for de iruri, indiferent de tipul acestora. Dac i
transferai o mulime de numere, CONCAT(| le va converti n iruri, dup care va returna rezultatul concatenrii
acestora:
CONCAT(1,2,3) <* "123"
Dac apelul la funcia CONCAT face parte dintr-o expresie mai mare, vor mai avea loc alte conversii de tip. S
lum urmtoarea 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 mprirea este un
operator aritmetic. Rezultatul aceste expresii va fi 12.3 ntr-un cone cu virgul mobil, dar funcia REPEAT ()
presupune un numr ntreg de repetri, deciv execut o mprire ntreag pentru a se obine rezultatul 12.
Apoi, func REPEAT(' X' ,12) are ca rezultat un ir format din 12 caractere ' X'.
Un principiu general care trebuie reinut este acela c MySQL ncearc s convertea valorile n tipul cerut de o
expresie, n loc de a genera o eroare, n funcie de cont MySQL va converti valorile fiecreia din cele trei
categorii generale (numere, iruri i date si ore) n valori ale oricreia din celelalte categorii. Totui, 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 eueaz. 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" nj 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.