0% ont trouvé ce document utile (0 vote)
26 vues23 pages

Introduction au langage SQL et ses commandes

Transféré par

hibadhouib6
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
26 vues23 pages

Introduction au langage SQL et ses commandes

Transféré par

hibadhouib6
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Chapitre 5 : Le langage SQL

I. Présentation de SQL
SQL signifie Structured Query Language est le langage des bases de données relationnelles répandant à
la fois aux problématiques de création des objets de base de données (modèle), de manipulation des
données (algèbre relationnelle), de gestion de la sécurité (droits d’accès), de traitements locaux de
données (procédures).[7]
Il s’agit d’un langage non procédural qui a été conçu par IBM dans les années 70. Il est devenu le
langage standard des systèmes de gestion de bases de données relationnelles (SGBDR) depuis 1986.
Il est utilisé par les principaux SGBDR du marché : Oracle, SQL Server, MySQL, Access, DB2, …
Remarque : Il existe plusieurs implémentations de SQL chez les principaux éditeurs (Voir Annexes).
Dans le reste de ce chapitre, l’implémentation utilisée est celle du SGBD Oracle.

II. Définition de données


II.1. Création des tables
Syntaxe : Pour créer une table, on fait recours à l’instruction suivante :
CREATE TABLE nom_table (
Attribut1 type1,
Attribut2 type2,
….,
Contrainte1,
Contrainte2,

);

Type des données : [8]


- NUMBER( N ) : Entier à N chiffres
- NUMBER( N , M ) : Réel à N chiffres au total, M après la virgule.
- DATE : Date complète (date et/ou heure)
- VARCHAR( N ), VARCHAR2( N ) : chaîne de N caractères (entre ‘ ‘) dont les espaces enfin de
la chaîne seront éliminés (longueur variable).
- CHAR( N ) : Chaîne de N caractères (longueur fixe).

Contraintes d’intégrité
Définition : Dans la définition d’une table, on peut indiquer des contraintes d’intégrité portant sur
une ou plusieurs colonnes.
Les contraintes possibles sont : UNIQUE, PRIMARY KEY, FOREIGN KEY … REFERENCES et
CHECK.
Chaque contrainte doit être nommée pour pouvoir la mettre à jour ultérieurement.

Création :
- CONSTRAINT nom_contrainte UNIQUE (colonne1, colonne2, …) : interdit qu’une colonne,
ou la concaténation de plusieurs colonnes, contiennent deux valeurs identiques.

29
Chapitre 5 : Le langage SQL

- CONSTRAINT nom_contrainte PRIMARY KEY (attribut1, attribut2, …) : l’ensemble des


attributs attribut1, attribut2, … forment la clé primaire de la relation.

- CONSTRAINT nom_contrainte FOREIGN KEY (attribut_clé_étrangère) REFERENCES


nom_table (attribut_référence) : l’attribut de la relation en cours représente la clé étrangère
qui fait référence à la clé primaire de la table indiquée.

- CONSTRAINT nom_contrainte CHECK (condition) : contrainte là où on doit


obligatoirement satisfaire la condition telle qu’elle est énoncée.

- Exemple :
CREATE TABLE CLASSE (
NUMCLASSE NUMBER(5),
NOMCLASSE VARCHAR2(10)
);

CREATE TABLE ETUDIANT (


NCE NUMBER(5),
NOM VARCHAR2(10),
PRENOM VARCHAR2(10),
NUMCLASSE VARCHAR2(10),
CONSTRAINT PK_ETUDIANT PRIMARY KEY(NCE),
CONSTRAINT U_NOM UNIQUE(NOM),
CONSTRAINT CK_NOM CHECK(NOM = UPPER(NOM)),
CONSTRAINT FK_ETUDIANT_CLASSE FOREIGN KEY(NUMCLASSE)
REFERENCES CLASSE(NUMCLASSE)
);

II.2. Renommage des tables


Syntaxe : Pour changer le nom d’une table, on fait recours à l’instruction suivante :
RENAME Ancien_Nom
TO Nouveau_Nom ;

Exemple : Etant donné l’entité ETUDIANT, si on souhaite la renommer par STUDENT, on écrit :
RENAME ETUDIANT
TO STUDENT ;

