SlideShare une entreprise Scribd logo
1  sur  55
Télécharger pour lire hors ligne
Chapitre 5 : Langage SQL
2 BC
A.U: 2020/2021
Plan
2
1. Introduction
2. Les tables
3. Les types de données
4. Langage LDD
5. Langage LMD
5.1 Introduction
3
 Le langage SQL (Structered Query Language) est le langage standard de
gestion des bases de données relationnelles. Il permet de définir, manipuler et
contrôler les données.
 SQL est constitué de trois sous langages :
1. LDD (Langage de Définition de Données) : incluant les requêtes CREATE,ALTER,
DROP, RENAME,TRUNCATE. Le LDD permet de créer, de changer et d'éliminer une
structure de données Oracle.
2. LMD (langage de manipulation de données): incluant les requêtes SELECT, INSERT,
UPDATE, DELETE, MERGE. Le LMD permet de sélectionner, d'insérer, de modifier et de
supprimer des lignes à partir d'une table.
3. LCD (langage de contrôle de données): incluant les requêtes GRANT, REVOKE. Le
LCD permet de donner ou de priver les droits d'accès à une base de données Oracle ou à
ces structures.
5.1 Introduction
4
 SQL a été implémenté par IBM dans les années 70, et se base sur l'algèbre
relationnelle de Codd. Chaque SGBDR (DB2, Informix, Ingres, SQL SERVER...)
présente sa propre version de SQL.
 ORACLE fournit un éditeur de requêtes SQL, il s'agit de SQL*PLUS. Pour
accéder à cet éditeur, il faut être un utilisateur (avoir un login et un mot de
passe). Une fois l'éditeur affiché, on peut saisir les requêtes et voir les résultats
retournés.
5.2 Les tables
5
 La table est l'objet principal d'une base de données car c'est là ou on stocke
les données. Oracle identifie une table par son nom.
 Elle peut avoir une ou plusieurs colonnes (champ, attribut, mesure etc.). Une
colonne est caractérisée par son nom et son type de données.
 La table peut avoir zéro ou plusieurs lignes (enregistrements, objets, tuples
etc.). Table Personne
CIN Nom Age
07188742 Mohamed 33
07124884 Ali 25
5.3 Les types de données
6
 Oracle offre les types de données suivants :
 CHAR(n) : Chaîne de caractère fixe de longueur maximale n.
 VARCHAR2(n) : Chaîne de caractère variable de longueur maximale n.
 NUMBER(n,d) : Réel avec n le nombre de chiffres du réel, d le nombre de décimaux.
Exemple : NUMBER(5,2) inclut tous les nombres de -999.99 → 999.99
 DATE : Le type de données incluant la date et l'heure. Le format par défaut est le
