Notiuni fundamentale despre bazele de date si SQL (3)

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.
Baze de date SQL ... <<-- Anterior ----------- Urmator -->> PHP MySQL - Introducere ...

Un Test simplu in fiecare zi

HTML
CSS
JavaScript
PHP-MySQL
Engleza
Spaniola
Care tag se foloseste in <table> pentru a crea celula de tip "header"?
<thead> <th> <td>
<table><tr>
  <th>Title 1</th>
  <th>Title 2</th>
</tr></table>
Ce proprietate CSS seteaza distanta dintre randuri?
line-height word-spacing margin
.some_class {
  line-height: 150%;
}
Care functie deschide o noua fereastra.
alert() confirm() open()
document.getElementById("id_button").onclick = function(){
  window.open("http://coursesweb.net/");
}
Indicati functia PHP care returneaza un array cu numele fisierelor si directoarelor dintr-un director.
mkdir() scandir() readdir()
$ar_dir = scandir("dir_name");
var_export($ar_dir);
Care din urmatoarele forme a verbului "sleep" (a dormi) se foloseste pentru viitor?
sleeping slept will sleep
He will sleep there.
- El va dormi acolo.
Care din urmatoarele forme a verbului "dormir" (a dormi) se foloseste pentru viitor?
dormido dormirá durmiendo
Él dormirá allí.
- El va dormi acolo.
Baze de date SQL 3 - Tutoriale PHP