Vous êtes sur la page 1sur 13

Formation SQL/ORACLE

I. Les requêtes SELECT


1. La commande SELECT
1.3. L'opérateur AS
1.4. Opérateur de concaténation
1.5. Opérateurs mathématiques de base
1.6. Particularité du "FROM"
1.7. Utilisation du caractère double quote (guillemet)
2. La clause ORDER BY
3. La clause WHERE
3.1. Opérateurs de comparaison
3.2. Opérateur IN
3.3. Opérateur BETWEEN
3.4. Opérateur LIKE
3.5. Résumé des opérateurs pour les prédicats de la clause WHERE
4. Fonctions diverses
4.1. Mise en majuscule / Minuscule
4.2. Supprimer les blancs (ou tout autre caractères)
4.3. Extraire une sous chaîne
4.5. Opérateur de traitement des dates
4.5.1. Formatage d'une date
4.5.2. Heure et date courante
4.6. Opérateurs statistiques
4.7. Clause GROUB BY
II. Les jointures ou comment faire des requêtes sur plusieurs tables
II-A. Premiers essais de jointure
II-B. Différents type de jointures (naturelles, équi, non equi, auto, externes, hétérogènes, croisée et
union)
III-A. Opérateur de jointure naturelle
III-B. Les jointures internes ou externes
III-D-2. Mécanisme de jointure
III-E. La jointure croisée
IV. DICTIONNAIRE DE DONNEES DE LA BASE FLEXCUBE
IV -A. Les Schemas
IV -A. Les objets
IV. Quelques Objets Flexcubes
IV -A. tables & vues
IV -b. Fonctions et exemples d’utilisation
I. Les requêtes SELECT

1. La commande SELECT

Le SELECT est la commande de base du SQL destinée à extraire des données d'une base
ou calculer de nouvelles données à partir d'existantes...

syntaxe générale d'une commande SELECT :

SELECT [DISTINCT ou ALL] * ou liste de colonnes


FROM nom de table ou de vue
[WHERE prédicats]
[GROUP BY ordre des groupes]
[HAVING condition]
[ORDER BY ] liste de colonnes

NOTA : dans cette syntaxe, les mots clef du SQL sont en gras, les paramètres en minuscule et
entre crochets on trouve les parties optionnelles

En fait l'ordre SQL SELECT est composé de 6 clauses dont 4 sont optionnelles.
Clauses de l'ordre SELECT :

SELECT Spécification des colonnes du résultat

FROM Spécification des tables sur lesquelles porte l'ordre

Filtre portant sur les données (conditions à remplir pour que les lignes soient présentes dans le
WHERE
résultat)

GROUP
Définition d'un groupe (sous ensemble)
BY

HAVING Filtre portant sur les résultats (conditions de regroupement des lignes)

ORDER
Tri des données du résultat
BY

NOTA : différence entre le filtre WHERE et le filtre HAVING.

- filtre WHERE permet de filtrer les données des tables


- tandis que le filtre HAVING permet de filtrer les données du résultat

REMARQUE : pour spécifier une valeur littérale il faut l'entourer de guillemets simples. 1.2.

1.2. L'opérateur DISTINCT 

le mot clef DISTINCT  permet d‘éliminer les doublons dans le resultat.

1.3. L'opérateur AS

Vous pouvez rajouter autant de colonnes que vous le désirez en utilisant le mot clef AS.
En principe l'opérateur AS sert à donner un nom à de nouvelles colonnes créées par la requête.

1.4. Opérateur de concaténation


L'opérateur || (double barre verticale) permet de concaténer des champs de type caractères.

1.5. Opérateurs mathématiques de base

On, peut utiliser les opérateurs mathématiques de base pour combiner différentes colonnes
(,+,-, *, /,).

1.6. Particularité du "FROM"

Il est possible de surnommer une table dans la clause FROM, dans ce cas, la syntaxe de la partie
FROM de la commande SELECT est la suivante :

 FROM nom_de_table ou nom_de_la_vue surnom

