Sélectionner, lire des données dans des tables MySQL

Nous allons travailler sur la base de données « magasin » dans laquelle ont été créées les tables « clients », « marchandises » et « ventes ».

MariaDB [(none)]> USE magasin;
Database changed
MariaDB [magasin]> SHOW TABLES;
+-------------------+
| Tables_in_magasin |
+-------------------+
| clients           |
| marchandises      |
| ventes            |
+-------------------+
3 rows in set (0.00 sec)

Je sélectionne toutes les données de toutes les colonnes de la table « clients » :

SELECT * FROM clients;

MariaDB [magasin]> SELECT * FROM clients;
+------------+-----------+-----------+
| num_client | nom       | prenom    |
+------------+-----------+-----------+
|          1 | Hermes    | Simone    |
|          2 | Benetton  | Karim     |
|          3 | Ericcsson | Rodrigue  |
|          4 | Adidas    | Kitty     |
|          5 | Jaures    | Jean      |
|          6 | Cesar     | Jules     |
|          7 | Dumont    | Fabrice   |
|          8 | Rimbaud   | Arthur    |
|          9 | Lefol     | Sebastien |
+------------+-----------+-----------+
9 rows in set (0.00 sec)

Je sélectionne les données des colonnes « num_client » et « prenom » de la table « clients » :

SELECT num_client,prenom FROM clients;

MariaDB [magasin]> SELECT num_client,prenom FROM clients;
+------------+-----------+
| num_client | prenom    |
+------------+-----------+
|          1 | Simone    |
|          2 | Karim     |
|          3 | Rodrigue  |
|          4 | Kitty     |
|          5 | Jean      |
|          6 | Jules     |
|          7 | Fabrice   |
|          8 | Arthur    |
|          9 | Sebastien |
+------------+-----------+
9 rows in set (0.00 sec)

Je sélectionne toutes les données de toutes les colonnes de la table « clients » dans l’ordre alphabétique ascendant (A->Z) des noms :

SELECT * FROM clients ORDER BY nom;

MariaDB [magasin]> SELECT * FROM clients ORDER BY nom;
+------------+-----------+-----------+
| num_client | nom       | prenom    |
+------------+-----------+-----------+
|          4 | Adidas    | Kitty     |
|          2 | Benetton  | Karim     |
|          6 | Cesar     | Jules     |
|          7 | Dumont    | Fabrice   |
|          3 | Ericcsson | Rodrigue  |
|          1 | Hermes    | Simone    |
|          5 | Jaures    | Jean      |
|          9 | Lefol     | Sebastien |
|          8 | Rimbaud   | Arthur    |
+------------+-----------+-----------+
9 rows in set (0.04 sec)

Corsons l’affaire et créons deux autres clients ayant pour nom « Benetton » :

MariaDB [magasin]> INSERT INTO clients
        -> VALUES
        -> (NULL,"Benetton","Eric"),
        -> (NULL,"Benetton","Ulrik");
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

MariaDB [magasin]> SELECT * FROM clients ORDER BY nom;
+------------+-----------+-----------+
| num_client | nom       | prenom    |
+------------+-----------+-----------+
|          4 | Adidas    | Kitty     |
|         11 | Benetton  | Ulrik     |
|          2 | Benetton  | Karim     |
|         10 | Benetton  | Eric      |
|          6 | Cesar     | Jules     |
|          7 | Dumont    | Fabrice   |
|          3 | Ericcsson | Rodrigue  |
|          1 | Hermes    | Simone    |
|          5 | Jaures    | Jean      |
|          9 | Lefol     | Sebastien |
|          8 | Rimbaud   | Arthur    |
+------------+-----------+-----------+
11 rows in set (0.00 sec)

MariaDB [magasin]> SELECT * FROM clients ORDER BY nom,prenom;
+------------+-----------+-----------+
| num_client | nom       | prenom    |
+------------+-----------+-----------+
|          4 | Adidas    | Kitty     |
|         10 | Benetton  | Eric      |
|          2 | Benetton  | Karim     |
|         11 | Benetton  | Ulrik     |
|          6 | Cesar     | Jules     |
|          7 | Dumont    | Fabrice   |
|          3 | Ericcsson | Rodrigue  |
|          1 | Hermes    | Simone    |
|          5 | Jaures    | Jean      |
|          9 | Lefol     | Sebastien |
|          8 | Rimbaud   | Arthur    |
+------------+-----------+-----------+
11 rows in set (0.00 sec)

