Vous êtes sur la page 1sur 9

Exercice unique

Une base de données COMMERCE est constituée comme suite

PRODUITS (RefArt, Designation, Prix CodeTVA, Categorie, OteStck)

CLIENTS (Nucli. Nomali, Adreli, Villech)

COMMANDES (Nucde Nucli. Datecde)

LIGNECDES (Nucde, Nulig, RefArt, Qtecde)

Ecrire avec le langage SQL*Plus les requêtes suivantes.

1) Se connecter à la base COMMERCE comme System Admin

2) Affiche la version d'Oracle installé sur le server

3) Créer les tables de la base de données

4) Afficher designation et pnx unitaire de tous les produits

5) Afficher désignation des produits de prix inférieur à 100F

6) Afficher Nom des clients qui ont commandé le produit n° 1.

7) Afficher Nom des clients qui ont commandé au moins un produit de prix supérieur à 500 F

8) Afficher Nom des clients qui n'ont pas commandé le produit n° 1

9) Numéro des clients qui ont commandé tous les produits.


10) Afficher Numéro des clients qui ont commandé produits commandés par le client n° 2.

Je peux vous aider avec les requêtes SQL*Plus pour répondre aux questions posées dans votre
devoir. Cependant, veuillez noter que certaines requêtes peuvent varier en fonction de la structure
et des données spécifiques de votre base de données. Il est important de comprendre les concepts et
la logique de chaque requête afin de pouvoir les adapter à votre propre base de données.

Pour se connecter à la base COMMERCE en tant que System Admin, utilisez la commande suivante :

sql

Copy code

CONNECT system/password@database_name

où "system" est le nom d'utilisateur, "password" est le mot de passe et "database_name" est le nom
de la base de données.

Pour afficher la version d'Oracle installée sur le serveur, utilisez la commande suivante :

sql

Copy code

SELECT * FROM v$version;

Pour créer les tables de la base de données, vous pouvez utiliser les commandes CREATE TABLE, par
exemple :

sql

Copy code

CREATE TABLE PRODUITS (

RefArt INT PRIMARY KEY,

Designation VARCHAR(50),

Prix FLOAT,

CodeTVA INT,

Categorie VARCHAR(50),
OteStck INT

);

CREATE TABLE CLIENTS (

Nucli INT PRIMARY KEY,

Nomali VARCHAR(50),

Adreli VARCHAR(100),

Villech VARCHAR(50)

);

CREATE TABLE COMMANDES (

Nucde INT,

Nucli INT,

Datecde DATE,

PRIMARY KEY (Nucde, Nucli),

FOREIGN KEY (Nucli) REFERENCES CLIENTS(Nucli)

);

CREATE TABLE LIGNECDES (

Nucde INT,

Nulig INT,

RefArt INT,

Qtecde INT,

PRIMARY KEY (Nucde, Nulig),

FOREIGN KEY (Nucde) REFERENCES COMMANDES(Nucde),

FOREIGN KEY (RefArt) REFERENCES PRODUITS(RefArt)

);

Pour afficher la désignation et le prix unitaire de tous les produits, utilisez la commande suivante :

sql

Copy code

SELECT Designation, Prix FROM PRODUITS;


Pour afficher la désignation des produits dont le prix est inférieur à 100F, utilisez la commande
suivante :

sql

Copy code

SELECT Designation FROM PRODUITS WHERE Prix < 100;

Pour afficher le nom des clients qui ont commandé le produit n° 1, utilisez la commande suivante :

sql

Copy code

SELECT CLIENTS.Nomali

FROM CLIENTS

INNER JOIN COMMANDES ON CLIENTS.Nucli = COMMANDES.Nucli

INNER JOIN LIGNECDES ON COMMANDES.Nucde = LIGNECDES.Nucde

WHERE LIGNECDES.RefArt = 1;

Pour afficher le nom des clients qui ont commandé au moins un produit dont le prix est supérieur à
500F, utilisez la commande suivante :

sql

Copy code

SELECT DISTINCT CLIENTS.Nomali

FROM CLIENTS

INNER JOIN COMMANDES ON CLIENTS.Nucli = COMMANDES.Nucli

INNER JOIN LIGNECDES ON COMMANDES.Nucde = LIGNECDES.Nucde

INNER JOIN PRODUITS ON LIGNECDES.RefArt = PRODUITS.RefArt

WHERE PRODUITS.Prix > 500;

Pour afficher le nom des clients qui n'ont pas commandé le produit n° 1, utilisez la commande
suivante :

mathematica

Copy code

SELECT CLIENTS.N
User

continue stp

ChatGPT

Pour afficher le nom des clients qui n'ont pas commandé le produit n° 1, utilisez la commande
suivante :

sql

Copy code

SELECT CLIENTS.Nomali

FROM CLIENTS

WHERE CLIENTS.Nucli NOT IN (

SELECT DISTINCT CLIENTS.Nucli

FROM CLIENTS

INNER JOIN COMMANDES ON CLIENTS.Nucli = COMMANDES.Nucli

INNER JOIN LIGNECDES ON COMMANDES.Nucde = LIGNECDES.Nucde

WHERE LIGNECDES.RefArt = 1

);

