0% found this document useful (0 votes)
48 views

Création Des Tables de La Base de Données

This document describes the creation of tables, views, and complex data types in PostgreSQL. It includes: 1) The creation of tables to store information about clients, orders, products, and order details. Primary and foreign keys are defined. 2) The insertion of sample data into the tables. 3) The creation of a view called COM_COMPLETE to display client, order, and client name information from related tables. Views are described as virtual tables defined by a query. 3) Additional views and complex data types like arrays and rows are demonstrated to summarize purchase habits and calculate stock values. Views allow expressing complex queries and act as interfaces to restrict access to certain data.

Uploaded by

Yasser CH
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
48 views

Création Des Tables de La Base de Données

This document describes the creation of tables, views, and complex data types in PostgreSQL. It includes: 1) The creation of tables to store information about clients, orders, products, and order details. Primary and foreign keys are defined. 2) The insertion of sample data into the tables. 3) The creation of a view called COM_COMPLETE to display client, order, and client name information from related tables. Views are described as virtual tables defined by a query. 3) Additional views and complex data types like arrays and rows are demonstrated to summarize purchase habits and calculate stock values. Views allow expressing complex queries and act as interfaces to restrict access to certain data.

Uploaded by

Yasser CH
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 5

YASSER CHOUBI /G2

UCA/ESTS
Tp1 en SGBD (SQL3 sous POSTGRESQL)
Vues, types SQL3
---------------------------------------Création des tables de la base de données---------------------
DROP TABLE Client CASCADE;
DROP TABLE Commande CASCADE;
DROP TABLE Produit CASCADE ;
DROP TABLE Detail;
CREATE TABLE Client (
NCli VARCHAR PRIMARY KEY,
Nom VARCHAR,
Adresse VARCHAR,
Localité VARCHAR,
Cat VARCHAR,
Compte REAL
);

CREATE TABLE Commande (


NCom INT PRIMARY KEY,
NCli VARCHAR,
DateCom DATE,
FOREIGN KEY(NCli) REFERENCES Client(NCli)
ON UPDATE CASCADE
ON DELETE CASCADE
);

CREATE TABLE Produit (


NProd VARCHAR PRIMARY KEY,
Libelle VARCHAR,
Prix INT,
QStock INT
);

CREATE TABLE Detail (


NCom INT,
NProd VARCHAR,
QCom INT,
PRIMARY KEY(NCom,NProd),
FOREIGN KEY (NCom) REFERENCES Commande(NCom)
ON UPDATE CASCADE
ON DELETE CASCADE,
FOREIGN KEY (Nprod) REFERENCES Produit(NProd)
ON UPDATE CASCADE
ON DELETE CASCADE
);

------------------------------------------Insertion des données-------------------------------


