0% ont trouvé ce document utile (0 vote)
85 vues28 pages

Cours SQL ENSAM 2016

cours sql

Transféré par

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

Cours SQL ENSAM 2016

cours sql

Transféré par

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

Langage SQL

ENSAM -Meknès

A.AHMADI

2016/2017
Chap. 1 Langage de définition de données
I- Création d’une base de données
2
DROP table Detail;
DROP table Facture;
DROP table Produit;
DROP table Client;

CREATE TABLE Client (cocli CHAR(4) CONSTRAINT pk_Client Primary Key,


Nomcli VARCHAR(30) CONSTRAINT ck_Client_nomcli CHECK (nomcli=UPPER(nomcli)),
Ville VARCHAR(15) CONSTRAINT nn_ville NOT NULL
);

CREATE TABLE Produit (copro CHAR(3) CONSTRAINT pk_produit PRIMARY KEY,


libelle VARCHAR(15),
PU NUMBER(5,2)
);

CREATE TABLE Facture (nufact NUMBER(5) CONSTRAINT pk_facture PRIMARY KEY,


Datefact DATE default sysdate,
cocli CHAR(4) CONSTRAINT fk_facture_client REFERENCES Client(cocli) ON DELETE CASCADE,
Montant NUMBER(8,2) CONSTRAINT ck_montant CHECK (montant>0)
);
A. AHMADI Langage SQL
Chap. 1 Langage de définition de données
I- Création d’une base de données
3
CREATE TABLE Detail (nufact NUMBER(5),
Copro CHAR(3),
Qte NUMBER,
CONSTRAINT fk_detail_produit FOREIGN KEY (copro) REFERENCES Produit(copro),
CONSTRAINT fk_detail_fact FOREIGN KEY (nufact) REFERENCES Facture(nufact),
CONSTRAINT pk_detail PRIMARY KEY (nufact,copro)
);

A. AHMADI Langage SQL


Chap. 1 Langage de définition de données
II- Contraintes d’intégrité
4

1- Ajout d’une contrainte


Exple1 :
ALTER TABLE Client
ADD CONSTRAINT un_client_NomCli UNIQUE (NomCli) ;

Exple2 :
ALTER TABLE Client
ADD CONSTRAINT ck_client_Ville CHECK (Ville IN('Rabat','Casa')) ;

2- Suppression d’une contrainte


Exple1 :
ALTER TABLE Client
DROP CONSTRAINT un_client_NomCli ;

Exple2 :
ALTER TABLE Produit
DROP CONSTRAINT PRIMARY KEY CASCADE ;

L’option CASCADE permet de supprimer les dépendances associées.

A. AHMADI Langage SQL


Chap. 1 Langage de définition de données
II- Contraintes d’intégrité
5

3- Inhibition d’une contrainte


Exple1 :
ALTER TABLE Client
DISABLE CONSTRAINT ck_Ville ;

Exple2 :
ALTER TABLE Produit
DISABLE PRIMARY KEY [CASCADE] ;

4- Activation d’une contrainte


Exple1 :
ALTER TABLE Client
ENABLE CONSTRAINT ck_Ville ;

Exple2 :
ALTER TABLE Produit
ENABLE PRIMARY KEY ;

A. AHMADI Langage SQL


Chap. 1 Langage de définition de données
II- Contraintes d’intégrité
6

4- Activation d’une contrainte


La contrainte ne sera pas effectuée si une des lignes transgresse la contrainte d’intégrité. La clause EXCEPTIONS
permet de récupérer les lignes qui la transgressent :

ALTER TABLE Client


ENABLE CONSTRAINT ck_Ville EXCEPTIONS INTO Rejets ;

En plus du contrôle, SQL insère dans une table de rejets les tuples qui transgressent la contrainte. La structure de
cette table est :

CREATE TABLE Rejets (row1 ROWID, owner VARCHAR2(30), table_name VARCHAR2(30),


constraint VARCHAR2(30));

Pour sélectionner les lignes ayant transgressé la contrainte, on exécute la requête suivante :
ROWID étant un pointeur sur
Select client.* from Client, Rejets
l’emplacement de chacune des
where Client.rowid=Rejets.row1 ;
lignes.