Pour afficher le numéro des clients qui ont commandé tous les produits, vous pouvez utiliser la
commande suivante :

sql

Copy code

SELECT DISTINCT COMMANDES.Nucli

FROM COMMANDES

INNER JOIN LIGNECDES ON COMMANDES.Nucde = LIGNECDES.Nucde

GROUP BY COMMANDES.Nucli

HAVING COUNT(DISTINCT LIGNECDES.RefArt) = (

SELECT COUNT(*) FROM PRODUITS

);

Cette requête utilise une sous-requête pour obtenir le nombre total de produits dans la table
PRODUITS, puis utilise la clause HAVING pour sélectionner uniquement les clients qui ont commandé
ce nombre de produits distincts.

Pour afficher le numéro des clients qui ont commandé des produits commandés par le client n°2,
utilisez la commande suivante :
sql

Copy code

SELECT DISTINCT COMMANDES.Nucli

FROM COMMANDES

INNER JOIN LIGNECDES ON COMMANDES.Nucde = LIGNECDES.Nucde

WHERE LIGNECDES.RefArt IN (

SELECT DISTINCT LIGNECDES.RefArt

FROM COMMANDES

INNER JOIN LIGNECDES ON COMMANDES.Nucde = LIGNECDES.Nucde

WHERE COMMANDES.Nucli = 2

);

Cette requête utilise une sous-requête pour obtenir tous les produits commandés par le client n°2,
puis utilise la clause IN pour sélectionner les clients qui ont commandé au moins l'un de ces produits.

EPREUVE D'ORACLE

Question de cours

1) Différence entre SQL déclaratif et procédurale

2) Différence LDD et LMD

3) Donnez deux commandes LDD avec syntaxe et exemple

4) Donnez deux commandes LMD avec syntaxe et exemple 5) Qu'est-ce que LCD et que font les
commandes GRANT et

REVOKE?
La différence entre SQL déclaratif et procédural est que SQL déclaratif décrit ce qu'il faut récupérer
ou modifier, tandis que SQL procédural décrit comment cela doit être fait. En d'autres termes, SQL
déclaratif utilise des requêtes pour décrire ce que l'on souhaite obtenir, tandis que SQL procédural
utilise des procédures stockées et des fonctions pour décrire comment l'obtenir.

LDD (Langage de Définition de Données) est utilisé pour définir la structure des bases de données,
tandis que LMD (Langage de Manipulation de Données) est utilisé pour manipuler les données au
sein des tables de la base de données.

Deux commandes LDD avec syntaxe et exemple sont :

CREATE TABLE : Cette commande est utilisée pour créer une nouvelle table dans la base de données.
La syntaxe est la suivante :

rust

Copy code

CREATE TABLE table_name (

column1 datatype constraints,

column2 datatype constraints,

column3 datatype constraints,

...

);

Par exemple, pour créer une table "clients" avec les colonnes "id", "nom" et "email", la commande
serait :

sql
Copy code

CREATE TABLE clients (

id INT PRIMARY KEY,

nom VARCHAR(50) NOT NULL,

email VARCHAR(255)

);

ALTER TABLE : Cette commande est utilisée pour modifier la structure d'une table existante dans la
base de données. La syntaxe est la suivante :

sql

Copy code

ALTER TABLE table_name action;

Par exemple, pour ajouter une nouvelle colonne "adresse" à la table "clients", la commande serait :

sql

Copy code

ALTER TABLE clients

ADD adresse VARCHAR(255);

Deux commandes LMD avec syntaxe et exemple sont :

INSERT INTO : Cette commande est utilisée pour insérer de nouvelles données dans une table
existante. La syntaxe est la suivante :

sql

Copy code

INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...);

Par exemple, pour insérer une nouvelle ligne dans la table "clients" avec les valeurs "1", "John Doe"
et "johndoe@example.com", la commande serait :

sql

Copy code

INSERT INTO clients (id, nom, email) VALUES (1, 'John Doe', 'johndoe@example.com');
UPDATE : Cette commande est utilisée pour modifier des données existantes dans une table. La
syntaxe est la suivante :

sql

Copy code

UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition;

Par exemple, pour modifier l'adresse d'un client avec l'id "1" dans la table "clients", la commande
serait :

sql

Copy code

UPDATE clients SET adresse = '123 Rue de la Paix' WHERE id = 1;

LCD (Langage de Contrôle des Données) est utilisé pour gérer les autorisations d'accès aux données
dans une base de données. Les commandes GRANT et REVOKE sont utilisées pour accorder et
révoquer des privilèges d'accès à des utilisateurs ou des rôles.

GRANT : Cette commande est utilisée pour accorder des privilèges à un utilisateur ou un rôle. La
syntaxe est la suivante :

vbnet

Copy code

GRANT privilege_name ON object_name TO user_or_role;

Par exemple,

Vous aimerez peut-être aussi