II.3. Destruction des tables


Syntaxe : Pour supprimer le contenu d’une table ainsi que son schéma, on utilise l’instruction qui suit :
DROP TABLE nom_table ;

30
Chapitre 5 : Le langage SQL

Remarque : Attention, la suppression d’une table engendre la perte des données qu’elle contient.
Exemple : Pour supprimer la table ETUDIANT ainsi que son contenu, on fait recours à l’instruction :
DROP TABLE ETUDIANT ;

II.4. Modification des tables


Il existe plusieurs modifications que l’on peut effectuer sur une table donnée.
Ajout d’attributs : Après avoir créé la base de données, des tâches de maintenance semblent être parfois
nécessaires. D’où l’ajout d’un nouvel attribut :
ALTER TABLE nom_table
ADD (attribut type, …) ;

Exemple : Etant donné la table Commande, l’ajout du champ Montant à cette table revient à écrire :
ALTER TABLE COMMANDE
ADD (MONTANT NUMBER(10,3)) ;

Modification des attributs : Après avoir créé la base de données, on peut modifier le type d’un attribut en
utilisant l’instruction suivante :
ALTER TABLE nom_table
MODIFY (attribut type, …) ;

Exemple : Modifier le nombre de chiffres du champ Montant de la table Commande nécessite le recours
à l’instruction :
ALTER TABLE COMMANDE
MODIFY (MONTANT NUMBER(12,3)) ;

Ajout de contraintes : Après avoir créé la base de données, on peut ajouter une nouvelle contrainte
d’intégrité grâce à l’instruction suivante :
ALTER TABLE nom_table
ADD CONSTRAINT nom_contrainte definition_contrainte ;

Exemple : Ajouter une contrainte à la table Commande qui permet d’obliger des insertions de montants
positifs
ALTER TABLE COMMANDE
ADD CONSTRAINT CK_MONTANT CHECK(MONTANT >= 0) ;
Suppression de contraintes : Pour supprimer une contrainte, on procède comme indique la syntaxe de
cette instruction :
ALTER TABLE nom_table
DROP CONSTRAINT nom_contrainte ;

31
Chapitre 5 : Le langage SQL

Exemple : Supprimer la contrainte ck_montant de la table Commande


ALTER TABLE COMMANDE
DROP CONSTRAINT CK_MONTANT ;

III. Manipulation de données


III.1. Ajout de données
Syntaxe : Pour ajouter un tuple dans une table, on procède comme suit :
INSERT INTO nom_table
VALUES ( valeur_attribut1, valeur_attribut2, … ) ;

Exemple : Etant donné la table Etudiant(NCE, nom, prenom, ville). Si on souhaite insérer les informations
d’un nouvel étudiant disposant des informations suivantes (1234, Ben Salah, Salah, Djerba), on écrit :
INSERT INTO ETUDIANT
VALUES (1234, ‘BEN SALAH’, ‘SALAH’, ‘DJERBA’) ;

III.2. Modification de données


Syntaxe : Pour modifier la valeur d’un attribut relatif à un ou plusieurs tuples d’une table, on procède
comme suit :
UPDATE nom_table
SET attribut1 = valeur1, attribut2 = valeur2, …
[WHERE condition] ;

Exemple : Etant donné la table Etudiant (NCE, nom, prenom, ville). Si jamais l’étudiant Salah Ben Salah
habite maintenant à Tunis, on écrit dans ce cas :
UPDATE ETUDIANT
SET VILLE=’TUNIS’
WHERE NCE=1234 ;

III.3. Suppression de données


Syntaxe : Il s’agit de supprimer un ou plusieurs tuples d’une table. Pour ce faire, on écrit :
DELETE FROM nom_table
[WHERE condition] ;

Exemple : Si on souhaite supprimer l’étudiant de NCE 1234 de la table Etudiant, on écrit :


DELETE FROM ETUDIANT
WHERE NCE=1234 ;

IV. Interrogation de données


IV.1. Généralités
Il s’agit de chercher un ou plusieurs tuples de la base de données.

32
Chapitre 5 : Le langage SQL

