Réalisé par : Mme YEKKEN Sabrine
Version : 2012 -2013
2
Introduction générale.
Pour interroger une BD, il faut utiliser un langage .
SQL est le langage le plus complet pour interagir une BD.
4
Objectifs du cours (1/2)
Introduction du langage SQL
1ème Partie : Présentation du langage LDD
1. Définir « LDD »
2. Les types de données
2ème Partie : Création d’une table/des contraintes d’intégrités
1. Créer une table/ table à partir d’une autre
2. Ajouter une contrainte clé primaire, clé étrangère
3. Ajouter une contrainte (On delete cascade, on delete set null)
4. Autres contraintes ( not null, check, unique)
5. Activer / désactiver une contrainte
5
Objectifs du cours (2/2)
3ème Partie : Manipulation de la structure de la table
1. Ajouter, modifier, supprimer une colonne/contrainte
2. Supprimer une table
3. Renommer une table
4ème Partie : Autres Objets
1. Définition et création de :
i. vues
ii. Synonymes
iii. Index
iv. Séquences
6
Introduction du langage SQL
Objectifs de la partie :
Introduire et définir le langage SQL.
7
Définition de l’SQL.
SQL (Structured Query Language ), en français langage de requête
structurée, est composé d’un ensemble de sous langages:
un langage de définition de données (LDD),
un langage de manipulation de données (LMD),
un langage d’interrogation de données (LID),
un langage de contrôle de données (LCD),
pour les bases de données relationnelles.
8
1ère Partie :
Présentation du langage LDD
Objectifs de la partie :
Définition et présentation du langage
de définition de données ainsi que les
différents types de données.
9
LDD.
Le langage de définition de données, c’est un langage qui
permet de définir et manipuler les structures de
données et non pas les données.
Structure de données : tout objet de la BD destiné à
contenir des données : Exemple : TABLE.
10
Les types de données.
Types de données Description
INT Entier
CHAR [(size [BYTE | CHAR])] Taille fixe comprise entre 1 et 2000
VARCHAR2 (size) Taille Variable comprise entre 1 et 4000
NUMBER [ ( t , d ) ] Réel de t chiffres dont d sontdécimales.
LONG Données caractères ayant une taille <= 2GO
DATE Date comprise entre 1/1/4712 AJC et 31/12/999 APJC
TIMESTAMP Année, mois, jour , heure, minute et seconde, fraction de seconde
INTERVAL YEAR(year_precision) Stocke une période de temps en année et mois, où year_precision
TO MONTH est compris entre 0 et 9. La valeur par défaut est 2
11
2 ème et 3 ème Partie :
Création d’une table/contraintes d’intégrités –
Manipulation de la structure d’une table
Objectifs de la partie :
Comment créer une table et définir les
contraintes d’intégrités.
Comment ajouter, modifier ou
supprimer des colonnes ou des
contraintes…
12
Créer une table. Syntaxe
Syntaxe :
CREATE TABLE <nom_de_la_table>
( <nom_colonne1> <type_colonne1>,
<nom_colonne2> <type_colonne2>, …
<nom_colonne’> <type_colonne’>
);
Remarque : Pour créer une table il faut avoir :
• Le privilège CREATE TABLE
• Un espace de stockage
13
Créer une table. Exemple
CREATE TABLE Etudiants
( Netudiant number,
Nom varchar2(10),
Prenom varchar2(10)
);
DESCRIBE (ou DESC) Etudiants ; --pour voir la description de la table
14
Créer une table. Table à partir d’une autre table
CREATE TABLE Etud AS SELECT * From Etudiants ;
la table Etud aura la même structure de la table Etudiants avec tous les
enregistrements de la table.
la table Etud aura la même structure de la table Etudiants avec tous les
enregistrements de la table.
CREATE TABLE Etud AS SELECT * From Etudiants WHERE (0=1);
la table Etud aura la même structure de la table Etudiants sans les
enregistrements de la table.
DESCRIBE (ou DESC) Etud ; --pour voir la description de la table
15
Ajouter une contrainte clé primaire - Syntaxe (1/3)
1er cas : clé primaire simple
Syntaxe 1: lors de la création de la table:
1ère Méthode : Contrainte niveau COLONNE
CREATE TABLE <nom_de_la_table>
( <nom_col1 > <type_col1> CONSTRAINT <nom_contrainte> PRIMARY KEY,
<nom_col2 > <type_col2>, …
<nom_coln > <type_coln>
);
16
Ajouter une contrainte clé primaire - Syntaxe (2/3)
Syntaxe 1: lors de la création de la table:
2ème Méthode : Contrainte niveau TABLE
CREATE TABLE <nom_de_la_table>
( <nom_col1 > <type_col1>,
<nom_col2 > <type_col2>, …
<nom_coln > <type_coln> ,
CONSTRAINT <nom_contrainte> PRIMARY KEY,
);
17
Ajouter une contrainte clé primaire - Syntaxe (3/3)
2ème cas : clé primaire composée
Syntaxe 1: lors de la création de la table:
CREATE TABLE <nom_de_la_table>
( <nom_col1 > <type_col1>,
<nom_col2> <type_col2>,
…
<nom_coln> <type_coln>,
Constraint <nom_contrainte> Primary key (nomCol1, nomCol2...) );
Contrainte niveau Table
Syntaxe 2: après la création de la table :
ALTER TABLE <nom_de_la_table> ADD constraint <nom_contr> Primary key
(nomCol1,nomcol2…)
18
Ajouter une contrainte clé primaire - Exemple
Syntaxe :
ALTER TABLE <nom_de_la_table> ADD Constraint <nom_contrainte>
PRIMARY KEY (nom_colonne(s))
ALTER TABLE Etudiants ADD Constraint pk_nom_prenom PRIMARY KEY
(nom,prenom) ;
19
Supprimer une contrainte clé primaire.
Syntaxe :
ALTER TABLE <nom_de_la_table> DROP CONSTRAINT
<nom_contrainte> ;
ALTER TABLE Etudiants DROP CONSTRAINT pk_nom_prenom ;
20
Ajouter une contrainte clé étrangère.
Syntaxe :
ALTER TABLE <nom_de_la_table> ADD constraint
<nom_contrainte> FOREIGN KEY (<nom_cols>) references
<table_référencée> (nom_cols) ;
Create table Etud as select * from Etudiants;
Alter table Etud ADD constraint pk_nom_prenom PRIMARY KEY (nom,
prenom) ;
ALTER TABLE Etud ADD constraint fk_etud_etudiants FOREIGN KEY
(nom,prenom) references Etudiants (nom,prenom) ;
21
Ajouter une contrainte clé étrangère. Options
Constraint <nom_constrainte> Foreign Key (<colonne(s)>)
References <TableReférencée> (<colonne(s)>)
ON DELETE CASCADE | SET NULL
La clause ON DELETE CASCADE permet de supprimer
automatiquement les valeurs d'une clé étrangère dépendantes d'une
clé primaire si une valeur de cette dernière vient d'être supprimée.
La clause ON DELETE SET NULL permet de mettre à Zéro
automatiquement les valeurs d'une clé étrangère dépendantes d'une
clé primaire si une valeur de cette dernière vient d'être supprimée.
22
Ajouter une contrainte <NOT NULL>.
Cette contrainte est définie :
- Soit lors de la création de la table, syntaxe :
<nom_colonne> <type_colonne> constraint <nom_contrainte> NOT NULL
- Soit après la création de la table, syntaxe :
Alter table <nom_tab> modify <nom_col> constraint < nom_contrainte > NOT NULL
La contrainte NOT NULL ne peut être définie qu’au niveau de la
colonne, pas au niveau de la table
23
Ajouter une contrainte <UNIQUE> - Définition
Une contrainte d’intégrité de type clé unique exige que chaque valeur
dans une colonne ou dans un ensemble de colonnes constituant
une clé soit unique.
Remarque : Une contrainte unique autorise la valeur NULL à
moins que vous définissiez des contraintes NOT NULL
24
Ajouter une contrainte <UNIQUE> - Syntaxe
Cette contrainte est définie :
- Soit lors de la création de la table, syntaxe :
<nom_colonne> <type_colonne> constraint <nom_de_contrainte> UNIQUE
- Soit après la création de la table, syntaxe :
Alter table <nom_table> add constraint <nom_de_contrainte> UNIQUE
(<nom_colonne>)
25
Ajouter une contrainte <CHECK>.
La contrainte Check définit une condition que chaque ligne doit vérifier
Cette contrainte est définie :
- Soit lors de la création de la table, syntaxe :
<nom_colonne> <type_col> CONSTRAINT <nom_de_contr> CHECK (condition)
- Soit après la création de la table, syntaxe :
Alter table <nom_table> ADD CONSTRAINT <nom_de_contr> CHECK (condition)
26
Gérer des colonnes et/ou des contraintes - Syntaxes
Syntaxe générale :
ALTER TABLE <nom_table> + ADD CONSTRAINT <Def _Contrainte>
+ DROP CONSTRAINT
+ ENABLE | <Nom contrainte>
DISABLE CONSTRAINT
+ ADD
<Def _Colonne>
+ MODIFY
+ DROP <nom colonne>
27
Ajouter une/plusieurs colonne(s). Exemple
Ajouter 2 colonnes à la table « Etudiants »
ALTER TABLE Etudiants ADD (telephone number ,email varchar2(50) );
28
Modifier une colonne. Exemple
Syntaxe :
ALTER TABLE <nom_de_la_table> MODIFY <nouvelle définition de la colonne>
ALTER TABLE Etudiants MODIFY ( email varchar2(100) );
29
Supprimer une colonne. Exemple
Syntaxe :
ALTER TABLE <nom_de_la_table> DROP <colonnes>
ALTER TABLE Etudiants DROP ( email, telephone);
30
Activer/Désactiver une contrainte.
Syntaxe :
ALTER TABLE <nom_de_la_table>
ENABLE | DISABLE CONSTRAINT <nom_de_la_contrainte>;
31
Supprimer une table. DROP / TRUNCATE
Syntaxe :
DROP TABLE <nom_de_la_table> ;
Remarque:
On a aussi la commande « TRUNCATE » qui permet de vider la table
TRUNCATE TABLE <nom_de_la_table> ;
32
Renommer une table.
Syntaxe :
RENAME <ancien _nom> TO <nouveau_nom> ;
Exemple:
RENAME Etudiants TO Etudiants1;
33
4ème Partie :
Autres Objets
Objectifs de la partie :
Présenter les vues, Les synonymes, les
indexes, et les séquences
34
Qu'est-ce qu'une vue?.
Une vue est une table virtuelle, dans laquelle il est possible de
rassembler des informations provenant de plusieurs tables.
On parle de "vue" car il s'agit simplement d'une représentation des
données dans le but d'une exploitation visuelle.
Les données présentes dans une vue sont définies grâce à une
clause SELECT.
Remarque:
Les vues existent en tant qu'objets dans la base de données. Les changements apportés à la
structure de la table sous-jacente ne sont pas répercutés dans la vue. Pour inclure des colonnes
supplémentaires dans une vue, vous devez redéfinir la vue.
35
L’ Intérêt des vues.
La vue est une sorte d'intermédiaire entre la base de données et
l'utilisateur.
Une vue permet ainsi :
– Une sélection des données à afficher,
– Une restriction d'accès à la table pour l'utilisateur, donc une
sécurité des données
– Une présentation des données sous plusieurs formes
36
Types de vue.
Vue Simple :
utilise une seule table
ne contient ni fonction ni groupe de données
permet d’exécuter des opérations du LMD
Vue Complexe :
utilise plusieurs tables
contient des fonctions ou des groupes de données
ne permet pas toujours des opérations du LMD
37
Création des vues.
CREATE VIEW Vue
(<colonneA>, <colonneB>, <colonneC>, <colonneD>…)
AS SELECT (<colonne1>, <colonne2>, <colonne3>,<colonne4>)
FROM <Nom_table(s)>
WHERE ( <condition(s)> )
WITH READ ONLY | WITH CHECK OPTION
L'option WITH READ ONLY indique qu'il est impossible de réaliser des mises à
jour sur la vue.
L'option WITH CHECK OPTION empêche que l'utilisateur d’ajouter ou
modifier dans une vue des lignes non conformes à la définition de la vue.
38
Suppression des vues.
Une vue peut être détruite par la commande :
DROP VIEW <nom de la vue>
Lister les vues :
SELECT * FROM USER_VIEWS
39
Exemples de vues.
Créez des vues qui permettent d’afficher :
1. La liste des employés du département 50,
2. Les employés qui ont été embauché avant l’an 2000,
3. Le salaire des employés du département 10
1: CREATE OR REPLACE VIEW vue1 (nom, prenom) AS
SELECT last_name, first_name from employees
WHERE department_id = 50
40
Qu'est-ce qu'un SYNONYM ?
C'est un Alias sur un objet de la base de données, soit un
raccourcis.
L‘objet peut être une Table, une Vue, une Séquence, une
Procédure, une Fonction, un Package.
Le SYNONYM peut être Public ou Privé.
Public : il sera accessible à partir de tous les schémas
ou utilisateurs.
Privé : il sera accessible uniquement à partir du schéma
dans lequel il a été créé.
41
Intérêts d’un SYNONYM.
Masquer le vrai nom des objets et leur localisations.
Simplifier les noms des objets.
Éviter le pré-fixage dans les requêtes avec le nom de son
propriétaire.
( exemple : HR. Employees )
Exemples:
42
Création d’un SYNONYM.
Tout d'abord vous devez avoir le privilège
Soit CREATE SYNONYM pour créer un SYNONYM Privé dans
votre schéma,
Soit CREATE ANY SYNONYM pour créer un SYNONYM Privé
dans n'importe quel schéma,
Soit CREATE PUBLIC SYNONYM pour créer un SYNONYM
Public.
CREATE [PUBLIC | ANY] SYNONYM <synonym> FOR <object>
DROP SYNONYM <synonym>
43
Qu'est-ce qu'un Index?
Un index est un objet de la base de données qui permet d’accélérer
la recherche des lignes.
Un index peut être créé automatiquement ou manuellement.
Un index unique est crée automatiquement lors de la
définition d’une contrainte Clé Primaire
La vue USER_INDEXES contient les noms d’index ET
La vue USER_IND_COLUMNS contient les noms d’index , des tables
et des colonnes
44
Manipulation d’un Index.
Création d’un index :
CREATE [UNIQUE] INDEX <Nom_index> ON table (col1, col2, …)
Exemple:
CREATE INDEX idx_employees_lastname ON employees
(last_name)
Suppression d’un index :
DROP INDEX <Nom_index>
Exemple:
DROP INDEX idx_employees_lastname
45
Qu'est-ce qu'une Séquence?
Une séquence est un objet de base de données Oracle, au
même titre qu'une table, une vue, etc...
Une séquence permet de Générer automatiquement des
numéros uniques
Elle Est partageable entre plusieurs utilisateurs et entre
plusieurs tables
Elle permet de créer une valeur de clé primaire
46
Création d’une Séquence.
CREATE SEQUENCE
[ INCREMENT BY n ]
[ START WITH n ]
[ {MAXVALUE n | NOMAXVALUE} ]
[ {MINVALUE n | NOMINVALUE} ]
[ {CYCLE | NOCYCLE} ] [ {CACHE n | NOCACHE} ]
INCREMENT BY n : définit l’intervalle entre les numéros
START WITH n : premier numéro de la séquence
{MAXVALUE n | NOMAXVALUE} : valeur maximale
{MINVALUE n | NOMINVALUE} : valeur minimale
{CYCLE | NOCYCLE} : la séquence peut continuer à générer ou non des
valeurs
{CACHE n | NOCACHE} : nombre de valeurs pré-allouées et
conservées en mémoire.
47
Interrogation d’une Séquence.
L'interrogation d'une séquence se fait par l'utilisation des "pseudo-
colonnes" CURRVAL et NEXTVAL. On parle de pseudo-colonne
car cela se manipule un peu comme une colonne de table, mais ce
n'est pas une colonne de table.
La pseudo-colonne CURRVAL retourne la valeur courante de la séquence.
La pseudo-colonne NEXTVAL incrémente la séquence et retourne la nouvelle
valeur.
On peut modifier ou supprimer une séquence :
ALTER SEQUENCE <nom_sequence> …
DROP SEQUENCE <nom_sequence>
49
Objectifs du cours
1. Définir le langage « LMD »
2. Insertion des données
3. Mise à jour des données
4. Suppression des données
50
Définir le langage LMD
LMD : Langage de Manipulation des Données (DML, Data
Manipulation Language)
i. Il Permet la manipulation des tables, soit l’insertion, la
mise à jour et la suppression des données.
ii. Il est composé de 3 Requêtes :
UPDATE, INSERT, DELETE.
51
Insertion des données – Syntaxe IMPLICITE (1/2)
1er cas: Insertion dans toutes les colonnes
INSERT INTO <nom_de_la_table> VALUES
( <valeur_colonne1>,
<valeur_colonne2>, …
<valeur_colonne’>
);
Remarque: le nombre de valeurs de colonnes doit être égal au nombre de
colonne de la table et conformément à leurs types
52
Insertion des données – Syntaxe EXPLICITE (2/2)
2ème cas: Insertion dans quelques colonnes
INSERT INTO <nom_de_la_table>
( <colonne1>,
<colonne2>,
<colonne3> )
VALUES
( <valeur_colonne1>,
<valeur_colonne2>,
<valeur_colonne3> );
53
Insertion des données – Exercice - Enoncé (1/2)
Soit le schéma relationnel suivant :
CLIENTS (CodeClient, NomClient, AdrClient, TelClient)
COMMANDES (NumCommande, Date, CodeClient#)
Questions:
1. Créer les 2 tables avec les contraintes d’intégrité (clés
primaires et étrangères)
54
Insertion des données – Exercice - Enoncé (2/2)
2. Insérer ses lignes:
CLIENTS
CodeClient NomClient AdrClient TelClient
C01 Bensalem Ali 3 rue tunis 2080 tunis 71123800
C02 Toumi salma - 71129870
COMMANDES
NumCommande Date CodeClient
110 03/04/2011 C01
111 09/07/2011 C02
55
Mise à jour des données
Syntaxe:
UPDATE <nom_table> SET <colonne_a_modifié> = <nouvelle_valeur>
WHERE ( <condition_de_mise_à_jour> );
Exemple:
Le client Bensalem Ali vient de changer d’adresse et habite avec le client
Toumi salma à « 15 rue Basra Bizerte 7000 », veuillez mettre à jour les
deux adresses.
56
Suppression des données
Syntaxe:
DELETE FROM <nom_table> WHERE ( <condition> );
Exemple:
1. Supprimer les commandes du client « Toumi salma »
2. Vider la table client
58
Objectifs du cours.
1. Définir le LID
2. Savoir formuler des Requêtes simples « SELECT »
3. Distinguer les fonctions mono lignes/multi lignes
4. Définir les Jointures, les Opérateurs ensemblistes et les
sous-interrogations
59
1ère Partie :
Les Requêtes simples « la clause SELECT »
Objectifs de la partie :
Définir «LID», savoir sélectionner des
colonnes avec ou sans doublons, avec ou sans
des conditions connaître les Expressions
arithmétiques, la Valeur « NULL », les Alias
de colonne, les opérateurs logique et ceux de
comparaison.
60
LID. (1/2)
Le langage LID permet, comme son nom l’indique, d’interroger
une BD. Il sert à rechercher, extraire, trier, mettre en forme des
données et calculer d’autres données à partir des données
existantes.
La structure de base d’une interrogation est formée des 3 clauses
suivantes :
SELECT *|<liste champ(s)> FROM <nom_table>
WHERE <condition(s)> ;
61
LID. (2/2)
La clause SELECT : indique les colonnes à récupérer. (ou
encore des champs projetés).
La clause FROM indique le nom de la ou des table(s)
impliquée(s) dans l’interrogation.
La clause WHERE correspond aux conditions de sélection
des champs.
Chaque nom de champ ou de table est séparé par une
virgule.
62
Sélection des colonnes. Toutes les colonnes
SELECT * Affiche tous les champs
de la table
FROM employees;
Résultat:
63
Sélection des colonnes. Une/plusieurs colonnes
Affiche les champs :
SELECT first_name, last_name « last_name » et
FROM employees; « first_name »
Résultat:
64
Expressions arithmétiques. Définition
i. Une expression contient des données de type NUMBER,
DATE et des opérateurs arithmétiques.
Opérateur Description
+ Addition
- Soustraction
* Multiplication
/ Division
65
Expressions arithmétiques. Exemple 1
SELECT min_salary + max_salary , min_salary - max_salary,
min_salary * max_salary, min_salary / max_salary
FROM jobs;
Résultat:
66
Expressions arithmétiques. Exemple 2
Ecrire la requête qui permet d’afficher le nom, prénom de
tous les employés ainsi que leur salaire annuel avec une
augmentation de 50 dinars par mois.
67
Valeur «NULL». Définition
NULL est une valeur qui n’est pas disponible, non affectée ou inconnue.
NULL est différent de zéro, espace ou chaîne vide
Exemple 1:
SELECT employee_id, commission_pct
FROM employees ;
Résultat:
68
Valeur «NULL». Dans les expressions arithmétique.
Exemple 2 :
SELECT Employee_id, (1+commission_pct)*salary
FROM employees;
Résultat:
69
Alias de colonne. (1/2)
Renomme un en-tête de colonne
Suit le nom de colonne
Peut utiliser le mot clé « as »
Doit obligatoirement être inclus entre guillemets s’il
contient des espaces, des caractères spéciaux ou s’il y a
des majuscules et des minuscules
70
Alias de colonne. Exemple (2/2)
SELECT first_name as nom, last_name prenom
FROM employees;
Résultat:
SELECT first_name as "nom de l’employee", last_name "prenom de l’employee"
FROM employees;
Résultat:
71
Opérateur de concaténation.
Concatène des colonnes et/ou des chaines de caractères
Est représenté par le symbole ||
Exemple:
SELECT ' le nom est ' || first_name || ', le prénom est '|| last_name as "nom et
prenom de l’employe"
FROM employees;
Résultat:
72
Eliminer les doublons
le mot-clé DISTINCT élimine les doublons.
Exemple:
SELECT DISTINCT(commission_pct)
FROM employees;
Résultat:
73
Restriction avec la clause « WHERE »
Syntaxe :
SELECT<nom_des colonnes> FROM <nom_de_la_table >
WHERE <conditions>;
Exemple: liste des employés du département 20
SELECT last_name , first_name FROM employees
WHERE department_id=20;
Résultat:
74
Opérateurs de comparaison. (1/2)
OPERATEUR DESCRIPTION
= Egal à
< Inférieur à
<= Inférieur à ou égal
> Supérieur à
>= Supérieur à ou égale à
<> Ou != Différent
BETWEEN val1 AND val2 val1 <= val <= val2
In (liste de valeurs) Valeur de la liste
LIKE Comme
( _ :un caractère, %=plusieurs caractères)
IS NULL Correspond à une valeur NULL
75
Opérateurs logiques. (2/2)
OPERATEUR DESCRIPTION
AND Retourne TRUE si les deux conditions sont VRAIES
Retourne TRUE si au moins une des conditions est
OR
VRAIE
Inverse la valeur de la condition
NOT TRUE si la condition est FAUSSE
FALSE si la condition est VRAIE
76
Trier avec « ORDER by ». Définition
Triez les lignes selon un ordre bien précis avec la clause
ORDER BY:
ASC : ordre croissant (par défaut)
DESC : ordre décroissant
Remarque: La clause ORDER BY vient en dernier dans
l’instruction SELECT
77
Trier avec « ORDER by ». Exemple
SELECT last_name, job_id, department_id, hire_date
FROM employees
ORDER BY hire_date DESC;
Résultat:
78
Exercices d’applications. (1/2)
( nous allons utilisé la table « employees » sous le schèma HR )
Afficher la liste de tous les employés.
Afficher le nom, le prénom, la date d’embauche de tous les employés et
renommer les colonnes comme suit: « nom de l’employe », « prenom de
l’employe » et « date dembauche »
Afficher le nom et le prénom des employés triés par date d’embauche.
Afficher les employés qui ont été embauché au cours de l’année 1990.
Afficher la liste des employés dont le salaire est > 2800.
Afficher la liste des employés des départements 10, 30 et 50.
79
Exercices d’applications. (2/2)
Afficher la liste des employés dont le salaire entre 4000 et 6000 du
département 20
Afficher la liste des employés dont la commission_pct est NULL.
Afficher la liste des employés dont le nom commence par la lettre ‘A’
Afficher la liste des employés dont le prénom comporte la lettre ‘s’
Afficher la liste des employés dont la deuxième lettre du nom est ‘i’
Afficher la liste des employés embauchés pendant les années entre 1986
et 1990
Afficher la liste des employés dont le job est différent de 'CLERK‘ ou
'MANAGER'
2ème Partie : Les Fonctions Mono lignes
Objectifs de la partie:
Définir et savoir utiliser les :
i. Fonctions de caractères
ii. Fonctions de manipulation des caractères
iii. Fonctions de manipulation des dates
iv. Fonctions numériques
v. Fonctions de conversions
vi. Autres fonctions
81
Fonctions de caractères. Conversion Minuscule/Majuscule(1/2)
Il existe trois fonctions principales:
LOWER : convertir les caractères « M » en « m »
UPPER : convertir les caractères « m » en « M »
INITCAP : convertir l’initiale de chaque mot en « M » et les
caractères suivants en « m »
Remarque: Une fonction mono ligne est une fonction qui s’applique
enregistrement par enregistrement.
82
Fonctions de caractères. Conversion Minuscule/Majuscule(2/2)
SELECT LOWER(last_name) as "prénom" FROM employees;
SELECT UPPER(last_name) as "prénom" FROM employees;
SELECT INITCAP(last_name) as "prénom" FROM employees;
83
Fonctions de manipulation des caractères. Définitions (1/2)
CONCAT(chaine1,chaine2) : concatène 2 chaines = ||
SUBSTR(chaine, pos, taille) : extrait une sous chaîne d’une autre
chaîne
LENGTH(ch) : taille d’une chaîne en caractères
INSTR(ch,sch) : position d’une chaîne de caractères dans une
autre chaîne
TRIM(ch) : élimine les espaces à gauche et à droite
LTRIM(ch) : élimine les espaces à gauche
RTRIM(ch) : élimine les espaces à droite
84
Fonctions de manipulation des caractères. Définitions (2/2)
LPAD (chaine, nbr, carac) : complète une chaîne de caractères sur la
gauche avec une autre chaîne pour avoir n caractères.
RPAD (chaine, nbr, carac): complète une chaîne de caractères sur la
droite avec une autre chaîne pour avoir n caractères.
ASCII (chaine) : retourne le code ascii du premier caractère de
la chaîne.
CHR (nbr): retourne le caractère (inverse de ascii).
85
Fonctions de manipulation des caractères. Exemples
SELECT 'station' ch1, 'agil' ch2,
Concat ('station 1','agil') "la station",
Substr ('station 1',9,1) "numéro station",
Length ('agil') "longueur ch1",
Instr ('agil','i') "position de i",
Length (Trim(' agil ')) "trim",
Length (Rtrim(' agil ')) "Rtrim",
Length (Ltrim(' agil ')) "Ltrim",
Rpad ('agil',8,'*') "RPAD", Lpad ('agil',8,'-') "LPAD",
ASCII ('test') " code ascii " , CHR(75)
FROM Dual;
86
Fonctions numériques. Présentation
ROUND (x, n) : Arrondir la valeur de x à la précision spécifiée n
TRUNC (x, n) : Tronquer la valeur de x à la précision spécifiée n
FLOOR (x) : si n<x<n+1 alors FLOOR(x)=n
CEIL (x) : si n<x<n+1 alors CEIL(x)=n+1
MOD (x, y) : reste de la division de x sur y
REMAINDER (m, n) : reste d’une division calculé comme suit :
m-(n*q) avec q égale à la partie entière du quotient
87
Fonctions numériques. Round (1/2)
SELECT round(123.646, 0) "0 chiffres" , round(123.646, 1) "1 chiffres",
round(123.646, 2) "2 chiffres", round(123.646, 3) "3 chiffres"
FROM Dual;
Résultat:
88
Fonctions numériques. Round (2/2)
SELECT round(123.646, -1) "1 chiffres" ,round(123.646, -2) "2 chiffres",
round(123.646, -3) "3 chiffres"
FROM Dual;
Résultat:
89
Fonctions numériques. TRUNC
SELECT TRUNC (123.646, 0) "n=0", TRUNC (123.646, 1) "n=1",
TRUNC (123.646, 2) "n=2", TRUNC (123.646, 3) "n=3", TRUNC (123.636, -1)
"n=-1", TRUNC (123.646, -2) "n=-2", TRUNC (123.646, -3) "n=-3"
FROM Dual;
Résultat:
90
Fonctions numériques. FLOOR/ CEIL
SELECT floor(-2.56), floor(-2.02), floor(-2.8),
ceil(-2.56), ceil(-2.02), ceil(-2.8)
FROM dual;
Résultat:
SELECT floor(2.56), floor(2.02), floor(2.8),
ceil(2.56), ceil(2.02), ceil(2.8)
FROM dual;
Résultat:
91
Fonctions numériques. MOD/ REMAINDER
SELECT MOD (12, 4), MOD (16, 6)
FROM Dual;
Résultat:
SELECT remainder (15, 6), remainder (15, 5),
remainder (15, 4), remainder (-15,4)
FROM Dual;
15-(2*6) = 3 / 15-(3*5) = 0 / 15-(4*4) = -1 / -15-(-4*4) = 1
Résultat:
92
Fonctions de manipulation des dates. (1/3)
MONTHS_BETWEEN (date1,date2): nombre de mois entre deux dates
ADD_MONTHS (date, nb_mois): Ajoute des mois calendaires à une date
NEXT_DAY (date, jour) : le jour suivant
LAST_DAY (date) : le dernier jour du mois
ROUND (date, précision) : arrondi une date
TRUNC (date, précision) : tronque une date
EXTRACT (day/month/year/hour/minute/seconde from date): extraction du
jour, mois, année, heure, minute et seconde
93
Fonctions de manipulation des dates. (2/3)
SELECT sysdate "date du jour",
sysdate+2 "Date jr plus 2jrs",
to_date ('10/09/2012','dd/mm/yyyy')-10 "date du jour moins 10" ,
Trunc (sysdate - to_date('01/05/2012','dd/mm/yyyy'),0)
"tronquer une date"
FROM dual ;
Résultat:
94
Fonctions de manipulation des dates. (3/3)
SELECT
Trunc (months_between (to_date ('2012/01/01', 'yyyy/mm/dd'), to_date
('2012/03/15', 'yyyy/mm/dd') ),2) "nbr de mois",
next_day(to_date ('2012/03/01', 'yyyy/mm/dd'), 'Monday') "lundi suivant",
last_day(to_date ('2012/03/01', 'yyyy/mm/dd')) "dernier jr du mois mars12" ,
add_months(to_date ('2012/03/01', 'yyyy/mm/dd'),3) "ajouter 3 mois"
FROM Dual;
Résultat:
95
Fonctions de conversions.
TO_DATE : Convertir une Chaine en format Date
TO_NUMBER : Convertir une Chaine en format Numérique
TO_CHAR : Convertir une Date /un nombre en une Chaine
96
Fonctions de conversions. Options avec To_char
OPTION DESCRIPTION
yyyy l’année (quatre chiffres)
month nom complet du mois en minuscule
mon abréviation du nom du mois en minuscule (trois caractères)
day nom complet du jour en minuscule
DD jour du mois (01-31)
D jour de la semaine (de 1 à 7, dimanche étant le 1)
dy abréviation du nom du jour en minuscule (3 caractères)
ddd jour de l'année (001-366)
q trimestre
w numéro de semaine du mois (de 1 à 5) (la première semaine commence
le premier jour du mois.)
ww numéro de semaine dans l'année (de 1 à 53) (la première semaine
commence le premier jour de l'année.
97
Autres Fonctions. (1/5). définition1
NVL (nom_col, valeur) : remplace une valeur nulle
NVL2 (expr,val1,val2) : si expr n’est pas nulle alors elle est remplacée
par val1 sinon par val2.
NULLIF (val1,val2) : si val1= val2 la valeur NULL est retournée sinon
val1
Case : évalue une liste de conditions et retourne un résultat parmi les cas
possibles
98
Autres Fonctions. (2/5). Exercices1
Ecrire les requêtes SELECT qui permettent de:
Remplacer « commission_pct » par 0 au niveau de la table
« employees » si elle est null
Remplacer « commission_pct » par 0 au niveau de la table
« employees » si elle est null sinon par 1
Afficher la liste des employés en ajoutant une colonne
« nom_departement » qui affiche :
Si department_id=10 , nom_departement=‘depart_10’
Si department_id=20 , nom_departement=‘depart_20’
Si department_id=30 , nom_departement=‘depart_30’
…
99
Autres Fonctions. (3/5). Définitions2
ROW_NUMBER : retourne le numéro séquentiel d'une ligne d'une
partition d'un ensemble de résultats, en commençant à 1 pour la première
ligne de chaque partition. Ne prend pas en considération les doublons
RANK: retourne le rang de chaque ligne au sein de la partition d'un
ensemble de résultats. Compte les doublons mais laisse des trous
DENSE_RANK : retourne le rang des lignes à l'intérieur de la partition
d'un ensemble de résultats, sans aucun vide dans le classement.
Compte les doublons mais ne laisse pas des trous
100
Autres Fonctions. (4/5). Syntaxe
SELECT
Row_number() over (partition by <col x> order by <col_y>
DESC/ASC), Col1,…colN
FROM <nom_table> ;
A retenir:
- La clause <order by> est obligatoire.
- La clause <partition by> est facultative, est utilisée pour faire un ordre par
ensemble de lignes selon <colx>.
- Rank et dense_rank ont la même syntaxe.
101
Autres Fonctions. (5/5). Exercices2
Ecrire les requêtes SELECT qui permettent de :
Afficher la liste des employees numérotés par « department_id ».
Afficher la liste des employees numérotés par département et selon le
salaire décroissant :
Utiliser « row_number »
Utiliser « rank »
Utiliser « dense_rank »
3ème Partie :
Les Fonctions Multi lignes ( ou fonctions de groupe )
Objectif du cours :
Définir la clause « GROUP BY »,
la clause « HAVING »
103
Fonctions Multi lignes. Définitions (1/3)
Une fonction mono ligne est une fonction qui s’applique enregistrement par
enregistrement.
Une fonction multi ligne ou fonction de groupe s’applique sur un groupe
d’enregistrements et donne un résultat par groupe.
Clause GROUP BY : Définit le critère de groupement pour la fonction
Clause HAVING : Permet de mettre des conditions sur les groupes
d’enregistrements
104
Fonctions Multi lignes. Définitions (2/3)
COUNT : Nombre de lignes,
SUM : Somme des valeurs,
AVG : Moyenne des valeurs,
MIN : Minimum,
MAX : Maximum,
STDDEV: Ecart type,
VARIANCE: Variance
105
Fonctions Multi lignes. Définitions (3/3)
COUNT : Nombre de lignes,
SUM : Somme des valeurs,
AVG : Moyenne des valeurs,
MIN : Minimum,
MAX : Maximum,
STDDEV: Ecart type,
VARIANCE: Variance
106
Fonctions Multi lignes. Exemple1
SELECT COUNT (salary) as count,
Trunc (SUM (salary),2) as sum,
MIN (salary) as min,
MAX (salary) as max,
Trunc (AVG (salary),2) as avg,
Trunc (VARIANCE (salary),2) as variance,
Trunc (STDDEV(salary),2) as ecart
FROM employees;
Résultat:
107
Fonctions Multi lignes. Syntaxe de la clause GROUP BY
SELECT <colonnes>, <fonction de groupe>
FROM table
WHERE <conditions>
GROUP BY <col>|<expr>
HAVING <conditions>
ORDER BY <col>|<expr>
108
Fonctions Multi lignes. Exemple2
SELECT department_id,
COUNT(employee_id) "nbr employes"
12
FROM employees Départements
GROUP BY department_id;
SELECT department_id, count(employee_id) "nbr employes"
FROM employees
GROUP BY department_id
HAVING department_id<40;
4 ème Partie : Les Jointures
Objectifs de cette partie :
i. Equijointure et jointure interne, Jointure naturelle
ii. Jointure externe
iii. Non équijointure
iv. Produit cartésien
110
Les Jointures. Définition.
Une jointure permet d’extraire des données de plusieurs
tables à la fois.
La condition de jointure peut être exprimée dans la clause
« WHERE » ou « ON ».
Précédez le nom de la colonne par le nom de la table lorsque
celui-ci figure dans plusieurs tables
111
Types de Jointures.
Equijointure ou jointure interne
Jointure naturelle
Jointure externe
Non équijointure
Produit cartésien
112
Equijointure. Définition
Une jointure interne ou équijointure est une jointure avec
une condition de jointure contenant un opérateur d‘égalité.
C’est la plus répandue, elle combine les lignes qui ont des
valeurs équivalentes pour les colonnes de la jointure.
Généralement dans ce type de jointure, ce sont les Primary
Key et Foreign Key qui sont utilisées.
113
Equijointure. Syntaxe (1/2)
SELECT table1.column, table2.column
FROM table1
INNER JOIN table2
ON (table1.column_name = table2.column_name) ;
114
Equijointure. Syntaxe (2/2)
T1 : Alias de la table : table1
SELECT T1.Colonne1, …T1.ColonneN,
T2 : Alias de la table : table2
T2.Colonne1, …T2.ColonneN
C1 : colonne permettant la
FROM table1 T1 INNER JOIN table2 T2
jointure entre les 2 tables
ON T1.C1=T2.C1 ( primary key + foreign key)
WHERE <Condition(s)>
Équivalent à :
SELECT T1.Colonne1, …T1.ColonneN,
T2.Colonne1, …T2.ColonneN
FROM T1 ,T2
WHERE T1.C1=T2.C1 AND <Condition(s)>
115
Equijointure. Exemple
Exemple1:
SELECT nomE, e.numdept, nomdept
FROM emp e INNER JOIN dept d
ON e.numdept=d.numdept;
Exemple2:
SELECT nomE, e.numdept, nomdept
FROM emp e INNER JOIN dept d
ON e.numdept=d.numdept
WHERE e.numdept=11;
116
Jointure naturelle. Définition
La jointure naturelle est une équijointure.
La clause NATURAL JOIN est basée sur toutes les colonnes
des deux tables portant le même nom.
Elle sélectionne les lignes des deux tables dont les valeurs sont
identiques dans toutes les colonnes qui correspondent.
Si les colonnes portant le même nom présentent des types de
données différents, une erreur est renvoyée.
117
Jointure naturelle. Syntaxe
SELECT colonne1, colonne2…
FROM Table1
NATURAL JOIN Table2
WHERE Condition(s) ;
Conditions autres que la condition
de jointure
118
Jointure naturelle. Exemple
Exemple 1:
SELECT nomE, numdept,nomdept
FROM emp NATURAL JOIN dept;
Exemple 2:
SELECT nomE, numdept,nomdept
FROM emp NATURAL JOIN dept
WHERE numdept=11;
119
Non équijointure. Définition
Il s'agit là d'utiliser n'importe quelle condition de jointure
entre deux tables, exceptée la stricte égalité. Ce peuvent être
les conditions suivantes :
120
Jointure externe. Définition
JOINTURES EXTERNES = OUTER JOINS.
Une jointure externe élargie le résultat d’une jointure interne
(INNER JOINS) et permet d’extraire des enregistrements qui
ne répondent pas aux critères de jointure.
Une jointure externe renvoie toutes les lignes qui satisfont la
condition de jointure et retourne également une partie de ces
lignes de la table pour laquelle aucune des lignes de l’autre ne
satisfait pas la condition de jointure.
121
Jointure externe. Types de jointures externes
SELECT t1.column, t2.column..
FROM table1 t1
LEFT | RIGHT | FULL OUTER JOIN table2 t2 ON
(t1.column_name = t2.column_name) ;
Le sens de la jointure externe LEFT ou RIGHT de la clause
OUTER JOIN désigne la table dominante.
FULL = INNER + LEFT + RIGHT
122
Jointure externe. Gauche
Exemple:
SELECT nomE, e.numdept, nomdept
FROM dept d LEFT JOIN emp e
ON e.numdept=d.numdept
123
Jointure externe. Droite
Exemple:
SELECT nomE, e.numdept,nomdept
FROM dept d RIGHT JOIN emp e
ON e.numdept=d.numdept
124
Jointure externe. complète
Exemple:
SELECT nomE, e.numdept,nomdept
FROM dept d FULL JOIN emp e
ON e.numdept=d.numdept
125
Produit Cartésien. Définition
On obtient un produit cartésien lorsque :
Une condition de jointure est omise
Une condition de jointure est incorrecte
A chaque ligne de la table 1 sont jointes toutes les lignes de
la table 2.
Le nombre de lignes renvoyés est égal n1 * n2 où
n1 est le nombre de lignes de la table 1
n2 est le nombre de lignes de la table 2
126
Produit Cartésien. Syntaxe
SELECT « nom_colonne1 », « nom_colonne2 »…
FROM table1 t1
CROSS JOIN table2 t2
Exemple:
Select * from employees CROSS JOIN departments
On va avoir 107*27 lignes = 2889 lignes
127
Produit Cartésien. Exemple
SELECT * From emp e
INNER JOIN dept d
ON e.numdept=e.numdept
OU
SELECT * From emp, dept
On va avoir 9*4 lignes
128
Jointure. Récapitulatif
5 ème Partie : Les Opérateurs
ensemblistes
i. UNION
ii. UNION ALL
iii. INTERSECT
iv. MINUS
130
Les opérateurs ensemblistes.
OPERATEUR DESCRIPTION
Ramène toutes les lignes communes aux deux
INTERSECT
requêtes
Toutes les lignes distinctes ramenées par les deux
UNION
requêtes
Toutes les lignes ramenées par les deux requêtes y
UNION ALL
compris les doublons
Toutes les lignes ramenées par la première requête
MINUS
sauf les lignes ramenées par la seconde requête
131
Union(ALL). Exemple
Créer une table d’archivage qui contient les informations des
employés qui ont été embauchés après l’année 2009.
Ecrire une requête qui va afficher tous les employés:
SELECT * from emp
Union (ALL)
SELECT * from emp2
132
Intersect/Minus. Exemple
Ecrire les requêtes permettant de :
Afficher les employés qui ont été archivés.
Afficher les employés qui n’ont pas été archivés.
SELECT * from emp
Intersect/minus
SELECT * from emp2 ;
133
Exercice d’application.
Ecrire une requête qui permet d’afficher ce résultat à partir de
la table ‘dept’ :
6 ème Partie :
Les Sous interrogations
i. Sous interrogations mono lignes
ii. Sous interrogations multi lignes
135
Sous interrogations. Définition
La sous-interrogation (requête interne) est exécutée une seule
fois avant la requête principale
Le résultat de la sous-interrogation est utilisé par la requête
principale (requête externe)
Une sous-interrogation est utilisée dans les clauses suivantes :
WHERE
HAVING
FROM
136
Sous interrogations mono lignes. Définition
Une sous-interrogation peut ramener un seul résultat on
l’appelle sous interrogation mono ligne.
Les opérateurs de comparaison mono ligne sont :
=, !=, <, >, <=, >=
137
Sous interrogations mono lignes. Exemple1
Exemple de Mise à jour avec une sous interrogation :
l’employé numéro 112 est affecté au même poste et même
département que l’employé numéro 111
UPDATE employee_id SET (job_id, department_id)
= ( SELECT job_id, department_id
FROM employees
WHERE employee_id=111 )
WHERE employee_id=112 ;
138
Sous interrogations mono lignes. Exemple2
Exemple de Suppression avec une sous interrogation :
Supprimer tous les employés du département ‘SALES’
DELETE FROM employees
WHERE Department_id =
( SELECT department_id
FROM departments
WHERE department_name=‘SALES’ );
139
Sous interrogations mono lignes. Exemples
Ecrire les requêtes permettant de:
Afficher le nom du département de l’employé ‘Benafia
tarek’.
Afficher la liste des employés qui touchent un salaire
supérieur à l’employé ‘Benafia tarek’.
Afficher le nom et la date d’embauche des employés qui
n’ont pas été embauchés la même année que l’employé
‘Benafia tarek’.
140
Sous interrogations multi lignes. Définition (1/3)
Une sous-interrogation peut ramener plusieurs lignes à
condition que l'opérateur de comparaison admette à sa
droite un ensemble de valeurs.
Les opérateurs permettant de comparer une valeur à un
ensemble de valeurs sont :
l'opérateur IN et
les opérateurs obtenus en ajoutant ANY ou ALL à la
suite des opérateurs de comparaison classique :
=, !=, <, >, <=, >=.
141
Sous interrogations multi lignes. Définition (2/3)
ANY : la comparaison sera vraie si elle est vraie pour au
moins un élément de l'ensemble (elle est donc fausse si
l'ensemble est vide).
ALL : la comparaison sera vraie si elle est vraie pour tous
les éléments de l'ensemble (elle est vraie si l'ensemble est
vide).
L'opérateur IN est équivalent à = ANY,
L'opérateur NOT IN est équivalent à != ALL.
142
Sous interrogations multi lignes. Définition (3/3)
Opérateur de comparaison Résultat
SALAIRE doit être égale à une des valeurs
WHERE salaire IN (1200,1600,2000,2900) dans la liste
SALAIRE ne doit pas être égale à une des
WHERE salaire NOT IN (1200,1600,2000,2900) valeurs dans la liste
SALAIRE doit être supérieur à au moins une
WHERE salaire >ANY (1200,1600,2000,2900) des valeurs.
Donc plus que le minimum (+ de 1200).
SALAIRE doit être inférieur à au moins une
WHERE salaire <ANY (1200,1600,2000,2900) des valeurs.
Donc moins que le maximum (- de 2900).
SALAIRE doit être supérieur au maximum
WHERE salaire >ALL (1200,1600,2000,2900) de toutes les valeurs.
Donc plus que le maximum (+ de 2900).
SALAIRE doit être inférieur au minimum de
WHERE salaire <ALL (1200,1600,2000,2900) toutes les valeurs.
Donc moins que le minimum (- de 1200).
143
Sous interrogations multi lignes. Exemples
Ecrire les requêtes permettant de:
Afficher la liste des employés qui touchent un salaire
supérieur à tous les employés du département 11.
Afficher le nom et la date d’embauche des employés qui
n’ont pas été embauchés la même année que l’employé
‘Benflen ali’ et l’employé ‘Hamid ali’