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

Chapitre 4-Langage SQL

Ce document présente le langage SQL utilisé pour interroger et manipuler des bases de données relationnelles. Il décrit les commandes pour créer, modifier et supprimer des bases de données, des tables, et pour insérer, mettre à jour et supprimer des tuples. Il présente également les principales clauses du langage de requête SQL comme SELECT, FROM, WHERE, GROUP BY.

Transféré par

Maria Gherzouli
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 vues36 pages

Chapitre 4-Langage SQL

Ce document présente le langage SQL utilisé pour interroger et manipuler des bases de données relationnelles. Il décrit les commandes pour créer, modifier et supprimer des bases de données, des tables, et pour insérer, mettre à jour et supprimer des tuples. Il présente également les principales clauses du langage de requête SQL comme SELECT, FROM, WHERE, GROUP BY.

Transféré par

Maria Gherzouli
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

Matière : Bases de Données (BD)

Niveau : Licence 2ème Année (L2)

Manipulation de bases de données relationnelles :


Langage SQL

Pr. F. Magra-Benchikha

Faculté : NTIC Institut : TLSI

[Link]@[Link]

Université Constantine 2 2022/2023. Semestre 2


Plan

1. Introduction
2. Le langage LDD
2.1. Création d'une BD
2.2. Création de tables
2.3. Suppression de table
2.4. Modification de table
3. Le langage LMD
3.1. Recherche des données (SELECT)
• Expression de la projection
• Expression de la restriction
• Expression du produit cartésien
• Expression de la jointure
• Les sous requêtes
• Expression des opérations ensemblistes
• Les fonctions de calcul et les agrégats
• Expression de la division
• Tri des données
3.2. Insertion, Modification, Suppression de tuples

Université Constantine 2 Pr. F. Magra-Benchikha 2


Langage SQL/ Introduction

Les SGBD relationnels proposent un langage de requêtes appelé SQL (Stuctured Query
Language) supporté par tous les SGBDs micro (access) ou professionnels (Oracle).
SQL est le langage d’accès normalisé aux bases de données relationnelles.
SQL a été standardisé par l’ANSI en 1986 puis par l’ISO en 1989, 1992, 1999, 2003 et 2008.
Ces standards successifs ont étendu les capacités du langage. Ainsi :

SQL-86 (ou SQL-87) : Première version standardisée de SQL. Elle a défini les bases du
langage SQL.
SQL-89 : Elle a ajouté de nouvelles fonctionnalités comme la capacité à manipuler les
contraintes de clés étrangères.
SQL-92 : c'est la version la plus couramment utilisée de SQL. Elle a introduit des
fonctionnalités importantes telles que les vues, les déclencheurs et les transactions.
SQL-99 : également appelé SQL3. Elle a ajouté des fonctionnalités importantes comme les
objets, les procédures stockées et les déclencheurs à événements.
SQL-2003 : Elle a introduit des fonctionnalités supplémentaires telles que la possibilité de
définir des contraintes de temps pour les données.
SQL-2006 : Elle a introduit des fonctionnalités de traitement des données géo-spatiales.

Université Constantine 2 Pr. F. Magra-Benchikha 3


Langage SQL/ Introduction

SQL-2008 : Elle a ajouté la possibilité de crypter les données.


SQL-2011 : cette version a ajouté des fonctionnalités pour la gestion des flux de données.

Il existe également d'autres versions de SQL plus spécifiques, telles que SQLite, qui est une
version allégée de SQL utilisée pour les applications mobiles et Web, et MySQL, une version
open-source de SQL utilisée pour les sites Web et les applications.

Le modèle relationnel comporte essentiellement :


• Langage de définition des données (LDD) : qui permet de créer une table (CREATE TABLE),
supprimer une table (DROP TABLE), modifier une table (ALTER TABLE) et créer des vues
externes (CREATE VUE).
• Langage de manipulation de données (LMD): qui permet d’interroger une base de
données (SELECT), insérer des tuples (INSERT INTO), modifier des tuples (UPDATE),
supprimer des tuples (DELETE).
• Langage pour le contrôle des données : qui permet par exemple d'attribuer des droits
d'accès (GRANT).