Syntaxe :
L’ordre SELECT possède six clauses différentes, dont seules les deux premières sont obligatoires.[9]
Elles sont données ci-dessous dans l’ordre dans lequel elles doivent apparaître quand elles sont
utilisées :
SELECT …
FROM …
[WHERE …
GROUP BY …
HAVING …
ORDER BY …] ;

IV.2. Projection
Tous les attributs d’une table :
SELECT *
FROM nom_table ;

Remarque : Il est possible de mettre le mot clé facultatif DISTINCT derrière l’ordre SELECT. Il permet
d’éliminer les duplications : si, dans le résultat, plusieurs lignes sont identiques, une seule sera
conservée.

Exemple : Liste de tous les étudiants


SELECT *
FROM ETUDIANT ;

Quelques attributs :
SELECT attribut1, attribut2, …
FROM nom_table ;

Exemple : Liste des noms des étudiants sans duplication


SELECT DISTINCT NOM
FROM ETUDIANT ;

IV.3. Restriction
Les restrictions se traduisent en SQL à l’aide du prédicat « WHERE » comme suit :
SELECT attribut1, attribut2, …
FROM nom_table
WHERE predicat ;

Un prédicat simple est la comparaison de deux expressions ou plus au moyen d’un opérateur logique.
Les trois types d’expressions (arithmétiques, caractères ou dates) peuvent être comparées au moyen des
opérateurs d’égalité ou d’ordre (=, !=, <, <=, >, >=) :
- pour les types date, la relation d’ordre est l’ordre chronologique

33
Chapitre 5 : Le langage SQL

- pour les types caractères, la relation d’ordre est l’ordre lexicographique.

Nous résumons les principales formes de restrictions dans ce qui suit :


WHERE exp1 = exp2
Exemple : Liste des étudiants qui s’appellent Ali
SELECT *
FROM ETUDIANT
WHERE PRENOM = ’ALI’ ;

WHERE exp1 != exp2


Exemple : Liste des étudiants qui ne s’appellent pas Ali
SELECT *
FROM ETUDIANT
WHERE PRENOM != ’ALI’ ;

WHERE exp1 < exp2


WHERE exp1 <= exp2
Exemple : Liste des étudiants ayant les NCE inférieurs à 100
SELECT *
FROM ETUDIANT
WHERE NCE <= 100 ;

WHERE exp1 > exp2_


WHERE exp1 >= exp2
Exemple : Liste des étudiants ayant les NCE supérieurs à 100
SELECT *
FROM ETUDIANT
WHERE NCE >= 100 ;

WHERE exp1 BETWEEN exp2 AND exp3


La condition est vrai si exp1 est compris entre exp2 et exp3 (bornes incluses)
Exemple : Liste des étudiants ayant les NCE compris entre 100 et 200
SELECT *
FROM ETUDIANT
WHERE NCE BETWEEN 100 AND 200 ;

WHERE exp1 LIKE exp2 :


LIKE teste l’égalité de deux chaînes en tenant compte des caractères jokers dans la 2ème chaîne:
« _ » remplace un caractère exactement,
« % » remplace une chaîne de caractères de longueur quelconque (y compris de longueur
nulle)

34
Chapitre 5 : Le langage SQL

Exemple : Liste des étudiants ayant les noms commençant par ‘A’ et contenant au moins 2
caractères.
SELECT *
FROM ETUDIANT
WHERE NOM LIKE ‘A_%’ ;

WHERE exp1 IN (exp2, exp3, …)


Le prédicat est vrai si exp1 est égale à l’une des expressions de la liste entre parenthèses.
Exemple : Liste des étudiants ayant les prénoms appartenant à la liste (Ali, Salah, Bechir)
SELECT *
FROM ETUDIANT
WHERE PRENOM IN (‘ALI’, ‘SALAH’, ‘BECHIR’) ;

WHERE exp IS NULL


Exemple : Liste des étudiants dont les prénoms sont non définis
SELECT *
FROM ETUDIANT
WHERE PRENOM IS NULL ;

WHERE EXISTS (sous_interrogation)


La clause EXISTS est suivie d’une sous interrogation entre parenthèses, et prend la valeur vraie
s’il existe au moins une ligne satisfaisant les conditions de la sous interrogation.
Exemple : Liste des noms des classes qui ont au moins un étudiant ayant le nom ’Ali’.
SELECT NOMCLASSE FROM CLASSE
WHERE EXISTS (SELECT * FROM ETUDIANT
WHERE [Link] = [Link]
AND NOMETUDIANT=’ALI’);

