• Aucun résultat trouvé

1.1. Requête « Sélection » Requête « Sélection »

N/A
N/A
Protected

Academic year: 2022

Partager "1.1. Requête « Sélection » Requête « Sélection »"

Copied!
13
0
0

Texte intégral

(1)

MySQL : requête SQL sur une table

1. 1. Requête « Sélection » Requête « Sélection »

Objectif :

* Utiliser l'opérateur « SELECT » qui permet de rechercher (sélectionner) des informations dans une base de données avec des conditions avec une expression logique

* Filtrer et trier le résultat de l'opérateur « SELECT »

synthèse sur des éléments abordés :

SELECT [nom_table.nom_champs, nom_table.nom_champs2...] [champs calculés]

FROM

nom_table1, nom_table2 ….

WHERE

[conditions, jointure … ]

ORDER BY [nom_table.nom_champs] [DESC]

[LIMIT]

;

● Par exemple :

SELECT * FROM catalogue WHERE ref="123abc"; (* : tous les champs) SELECT Client.NomClient FROM Client WHERE Client.PrivilegeClient=true ORDER by Client.NomClient;

[conditions]SQL comparateur Les opérateurs

Les expressions logiques AND OR

NOT

Un champ compris entre 2 valeurs nom_champ BETWEEN 1 and 30

Une chaine de caractères comme ...( comparaison ) nom_champ like "123"&"%"

Un champ est vide nom_champ is NULL Utilisation de date

"aaaa-mm-jj"

Pour trier les champs

ORDER BY ETU_Nom [ASC] « CROISSANT » ORDER BY ETU_Nom DESC « DECROISSANT » Sélectionner des résultats non redondants (distincts)

SELECT DISTINCT nom_champ … Quand un champ a pour valeurs (...)

WHERE nom_champ IN ('valeur1', 'valeur2', ...) lors de l'écriture des chaînes de texte

' (apostrophe ou single quote) sert à entourer une valeur de format alphanumérique.

