- Invatati principalele expresii si functii folosite in MySQL
- Invatati sa preluati datele, prin "unire", din mai multe tabele
- Invatati sa executati instructiuni MySQL scrise intr-un fisier extern
1. Expresii si functii
SQL va permite sa formati expresii folosind valori din coloane, valori literale si functii. Ca si în PHP, puteti controla ordinea de evaluare a expresiilor SQL folosind paranteze pentru a delimita sub-expresiile care trebuie evaluate mai intai.
Tabelele urmatoare rezuma functiile MySQL frecvent folosite
Functii matematice frecvent folosite în MySQL |
Functie |
Descriere |
abs(x) |
- Valoarea absoluta a lui x |
atan(x) |
- Arc tangenta lui x, unde x este dat în radiani |
atan2(y,x) |
- Arc tangenta lui y/x, unde semnele ambelor argumente sunt folosite pentru a determina cadranul cercului trigonometric |
ceiling(x) |
- Cel mai mic întreg care nu este mai mic decât x |
cos(x) |
- Cosinusul lui x, unde x este exprimat în radiani |
exp(x) |
- Baza logaritmilor naturali (e) ridicata la puterea x |
floor(x) |
- Cel mai mare întreg care nu este mai mare decât x |
log (x) |
- Logaritmul natural al lui x |
mod(x,y) |
- Restul împartirii x/y |
power(x,y) |
- x la puterea y |
rand(x) |
- Valoare aleatoare cu virgula, mai mare sau egala cu zero si mai mica decât unu |
sign(x) |
- Valoarea -1, 0 sau 1, dupa cum valoarea lui x este negativa, zero sau pozitiva |
sin(x) |
- Sinusul lui x, unde x este dat în radiani |
sqrt(x) |
- Radacina patrata a lui x |
tan(x) |
- Tangenta lui x, unde x este dat în radiani |
\Functii sir frecvent folosite în MySQL |
Functie |
Descriere |
ascii(s) |
- Codul ASCII al octetului celui mai din stânga al sirului s |
char(n) |
- Caracter al carui cod ASCII este n |
concat(s1, s2) |
- Concatenarea sirurilor s1 si s2; cu alte cuvinte, s2 atasat la s1 |
lcase(s) |
- Sirul s, unde toate majusculele au fost transformate în minuscule |
left(s,n) |
- Primii n octeti ai sirului s, de la stânga la dreapta |
length(s) |
- Numarul octetilor din sirul s |
locate(s1, s2) |
- Pozitia primei aparitii a lui s1 în s2, respectiv zero daca s1 nu se gaseste în s2 |
ltrim(s) |
- Sirul s, cu eliminarea spatiilor de început |
right(s,n) |
- Primii n octeti din sirul s, de la dreapta la stânga |
rpad(s1,n,s2) |
- Sirul s1, completat la dreapta cu sirul s2 pâna când rezultatul are lungimea n |
rtrim(s) |
- Sirul s, cu spatiile finale eliminate |
space(n) |
- Un sir alcatuit din n spatii |
substring(s,m,n) |
- Sub-sir al lui s, care începe de la pozitia m si care are lungimea n |
trim(s) |
- Sub-sir al lui s, cu spatiile initiale si finale eliminate |
ucase(s) |
- Sirul s, cu toate minusculele convertite în majuscule |
Functii MySQL de data si ora frecvent utilizate |
Functie |
Descriere |
dayofmonth(d) |
- Ziua din luna a datei specificate (1-31) |
dayofweek(d) |
- Ziua din saptamâna a datei specificate (1 =duminica, 2=luni,…, 7=sâmbata) |
dayofyear(d) |
- Ziua din an a datei specificate (1-366) |
hour(t) |
- Partea orelor din momentul de timp mentionat (0-23) |
minute(t) |
- Partea minutelor din momentul de timp mentionat (0-59) |
month(d) |
- Luna datei specificate (1-12) |
now() |
- Data si ora curenta |
second(t) |
- Partea secundelor din momentul de timp mentionat (0-59) |
week(d) |
- Saptamâna din an a datei specificate (0-53) |
year(d) |
- Partea anilor din momentul de timp mentionat (1000-9999) |
Functii specifice MySQL |
Functie |
Descriere |
database() |
- Returneaza numele bazei de date deschise |
get_lock(s,n) |
- Obtine o blocare a bazei de date |
md5(s) |
- Returneaza o suma de control a sirului s, calculata dupa algoritmul MD5 |
password(s) |
- Returneaza sirul s, criptat folosind algoritmul aplicat de MySQL parolei |
release_lock(s) |
- Anuleaza blocarea unei baze de date |
user() |
- Returneaza numele utilizatorului curent |
version() |
- Returneaza numarul versiunii MySQL |
2. Uniri
SQL va permite sa obtineti accesul la mai multe tabele într-o singura interogare, în general, aceasta operatie se executa pentru ca datele dintr-un tabel sa poata fi folosite cu date din alt tabel.
De exemplu, sa presupunem ca baza de date este asemanatoare celei prezentate mai jos, unde avem doua tabele, primul numit "persoane" iar cel de-al oilea numit "meserii", si o relatie cheie externa - cheie primara (persoanaid) asociaza cele doua tabelele.
persoanaid |
nume |
AnNastere |
001 |
George Washington |
1732 |
002 |
John Adams |
1735 |
003 |
Thomas Jefferson |
1743 |
|
meserie |
persoanaid |
Arhitect |
003 |
General |
001 |
Filozof |
002 |
|
Sa examinam urmatoarea interogare:
SELECT nume, meserie FROM persoane, meserii
WHERE persoane.persoanaid=meserii.persoanaid;
- Constructiile "persoane.persoanaid" si "meserii.persoanaid" se numesc "nume definite", prima se refera la coloana "persoanaid" din tabelul "persoane", iar a doua se refera la coloana "persoanaid" a tabelului "meserii".
- Clauza WHERE asigura o echivalenta între valoarea cheii externe din tabelul "meserii" cu aceea a cheii primare din tabelul "persoane", (în absenta clauzei WHERE, se va stabili o corespondenta între fiecare rând din tabelul cu meserii si fiecare rând din tabelul cu persoane; un asemenea rezultat, numit "produs cartezian", contine în general multe rânduri - majoritatea nedorite - si ca atare trebuie evitat).
- Rezultatul interogarii de mai sus este un raport care indica numele si meseria asociata fiecarui angajat prezentat în tabelul "meserii".
O interogare ca aceasta, care combina date din mai multe tabele, se numeste "unire". Sunt posibile si uniri mai complexe, care implica trei sau mai multe tabele.
Daca un rând dat din tabelul principal (aici "persoane") nu are nici un rând asociat în tabelul cu detalii (aici "meserii"), rândul respectiv din tabelul principal nu va aparea în datele de iesire ale unei uniri. In cazul acesta, pentru a determina aparitia acestei înregistrari din tabelul principal, se poate folosi o categorie speciala de unire, cunoscuta sub numele de "unire la stânga" sau "unire exterioara la stânga". Iata un exemplu:
SELECT nume, meserie FROM persoane
LEFT JOIN meserii
ON persoane.persoanaid=meserii.persoanaid;
Aceasta interogare va afisa toate persoanele, indiferent daca acestea au sau nu asociata o meserie. Persoanele fara o meserie au specificatia NULL în coloana corespunzatoare meseriei.
3. Executarea instructiunilor dintr-un fisier extern
Comenzile MySQL pot fi scrise si intr-un fisier extern (editat de exemplu, in Windows, cu Notepad), acest fisier se numeste "script de shell".
Scriptul din fisierul extern poate fi executat din fereastra de comanda MySQL (MySQL Command Line Client), utilizand comanda:
Unde "nume_fisier" este calea si numele fisierului in care se afla scriptul de shell.
De exemplu, scriem urmatoarele comenzi intr-un fisier numit "lucru.txt" pe care-l salvam in directorul "C:/teste".
CREATE DATABASE lucrudb;
USE lucrudb;
GRANT ALL ON lucrudb.* TO php IDENTIFIED BY 'mypass';
CREATE TABLE angajat (
angajatnr SMALLINT PRIMARY KEY,
nume VARCHAR(50),
ore SMALLINT,
departament CHAR(16),
salariu DECIMAL(8,2),
data_angajare DATE);
INSERT INTO angajat (
angajatnr,
nume,
ore,
departament,
salariu,
data_angajare)
VALUES (
1,
'George Washinton',
40,
'Contabilitate',
500.00,
'2007-10-04'),
( 2,
'John Adams',
35,
'Marketing',
1000.00,
'2007-10-11'),
( 3,
'Thomas Jefferson washinton',
20,
'Vanzari',
1300.00,
'2007-07-02');
- Pentru a executa acest script, scriem in fereastra de comanda MySQL:
SOURCE C:/teste/lucru.txt
MySQL va executa comenzile din script ca si cum acestea ar fi scrise direct in linia de comanda.
Exemplul de mai sus va crea o baza de date noua, numita "lucrudb", va acorda utilizatorului "php" toate drepturile in utilizarea acestei baze de date, dupa care va crea tabelul "angajat", cu 6 coloane ("angajatnr", "nume", "ore", "departament", "salariu", "data_angajare") in care vor fi adaugate trei linii.