Remarque :
On peut trouver, de même, les négations des prédicats BETWEEN, NULL, LIKE, IN, EXISTS à savoir :
NOT BETWEEN, NOT NULL, NOT LIKE, NOT IN et NOT EXISTS.

IV.4. Tri
Les lignes constituant le résultat d’un SELECT sont obtenues dans un ordre indéterminé. La clause
ORDER BY précise l’ordre dans lequel la liste des lignes sélectionnées sera donnée.

Syntaxe :
ORDER BY exp1 [DESC], exp2 [DESC], …
L’option facultative DESC donne un tri par ordre décroissant. Par défaut, l’ordre est croissant.
Le tri se fait d’abord selon la première expression, puis les lignes ayant la même valeur pour la première
expression sont triées selon la deuxième, …
Remarque : Les valeurs nulles sont toujours en tête quel que soit l’ordre du tri (ascendant ou

35
Chapitre 5 : Le langage SQL

descendant).

Exemple : Liste des étudiants ordonnés par ordre croissant des NCE et décroissant des noms
SELECT *
FROM ETUDIANT
ORDER BY NCE, NOM Desc;

IV.5. Regroupement
IV.5.1. La clause GROUP BY
Il est possible de subdiviser une table en groupes, chaque groupe étant l’ensemble de lignes ayant une
valeur commune.
Syntaxe :
GROUP BY exp1, exp2, …
Cette clause groupe en une seule ligne toutes les lignes pour lesquelles exp1, exp2, … ont la même
valeur.

Remarques :
- Cette clause se place juste après la clause WHERE, ou après la clause FROM si la clause
WHERE n’existe pas.
- Des lignes peuvent être éliminées avant que le groupe ne soit formé grâce à la clause WHERE.

Exemples :
Liste des départements ainsi que le nombre de leurs employés
SELECT DEPT, COUNT(*)
FROM EMP
GROUP BY DEPT;
Liste des départements ainsi que le nombre de leurs secrétaires
SELECT DEPT, COUNT(*)
FROM EMP
WHERE POSTE = ‘SECRETAIRE’
GROUP BY DEPT;

IV.5.2. La clause HAVING


HAVING sert à préciser quels groupes doivent être sélectionnés.
Elle se place après la clause GROUP BY.
Syntaxe :
HAVING predicat

Remarque : Le prédicat suit la même syntaxe que celui de la clause WHERE. Cependant, il ne peut
porter que sur des caractéristiques de groupe (fonctions de groupe ou expression figurant dans la clause
GROUP BY)
Exemple :

36
Chapitre 5 : Le langage SQL

SELECT DEPT, COUNT(*)


FROM EMP
WHERE POSTE = ‘SECRETAIRE’
GROUP BY DEPT
HAVING COUNT(*) > 1 ;

IV.6. Opérateurs ensemblistes


IV.6.1. Union
L’opérateur UNION permet de fusionner deux sélections de tables pour obtenir un ensemble de lignes
égal à la réunion des lignes des deux sélections. Les lignes communes n’apparaîtront qu’une fois.

Exemple : Liste des ingénieurs des deux filiales


SELECT * FROM EMP1 WHERE POSTE = ‘INGENIEUR’
UNION
SELECT * FROM EMP2 WHERE POSTE = ‘INGENIEUR’ ;

IV.6.2. Différence
L’opérateur MINUS permet d’ôter d’une sélection les lignes obtenues dans une deuxième sélection.

Exemple : Liste des départements qui ont des employés dans la première filiale mais pas dans la
deuxième
SELECT DEPT FROM EMP1
MINUS
SELECT DEPT FROM EMP2;
IV.6.3. Intersection
L’opérateur INTERSECT permet d’obtenir l’ensemble des lignes communes à deux interrogations.

Exemple : Liste des départements qui ont des employés dans les deux filiales
SELECT DEPT FROM EMP1
INTERSECT
SELECT DEPT FROM EMP2;

