Vous êtes sur la page 1sur 7

ENSA,

3eme année cycle ingénieur

TP 6

Objectif : Divers fonctions

Exercice 1

CREATE TABLE t (a VARCHAR(20));

INSERT INTO t VALUES('Hello World');

INSERT INTO t VALUES('Good Bye world');

En utilisant le jeu de données ci dessus, donner la requête en sql permettant la restitution des 4
premières caractères de la colonne a et les affichés sous une colonne de nom substring, selon
l’affichage suivant :

Exercice 2

On dispose d'une liste de noms propres mal formatés avec des espaces inutiles.

CREATE TABLE nom_propres (


nom VARCHAR(50) PRIMARY KEY
);
INSERT INTO nom_propres VALUES (' JoHnSoN ');
INSERT INTO nom_propres VALUES (' thunberg ');
INSERT INTO nom_propres VALUES (' aleXandrE ');
INSERT INTO nom_propres VALUES (' zappA ');
Proposer une requête permettant d'afficher ces noms propres en majuscules et sans les espaces
inutiles. (On pourra composer des fonctions)

Exercice 3
Soit le schéma relationnel suivant :
Employe (NumEmp, Nom, fonction, #NumSup,dateEmbauche,sal,comm,
#Numdep)
Departement (NumDept,NomD,lieu)
Projet (NumProj,NomP, #NumDept)
Travaille (#NumEmp, #NumProj, nbHeures)
*) Supérieur référence le NumEmp du supérieur

Donner la requête en sql qui permet de :

1
1-Calculer la moyenne des salaires, le salaire minimum et maximum, ainsi que le nombre
d'employés par département, exemple d affichage :

2- même question que 1), avec un nombre d employé >1.


3- même question que 1), plus une ligne supplémentaire représentant le total global. Comme
le montre la figure suivante (utiliser ROLLUP )

Exercice 4

1- Créer la table : stock(piece, region, quantite);

2- Insérera les données suivantes dans stock

('ecrous', 'est', 50),


('ecrous', 'ouest', 0),
('ecrous', 'sud', 40),
('clous', 'est', 70),
('clous', 'nord', 0),
('vis', 'ouest', 50),
('vis', 'sud', 50),
('vis', 'nord', 60) ;
3-Donner la requête en sql qui permet de faire un regroupement des sommes des qt par pièce.
4-Donner la requête en sql qui permet de faire un regroupement des sommes des qt par région.
5- Donner la requête en sql qui permet l’affichage des sommes des quantités pour les pièces et
pour les régions (chacun à part) .
Exemple d affichage :

2
Remarque : union all : même chose qu union, la différence qu elle affiche les doublons

6- Même chose que question 5 : utiliser GROUPING SETS .


7- Donner la requête en sql qui permet l’affichage des sommes des quantités pour les pièces et
pour les régions (chacun à part) et au même temps affiche la somme de chaque type d article.
Exemple d affichage :

8-
La fonction CUBE vous permet de générer des sous-totaux comme l' ROLLUP
extension. De plus, l' CUBE extension générera des sous-totaux pour toutes les
combinaisons de colonnes de regroupement spécifiées dans la GROUP BY clause.
Syntaxe de cube
SELECT
c1, c2, AGGREGATE_FUNCTION(c3)
FROM
table_name
GROUP BY CUBE(c1 , c2);

3
Donner requête qui permet de :
-Calculer les totaux dans la même requête et sur toutes les clauses de
regroupement
a-Utiliser cube (voir affichage)
b-Utiliser GROUPING SETS
-
Exercise 5

