321 lines
10 KiB
Markdown
321 lines
10 KiB
Markdown
# select
|
||
|
||
|
||
|
||
La commande SELECT est utilisée pour récupérer des informations à partir d'une table.
|
||
|
||
La forme usuelle est : `SELECT colonne FROM table WHERE condition;`
|
||
|
||
|
||
|
||
#### Sélectionner toutes les colonnes d'une table:
|
||
|
||
`SELECT * FROM table;`
|
||
|
||
```mariadb
|
||
MariaDB [mydatabase]> SELECT * FROM animal;
|
||
+----------+--------+---------+------+------------+------------+
|
||
| nom | maitre | espece | sexe | naissance | mort |
|
||
+----------+--------+---------+------+------------+------------+
|
||
| Puffball | Diane | hamster | f | 1999-03-30 | NULL |
|
||
| Slim | Benny | serpent | f | 1996-03-30 | NULL |
|
||
| Chirpy | Gwen | oiseau | m | 1996-03-10 | NULL |
|
||
| Fluffy | Harold | chat | m | 1984-11-10 | NULL |
|
||
| Bowser | Diane | chien | m | 1998-08-31 | 1995-07-29 |
|
||
+----------+--------+---------+------+------------+------------+
|
||
5 rows in set (0.001 sec)
|
||
```
|
||
|
||
|
||
|
||
#### Sélectionner certaines colonnes d'une table:
|
||
|
||
`SELECT col1, col4 FROM table;`
|
||
|
||
```mariadb
|
||
MariaDB [mydatabase]> SELECT nom,sexe FROM animal;
|
||
+----------+------+
|
||
| nom | sexe |
|
||
+----------+------+
|
||
| Puffball | f |
|
||
| Slim | f |
|
||
| Chirpy | m |
|
||
| Fluffy | m |
|
||
| Bowser | m |
|
||
+----------+------+
|
||
```
|
||
|
||
|
||
|
||
#### Sélectionner certaines lignes:
|
||
|
||
`SELECT col1, col4 FROM table WHERE col5="x";`
|
||
|
||
```mariadb
|
||
MariaDB [mydatabase]> SELECT nom,sexe FROM animal WHERE sexe="m";
|
||
+--------+------+
|
||
| nom | sexe |
|
||
+--------+------+
|
||
| Chirpy | m |
|
||
| Fluffy | m |
|
||
| Bowser | m |
|
||
+--------+------+
|
||
```
|
||
|
||
Conditions WHERE:
|
||
|
||
- **=** : `WHERE sexe ="m"`
|
||
- **>=** ; **>** : `WHERE naissance >= "1998-1-1"`
|
||
- **<=** ; **<** : `WHERE naissance < "2000-1-1"`
|
||
- **AND** : `WHERE naissance >= "1998-1-1" AND naissance < "2000-1-1"`
|
||
- **OR** : `WHERE naissance >= "2000-1-1" OR naissance < "1998-1-1"`
|
||
-
|
||
|
||
|
||
|
||
#### Afficher un résultat unique:
|
||
|
||
`SELECT DISTINCT col1 FROM table;`
|
||
|
||
```mariadb
|
||
MariaDB [mydatabase]> SELECT DISTINCT sexe FROM animal;
|
||
+------+
|
||
| sexe |
|
||
+------+
|
||
| f |
|
||
| m |
|
||
+------+
|
||
```
|
||
|
||
|
||
|
||
#### Trier les résultats:
|
||
|
||
`SELECT col1, col2 FROM table ORDER BY col2;`
|
||
|
||
`SELECT col1, col2 FROM table ORDER BY col2 DESC;`
|
||
|
||
```mariadb
|
||
MariaDB [mydatabase]> SELECT nom, naissance FROM animal ORDER BY naissance DESC;
|
||
+----------+------------+
|
||
| nom | naissance |
|
||
+----------+------------+
|
||
| Puffball | 1999-03-30 |
|
||
| Slim | 1996-03-30 |
|
||
| Chirpy | 1996-03-10 |
|
||
| Bowser | 1989-08-31 |
|
||
| Fluffy | 1984-11-10 |
|
||
+----------+------------+
|
||
|
||
```
|
||
|
||
!!! Tri sur plusieurs colonnes
|
||
|
||
|
||
|
||
#### Calcul sur les dates:
|
||
|
||
Alias: `AS`
|
||
|
||
```mariadb
|
||
MariaDB [mydatabase]> SELECT nom, naissance, CURRENT_DATE,(YEAR(CURRENT_DATE)-YEAR(naissance)) - (RIGHT(CURRENT_DATE,5)<RIGHT(naissance,5)) AS age FROM animal ORDER BY nom;
|
||
+----------+------------+--------------+------+
|
||
| nom | naissance | CURRENT_DATE | age |
|
||
+----------+------------+--------------+------+
|
||
| Bowser | 1989-08-31 | 2021-09-04 | 32 |
|
||
| Chirpy | 1996-03-10 | 2021-09-04 | 25 |
|
||
| Fluffy | 1984-11-10 | 2021-09-04 | 36 |
|
||
| Puffball | 1999-03-30 | 2021-09-04 | 22 |
|
||
| Slim | 1996-03-30 | 2021-09-04 | 25 |
|
||
+----------+------------+--------------+------+
|
||
```
|
||
|
||
```mariadb
|
||
MariaDB [mydatabase]> SELECT nom, naissance, MONTH(naissance) AS 'mois de naissance' FROM animal;
|
||
+----------+------------+-------------------+
|
||
| nom | naissance | mois de naissance |
|
||
+----------+------------+-------------------+
|
||
| Puffball | 1999-03-30 | 3 |
|
||
| Slim | 1996-03-30 | 3 |
|
||
| Chirpy | 1996-03-10 | 3 |
|
||
| Fluffy | 1984-11-10 | 11 |
|
||
| Bowser | 1989-08-31 | 8 |
|
||
+----------+------------+-------------------+
|
||
```
|
||
|
||
|
||
|
||
#### Valeur NULL:
|
||
|
||
Conceptuellement, NULL représente une valeur qui manque, ou une valeur inconnue. Utilisez les opérateurs IS NULL et IS NOT NULL.
|
||
|
||
Avec MySQL, 0 et NULL représentent le booléen faux, et tout le reste représente le booléen vrai. La valeur par défaut du booléen vrai issue d'une comparaison est 1.
|
||
|
||
Lorsque vous utilisez la clause ORDER BY, les valeurs NULL sont toujours triées en premier, même si vous utilisez l'attribut DESC.
|
||
|
||
Chercher les animaux morts:
|
||
|
||
```mariadb
|
||
MariaDB [mydatabase]> SELECT nom, naissance, mort FROM animal WHERE mort IS NOT NULL;
|
||
+--------+------------+------------+
|
||
| nom | naissance | mort |
|
||
+--------+------------+------------+
|
||
| Bowser | 1989-08-31 | 1995-07-29 |
|
||
+--------+------------+------------+
|
||
```
|
||
|
||
|
||
|
||
#### Recherche de modèles:
|
||
|
||
`LIKE '_a'`: _ remplace n'importe quel caractère
|
||
|
||
`LIKE '___'`: trouve les noms de 3 caractères
|
||
|
||
`LIKE '%y'`: se termine par 'y'
|
||
|
||
`LIKE 'f%'`: commence par 'f'
|
||
|
||
`LIKE '%b%'`: contenant un 'b'
|
||
|
||
`NOT LIKE '%y'`: ne se termine pas par 'y'
|
||
|
||
```mariadb
|
||
MariaDB [mydatabase]> SELECT * FROM animal WHERE nom LIKE "%y";
|
||
+--------+--------+--------+------+------------+------+
|
||
| nom | maitre | espece | sexe | naissance | mort |
|
||
+--------+--------+--------+------+------------+------+
|
||
| Chirpy | Gwen | oiseau | m | 1996-03-10 | NULL |
|
||
| Fluffy | Harold | chat | m | 1984-11-10 | NULL |
|
||
+--------+--------+--------+------+------------+------+
|
||
```
|
||
|
||
```mariadb
|
||
MariaDB [mydatabase]> SELECT * FROM animal WHERE nom LIKE "f%";
|
||
+--------+--------+--------+------+------------+------+
|
||
| nom | maitre | espece | sexe | naissance | mort |
|
||
+--------+--------+--------+------+------------+------+
|
||
| Fluffy | Harold | chat | m | 1984-11-10 | NULL |
|
||
+--------+--------+--------+------+------------+------+
|
||
```
|
||
|
||
```mariadb
|
||
MariaDB [mydatabase]> SELECT * FROM animal WHERE nom LIKE "%b%";
|
||
+----------+--------+---------+------+------------+------------+
|
||
| nom | maitre | espece | sexe | naissance | mort |
|
||
+----------+--------+---------+------+------------+------------+
|
||
| Puffball | Diane | hamster | f | 1999-03-30 | NULL |
|
||
| Bowser | Diane | chien | m | 1989-08-31 | 1995-07-29 |
|
||
+----------+--------+---------+------+------------+------------+
|
||
```
|
||
|
||
```mariadb
|
||
MariaDB [mydatabase]> SELECT * FROM animal WHERE nom LIKE "______";
|
||
+--------+--------+--------+------+------------+------------+
|
||
| nom | maitre | espece | sexe | naissance | mort |
|
||
+--------+--------+--------+------+------------+------------+
|
||
| Chirpy | Gwen | oiseau | m | 1996-03-10 | NULL |
|
||
| Fluffy | Harold | chat | m | 1984-11-10 | NULL |
|
||
| Bowser | Diane | chien | m | 1989-08-31 | 1995-07-29 |
|
||
+--------+--------+--------+------+------------+------------+
|
||
```
|
||
|
||
|
||
|
||
#### Regex:
|
||
|
||
`REGEXP`
|
||
|
||
`NOT REGEXP`
|
||
|
||
Quelques caractéristiques des expressions régulières étendues sont :
|
||
|
||
- Le caractère ‘.’ trouve n'importe quel caractère.
|
||
- Une classe de caractères ‘[...]’ trouve n'importe quel caractère contenu entre les crochets. Par exemple, la classe de caractères ‘[abc]’ trouve le caractère ‘a’, ‘b’, ou ‘c’. Pour définir un intervalle de caractères, utilisez un trait d'union. La classe de caractères ‘[a-z]’ trouvera n'importe quel caractère minuscule, tout comme la classe ‘[0-9]’ trouvera n'importe quel nombre.
|
||
- Le caractère ‘*’ trouvera aucune ou plus d'instances du caractère qui le précède. Par exemple, ‘x*’ trouvera n'importe quel nombre de fois le caractère ‘x’, ‘[0-9]*’ trouvera n'importe quel nombre et ‘.*’ trouvera n'importe quel nombre de fois n'importe quel caractère.
|
||
- Le modèle est trouvé s'il se produit n'importe où dans la valeur testée. (Les modèles SQL ne sont trouvés que s'ils sont présents en valeur entière.)
|
||
- Pour ancrer un modèle de sorte qu'il soit trouvé au début ou à la fin de valeur testée, utilisez ‘^’ au début ou bien ‘$’ à la fin du modèle.
|
||
|
||
```mariadb
|
||
MariaDB [mydatabase]> SELECT * FROM animal WHERE nom REGEXP "y$";
|
||
+--------+--------+--------+------+------------+------+
|
||
| nom | maitre | espece | sexe | naissance | mort |
|
||
+--------+--------+--------+------+------------+------+
|
||
| Chirpy | Gwen | oiseau | m | 1996-03-10 | NULL |
|
||
| Fluffy | Harold | chat | m | 1984-11-10 | NULL |
|
||
+--------+--------+--------+------+------------+------+
|
||
|
||
```
|
||
|
||
```mariadb
|
||
MariaDB [mydatabase]> SELECT * FROM animal WHERE nom REGEXP "^f";
|
||
+--------+--------+--------+------+------------+------+
|
||
| nom | maitre | espece | sexe | naissance | mort |
|
||
+--------+--------+--------+------+------------+------+
|
||
| Fluffy | Harold | chat | m | 1984-11-10 | NULL |
|
||
+--------+--------+--------+------+------------+------+
|
||
```
|
||
|
||
```mariadb
|
||
MariaDB [mydatabase]> SELECT * FROM animal WHERE nom REGEXP "b";
|
||
+----------+--------+---------+------+------------+------------+
|
||
| nom | maitre | espece | sexe | naissance | mort |
|
||
+----------+--------+---------+------+------------+------------+
|
||
| Puffball | Diane | hamster | f | 1999-03-30 | NULL |
|
||
| Bowser | Diane | chien | m | 1989-08-31 | 1995-07-29 |
|
||
+----------+--------+---------+------+------------+------------+
|
||
```
|
||
|
||
```mariadb
|
||
MariaDB [mydatabase]> SELECT * FROM animal WHERE nom REGEXP "^......$";
|
||
+--------+--------+--------+------+------------+------------+
|
||
| nom | maitre | espece | sexe | naissance | mort |
|
||
+--------+--------+--------+------+------------+------------+
|
||
| Chirpy | Gwen | oiseau | m | 1996-03-10 | NULL |
|
||
| Fluffy | Harold | chat | m | 1984-11-10 | NULL |
|
||
| Bowser | Diane | chien | m | 1989-08-31 | 1995-07-29 |
|
||
+--------+--------+--------+------+------------+------------+
|
||
```
|
||
|
||
|
||
|
||
#### Compter les lignes:
|
||
|
||
`COUNT()`
|
||
|
||
La fonction COUNT() compte le nombre de résultats non NULL
|
||
|
||
```mariadb
|
||
MariaDB [mydatabase]> SELECT COUNT(*) FROM animal;
|
||
+----------+
|
||
| COUNT(*) |
|
||
+----------+
|
||
| 5 |
|
||
+----------+
|
||
```
|
||
|
||
```mariadb
|
||
MariaDB [mydatabase]> SELECT maitre, COUNT(*) FROM animal GROUP BY maitre;
|
||
+--------+----------+
|
||
| maitre | COUNT(*) |
|
||
+--------+----------+
|
||
| Benny | 1 |
|
||
| Diane | 2 |
|
||
| Gwen | 1 |
|
||
| Harold | 1 |
|
||
+--------+----------+
|
||
```
|
||
|
||
|
||
|
||
#### Modifier une donnée:
|
||
|
||
`UPDATE table SET colonne1="x" WHERE colonne2="y";`
|
||
|
||
```mariadb
|
||
MariaDB [mydatabase]> UPDATE animal SET naissance = "1989-08-31" WHERE nom = "Bowser";
|
||
Query OK, 1 row affected (0.006 sec)
|
||
Rows matched: 1 Changed: 1 Warnings: 0
|
||
```
|
||
|