IV.7. Jointure
IV.7.1. Définition
Quand on précise plusieurs tables dans la clause FROM, on obtient le produit cartésien des tables.
Le produit cartésien de deux tables offre en général peu d’intérêt.
Ce qui est normalement souhaité, c’est de joindre les informations de diverses tables, en précisant
quelles relations les relient entre elles. C’est la clause WHERE qui permet d’obtenir ce résultat. Elle vient
limiter cette sélection en ne conservant que le sous-ensemble du produit cartésien qui satisfait le
prédicat.
Exemple : Liste des noms des étudiants avec les noms de leurs classes

37
Chapitre 5 : Le langage SQL

SELECT NOMETUDIANT, NOMCLASSE


FROM ETUDIANT, CLASSE
WHERE [Link] = [Link] ;

IV.7.2. Jointure d’une table à elle même


Il peut être utile de rassembler des informations venant d’une ligne d’une table avec des informations
venant d’une autre ligne de la même table.
Dans ce cas, il faut renommer au moins l’une des deux tables en lui donnant un synonyme, afin de
pouvoir préfixer sans ambiguïté chaque nom de colonne.

Exemple : Lister les employés qui ont un supérieur en indiquant pour chacun le nom de son supérieur
SELECT [Link] EMPLOYE, [Link] SUPERIEUR
FROM EMP, EMP SUPE
WHERE [Link] = [Link] ;

V. Contrôle de données
V.1. Gestion des utilisateurs
Tout accès à la base de données s’effectue par l’intermédiaire de la notion d’utilisateur (compte Oracle).
Chaque utilisateur est défini par :
- un nom d’utilisateur
- un mot de passe
- un ensemble de privilèges

V.1.1. Création d’un utilisateur


Syntaxe : Pour créer un utilisateur, on doit spécifier le nom de l’utilisateur ainsi que le mot de passe via
l’instruction :
CREATE USER utilisateur IDENTIFIED BY mot_de_passe ;

Exemple :
CREATE USER ALI IDENTIFIED BY Ae3OPd ;

V.1.2. Modification d’un compte utilisateur


Syntaxe : Pour modifier le mot de passe d’un utilisateur, on écrit :
ALTER USER utilisateur IDENTIFIED BY nouveau_mot_de_passe ;

Exemple :
CREATE USER ALI IDENTIFIED BY A23ePs ;

V.1.3. Suppression d’un utilisateur


Syntaxe : Pour supprimer un compte utilisateur, on écrit :

38
Chapitre 5 : Le langage SQL

DROP USER utilisateur [CASCADE] ;

L’utilisation de CASCADE signifie que la suppression de l’utilisateur est accompagné par la suppression
de tous les schémas qu’il a créé.

Exemple :
DROP USER Ali CASCADE ;

V.2. Gestion des privilèges


V.2.1. Attribution de privilèges
Un privilège peut être attribué à un utilisateur par l’ordre GRANT.
Syntaxe :
GRANT privilège
[ON table]
TO utilisateur [WITH GRANT OPTION] ;

Remarque : Des droits peuvent être accordés à tous les utilisateurs par un seul ordre GRANT en utilisant
le mot réservé PUBLIC à la place du nom d’utilisateur.

Principaux Privilèges :
SELECT : lecture
INSERT : insertion
UPDATE : mise à jour
DELETE : suppression
DBA, ALL : tous les privilèges

Si la clause WITH GRANT OPTION est spécifiée, le bénéficiaire peut à son tour assigner le privilège qu’il
a reçu à d’autres utilisateurs.

Exemples :
GRANT SELECT
ON ETUDIANT
TO PUBLIC ;

GRANT UPADATE, DELETE


ON ETUDIANT
TO Ali WITH GRANT OPTION ;

V.2.2. Suppression des privilèges


Un privilège peut être enlevé à un utilisateur par l’ordre REVOKE.

Syntaxe :

39
Chapitre 5 : Le langage SQL

REVOKE privilège
[ON table]
FROM utilisateur ;

Exemples :
REVOKE SELECT
ON ETUDIANT
FROM Ali ;

40
Annexes
Annexes

Annexe I : Historique des SGBDR