A. AHMADI Langage SQL


Chap. 1 Langage de définition de données
III- Modification et mise jour des données
7
1- Création et remplissage d’une table à partir d’une autre
Exemple : Créer une table contenant uniquement les factures du client ‘c001’ :

CREATE TABLE FactC001 AS


SELECT * from Facture WHERE cocli='c001';

2- Modification de la structure d’une table


Exemple1 : Ajouter une nouvelle colonne Nbfact à la table client :
ALTER TABLE client
ADD ( Nbfact NUMBER(4) NULL );

Exemple2 : Augmenter de 2 chiffres la longueur de la colonne Montant :

ALTER TABLE Facture


MODIFY ( Montant NUMBER(10,2) ) ;

Remarque : en cas de diminution de la taille, il faut que les valeurs des montants déjà saisis aient une
taille inférieure à la nouvelle taille, sinon la modification de la structure ne sera pas acceptée.

A. AHMADI Langage SQL


Chap. 1 Langage de définition de données
III- Modification et mise jour des données
8

3- Effacement d’une table


DROP TABLE <nom_table> ;
Exemple :
DROP TABLE Dept ;

4- Renommer une table


RENAME <ancien_nom> TO <nouveau_nom> ;
Exemple :
RENAME Client to Client_Bis ;

5- Suppression d’une colonne


Exemple : Enlever la colonne ville de la table client :
CREATE TABLE Temp AS SELECT Cocli,Nomcli FROM Client ;
DROP TABLE Client ;
RENAME Temp to Client ;
ou bien ALTER TABLE client DROP COLUMN ville ;

A. AHMADI Langage SQL


Chap. 1 Langage de définition de données
III- Modification et mise jour des données
9

6- Insertion de données
Syntaxe: INSERT INTO <nom_table>[(colonne1,…,ColonneN)] VALUES (Val1,…, ValN) ;
Exemple1 : INSERT INTO client VALUES ('c009', 'SAADI', 'Rabat') ;
Exemple2 : INSERT INTO client(cocli,ville) VALUES ('c011', 'Meknes') ;
Le champ Nomcli ne doit pas être obligatoire dans ce cas.
Exemple3 : INSERT INTO client VALUES ('c009', 'SAADI', '&vil') ;
Exemple4 : Ajouter dans Produit les produits de la table NouvProd valant plus de 100DH :
INSERT INTO Produit
SELECT * FROM NouvProd WHERE Npu >100 ;

7- Suppression de lignes
Exemple1 : Supprimer tous les produits dont le prix de vente est inférieur à 50 DH :
DELETE FROM Produit
WHERE Pu<50 ;
Exemple2: Supprimer toutes les factures antérieures au 01/01/95 :
DELETE FROM Facture WHERE Datefact<'01-01-95' ;

A. AHMADI Langage SQL


Chap. 1 Langage de définition de données
III- Modification et mise à jour des données
10

8- Modification de valeurs
Format1 : UPDATE <nom_table>
SET <col1>=<expression1> [, …, <colN>=<expressionN> ]
[WHERE <condition>] ;
Format2 : UPDATE <nom_table>
SET (<col1>, …, <colN>)=<sous-requête>
[WHERE <condition>] ;
Exemple1: Augmenter les prix de 10% :
UPDATE Produit SET Pu=Pu*1.1 ;
Exemple2 : Modifier le prix unitaire du produit ‘P03’ en 50 DH ;
UPDATE Produit SET Pu=50 WHERE copro='p03' ;
Exemple3 : Augmenter de 5 DH, tous les prix moins de 10 DH :
UPDATE Produit SET Pu=Pu+5 WHERE Pu<10 ;
Exemple4 : Mettre le produit 'P04' au même prix que le produit 'P01' :
UPDATE Produit
SET Pu= (SELECT Pu FROM Produit WHERE copro='p01')
WHERE copro='p04' ;

A. AHMADI Langage SQL


