# 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) 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 ```