You are on page 1of 39

L'ADMINISTRATION DES BASES DE DONNÉES

1.4 Le jardinage

1.4.1 Modèle entité/relation

1.4.2 Base de données MySQL


DROP DATABASE IF EXISTS gardening ;
CREATE DATABASE gardening CHARACTER SET utf8mb4 ;
UTILISER le jardinage ;

CREATE TABLE office (


office_code VARCHAR(10) NOT NULL,
ville VARCHAR(30) NOT NULL,
pais VARCHAR(50) NOT NULL,
région VARCHAR(50) DEFAULT NULL,
zip_code VARCHAR(10) NOT NULL,
telefono VARCHAR(20) NOT NULL,
address_line1 VARCHAR(50) NOT NULL,
address_line2 VARCHAR(50) DEFAULT NULL,
PRIMARY KEY (office_code)
);

CREATE TABLE employee (


code_employé INTEGER NOT NULL,
name VARCHAR(50) NOT NULL,
surname1 VARCHAR(50) NOT NULL,
surname2 VARCHAR(50) DEFAULT NULL,
extension VARCHAR(10) NOT NULL,
email VARCHAR(100) NOT NULL,
office_code VARCHAR(10) NOT NULL,
code_patron INTEGER DEFAULT NULL,
set VARCHAR(50) DEFAULT NULL,
PRIMARY KEY (code_employé),
FOREIGN KEY (office_code) REFERENCES office (office_code),
FOREIGN KEY (codigo_jefe) REFERENCES employee (codigo_empleado)
);

CREATE TABLE product_range (


gamma VARCHAR(50) NOT NULL,
text_description TEXTE,
description_html TEXTE,
image VARCHAR(256),
CLÉ PRIMAIRE (plage)
);

CREATE TABLE customer (


code_client INTEGER NOT NULL,
nom_client VARCHAR(50) NOT NULL,
nom_du_contact VARCHAR(30) DEFAULT NULL,
contact_surname VARCHAR(30) DEFAULT NULL,
telefono VARCHAR(15) NOT NULL,
fax VARCHAR(15) NOT NULL,
address_line1 VARCHAR(50) NOT NULL,
address_line2 VARCHAR(50) DEFAULT NULL,
ville VARCHAR(50) NOT NULL,
région VARCHAR(50) DEFAULT NULL,
pais VARCHAR(50) DEFAULT NULL,
postcode_code VARCHAR(10) DEFAULT NULL,
code_employé_de_la_vente INTEGER DEFAULT NULL,
credit_limit NUMERIC(15,2) DEFAULT NULL,
PRIMARY KEY (code_client),
FOREIGN KEY (employee_code_sales_rep_rep_code) REFERENCES employee
(employee_code)
);

CREATE TABLE order (


order_code INTEGER NOT NULL,
order_date date NOT NULL,
expected_date date NOT NULL,
delivery_date date DEFAULT NULL,
status VARCHAR(15) NOT NULL,
commentaires TEXTE,
code_client INTEGER NOT NULL,
PRIMARY KEY (order_code),
FOREIGN KEY (customer_code) REFERENCES customer (customer_code)
);

CREATE TABLE product (


code_produit VARCHAR(15) NOT NULL,
name VARCHAR(70) NOT NULL,
gamma VARCHAR(50) NOT NULL,
dimensions VARCHAR(25) NULL,
fournisseur VARCHAR(50) DEFAULT NULL,
texte de description NULL,
quantity_in_stock SMALLINT NOT NULL,
sale_price NUMERIC(15,2) NOT NULL,
supplier_price NUMERIC(15,2) DEFAULT NULL,
PRIMARY KEY (product_code),
FOREIGN KEY (range) REFERENCES range_product (range)
);

CREATE TABLE order_detail (


order_code INTEGER NOT NULL,
code_produit VARCHAR(15) NOT NULL,
quantité INTEGER NOT NULL,
unit_price NUMERIC(15,2) NOT NULL,
numéro_ligne SMALLINT NOT NULL,
PRIMARY KEY (order_code, product_code),
FOREIGN KEY (order_code) REFERENCES order (order_code),
FOREIGN KEY (product_code) REFERENCES product (product_code)
);

CREATE TABLE payment (


code_client INTEGER NOT NULL,
payment_form VARCHAR(40) NOT NULL,
transaction_id VARCHAR(50) NOT NULL,
date_payment date NOT NULL,
total NUMERIC(15,2) NOT NULL,
PRIMARY KEY (customer_code, transaction_id),
FOREIGN KEY (customer_code) REFERENCES customer (customer_code)
);

1.4.3 Données
Accédez auscript SQL pour la création de la base de données et l'insertion des
données :jardineria.sql.