Annexe II : La normalisation
Annexe III : Implémentation de SQL chez les principaux éditeurs
Annexe IV : Présentation de quelques fonctions SQL
Annexe I : Historique des SGBDR

Annexe I : Historique des SGBDR

1
Annexe II : La normalisation

Annexe II : La normalisation

I. Intérêt de la normalisation dans la conception de base de données

Utilisation d’une approche


descendante telle que la
modélisation EA
Sources de données

Utilisateurs
Conversion du modèle EA
en un ensemble de relations
Spécification des
exigences des
utilisateurs Utilisation de la normalisation en tant
Ensemble de qu’une technique de validation,
Formulaires utilisés et relations bien conçues pour vérifier la structure de
états générés au sein Seconde relations.
de l’entreprise approche

Sources qui décrivent


l’entreprise, telles que le Première
dictionnaire de données approche
et les modèles de
données de l’entreprise
Utilisation de la normalisation
Comme une technique montante
pour créer un ensemble de
relations.

2
Annexe II : La normalisation

II. Illustration graphique du processus de normalisation

Sources de données

Utilisateurs Spécification des Formulaires utilisés et Sources qui décrivent


exigences des états générés au sein l’entreprise, telles que le
utilisateurs de l’entreprise dictionnaire de données
et les modèles de
données de l’entreprise

Conversion des attributs en forme de


tableau

Forme non normalisée


(UNF)

Suppression des groupes répétitifs

Première Forme normale


(1NF)

Suppression des dépendances


partielles

Deuxième Forme normale


(2NF)

Suppression des dépendances


transitives
Troisième Forme normale
(3NF)

3
Annexe III : Implémentation de SQL chez les principaux éditeurs

Annexe III : Implémentation de SQL chez les principaux éditeurs

I. Différents types SQL disponibles


Type SQL Oracle IBM DB2 SQL Server PostGreSQL MySQL
CHAR Oui Oui Oui Oui Oui
VARCHAR Oui Oui Oui Oui Oui
NCHAR Oui GRAPHIC[(n)] Oui Non Oui
NVARCHAR Oui VARGRAPHIC[(n)] Oui Non Oui
CLOB Oui Oui TEXT TEXT LONGTEXT
NCLOB Oui Non NTEXT Non Non
DATE Oui Oui Non Oui Oui
TIME Non Oui Non Oui Oui
TIMESTAMP Oui Oui DATETIME Oui DATETIME(2)
INTERVAL Oui Non Non (1) Non
TIME WITH TIME
Non Non Non Oui Non
ZONE
TIME STAMP WITH
Oui Non Non Oui Non
TIME ZONE
BIGINT Oui Oui Oui Oui Oui
INTEGER NUMBER Oui Oui Oui Oui
SMALLINT Oui Oui Oui Oui Oui
FLOAT Oui Oui Oui Non Oui
REAL Oui Oui Oui Oui Oui
DOUBLE PRECISION Oui Oui Non Oui Oui
NUMERIC Oui NUMERIC Oui Oui Oui
DECIMAL Oui Non Non Oui Oui
BIT Non Non BINARY Oui Non
BIT VARYING RAW Non VAR BINARY Oui Non
BOOLEAN Non Non BIT Oui Non
BLOB Oui Oui IMAGE Non LONGBLOB
LOCATOR Non Oui Non Non Non
DATALINK Non (3) Oui Non Non Non
MULTISET Non (4) Non Non Non Non
XML Oui (5) Oui Oui Non Non

(1) PostGresSQL possède un type INTERVAL spécifique.


(2) MySQL limite le date time à une précision de la seconde.
(3) Oracle n'implément pas le DATALINK, mais une référence de fichier via le type BFILE.
(4) Pas de MULTISET pour Oracle, mais un VARRAY proche avec utilisation de la fonction MULTISET.
(5) Oracle encapsule son XML dans un BLOB ce qui ne permet pas l'indexation interne du document
stocké.

4
Annexe III : Implémentation de SQL chez les principaux éditeurs

II. Longueur maximale des noms des objets :


Objet Oracle IBM DB2 MS SQL Server PostGreSQL MySQL
Base 8 8 128 63 64 (1)
Table, vue 30 128 128 63 64 (1)
Colonne 30 30 128 63 64
Contrainte 30 18 128 63 64
Index 30 128 128 63 64