1-creer la table :
CREATE TABLE inventory (
warehouse VARCHAR(255),
product VARCHAR(255) NOT NULL,
model VARCHAR(50) NOT NULL,
quantity INT,
PRIMARY KEY (warehouse,product,model)
);
2- inserer data dans inventory table:
INSERT INTO inventory(warehouse, product, model, quantity)
VALUES('San Jose', 'iPhone','6s',100);
INSERT INTO inventory(warehouse, product, model, quantity)
VALUES('San Fransisco', 'iPhone','6s',50);
INSERT INTO inventory(warehouse, product, model, quantity)
VALUES('San Jose','iPhone','7',50);
INSERT INTO inventory(warehouse, product, model, quantity)
VALUES('San Fransisco', 'iPhone','7',10);
INSERT INTO inventory(warehouse, product, model, quantity)
VALUES('San Jose','iPhone','X',150);
INSERT INTO inventory(warehouse, product, model, quantity)
VALUES('San Fransisco', 'iPhone','X',200);
INSERT INTO inventory(warehouse, product, model, quantity)
VALUES('San Jose','Samsung','Galaxy S',200);
INSERT INTO inventory(warehouse, product, model, quantity)
VALUES('San Fransisco','Samsung','Galaxy S',200);
INSERT INTO inventory(warehouse, product, model, quantity)
VALUES('San Fransisco','Samsung','Note 8',100);
INSERT INTO inventory(warehouse, product, model, quantity)
VALUES('San Jose','Samsung','Note 8',150);

Donner les requêtes en sql qui :


3-Affiche la somme totale des qt de l'inventaire par entrepôt et par produit

4- La somme totale des qt par entrepot.

4
5-retourne tous les ensembles de regroupement à l'aide d'une seule requête, exemple
d’affichage :
a- utiliser union all
b- Utiliser GROUPINGSETS

5-Même question que 4) mais donner un titre à somme qt (utiliser COALESCE), exemple

6- ROLLUP avec multiple columns :

8-Donner la Somme des qt par warhouse, utiliser group by seul, exemple d’affichage:

5
9- meme question que 8, en rajoutant la somme totale, exemple d’affichage:

b-donner un nom à null

10- Donner la Somme des qt : plusieurs colonnes avec group by et avec un ordre de trie,

11- Donner la Somme des qt : le groupement avec des subtotals, exemple d’affichage:

Exercice 6
A partir d'une table des réception de produits et des commandes clients, notre magazinier
aimerait avoir un état des stocke au jour le jour... Voyons cela en détail...Les tables de notre
jeu d'essai :
CREATE TABLE T_RECEPTION_RCP
(PRD_ID INT,
RCP_DATE DATE,
RCP_QUANTITE FLOAT) ;

6
CREATE TABLE T_COMMANDE_CMD
(PRD_ID INT,
CMD_DATE DATE,
CMD_QUANTITE INT) ;

INSERT INTO T_RECEPTION_RCP VALUES (1, '2008-01-01', 10) ;


INSERT INTO T_RECEPTION_RCP VALUES (1, '2008-02-01', 20) ;
INSERT INTO T_RECEPTION_RCP VALUES (1, '2008-03-15', 5) ;
INSERT INTO T_RECEPTION_RCP VALUES (2, '2008-02-10', 20) ;
INSERT INTO T_RECEPTION_RCP VALUES (2, '2008-03-20', 25) ;
INSERT INTO T_RECEPTION_RCP VALUES (3, '2008-01-12', 20) ;
INSERT INTO T_RECEPTION_RCP VALUES (4, '2008-01-01', 10) ;
INSERT INTO T_RECEPTION_RCP VALUES (4, '2008-01-15', 20) ;
INSERT INTO T_RECEPTION_RCP VALUES (4, '2008-02-01', 30) ;
INSERT INTO T_COMMANDE_CMD VALUES (1, '2008-02-11', 45) ;
INSERT INTO T_COMMANDE_CMD VALUES (2, '2008-02-15', 35) ;
INSERT INTO T_COMMANDE_CMD VALUES (3, '2008-02-01' 20) ;
INSERT INTO T_COMMANDE_CMD VALUES (4, '2008-01-05' 75) ;

Les lignes de réception sont celles des produits alimentant le stock. Les lignes des commandes
sont celles sortant du stock...
Donner la requête en sql qui permet à notre magasinier obtenir la présentation suivante :

Qui lui permet de connaître au jour le jour ou il est avec toutes les variations de stock.

Vous aimerez peut-être aussi