Université Constantine 2 Pr. F. Magra-Benchikha 4


Langage LDD/ Création et suppression de BD

Création d'une base de données:

Une BD est définie par son schéma. SQL propose donc de créer ce schéma avant de définir
ses composants grâce à la commande CREATE et de le supprimer avec la commande DROP.

Dans MySQL :

Création d'une BD:

CREATE DATABASE <nom_base>;

Exemple : Création de la base de données Gestion_stock :


CREATE DATABASE Gestion_stock;
Suppression d'une BD:

DROP DATABASE <nom_base>;

Exemple : Suppression de la base de données Gestion_stock :


DROP DATABASE Gestion_stock;
Université Constantine 2 Pr. F. Magra-Benchikha 5
Langage LDD/ Création de table

Création de table : (CREATE TABLE)


Cette opération produit une table vide (c.-à-d. sans ligne ou tuple).
CREATE TABLE < nom de la table >
( < nom_colonne 1 > < type_colonne 1 > [DEFAULT <valeur>] [ <contraintes_attribut1>],
< nom de colonne 2 > < type de la colonne 2 > [DEFAULT <valeur>] [<contrainte d'attribut 2>] ,
...
< nom de colonne N > < type de la colonne N > [DEFAULT <valeur>] [<contrainte d'attribut N>] ,
<Contraintes_table>)

NB : Les définitions optionnelles sont mises entre crochets.

Quelques domaines ou types d'attributs Type de donnée Syntaxe


Alphanumérique CHAR(n)
Alphanumérique VARCHAR(n)
Numérique INTEGER
Numérique SMALLINT
Numérique FLOAT
Temps DATE
Temps TIME
Temps TIMESTAMP

Université Constantine 2 Pr. F. Magra-Benchikha 6


Langage LDD/ Création de table

Contraintes d'attribut/table

Contrainte Syntaxe
Contrainte de valeur nulle impossible NOT NULL
Contrainte d'unicité d'attributs PRIMARY KEY (<attribut>+)
contrainte référentielle [FOREIGN KEY (<colonne référençante>)]
REFERENCES <table référencée> [(<colonne
référencée>+)]
Contrainte générale ou de domaine CHECK (<condition>)

Université Constantine 2 Pr. F. Magra-Benchikha 7


Langage LDD/ Création de table

Création de table : Exemple


Création des tables de la base de données Gestion_stock :
PRODUIT (code_prod, nom_prod, prix)
DEPOT (id_dep, adr)
STOCK (code_prod*, code_dep*, qté-stock)

CREATE TABLE Produit (


code_prod int NOT NULL,
nom_prod varchar (15) NOT NULL,
prix float ,
PRIMARY KEY (code_prod) )

CREATE TABLE Depot(


id_dep int NOT NULL ,
adr varchar (15),
PRIMARY KEY (id_dep) ) )

CREATE TABLE Stock (


code_prod int NOT NULL REFERENCES Produit(code_prod),
code_dep int NOT NULL,
qté_stock int NOT NULL DEFAULT 50,
PRIMARY KEY (code_prod, code_dep),
FOREIGN KEY (code_dep) REFERENCES Depot (id_dep),
CHECK (qté_stock > 10) )
Université Constantine 2 Pr. F. Magra-Benchikha 8
Langage LDD/ Suppression et modification de table

Suppression de table : (DROP TABLE)


Une table peut être supprimée avec la commande DROP TABLE. Une fois, supprimée, la
table devient inconnue et son contenu est perdu.

Exemple:
DROP TABLE CLIENT

Modification de table : (ALTER TABLE) (Voir application en TP)


Une table peut être modifiée en ajoutant de nouveaux attributs, en supprimant des
attributs ou en les modifiant par la commande ALTER TABLEE.

ALTER TABLE <nom_table> ADD ... -- permet d'ajouter une colonne ou une contrainte
ALTER TABLE <nom_table > DROP ... -- permet de supprimer une colonne ou une contrainte
ALTER TABLE <nom_table > MODIFY ... -- permettent de modifier une colonne

Université Constantine 2 Pr. F. Magra-Benchikha 9


Langage LDD/ Interrogation de BD

Recherche de données: (SELECT)


La commande de recherche des données SELECT est à la base du langage SQL
Toutes les opérations de l'algèbre relationnelle(projection selection, jointure, union, etc.)
sont exprimées grâce à cette commande.
Sa syntaxe générale est la suivante:

SELECT [ALL|DISTINCT] <att1> [ , [ALL|DISTINCT] <att2>, [ALL|DISTINCT] <att3>, ... ] | *


FROM <Table1> [ , <Table2>, <Table3><, ... ]
[WHERE <conditions de sélection et/ou de jointure>]
[GROUP BY <att1> [ , <att2>, ... ] [HAVING <conditions de selection>]]
[(UNION│INTERSECT│MINUS [ALL]) <commande SELECT>]
[ORDER BY < att1> [ASC | DESC] [, <att2> [ASC | DESC], ...];

NB : Seules les clauses SELECT et FROM sont obligatoires

Université Constantine 2 Pr. F. Magra-Benchikha 10


Langage LDD/ Interrogation de BD

Tous les exemples du chapitre seront appliqués sur la base de données « Gestion_Stock »
dont le schéma logique et l’extension sont les suivants :

Schéma logique :
PRODUIT (code_prod, nom_prod, prix)
STOCK (code_prod*, code_dep*, qté_stock)
DEPOT (id_dep, adr)

Instance ou Extension :

Université Constantine 2 Pr. F. Magra-Benchikha 11


Langage LDD/ Interrogation de BD

1. Expression de la projection

SELECT [ALL|DISTINCT] <att1> [ , [ALL|DISTINCT] <att2>, [ALL|DISTINCT] <att3>, ... ] | *


FROM <Table>

 * : lister tous les attributs de la table référencée dans la clause FROM.

 DISTINCT : permet d'éliminer du résultat les tuples en double. En effet, SQL n’élimine pas
automatiquement les doubles, à moins que cela soit explicitement demandé par le mot clé
DISTINCT, l’option par défaut étant ALL.

 Il est possible d’appliquer des fonctions de calculs sur les colonnes extraites. Ces fonctions
sont les opérations arithmétiques (+, –, * et / ) ou des fonctions scalaires prédéfinies telles
que ROUND, MOD,…..

Université Constantine 2 Pr. F. Magra-Benchikha 12


Langage LDD/ Interrogation de BD

Expression de la projection : Exemples

Requête 1 : Lister le code et le prix de tous les produits


SELECT code_prod, prix
FROM Produit

Requête 2 : Lister le code et le prix en Euro de tous les


produits
SELECT code_prod, prix/13
FROM Produit

Requête 3 : Lister le nom de tous les produits


/* Il est possible d'avoir des produits de même nom
(doublons)*/
SELECT DISTINCT nom_prod
FROM Produit

Université Constantine 2 Pr. F. Magra-Benchikha 13


Langage LDD/ Interrogation de BD
2. Expression de la selection

Toute sélection est une combinaison d’une restriction suivie d’une projection. Une
sélection s’exprime comme une projection avec en plus une condition de recherche
spécifiée dans la clause FROM selon la syntaxe suivante :

SELECT [ALL|DISTINCT] <att1> [ , [ALL|DISTINCT] <att2>, [ALL|DISTINCT] <att3>, ... ] | *


FROM <Table>
WHERE <condition(s) de sélection>
La condition de selection peut être un prédicat élémentaire ou bien une expression
booléenne utilisant les opérateurs booléens (AND, OR, XOR, NOT). Voici le calcul de la valeur
d’une condition de recherche :
AND OR (OU) VRAI FAUX inconnu
VRAI FAUX Inconnu
(ET)
VRAI VRAI VRAI VRAI
VRAI VRAI FAUX inconnu
FAUX VRAI FAUX inconnu
FAUX FAUX FAUX FAUX
inconnu VRAI inconnu inconnu
inconnu inconnu FAUX inconnu

NOT
VRAI FAUX inconnu
(NON)
FAUX VRAI inconnu

Université Constantine 2 Pr. F. Magra-Benchikha 14


Langage LDD/ Interrogation de BD

Expression de la selection: Quelques prédicats élémentaires


Toute sélection est une combinaison d’une restriction suivie d’une projection. Une
sélection s’exprime comme une projection avec en plus une condition de recherche
spécifiée dans la clause FROM selon la syntaxe suivante :

Prédicat Syntaxe Exemple Commentaire


Prédicat de comparaison =| ≠| < | > | <=|>= ….WHERE prix>100 /
Prédicat d'intervalle BETWEEN … AND …WHERE numéro Les bornes de l'intervalle sont
BETWEEN 12 AND 20 généralement incluses.
Prédicat de comparaison LIKE / NOT LIKE …WHERE nom LIKE 'D%' LIKE permet de vérifier qu'une
de texte chaîne de caractères est
conforme à un modèle
contenant '_ 'et/ou '% '
Prédicat de Nullité IS NULL/ IS NOT … WHERE prix IS NULL IS NULL teste l'absence de
NULL valeur qui peut être assimilée à
une valeur inconnue.
Prédicat d'appartenance IN /NOT IN … WHERE année IN tester si la valeur d’un terme
(2016, 2015) appartient (/n'appartient pas)
à une liste de constantes.

Université Constantine 2 Pr. F. Magra-Benchikha 15


Langage LDD/ Interrogation de BD

Expression de la selection: Exemples

Requête 4 : Lister les produits (code, Requête 5 : Lister le code des produits dont
nom et prix) de prix >100 DA. la quantité en stock est entre 50 et 200.

SELECT * SELECT code_prod


FROM Produit FROM Stock
WHERE prix>100 WHERE qté_stock BETWEEN 50 AND 200

Requête 6: Lister le nom des produits Requête 7: Lister le code des produits
commençant par la lettre 'B' et dont stockés dans les dépôts 'D1', 'D2' ou 'D3'.
le prix est inconnu.
SELECT code_prod
SELECT nom_prod FROM Stock
FROM Produit WHERE code_dep IN ('D1', 'D2', 'D3')
WHERE prix IS NULL
AND nom_prod LIKE 'B%'

Université Constantine 2 Pr. F. Magra-Benchikha 16


Langage LDD/ Interrogation de BD

3. Expression du produit cartésien

Le produit cartésien s’exprime en incluant plusieurs relations dans la clause FROM.

SELECT [ALL|DISTINCT] <att1> [ , [ALL|DISTINCT] <att2>, [ALL|DISTINCT]


<att3>, ... ] | *
FROM <Table1> , <Table2> [ , <Table3>, ... ]

Exemple :
SELECT *
FROM Produit, Stock

Université Constantine 2 Pr. F. Magra-Benchikha 17


Langage LDD/ Interrogation de BD

4. Expression de la jointure

La jointure peut être exprimée de deux façons différentes :


1. En utilisant la restriction sur le produit cartésien,
2. En utilisant les requêtes imbriquées (voir plus loin dans le chapitre)

Expression de la jointure en utilisant la Restriction sur le Produit Cartésien


Dans la clause FROM, on spécifie la (les) condition(s) de jointure.

SELECT [ALL|DISTINCT] att1 [ , [ALL|DISTINCT] att2, [ALL|DISTINCT] att3, ... ] | *


FROM <Table1> , <Table2> [ , <Table3>, ... ]
WHERE <condition(s) de jointure>

NB : La combinaison des opérations de jointures, restrictions et projections peut être


effectuée à l’intérieur d’un même bloc SELECT.

Définition d'un alias : Un alias est un nom de remplacement, que l’on donne de manière
temporaire (le temps d’une requête) à une table pour faciliter l'expression de la requête.

Université Constantine 2 Pr. F. Magra-Benchikha 18


Langage LDD/ Interrogation de BD

Expression de la jointure en utilisant la restriction sur le Produit Cartésien :


Exemples
Requête 8: Lister l'adresse des dépôts stockant le produit 100.
SELECT adr
FROM Stock S, Dépôt D (ou Stock AS S, Dépot AS D)
WHERE S.code_dep = D.id_dep AND code_prod = 100

Requête 9: Lister le nom des produits (sans doublons) stockés dans les dépôt D1 ou D2
SELECT DISTINCT nom_prod
FROM Produit P, Stock S
WHERE Produit.code_prod = Stock.code_prod AND code_dep IN ('D1', 'D2')

Requête 10: Donner les produits (code et nom) stockés dans le dépôt d'adresse "BlocA Etage2
Salle4" en quantité supérieure à 100.
SELECT code_prod, nom_prod
FROM Produit P, Stock S, Dépôt D
AND P.code_prod= S.code_prod
AND D.id_dep = S.code_dep
AND adr LIKE 'BlocA Etage2 Salle4 '
AND qté_stock > 100

Université Constantine 2 Pr. F. Magra-Benchikha 19


Langage LDD/ Interrogation de BD

5. Les sous-requêtes

SQL permet l’imbrication de sous-requêtes notamment dans la clause WHERE. Une sous-
requête est une requête à l'intérieur d'une requête (ou une requête imbriquée dans une
autre requête).

5.1. Sous-requêtes au niveau de WHERE


Un terme dans une condition peut être exprimé par une expression SELECT. On parle de
sous-requête. L'évaluation de ce terme peut être une valeur ou bien une table avec des
tuples. La condition peut être exprimée à l'aide d’autres prédicats comme : IN, NOT IN, ALL,
ANY (OU SOME), EXISTS, NOT EXISTS ou CONTAINS.

Toute sous-requête peut elle-même invoquer des sous-requêtes, si bien qu’il est possible
d’imbriquer des blocs SELECT à plusieurs niveaux.

Université Constantine 2 Pr. F. Magra-Benchikha 20


La langage LMD Interrogation de BD

Autres prédicats (1)


Prédicat Forme de la requête Commentaire
IN SELECT <att1>, …. | * Permet de tester la présence d’une valeur
FROM <nom_table> particulière dans un ensemble.
WHERE <att> IN (sous-requête)
NOT IN SELECT <att1>, …. | * Permet de tester l'absence d’une valeur particulière
FROM <nom_table> dans un ensemble.
WHERE <att> NOT IN (sous-
requête)
ALL SELECT att1, …. | * Compare chacune des valeurs de l’ensemble à une
(Quantificateur FROM <nom_table> valeur particulière et retourne ‘VRAI’ si la
universel) WHERE <att> <opérateur> ALL comparaison est évaluée à VRAI pour chacun des
(sous_requête) éléments. Les comparateurs sont : <, <=, >, >=, =, !=

ANY ou SOME SELECT <att1>, …. | * Compare chacune des valeurs de l’ensemble à une
(Quantificateur FROM <nom_table> valeur particulière et retourne ‘VRAI’ si la
existentiel) WHERE <att> <opérateur> ANY comparaison est évaluée à ‘VRAI’ pour au moins un
(sous_requête) des éléments de l'ensemble.
EXISTS SELECT <att1>, …. | * Retourne ‘VRAI’ si la sous-question (requête
FROM <nom_table> imbriquée) ramène au moins une ligne c-à-d un
WHERE EXISTS (sous-requête) ensemble non vide

Université Constantine 2 21
La langage LMD Interrogation de BD

Autres prédicats (2)


Prédicat Forme de la requête Commentaire
NOT EXISTS SELECT <att1>, …. | * Retourne ‘VRAI’ si la sous-question (requête
FROM <nom_table> imbriquée) ramène un ensemble vide.
WHERE NOT EXISTS (sous-
requête)
CONTAINS SELECT att1, …. | * Retourne 'VRAI' si le résultat de la sous-requête1
(Inclusion FROM <nom_table> (ensemble 1) contient (ou est égal) au résultat de la
d'ensemble) WHERE (sous-requête) sous-requête2 (ensemble 2).
CONTAINS (sous_requête)
NOT CONTAINS SELECT att1, …. | * Retourne 'VRAI' si au moins un élément du résultat
(Non inclusion FROM <nom_table> de la sous-requête1 (ensemble 1) n'appartient pas
d'ensemble) WHERE (sous-requête) au résultat de la sous-requête2 (ensemble 2).
NOT CONTAINS (sous_requête)

Remarque : Le prédicat = ANY est équivalent au prédicat IN


Le prédicat <> ALL est équivalent au prédicat NOT IN

Université Constantine 2 22
Langage LDD/ Interrogation de BD

5.2. Expression de la jointure en utilisant les sous requêtes (requêtes imbriquées)


La jointure peut aussi être exprimée par les requêtes imbriquées en utilisant le prédicat 'IN'.
Requête 11: (Autre expression de la Requête 9)
Donner le nom des produits stockés dans les dépôts D1 ou D2
SELECT nom_prod
FROM Produit
WHERE code_prod IN (SELECT code_prod
FROM Stock
WHERE code_dep IN ('D1', 'D2'))

Requête 12 : (Autre expression de la Requête 10).


Donner les produits (code et nom) stockés dans le dépôt d'adresse "BlocA Etage2 Salle4" en
quantité supérieure à 100.
SELECT code_prod, nom_prod
FROM Produit
WHERE code_prod IN (SELECT code_prod
FROM Stock
WHERE qté_stock > 100
AND code_dep IN (SELECT id_dep
FROM Depot
WHERE adr LIKE ' BlocA Etage2 Salle4 '))

Université Constantine 2 Pr. F. Magra-Benchikha 23


Langage LDD/ Interrogation de BD

5.3. Les sous-requêtes : Exemples

Requête 13: Lister le nom et le prix des produits non encore stockés.
SELECT nom_prod, prix
FROM Produit
WHERE code_prod NOT IN
(SELECT code_prod
FROM Stock)

Requête 14: Lister le nom du produit le Requête 15: Donner le nom de(s) produit(s)
plus cher (on peut avoir plusieurs produits) dont le prix n'est pas minimal
SELECT nom_prod SELECT nom_prod
FROM Produit FROM Produit
WHERE prix >= ALL WHERE prix > ANY
(SELECT prix (SELECT prix
FROM Produit) FROM Produit)

Université Constantine 2 Pr. F. Magra-Benchikha 24


La langage LMD Interrogation de BD

Les sous-requêtes : Plus d'exemples

Requête 16: (Autre expression de la Requête 13)


Lister le nom et le prix des produits non encore stockés.

SELECT nom_prod, prix


FROM Produit P Sous-requête qui donne le
WHERE NOT EXISTS stockage du produit i (en
cours de vérification)
(SELECT *
FROM Stock
WHERE code_prod= P.code_prod)

Requête 17: Donner les dépôts (code et adresse) des dépôts Sous-requête qui fournit les
quantités de tous les produits
qui stockent chaque produit en quantité supérieure à 50.
stockés dans le dépôt i (en
SELECT id_dep, adr cours de vérification)
FROM Depot D
WHERE 50 < ALL (SELECT qté_stock
FROM Stock
WHERE code_dep = D.id_dep

Université Constantine 2 25
Langage LDD/ Interrogation de BD

6. Expression des opérations ensemblistes :


UNION, INTERSECT et MINUS (ou EXCEPT)

Les opérations ensemblistes sont exprimées en SQL selon la syntaxe suivante:


(SELECT ………
FROM ……
WHERE……)
[UNION | INTERSECT | EXCEPT
(MINUS)]
(SELECT ………
FROM ……
WHERE……)

Université Constantine 2 Pr. F. Magra-Benchikha 26


Langage LDD/ Interrogation de BD

Expression des opérations ensemblistes :


Exemples :

Requête 18 14 (Autre expression de la Requête 13) Requête 19 15 (Autre expression de la requête 9)


Lister le nom et le prix des produits non encore Lister le nom des produits stockés dans les
stockés. dépôt D1 ou D2.
(SELECT nom_prod, prix (SELECT nom_prod
FROM Produit) FROM Stock S, Produit P
MINUS WHERE S.code_prod= P.code_prod
(SELECT nom_prod, prix AND code_dep = 'D1')
FROM Produit UNION
WHERE code_prod IN (SELECT nom_prod
(SELECT code_prod FROM Stock S, Produit P
FROM Stock ) WHERE S.code_prod= P.code_prod
WHERE code_dep='D2' )

Université Constantine 2 Pr. F. Magra-Benchikha 27


Langage LDD/ Interrogation de BD

7. Les fonctions de calcul et les agrégats


SQL définit des fonctions de calcul encore appelées des fonctions d'agrégation qui
permettent de calculer un résultat atomique (un entier ou un réel) à partir d'un ensemble
de valeurs. Ces fonctions sont en nombre de 5.
Fonction de calcul Utilité
COUNT compter le nombre d'éléments d’un ensemble
SUM sommer les valeurs d’un ensemble de valeurs
AVG calculer la valeur moyenne d’un ensemble de valeurs
MIN calculer la valeur minimale d’un ensemble de valeurs
MAX calculer la valeur maximale d’un ensemble de valeurs
Exemples :
Requête 20 : (Autre expression de la Requête 14) Requête 21 : Donner le prix moyen des
Lister le nom du produit le plus cher. produits.
SELECT nom_prod SELECT AVG(prix)
FROM Produit FROM Produit
WHERE prix = (SELECT MAX(prix)
FROM Produit)

Université Constantine 2 Pr. F. Magra-Benchikha 28


Langage LDD/ Interrogation de BD

Les agrégats :
Un agrégat est un partitionnement horizontal d’une table en sous-tables, en fonction des
valeurs d’un ou de plusieurs attributs de partitionnement, suivi éventuellement de
l’application d’une fonction de calcul à chaque attribut des sous-tables obtenues.
Une sélection (restriction) sur les partitions peut être appliquée en utilisant la clause
HAVING.

SELECT B, [min(A) | max(A) | sum (A) | avg(A) | count(A)]


FROM R1,……
WHERE <condition(s)>
GROUP BY B
[HAVING <conditions de sélection sur les partitions> ]

Attention : // B : Un ou plusieurs attributs


A : Attribut différent de B

Remarque:
Les fonctions de calcul ne peuvent être utilisées que dans une clause SELECT ou dans une
clause HAVING.

Université Constantine 2 Pr. F. Magra-Benchikha 29


Langage LDD/ Interrogation de BD

Les agrégats : Exemples

Requête 22: Lister le nombre de produits Requête 23: Lister pour chaque dépôt son code,
stockés dans chaque dépôt. son adresse et le nombre de produits qu'il stocke.

SELECT code_dep, COUNT(code_prod) SELECT id_dep, adr, COUNT(code_prod)


FROM Stock FROM Depot D, Stock S
GROUP BY code_dep WHERE D.id_dep = S.code_dep
GROUP BY code_dep

Requête 24: Lister les dépôts (code) qui Requête 25 : Donner pour chaque produit, son code,
stockent plus de 20 produits de prix son nom et sa quantité totale stockée dans
supérieur à 1000 DA . l'entreprise.
SELECT code_dep SELECT code_prod, nom_prod, SUM(qté_stock)
FROM Stock S, produit P FROM Produit P, Stock S
WHERE S.code_prod = P.code_prod WHERE P.code_prod = S.code_prod
AND prix>1000 GROUP BY code_prod
GROUP BY code_dep
HAVING COUNT (code_prod) > 20

Université Constantine 2 Pr. F. Magra-Benchikha 30


Langage LDD/ Interrogation de BD

Les agrégats : Exemples


Requête 26 : (Autre expression de la requête 17)
Donner les dépôts (code et adresse) qui stockent chaque produit en quantité supérieure à 50.
SELECT id_dep, adr
FROM Depot D, Stock S
WHERE [Link]-dep= S.code_dep
GROUP BY code_dep
HAVING 50 < ALL SET(qté_stock)

Université Constantine 2 Pr. F. Magra-Benchikha 31


Langage LDD/ Interrogation de BD

8. Expression de la division
La division est exprimée par le bloc :
GROUP BY + HAVING (SET + CONTAINS) OU HAVING COUNT
(cela dépendra de la question).

Ou par le bloc : (NOT EXISTS + NOT IN)

Requête 27:
Lister les produits (code et nom) stockés dans tous les dépôts.

SELECT code_prod, nom_prod


FROM Produit
WHERE code_prod IN (SELECT code_prod
FROM Stock
GROUP BY code_prod
HAVING SET(code_dep) CONTAINS (SELECT id_dep
FROM Depot))

Université Constantine 2 Pr. F. Magra-Benchikha 32


Langage LDD/ Interrogation de BD

Expression de la division
Requête [Link] (Autre
(Expression
expression
de la Division)
de la requête 27)
Lister les produits (code et nom) stockés dans tous les dépôts.

SELECT code_prod, nom_prod


FROM Produit P, Stock S
WHERE P.code_prod = S.code_prod
GROUP BY code_prod
HAVING COUNT(code_dep) = SELECT COUNT (code_dep) FROM Dépot

Requête 29: (Autre expression de la requête 27)


Lister les produits (code et nom) stockés dans tous les dépôts.

SELECT code_dep, nom_prod


FROM Produit P
WHERE NOT EXISTS (SELECT code-dep
FROM Depot
WHERE id_dep NOT IN (SELECT code_dep FROM Stock
WHERE code_prod=P.code_prod)
)

Université Constantine 2 Pr. F. Magra-Benchikha 33


Langage LDD/ Interrogation de BD

Expression de la division
Requête 30 :
Lister les dépôts (code et adresse) qui stockent au moins tous les produits de prix >100 DA.

SELECT id_dep, adr


FROM Depot
WHERE id-dep IN (SELECT code_dep
FROM Stock
GROUP BY code_dep
HAVING SET(code_prod) CONTAINS (SELECT code_prod FROM Produit
WHERE prix > 100)

Université Constantine 2 Pr. F. Magra-Benchikha 34


Langage LDD/ Interrogation de BD

9. Tri des résultats

Le tri de tout résultat est effectué par la clause ORDER BY sur un ou plusieurs attributs selon
un ordre ascendant (ASC) ou descendant (DESC).

ORDER BY < att1> [ASC | DESC] [, <att2> [ASC | DESC], ...];

Requête 31: Requête 32:


Afficher
Requêteles 32:noms des produits triés par Donner la liste des produits triée par ordre
ordre
Citer lecroissant
nom desdeproduits
leur prix.
triés par ordre décroissant de leur stockage dans l'etreprise
SELECT nom_prod
SELECT code_prod, nom_prod, SUM(qté_stock)
FROM Produit FROM Produit P, Stock S
ORDER BY prix WHERE P.code_prod = S.code_prod
GROUP BY code_prod
ORDER BY SUM(qté_stock) DESC

Université Constantine 2 Pr. F. Magra-Benchikha 35


Langage LDD/ Interrogation de BD

Pour finir avec l'interrogation d'une BD :

Principe d'évaluation d'une requête SELECT est le suivant :

1. Évaluation de la clause FROM en faisant le produit cartésien de toutes les relations qui y
apparaissent
2. Évaluation de la clause WHERE qui réalise les restrictions et les jointures
3. Évaluation de la clause GROUP BY qui effectue le partitionnement
4. Évaluation de la clause HAVING qui sélectionne les partitions désirées
5. Évaluation de la clause SELECT qui constitue la projection finale
6. Évaluation de la clause ORDER BY qui trie les tuples du résultat final

Insertion (INSERT INTO) , modification (UPDATE) et suppression (DELETE)


des tuples (Voir TP)
Fin

Université Constantine 2 Pr. F. Magra-Benchikha 36

Vous aimerez peut-être aussi