MariaDB [magasin]>

SELECT * FROM clients ORDER BY nom;

Le tri alphabétique ascendant est correct pour tous sauf pour les Benetton !

SELECT * FROM clients ORDER BY nom,prenom;

Le tri alphabétique ascendant est vraiment correct pour tous !

MariaDB [magasin]> SELECT * FROM clients ORDER BY nom,prenom ASC;
+------------+-----------+-----------+
| num_client | nom       | prenom    |
+------------+-----------+-----------+
|          4 | Adidas    | Kitty     |
|         10 | Benetton  | Eric      |
|          2 | Benetton  | Karim     |
|         11 | Benetton  | Ulrik     |
|          6 | Cesar     | Jules     |
|          7 | Dumont    | Fabrice   |
|          3 | Ericcsson | Rodrigue  |
|          1 | Hermes    | Simone    |
|          5 | Jaures    | Jean      |
|          9 | Lefol     | Sebastien |
|          8 | Rimbaud   | Arthur    |
+------------+-----------+-----------+
11 rows in set (0.00 sec)

MariaDB [magasin]> SELECT * FROM clients ORDER BY nom,prenom DESC;
+------------+-----------+-----------+
| num_client | nom       | prenom    |
+------------+-----------+-----------+
|          4 | Adidas    | Kitty     |
|         11 | Benetton  | Ulrik     |
|          2 | Benetton  | Karim     |
|         10 | Benetton  | Eric      |
|          6 | Cesar     | Jules     |
|          7 | Dumont    | Fabrice   |
|          3 | Ericcsson | Rodrigue  |
|          1 | Hermes    | Simone    |
|          5 | Jaures    | Jean      |
|          9 | Lefol     | Sebastien |
|          8 | Rimbaud   | Arthur    |
+------------+-----------+-----------+
11 rows in set (0.00 sec)

MariaDB [magasin]> SELECT * FROM clients ORDER BY nom DESC,prenom DESC;
+------------+-----------+-----------+
| num_client | nom       | prenom    |
+------------+-----------+-----------+
|          8 | Rimbaud   | Arthur    |
|          9 | Lefol     | Sebastien |
|          5 | Jaures    | Jean      |
|          1 | Hermes    | Simone    |
|          3 | Ericcsson | Rodrigue  |
|          7 | Dumont    | Fabrice   |
|          6 | Cesar     | Jules     |
|         11 | Benetton  | Ulrik     |
|          2 | Benetton  | Karim     |
|         10 | Benetton  | Eric      |
|          4 | Adidas    | Kitty     |
+------------+-----------+-----------+
11 rows in set (0.00 sec)

MariaDB [magasin]>

SELECT * FROM clients ORDER BY nom,prenom ASC;

Le tri ascendant est correct puisque par défaut nom est trié ainsi !

SELECT * FROM clients ORDER BY nom ASC,prenom ASC;

aurait été plus correct !

SELECT * FROM clients ORDER BY nom,prenom DESC;

Le tri descendant (Z -> A) est correct sauf pour les Benetton !

SELECT * FROM clients ORDER BY nom DESC,prenom DESC;

Le tri ascendant est correct pour tout le monde !

MariaDB [magasin]> SELECT num_client FROM clients WHERE nom = "Dumont";
+------------+
| num_client |
+------------+
|          7 |
+------------+
1 row in set (0.04 sec)

MariaDB [magasin]> SELECT num_client FROM clients WHERE nom = "Benetton";
+------------+
| num_client |
+------------+
|          2 |
|         10 |
|         11 |
+------------+
3 rows in set (0.00 sec)

MariaDB [magasin]> SELECT num_client,prenom FROM clients WHERE nom = "Benetton";
+------------+--------+
| num_client | prenom |
+------------+--------+
|          2 | Karim  |
|         10 | Eric   |
|         11 | Ulrik  |
+------------+--------+
3 rows in set (0.00 sec)

SELECT num_client FROM clients WHERE nom = « Dumont »;

Je cherche les numéros des clients portant le nom de Dumont. Il n’y en a qu’un !