Chap. 2 Langage d’interrogation de données(LID)
1- Introduction
11
 LID Permet d’écrire des requêtes de consultation des données de la base ;
 Le résultat est fourni sous forme de tableau avec le nom des colonnes en en-tête ;
 Le LID utilise l’instruction SELECT dont la syntaxe (restreinte) est :

SELECT [DISTINCT/ALL] */colonne/<expression>


FROM <nom_table>
[WHERE <condition>]
[GROUP BY <expression>,…]
[HAVING <condition>]
[ORDER BY <colonne>/<expression> [ASC/DESC] …];

 DISTINCT/ALL: permet l’élimination ou la conservation des tuples (enregistrements) identiques dans le résultat ;
 <expression>: est une expression arithmétique, résultat de calcul ou de fonction ;
 WHERE <condition> : permet de sélectionner les tuples vérifiant la condition <condition> ;
 GROUP BY : Permet la constitution de groupes de tuples ayant des valeurs identiques dans un champ donné ;
 HAVING <condition>: Permet d’afficher uniquement les groupes de tuples vérifiant la condition <condition> ;
 ORDER BY : Permet de trier (par ordre croissant ou décroissant) les tuples selon un ou plusieurs champs ;

A. AHMADI Langage SQL


Chap. 2 Langage d’interrogation de données(LID)
2- Affichage
12
 On peut présenter le résultat en changeant les noms de colonnes et/ou des expression :
Exemple 1 : SELECT cocli Code_Client, Nomcli Nom_Client FROM Client :
Exemple 2 : SELECT Salaire+Comm Salaire_Global FROM emp;

3- Conditions
 Syntaxe des conditions : <Opérande> <Opérateur> <Opérande>
 Opérande :
- Un nom de colonne;
- Une valeur (numérique, alphanumérique ou date) ;
- Une expression : (arithmétique et/ou utilisant des fonctions) ;
- Une sous-requête (fournissant une valeur ou une liste de valeurs compatibles);
 Opérateur :
- Arithmétique : + - * /
- Concaténation de chaînes : ||
- Comparaison : = <> != < > <= >=

A. AHMADI Langage SQL