` (accent grave ou backtick, touches Alt Gr + 7) sert à entourer les noms des objets de la BDD (base, table, colonne), surtout lorsque ces noms peuvent être mal interprétés par MySQL : Noms en plusieurs mots ; Mots réservés de MySQL.

" (guillemet ou double quote) est une alternative (propre à MySQL) à ' ; elle est déconseillée, car seul ' est normalisé.

(2)

2. 2. Exercice : partie 1 => création de la table Exercice : partie 1 => création de la table

Créer une table pour gérer des étudiants , avec comme nom de la table : Etudiant et comme champs dans la table :

idEtudiant : ce champ est de type entier, c'est une clé primaire qui utilise un attribut «AUTO_INCREMENT».

nom : ce champ est de type chaîne de caractères variable de taille 20 caractères maximum.

adresse : ce champ est de type chaîne de caractères variable de taille 40 caractères maximum.

ville : ce champ est de type chaîne de caractères variable de taille 20 caractères maximum.

code_postal : ce champ est de type entier, qui affiche un numérique sur 5 chiffres

telephone : ce champ est de type NUMERIC ( une chaîne de caractères) qui affiche un numérique sur 10 digits (quelque soit la valeur )

date_naissance: ce champ est de Date

sexe : ce champ est de type chaîne de caractères variable de taille 1 caractère maximum.

boursier : ce champ est de type chaîne de caractères variable de taille 1 caractère maximum.

groupe_id : ce champ est de type entier semestre_id : ce champ est de type entier

note_ue1 : ce champ est de type Réel qui affiche un numérique avec 2 chiffres après la virgule, la valeur la plus grande est 99,99

note_ue2 : ce champ est de type Réel qui affiche un numérique avec 2 chiffres après la virgule, la valeur la plus grande est 99,99

Après avoir créer la table ci dessus :

utiliser le fichier joint pour insérer des champs

Etudiant idEtudiant nom

adresse ville

code_postal telephone date_naissance sexe

boursier groupe_id semestre_id note_ue1 note_ue2

(3)

Requête 1 (expression logique) :Requête 1 (expression logique) : Tester la requête suivante :

Sur le même principe :

Écrire une requête pour sélectionner le nom, le groupe et le champ ‘boursier’ (si ils sont boursiers ou non) des étudiants du groupe 1, du semestre 1 quand ils sont boursiers.

Résultat :

+---+---+---+

| nom | groupe_id | boursier | +---+---+---+

| PEQUIGNOT | 1 | O |

| MONNIER | 1 | O | +---+---+---+

Requête 2 (expression logique et tri) :Requête 2 (expression logique et tri) :

Utiliser l'instruction ORDER BY « champ1 » après l'instruction WHERE « conditions ».

Aidez vous des informations sur : https://www.w3schools.com/SQL/sql_orderby.asp Tester la requête suivante :

Sur le même principe :

Écrire une requête pour sélectionner uniquement les étudiants (nom, groupe, ville, semestre ) du groupe 1 et du semestre 1 ou du semestre 2 et de la ville de « Belfort ».

Ordonner la liste résultat par semestre croissant puis par groupe croissant puis pas nom de ville croissante (par ordre alphabétique) puis par nom d’étudiant décroissant.

Résultat :

+---+---+---+---+

| nom | groupe_id | ville | semestre_id | +---+---+---+---+

| ZILLIOX | 1 | Bavilliers | 1 |

| BERNARD | 1 | Belfort | 1 |

| MONNIER | 1 | TAILLECOURT | 1 |

| PEQUIGNOT | 1 | Valdoie | 1 |

| MOREAU | 1 | Belfort | 2 |

| LUZET | 1 | Belfort | 2 |

| BOULANGER | 1 | Belfort | 2 |

| BONVALOT | 1 | Belfort | 2 |

| PRETTOT | 2 | Belfort | 2 | +---+---+---+---+

(4)

•• Requête 3 (expression logique et tri) :Requête 3 (expression logique et tri) : Simplifier l’expression logique ci-dessous:

Écrire une requête pour sélectionner uniquement les étudiants (nom, groupe, ville, semestre, boursier ) qui sont boursier ou de la ville de belfort et qui sont tous du semestre 2.

Aidez vous des informations sur : https://www.w3schools.com/SQL/sql_orderby.asp Résultat :

+---+---+---+---+---+

| nom | groupe_id | ville | semestre_id | boursier | +---+---+---+---+---+

| BONVALOT | 1 | Belfort | 2 | O | | BOULANGER | 1 | Belfort | 2 | N | | LUZET | 1 | Belfort | 2 | O | | MOREAU | 1 | Belfort | 2 | O | | PRETTOT | 2 | Belfort | 2 | O | | VALOT | 2 | Belfort | 2 | O | | VALZER | 3 | Valdoie | 2 | O | +---+---+---+---+---+

•• Requête 3bis Requête 3bis (tri sur plusieurs champs)(tri sur plusieurs champs)

Écrire une requête pour afficher tous les étudiants triés par semestre, puis par groupe, Écrire une requête pour afficher tous les étudiants triés par semestre, puis par groupe, puis par nom.

puis par nom.

Utiliser l'instruction ORDER BY champ1, champ2, champ3 ; remplacer « champ » par le nom du champ suivi de ASC ou DESC (par défaut le tri est fait de façon ascendante)

(5)

Requête 4 ( between … Requête 4 ( between … un champ comprisun champ compris entre 2 valeurs) entre 2 valeurs)

Écrire des requêtes pour sélectionner les étudiants (noms) dont le code postal est compris entre 25000 et 25999. Aidez vous des informations sur :

https://www.w3schools.com/SQL/sql_between.asp Résultat :

+---+

| nom | +---+

| MONNIER |

| RIOT |

| KLEIN |

| BAILLIT | +---+

Proposer 3 solutions : 3 requêtes

* valeur>=25000 et valeur <26000

* valeur comprise entre 25000 et 25999. Utiliser l'instruction BETWEEN

* valeur comme "25" concaténer avec " %" (beaucoup moins propre)

Requête 5 (expressions régulières)Requête 5 (expressions régulières)

Aidez vous des informations la documentation en annexe (suivre le lien) pour les

expressions régulières ou sur : https://dev.mysql.com/doc/refman/5.7/en/regexp.html et https://www.w3schools.com/SQL/sql_like.asp

Avec la documentation ci dessus (cas de LIKE puis de REGEXP):

* Rechercher une expression régulière qui commence par un chiffre, suivi du chiffre "5", et de 3 chiffres (format D5DDD, D appartient à [0-9]).

* Rechercher une expression régulière qui commence par un caractère, suivi du caractère

"a" ou "e" puis de n'importe quel caractère.

• Écrire une requête pour sélectionner le nom des étudiants dont le nom a comme 2eme caractère "a" ou "e" et dont le code postal a comme 2eme chiffre "5" en utilisant LIKE (champ LIKE « expression en remplaçant _ pour un caractère et % pour une chaîne de caractères»)

• Écrire une requête pour sélectionner le nom des étudiants dont le nom a comme 2eme caractère "a" ou "e" et dont le code postal a comme 2eme chiffre "5" en utilisant REGEXP (champ REGEXP « expression régulière »), (LIKER idem).

Remarque : LIKE est plus rapide que REGEXP, voir article

https://www.psce.com/en/blog/2012/03/31/mysql-queries-with-regexp/

Résultat :

+---+---+

| nom | code_postal | +---+---+

| BAILLIT | 25200 | +---+---+

Requête 6 ( IN : un champ appartient à une liste de valeurs )Requête 6 ( IN : un champ appartient à une liste de valeurs )

Écrire une requête pour sélectionner les étudiants et les villes dont la ville appartient à cette liste ('strasbourg','mulhouse','cernay'). Utiliser l'instruction IN

Aidez vous des informations sur : https://www.w3schools.com/SQL/sql_in.asp Résultat :

+---+---+

| nom | ville | +---+---+

(6)

| FONTAINE-LEGIOT | Mulhouse |

| FAIVRE | Cernay |

| CHAVEAUX | Strasbourg | +---+---+

•• Requête 7 (utilisation de NULL)Requête 7 (utilisation de NULL)

Écrire la requête pour sélectionner le nom des étudiants dont le champ de la ville est vide (Utiliser l'instruction IS NULL) et dont le sexe est « H ».

Résultat :

+---+---+

| nom | ville | +---+---+

| VERNET | NULL |

| BAILLIT | NULL | +---+---+

Remarque : NULL est un cas particulier, on écrit jamais =NULL ou <>NULL mais IS NULL ou IS NOT NULL, voir https://www.w3schools.com/SQL/sql_null_values.asp

Faire la même requête mais en rajoutant les étudiants dont le champ de la ville est une chaîne de caractères vide

+---+---+

| nom | ville | +---+---+

| VERNET | NULL |

| BAILLIT | NULL |

| DUPONT | | +---+---+

Requête 8 (utilisation de LIMIT )Requête 8 (utilisation de LIMIT )

Dans une page Web, on désire sélectionner les 6 premiers étudiants triés par Groupe (descendant : plus grand au plus petit) puis par Nom (pour ordre alphabétique). Écrire la requête, utiliser l'instruction LIMIT

https://www.w3schools.com/SQL/sql_top.asp

SELECT * FROM table LIMIT 5,10; # Retourne les enregistrements 6 à 15 (https://dev.mysql.com/doc/refman/5.7/en/select.html)

Résultat :

+---+---+

| nom | groupe_id | +---+---+

| BAILLIT | 4 |

| DUPONT | 4 |

| VERNET | 4 |

| DUCHENNE | 3 |

| FAIVRE | 3 |

| FAIVRE | 3 | +---+---+

sélectionner les 4 suivants

+---+---+

| nom | groupe_id | +---+---+

| FONTAINE-LEGIOT | 3 |

| KENDE | 3 |

| KLEIN | 3 |

| PY | 3 | +---+---+

remarque : cette instruction n'est pas très normalisée d'un SGBD à l'autre // mysql

SELECT col FROM matable LIMIT 20;

// Oracle

(7)

SELECT col FROM matable WHERE rownum<=20;

// Microsoft SQL (top ou first)

SELECT TOP 20 col FROM matable;

•• Requête 9 Requête 9 (utilisation de DISTINCT)(utilisation de DISTINCT)

Écrire la requête pour afficher les villes distinctes de tous les étudiants dont le code postal commence par 90 et dont le nom de ville n'est pas NULL et n'est pas une chaîne vide. Utiliser le mot clé DISTINCT.

Résultat :

+---+

| ville | +---+

| Belfort |

| Valdoie |

| Bavilliers | +---+

Aidez vous des informations sur : https://www.w3schools.com/sql/sql_distinct.asp

Requête 10Requête 10 (requête avec des dates, fonctions now(), day(), month(), year()) (requête avec des dates, fonctions now(), day(), month(), year()) Écrire une requête pour afficher le nom et le groupe des étudiants dont la date de naissance est comprise entre le "2000-1-1" And "2000-12-31", qui sont des hommes et qui habitent Belfort ou Montbéliard (utiliser le code postal 90000 (Belfort) et

25200(Montbéliard)). Proposer une deuxième solution avec comme condition (dans le « WHERE ») : l’année est égale à "2000".

+---+---+

| nom | date_naissance | +---+---+

| FONTAINE-LEGIOT | 2000-01-01 |

| FAIVRE | 2000-01-01 |

| BOULANGER | 2000-01-01 |

| RIGOULOT | 1999-12-12 | +---+---+

* selon les mises à jour, votre résultat peut être différent

Aidez vous des informations sur https://www.w3schools.com/sql/sql_ref_mysql.asp.

Rechercher la fonction « YEAR ».

Requête 11Requête 11

Écrire une requête pour sélectionner les étudiants qui ont plus de 20 ans après le 30 septembre de la fin de l'année universitaire (mois de naissance inférieur à 10 si c'est

(8)

l'année de leur 20 ans). Ces étudiants doivent payer une sécurité sociale si ils ne sont pas boursiers . Ordonner les étudiants du plus jeune au plus vieux.

Pour plus d'informations : http://www.etudiant.gouv.fr/pid20411/sante.html

commencer par tester : SELECT day(now());

SELECT month(now());

SELECT year(now());

idée : plus de 20 ans entre aujourd'hui et leur date de naissance ou 20 ans et

…..

Résultat :

+---+---+

| nom | date_naissance | +---+---+

| FONTAINE-LEGIOT | 2000-01-01 |

| FAIVRE | 2000-01-01 |

| BOULANGER | 2000-01-01 |

| MOREAU | 1999-06-01 | +---+---+

* selon les mises à jour, votre résultat peut être différent

Si les dates ne sont pas correctes, utiliser l'instruction SQL suivante pour les mettre à jour UPDATE Etudiant SET date_naissance=DATE_ADD(date_naissance,INTERVAL 1 YEAR);

(9)

ANNEXE

7.3.5 Opérateurs de comparaison

Les opérations de comparaison retourne soit 1 (TRUE), 0 (FALSE) ou NULL. Ces fonctions s'appliquent aussi bien aux nombres qu'aux chaînes. Les chaînes sont automatiquement converties en nombre et les nombres en chaîne, suivant les besoins (comme en Perl).

MySQL effectue les comparaisons en suivant les règle suivantes

Si l'un au moins des argument est NULL, le résultat de la comparaison est NULL.

Si les deux argument sont des chaînes, ils se comparent en tant que chaînes.

Si les deux argument sont des entiers, ils se comparent en tant que entiers.

Si les deux argument est de type TIMESTAMP ou DATETIME, et l'autre argument est une constante, la constante est convertie au format TIMESTAMP avant la comparaison. Cette fonction est faite pour assurer la compatibilité ODBC.

Dans tous les autres cas, les arguments sont comparés en tant que nombre à virgule flottante.

Par défaut, les comparaisons de chaîne sont fait sans tenir compte de la casse, et en utilisant le jeu de caractère courant (ISO-8859-1 Latin1 par défaut, qui fonctionne bien pour l'anglais). Les exemples suivants illustrent les règles de conversions lors des opérations de comparaison.

mysql> SELECT 1 > '6x';

-> 0

mysql> SELECT 7 > '6x';

-> 1

mysql> SELECT 0 > 'x6';

-> 0

mysql> SELECT 0 = 'x6';

-> 1

= Egalité.

mysql> select 1 = 0;

-> 0

mysql> select '0' = 0;

-> 1

mysql> select '0.0' = 0;

-> 1

mysql> select '0.01' = 0;

-> 0

mysql> select '.01' = 0.01;

-> 1

<>

!= Différent

mysql> select '.01' <> '0.01';

-> 1

mysql> select .01 <> '0.01';

-> 0

mysql> select 'zorro' <> 'zorrro';

-> 1

<= Inférieur ou égal mysql> select 0.1 <= 2;

-> 1

< Strictement inférieur mysql> select 2 <= 2;

-> 1

>= Supérieur ou égal mysql> select 2 >= 2;

-> 1

> Strictement supérieur mysql> select 2 > 2;

-> 0

<=> Egalité :@: ce opérateur s'assure qu'on ne compare pas NULL et une valeur non nulle.

mysql> select 1 <=> 1, NULL <=> NULL, 1 <=> NULL;

-> 1 1 0

expression BETWEEN minimum AND maximum Si l'expression est comprise entre le minimum et le maximum, alors BETWEEN retourne 1, sinon 0. Cette fonction est équivalente à l'expression (minimum <=

expression AND expression <= maximum) si tous les arguments sont du même type. Le premier argument (expression) détermine la manière dont la comparaison va être faite. Si expression est une chaîne, la comparaison sera de type chaîne, et insensible à la casse. Si expression est une chaîne de type binaire, la comparaison sera de type chaîne, et sensible à la casse. Si expression est un entier, la comparaison sera de type numérique. Si expression est un nombre à virgule flottante, la comparaison sera de type numérique, à virgule flottante.

mysql> select 1 BETWEEN 2 AND 3;

-> 0

mysql> select 'b' BETWEEN 'a' AND 'c';

-> 1

mysql> select 2 BETWEEN 2 AND '3';

(10)

-> 1

mysql> select 2 BETWEEN 2 AND 'x-3';

-> 0

expression IN (value,...) Retourne 1 si expression est un membre de la liste IN, sinon retourne 0.Si toutes les valeurs de la liste IN sont constantes, alors elles sont toutes converties au type de expression, et triées. La recherche dans la listes est alors faite avec une recherche binaire. Cela signifie que la recherche est très rapide si la liste IN ne contient que des constantes. Si expression est une chaîne sensible à la casse, la comparaison avec les valeurs de IN en tiendra compte.

mysql> select 2 IN (0,3,5,'wefwf');

-> 0

mysql> select 'wefwf' IN (0,3,5,'wefwf');

-> 1

expression NOT IN (value,...) Identique à NOT (expression IN (value,...)).

ISNULL(expression ) Si expression est NULL, ISNULL() retourne 1, sinon 0.

mysql> select ISNULL(1+1);

-> 0

mysql> select ISNULL(1/0);

-> 1

Il faut noter que la comparaison à NULL avec = sera toujours fausse!

COALESCE(liste) Retourne le premier élément non NULL dans la liste.

mysql> select COALESCE(NULL,1);

-> 1

mysql> select ISNULL(NULL,NULL,NULL);

-> NULL

INTERVAL(N,N1,N2,N3,...) Retourne 1 si N1 < N2 < N3 < ... < Nn . Si il existe deux valeurs i et j, telles que i < j et Ni > Nj, alors la fonction retourne faux. Toutes les valeurs sont traitées comme des nombres. Cela permet l'utilisation d'une comparaison binaire, très rapide.

mysql> select INTERVAL(23, 1, 15, 17, 30, 44, 200);

-> 3

mysql> select INTERVAL(10, 1, 10, 100, 1000);

-> 2

mysql> select INTERVAL(22, 23, 30, 44, 200);

-> 0

Remarque : les opérateurs

:=

||, OR, XOR

&&, AND

BETWEEN, CASE, WHEN, THEN, ELSE

=, <=>, >=, >, <=, <, <>, !=, IS, LIKE, REGEXP, IN

|

&

<<, >>

-, +

*, /, DIV, %, MOD

^

- (unary minus), ~ (unary bit inversion) NOT, !

BINARY, COLLATE

<=>

Comparaison compatible avec NULL. Cet opérateur fait une comparaison d'égalité comme l'opérateur =, mais retourne 1 plutôt que NULL si les deux opérandes sont NULL, et 0 plutôt que NULL si un opérande est NULL

<>, !=

Différent :

mysql> SELECT '.01' <> '0.01';

-> 1

mysql> SELECT .01 <> '0.01';

-> 0

mysql> SELECT 'zapp' <> 'zappp';

-> 1

0 is not NULL !

(11)

ANNEXE Expressions régulières MySQL

Une expression régulière (regex) est la meilleure méthode pour spécifier une recherche complexe.

MySQL utilise l'implémentation de Henry Spencer des expressions régulières qui tend à être conforme à POSIX 1003.2. MySQL en utilise la version étendue.

Ceci est une référence simplifiée qui n'aborde pas les détails. Pour avoir plus

d'informations détaillées, regardez la page de manuel regex(7) de Henry Spencer qui est inclue dans la distribution des sources. Contributeurs .

Une expression régulière décrit un jeu de chaînes de caractères. La plus simple est celle qui ne comporte pas de caractères spéciaux. Par exemple, la regexp bonjour trouvera bonjour et rien d'autre.

Les expression régulières non-trivialles utilisent des constructions spéciales pour pouvoir trouver plus d'une chaîne. Par exemple, la regexp bonjour|monde trouve la chaîne bonjour ou la chaîne monde .

Voici un exemple encore plus complexe : la regexp B[an]*s trouve l'une des chaînes suivantes Bananas , Baaaaas , Bs , et n'importe quelle autre chaîne commençant par un B , se terminant par un s , et contenant n'importe quel nombre de a et de n au milieu. Une expression régulière peut utiliser l'un des caractères spéciaux ou constructions suivants : ^

Correspond au début de la chaîne.

mysql> SELECT "fo\nfo" REGEXP "^fo$"; -> 0 mysql> SELECT "fofo" REGEXP "^fo"; -> 1 $

Correspond à la fin de la chaîne.

mysql> SELECT "fo\no" REGEXP "^fo\no$"; -> 1 mysql> SELECT "fo\no" REGEXP "^fo$"; -> 0 .

N'importe quel caractère (nouvelle ligne inclus).

mysql> SELECT "fofo" REGEXP "^f.*"; -> 1 mysql> SELECT "fo\nfo" REGEXP "^f.*"; -> 1 a*

Correspond à toute séquence de zéro ou plus caractères a .

mysql> SELECT "Ban" REGEXP "^Ba*n"; -> 1 mysql> SELECT "Baaan" REGEXP "^Ba*n"; -> 1 mysql> SELECT "Bn" REGEXP "^Ba*n"; -> 1 a+

Correspond à toute séquence de un ou plus caractères a .

mysql> SELECT "Ban" REGEXP "^Ba+n"; -> 1 mysql> SELECT "Bn" REGEXP "^Ba+n"; -> 0

Remarque : dans la documentation ci contre, les exemples sont très simplifiés, donc voici un exemple : SELECT nom

FROM Etudiant WHERE

nom REGEXP '^f.*';

Retourne les étudiant dont le nom commence par « f »

^(début de chaine), le caractère

« f » puis n'importe quel caractère

répété zéro ou n fois

(12)

a?

Correspond à zéro ou un caractère a .

mysql> SELECT "Bn" REGEXP "^Ba?n"; -> 1 mysql> SELECT "Ban" REGEXP "^Ba?n"; -> 1 mysql> SELECT "Baan" REGEXP "^Ba?n"; -> 0 de|abc

Correspond aux séquences de de ou de abc . mysql> SELECT "pi" REGEXP "pi|apa"; -> 1 mysql> SELECT "axe" REGEXP "pi|apa"; -> 0 mysql> SELECT "apa" REGEXP "pi|apa"; -> 1 mysql> SELECT "apa" REGEXP "^(pi|apa)$"; -> 1 mysql> SELECT "pi" REGEXP "^(pi|apa)$"; -> 1 mysql> SELECT "pix" REGEXP "^(pi|apa)$"; -> 0 (abc)*

Correspond à zéro ou plus séquences de abc .

mysql> SELECT "pi" REGEXP "^(pi)*$"; -> 1 mysql> SELECT "pip" REGEXP "^(pi)*$"; -> 0 mysql> SELECT "pipi" REGEXP "^(pi)*$"; -> 1 {1}

{2,3}

Voici une façon plus générale d'écrire les regexps qui correspondent à plusieurs occurences du dernier atome.

a*

Peut être écrit a{0,} . a+

Peut être écrit a{1,} . a?

Peut être écrit a{0,1} .

Pour être plus précis, un atome suivi d'une accolade contenant un entier i et pas de virgule trouve une séquence de exactement i atomes.

Un atome suivi d'une accolade contenant un entier i et une virgule trouve une séquence de i ou plus atomes.

Un atome suivi d'une accolade contenant deux entiers i et j séparés d'une virgule trouve les séquences de i à j (inclusif) atomes.

Les deux arguements doivent être compris entre 0 et RE_DUP_MAX (par défaut 255), inclusif. S'il y'a deux arguements, le second doit être supérieur ou égal au premier.

[a-dX]

[^a-dX]

Trouve n'importe quel caractère qui est (ou n'est pas, si ^ est utilisé) a , b , c , d ou X . Pour inclure le caractère litéral ] , il doit suivre immédiatement le crochet ouvrant [ . Pour inclure le caractère litéral - , il doit être écrit en premier ou en dernier. Ce qui fait

(13)

que [0-9] correspond à n'importe quel chiffre. Chaque caractère qui n'a pas de signification spéciale à l'intérieur une paire de [] ne joue pas de rôle spécial et ne correspond qu'à lui même.

mysql> SELECT "aXbc" REGEXP "[a-dXYZ]"; -> 1 mysql> SELECT "aXbc" REGEXP "^[a-dXYZ]$"; -> 0 mysql> SELECT "aXbc" REGEXP "^[a-dXYZ]+$"; -> 1 mysql> SELECT "aXbc" REGEXP "^[^a-dXYZ]+$"; -> 0 mysql> SELECT "gheis" REGEXP "^[^a-dXYZ]+$"; -> 1 mysql> SELECT "gheisa" REGEXP "^[^a-dXYZ]+$"; -> 0 [[.charactères.]]

La séquence de caractères de cet élément d'assemblage. La séquence est un élément de la liste contenue entre les crochets. Une telle expression contenant un élément d'assemblage multi-caractères peut ainsi trouver plus d'un caractère. Par exemple, si la séquence d'assemblage inclut un élément ch , alors l'expression regulière [[.ch.]]*c trouve les cinq premiers caractères de chchcc .

[=character_class=]

Une classe d'équivalence, remplaçant les séquences de caractères de tous les éléments de l'assemblage équivalents à celui-ci, lui même inclut.Par exemple, si o et (+) sont membres d'une classe d'équivalence, alors [[=o=]] , [[=(+)=]] , et [o(+)] sont tous des synonymes. Une classe d'équivalence ne doit pas être un point final d'intervalle.

[:classe_de_caractères:]

Dans une expression entre crochets, le nom d'une classe de caractères entourée de [: et :] remplace la liste de tous les caractères appartenant à cette classe. Les noms des classes de caractères sont :

Nom Nom Nom alnum digit punct alpha graph space blank lower upper cntrl print xdigit

Voilà les classes de caractères définies dans la page de manuel ctype(3) . Une locale peut en fournir d'autres. Une classe de caractère ne doit pas être utilisée en tant que point final d'intervalle.

mysql> SELECT "justalnums" REGEXP "[[:alnum:]]+"; -> 1 mysql> SELECT "!!" REGEXP "[[:alnum:]]+"; -> 0 [[:<:]]

[[:>:]]

Ceux là trouvent la chaîne nulle qui précède et suit chaque mot. Un mot est défini comme étant une séquence de caractères qui n'est ni suivi ni précédée d'un caractère de mot. Un caractère de mot est un caractère alnum (défini par ctype(3) ) ou un tiret bas ( _ ).

mysql> SELECT "a word a" REGEXP "[[:<:]]word[[:>:]]"; -> 1 mysql> SELECT "a xword a" REGEXP "[[:<:]]word[[:>:]]"; -> 0

mysql> SELECT "weeknights" REGEXP "^(wee|week)(knights|nights)$"; -> 1

Références

Documents relatifs

Il sélectionne les meilleurs animaux et les croise avec des reproducteurs reconnus pour leurs qualités par des valeurs ou des index : c’est la sélection et l’accouplement..

• Écrire une requête pour sélectionner le nom des étudiants dont le nom a comme 2eme caractère &#34;a&#34; ou &#34;e&#34; et dont le code postal a comme 2eme chiffre &#34;5&#34; en

Dans chaque classe, on retrouve les unités, les dizaines et les centaines.. On doit laisser un espace entre les chiffres de

La valeur est constante le long de la plaque de cuivre quelquesoit le point de mesure.. C) Le champ est perpendiculaire aux armatures du condensateur, orienté du pôle + vers le pôle

De ce fait, afin d’être efficace dans la prise en charge du trouble de l’usage, il est important d’agir non seulement sur les conséquences de l’usage, à savoir

Préciser la date retournée par le serveur lors de la réponse HTTP4. Quelle partie de la réponse du serveur s’affiche sur l’écran

Déterminer au moins trois paires d’entiers consécutifs de sorte que l’entier obtenu par concaténation des deux entiers (pris dans un ordre croissant ou décroissant) est le

Vinya Heredad Blanc de Blanc (Macabeu • Xarello • Parellada) - AOP Catalogne Vinya Heredad Rouge (Grenache noir • Mourvèdre • Tempranillo) - AOP Catalogne Segura