suivant : DD-MON-YY, par exemple : `04-0CT-04‘.
 LONG : Chaîne de caractère variable de taille maximale 2 Go.
5.3 Les types de données
7
 Remarques :
 Une table ne peut contenir qu'une seule colonne de type LONG.
 Il n'y a pas de type de données booléen, ce dernier peut être simulé par NUMBER(1)
ou CHAR(1).
 Une colonne non renseignée porte la valeur NULL qui est différente de 0 pour les
nombres et de la chaîne vide pour les chaînes de caractères.
5.4 Langage LDD
8
 Requête CREATE:
 L ’ordre CREATETABLE permet de créer une table en définissant le nom, le type de
chacune des colonnes de la table.
 table est le nom que l’on donne à la table. Colonnei est le nom d ’une colonne.Typei
est le type des données contenues dans Colonnei .
 Exemple
5.4 Langage LDD
9
 Requête CREATE:
 Sous Oracle, un nom doit commencer par une lettre, comporter moins de 30
caractères (lettres, chiffres, _), être différent d’un autre nom de table ou de vue, être
différent d’un mot réservé SQL. Les lettres minuscules et majuscules sont
équivalentes.
5.4 Langage LDD
10
 Requête CREATE:
 Les contraintes: Une contrainte concerne une colonne de la table et peut être
aperçue comme étant une condition que doivent respecter les valeurs de cette
colonne. Elle est spécifiée lors de la création de la table et vient après le type de
données de la colonne dans la requête :
 [CONSTRAINT nom_contrainte] contrainte
 Toute contrainte est définie par une table, une colonne, un type et un nom.
 L’utilisateur peut affecter un nom à une contrainte, sinon Oracle lui affectera un nom
par défaut. Les types de contraintes sont les suivants :
5.4 Langage LDD
11
 Requête CREATE:
 Les contraintes:
 Clé primaire
5.4 Langage LDD
12
 Requête CREATE:
 Les contraintes:
 Clé étrangère
5.4 Langage LDD
13
 Requête CREATE:
 Les contraintes:
 Unicité
5.4 Langage LDD
14
 Requête CREATE:
 Les contraintes:
 Non nullité: L’attribut ne peut pas prendre de valeur nulle, il doit être toujours renseigné.
5.4 Langage LDD
15
 Requête CREATE:
 Les contraintes:
 Check: parfois la colonne d’une table doit satisfaire certaines conditions posées par l’utilisateur. Les
contraintes de vérification permettent généralement de restreindre le domaine d’une colonne.
5.4 Langage LDD
16
 Requête CREATE:
 Exemple: Créez la table EMP sachant que la table DEPT l’est déjà. Cette table contient une clé
primaire EMPNO, un nom qui doit être unique ENAME, un poste JOB, un salaire SAL qui doit
dépasser un salaire minimum conventionnel (SMIG) de 600, une date d’embauche HIREDATE qui ne
peut pas être NULL, un code d’employeur MGR qui réfère la colonne EMPNO et finalement un
numéro de département DEPTNO qui réfère la colonne DEPTNO de la table DEPT ?
 REQ 42: CREATETABLE EMP(EMPNO NUMBER CONSTRAINT PK1 PRIMARY KEY, ENAMEVARCHAR2(20)
CONSTRAINT UN1 UNIQUE, JOBVARCHAR2(15), SAL NUMBER CONSTRAINT CH1 CHECK(SAL>600),
HIREDATE DATE DEFAULT ’01-JAN-80’ NOT NULL, MGR NUMBER CONSTRAINT FK_EMP_EMP
REFERENCES EMP(EMPNO), DEPTNO NUMBER REFERENCES DEPT(DEPTNO)) ;
5.4 Langage LDD
17
 Requête ALTER:
 La modification d’une table consiste à ajouter, renommer, modifier ou supprimer une
colonne, ou à ajouter, modifier ou supprimer une contrainte. La requête de
modification d’une table est ALTERTABLE.
 Il est possible de renommer une table de deux manières, via la requête RENAME ou
encore la clause RENAME dans la requête ALTERTABLE.
 Renommer de deux manières la table EMP pour EMPLOYE ?
 REQ 1 : RENAME EMP TO EMPLOYE;
 REQ 2 :ALTERTABLE EMP RENAMETO EMPLOYE;
5.4 Langage LDD
18
 Requête ALTER: Ajouter/renommer une colonne
 L’ajout de colonne se fait via la clause ADD. Une colonne ajoutée est mise à NULL pour toutes les
lignes. Il en découle qu’on ne peut pas appliquer une contrainte sur cette colonne lui interdisant
d’avoir une valeur NULL à moins qu’elle soit affectée à une valeur par défaut ou que la table soit
vide.
 Ajouter les colonnes téléphoneTEL et Adresse ADR. La colonneTEL ne doit pas avoir la valeur
NULL ?
 REQ 3: ALTER TABLE EMP ADD job VARCHAR2(30) ;
 REQ 4: ALTER TABLE EMP ADD (TEL NUMBER(8) DEFAULT ‘00000000’ NOT NULL,ADR
VARCHAR2(30)) ;
 Il est possible de renommer une colonne via la clause RENAME COLUMN.
 Renommer la colonne SAL pour SALARY dans la table EMP ?
 REQ 5 : ALTER TABLE EMP RENAME COLUMN SAL TO SALARY;
5.4 Langage LDD
19
 Requête ALTER: Modifier une colonne
 Ça revient à modifier son type de données via la clause MODIFY COLUMN.
 Il est possible d’augmenter la taille d’une colonne de type numérique ou chaîne de caractères et de
la diminuer si toutes les valeurs de la colonne le permettent. Il est aussi possible de changer le type
de données si la colonne en question ne contient que des valeurs NULL.
 On peut aussi changer du type CHAR au typeVARCHAR2 (et vice versa) si les champs sont NULL
ou si on ne change pas la taille. Finalement un changement de la valeur par défaut n’affecte que les
insertions futures.
 Modifier la taille de la colonne JOB à 30 caractères variables ?
 REQ 6: ALTERTABLE EMP MODIFY (JOBVARCHAR2(30));
5.4 Langage LDD
20
 Requête ALTER: Supprimer une colonne
 La clause DROP COLUMN dans la requête ALTER TABLE permet de supprimer une colonne
d’une table.
 Il est possible de supprimer des colonnes contenant des données à condition qu’elle ne soit pas
l’unique colonne de la table ou référencée dans une autre table.
 Si la colonne est référencée par une colonne d’une autre table (fille), alors il faut ajouter l’option
CASCADE CONSTRAINTS pour éliminer aussi la contrainte FOREIGN KEY de la colonne
étrangère.
 Supprimer la colonne HIREDATE de la table EMP ?
 REQ 7: ALTERTABLE EMP DROP COLUMN HIREDATE;
5.4 Langage LDD
21
 Requête ALTER: Ajouter une contrainte
 On peut ajouter une contrainte à une table existante en utilisant la requête ALTERTABLE et la
clause ADD CONSTRAINT.
 Cette opération ne réussit que si les données qui existent déjà dans la table respectent la
contrainte qu’on veut ajouter.
 Supposons que la table EMP n’est soumise à aucune contrainte.Ajoutez les contraintes nécessaires
?
 REQ 8: ALTERTABLE EMP ADD (CONSTRAINT PK1 PRIMARY KEY (EMPNO), CONSTRAINT
FK_EMP_DEPT FOREIGN KEY(DEPTNO) REFERENCES DEPT(DEPTNO)) ;
 REQ 9: ALTER TABLE EMP modify ADR NOT NULL;
 L’ajout d’une contrainte n’est possible que si les données qu’elle concerne, la respectent déjà.
5.4 Langage LDD
22
 Requête ALTER: Supprimer une contrainte
 La clause DROP CONSTRAINT permet de supprimer une contrainte d’une table.
 Elle est donc suivie par le nom de la contrainte (notons encore une fois l’importance du nom d’une
contrainte) et optionnellement par le mot clé CASCADE.
 Si ce mot clé est précisé, alors la suppression d’une clé primaire d’une table mère, la suppression de
la clé étrangère correspondante dans la table fille est effectuée automatiquement.
5.4 Langage LDD
23
 Requête DROP:
 Cette commande permet de supprimer une table de la base de données. Les lignes de la table et la
définition elle-même sont détruites. L’espace occupé par la table est libéré.
 Exemple DROP TABLE STAGE;
 Si votre table est une table mère, c-à-d que sa clé primaire est
référée par d’autres colonnes FOREIGN KEY qui sont dans une ou plusieurs tables filles, alors
la suppression est impossible.
 La solution est d’utiliser l’option CASCADE CONSTRAINTS ; dans ce cas là, les contraintes
FOREIGN KEY posées sur les colonnes des tables filles- seront à leurs tours supprimés.
 Supprimer totalement la table DEPT ?
 REQ 10: DROP TABLE DEPT CASCADE CONSTRAINTS;
5.5 Langage LMD
24
 La requête SELECT nous permet d'extraire des données à partir d'une base
de données. La clause SELECT est suivie d'une ou de plusieurs colonnes,
ce sont les colonnes qu'on veut extraire. La clause FROM est suivie par le
nom de la table à partir de laquelle on veut afficher les données.
 Tous les exemples qui suivent se basent sur les tables EMP, DEPT et
SALGRADE créées par défaut lors de l'installation d'Oracle pour l'utilisateur
scott/tiger.
 La requête R1 affiche toutes les colonnes de la table EMP :
 REQ1 : SELECT * FROM EMP ;
 Le symbole ‘*’ remplace toutes les colonnes de la table EMP.
5.5 Langage LMD
25
 REQ2 : SELECT EMPNO, ENAME, SAL FROM EMP ;
 Cette opération retourne les colonnes EMPNO, ENAME et SAL.
5.5 Langage LMD
26
 En réalité la clause SELECT peut inclure des expressions autres que les
colonnes. Elle peut être suivie par :
 Des expressions arithmétiques.
 Des alias de colonnes.
 Des colonnes concaténées.
 Des littéraux (constantes).
 Donner les noms et les salaires annuels de tous les employés ?
 REQ3 : SELECT ENAME, SAL*12 FROM EMP ;
 Voici ce que nous affiche cette requête :
5.5 Langage LMD
27
 L’entête de la 2ème colonne est sal*12, on peut modifier l’entête en
lui affectant un alias :
 REQ4 : SELECT ENAME, SAL*12 ANNSAL FROM EMP ;
 L’alias et la colonne (ou l’expression) sont séparés d’un espace.
 Afficher les codes et les noms concaténés de tous employés ?
 REQ5 : SELECT EMPNO||ENAME EMPLOYEE FROM EMP ;
 REQ6 : SELECT EMPNO||‘ ‘||ENAME EMPLOYEE,‘works in’,
DEPTNO FROM EMP ;
5.5 Langage LMD
28
 Le traitement des valeurs NULL : Si une ligne donnée n’a pas de valeur
pour une colonne donnée, alors cette case porte la valeur NULL.Toute
colonne, quelque soit son type de données, peut avoir la valeur NULL.
 Certaines contraintes appliquées sur une colonne (PRIMARY KEY, NOT
NULL...) l’empêchent d’avoir la valeur NULL.
 Cette valeur est traitée différemment des autres valeurs. En effet si NULL est
impliquée dans :
 Une expression arithmétique, alors le résultat de toute l’expression est NULL.
 Une expression logique, alors le résultat de tout l’expression est FAUX.
5.5 Langage LMD
29
 Le revenu annuel d’un employé est SAL*12 auquel on ajoute la commission
COMM.Afficher les salaires annuels de tous les employés ?
 REQ7 : SELECT ENAME, SAL*12 + COMM ANNSAL FROM EMP ;
 Quoique le salaire de SMITH est de 9600, le résultat affiché est NULL.
 La fonction NVL(col,val) nous sera très utile dans ce cas, car cette fonction
retourne val si la colonne porte la valeur NULL.
 La requête correcte est :
 REQ8 : SELECT ENAME, SAL*12+NVL(COMM,0) ANNSAL FROM EMP ;
5.5 Langage LMD
30
 Le mot clé DISTINCT : Ce mot clé est introduit après SELECT, il sert à
éliminer les occurrences, ainsi pour afficher les codes de départements
(chacun une seule fois) :
 REQ9 : SELECT DISTINCT DEPTNO FROM EMP ;
 DISTINCT ne peut être introduite qu’une seule fois, juste après le SELECT,
et concerne toutes les colonnes qui la suivent. Le résultat est toute
combinaison distincte de ces colonnes.
 Afficher les jobs dans chaque département de manière distincte.
 REQ10 : SELECT DISTINCT JOB, DEPTNO FROM EMP ;
5.5 Langage LMD
31
 La clause ORDER BY: Le résultat retourné d’une requête n’a pas d’ordre
défini. La clause ORDER BY permet de trier le résultat selon une ou plusieurs
colonnes dans un ordre croissant ou décroissant.
 Cette clause doit être la dernière dans la requête et peut être suivie d’une
colonne, d’une expression ou même d’un alias.
 Afficher les employés triés par leurs DEPTNO dans l’ordre décroissant et par
leurs JOB dans l’ordre croissant.
 REQ11 : SELECT * FROM EMP ORDER BY DEPTNO DESC, JOB ASC ;
 Chaque groupe de lignes ayant le même DEPTNO est lui-même trié selon le
JOB dans l’ordre.
5.5 Langage LMD
32
 La restriction de lignes : Supposons que nous voulons afficher les employés
du département 20. La requête que nous devons formuler doit retourner
chaque ligne de la table EMP dont la colonne DEPTNO a pour valeur 20.
Cette opération relationnelle est dite opération de restriction (ou
sélection), et se base sur la clause WHERE.
 La clause WHERE est suivie d’une condition simple ou composée
(combinaison de plusieurs conditions). Chaque ligne satisfaisant cette
condition est retournée.
5.5 Langage LMD
33
 Afficher les employés du département 20.
 REQ12 : SELECT * FROM EMPWHERE DEPTNO=20 ;
 Afficher les employés dont la commission est inférieure au salaire.
 REQ 13 : SELECT * FROM EMP WHERE NVL(COMM,0)<SAL ;
5.5 Langage LMD
34
 Les opérateurs de comparaison : ils sont utilisables pour comparer deux
valeurs de même type (<, <=, >, >=, <>, !=, =). Cependant Oracle offre quatre
opérateurs de comparaison qui lui sont spéciaux :
 BETWEEN v1 AND v2 → col≥v1 AND col≤v2.
 IN (v1,v2,v3,...,vn) → col= v1 OR col=v2 OR...OR col=vn.
 LIKE pattern (les symboles % et _ sont utilisés pour spécifier un pattern, le %
remplace une sous chaîne y compris la chaîne vide, le _ remplace un seul
caractère).
 IS NULL (l’opérateur = ne peut pas être utilisée pour comparer une colonne à
NULL, on utilise cet opérateur).
 L’opérateur logique NOT peut être utilisé avec ces opérateurs NOT
BETWEEN...., NOT IN....., NOT LIKE...., IS NOT NULL.
5.5 Langage LMD
35
 Donner les noms et les salaires des employés dont le salaire est entre 1000 et 2000 ?
 REQ 14 : SELECT ENAME, SAL FROM EMPWHERE SAL BETWEEN 1000 AND 2000 ;
 Donner les employés dont le manager est 7902, 7566 ou 7788 ?
 REQ15 : SELECT * FROM EMPWHERE MGR IN (7902, 7566, 7788) ;
 Afficher les employés dont le nom commence par ‘S’ ?
 REQ 16 : SELECT * FROM EMPWHERE ENAME LIKE ‘S%’ ;
 Afficher les employés dont le nom est composé de 4 caractères ?
 REQ 17 : SELECT * FROM EMPWHERE ENAME LIKE ‘_ _ _ _’ ;
 Afficher les employés qui n’ont pas de manager ?
 REQ 18 : SELECT * FROM EMPWHERE MGR IS NULL ;
5.5 Langage LMD
36
 Les opérateurs logiques : ils sont les trois suivants AND, OR et NOT. Il est inutile de
vous rappeler que AND est prioritaire au OR, tout comme les opérateurs * et / qui sont
prioritaires au + et au -.
 Afficher tous les clerks dont le salaire est entre 1000 et 2000 ?
 REQ 19 : SELECT * FROM EMPWHERE SAL BETWEEN 1000 AND 2000 AND
JOB=’CLERK’;
 Afficher tous les managers dont le salaire est supérieur à 1500 et tous les salesman ?
 REQ 20 : SELECT * FROM EMPWHERE SAL>1500 AND JOB=’MANAGER’ OR
JOB=’SALESMAN’;
 Afficher tous les salesman et tous les managers dont le salaire est supérieur à 1500 ?
 REQ21 : SELECT * FROM EMPWHERE SAL>1500 AND (JOB=’MANAGER’ OR
JOB=’SALESMAN’);
5.5 Langage LMD
37
 Il existe plusieurs fonctions qui peuvent être utilisées pour manipuler plusieurs
enregistrements, il s’agit des fonctions d’agrégations statistiques, les principales sont
les suivantes:
 AVG() pour calculer la moyenne d’un set de valeur. Permet de connaître le prix du panier
moyen pour de chaque client.
 COUNT() pour compter le nombre de lignes concernées. Permet de savoir combien d’achats
a été effectué par chaque client.
 MAX() pour récupérer la plus haute valeur. Pratique pour savoir l’achat le plus cher.
 MIN() pour récupérer la plus petite valeur. Utile par exemple pour connaître la date du
premier achat d’un client.
 SUM() pour calculer la somme de plusieurs lignes. Permet par exemple de connaître le total
de tous les achats d’un client.
 Ces petites fonctions se révèlent rapidement indispensable pour travailler sur des
données.
5.5 Langage LMD
38
 Requête SELECT ….GROUP BY:
 La commande GROUP BY est utilisée en SQL pour grouper plusieurs résultats et
utiliser une fonction de totaux sur un groupe de résultat.
 Sur une table qui contient toutes les ventes d’un magasin, il est par exemple possible
de regrouper les ventes par clients identiques et d’obtenir le coût total des achats
pour chaque client.
 A noter: cette commande doit toujours s’utiliser après la commande WHERE et avant
la commande HAVING.
5.5 Langage LMD
39
 Requête SELECT …. GROUP BY:
 Pour obtenir le coût total de chaque client en regroupant les commandes des mêmes
clients, il faut utiliser la requête suivante:
 La fonction SUM() permet d’additionner la valeur de chaque tarif pour un même
client. Le résultat sera donc le suivant:
5.5 Langage LMD
40
 Requête SELECT ….HAVING:
 La condition HAVING en SQL est presque similaire à WHERE à la seule différence
que HAVING permet de filtrer en utilisant des fonctions telles que SUM(), COUNT(),
AVG(), MIN() ou MAX().
 Cela permet donc de SÉLECTIONNER les colonnes DE la table « nom_table » en
GROUPANT les lignes qui ont des valeurs identiques sur la colonne « colonne1 » et
que la condition de HAVING soit respectée.
 Important: HAVING est très souvent utilisé en même temps que GROUP BY bien que
ce ne soit pas obligatoire.
5.5 Langage LMD
41
 Requête SELECT ….HAVING:
 Exemple: Pour utiliser un exemple concret, imaginons une table « achat » qui contient
les achats de différents clients avec le coût du panier pour chaque achat.
 Si dans cette table on souhaite récupérer la liste des clients qui ont commandé plus de
40€, toute commandes confondu alors il est possible d’utiliser la requête suivante:
5.5 Langage LMD
42
 Requête SELECT ….HAVING:
 Exemple:
5.5 Langage LMD
43
 Requête SELECT…. JOIN:
 Les jointures en SQL permettent d’associer plusieurs tables dans une même requête.
Cela permet d’exploiter la puissance des bases de données relationnelles pour obtenir
des résultats qui combinent les données de plusieurs tables de manière efficace.
 Règles de jointure : Pour joindre trois tables, il est nécessaire d’établir un minimum de
deux conditions de jointure, pour joindre quatre tables, on doit établir un minimum de
trois conditions de jointure etc.
 Une règle simple est la suivante : Le nombre minimum de conditions de jointure =
nombre de tables -1.
5.5 Langage LMD
44
 Requête SELECT…. INNER JOIN:
 Dans le langage SQL la commande INNER JOIN, aussi appelée EQUIJOIN, est un type
de jointures très communes pour lier plusieurs tables entre-elles.
 Cette commande retourne les enregistrements lorsqu’il y a au moins une ligne dans
chaque colonne qui correspond à la condition.
 La syntaxe ci-dessus stipule qu’il faut sélectionner les enregistrements des tables
table1 et table2 lorsque les données de la colonne « id » de table1 est égal aux
données de la colonne fk_id de table2.
5.5 Langage LMD
45
 Requête SELECT…. INNER JOIN:
 Exemple:
5.5 Langage LMD
46
 Requête SELECT…. INNER JOIN:
 Exemple:
5.5 Langage LMD
47
 Requête SELECT…. LEFT JOIN:
 Dans le langage SQL, la commande LEFT JOIN (aussi appelée LEFT OUTER JOIN) est
un type de jointure entre 2 tables. Cela permet de lister tous les résultats de la table
de gauche (left = gauche) même s’il n’y a pas de correspondance dans la deuxième
tables.
5.5 Langage LMD
48
 Requête SELECT…. LEFT JOIN:
 Exemple: Imaginons une application contenant des utilisateurs et des commandes pour
chacun de ces utilisateurs. La base de données de cette application contient une table
pour les utilisateurs et sauvegarde leurs achats dans une seconde table. Les 2 tables
sont reliées grâce à la colonne utilisateur_id de la table des commandes. Cela permet
d’associer une commande à un utilisateur.
5.5 Langage LMD
49
 Requête SELECT…. LEFT JOIN:
 Exemple:
5.5 Langage LMD
50
 Requête SELECT…. LEFT JOIN:
 Exemple: Pour lister tous les utilisateurs avec leurs commandes et afficher également
les utilisateurs qui n’ont pas effectuées d’achats, il est possible d’utiliser la requête
suivante:
5.5 Langage LMD
51
 Requête SELECT…. LEFT JOIN:
 Exemple: Les dernières lignes montrent des utilisateurs qui n’ont effectuée aucune
commande. La ligne retourne la valeur NULL pour les colonnes concernant les achats
qu’ils n’ont pas effectués.
5.5 Langage LMD
52
 Requête SELECT…. RIGHT JOIN:
 En SQL, la commande RIGHT JOIN (ou RIGHT OUTER JOIN) est un type de jointure
entre 2 tables qui permet de retourner tous les enregistrements de la table de droite
(right = droite) même s’il n’y a pas de correspondance avec la table de gauche.
 S’il y a un enregistrement de la table de droite qui ne trouve pas de correspondance
dans la table de gauche, alors les colonnes de la table de gauche auront NULL pour
valeur.
5.5 Langage LMD
53
 Requête SELECT…. RIGHT JOIN:
 Exemple:
5.5 Langage LMD
54
 Requête SELECT…. RIGHT JOIN:
 Exemple: Pour afficher toutes les commandes avec le nom de l’utilisateur
correspondant il est normalement d’habitude d’utiliser INNER JOIN en SQL.
Malheureusement, si l’utilisateur a été supprimé de la table, alors ça ne retourne pas
l’achat. L’utilisation de RIGHT JOIN permet de retourner tous les achats et d’afficher
le nom de l’utilisateur s’il existe. Pour cela il convient d’utiliser cette requête:
5.5 Langage LMD
55
 Requête SELECT…. RIGHT JOIN:
 Ce résultat montre que la facture A00107 est liée à l’utilisateur numéro 5. Or, cet
utilisateur n’existe pas ou n’existe plus. Grâce à RIGHT JOIN, l’achat est tout de
même affiché mais les informations liées à l’utilisateur sont remplacé par NULL.

Contenu connexe

Similaire à Chapitre5.pdf

Pl/sql - interaction avec la base de données & structures de contrôle
Pl/sql  - interaction avec la base de données & structures de contrôlePl/sql  - interaction avec la base de données & structures de contrôle
Pl/sql - interaction avec la base de données & structures de contrôleAbdelouahed Abdou
 
Chapitre 04-B - Langages de consultation.pdf
Chapitre 04-B - Langages de consultation.pdfChapitre 04-B - Langages de consultation.pdf
Chapitre 04-B - Langages de consultation.pdfRihabBENLAMINE
 
Oracle : extension du langage SQL
Oracle : extension du langage SQLOracle : extension du langage SQL
Oracle : extension du langage SQLMohammed Jaafar
 
Manipulation des Données , cours sql oracle
Manipulation des Données , cours sql oracleManipulation des Données , cours sql oracle
Manipulation des Données , cours sql oraclewebreaker
 
Les Contraintes | SQL Oracle
Les Contraintes | SQL OracleLes Contraintes | SQL Oracle
Les Contraintes | SQL Oraclewebreaker
 
Création et Gestion de Tables | SQL Oracle
Création et Gestion de Tables | SQL OracleCréation et Gestion de Tables | SQL Oracle
Création et Gestion de Tables | SQL Oraclewebreaker
 
Tpdba1
Tpdba1Tpdba1
Tpdba1infcom
 
GSI_Chap4-bts-requêtesSQL
GSI_Chap4-bts-requêtesSQLGSI_Chap4-bts-requêtesSQL
GSI_Chap4-bts-requêtesSQLecogestionblog
 
1-pl-sql 2021 2022.pdf
1-pl-sql 2021 2022.pdf1-pl-sql 2021 2022.pdf
1-pl-sql 2021 2022.pdfImaneZoubir1
 
QuelquesCommandesMySQL.pdf
QuelquesCommandesMySQL.pdfQuelquesCommandesMySQL.pdf
QuelquesCommandesMySQL.pdfMoez Moezm
 
Support formation vidéo : SQL pour les (grands) débutants
Support formation vidéo : SQL pour les (grands) débutants Support formation vidéo : SQL pour les (grands) débutants
Support formation vidéo : SQL pour les (grands) débutants SmartnSkilled
 
PL LSQL.pptx
PL LSQL.pptxPL LSQL.pptx
PL LSQL.pptxMaNl13
 
chapitre 5_db_20_21.pdf.pptx
chapitre 5_db_20_21.pdf.pptxchapitre 5_db_20_21.pdf.pptx
chapitre 5_db_20_21.pdf.pptxDolaMary
 
Plsql triggers
Plsql triggersPlsql triggers
Plsql triggersAz Za
 

Similaire à Chapitre5.pdf (20)

Pl/sql - interaction avec la base de données & structures de contrôle
Pl/sql  - interaction avec la base de données & structures de contrôlePl/sql  - interaction avec la base de données & structures de contrôle
Pl/sql - interaction avec la base de données & structures de contrôle
 
Chapitre 04-B - Langages de consultation.pdf
Chapitre 04-B - Langages de consultation.pdfChapitre 04-B - Langages de consultation.pdf
Chapitre 04-B - Langages de consultation.pdf
 
Introduction au langage SQL
Introduction au langage SQLIntroduction au langage SQL
Introduction au langage SQL
 
Oracle : extension du langage SQL
Oracle : extension du langage SQLOracle : extension du langage SQL
Oracle : extension du langage SQL
 
Manipulation des Données , cours sql oracle
Manipulation des Données , cours sql oracleManipulation des Données , cours sql oracle
Manipulation des Données , cours sql oracle
 
Les Contraintes | SQL Oracle
Les Contraintes | SQL OracleLes Contraintes | SQL Oracle
Les Contraintes | SQL Oracle
 
Création et Gestion de Tables | SQL Oracle
Création et Gestion de Tables | SQL OracleCréation et Gestion de Tables | SQL Oracle
Création et Gestion de Tables | SQL Oracle
 
SQL.pdf
SQL.pdfSQL.pdf
SQL.pdf
 
SQL partie III
SQL partie IIISQL partie III
SQL partie III
 
Tpdba1
Tpdba1Tpdba1
Tpdba1
 
GSI_Chap4-bts-requêtesSQL
GSI_Chap4-bts-requêtesSQLGSI_Chap4-bts-requêtesSQL
GSI_Chap4-bts-requêtesSQL
 
Les03.ppt
Les03.pptLes03.ppt
Les03.ppt
 
1-pl-sql 2021 2022.pdf
1-pl-sql 2021 2022.pdf1-pl-sql 2021 2022.pdf
1-pl-sql 2021 2022.pdf
 
QuelquesCommandesMySQL.pdf
QuelquesCommandesMySQL.pdfQuelquesCommandesMySQL.pdf
QuelquesCommandesMySQL.pdf
 
Support formation vidéo : SQL pour les (grands) débutants
Support formation vidéo : SQL pour les (grands) débutants Support formation vidéo : SQL pour les (grands) débutants
Support formation vidéo : SQL pour les (grands) débutants
 
SQL-Select.pdf
SQL-Select.pdfSQL-Select.pdf
SQL-Select.pdf
 
Les05.ppt
Les05.pptLes05.ppt
Les05.ppt
 
PL LSQL.pptx
PL LSQL.pptxPL LSQL.pptx
PL LSQL.pptx
 
chapitre 5_db_20_21.pdf.pptx
chapitre 5_db_20_21.pdf.pptxchapitre 5_db_20_21.pdf.pptx
chapitre 5_db_20_21.pdf.pptx
 
Plsql triggers
Plsql triggersPlsql triggers
Plsql triggers
 

Plus de Moez Moezm

Plus de Moez Moezm (20)

chapitre5-Classesabstraitesetinterfaces.pdf
chapitre5-Classesabstraitesetinterfaces.pdfchapitre5-Classesabstraitesetinterfaces.pdf
chapitre5-Classesabstraitesetinterfaces.pdf
 
chapitre4-HeritageetPolymorphisme.pdf
chapitre4-HeritageetPolymorphisme.pdfchapitre4-HeritageetPolymorphisme.pdf
chapitre4-HeritageetPolymorphisme.pdf
 
Chapitre2.pdf
Chapitre2.pdfChapitre2.pdf
Chapitre2.pdf
 
Chapitre1.pdf
Chapitre1.pdfChapitre1.pdf
Chapitre1.pdf
 
TD1.pdf
TD1.pdfTD1.pdf
TD1.pdf
 
Chapitre_Les fichiers_VF.pptx
Chapitre_Les fichiers_VF.pptxChapitre_Les fichiers_VF.pptx
Chapitre_Les fichiers_VF.pptx
 
TD3 collection.pdf
TD3 collection.pdfTD3 collection.pdf
TD3 collection.pdf
 
Mpdf 9
Mpdf 9Mpdf 9
Mpdf 9
 
Mpdf 8
Mpdf 8Mpdf 8
Mpdf 8
 
Mpdf 7
Mpdf 7Mpdf 7
Mpdf 7
 
Mpdf 6
Mpdf 6Mpdf 6
Mpdf 6
 
Mpdf 10
Mpdf 10Mpdf 10
Mpdf 10
 
Mpdf 11
Mpdf 11Mpdf 11
Mpdf 11
 
Mpdf 12
Mpdf 12Mpdf 12
Mpdf 12
 
Mpdf 13
Mpdf 13Mpdf 13
Mpdf 13
 
Mpdf 5
Mpdf 5Mpdf 5
Mpdf 5
 
Mpdf 4
Mpdf 4Mpdf 4
Mpdf 4
 
Mpdf 3
Mpdf 3Mpdf 3
Mpdf 3
 
Mpdf 2
Mpdf 2Mpdf 2
Mpdf 2
 
php
phpphp
php
 

Chapitre5.pdf

  • 1. Chapitre 5 : Langage SQL 2 BC A.U: 2020/2021
  • 2. Plan 2 1. Introduction 2. Les tables 3. Les types de données 4. Langage LDD 5. Langage LMD
  • 3. 5.1 Introduction 3  Le langage SQL (Structered Query Language) est le langage standard de gestion des bases de données relationnelles. Il permet de définir, manipuler et contrôler les données.  SQL est constitué de trois sous langages : 1. LDD (Langage de Définition de Données) : incluant les requêtes CREATE,ALTER, DROP, RENAME,TRUNCATE. Le LDD permet de créer, de changer et d'éliminer une structure de données Oracle. 2. LMD (langage de manipulation de données): incluant les requêtes SELECT, INSERT, UPDATE, DELETE, MERGE. Le LMD permet de sélectionner, d'insérer, de modifier et de supprimer des lignes à partir d'une table. 3. LCD (langage de contrôle de données): incluant les requêtes GRANT, REVOKE. Le LCD permet de donner ou de priver les droits d'accès à une base de données Oracle ou à ces structures.
  • 4. 5.1 Introduction 4  SQL a été implémenté par IBM dans les années 70, et se base sur l'algèbre relationnelle de Codd. Chaque SGBDR (DB2, Informix, Ingres, SQL SERVER...) présente sa propre version de SQL.  ORACLE fournit un éditeur de requêtes SQL, il s'agit de SQL*PLUS. Pour accéder à cet éditeur, il faut être un utilisateur (avoir un login et un mot de passe). Une fois l'éditeur affiché, on peut saisir les requêtes et voir les résultats retournés.
  • 5. 5.2 Les tables 5  La table est l'objet principal d'une base de données car c'est là ou on stocke les données. Oracle identifie une table par son nom.  Elle peut avoir une ou plusieurs colonnes (champ, attribut, mesure etc.). Une colonne est caractérisée par son nom et son type de données.  La table peut avoir zéro ou plusieurs lignes (enregistrements, objets, tuples etc.). Table Personne CIN Nom Age 07188742 Mohamed 33 07124884 Ali 25
  • 6. 5.3 Les types de données 6  Oracle offre les types de données suivants :  CHAR(n) : Chaîne de caractère fixe de longueur maximale n.  VARCHAR2(n) : Chaîne de caractère variable de longueur maximale n.  NUMBER(n,d) : Réel avec n le nombre de chiffres du réel, d le nombre de décimaux. Exemple : NUMBER(5,2) inclut tous les nombres de -999.99 → 999.99  DATE : Le type de données incluant la date et l'heure. Le format par défaut est le suivant : DD-MON-YY, par exemple : `04-0CT-04‘.  LONG : Chaîne de caractère variable de taille maximale 2 Go.
  • 7. 5.3 Les types de données 7  Remarques :  Une table ne peut contenir qu'une seule colonne de type LONG.  Il n'y a pas de type de données booléen, ce dernier peut être simulé par NUMBER(1) ou CHAR(1).  Une colonne non renseignée porte la valeur NULL qui est différente de 0 pour les nombres et de la chaîne vide pour les chaînes de caractères.
  • 8. 5.4 Langage LDD 8  Requête CREATE:  L ’ordre CREATETABLE permet de créer une table en définissant le nom, le type de chacune des colonnes de la table.  table est le nom que l’on donne à la table. Colonnei est le nom d ’une colonne.Typei est le type des données contenues dans Colonnei .  Exemple
  • 9. 5.4 Langage LDD 9  Requête CREATE:  Sous Oracle, un nom doit commencer par une lettre, comporter moins de 30 caractères (lettres, chiffres, _), être différent d’un autre nom de table ou de vue, être différent d’un mot réservé SQL. Les lettres minuscules et majuscules sont équivalentes.
  • 10. 5.4 Langage LDD 10  Requête CREATE:  Les contraintes: Une contrainte concerne une colonne de la table et peut être aperçue comme étant une condition que doivent respecter les valeurs de cette colonne. Elle est spécifiée lors de la création de la table et vient après le type de données de la colonne dans la requête :  [CONSTRAINT nom_contrainte] contrainte  Toute contrainte est définie par une table, une colonne, un type et un nom.  L’utilisateur peut affecter un nom à une contrainte, sinon Oracle lui affectera un nom par défaut. Les types de contraintes sont les suivants :
  • 11. 5.4 Langage LDD 11  Requête CREATE:  Les contraintes:  Clé primaire
  • 12. 5.4 Langage LDD 12  Requête CREATE:  Les contraintes:  Clé étrangère
  • 13. 5.4 Langage LDD 13  Requête CREATE:  Les contraintes:  Unicité
  • 14. 5.4 Langage LDD 14  Requête CREATE:  Les contraintes:  Non nullité: L’attribut ne peut pas prendre de valeur nulle, il doit être toujours renseigné.
  • 15. 5.4 Langage LDD 15  Requête CREATE:  Les contraintes:  Check: parfois la colonne d’une table doit satisfaire certaines conditions posées par l’utilisateur. Les contraintes de vérification permettent généralement de restreindre le domaine d’une colonne.
  • 16. 5.4 Langage LDD 16  Requête CREATE:  Exemple: Créez la table EMP sachant que la table DEPT l’est déjà. Cette table contient une clé primaire EMPNO, un nom qui doit être unique ENAME, un poste JOB, un salaire SAL qui doit dépasser un salaire minimum conventionnel (SMIG) de 600, une date d’embauche HIREDATE qui ne peut pas être NULL, un code d’employeur MGR qui réfère la colonne EMPNO et finalement un numéro de département DEPTNO qui réfère la colonne DEPTNO de la table DEPT ?  REQ 42: CREATETABLE EMP(EMPNO NUMBER CONSTRAINT PK1 PRIMARY KEY, ENAMEVARCHAR2(20) CONSTRAINT UN1 UNIQUE, JOBVARCHAR2(15), SAL NUMBER CONSTRAINT CH1 CHECK(SAL>600), HIREDATE DATE DEFAULT ’01-JAN-80’ NOT NULL, MGR NUMBER CONSTRAINT FK_EMP_EMP REFERENCES EMP(EMPNO), DEPTNO NUMBER REFERENCES DEPT(DEPTNO)) ;
  • 17. 5.4 Langage LDD 17  Requête ALTER:  La modification d’une table consiste à ajouter, renommer, modifier ou supprimer une colonne, ou à ajouter, modifier ou supprimer une contrainte. La requête de modification d’une table est ALTERTABLE.  Il est possible de renommer une table de deux manières, via la requête RENAME ou encore la clause RENAME dans la requête ALTERTABLE.  Renommer de deux manières la table EMP pour EMPLOYE ?  REQ 1 : RENAME EMP TO EMPLOYE;  REQ 2 :ALTERTABLE EMP RENAMETO EMPLOYE;
  • 18. 5.4 Langage LDD 18  Requête ALTER: Ajouter/renommer une colonne  L’ajout de colonne se fait via la clause ADD. Une colonne ajoutée est mise à NULL pour toutes les lignes. Il en découle qu’on ne peut pas appliquer une contrainte sur cette colonne lui interdisant d’avoir une valeur NULL à moins qu’elle soit affectée à une valeur par défaut ou que la table soit vide.  Ajouter les colonnes téléphoneTEL et Adresse ADR. La colonneTEL ne doit pas avoir la valeur NULL ?  REQ 3: ALTER TABLE EMP ADD job VARCHAR2(30) ;  REQ 4: ALTER TABLE EMP ADD (TEL NUMBER(8) DEFAULT ‘00000000’ NOT NULL,ADR VARCHAR2(30)) ;  Il est possible de renommer une colonne via la clause RENAME COLUMN.  Renommer la colonne SAL pour SALARY dans la table EMP ?  REQ 5 : ALTER TABLE EMP RENAME COLUMN SAL TO SALARY;
  • 19. 5.4 Langage LDD 19  Requête ALTER: Modifier une colonne  Ça revient à modifier son type de données via la clause MODIFY COLUMN.  Il est possible d’augmenter la taille d’une colonne de type numérique ou chaîne de caractères et de la diminuer si toutes les valeurs de la colonne le permettent. Il est aussi possible de changer le type de données si la colonne en question ne contient que des valeurs NULL.  On peut aussi changer du type CHAR au typeVARCHAR2 (et vice versa) si les champs sont NULL ou si on ne change pas la taille. Finalement un changement de la valeur par défaut n’affecte que les insertions futures.  Modifier la taille de la colonne JOB à 30 caractères variables ?  REQ 6: ALTERTABLE EMP MODIFY (JOBVARCHAR2(30));
  • 20. 5.4 Langage LDD 20  Requête ALTER: Supprimer une colonne  La clause DROP COLUMN dans la requête ALTER TABLE permet de supprimer une colonne d’une table.  Il est possible de supprimer des colonnes contenant des données à condition qu’elle ne soit pas l’unique colonne de la table ou référencée dans une autre table.  Si la colonne est référencée par une colonne d’une autre table (fille), alors il faut ajouter l’option CASCADE CONSTRAINTS pour éliminer aussi la contrainte FOREIGN KEY de la colonne étrangère.  Supprimer la colonne HIREDATE de la table EMP ?  REQ 7: ALTERTABLE EMP DROP COLUMN HIREDATE;
  • 21. 5.4 Langage LDD 21  Requête ALTER: Ajouter une contrainte  On peut ajouter une contrainte à une table existante en utilisant la requête ALTERTABLE et la clause ADD CONSTRAINT.  Cette opération ne réussit que si les données qui existent déjà dans la table respectent la contrainte qu’on veut ajouter.  Supposons que la table EMP n’est soumise à aucune contrainte.Ajoutez les contraintes nécessaires ?  REQ 8: ALTERTABLE EMP ADD (CONSTRAINT PK1 PRIMARY KEY (EMPNO), CONSTRAINT FK_EMP_DEPT FOREIGN KEY(DEPTNO) REFERENCES DEPT(DEPTNO)) ;  REQ 9: ALTER TABLE EMP modify ADR NOT NULL;  L’ajout d’une contrainte n’est possible que si les données qu’elle concerne, la respectent déjà.
  • 22. 5.4 Langage LDD 22  Requête ALTER: Supprimer une contrainte  La clause DROP CONSTRAINT permet de supprimer une contrainte d’une table.  Elle est donc suivie par le nom de la contrainte (notons encore une fois l’importance du nom d’une contrainte) et optionnellement par le mot clé CASCADE.  Si ce mot clé est précisé, alors la suppression d’une clé primaire d’une table mère, la suppression de la clé étrangère correspondante dans la table fille est effectuée automatiquement.
  • 23. 5.4 Langage LDD 23  Requête DROP:  Cette commande permet de supprimer une table de la base de données. Les lignes de la table et la définition elle-même sont détruites. L’espace occupé par la table est libéré.  Exemple DROP TABLE STAGE;  Si votre table est une table mère, c-à-d que sa clé primaire est référée par d’autres colonnes FOREIGN KEY qui sont dans une ou plusieurs tables filles, alors la suppression est impossible.  La solution est d’utiliser l’option CASCADE CONSTRAINTS ; dans ce cas là, les contraintes FOREIGN KEY posées sur les colonnes des tables filles- seront à leurs tours supprimés.  Supprimer totalement la table DEPT ?  REQ 10: DROP TABLE DEPT CASCADE CONSTRAINTS;
  • 24. 5.5 Langage LMD 24  La requête SELECT nous permet d'extraire des données à partir d'une base de données. La clause SELECT est suivie d'une ou de plusieurs colonnes, ce sont les colonnes qu'on veut extraire. La clause FROM est suivie par le nom de la table à partir de laquelle on veut afficher les données.  Tous les exemples qui suivent se basent sur les tables EMP, DEPT et SALGRADE créées par défaut lors de l'installation d'Oracle pour l'utilisateur scott/tiger.  La requête R1 affiche toutes les colonnes de la table EMP :  REQ1 : SELECT * FROM EMP ;  Le symbole ‘*’ remplace toutes les colonnes de la table EMP.
  • 25. 5.5 Langage LMD 25  REQ2 : SELECT EMPNO, ENAME, SAL FROM EMP ;  Cette opération retourne les colonnes EMPNO, ENAME et SAL.
  • 26. 5.5 Langage LMD 26  En réalité la clause SELECT peut inclure des expressions autres que les colonnes. Elle peut être suivie par :  Des expressions arithmétiques.  Des alias de colonnes.  Des colonnes concaténées.  Des littéraux (constantes).  Donner les noms et les salaires annuels de tous les employés ?  REQ3 : SELECT ENAME, SAL*12 FROM EMP ;  Voici ce que nous affiche cette requête :
  • 27. 5.5 Langage LMD 27  L’entête de la 2ème colonne est sal*12, on peut modifier l’entête en lui affectant un alias :  REQ4 : SELECT ENAME, SAL*12 ANNSAL FROM EMP ;  L’alias et la colonne (ou l’expression) sont séparés d’un espace.  Afficher les codes et les noms concaténés de tous employés ?  REQ5 : SELECT EMPNO||ENAME EMPLOYEE FROM EMP ;  REQ6 : SELECT EMPNO||‘ ‘||ENAME EMPLOYEE,‘works in’, DEPTNO FROM EMP ;
  • 28. 5.5 Langage LMD 28  Le traitement des valeurs NULL : Si une ligne donnée n’a pas de valeur pour une colonne donnée, alors cette case porte la valeur NULL.Toute colonne, quelque soit son type de données, peut avoir la valeur NULL.  Certaines contraintes appliquées sur une colonne (PRIMARY KEY, NOT NULL...) l’empêchent d’avoir la valeur NULL.  Cette valeur est traitée différemment des autres valeurs. En effet si NULL est impliquée dans :  Une expression arithmétique, alors le résultat de toute l’expression est NULL.  Une expression logique, alors le résultat de tout l’expression est FAUX.
  • 29. 5.5 Langage LMD 29  Le revenu annuel d’un employé est SAL*12 auquel on ajoute la commission COMM.Afficher les salaires annuels de tous les employés ?  REQ7 : SELECT ENAME, SAL*12 + COMM ANNSAL FROM EMP ;  Quoique le salaire de SMITH est de 9600, le résultat affiché est NULL.  La fonction NVL(col,val) nous sera très utile dans ce cas, car cette fonction retourne val si la colonne porte la valeur NULL.  La requête correcte est :  REQ8 : SELECT ENAME, SAL*12+NVL(COMM,0) ANNSAL FROM EMP ;
  • 30. 5.5 Langage LMD 30  Le mot clé DISTINCT : Ce mot clé est introduit après SELECT, il sert à éliminer les occurrences, ainsi pour afficher les codes de départements (chacun une seule fois) :  REQ9 : SELECT DISTINCT DEPTNO FROM EMP ;  DISTINCT ne peut être introduite qu’une seule fois, juste après le SELECT, et concerne toutes les colonnes qui la suivent. Le résultat est toute combinaison distincte de ces colonnes.  Afficher les jobs dans chaque département de manière distincte.  REQ10 : SELECT DISTINCT JOB, DEPTNO FROM EMP ;
  • 31. 5.5 Langage LMD 31  La clause ORDER BY: Le résultat retourné d’une requête n’a pas d’ordre défini. La clause ORDER BY permet de trier le résultat selon une ou plusieurs colonnes dans un ordre croissant ou décroissant.  Cette clause doit être la dernière dans la requête et peut être suivie d’une colonne, d’une expression ou même d’un alias.  Afficher les employés triés par leurs DEPTNO dans l’ordre décroissant et par leurs JOB dans l’ordre croissant.  REQ11 : SELECT * FROM EMP ORDER BY DEPTNO DESC, JOB ASC ;  Chaque groupe de lignes ayant le même DEPTNO est lui-même trié selon le JOB dans l’ordre.
  • 32. 5.5 Langage LMD 32  La restriction de lignes : Supposons que nous voulons afficher les employés du département 20. La requête que nous devons formuler doit retourner chaque ligne de la table EMP dont la colonne DEPTNO a pour valeur 20. Cette opération relationnelle est dite opération de restriction (ou sélection), et se base sur la clause WHERE.  La clause WHERE est suivie d’une condition simple ou composée (combinaison de plusieurs conditions). Chaque ligne satisfaisant cette condition est retournée.
  • 33. 5.5 Langage LMD 33  Afficher les employés du département 20.  REQ12 : SELECT * FROM EMPWHERE DEPTNO=20 ;  Afficher les employés dont la commission est inférieure au salaire.  REQ 13 : SELECT * FROM EMP WHERE NVL(COMM,0)<SAL ;
  • 34. 5.5 Langage LMD 34  Les opérateurs de comparaison : ils sont utilisables pour comparer deux valeurs de même type (<, <=, >, >=, <>, !=, =). Cependant Oracle offre quatre opérateurs de comparaison qui lui sont spéciaux :  BETWEEN v1 AND v2 → col≥v1 AND col≤v2.  IN (v1,v2,v3,...,vn) → col= v1 OR col=v2 OR...OR col=vn.  LIKE pattern (les symboles % et _ sont utilisés pour spécifier un pattern, le % remplace une sous chaîne y compris la chaîne vide, le _ remplace un seul caractère).  IS NULL (l’opérateur = ne peut pas être utilisée pour comparer une colonne à NULL, on utilise cet opérateur).  L’opérateur logique NOT peut être utilisé avec ces opérateurs NOT BETWEEN...., NOT IN....., NOT LIKE...., IS NOT NULL.
  • 35. 5.5 Langage LMD 35  Donner les noms et les salaires des employés dont le salaire est entre 1000 et 2000 ?  REQ 14 : SELECT ENAME, SAL FROM EMPWHERE SAL BETWEEN 1000 AND 2000 ;  Donner les employés dont le manager est 7902, 7566 ou 7788 ?  REQ15 : SELECT * FROM EMPWHERE MGR IN (7902, 7566, 7788) ;  Afficher les employés dont le nom commence par ‘S’ ?  REQ 16 : SELECT * FROM EMPWHERE ENAME LIKE ‘S%’ ;  Afficher les employés dont le nom est composé de 4 caractères ?  REQ 17 : SELECT * FROM EMPWHERE ENAME LIKE ‘_ _ _ _’ ;  Afficher les employés qui n’ont pas de manager ?  REQ 18 : SELECT * FROM EMPWHERE MGR IS NULL ;
  • 36. 5.5 Langage LMD 36  Les opérateurs logiques : ils sont les trois suivants AND, OR et NOT. Il est inutile de vous rappeler que AND est prioritaire au OR, tout comme les opérateurs * et / qui sont prioritaires au + et au -.  Afficher tous les clerks dont le salaire est entre 1000 et 2000 ?  REQ 19 : SELECT * FROM EMPWHERE SAL BETWEEN 1000 AND 2000 AND JOB=’CLERK’;  Afficher tous les managers dont le salaire est supérieur à 1500 et tous les salesman ?  REQ 20 : SELECT * FROM EMPWHERE SAL>1500 AND JOB=’MANAGER’ OR JOB=’SALESMAN’;  Afficher tous les salesman et tous les managers dont le salaire est supérieur à 1500 ?  REQ21 : SELECT * FROM EMPWHERE SAL>1500 AND (JOB=’MANAGER’ OR JOB=’SALESMAN’);
  • 37. 5.5 Langage LMD 37  Il existe plusieurs fonctions qui peuvent être utilisées pour manipuler plusieurs enregistrements, il s’agit des fonctions d’agrégations statistiques, les principales sont les suivantes:  AVG() pour calculer la moyenne d’un set de valeur. Permet de connaître le prix du panier moyen pour de chaque client.  COUNT() pour compter le nombre de lignes concernées. Permet de savoir combien d’achats a été effectué par chaque client.  MAX() pour récupérer la plus haute valeur. Pratique pour savoir l’achat le plus cher.  MIN() pour récupérer la plus petite valeur. Utile par exemple pour connaître la date du premier achat d’un client.  SUM() pour calculer la somme de plusieurs lignes. Permet par exemple de connaître le total de tous les achats d’un client.  Ces petites fonctions se révèlent rapidement indispensable pour travailler sur des données.
  • 38. 5.5 Langage LMD 38  Requête SELECT ….GROUP BY:  La commande GROUP BY est utilisée en SQL pour grouper plusieurs résultats et utiliser une fonction de totaux sur un groupe de résultat.  Sur une table qui contient toutes les ventes d’un magasin, il est par exemple possible de regrouper les ventes par clients identiques et d’obtenir le coût total des achats pour chaque client.  A noter: cette commande doit toujours s’utiliser après la commande WHERE et avant la commande HAVING.
  • 39. 5.5 Langage LMD 39  Requête SELECT …. GROUP BY:  Pour obtenir le coût total de chaque client en regroupant les commandes des mêmes clients, il faut utiliser la requête suivante:  La fonction SUM() permet d’additionner la valeur de chaque tarif pour un même client. Le résultat sera donc le suivant:
  • 40. 5.5 Langage LMD 40  Requête SELECT ….HAVING:  La condition HAVING en SQL est presque similaire à WHERE à la seule différence que HAVING permet de filtrer en utilisant des fonctions telles que SUM(), COUNT(), AVG(), MIN() ou MAX().  Cela permet donc de SÉLECTIONNER les colonnes DE la table « nom_table » en GROUPANT les lignes qui ont des valeurs identiques sur la colonne « colonne1 » et que la condition de HAVING soit respectée.  Important: HAVING est très souvent utilisé en même temps que GROUP BY bien que ce ne soit pas obligatoire.
  • 41. 5.5 Langage LMD 41  Requête SELECT ….HAVING:  Exemple: Pour utiliser un exemple concret, imaginons une table « achat » qui contient les achats de différents clients avec le coût du panier pour chaque achat.  Si dans cette table on souhaite récupérer la liste des clients qui ont commandé plus de 40€, toute commandes confondu alors il est possible d’utiliser la requête suivante:
  • 42. 5.5 Langage LMD 42  Requête SELECT ….HAVING:  Exemple:
  • 43. 5.5 Langage LMD 43  Requête SELECT…. JOIN:  Les jointures en SQL permettent d’associer plusieurs tables dans une même requête. Cela permet d’exploiter la puissance des bases de données relationnelles pour obtenir des résultats qui combinent les données de plusieurs tables de manière efficace.  Règles de jointure : Pour joindre trois tables, il est nécessaire d’établir un minimum de deux conditions de jointure, pour joindre quatre tables, on doit établir un minimum de trois conditions de jointure etc.  Une règle simple est la suivante : Le nombre minimum de conditions de jointure = nombre de tables -1.
  • 44. 5.5 Langage LMD 44  Requête SELECT…. INNER JOIN:  Dans le langage SQL la commande INNER JOIN, aussi appelée EQUIJOIN, est un type de jointures très communes pour lier plusieurs tables entre-elles.  Cette commande retourne les enregistrements lorsqu’il y a au moins une ligne dans chaque colonne qui correspond à la condition.  La syntaxe ci-dessus stipule qu’il faut sélectionner les enregistrements des tables table1 et table2 lorsque les données de la colonne « id » de table1 est égal aux données de la colonne fk_id de table2.
  • 45. 5.5 Langage LMD 45  Requête SELECT…. INNER JOIN:  Exemple:
  • 46. 5.5 Langage LMD 46  Requête SELECT…. INNER JOIN:  Exemple:
  • 47. 5.5 Langage LMD 47  Requête SELECT…. LEFT JOIN:  Dans le langage SQL, la commande LEFT JOIN (aussi appelée LEFT OUTER JOIN) est un type de jointure entre 2 tables. Cela permet de lister tous les résultats de la table de gauche (left = gauche) même s’il n’y a pas de correspondance dans la deuxième tables.
  • 48. 5.5 Langage LMD 48  Requête SELECT…. LEFT JOIN:  Exemple: Imaginons une application contenant des utilisateurs et des commandes pour chacun de ces utilisateurs. La base de données de cette application contient une table pour les utilisateurs et sauvegarde leurs achats dans une seconde table. Les 2 tables sont reliées grâce à la colonne utilisateur_id de la table des commandes. Cela permet d’associer une commande à un utilisateur.
  • 49. 5.5 Langage LMD 49  Requête SELECT…. LEFT JOIN:  Exemple:
  • 50. 5.5 Langage LMD 50  Requête SELECT…. LEFT JOIN:  Exemple: Pour lister tous les utilisateurs avec leurs commandes et afficher également les utilisateurs qui n’ont pas effectuées d’achats, il est possible d’utiliser la requête suivante:
  • 51. 5.5 Langage LMD 51  Requête SELECT…. LEFT JOIN:  Exemple: Les dernières lignes montrent des utilisateurs qui n’ont effectuée aucune commande. La ligne retourne la valeur NULL pour les colonnes concernant les achats qu’ils n’ont pas effectués.
  • 52. 5.5 Langage LMD 52  Requête SELECT…. RIGHT JOIN:  En SQL, la commande RIGHT JOIN (ou RIGHT OUTER JOIN) est un type de jointure entre 2 tables qui permet de retourner tous les enregistrements de la table de droite (right = droite) même s’il n’y a pas de correspondance avec la table de gauche.  S’il y a un enregistrement de la table de droite qui ne trouve pas de correspondance dans la table de gauche, alors les colonnes de la table de gauche auront NULL pour valeur.
  • 53. 5.5 Langage LMD 53  Requête SELECT…. RIGHT JOIN:  Exemple:
  • 54. 5.5 Langage LMD 54  Requête SELECT…. RIGHT JOIN:  Exemple: Pour afficher toutes les commandes avec le nom de l’utilisateur correspondant il est normalement d’habitude d’utiliser INNER JOIN en SQL. Malheureusement, si l’utilisateur a été supprimé de la table, alors ça ne retourne pas l’achat. L’utilisation de RIGHT JOIN permet de retourner tous les achats et d’afficher le nom de l’utilisateur s’il existe. Pour cela il convient d’utiliser cette requête:
  • 55. 5.5 Langage LMD 55  Requête SELECT…. RIGHT JOIN:  Ce résultat montre que la facture A00107 est liée à l’utilisateur numéro 5. Or, cet utilisateur n’existe pas ou n’existe plus. Grâce à RIGHT JOIN, l’achat est tout de même affiché mais les informations liées à l’utilisateur sont remplacé par NULL.