SELECT num_client FROM clients WHERE nom = « Benetton »;

Je cherche les numéros des clients portant le nom de Benetton. Il y en a trois !

SELECT num_client,prenom FROM clients WHERE nom = « Benetton »;

Je cherche ensuite les numéros de clients, les prénoms des personnes portant le nom de Benetton.

WHERE est une clause de recherche.

Utilisons maintenant les opérateurs de comparaison (<,>,<=,>=,!=)

Voici les données de ma table « ventes » :

MariaDB [magasin]> SELECT * FROM ventes;
+-----------+------------+-----------------+------------+
| num_vente | date_vente | marchandise_num | client_num |
+-----------+------------+-----------------+------------+
|         1 | 2018-02-13 |               1 |          4 |
|         2 | 2018-02-13 |               2 |          7 |
|         3 | 2018-02-13 |               4 |          7 |
|         4 | 2018-02-13 |               5 |          5 |
|         5 | 2018-02-14 |               6 |          3 |
|         6 | 2018-02-14 |               6 |          1 |
|         7 | 2018-02-14 |               1 |          5 |
|         8 | 2018-02-15 |               6 |          9 |
|         9 | 2018-02-15 |               6 |         11 |
|        10 | 2018-02-16 |               4 |          2 |
|        11 | 2018-02-16 |               3 |          4 |
|        12 | 2018-02-17 |               3 |          3 |
|        13 | 2018-02-17 |               4 |          3 |
|        14 | 2018-02-17 |               2 |          7 |
+-----------+------------+-----------------+------------+
14 rows in set (0.00 sec)

MariaDB [magasin]>

Sélectionnons les données ou ventes antérieures au 15/02/2018 :

SELECT * FROM ventes WHERE date_vente < « 2018-02-15 »;

MariaDB [magasin]> SELECT * FROM ventes WHERE date_vente < "2018-02-15";
+-----------+------------+-----------------+------------+
| num_vente | date_vente | marchandise_num | client_num |
+-----------+------------+-----------------+------------+
|         1 | 2018-02-13 |               1 |          4 |
|         2 | 2018-02-13 |               2 |          7 |
|         3 | 2018-02-13 |               4 |          7 |
|         4 | 2018-02-13 |               5 |          5 |
|         5 | 2018-02-14 |               6 |          3 |
|         6 | 2018-02-14 |               6 |          1 |
|         7 | 2018-02-14 |               1 |          5 |
+-----------+------------+-----------------+------------+
7 rows in set (0.00 sec)

MariaDB [magasin]>

Utilisons en plus les opérateurs logiques (AND, OR , NOT) :

SELECT * FROM ventes WHERE date_vente < « 2018-02-15 » AND client_num = 5;

MariaDB [magasin]> SELECT * FROM ventes WHERE date_vente < "2018-02-15" -> AND client_num = 5;
+-----------+------------+-----------------+------------+
| num_vente | date_vente | marchandise_num | client_num |
+-----------+------------+-----------------+------------+
|         4 | 2018-02-13 |               5 |          5 |
|         7 | 2018-02-14 |               1 |          5 |
+-----------+------------+-----------------+------------+
2 rows in set (0.00 sec)

MariaDB [magasin]>

Nous obtenons les ventes antérieures au 15/02/2018 au client indexé avec la valeur 5, Jean Jaures client_num (clé étrangère) de la table « ventes » étant en relation avec num_client (clé primaire) de la table « clients ».

MariaDB [magasin]> SELECT * FROM clients WHERE num_client = 5;
+------------+--------+--------+
| num_client | nom    | prenom |
+------------+--------+--------+
|          5 | Jaures | Jean   |
+------------+--------+--------+
1 row in set (0.00 sec)

MariaDB [magasin]>

SELECT * FROM ventes WHERE date_vente = « 2018-02-14 »

-> OR date_vente = « 2018-02-17 »;

SELECT * FROM ventes WHERE date_vente = « 2018-02-14 »

-> AND client_num = 3

-> OR date_vente = « 2018-02-17 »

-> AND client_num = 3;

MariaDB [magasin]> SELECT * FROM ventes WHERE date_vente = "2018-02-14"
        -> OR date_vente = "2018-02-17";