(1) peut être moins long en fonction de l'OS.

5
Annexe IV : Présentation de quelques fonctions SQL

Annexe IV : Présentation de quelques fonctions SQL


Nous allons décrire ci-dessous les principales fonctions disponibles dans Oracle. Il faut remarquer que
ces fonctions ne sont pas standardisées et ne sont pas toutes disponibles dans les autres SGBD.

I. Fonctions arithmétiques
ABS(n) : valeur absolue de n
MOD(n1, n2) : n1 modulo n2
POWER(n, e) : n à la puissance e
ROUND(n[,p]) : arrondit n à la précision p (0 par défaut)
SIGN(n) : -1 si n< 0, 0 si n=0 et 1i n>0
SQRT(n) : racine carré de n
TO_CHAR(n, format) : convertit n en chaîne de caractères
TRUNC(n[,p]) : tronque n à la précision p (0 par défaut)
GREATEST(n1, n2, …) : maximum de n1, n2, …
LEAST(n1, n2, …) : minimum de n1, n2, …
TO_NUMBER(chaîne) : convertit la chaîne de caractères en numérique

II. Fonctions chaînes de caractères


DECODE(crit, val1, res1[,val2, res2, …], defaut)
permet de choisir une valeur parmi une liste d’expressions, en fonction de la valeur prise par une
expression servant de critère de sélection : elle prend la valeur res1 si l’expression crit a la valeur val1,
prend la valeur res2 si crit a la valeur val2, … ; si l’expression crit n’est égale à aucune des expressions
val1, val2, …, DECODE prend la valeur defaut par défaut.
Les expressions résultat (res1, res2, …, defaut) peuvent être de types différents : caractère et numérique,
ou caractère et date (le résultat est du type de la première expression rencontrée dans le DECODE).
Les expressions val et res peuvent être soit des constantes, soit des colonnes ou même des expressions
résultats de fonctions.

LENGTH(chaîne)
prend comme valeur la longueur de la chaîne.

SUBSTR(chaîne, position[, longueur])


extrait de la chaîne "chaîne" une sous-chaîne de longueur "longueur" commençant en position "position"
de la chaîne.
Le paramètre longueur est facultatif (par défaut, la sous-chaîne va jusqu’à l’extrémité de la chaîne).

INSTR(chaîne, sous_chaîne[, pos[, n]])


prend comme valeur la position de la sous-chaîne dans la chaîne (les positions sont numérotées à partir
de 1). 0 signifie que la sous-chaîne n’a pas été trouvée dans la chaîne.
La recherche commence à la position "pos" de la chaîne (paramètre facultatif qui vaut 1 par défaut). Une
valeur négative de "pos" signifie une position par rapport à la fin de la chaîne.

6
Annexe IV : Présentation de quelques fonctions SQL

Le dernier paramètre "n" permet de rechercher la nième occurrence de la sous-chaîne dans la chaîne.
Ce paramètre facultatif vaut 1 par défaut.

UPPER(chaîne)
convertit les minuscules en majuscules

LOWER(chaîne)
convertit les majuscules en minuscules

LPAD(chaîne, long[, car])


complète ou tronque "chaîne" la longueur "long". La chaîne est complétée à gauche par le caractère (ou
la chaîne de caractères) "car".
Le paramètre "car" est optionnel. Par défaut, chaîne est complétée par des espaces.

RPAD(chaîne, long[, car])


fonction analogue à LPAD mais, "chaîne" étant complétée à droite.

LTRIM(chaîne, car)
supprime les caractères à l’extrémité gauche de la chaîne "chaîne" tant qu’ils appartiennent à l’ensemble
de caractères "car".

RTRIM(chaîne, car)
fonction analogue à LTRIM mais, les caractères étant supprimés à l’extrémité droite de la chaîne.

REPLACE(chaîne, ch1, ch2)


remplace "ch1" par "ch2" dans "chaîne"

