70
Chapitre 5 • Le langage SQL DML
L’existence de lignes en double dans une table pose de nombreux problèmes logiques dont le lecteur trouvera le développement dans [Codd, 1990] et [Date, 1992]
par exemple.
Unicité des lignes par construction
Si la clause select cite tous les composants de l’un des identifiants de la table,
l’unicité des lignes du résultat est garantie. Il est donc inutile 4 d’inclure distinct.
5.2.5 Des conditions de sélection plus complexes
a) Autres conditions élémentaires
Une condition élémentaire peut porter sur la présence de la valeur null :
CAT is null
CAT is not null
On pourra s’étonner qu’il faille une forme spéciale (is, is not) pour exprimer
l’égalité ou la non égalité dans le cas des valeurs null. Pourquoi en effet n’a-t-on
pas utilisé la forme classique : CAT = null et CAT <> null ? Nous justifierons ce
choix lorsque nous examinerons plus en détail la question de l’information incomplète (Section 6.10). Nous y verrons que ces deux conditions, quelle que soit la
valeur de CAT, ne pourront jamais avoir la valeur vrai.
Une condition peut aussi porter sur l’appartenance à une liste :
CAT in ('C1','C2','C3')
LOCALITE not in ('Toulouse','Namur','Breda')
ou à un intervalle :
COMPTE between 1000 and 4000
CAT not between 'B2' and 'C1'
ou encore sur la présence de certains caractères dans une valeur :
CAT like '_1'
ADRESSE like '%Neuve%'
Ces dernières conditions utilisent un masque qui décrit la structure générale des
valeurs désignées. Dans ce masque, le signe "_ " désigne un caractère quelconque et
" % " désigne toute suite de caractères, éventuellement vide; tout autre caractère doit
être présent là où il apparaît. La première expression est satisfaite dans la table
CLIENT pour les valeurs de CAT constituées d’un caractère quelconque suivi du
caractère "1", soit l’une des valeurs " A1", " B1", " C1". La seconde est satisfaite par
4. et d’ailleurs déconseillé du point de vue des performances.
Chapitre 5 • Le langage SQL DML
L’existence de lignes en double dans une table pose de nombreux problèmes logiques dont le lecteur trouvera le développement dans [Codd, 1990] et [Date, 1992]
par exemple.
Unicité des lignes par construction
Si la clause select cite tous les composants de l’un des identifiants de la table,
l’unicité des lignes du résultat est garantie. Il est donc inutile 4 d’inclure distinct.
5.2.5 Des conditions de sélection plus complexes
a) Autres conditions élémentaires
Une condition élémentaire peut porter sur la présence de la valeur null :
CAT is null
CAT is not null
On pourra s’étonner qu’il faille une forme spéciale (is, is not) pour exprimer
l’égalité ou la non égalité dans le cas des valeurs null. Pourquoi en effet n’a-t-on
pas utilisé la forme classique : CAT = null et CAT <> null ? Nous justifierons ce
choix lorsque nous examinerons plus en détail la question de l’information incomplète (Section 6.10). Nous y verrons que ces deux conditions, quelle que soit la
valeur de CAT, ne pourront jamais avoir la valeur vrai.
Une condition peut aussi porter sur l’appartenance à une liste :
CAT in ('C1','C2','C3')
LOCALITE not in ('Toulouse','Namur','Breda')
ou à un intervalle :
COMPTE between 1000 and 4000
CAT not between 'B2' and 'C1'
ou encore sur la présence de certains caractères dans une valeur :
CAT like '_1'
ADRESSE like '%Neuve%'
Ces dernières conditions utilisent un masque qui décrit la structure générale des
valeurs désignées. Dans ce masque, le signe "_ " désigne un caractère quelconque et
" % " désigne toute suite de caractères, éventuellement vide; tout autre caractère doit
être présent là où il apparaît. La première expression est satisfaite dans la table
CLIENT pour les valeurs de CAT constituées d’un caractère quelconque suivi du
caractère "1", soit l’une des valeurs " A1", " B1", " C1". La seconde est satisfaite par
4. et d’ailleurs déconseillé du point de vue des performances.
