===== EXEMPLE ============= SELECT S# FROM SPJ WHERE NOT EXISTS ( SELECT * FROM SPJ WHERE ) REM ===== NO 11 ====================================== SELECT * FROM P WHERE EXISTS ( SELECT * FROM SPJ WHERE SPJ.P#=P.P# AND EXISTS ( SELECT * FROM S WHERE CITY='London' AND SPJ.S#=S.S# ) ); REM ===== NO 11 =======SOUS=REQUETE=================== SELECT * FROM P WHERE P# IN ( SELECT P# FROM SPJ WHERE S# IN ( SELECT S# FROM S WHERE CITY='London' ) ); REM ===== NO 11 =======JOINTURE======================= SELECT DISTINCT P.* FROM S, SPJ,P WHERE SPJ.S#=S.S# AND SPJ.P#=P.P# AND S.City='London'; REM ===== NO 12 =======EXISTS========================= SELECT * FROM P WHERE EXISTS ( SELECT * FROM SPJ WHERE SPJ.P#=P.P# AND EXISTS ( SELECT * FROM S WHERE CITY='London' AND SPJ.S#=S.S# ) AND EXISTS ( SELECT * FROM J WHERE CITY='London' AND SPJ.J#=J.J# ) ); REM ===== NO 14 =======EXISTS========================= SELECT JNAME FROM J WHERE EXISTS ( SELECT * FROM SPJ WHERE J.J#=SPJ.J# AND SPJ.S#='S2' ); SELECT JNAME FROM J WHERE J# IN ( SELECT J# FROM SPJ WHERE S#='S2' ); SELECT DISTINCT JNAME FROM J, SPJ WHERE J.J#=SPJ.J# AND SPJ.S#='S2'; REM ===== NO 18 =======EXISTS========================= SELECT DISTINCT P# FROM SPJ WHERE EXISTS ( SELECT * FROM J WHERE CITY='London' AND J.J#=SPJ.J# ); SELECT DISTINCT P# FROM SPJ WHERE J# IN ( SELECT J# FROM J WHERE CITY='London' ); SELECT DISTINCT P# FROM P,J,SPJ REM ===== NO 19 =======EXISTS========================= SELECT DISTINCT J# FROM SPJ WHERE EXISTS ( SELECT * FROM SPJ SPJ1 WHERE S#='S4' AND SPJ.P#=SPJ1.P# ); SELECT J# FROM SPJ WHERE P# IN ( SELECT P# FROM SPJ WHERE S#='S4' ); REM ===== NO 20 =======EXISTS========================= REM ===== NO 21 =======EXISTS========================= SELECT SName FROM S WHERE EXISTS ( SELECT * FROM S S1 WHERE S1.S#='S1' AND S.Status < S1.Status ); SELECT SNAME FROM S WHERE STATUS < ( SELECT STATUS FROM S WHERE s#='S1' ); REM ===== NO 32 =======EXISTS========================= SELECT JNAME FROM J WHERE NOT EXISTS ( SELECT * FROM SPJ WHERE J.J#=SPJ.J# AND EXISTS ( SELECT * FROM P WHERE Color='Red' AND P.P#=SPJ.P# ) ) AND NOT EXISTS ( SELECT * FROM SPJ WHERE J.J#=SPJ.J# AND EXISTS ( SELECT * FROM S WHERE City='London' AND S.S#=SPJ.S# ) ); REM ==== 32 === DEVRAIT DONNER TOUS LES PROJETS SELECT JName FROM J WHERE J# IN ( SELECT J# FROM SPJ WHERE P# NOT IN ( SELECT P# FROM SPJ WHERE S# IN ( SELECT S# FROM S WHERE CITY='London' ) AND P# IN ( SELECT P# FROM P WHERE COLOR='Red' ) ) ); SELECT JName FROM J WHERE NOT EXISTS ( SELECT * FROM SPJ, S, P WHERE SPJ.J#=J.J# AND SPJ.S#=S.S# AND SPJ.P#=P.P# AND S.CITY='London' AND COLOR='Red' ); SELECT JName FROM J WHERE NOT EXISTS ( SELECT * FROM SPJ WHERE SPJ.J#=J.J# AND S# IN ( SELECT S# FROM S WHERE CITY='London' ) AND P# IN ( SELECT P# FROM P WHERE COLOR='Red' ) ); SELECT JName FROM J WHERE NOT EXISTS ( SELECT * FROM SPJ WHERE SPJ.J#=J.J# AND EXISTS ( SELECT * FROM S WHERE S.S#=SPJ.S# AND CITY='London' ) AND EXISTS ( SELECT * FROM P WHERE P.P#=SPJ.P# AND COLOR='Red' ) ); REM ==== 33 === DEVRAIT DONNER TOUS LES PROJETS SELECT DISTINCT PName FROM P, SPJ WHERE P.P#=SPJ.P# AND NOT EXISTS ( SELECT * FROM SPJ WHERE S#!='S5' AND P.P#=SPJ.P# ); REM Optimal SELECT DISTINCT PName FROM P WHERE P# IN ( SELECT P# FROM SPJ ) AND NOT EXISTS ( SELECT * FROM SPJ WHERE S#!='S5' AND P.P#=SPJ.P# ); REM ==== 34 === SELECT PName FROM P WHERE NOT EXISTS ( SELECT * FROM J WHERE CITY='London' AND NOT EXISTS ( SELECT * FROM SPJ WHERE P.P#=SPJ.P# AND J.J#=SPJ.J# ) );
REM ======= Lab 7 ================== DELETE FROM ClientsImage; DELETE FROM ContratsImage; DELETE FROM DepensesImage; DELETE FROM FacturesImage; COLUMN Numéro Format 99 COLUMN Client FORMAT A10 COLUMN Adresse FORMAT A50 COLUMN Téléphone FORMAT A15 COLUMN NUMCONTRAT FORMAT 999 COLUMN NOMCONTRAT FORMAT A10 COLUMN VALEURCONTRAT FORMAT 9999999 COLUMN BUDGETDEPENSESCONTRAT FORMAT 9999999 REM ==== Requete 1 ================================== SELECT NumeroClient AS "Numéro", NomClient AS "Client", RueClient||' '||VilleClient||' '||ProvinceClient||' '||CodePostalClient||' '||PaysClient AS "Adresse", TelephoneClient AS "Téléphone" FROM ClientsImage ORDER BY NomClient; REM ==== Requete 2 ================================== COLUMN ContratsImage FORMAT A8 SELECT NumContrat AS "Numéro", NomContrat AS "Contrat", To_Char(ValeurContrat*0.8,'$9999,990.00') AS "Valeur US", To_Char(BudgetDepensesContrat*0.8,'$9999,990.00') AS "Budget dépenses" FROM ContratsImage ORDER BY NomContrat, NumContrat DESC; REM ==== Requete 3 ================================== SELECT DISTINCT NumeroClient AS "Numéro du client" FROM ContratsImage; REM ==== Requete 4 ================================== SELECT DISTINCT NomResponsableContrat FROM ContratsImage WHERE Bureau IN ('Montréal', 'Paris') AND SECTION IN ('Cinéma','Publicité'); REM ==== Requete 5 ================================== SELECT SYSDATE FROM DUAL; SELECT * FROM ContratsImage WHERE to_Char(DateDebutContrat,'YYYY')='2000' AND to_Char(DateFinContrat,'YYYY')='2000'; REM ==== Requete 6 ================================== SELECT * FROM ContratsImage WHERE to_Char(DateDebutContrat,'YYYY')<'2001' AND to_Char(DateFinContrat,'YYYY')>'1999'; REM ==== Requete 7 ================================== SELECT * FROM ContratsImage WHERE (to_Char(DateDebutContrat,'YYYY')=2000 OR to_Char(DateFinContrat,'YYYY')=2000) AND (to_Char(DateDebutContrat,'YYYY')<>to_Char(DateFinContrat,'YYYY')); SELECT * FROM ContratsImage WHERE NOT (to_Char(DateDebutContrat,'YYYY')=2000 AND to_Char(DateFinContrat,'YYYY')=2000); REM ==== Requete 8 ================================== SELECT * FROM ContratsImage WHERE (to_Char(DateDebutContrat,'YYYY')<'2000' AND to_Char(DateFinContrat,'YYYY')<'2000') OR (to_Char(DateDebutContrat,'YYYY')>'2000' AND to_Char(DateFinContrat,'YYYY')>'2000'); REM ==== Requete 9 ================================== SELECT * FROM ClientsImage WHERE PaysClient = 'Canada' AND CodePostalClient LIKE 'K1%' ORDER BY NomClient; REM ==== Requete 10 ================================== SELECT NumContrat AS "NumCont", NomContrat AS "Contrat", NomClient AS "Client", ValeurContrat AS "Valeur", DateDebutContrat AS "Debut", DateFinContrat AS "Fin", SECTION AS "Section" FROM ContratsImage, ClientsImage WHERE ContratsImage.NumeroClient=ClientsImage.NumeroClient ORDER BY DateDebutContrat; REM ==== Requete 11 ================================== SELECT CodeDepense AS "Code", DateDepense AS "Date", MontantDepense AS "Montant", NumeroContrat AS "Contrat", NomContrat AS "Nom de Contrat", DateDebutContrat AS "Début", DateFinContrat AS "Fin", NomClient AS "Client" FROM DepensesImage, ContratsImage, ClientsImage WHERE DepensesImage.NumeroContrat=ContratsImage.NumContrat AND ContratsImage.NumeroClient=ClientsImage.NumeroClient AND to_Char(DateDepense,'YYYY')=2000 AND TypeDepense='Travail interne'; REM ==== Requete 12 ================================== SELECT ClientsImage.NumeroClient AS "#Client", NomClient, VilleClient, NumContrat, NomContrat, Bureau FROM ClientsImage,ContratsImage WHERE ClientsImage.NumeroClient=ContratsImage.NumeroClient AND VilleClient=Bureau; REM ==== Requete 13 ================================== SELECT ContratsImage.* FROM ContratsImage, ClientsImage WHERE ContratsImage.NumeroClient=ClientsImage.NumeroClient AND NomClient='Dupont'; SELECT * FROM ContratsImage WHERE ContratsImage.NumeroClient IN ( SELECT NumeroClient FROM ClientsImage WHERE NomClient='Dupont' ); SELECT * FROM ContratsImage WHERE EXISTS ( SELECT * FROM ClientsImage WHERE NomClient='Dupont' AND ContratsImage.NumeroClient=NumeroClient ); REM ==== Requete 14 ================================== SELECT VilleClient FROM ClientsImage WHERE NumeroClient IN ( SELECT NumeroClient FROM ContratsClient WHERE Bureau= SELECT ClientsImage.VilleClient FROM ClientsImage, ( SELECT Bureau FROM ContratsImage WHERE WHERE NumeroClient IN ( SELECT NumeroClient FROM ContratsClient WHERE Bureau= SELECT DISTINCT ClientsImage.VilleClient AS "Ville du client", ContratsImage.Bureau AS "Bureau du contrat" FROM ClientsImage, ContratsImage WHERE ClientsImage.NumeroClient=ContratsImage.NumeroClient; REM ==== Requete 15 ================================== SELECT NumContrat FROM ContratsImage WHERE NumContrat IN ( SELECT NumContrat FROM DepensesImage WHERE TypeDepense IN ( SELECT TypeDepense FROM DepensesImage WHERE NumContrat=1 ) ); SELECT DISTINCT NumContrat FROM ClientsImage, ContratsImage GROUP BY ClientsImage.NumeroClient HAVING ClientsImage.NumeroClient=ContratsImage.NumeroClient; WHERE ClientsImage.NumeroClient=ContratsImage.NumeroClient SELECT DISTINCT ClientsImage.NumeroClient, NumContrat FROM ClientsImage, ContratsImage GROUP BY ClientsImage.NumeroClient, NumContrat SELECT C1.NumContrat, C2.NumContrat FROM ContratsImage C1, ContratsImage C2 WHERE C1.NumeroClient=C2.NumeroClient AND C1.NumContrat<C2.NumContrat; REM ==== Requete 16 ================================== SELECT DISTINCT NumeroContrat FROM DepensesImage WHERE TypeDepense IN ( SELECT TypeDepense FROM DepensesImage WHERE NumeroContrat=1 ); REM ==== Requete 17 ================================== SELECT NumContrat, NomContrat FROM ContratsImage WHERE ValeurContrat>( SELECT ValeurContrat FROM ContratsImage WHERE NumContrat=7 ); REM ==== Requete 18 ================================== SELECT DISTINCT NumContrat, NomContrat FROM ContratsImage WHERE ValeurContrat < ( SELECT MAX(ValeurContrat) FROM ContratsImage WHERE NumeroClient IN ( SELECT NumeroClient FROM ClientsImage WHERE VilleClient='Toronto' ) );
-- Lab no 8 -- exercice no 5 (vues) CREATE OR REPLACE VIEW Contrats AS SELECT NumContrat, NomContrat, NomResponsableContrat, DateDebutContrat, DateFinContrat FROM ContratsImage; GRANT ALL ON Contrats TO etudiant57, etudiant52; -- exercice no 6 CREATE OR REPLACE VIEW Factures AS SELECT NumFacture, DateFacture, MontantFacture, NumContrat, NomContrat, DateDebutContrat, DateFinContrat, NomClient FROM FacturesImage, ContratsImage, ClientsImage WHERE FacturesImage.NumeroContrat=ContratsImage.NumContrat AND ContratsImage.NumeroClient=ClientsImage.NumeroClient; GRANT SELECT ON Factures TO etudiant57, etudiant52; -- exercice no 7 CREATE OR REPLACE VIEW FacturesContrat AS SELECT NumContrat, NomContrat, COUNT(NumFacture) Nombre, SUM(MontantFacture) Somme FROM FacturesImage, ContratsImage WHERE FacturesImage.NumeroContrat=ContratsImage.NumContrat GROUP BY NumContrat, NomContrat; GRANT SELECT ON Contrats TO etudiant57, etudiant52;