1.7. Utilisation du caractère double quote (guillemet)

Lorsqu'un nom d'un élément d'une base de données (table, colonne par exemple) est identique à
un mot clef du SQL, il convient de l'entourer de guillemets (double quote). En principe, les mots
réservés du SQL sont déconseillés pour nommer des objets du modèle physique de données...

Imaginons une table de nom JOIN, composée des champs suivants :

 
NOM SELECT DATE NOT
------- ------ ------- ---
DURAND Oui 1999-11-12 F
DUVAL Non 1998-01-17 M

Exemple 8 : nous désirons sélectionner les colonnes SELECT et DATE lorsque la colonne NOT
vaut F...

 
SELECT SELECT, DATE  
FROM JOIN ERREUR !
WHERE NOT = 'F'

 
SELECT "SELECT", "DATE"  
FROM "JOIN" Correct : on entoure les mots clefs du SQL par des doubles côtes
WHERE "NOT" = 'F'

Cela est aussi nécessaire lorsque le nom (d'une colonne ou d'une table) est composé de caractères
particuliers tels que les blancs ou autres, ce qui est à éviter.

REMARQUE : les noms des identifiants d'objet de base de données doivent être écrit dans le jeux
de caractères restreint suivant :
[A..Z] + [a..z] + [0..9] + [_].
Ils ne doivent pas commencer par un chiffre et sont insensibles à la casse (indifférence entre
majuscule et minuscule).