TO_CHAR
La fonction TO_CHAR permet de convertir un nombre ou une date en chaîne de caractère en fonction
d’un format :
Pour les nombres : TO_CHAR(nombre, format)
nombre est une expression de type numérique
format est une chaîne de caractère pouvant contenir les caractères suivants :
- 9 représente un chiffre (non représenté si non significatif)
- 0 représente un chiffre (représenté même si non significatif)
- . point décimal apparent
- , une virgule apparaîtra à cet endroit
- $ un $ précèdera le premier chiffre significatif
- B le nombre sera représente par des blancs s’il vaut zéro
- MI le signe négatif sera à droite
- PR un nombre négatif sera entre < >

7
Annexe IV : Présentation de quelques fonctions SQL

Pour les dates : TO_CHAR(date, format)


format indique le format sous lequel sera affichée date. C’est une combinaison de codes ; en voici
quelques uns :
- YYYY : année en 4 chiffres
- YY : deux derniers chiffres de l’année
- WW : numéro de la semaine dans l’année
- MM : numéro du mois
- DDD : numéro du jour dans l’année
- DD : numéro du jour dans le mois
- D : numéro du jour dans la semaine
- HH ou HH12 : heure (sur 12 heures)
- HH24 : heure (sur 24 heures)
- MI : minutes
Tout caractère spécial insère dans le format sera reproduit dans la chaîne de caractères résultat. On peut
également insérer dans le format une chaîne de caractères quelconque, à condition de la placer entre
guillemets.

TO_NUMBER(chaîne)
convertit une chaîne de caractères en nombre (quand la chaîne de caractères est composée de
caractères numériques)

ASCII(chaîne)
donne le code ASCII du premier caractère de chaîne.

CHR(n)
donne le caractère de code ASCII(n)

TO_DATE(chaîne, format)
permet de convertir une chaîne de caractères en donnée de type date. Le format est identique à celui de
la fonction TO_CHAR.

Fonctions de travail avec les dates


ROUND(date, précision)
arrondit la date à la précision spécifiée. La précision est indiquée en utilisant un des masques de mise en
forme de la date.

TRUNC(date, précision)
tronque la date à la précision spécifiée (similaire à ROUND).

SYSDATE
a pour valeur la date et l’heure courante du système d’exploitation hôte.

8
Annexe IV : Présentation de quelques fonctions SQL

III. Fonctions de groupe


Les fonctions de groupes peuvent apparaître dans le SELECT ou le HAVING. Ce sont les fonctions
suivantes :
AVG : moyenne
SUM : somme
MIN : plus petite des valeurs
MAX : plus grande des valeurs
VARIANCE : variance
STDDEV : écart type
COUNT(*) : nombre de lignes
COUNT(col) : nombre de valeurs non nulles de la colonne
COUNT(DISTINCT col) : nombre de valeurs non nulles différentes

IV. Autres fonctions


USER
a pour valeur le nom sous lequel l’utilisateur est entré dans Oracle.

NVL(exp, val)
permet de remplacer une valeur NULL de « exp » du par une valeur par défaut « val »

9
Bibliographie
Bibliographie

[1] Georges GARDARIN « Bases de données » Eyrolles 2003.

[2] Thomas CONNOLLY, Carolyn BEGG « Systèmes de bases de données. Approche pratique de
la conception, de l’implémentation et de l’administration (cours et exercices)» Les éditions Reynald
Goulet Inc. 2005.

[3] Nicolas LARROUSSE « Création de bases de données » PEARSON Education 2006.

[4] Pierre CRESCENZO « Support de cours magistraux de Bases de données » disponible sur le
site : « [Link] » visité le 12/04/2007.

[5] Pierre CARRIER, Rémy HUDON, Suzanne JEAN « Bases de données dans le développement
de systèmes » Gaêtan Morin 1991.

[6] Jean-Pierre CHEINEY, Philippe PICOUET, Jean-Marc SAGLIO « Systèmes de Gestion de


Bases de Données » disponible sur le site : « [Link] » visité le 24/03/2007.

[7] Frédéric BROUARD, Christian SOUTOU « SQL : Synthèse de cours & exercices corrigés».
Collection Synthex. Pearson Education 2005.

[ 8 ] Roger CHAPUIS « Les bases de données. ORACLE 8i. Développement, administration,


optimisation » Dunod, 2001.

[9] Richard GRIN « Polycopié Langage SQL » « [Link] visité le


07/12/2006.

Vous aimerez peut-être aussi