1.4.4 Requêtes sur une table


1. Renvoie une liste avec le code du bureau et la ville où il y a des bureaux.
2.

Renvoie une liste avec la ville et le numéro de téléphone des bureaux en Espagne.

3. Renvoie une liste contenant le prénom, le nom et l'adresse électronique des


employés dont le patron a un code patron égal à 7.
4. Renvoie le nom de la fonction, le prénom, le nom et l'adresse électronique du
responsable de l'entreprise.

5. Renvoie une liste contenant le prénom, le nom et la fonction des employés qui
ne sont pas des représentants commerciaux.
6. Renvoie une liste contenant le nom de tous les clients espagnols.

7. Renvoie une liste des différents états par lesquels une commande peut passer.

8.
Renvoie une liste avec le code client des clients qui ont effectué un paiement en 2008. Veuillez not
9.
Renvoie une liste avec le code de la commande, le code du client, la date prévue et la date de livrai

10.
Renvoie une liste contenant le code de la commande, le code du client, la date prévue et la date de
11. Renvoie une liste de tous les ordres qui ont étérejetés en2009.

12. Renvoie une liste de toutes les commandes qui ont étélivrées au cours du mois de
janvier de n'importe quelle année.
13. Renvoie une liste de tous les paiements effectués en2008 viaPaypal. Classer les
résultats du plus élevé au plus bas.

14. Renvoie une liste de tous les modes de paiement répertoriés dans le tableau
despaiements. Veuillez noter qu'aucune forme de paiement répétée ne doit
apparaître.
15. Retourne une liste avec tous les produits qui appartiennent à la
gammeOrnamentals et qui ont plus de100 unités en stock. La liste est classée
par prix de vente, en commençant par les articles les plus chers.

16. Renvoie une liste de tous les clients de la ville deMadrid dont le représentant
commercial a le code d'employé11 ou30.
1.4.5 Requêtes multi-tables (composition interne)
Résoudre toutes les requêtes en utilisant la syntaxeSQL1 etSQL2. Les requêtes avec la
syntaxeSQL2 doivent être résolues avecINNER JOIN etNATURAL JOIN.

1. Obtenez une liste avec le nom de chaque client et le nom et le prénom de son
représentant commercial.

select customer.customer_name, employee.first_name,employee.last_name1

from customer join employee on


employee.employee_code=customer.employee_code_sales_rep_code

2. Affiche le nom des clients qui ont effectué des paiements ainsi que le nom de
leurs représentants commerciaux.
3. Affiche le nom des clients quin'ont pas effectué de paiement ainsi que le nom
de leurs représentants commerciaux.

4. Renvoie le nom des clients qui ont effectué des paiements et le nom de leurs
représentants ainsi que la ville du bureau auquel appartient le représentant.
5. Renvoie le nom des clients quin'ont pas effectué de paiements et le nom de
leurs représentants ainsi que la ville du bureau auquel appartient le représentant.

6. Indiquez l'adresse des bureaux qui ont des clients àFuenlabrada.


Renvoie le nom des clients et le nom de leurs représentants ainsi que la ville du
bureau auquel appartient le représentant.

8. Renvoie une liste contenant le nom des employés ainsi que le nom de leurs
supérieurs.
9. Renvoie le nom des clients auxquels une commande n'a pas été livrée à temps.
10. Renvoie une liste des différentes gammes de produits achetés par chaque client.
1.4.6 Requêtes multi-tables (composition externe)
Résoudre toutes les requêtes en utilisant les clausesLEFT JOIN,RIGHT JOIN,NATURAL LEFT
JOIN et NATURALRIGHT JOIN.

1. Renvoie une liste contenant uniquement les clients qui n'ont pas effectué de
paiement.
2. Renvoie une liste contenant uniquement les clients qui n'ont pas passé de
commande.

3. Renvoie une liste des clients qui n'ont pas effectué de paiement et de ceux qui
n'ont pas passé de commande.
4. Renvoie une liste contenant uniquement les employés qui n'ont pas de bureau
associé.

5. Retournez dans les bureaux oùaucun des employés qui ont été les représentants
d'un client ayant acheté un produit de la gammeFrutalesne travaille.

6. Renvoie une liste des employés qui n'ont pas de bureau associé et de ceux
qui n'ont pas de client associé.
7. Renvoie une liste de produits qui ne sont jamais apparus dans une
commande.

8. Retournez dans les bureaux où aucun des employés qui ont été les
représentants d'un client ayant acheté un produit de la gamme Frutales ne
travaille.

9. Renvoie une liste de clients qui ont passé une commande mais n'ont pas effectué
de paiement.

