6299 afișări Candale Silviu (silviu) 16.01.2019 www.pbinfo.ro
Etichete: nicio etichetă

Comanda SELECT realizează una dintre cele mai frecvente operații asupra unui tabel dintr-o bază de date, respectiv extragerea înregistrărilor care respectă anumite criterii. Sintaxa parțială este:

SELECT obiecte_selectate
    [FROM nume_tabel]
    [WHERE conditie]
    [ORDER BY nume_coloana [ASC|DESC]]
    [LIMIT [poz_initiala],[nr_inregistrari]]

unde:

  • obiecte_selectate – reprezintă obiectele pe care utilizatorul dorește să le vadă. Pot fi:
    • toate coloanele unui tabel – *
    • o parte a coloanelor – o lista cu numele acestora, separate prin virgulă
    • expresii care pot folosi nume de coloane – lista de expresii separate prin virgulă
    • alte expresii MySQL
  • nume_tabel – reprezintă tabelul din care se extrag anumite coloane. Clauza FROM nume_tabel este obligatorie dacă în lista de obiecte avem coloane.

Exemple

Următorul exemplu selectează toate coloanele tabelului elevi

mysql> select * from elevi;
+----+-------------+-------+-------+-------+-------+
| id | nume        | clasa | nota1 | nota2 | media |
+----+-------------+-------+-------+-------+-------+
|  1 | Popescu Ion |    12 |     7 |     8 |  0.00 | 
|  2 | Ionescu Ana |    11 |     7 |     9 |  0.00 | 
|  3 | Pop Vasile  |    12 |    10 |     9 |  0.00 | 
+----+-------------+-------+-------+-------+-------+
3 rows in set (0.00 sec)

Următorul exemplu selectează coloanele nume și clasa din același tabel.

mysql> select nume , clasa from elevi;
+-------------+-------+
| nume        | clasa |
+-------------+-------+
| Popescu Ion |    12 | 
| Ionescu Ana |    11 | 
| Pop Vasile  |    12 | 
+-------------+-------+
3 rows in set (0.00 sec)

Următorul exemplu selectează coloana nume și o expresie calculată (media notelor), în două variante. Observați în al doilea exemplu prezența clauzei AS, și efectul ei.

mysql> select nume , (nota1+nota2)/2 from elevi;
+-------------+-----------------+
| nume        | (nota1+nota2)/2 |
+-------------+-----------------+
| Popescu Ion |          7.5000 | 
| Ionescu Ana |          8.0000 | 
| Pop Vasile  |          9.5000 | 
+-------------+-----------------+
3 rows in set (0.09 sec)
mysql> select nume , (nota1+nota2)/2 as Media from elevi;
+-------------+--------+
| nume        | Media  |
+-------------+--------+
| Popescu Ion | 7.5000 | 
| Ionescu Ana | 8.0000 | 
| Pop Vasile  | 9.5000 | 
+-------------+--------+
3 rows in set (0.00 sec)

Clauza WHERE

Clauza WHERE permite selectarea înregistrărilor care respectă anumite condiții.

Exemple

Următorul exemplu selectează înregistrările corespunzătoare elevilor din clasa a 12-a.

mysql> select *  from elevi where clasa=12;
+----+-------------+-------+-------+-------+-------+
| id | nume        | clasa | nota1 | nota2 | media |
+----+-------------+-------+-------+-------+-------+
|  1 | Popescu Ion |    12 |     7 |     8 |  0.00 | 
|  3 | Pop Vasile  |    12 |    10 |     9 |  0.00 | 
+----+-------------+-------+-------+-------+-------+
2 rows in set (0.00 sec)

Următorul exemplu selectează numele elevilor din clasa a 12-a care au media cel puțin 8.

mysql> select nume from elevi where clasa=12 and (nota1+nota2)/2>=8;
+------------+
| nume       |
+------------+
| Pop Vasile | 
+------------+
1 row in set (0.00 sec)
Următorul exemplu selectează elevii al căror nume conține șirul @'escu'@
mysql> select * from elevi where nume like '%escu%';
+----+-------------+-------+-------+-------+-------+
| id | nume        | clasa | nota1 | nota2 | media |
+----+-------------+-------+-------+-------+-------+
|  1 | Popescu Ion |    12 |     7 |     8 |  0.00 | 
|  2 | Ionescu Ana |    11 |     7 |     9 |  0.00 | 
+----+-------------+-------+-------+-------+-------+
2 rows in set (0.00 sec)

Ordonarea înregistrărilor

Implicit, comanda SELECT extrage înregistrările în ordinea fizică a acestora. Acest comportament poate fi modificat utilizând clauza ORDER BY. Ordonarea este crescătoare sau descrescătoare, în funcție de prezența clauzelor ASC – ordine crescătoare, implicită, sau DESC – ordine descrescătoare. Clauza ORDER BY nu poate apărea în comandă înaintea clauzei WHERE

Exemple

Următorul exemplu selectează elevii alfabetic după nume.

mysql> select * from elevi order by nume ;
+----+-------------+-------+-------+-------+-------+
| id | nume        | clasa | nota1 | nota2 | media |
+----+-------------+-------+-------+-------+-------+
|  2 | Ionescu Ana |    11 |     7 |     9 |  0.00 | 
|  3 | Pop Vasile  |    12 |    10 |     9 |  0.00 | 
|  1 | Popescu Ion |    12 |     7 |     8 |  0.00 | 
+----+-------------+-------+-------+-------+-------+
3 rows in set (0.46 sec)

Următorul exemplu selectează numele și media elevilor din clasa a 12-a, descrescător după medie.

mysql> select nume as 'Numele si prenumele', (nota1+nota2)/2 as 'Media' 
    -> from elevi 
    -> where clasa=12
    -> order by (nota1+nota2) desc
    -> ;
+---------------------+--------+
| Numele si prenumele | Media  |
+---------------------+--------+
| Pop Vasile          | 9.5000 | 
| Popescu Ion         | 7.5000 | 
+---------------------+--------+
2 rows in set (0.00 sec)

Limitarea rezultatelor

În anumite situații (rezultatul interogării este prea mare), se dorește limitarea numărului de înregistrări. Acest lucru este posibil prin intermediul clauzei LIMIT. Aceasta poate avea 1 sau 2 parametri și nu poate apărea înaintea clauzelor WHERE și ORDER BY.

  • dacă avem un singur parametru, acesta reprezintă numărul de înregistrări care vor fi întoarse
  • dacă avem doi parametri, primul reprezintă numărul de ordine al primei înregistrări întoarse, iar al doilea reprezintă numărul de înregistrări întoarse

Exemple

mysql> select * from elevi limit 2 ;
+----+-------------+-------+-------+-------+-------+
| id | nume        | clasa | nota1 | nota2 | media |
+----+-------------+-------+-------+-------+-------+
|  1 | Popescu Ion |    12 |     7 |     8 |  0.00 | 
|  2 | Ionescu Ana |    11 |     7 |     9 |  0.00 | 
+----+-------------+-------+-------+-------+-------+
2 rows in set (0.00 sec)
mysql> select * from elevi limit 1,2 ;
+----+-------------+-------+-------+-------+-------+
| id | nume        | clasa | nota1 | nota2 | media |
+----+-------------+-------+-------+-------+-------+
|  2 | Ionescu Ana |    11 |     7 |     9 |  0.00 | 
|  3 | Pop Vasile  |    12 |    10 |     9 |  0.00 | 
+----+-------------+-------+-------+-------+-------+
2 rows in set (0.00 sec)

6299 afișări Candale Silviu (silviu) 16.01.2019 www.pbinfo.ro