2. La clause ORDER BY
ORDER BY colonne1 | 1 [ASC ou DESC ] [, colonne2 | 2 [ASC ou DESC ] ...

Cette clause permet de définir le tri des colonnes de la réponse, soit en précisant le nom littéral de
la colonne, soit en précisant son n° d'ordre dans l'énumération qui suit le mot clef SELECT.
ASC spécifie l'ordre ascendant et DESC l'ordre descendant du tri. ASC ou DESC peut être omis,
dans ce cas c'est l'ordre ascendant qui est utilisé par défaut.

Bien que la clause ORDER BY ne soit pas nécessaire, il est souvent utile de trier la réponse en
fonction des colonnes. En revanche le temps de réponse s'en ressent souvent.
Pour spécifier l'ordre de tri, on doit placer les noms des colonnes séparées par des virgules juste
après le mot clef "ORDER BY", dans l'ordre voulu. On peut aussi utiliser le rang de chaque colonne
dans l'ordre spécifié dans la clause SELECT.

Attention : le tri est un tri interne, il ne faut donc placer dans cette clause que les noms des
colonnes présentées dans la clause SELECT.

REMARQUE : les marqueurs NULL sont situés en premier dans l'ordre ainsi établi.

ATTENTION : la clause ORDER BY est la dernière clause de tout ordre SQL et ne doit figurer
qu'une seule fois dans le SELECT, même s'il existe des requêtes imbriquées ou un jeu de requêtes.

3. La clause WHERE

WHERE prédicats

Le prédicat doit contenir n'importe quelle expression logique renvoyant une valeur vrai.
Ainsi, une requête aussi stupide que la suivante, est supposée fonctionner :

3.1. Opérateurs de comparaison

Dans la clause WHERE, vous disposez de différents opérateurs de comparaisons logiques :

 
WHERE valeur1 [NOT et] = ou < ou <= ou > ou >= ou <>valeur2 [OR ou AND ...]

3.2. Opérateur IN

L'opérateur IN permet de rechercher si une valeur se trouve dans un ensemble donné, quel que
soit le type des valeurs de référence spécifiées (alpha, numérique, date…). Bien entendu, il est
possible d'inverser le fonctionnement de l'opérateur IN en lui adjoignant l'opérateur NOT.

Le contenu de la parenthèse peut être remplacé par le resultat d'une requête possédant une
colonne unique. Dans ce cas on parle de requêtes imbriquées, ce que nous verrons plus loin.

3.3. Opérateur BETWEEN

L'opérateur BETWEEN permet de rechercher si une valeur se trouve dans un intervalle donné, quel
que soit le type des valeurs de référence spécifiées (alpha, numérique, date...).
NOTA : les opérateurs IN et BETWEEN sont très pratiques dans le cas où l'on désire effectuer des
requêtes où l'utilisateur peut saisir une liste de choix multiples (IN) ou une plage de valeur
(BETWEEN).

3.4. Opérateur LIKE

L'opérateur LIKE permet d'effectuer une comparaison partielle. Il est surtout employé avec les
colonnes contenant des données de type alpha. Il utilise les jokers % et _ (‘pour cent' et ‘blanc
souligné'). Le joker % remplace n'importe quelle chaîne de caractères, y compris la chaîne vide. Le
blanc souligné remplace un et un seul caractère.

Mais si vos données sont susceptibles de contenir un des deux caractères joker, alors il faut
recourir à une séquence d'échappement, à l'aide du mot clef ESCAPE...

Cherchons les clients dont l'enseigne contient au moins un caractère blanc souligné :

SELECT *
FROM T_CLIENT
WHERE CLI_ENSEIGNE

LIKE '%_%'

SELECT *
FROM T_CLIENT
WHERE CLI_ENSEIGNE

LIKE '%#_%' ESCAPE '#'

Pour traiter ce cas, on défini « # » comme caractère d'échappement. Le caractère qui suit ce
caractère d'échappement est donc interprété comme un caractère et non comme un joker.

NOTA : l'opérateur LIKE effectue une recherche en tenant compte de la différence entre lettres
majuscules et minuscules. Si vous voulez effectuer une recherche en ne tenant aucunement
compte de la différence entre majuscules et minuscules, il convient d'utiliser les opérateurs LOWER
et UPPER (voir ci dessous).

3.5. Résumé des opérateurs pour les prédicats de la clause WHERE

Voici une tableau résumant les principaux opérateurs utilisés pour la construction des prédicats :

opérateurs de comparaisons = <> < <= > >=

connecteurs logiques {OR | AND}

opérateur de négation NOT

parenthèses ( ... )

opérateurs mathématiques + - * /

comparaison logique IS [NOT] {TRUE | FALSE | UNKNOWN}


comparaison avec valeur IS [NOT] NULL

valeur BETWEEN borne_basse AND


intervalle
borne_haute

comparaison partielle de chaîne de


valeur LIKE motif [ESCAPE echappement]
caractères

comparaison à une liste de valeur valeur [NOT] IN (liste)

4. Fonctions diverses

4.1. Mise en majuscule / Minuscule

Les opérateurs LOWER et UPPER permettent de mettre en majuscule ou en minuscule des


chaînes de caractères dans les requêtes.

NOTA : pour effectuer une recherche en ne tenant aucunement compte de la différence entre
majuscules et minuscules, il faut utiliser l'opérateur UPPER (ou lower mais attention à la
transformation des accents !) :

4.2. Supprimer les blancs (ou tout autre caractères)

La fonction TRIM, LTRIM(nom de colonne) et RTRIM(nom de colonne)permet de supprimer


en tête ou en queue (ou les deux) le blanc ou tout autre caractère spécifié.

 TRIM ([LEADING ou TRAILING ou BOTH] [caractère] FROM nom de colonne)


ou avec oracle

4.3. Extraire une sous chaîne

La fonction SUBSTR permet d'extraire une sous chaîne d'une chaîne de caractère. Elle a besoin de
l'ordre du premier caractère et du nombre de caractères sur lequel elle doit opérer.

SUBSTR( nom de colonne , n , m) avec oracle

Extrait la sous chaîne de nom de colonne en commençant à n sur m caractères.

4.5. Opérateur de traitement des dates

4.5.1. Formatage d'une date

L'opérateur to_date permet de formater une date selon le jour le mois et l'année…

 
To_date (nom de colonne,’DD/MM/YYYY’ )

4.5.2. Heure et date courante


L'heure courante, la date courante et le combiné date/heure courant peuvent être obtenu à l'aide
des fonctions sysdate.

Exemple select TO_CHAR(SYSDATE,'DD/MM/YYYY HH24:MI:SS') from dual ;

4.6. Opérateurs statistiques

Il est possible de réaliser des comptages statistiques sur les colonnes, à l'aide des
opérateurs AVG (moyenne), MAX (maximum), MIN (minimum), SUM (total), COUNT (nombre).
On les appelent aussi fonctions d'aggrégations.

ATTENTION : l'utilisation des fonctions statistiques nécessite la plupart du temps la mise en place
d'une clause de groupage, afin de déterminé quel est le sous ensemble cible d'agrégation pour les
calculs.

4.7. Clause GROUB BY

Permet de définir des niveaux de regroupement.

II. Les jointures ou comment faire des requêtes sur plusieurs tables

La jointure est une opération permettant de combiner des informations venant de plusieurs tables.

Il existe différentes natures de jointures.

- La plupart des jointures entre tables s'effectuent en imposant l'égalité des valeurs d'une
colonne d'une table à une colonne d'une autre table. On parle alors de jointure naturelle ou
équi-jointure.
- Mais on trouve aussi des jointures d'une table sur elle-même. On parle alors d'auto-
jointure.
- De même, il arrive que l'on doive procéder à des jointures externe, c'est-à-dire joindre une
table à une autre, même si la valeur de liaison est absente dans une table ou l'autre.
- Enfin, dans quelques cas, on peut procéder à des jointures hétérogènes, c'est-à-dire que
l'on remplace le critère d'égalité par un critère d'inégalité ou de différence.

Une jointure entre tables peut être mise en oeuvre, soit à l'aide des éléments de syntaxe SQL, soit
à l'aide d'une clause spécifique du SQL, la clause JOIN.

II-A. Premiers essais de jointure

Rappel de la syntaxe du SELECT :

SELECT [DISTINCT ou ALL] * ou liste_de_colonnes FROM


nom_des_tables_ou_des_vues

Cette requête ne possède pas de critère de jointure entre une table et l'autre. Dans ce cas, le
compilateur SQL calcule le produit cartésien des deux ensembles, c'est-à-dire qu'à chaque ligne de
la première table, il accole l'ensemble des lignes de la seconde à la manière d'une "multiplication
"!
Il faut donc définir absolument un critère de jointure.

Le fait de placer comme critère de jointure entre les tables, l'opérateur logique "égal" donne ce que
l'on apelle une "équi-jointure".

II-B. Différents type de jointures (naturelles, équi, non equi, auto, externes,
hétérogènes, croisée et union)

Les jointures s'expriment à l'aide du mot clef JOIN dans la clause FROM. Suivant la nature de la


jointure, on devra préciser sur quels critères se base la jointure.

Voici un tableau résumant les différents types de jointures normalisées :

SELECT ...

Jointure interne FROM <table gauche>


[INNER]JOIN <table droite>
ON <condition de jointure>

SELECT ...
FROM <table gauche>
Jointure externe LEFT | RIGHT | FULL OUTER JOIN <table
droite>
ON condition de jointure

SELECT ...
Jointure FROM <table gauche>
naturelle NATURAL JOIN <table droite>
[USING <noms de colonnes>]

SELECT ...
Jointure croisée FROM <table gauche>
CROSS JOIN <table droite>

SELECT ...
Jointure d'union FROM <table gauche>
UNION JOIN <table droite>

III-A. Opérateur de jointure naturelle

Il existe un opérateur normalisé pour effectué en SQL la jointure naturelle des tables :

SELECT [DISTINCT ou ALL] * ou liste de colonnes


FROM table1 NATURAL JOIN table2 [USING (colonne1 [, colonne2 ...])]

L'opérateur NATURAL JOIN permet d'éviter de préciser les colonnes concernées par la jointure.


Dans ce cas, le compilateur SQL va rechercher dans les 2 tables, les colonnes dont le nom est
identique. Bien entendu, le type de données doit être le même !
NOTA : on veillera au niveau de la modélisation et notamment au niveau du MPD (Modèle
Physique de Données) que les noms des colonnes de clefs en relation avec d'autres tables par
l'intermédiaires des clefs étrangères soient strictement identiques.

Mais cette syntaxe est rarement acceptée par les moteurs SQL actuels !

La partie optionnelle USING permet de restreindre les colonnes concernées, lorsque plusieurs


colonnes servent à définir la jointure naturelle. Ainsi la commande SQL :

SELECT CLI_NOM, TEL_NUMERO


FROM T_CLIENT
NATURAL JOIN T_TELEPHONE
USING (CLI_ID)

III-B. Les jointures internes ou externes

Comme il s'agit de la plus commune des jointures c'est celle qui s'exerce par défaut si on ne
précise pas le type de jointure. Après le mot clef ON on doit préciser le critère de jointure.

Les jointures externes sont extrêmement pratiques pour rapatrier le maximum d'informations
disponible, même si des lignes de table ne sont pas renseignées entre les différentes tables jointes.

Sans le savoir, nous faisons assez systématiquement l'hypothèse du monde clos. c'est-à-dire que
nous considérons que l'absence d'information, n'est pas une information.

L'hypothèse du monde clos : considérer que l'absence d'information doit être synonyme de critère
de discrimination... La jointure externe permet de contrer l'hypothèse du monde clos en
considérant qu'en cas d'absence de jointure entre une table et l'autre, on ne supprime par pour
autant l'information.

Les mots clefs LEFT, RIGHT et FULL indiquent la manière dont le moteur de requête doit effectuer


la jointure externe. Il font référence à la table située à gauche (LEFT) du mot clef JOIN ou à la
table située à droite (RIGHT) de ce même mot clef. Le mot FULL indique que la jointure externe
est bilatérale.

NOTA : il existe des équivalences entre différentes expressions logiques à base de jointures
externes. Les principales sont :

 la jointure externe droite peut être obtenue par une jointure externe gauche dans laquelle
on inverse l'ordre des tables.
 la jointure externe bilatérale peut être obtenue par la combinaison de deux jointures
externes unilatérales avec l'opérateur ensemblistes UNION.

III-D-2. Mécanisme de jointure

Lorsqu'une ligne d'une table figurant dans une jointure n'a pas de correspondance dans les autres
tables, le critère d'équi-jointure n'est pas satisfait et la ligne est rejetée. C'est la jointure interne.
Au contraire, la jointure externe permet de faire figurer dans le résultat les lignes satisfaisant la
condition d'équi-jointure ainsi que celles n'ayant pas de correspondances.

III-E. La jointure croisée

La jointure croisée n'est autre que le produit cartésien de deux tables. Rappelons que le produit
cartésien de deux ensembles n'est autre que la multiplication généralisée. Dans le cas des tables,
c'est le fait d'associer à chacune des lignes de la première table, toutes les lignes de la seconde.
Ainsi, si la première table compte 267 lignes et la seconde 1214, on se retrouve avec un résultat
contenant 324 138 lignes. Bien entendu, s'il n'y a aucun doublon dans les tables, toutes les lignes
du résultat seront aussi uniques.

La jointure croisée peut s'écrire de deux manières différentes :

 à l'aide de l'opérateur normalisé :

SELECT colonnes
FROM table_1 CROSS JOIN table_2

 ou à l'aide d'une clause FROM simplifiée :


SELECT colonnes
FROM table_1, table_2

Ce qui est certainement l'expression la plus minimaliste de tous les ordres SELECT du SQL !

IV. DICTIONNAIRE DE DONNEES DE LA BASE FLEXCUBE

IV -A. Les Schemas

BOUNIVERS >>>>> Reports & BO

CONSULTANT >>>>> developments internes

EPS >>>>> monetiques

FCDBADMIN_DBL >>>>> Internet banking

FLEXSETUP >>>>> Flexcube

MBANKERLIVEDBB >>>>> SMS banking


IV -A. Les objets

Les objets d’un schema :

select * from user_objects ;


IV. Quelques Objets Flexcubes

IV -A. tables & vues

Les tables sont nommées selon les modules qui les utilisent.
- ACTB_* : transactions sur les comptes
- AETB_* :
- BCTB_*
- CATB_*
- CATM_*
- CFTB_*
- CFTM_*
- CSTB_*
- CSTM_*
- DETB_*
- FSTB_*
- GLTB_*
- GLTM_*
- ICTB_*
- ICTM_*
- LCTB_* >>>>>>>>> module LC (lettre de crédit)
- LDTB_* >>>>>>>>> module DC (lettre de débit)
- LMTB_*
- LSTB_*
- STTB_*
- STTM_*
- ETC…

IV -b. Fonctions et exemples d’utilisation

-BALANCE A DATE

FUNCTION FLEXSETUP.FN_GL_CLOSE_BAL_AS_OF_DATE( pAc IN STTBS_ACCOUNT.ac_gl_no


%TYPE, pDate IN DATE) RETURN NUMBER;

Ex:
select FLEXSETUP.FN_GL_CLOSE_BAL_AS_OF_DATE(cust_ac_no,date) from dual;
select cust_ac_no,ac_desc,FLEXSETUP.FN_GL_CLOSE_BAL_AS_OF_DATE(cust_ac_no,'11/04/2017')
from sttm_cust_account;

- LAST CREDIT DATE

FLEXSETUP.FN_LAST_CREDIT_DATE(pAc IN STTBS_ACCOUNT.ac_gl_no%TYPE, pDate IN DATE) RETURN varchar2


Ex: select FLEXSETUP. FN_LAST_CREDIT_DATE (cust_ac_no,date) from dual;

- LAST DEBIT DATE

FLEXSETUP. FN_LAST_DEBIT_DATE (pAc IN STTBS_ACCOUNT.ac_gl_no%TYPE, pDate IN DATE) RETURN varchar2


Ex: select FLEXSETUP. FN_LAST_CREDIT_DATE (cust_ac_no,date) from dual;

- ACCOUNT_OFFICER
select f_return_gestionnaire_sn(cust_ac_no) account_officer from sttm_cust_account;

- MVTS CREDITS ENTRE DEUX DATES


FN_GL_CR_MVT_BETWEEN_DATE(cust_ac_no,add_months(to_date('31/12/2015'), -3),to_date('31/12/2015'))

- MVTS DEBITS ENTRE DEUX DATES


FN_GL_DR_MVT_BETWEEN_DATE(cust_ac_no,add_months(to_date('31/12/2015'), -3),to_date('31/12/2015'))

- NOMBRE DE CREDITS ENTRE DEUX DATES


FN_GL_CR_COUNT(cust_ac_no,add_months(to_date('31/01/2016'), -3),to_date('31/01/2016'))

- NOMBRE DE DEBITS ENTRE DEUX DATES


FN_GL_DR_COUNT(cust_ac_no,add_months(to_date('31/01/2016'), -3),to_date('31/01/2016'))

- DESCRIPTION DE TRANSACTION
FUNCTION FLEXSETUP.NARRATION(trn IN actb_history.trn_ref_no%TYPE, dat IN actb_history.txn_init_date %TYPE,acc IN actb_history.ac_no
%TYPE ) RETURN varchar2

Ex: select a.* ,NARRATION(a.trn_ref_no,a.txn_init_date,a.ac_no ) from ACVW_ALL_AC_ENTRIES


a
OU
select a.*,F_affiche_description (substr(a.TRN_REF_NO,4,4),a.TRN_CODE,'FRA',
a.TRN_REF_NO,a.EVENT_SR_NO, a.MODULE,a.AMOUNT_TAG,
a.EVENT,NARRATION(a.trn_ref_no,a.txn_init_date,a.ac_no),a.INSTRUMENT_CODE) txt_txn_desc
from ACVW_ALL_AC_ENTRIES a

Vous aimerez peut-être aussi