+-----------+------------+-----------------+------------+
| num_vente | date_vente | marchandise_num | client_num |
+-----------+------------+-----------------+------------+
|         5 | 2018-02-14 |               6 |          3 |
|         6 | 2018-02-14 |               6 |          1 |
|         7 | 2018-02-14 |               1 |          5 |
|        12 | 2018-02-17 |               3 |          3 |
|        13 | 2018-02-17 |               4 |          3 |
|        14 | 2018-02-17 |               2 |          7 |
+-----------+------------+-----------------+------------+
6 rows in set (0.00 sec)

MariaDB [magasin]> SELECT * FROM ventes WHERE date_vente = "2018-02-14"
        -> AND client_num = 3
        -> OR date_vente = "2018-02-17"
        -> AND client_num = 3;
+-----------+------------+-----------------+------------+
| num_vente | date_vente | marchandise_num | client_num |
+-----------+------------+-----------------+------------+
|         5 | 2018-02-14 |               6 |          3 |
|        12 | 2018-02-17 |               3 |          3 |
|        13 | 2018-02-17 |               4 |          3 |
+-----------+------------+-----------------+------------+
3 rows in set (0.00 sec)

MariaDB [magasin]>

SELECT * FROM clients WHERE nom = « Benetton » ORDER BY prenom;

MariaDB [magasin]> SELECT * FROM clients;
+------------+-----------+-----------+
| num_client | nom       | prenom    |
+------------+-----------+-----------+
|          1 | Hermes    | Simone    |
|          2 | Benetton  | Karim     |
|          3 | Ericcsson | Rodrigue  |
|          4 | Adidas    | Kitty     |
|          5 | Jaures    | Jean      |
|          6 | Cesar     | Jules     |
|          7 | Dumont    | Fabrice   |
|          8 | Rimbaud   | Arthur    |
|          9 | Lefol     | Sebastien |
|         10 | Benetton  | Eric      |
|         11 | Benetton  | Ulrik     |
+------------+-----------+-----------+
11 rows in set (0.00 sec)

MariaDB [magasin]> SELECT * FROM clients WHERE nom = "Benetton" ORDER BY prenom;
+------------+----------+--------+
| num_client | nom      | prenom |
+------------+----------+--------+
|         10 | Benetton | Eric   |
|          2 | Benetton | Karim  |
|         11 | Benetton | Ulrik  |
+------------+----------+--------+
3 rows in set (0.00 sec)

MariaDB [magasin]>

SELECT * FROM VENTES WHERE date_vente = « 2018-02-17 » ORDER BY marchandise_num;

MariaDB [magasin]> SELECT * FROM ventes;
+-----------+------------+-----------------+------------+
| num_vente | date_vente | marchandise_num | client_num |
+-----------+------------+-----------------+------------+
|         1 | 2018-02-13 |               1 |          4 |
|         2 | 2018-02-13 |               2 |          7 |
|         3 | 2018-02-13 |               4 |          7 |
|         4 | 2018-02-13 |               5 |          5 |
|         5 | 2018-02-14 |               6 |          3 |
|         6 | 2018-02-14 |               6 |          1 |
|         7 | 2018-02-14 |               1 |          5 |
|         8 | 2018-02-15 |               6 |          9 |
|         9 | 2018-02-15 |               6 |         11 |
|        10 | 2018-02-16 |               4 |          2 |
|        11 | 2018-02-16 |               3 |          4 |
|        12 | 2018-02-17 |               3 |          3 |
|        13 | 2018-02-17 |               4 |          3 |
|        14 | 2018-02-17 |               2 |          7 |
+-----------+------------+-----------------+------------+
14 rows in set (0.00 sec)

MariaDB [magasin]> SELECT * FROM VENTES WHERE date_vente = "2018-02-17" ORDER BY marchandise_num;
+-----------+------------+-----------------+------------+
| num_vente | date_vente | marchandise_num | client_num |
+-----------+------------+-----------------+------------+
|        14 | 2018-02-17 |               2 |          7 |
|        12 | 2018-02-17 |               3 |          3 |
|        13 | 2018-02-17 |               4 |          3 |
+-----------+------------+-----------------+------------+
3 rows in set (0.00 sec)

MariaDB [magasin]>