--Table client
DELETE FROM Client;
INSERT INTO Client VALUES('B062','Badri','72,r de la gare','Rabat','B2',-3200),
('B112','Hosni','23,r Ward','Safi','C1',1250),('B332','Hasbi','112,r jadida','Marrakech','B2',0),
('B512','Adib','14,r borj','Agadir','B1',-8700),('C003','Adnane','25,r farah','Agadir','B1',-1700),
('C123','Kabori','8,r Lafayette','Kenitra','C1',-2300),('C400','Fadel','65,r
citronier','Safi','B2',350),
('D063','Adnane','201,bvd des FAR','Agadir',' ',-2250),('F010','Tahiri','5,r daya','Safi','C1',0),
('F011','Nasser','17,r grenade','Agadir','B2',0),('F400','Naciri','78,ch du moulin','Tanger','C2',0),
('K111','Haddi','180,r Abir','Oujdai','B1',720),('K729','Nadir','40,r Badis','Agadir',' ',0),
('L422','Ali','60,r de fleurs','Tit Mellil','C1',0),('S127','Ghamidi','3,av des roses','Tit
Mellil','C1',-4580),
('S712','Naoumi','14a,ch des forêts','Casablanca','B1 ',0);

--Table commande
DELETE FROM Commande;
INSERT INTO Commande VALUES(30178,'K111','2017-12-21'),(30179,'C400','2017-12-
22'),
(30182,'S127','2017-12-23'),(30184,'C400','2017-12-23'),(30185,'F011','2018-01-02'),
(30186,'C400','2018-01-02'),(30188,'B512','2018-01-03');
--Table produit
DELETE FROM Produit;
INSERT INTO Produit VALUES('BP156','Bur.PC 150*60',1500,145), ('BP26','Bur.PC
200*60',1600,2690),
('BC15156','Bur.Coin 150*150*60',2500,1450),('CF','Chais.Faut',1500,580),
('CFG','Chais.Faut.Glis',3500,334),('C435','Class 40*35',150,782),
('C454','Class 45*40',180,1220);
--Table detail
DELETE FROM Detail;
INSERT INTO Detail VALUES(30178,'BC15156',25),(30179,'BP156',60),
(30179,'CFG',20),(30182,'CFG',30),(30184,'BC15156',120),
(30184,'CF',20),(30185,'BC15156',260),(30185,'CFG',15),
(30185,'C435',600),(30186,'CF',3),(30188,'BC15156',180),
(30188,'CF',22),(30188,'CFG',70),(30188,'C435',92);
-----------------------------------------------------------------------------
************************Principes et objectifs des vues**************************

-- Une vue = une table virtuelle (seule sa définition est stockée sous forme d'une requête et
non son contenu)

CREATE VIEW COM_COMPLETE(NCom,NCli,NOMCli,Loc,DateCom)


AS SELECT NCom,Com.NCli,NOM,Localité, DateCom
FROM Client Cli, Commande Com
WHERE Com.NCli=Cli.NCli;

SELECT NCom,NOMCli FROM COM_COMPLETE WHERE Loc ='Agadir';


SELECT NCom,NOMCli FROM COM_COMPLETE WHERE NCli='C400';

SELECT * FRom COM_COMPLETE;


-- On peut alors utiliser la vue comme une table ordinaire, ci-dessous des requêtes sur la vue
en tant que table:
SELECT NOMCli,NCom,DateCom
FROM COM_COMPLETE
WHERE Loc = 'Agadir';
--Ecrire une requête qui permet de donner le nombre des localités des clients
-- qui ont fait des commandes en utilisant la vue COM_COMPLETE
--pour supprimer une vue on utilise Drop
DROP VIEW COM_COMPLETE;

-- On peut utiliser une vue comme interface pour des besoins particuliers afin d'éviter
-- la complexité d'une base de données dont seules quelques données nous sont utiles

DROP VIEW Habitude_Achat;


CREATE VIEW Habitude_Achat(Localité,NProd,Volume)
AS SELECT Localité, P.NProd, SUM(QCom*Prix)
FROM Client Cli, Commande Com, Detail D, Produit P
WHERE Com.NCli = Cli.NCli
AND D.NCom = Com.NCom
AND P.Nprod = D.NProd
GROUP BY localité, P.NProd;
----Pour voir le résultat
SELECT * FROM Habitude_Achat;

-- Les vues permettent aussi l'expression de requêtes complexes délicates ou impossibles à


-- rédiger directement sous la forme SFW (Select From Where) en SQL. EX: calcul de la
-- valeur globale des stocks en retranchant les quantités commandées. Cela peut se faire en
-- deux étapes comme suit:

CREATE VIEW Val_Stock_Actu(Stock,Valeur)


AS SELECT P.NProd, (QStock-SUM(D.QCom))*Prix
FROM Detail D, Produit P
WHERE P.Nprod = D.NProd
GROUP BY P.Nprod, QStock, Prix;
----*****
SELECT SUM(Valeur) FROM Val_Stock_Actu;

---Une contrainte d'intégrité peut être associée à une vue modifiable grâce à la clause
-- additionnelle WITH CHECK OPTION
DROP VIEW Cli;
CREATE VIEW Cli(NCli,Nom,Adresse,Localité,Cat,Compte) AS
SELECT NCli,Nom,Adresse,Localité,Cat,Compte
FROM Client
WHERE Cat is NULL OR Cat in ('B1','B2','C1','C2')
WITH CHECK OPTION;
--La requête suivante sera exécutée
INSERT INTO Client VALUES ('B313','Damou','place My Youssef','Casablanca','D7',0);
SELECT * FROM Client WHERE NCli = 'B313';
SELECT * FROM Cli;
*********************Extensions Objet de SQL3**********************
--Types de données complexes
--Constructeur ROW: pour déclare un type composite sous Postgresql, il faut créer un type et
-- utiliser ROW au moment de l'insertion des données

CREATE TYPE ADR AS (


Rue CHAR(30),
Localité CHAR(60));

CREATE TABLE Client (


NCli CHAR(10) NOT NULL PRIMARY KEY,
Nom CHAR(32) NOT NULL,
Adresse ADR,
Cat CHAR(2));
INSERT INTO Client VALUES ('B332','Kadi', ROW('r. Neuve','Genève'),'B2');
SELECT * FROM Client;
SELECT * FROM Client WHERE (Adresse).Localité ='Genève';
--ou bien
SELECT * FROM Client WHERE (Client.Adresse).Localité ='Genève';
UPDATE Client SET Adresse = ROW('r.Neuve','Rome') WHERE NCli = 'B332';
---Constructeur ARRAY
DROP TABLE Client2;
SELECT * FROM Client2;
DELETE FROM Client2;
CREATE TABLE Client2 (
NCli CHAR(10) NOT NULL PRIMARY KEY,
Nom CHAR(32) NOT NULL,
Prenom CHAR(15)[4],
Adresse ADR[2],
Cat CHAR(2));

-- Tester ces commandes et préciser la différence entre elles, chercher la


-- signification de ::
INSERT INTO Client2 VALUES ('B339','Fadi','{''Ali'',''Ahmad''}',ARRAY['(r
Neuve,Genève)','(place MedV,Casablanca)']::ADR[2],'B2');

INSERT INTO Client2 SELECT 'B339','Fadi','{Ali,Ahmad,Adil,Khalil}',ARRAY[ROW('r


Neuve','Genève')::ADR,ROW('place MedV','Casablanca')::ADR],'B2';
---ou bien
INSERT INTO Client2 VALUES ('B339','Fadi','{Ali,Ahmad,Adil,Khalil}',ARRAY[ROW('(r
Neuve,Genève)','(place MedV,Casablanca)')::ADR],'B2');

--requêtes sur Array


SELECT pay_by_quarter[3] FROM sal_emp;
SELECT Prenom[2] FROM Client2;
SELECT Adresse[2] FROM Client2;
SELECT array_dims(Adresse) FROM Client2;
SELECT * FROM Client2 WHERE (Client2.Adresse).Rue= 'r Neuve';
*****************************
--TRAVAIL A FAIRE
--Créer la table suivante en expliquant d'abord la 1ere instruction
CREATE SEQUENCE employe_employe_id_seq;
CREATE TABLE employe
(
employe_id integer NOT NULL DEFAULT nextval('employe_employe_id_seq'),
employe_nom character varying(30) NOT NULL,
employe_prenom character varying(20) NOT NULL,
employe_competences character varying(50)[],
employe_telephones character(14)[],
CONSTRAINT employe_pkey PRIMARY KEY (employe_id)
);

--Insérer les données:


('Szalkowski','Denis', ['SQL','PostgreSQL','SQL Server','Oracle
Database','MariaDB','SQLite']);
('Szalkowski','Denis', '{"Scripting","PowerShell","Perl","PHP","Shell","Bash"}');

('Szalkowski','Denis', ['Linux','Fedora Server','CentOS','Red Hat','Ubuntu


Server','Debian','openSUSE','SUSE']);

-- Mettre à jour la table employe en insérant dans la première valeur de employe_telephones


-- le numéro de téléphone '06.70.37.31.91' où employe_id=2;
-- Afficher l'identité de l'employé, ses deuxièmes compétences ainsi que son premier numéro

Reponse de la question :

Select count(distinct Loc) from COM_COMPLETE;

You might also like