10. Renvoie une liste contenant les données des employés qui n'ont pas de clients
associés et le nom de leur responsable associé.
1.4.7 Requêtes récapitulatives
1. Combien de salariés compte l'entreprise ?

2. Combien de clients compte chaque pays ?


3. Quel a été le paiement moyen en 2009 ?

4. Combien y a-t-il de commandes dans chaque État ? Trier le résultat par ordre
décroissant du nombre de commandes.

5. Calculer le prix de vente du produit le plus cher et du produit le moins cher dans
la même requête.
6. Calculez le nombre de clients de l'entreprise.

7. Combien de clients compte la ville de Madrid ?

8.
Calculez le nombre de clients de chacune des villes commençant par M ?
M?
9.
Renvoie le nom des représentants commerciaux et le nombre de clients servis par chacun d'entre eu

10.
Calcule le nombre de clients auxquels aucun représentant commercial n'est affecté.

11.
Calcule la date du premier et du dernier paiement effectué par chaque client. La liste indique le pré
12. Calculez le nombre de produits différents dans chacune des commandes.

13. Calculez la somme des quantités totales de tous les produits énumérés dans
chacune des commandes.
14.
Renvoie une liste des 20 produits les plus vendus et le nombre total d'unités vendues pour chacun d

15.
Le chiffre d'affaires de l'entreprise tout au long de son histoire, avec indication de la base imposabl
order_detail. La TVA est de 21 % du
montant imposable et le total est la somme des deux champs ci-dessus.
16.
Les mêmes informations que dans la question précédente, mais regroupées par code de produit.

17.
Les mêmes informations que dans la question précédente, mais regroupées par code produit, filtrée
OR.
18. Liste des ventes totales de produits dont le chiffre d'affaires est supérieur à 3 000
euros. Le nom, les unités vendues, le total facturé et le total facturé avec taxe
(21% de TVA) seront affichés.

1.4.8 Sous-requêtes

1.4.8.1 Avec les opérateurs de comparaison de base

1. Renvoie le nom du client dont la limite de crédit est la plus élevée.

2. Renvoie le nom du produit dont le prix de vente est le plus élevé.


3.
Renvoie le nom du produit dont le nombre d'unités vendues est le plus élevé. (Notez que vous devr
order_detail. Une
fois que vous connaissez le code du produit, vous pouvez facilement obtenir le
nom du produit).

4.
Les clients dont la limite de crédit est supérieure aux paiements qu'ils ont effectués. (sans utiliser
INNER JOIN).

5. Retourne le produit ayant le plus grand nombre d'unités en stock.


6. Renvoyer le produit qui a le moins d'unités en stock.

7. Renvoie le nom, le prénom et l'adresse électronique des employés sous la


responsabilité d'Alberto Soria.

1.4.8.2 Sous-requêtes avec ALL et ANY

8. Renvoie le nom du client dont la limite de crédit est la plus élevée.


9. Renvoie le nom du produit dont le prix de vente est le plus élevé.

10. Renvoyer le produit qui a le moins d'unités en stock.

1.4.8.3 Sous-requêtes avec IN et NOT IN

11. Renvoie le prénom, le nom1 et la fonction des employés qui ne représentent pas
un client.
12. Renvoie une liste contenant uniquement les clients qui n'ont pas effectué de
paiement.

13. Renvoie une liste contenant uniquement les clients qui ont effectué un paiement.

14. Renvoie une liste de produits qui ne sont jamais apparus dans une commande.
15. Indique le prénom, le nom, la fonction et le numéro de téléphone au bureau des
employés qui ne sont pas des représentants commerciaux d'un client.

1.4.8.4 Sous-requêtes avec EXISTS et NOT EXISTS

16. Renvoie une liste contenant uniquement les clients qui n'ont pas effectué de
paiement.
17. Renvoie une liste contenant uniquement les clients qui ont effectué un paiement.
18. Renvoie une liste de produits qui ne sont jamais apparus dans une commande.

19. Renvoie une liste de produits qui ont déjà figuré dans une commande.

1.4.8.5 Sous-requêtes corrélées


1.4.9 Requêtes diverses
1.
Renvoie la liste des clients en indiquant le nom du client et le nombre de commandes qu'il a passée

2. Renvoie une liste contenant les noms des clients et le montant total payé par
chacun d'entre eux. Veuillez noter qu'il peut y avoir des clients qui n'ont effectué
aucun paiement.
3. Renvoie le nom des clients qui ont passé des commandes en 2008, triés par ordre
alphabétique du plus petit au plus grand.
4.
Renvoie la liste des clients avec le nom du client, le prénom et le nom du représentant et la ville où

5. Renvoie une liste indiquant toutes les villes où il y a des bureaux et le nombre
d'employés qu'elles comptent.

You might also like