Chap. 2 Langage d’interrogation de données(LID)
3- Conditions
13
Exemples :
1- Afficher tous les attributs de tous les clients :
Select * from client;
2- le nom et la ville de tous les clients :
Select Nomcli, Ville from client;
3- Afficher tous les clients de la ville de Tanger :
Select * from client Where ville ='Tanger';
4- Afficher tous les produits dont le libellé commence par A :
Select * from Produit where libelle LIKE 'A%' ; (like 'A_I%)
5- Afficher tous les produits dont le prix unitaire est supérieur ou égal à 150 DH ;
Select * from Produit Where PU >= 150 ;
6- Afficher tous les produits dont le libellé commence par A et le prix est inférieur à 300 DH :
Select * from Produits where libelle LIKE 'A%' AND PU<300 ;
7- Afficher le code, le libelle et le prix unitaire de tous les produits en concaténant le code et le libellé :
Select Copro||' ' || libelle "Identifiant du produit" , PU From Produit;

A. AHMADI Langage SQL


Chap. 2 Langage d’interrogation de données(LID)
3- Conditions
14
- Opérateurs spécifiques :

 [NOT] IN : le 1er opérande doit ( ou ne doit pas) appartenir à la liste des valeurs mentionnées en 2ème
opérande.
Exemple : Select * from client where UPPER(Ville) IN ('RABAT' , 'MEKNES', 'TANGER') ;

 ANY, SOME : la condition doit être satisfaite pour au moins une des valeurs du 2ème opérande . En général, les
valeurs de ce dernier sont retournées par une sous-requête;
Exemple 1 : Select * from Produit where PU < ANY (100,335,123) ;
Exemple 2 : Select * from Produit where PU < ANY (Select PU from Produit where
LIBELLE LIKE 'A%');

 ALL : La condition est vraie si elle est vérifiée pour toutes les valeurs fournies par le 2ème opérande
Exemple : Select * from Produit where PU > ALL (Select PU from Produit where
LIBELLE LIKE 'c%');

A. AHMADI Langage SQL


Chap. 2 Langage d’interrogation de données(LID)
3- Conditions
15

 [NOT] BETWEEN … AND … : La condition est vraie si le 1er opérande est (n’est pas) compris entre les 2 valeurs
données (bornes comprises).
Exemple : SELECT * FROM facture where Datefact BETWEEN '01-03-14' AND '31-12-15' ;

 [NOT] EXISTS <sous-requêtes> : la condition est vraie si la sous-requête retourne (ou ne retourne pas) au
moins un tuple.

 [NOT] LIKE : La condition est vraie si le 1er opérande contient (ou ne contient pas) un ensemble de caractères
définis par les jokers _ et %. Le symbol "_" représente un caractère quelconque, et le symbol "%" représente
une chaîne de caractères quelconque.
Exemple : afficher les clients dont le nom contient la lettre "a" à la 3ème position
Select * from Client where NomCli LIKE '_ _a%' ;
 IS [NOT] NULL : la condition est vraie si la valeur du 1er opérande est (n’est pas) NULL (non renseignée).
Exemple : Select * from produit where LIBELLE IS NULL ;

A. AHMADI Langage SQL


Chap. 2 Langage d’interrogation de données(LID)
3- Conditions
16

- Opérateurs ensemblistes : UNION, INTERSECT, MINUS

 Afficher les codes des produits n'ayant jamais été commandés :


(select copro from Produit) MINUS (select copro from Detail) ;

 Afficher les codes et les noms des clients habitant Rabat ou Meknès :
(select cocli,nomcli from Client Where UPPER(ville)='RABAT')
UNION (select cocli,nomcli from Client Where UPPER(ville)='MEKNES') ;
Cette requête est équivalente à :
select cocli,nomcli from Client Where UPPER(ville) IN ('RABAT','MEKNES');

Remarque : pour utiliser convenablement les opérateurs ensemblistes, il faut que les 2 requêtes retournent le même
nombre de colonnes, avec les mêmes types et dans le même ordre.

A. AHMADI Langage SQL


Chap. 2 Langage d’interrogation de données(LID)
4- Fonctions SQL
17
Fonctions numériques :
ABS(n) Valeur absolue : ABS(-32.5)=32.5

CEIL(n) Plus petit entier relatif supérieur ou égal : CEIL(31.5)=32 CEIL(-31.5)=-31

FLOOR(n) Plus grand entier relatif inférieur ou égal : FLOOR(31.5)=31 FLOOR(-31.5)=-32


MOD(m,n) Reste de la division de m par n : MOD(35,4)=3

POWER(m,n) m puissance n : POWER(4,3)=84

SIGN(n) Indique le signe de n : SIGN(0)=0 SIGN(-5)=-1 SIGN(5)=1

SQRT(n) Racine carrée de n : SQRT(9)=3 SQRT(-9)=NULL

ROUND(n) Arrondi de n à 100 (Partie entière) : ROUND(15.3)=15 ROUND(15.5)=16

ROUND(n,m) Arrondi de n à 10-m : ROUND(1500,-3)=20 ROUND(1499,-3)=1000


ROUND(1.55,1)=1.6 ROUND(1.551,2)=1.55
TRUNC(n) n tronqué à 100 (Partie entière) : TRUNC(15.3)=15

TRUNC(n,m) n tronqué à 10-m :


TRUNC(1500,-3)=1000 TRUNC(1499,-3)=1000
TRUNC(1.55,1)=1.5 TRUNC(1.551,2)=1.5

A. AHMADI Langage SQL


Chap. 2 Langage d’interrogation de données(LID)
4- Fonctions SQL
18
Fonctions de groupe:

AVG(expr) Moyenne de toutes les valeurs de expr

COUNT(*) Nombre d'enregistrements retournés par la sélection.

Nombre d'enregistrements retournés par la sélection, pour


COUNT(expr)
lesquels expr n'a pas une valeur NULL.

MAX(expr) Valeur maximale de toutes les valeurs de expr

MIN(expr) Valeur minimale de toutes les valeurs de expr

STDDEV(expr) Ecart type de toutes les valeurs de expr

SUM(expr) Somme de toutes les valeurs de expr

VARIANCE(expr) Variance de toutes les valeurs de expr

A. AHMADI Langage SQL


Chap. 2 Langage d’interrogation de données(LID)
4- Fonctions SQL
19
Fonctions chaîne de caractères:

ASCII(char) Donne la valeur ASCII ou EBCDIC du premier caractère de la chaîne de caractères char.
ASCII('(parenthèses)')=40 ASCII(' ')=32
INSTR(char, char1[,n[,m]]) Recherche dans la chaîne de caractères char la position de la chaîne de caractères char1. Si n
est précisé, la recherche se fait à partir du rang n. Si m est précisé, la recherche donne la
position de la m-ième occurence de char2 dans char1. Si m est précisé, il est obligatoire de
préciser n. INSTR('Contentement','t',1,5)=0
INSTR('Détermination','i',8)=11
LENGTH(char) Donne la longueur de la chaîne de caractères char.
LENGTH('Intégrité')=9

CHR(n) Caractère ayant la valeur ASCII ou EBCDIC de n


CHR(65) = 'A' CHR(97)='a' CHR(40)='(
INITCAP(char) La première lettre de chaque mot de la chaîne de caractères est mise en majuscule, toutes les
autres lettre sont mises en minuscules. INITCAP('mAdamE de sTaEl')='Madame De Stael'

LOWER(char) Toutes les lettres sont mises en minuscules LOWER('ConFiAnce')='confiance'


UPPER(char) Toutes les lettres sont mises en majuscules UPPER('ConFiAnce')='CONFIANCE'
LPAD(char1,n,[char2]) Fait précéder la chaîne de caractères char1 de la chaîne de caractères char2 (espace si char2
non spécifié) jusqu'à la longueur n. Si n est inférieur à la longueur de char1, tronque char1 à la
longueur n.
LPAD('Juin', 9,'=')= '=====Juin' LPAD('Juin',2,'=')='Ju'

A. AHMADI Langage SQL


Chap. 2 Langage d’interrogation de données(LID)
4- Fonctions SQL
20
Fonctions chaîne de caractères:

Fait suivre la chaîne de caractères char1 du caractère char2 (espace si char2 non spécifié) jusqu'à
RPAD(char1,n,[char2]) la longueur n. Si n est inférieur à la longueur de char1, tronque char à la longueur n.
RPAD('Juin', 9,'=')= 'Juin=====' RPAD('Juin',2,'=')='Ju'

Supprime du début de la chaîne de caractères char1 les caractères présents dans la chaîne de
caractère char2 jusqu'à ce que plus aucun caractère de char2 ne débute char1.
LTRIM(char1[,char2])
LTRIM('=======Juin','=')= 'Juin' TRIM('Juin','Ju')='in'
LTRIM('JJuuJuJin','Ju')='ain'

Supprime de la fin de la chaîne de caractères char1 les caractères présents dans la chaîne de
RTRIM(char1[,char2]) caractère char2 jusqu'à ce que plus aucun caractère de char2 ne termine char1.
RTRIM('Juin=======','=')= 'Juin' TRIM('Juin','in')='Ju' RTRIM('Juiniinnnii','in')='Ju'

Remplace dans la chaîne de caractères char la chaîne de caractères char1 par la chaîne de
REPLACE(char, char1,
caractères char2.
char2)
REPLACE('1.235.256,45','.',' ')='1 235 256,45' REPLACE('ABBABAAAB','AB','C')=''CBCAAC'

Extrait de la chaîne de caractères char1, les caractères situés à partir du rang n jusqu'à la longueur
SUBSTR(char1,n[,m])
m, ou jusqu'à la fin si m non spécifié. SUBSTR('Respect',4)='pect' SUBSTR('Respect',4,2)='pe'

Remplace dans la chaîne de caractères char les caractères présents dans la chaîne de caractère
TRANSLATE(char,
char1 par les caractères de même rang présents dans la chaîne de caractères char2.
char1 , char2)
REPLACE('1.235.256,45','.,',' ,')='1 235 256.45' REPLACE('Satisfaction','sa','*')='Sti*fction'

A. AHMADI Langage SQL


Chap. 2 Langage d’interrogation de données(LID)
4- Fonctions SQL
21
Fonctions date:

Ajout de n mois à la date.


ADD_MONTHS(date, n)
ADD_MONTHS('01-DEC-93')='01-JAN-94'
Indique le dernier jour du mois de date
LAST_DAY(date)
LAST_DAY('15-FEV-93')='28-FEV-93'
Nombre de mois entre date1 et date2. La partie décimale est obtenue en divisant le nombre de
MONTHS_BETWEEN jours par 31.
(date1, date2) MONTHS_BETWEEN('26-JUN-90','25-DEC-93')=40,967742 MONTHS_BETWEEN('26-JUN-
90','26-DEC-89')=-6
Date postérieure à la date d du jour j.
NEXT_DAY(d,j)
NEXT_DAY('12-DEC-93', 'MERCREDI')='15-DEC-93'
Arrondi de la date au format spécifié. Si format non spécifié, arrondi au jour le plus proche.
ROUND(TO_DATE('30-JUN-93'),'Y')='01-JAN-93
ROUND(date[,format]) ROUND(TO_DATE('01-JUL-93'),'Y')='01-JAN-94'
ROUND( TO_DATE('15-12-93 12:00:00','DD-MM-YY HH:MI:SS')) = '16-DEC-93'
ROUND(TO_DATE('15-12-93 11:59:59','DD-MM-YY HH:MI:SS')) ='15-DEC-93'

Date tronquée au format spécifié. Si format non spécifié, arrondi au jour.


TRUNC(TO_DATE('01-JUL-93'),'Y')='01-JAN-93'
TRUNC(date[,format])
TRUNC( TO_DATE('15-12-93 12:00:00','DD-MM-YY HH:MI:SS')) ='15-DEC-93'
TRUNC(TO_DATE('15-12-93'),'MM')='01-DEC-93'

A. AHMADI Langage SQL


Chap. 2 Langage d’interrogation de données(LID)
5- Exemples de requêtes
22

i- Fonctions de groupe
1- Afficher le prix le plus élevé de tous les produits :
select MAX(PU) from produit;

2- Afficher le chiffre d'affaires de chaque client :


select cocli,SUM(Montant) from facture GROUP BY cocli;

3- Afficher le chiffre d'affaires global de l'entreprise :


select SUM(Montant) FROM Facture;

4- Afficher la quantité totale vendue de chaque produit :


select copro, sum(qte) AS Quantite_Totale From detail group by copro Order by 2 DESC;

5- Afficher le nombre total de lignes de facture :


select COUNT(*) FROM Facture;

6- Afficher le nombre de produits achetés dans chaque facture :


Select Nufact, Count(*) from Detail Group By Nufact;

7- Afficher le nombre de factures par client :


Select cocli,count(*) From Facture
Group by cocli
Order by 2 DESC,cocli;
A. AHMADI Langage SQL
Chap. 2 Langage d’interrogation de données(LID)
5- Exemples de requêtes
23
i- Fonctions de groupe

8- Afficher le nombre de clients ayant été facturés :


select COUNT(COUNT(*)) FROM Facture GROUP BY Cocli;

9- Afficher les clients ayant une seule facture :


Select cocli From Factue Group by Cocli HAVING COUNT(*)=1;

10- Afficher les clients ayant un chiffre d'affaires >600 DH;


Select Cocli, SUM(Montant) AS Chiffre_Affaires FROM Facture
GROUP BY Cocli
HAVING SUM(Montant)>600;

11- Afficher les clients qui ont un chiffre d'affaires supérieur à 500 DH depuis le 1er novembre 94:
Select Cocli, SUM(Montant) From Facture Where Datefact>='01-11-94'
GROUP BY Cocli
HAVING SUM(Montant) > 500;

A. AHMADI Langage SQL


Chap. 2 Langage d’interrogation de données(LID)
5- Exemples de requêtes
24

ii- Requêtes imbriquées


Une condition de SELECT utilise le résultat d'une sous-requête. On distingue 2 cas :
- Requêtes non Synchronisées : les sous-requêtes sont exécutées en premier. On commence par la requête la plus
interne.
- Requêtes Synchronisées : les sous-requêtes sont exécutées pour chaque valeur de la requête principale.

a- Requêtes non-synchronisées
1- Afficher le nom du client correspondant à la facture N° 3 :
select nomcli from client where cocli=(select cocli from facture where Nufact=3);

2- Afficher les noms des clients qui n'ont jamais été facturés :
select nomcli from client where cocli NOT IN (select cocli from Facture);

3- Afficher les numéros et les dates des factures du client 'Mounir' :


select Nufact,Datefact from facture where cocli IN (select cocli from client
where UPPER(nomcli)= 'MOUNIR') ;

A. AHMADI Langage SQL


Chap. 2 Langage d’interrogation de données(LID)
5- Exemples de requêtes
25
ii- Requêtes imbriquées
a- Requêtes non-synchronisées
4- Afficher le nom du produit le plus cher :
select libelle from produit where pu=(select MAX(pu) From Produit) ;

5- Afficher les codes et les noms des clients habitant la même ville que le client 'Mounir'
select cocli,nomcli from client
where ville IN (select ville from Client where UPPER(nomcli)='MOUNIR')
AND UPPER(nomcli) != 'MOUNIR' ;

6- Afficher les codes, les libellés et les prix des produits facturés le 10-08-94 :
select * from Produit
where copro IN (select DISTINCT copro From Detail
Where Nufact IN (select Nufact From Facture
where Datefact='10-08-94'));

A. AHMADI Langage SQL


Chap. 2 Langage d’interrogation de données(LID)
5- Exemples de requêtes
26
ii- Requêtes imbriquées
b- Requêtes synchronisées
1- Nom du client correspondant à la facture numéro 3 :
SELECT Nomcli from Client
WHERE EXISTS (SELECT * FROM Facture WHERE Cocli=Client.Cocli AND Nufact=3);

2- Noms des clients qui n'ont jamais été facturés :


SELECT nomcli from Client
WHERE NOT EXISTS (SELECT * from Facture WHERE Cocli=Client.Cocli);

3- Nom du produit le plus cher :


SELECT Libelle FROM Produit
WHERE Pu>= ALL (SELECT Pu from Produit);

4- Codes et noms des clients (autres que Rachidi) qui habitent la même ville que le client "Rachidi" (supposé unique) :
SELECT Cocli, Nomcli From Client X
WHERE EXISTS (SELECT * FROM Client Y WHERE NomCli= 'Rachidi' AND X.ville=Y.ville)
AND Nomcli!='Rachidi'

A. AHMADI Langage SQL


Chap. 2 Langage d’interrogation de données(LID)
5- Exemples de requêtes
27
ii- Requêtes imbriquées
b- Requêtes synchronisées

5- Codes, libellés et prix des produits facturés le 15-12-94 :


SELECT * FROM Produit
WHERE EXISTS (SELECT * FROM Detail WHERE Copro=Produit.Copro
AND EXISTS (SELECT * FROM Facture WHERE Nufact=
Detail.Nufact AND Datefact='15-12-94')) ;

A. AHMADI Langage SQL


Chap. 2 Langage d’interrogation de données(LID)
5- Exemples de requêtes
28
iii- Jointures
Les jointures permettent de ramener des données à partir de plusieurs tables (liées) en évitant les imbrications de
requêtes.
1- Afficher les produits qui n'ont jamais été facturés :
SELECT Produit.Copro, libelle From Produit,Detail
WHERE Produit.Copro=Detail.copro (+)
AND Detail.Copro IS NULL ;

2- Nom du client correspondant à la facture numéro 3 :


SELECT NomCli From Client,Facture
WHERE client.Cocli=Facture.Cocli
AND Nufact=3 ;

3- Nom des clients qui n'ont jamais été facturés :


SELECT Nomcli From Client, Facture
WHERE client.cocli=Facture.cocli (+)
AND Nufact IS NULL ;
4- Numéros et Dates des factures du client 'Rachidi'
SELECT Nufact,Datefact From Facture, Client
WHERE Facture.cocli=Client.cocli
AND Nomcli='Rachidi' ;

A. AHMADI Langage SQL

Vous aimerez peut-être aussi