- Licence Fondamentale d'Informatique
lundi 25 mars 2013

Exercice Langage SQL : BD Cinéma (Partie1)


Énoncé de l'Exercice (BD Cinéma):
Les attributs NUM, NUM, NUMA, NUMC, NUMS sont des identifiants uniques (clés primaires)  pour  respectivement : FILM, PERSONNE, ACTEUR, CINÉMA, SALLE.
Un de ces attributs utilisé comme attribut d’une autre relation est une clé étrangère qui renvoie à la clé primaire de la relation correspondante, par exemple dans GÉNÉRIQUE, NUMF renvoie au NUMF de FILM et est défini sur le même domaine.
De plus, les attributs RÉALISATEUR dans FILM et NUMA dans ACTEUR sont définis sur le domaine des NUMP, et renvoient au NUMP de la personne correspondante.

SQ1

Réaliser les Requêtes suivantes:


Requête 1 : Retrouver la liste de tous les films.
Requête 2 : Retrouver la liste des films dont la longueur dépasse 180 min.
Requête 3 : Donner la liste de tous les genres de film.
Requête 4 : Trouver le titre et l’année des films de science fiction dont le budget dépasse 5.000.000 $.
Requête 5 : Donner le nombre de films par genre.
Requête 6 : Donner le nombre de films de 1960 par genre.
Requête 7 : Trouver le titre des films réalisés par Roman Polanski.
Requête 8 : Quels sont les acteurs comiques (nom, prénom) qui ont joué dans un film de Spielberg.
Requête 9 : Trouver le titre et l’année du film le plus long.
Requête 10 : Nom et prénom des acteurs qui ont joué Gavroche dans les différentes versions des « Misérables » avec les dates correspondantes.
Requête 11 : Donner le nom et le prénom des réalisateurs qui ont joué dans au moins un de leurs propres films.





1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
Requête 1 : Retrouver la liste de tous les films.
 
SELECT * FROM FILM
 
Requête 2 : Retrouver la liste des films dont la longueur dépasse 180 min.
 
SELECT * FROM FILM
WHERE LONGUEUR > 180
 
Requête 3 : Donner la liste de tous les genres de film.
 
SELECT DISTINCT GENRE
FROM FILM
 
Requête 4: Trouver le titre et l’’année des films de science fiction dont le budget dépasse 5.000.000 $.
 
SELECT TITRE, ANNÉE 
FROM FILM
WHERE GENRE = ‘SciFi’
ANDBUDGET > 5000000
 
Requête 5 : Donner le nombre de films par genre.
 
SELECT  GENRE, COUNT (*)
FROM FILM
GROUP BY GENRE
 
Requête 6 : Donner le nombre de films de 1960 par genre.
 
SELECT GENRE, COUNT (*)
FROM FILM
WHERE ANNÉE = 1960
GROUP BY GENRE
 
Requête 7  Trouver le titre des films réalisés par Roman Polanski
 
Forme plate :
 SELECT F.TITRE
 FROM FILM F, PERSONNE P
 WHERE F.RÉALISATEUR = P.NUMP
 AND P.PRÉNOM = ‘Roman’
 AND P.NOM = ‘Polanski’
 
Forme imbriquée :
 SELECT TITRE
 FROM FILM
 WHERE RÉALISATEUR IN (
      SELECT NUMP
      FROM PERSONNE
      WHERE PRÉNOM = ‘Roman’
      AND NOM = ‘Polanski’ )
 
Requête 8 : Quels sont les acteurs comiques (nom, prénom) qui ont joué dans un film de Spielberg.
 
Forme plate :
 SELECT PA.PRÉNOM, PA.NOM
 FROM PERSONNE PA, DISTRIBUTION D, FILM F, PERSONNE PR
 WHERE PA.NUMP = D.NUMA
AND D.SPÉCIALITÉ = ‘Comique’
AND D.NUMF = F.NUMF
AND F.RÉALISATEUR = PR.NUMP
AND PR.NOM = ‘Spielberg’
 
Forme imbriquée :
 SELECT PRÉNOM, NOM
 FROM PERSONNE
 WHERE NUMP IN (
      SELECT NUMA
      FROM DISTRIBUTION
      WHERE SPÉCIALITÉ = ‘Comique’
      ANDNUMF IN (
           SELECT NUMF
           FROMFILM
           WHERE RÉALISATEUR IN (
              SELECT NUMP
              FROMPERSONNE
              WHERE NOM = ‘Spielberg’ ) ) )
 
Requête 9 : Trouver le titre et l’année du film le plus long.
 
Forme imbriquée :
 SELECT TITRE, ANNÉE
 FROM FILM
 WHERE LONGUEUR = (
      SELECT MAX (LONGUEUR)
      FROM FILM )
 
Requête 10 : Nom et prénom des acteurs qui ont joué Gavroche dans les différentes versions des « Misérables » avec les dates correspondantes.
 
Forme plate :
 SELECT P.PRÉNOM, P.NOM, F.DATE
 FROM PERSONNE P, DISTRIBUTION D, FILM F
 WHERE P.NUMP = D.NUMA
 AND D.RÔLE = ‘Gavroche’
 AND G.NUMF = F.NUMF
 AND F.TITRE = ‘Les misérables’
 
Forme imbriquée :
 SELECT P.PRÉNOM, P.NOM, F.DATE
 FROM PERSONNE P, FILM F
 WHERE F.TITRE = ‘Les misérables’
 AND (P.NUMP, F.NUMF) IN (
      SELECT NUMA, NUMF
      FROM DISTRIBUTION
      WHERE RÔLE = ‘Gavroche’ )
 
Requête 11 : Donner le nom et le prénom des réalisateurs qui ont joué dans au moins un de leurs propres films.
 
Forme plate :
 SELECT DISTINCT P.PRÉNOM, P.NOM
 FROM PERSONNE P, FILM F, DISTRIBUTION D
 WHERE P.NUMP = F.RÉALISATEUR
 AND F.NUMF = D.NUMF
 AND D.NUMA = F.RÉALISATEUR
 
Forme imbriquée SQL-92 :
 SELECT DISTINCT PRÉNOM, NOM
 FROM PERSONNE
 WHERE NUMP IN (
      SELECT RÉALISATEUR
      FROM FILM
      WHERE (RÉALISATEUR, NUMF) IN (
           SELECT NUMA, NUMF
           FROM DISTRIBUTION ) )

Exercice Langage SQL : Les livraisons (Partie 3)

Enoncé de l'exercice: (Les livraison Suite...)

Soit la base relationnelle de données PUF de schéma :
                                       U (NumU, NomU, VilleU)
                                       P (NumP, NomP, Couleur, Poids)
                                       F (NumF, NomF, Statut, VilleF)
                                       PUF (NumP, NumU, NumF, Quantité)
Décrivant le fait que (avec des DF évidentes) :
           U : une usine est d’écrite par son numéro NumU, son nom NomU et la ville VilleU où elle est située
           P : un produit est décrit par son numéro NumP, son nom NomP, sa couleur et son poids
           F : un fournisseur est décrit par son numéro NumP, son nom NomF, son statut (sous-traitant, client…) et la ville VilleF où il est domicilié
           PUF : le produit de numéro NumP a été délivré à l’usine de numéro NumU par le fournisseur de numéro NumF dans une quantité donnée.
Exprimer en SQL les requêtes suivantes :
17- Donnez les numéros des fournisseurs qui fournissent au moins un produit fourni par au moins un fournisseur qui fournit au moins un produit rouge
18- Donnez tous les triplets (VilleF, NumP, VilleU) tels qu’un fournisseur de la première ville VilleF approvisionne une usine de la deuxième ville VilleU avec un produit NumP
19- Même question que précédemment mais sans les triplets où les deux villes sont identiques
20- Donnez les numéros des produits qui sont livrés à toutes les usines de Paris
21- Donnez les numéros des fournisseurs qui approvisionnent toutes les usines avec un même produit
22- Donnez les numéros des usines qui achètent au fournisseur de numéro 3 tous les produits qu’il fournit
23- Donnez les numéros des usines qui s’approvisionnent uniquement chez le fournisseur de numéro 3


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
17) Donnez les numéros des fournisseurs qui fournissent au moins un produit fourni par au moins un fournisseur qui fournit au moins un produit rouge
 
    P WHERE Couleur=‘Rouge’ AND P.Np=PUF2.Np AND
    PUF2.Nf=PUF1.Nf AND PUF1.Np=PUF.Np
       Ou bien SELECT DISTINCT Nf FROM PUF WHERE Np IN
      (SELECT Np FROM PUF WHERE Nf IN (SELECT Nf FROM
      PUF WHERE Np IN (SELECT Np FROM P WHERE
      Couleur=‘Rouge’)))
 
18) Donnez tous les triplets (VilleF, NumP, VilleU) tels qu"’"un fournisseur de la première ville VilleF approvisionne une usine de la deuxième ville VilleU avec un produit NumP 
 
SELECT DISTINCT PUF.Nf FROM PUF, PUF PUF1, PUF PUF2,
SELECT DISTINCT F.Ville, Np, U.Ville FROM PUF, U, F
    WHERE PUF.Nf=F.Nf AND PUF.Nu=U.Nu
19) Même question que précédemment mais sans les triplets où les deux villes sont identiques
 
SELECT DISTINCT F.Ville, NP, U.Ville FROM PUF, U, F
    WHEREF.VilleU.VilleANDPUF.Nf=F.NfAND
    PUF.Nu=U.Nu
 
20) Donnez les numéros des produits qui sont livrés à toutes les usines de Paris
 
SELECT Np FROM PUF WHERE NOT EXISTS(SELECT Nu
    FROM U WHERE NOT EXISTS (SELECT * FROM PUF WHERE
    NOT (Ville=‘Paris’) OR (P.Np=PUF.Np AND U.Nu=PUF.Nu))
 
21) Donnez les numéros des fournisseurs qui approvisionnent toutes les usines avec un même produit
 
SELECT NF FROM PUF WHERE NOT EXISTS (SELECT Nu
    FROM U WHERE NOT EXISTS (SELECT * FROM PUF PUF1
    WHEREF.Nf=PUF1.NFANDU.Nu=PUF1.NuAND
    PUF.Np=PUF1.Np))
 
22) Donnez les numéros des usines qui achètent au fournisseur de numéro 3 tous les produits qu’il fournit
 
  SELECT Nf FROM F WHERE EXISTS (SELECT Np FROM P
      WHERE NOT EXISTS (SELECT Nu FROM U WHERE NOT
      EXISTS (SELECT * FROM PUF WHERE F.Nf=PUF.Nf AND
      U.Nu=PUF.Nu AND P.Np=PUF.Np)))
 
23) Donnez les numéros des usines qui s"’"approvisionnent uniquement chez le fournisseur de numéro 3
 
SELECT Nu FROM U WHERE Nu NOT IN (SELECT Nu FROM
    PUF WHERE Nf3)

Exercice Langage SQL : Les livraisons (Partie 2)


Enoncé de l'exercice: (Les livraison Suite...)

Soit la base relationnelle de données PUF de schéma :
                                    U (NumU, NomU, VilleU)
                                    P (NumP, NomP, Couleur, Poids)
                                    F (NumF, NomF, Statut, VilleF)
                                    PUF (NumP, NumU, NumF, Quantité)
Décrivant le fait que (avec des DF évidentes) :
         U : une usine est d’écrite par son numéro NumU, son nom NomU et la ville VilleU où elle est située
         P : un produit est décrit par son numéro NumP, son nom NomP, sa couleur et son poids
         F : un fournisseur est décrit par son numéro NumP, son nom NomF, son statut (sous-traitant, client…) et la ville VilleF où il est domicilié
         PUF : le produit de numéro NumP a été délivré à l’usine de numéro NumU par le fournisseur de numéro NumF dans une quantité donnée.
Exprimer en SQL les requêtes suivantes :
9-   Donnez les noms des fournisseurs qui approvisionnent une usine de Paris ou de Créteil en produit rouge
10- Donnez les numéros des produits livrés à une usine par une fournisseur de la même ville
11- Donnez les numéros des produits livrés à une usine de Paris par un fournisseur de Paris
12- Donnez les numéros des usines qui ont au moins un fournisseur qui n’est pas de la même ville
13- Donnez les numéros des fournisseurs qui approvisionnent à la fois des usines de numéros 2 et 3
14- Donnez les numéros des usines qui utilisent au moins un produit disponible chez le fournisseur de numéro 3 (c’est-à-dire un produit que le fournisseur livre mais pas nécessairement à cette usine)
15- Donnez le numéro du produit le plus léger (les numéros si plusieurs produits ont ce même poids)
16- Donnez le numéro des usines qui ne reçoivent aucun produit rouge d’un fournisseur parisien

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
9) Donnez les noms des fournisseurs qui approvisionnent une usine de Paris ou de Créteil en produit rouge 
 
SELECT NomF FROM PUF, P, F, U WHERE
    Couleur=‘Rouge’ AND PUF.Np=P.Np AND PUF.Nf=F.Nf AND
    PUF.Nu=U.Nu AND (U.Ville IN (‘Paris’,’Créteil’)
       Ou bien SELECT NomF FROM F WHERE Nf IN (SELECT
      Nf FROM PUF WHERE Np IN (SELECT Np FROM P
      WHERE Couleur=‘Rouge’) AND Nu IN (SELECT Nu FROM
      U WHERE Ville IN (‘Paris’, ‘Créteil’))
 
10) Donnez les numéros des produits livrés à une usine par une fournisseur de la même ville 
 
SELECT DISTINCT Np FROM PUF, F, U WHERE PUF.Nf=F.Nf
    AND PUF.Nu=U.Nu AND U.Ville=F.Ville
11) Donnez les numéros des produits livrés à une usine de Paris par un fournisseur de Paris
 
SELECT DISTINCT Np FROM PUF, F, U WHERE PUF.Nf=F.Nf
    AND PUF.Nu=U.Nu AND U.Ville=F.Ville AND U.Ville=‘Paris’
       Ou bien SELECT DISTINCT Np FROM PUF WHERE Nf IN
      (SELECT Nf FROM F WHERE Ville=‘Paris’) AND Nu IN
      (SELECT Nu FROM U WHERE Ville=‘Paris’)
 
12) Donnez les numéros des usines qui ont au moins un fournisseur qui n"’"est pas de la même ville
 
SELECT DISTINCT PUF.Nu FROM PUF, F, U WHERE
    PUF.Nf=F.Nf AND PUF.Nu=U.Nu AND U.VilleF.ville
       Ou bien SELECT DISTINCT Nu FROM PUF WHERE
      Nf=ANY(SELECT Nf FROM F, U WHERE PUF.Nf=F.Nf AND
      PUF.Nu=U.Nu AND F.VilleU.Ville)
 
13) Donnez les numéros des fournisseurs qui approvisionnent à la fois des usines de numéros 2 et 3
 
SELECT DISTINCT First.Nf FROM PUF First, PUF Second
    WHERE First.Nf=Second.Nf AND First.Nu=1 AND Second.Nu=2
      Ou bien SELECT DISTINCT Nf FROM PUF WHERE Nf IN
      (SELECT Nf FROM PUF WHERE Nu=1) AND Nu=2
 
14) Donnez les numéros des usines qui utilisent au moins un produit disponible chez le fournisseur de numéro 3 (c"’"est-à-dire un produit que le fournisseur livre mais pas nécessairement à cette usine)
 
SELECT DISTINCT Nu FROM PUF WHERE Np IN (SELECT
    Np FROM PUF WHERE Nf=3)
 
15) Donnez le numéro du produit le plus léger (les numéros si plusieurs produits ont ce même poids)
 
SELECT Np FROM P WHERE Poids IN (SELECT MIN(Poids) FROM P)
       Ou bien 
SELECT Np FROM P p1 WHERE NOT EXISTS
      (SELECT * FROM P WHERE P1.Poids>Poids)
 
16) Donnez le numéro des usines qui ne reçoivent aucun produit rouge d"’"un fournisseur parisien
 
SELECT Nu FROM U WHERE Nu NOT IN (SELECT Nu FROM
    PUF, F, P WHERE PUF.Np=P.Np AND PUF.Nf=F.Nf AND
    Couleur=‘Rouge’ AND Ville=‘Paris’)

Exercice Langage SQL : Les livraisons (Partie 1)

Enoncé de l'exercice: (Les livraison)

Soit la base relationnelle de données PUF de schéma :
                                     U (NumU, NomU, VilleU)
                                     P (NumP, NomP, Couleur, Poids)
                                     F (NumF, NomF, Statut, VilleF)
                                     PUF (NumP, NumU, NumF, Quantité)
Décrivant le fait que (avec des DF évidentes) :
     U : une usine est d’écrite par son numéro NumU, son nom NomU et la ville VilleU où elle est située
     P : un produit est décrit par son numéro NumP, son nom NomP, sa couleur et son poids
     F : un fournisseur est décrit par son numéro NumP, son nom NomF, son statut (sous-traitant, client…) et la ville VilleF où il est domicilié
     PUF : le produit de numéro NumP a été délivré à l’usine de numéro NumU par le fournisseur de numéro NumF dans une quantité donnée.
Exprimer en SQL les requêtes suivantes :
  1. Ajouter un nouveau fournisseur avec les attributs de votre choix
  2. Supprimer tous les produits de couleur noire et de numéros compris entre 100 et 1999
  3. Changer la ville du fournisseur 3 par Toulouse
  4. Donnez le numéro, le nom, la ville de toutes les usines
  5. Donnez le numéro, le nom, la ville de toutes les usines de Paris
  6. Donnez les numéros des fournisseurs qui approvisionnent l’usine de numéro 2 en produit de numéro 100
  7. Donnez les noms et les couleurs des produits livrés par le fournisseur de numéro 2
  8. Donnez les numéros des fournisseurs qui approvisionnent l’usine de numéro 2 en un produit rouge

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
1) Ajouter un nouveau fournisseur avec les attributs de votre choix
INSERT INTO F VALUES (45, ‘Alfred’, ’Sous-traitant’,
‘Chalon’)
 
2) Supprimer tous les produits de couleur noire et de numéros compris entre 100 et 1999
 
 DELETE P WHERE Np>=100 AND Np<=199 AND
Couleur=‘Noire’
 
3) Changer la ville du fournisseur 3 par Toulouse
 
 UPDATE F SET Ville=‘Nice’ WHERE Nf=1
 
4) Donnez le numéro, le nom, la ville de toutes les usines 
 
SELECT * FROM U
 
5) Donnez le numéro, le nom, la ville de toutes les usines de Paris
 
 SELECT * FROM U WHERE Ville="Créteil"
 
6) Donnez les numéros des fournisseurs qui approvisionnent l’usine de numéro 2 en produit de numéro 100 
 
SELECT Nf FROM PUF WHERE Nu=1 AND Np=1
 
7) Donnez les noms et les couleurs des produits livrés par le fournisseur de numéro 2
 
SELECT DISTINCT NomP, Couleur FROM P, PUF
WHERE PUF.Np=P.Np AND Nf=1
   Ou bien 
SELECT NomP, Couleur FROM P
   WHERE Np IN (SELECT Np FROM PUF WHERE
   NF=1)
 
8) Donnez les numéros des fournisseurs qui approvisionnent l"’"usine de numéro 2 en un produit rouge
 
SELECT DISTINCT Nf FROM PUF, P WHERE
    Couleur="Rouge" AND PUF.Np=P.Np AND Nu=1
       Ou bien SELECT DISTINCT Nf FROM PUF WHERE Np IN
      (SELECT Np FROM P WHERE Couleur="Rouge") AND
      Nu=1

Exercice Langage SQL : Les prédicats NULL, IN, LIKE, BETWEEN

Objectif :
Créer des requêtes enSQL

Travail à faire:
                ETUDIANT (Numetu, Nometu, Dtnaiss, Cdsexe)
                SEXE (Cdsexe, Lbsexe)
                ENSEIGNANT (Numens, Nomens, Grade, Ancien)
                MATIERE (Numat, Nomat, Coeff, Numens)
                NOTES (Numetu, Numat, Note)

écrire les requêtes SQL permettant de répondre aux questions suivantes.:
Requête 1 :
                     Numéro, nom et sexe des étudiants dont la date de naissance n'est pas connue
Requête 2 :
                     Nom et date de naissance des étudiants dont la 2° lettre du nom est 'a'.
Requête 3 :
                     Nom des matières qui ont un coefficient compris entre 1 et 2.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Requête 1 : 
 
SELECT Numetu, Nometu
FROM ETUDIANT
WHERE Dtnaiss IS NULL;
 
Requête 2 : 
 
SELECT Nometu, Dtnaiss
FROM ETUDIANT
WHERE Nometu LIKE '_a%';
 
Requête 3 : 
 
SELECT Nomat
FROM MATIERE
WHERE Coeff BETWEEN 1 AND 2;
Ce prédicat, est une simplication d"'"écriture et peut être remplacé par :
SELECT Nomat
FROM MATIERE
WHERE (Coeff >=1) AND (Coeff<=2);

Exercice Langage SQL : Une Médiathèque (2/2)

Suite de l'Exercice une Médiathèque

Enoncé de l'Exercice


On considère le schéma relationnel suivant qui modélise une application sur la gestion de livres et de disques dans une Médiathèque :
                     Disque (CodeOuv, Titre, Style, Pays, Année, Producteur)
                     E_Disque (CodeOuv, NumEx, DateAchat, Etat)
                     Livre (CodeOuv, Titre, Editeur, Collection)
                     E_Livre (CodeOuv, NumEx, DateAchat, Etat)
                     Auteurs (CodeOuv, Identité)
                     Abonne (NumAbo, Nom, Prénom, Rue, Ville, CodeP, Téléphone)
                     Prêt (CodeOuv, NumEx, DisqueOuLivre, NumAbo, DatePret)
                     Personnel (NumEmp, Nom, Prénom, Adresse, Fonction, Salaire)
Travail à Faire :
Traduisez en SQL les questions suivantes :
     7) Donnez le nombre de prêts en cours pour chaque famille en considérant qu’une famille regroupe des personnes de même nom et possédant le même numéro de téléphone ?
     8) Quel est le code du disque dont la médiathèque possède le plus grand nombre d’exemplaire ?
     9) Quels sont les éditeurs pour lesquels l’attribut Collection n’a pas été renseigné ?
   10) Quels sont les abonnés dont le nom contient la chaîne « ALDO » et habitant en Isère ?
   11) Quel est le nombre de prêts en cours ?
   12) Quels sont les salaires minimum, maximum et moyen des employés exerçant une fonction de bibliothécaire ?
   13) Quel est le nombre de genres de livres différents ?
   14) Quel est le nombre de disque acheté en 1998 ?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
-- 7) Donnez le nombre de prêts en cours pour chaque famille en considérant qu’une famille regroupe des personnes de même nom et possédant le même numéro de téléphone ?
 
SELECT Nom, Téléphone, COUNT(*) 
FROM Abonne A, Prêt P 
WHERE A.NumAbo=P.NimAbo 
GROUP BY Nom, Téléphone
 
-- 8) Quel est le code du disque dont la médiathèque possède le plus grand nombre d’exemplaire ?
 
SELECT CodeOuv FROM E_Disque GROUP BY CodeOuv
HAVING COUNT(*)=(SELECT MAX(COUNT(*)) 
FROM E_Disque 
GROUP BY CodeOuv)
 
-- 9) Quels sont les éditeurs pour lesquels l’attribut Collection n’a pas été renseigné ?
 
SELECT Editeur FROM Livre 
WHERE Collection IS NULL
 
-- 10) Quels sont les abonnés dont le nom contient la chaîne « ALDO » et habitant en Isère ?
 
SELECT * FROM Abonne 
WHERE Nom=‘%ALDO%’ 
AND CodeP=’38--’
 
-- 11) Quel est le nombre de prêts en cours ?
 
SELECT COUNT(*) FROM Prêt
 
-- 12) Quels sont les salaires minimum, maximum et moyen des employés exerçant une fonction de bibliothécaire ?
 
SELECT MIN(Salaire), MAX(Salaire), AVG(Salaire) 
FROM Personnel 
WHERE Fonction = "bibliothécaire"
 
-- 13) Quel est le nombre de genres de livres différents ?
 
SELECT COUNT(DISTINCT Genre) FROM Livre
 
-- 14) Quel est le nombre de disque acheté en 1998 ?
 
SELECT COUNT(*) FROM E_Disque 
WHERE DateAchat
BETWEEN ’01-Jan-2006’ AND ’10-Dec-2007’

Exercice Langage SQL : Une Médiathèque (1/2)

On considère le schéma relationnel suivant qui modélise une application sur la gestion de livres et de disques dans une Médiathèque :
                 Disque (CodeOuv, Titre, Style, Pays, Année, Producteur)
                 E_Disque (CodeOuv, NumEx, DateAchat, Etat)
                 Livre (CodeOuv, Titre, Editeur, Collection)
                 E_Livre (CodeOuv, NumEx, DateAchat, Etat)
                 Auteurs (CodeOuv, Identité)
                 Abonne (NumAbo, Nom, Prénom, Rue, Ville, CodeP, Téléphone)
                 Prêt (CodeOuv, NumEx, DisqueOuLivre, NumAbo, DatePret)
                 Personnel (NumEmp, Nom, Prénom, Adresse, Fonction, Salaire)
Travail à Faire :
Traduisez en SQL les questions suivantes :
      1) Quel est le contenu de la relation Livre ?
      2) Quels sont les titres des romans édités par Gava-Editor ?
      3) Quelle est la liste des titres que l’on retrouve à la fois comme titre de disque et titre de livre ?
      4) Quelle est l’identité des auteurs qui ont fait des disques et écrit des livres ?
      5) Quels sont les différents style de disques proposés ?
      6) Quel est le salaire annuel des membres du personnel gagnant plus de 20000 euros en ordonnant le résultat par salaire descendant et nom croissant ?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
-- 1) Quel est le contenu de la relation Livre ?
 
SELECT * FROM Livre
 
-- 2) Quels sont les titres des romans édités par Gava-Editor ?
 
SELECT Titre FROM Livre WHERE Editeur="Droit-Edition"
AND Genre="Polar"
 
-- 3) Quelle est la liste des titres que l’on retrouve à la fois comme titre de disque et titre de livre ?
 
SELECT D.Titre FROM Disque D, Livre L 
WHERE D.Titre=L.Titre
 
-- 4) Quelle est l’identité des auteurs qui ont fait des disques et écrit des livres ?
 
SELECT A1.Identité FROM Disque D, Livre L, Auteur A1,Auteur A2
WHERE D.CodeOuv = A1.CodeOuv
AND L.CodeOuv=A2.CodeOuv AND A1.Identité=A2.Identité
 
-- 5) Quels sont les différents style de disques proposés ?
 
SELECT DISTINCT Style FROM Disque
 
-- 6) Quel est le salaire annuel des membres du personnel gagnant plus de 20000 euros en ordonnant le résultat par salaire descendant et nom croissant ?
 
SELECT Nom, Prénom, Salaire*12 AS Salaire_Annuel
FROM Personnel 
WHERE Salaire_Annuel>20000 
ORDER BY Salaire DESC, Nom ASC

Exercice sur les Opérateurs Ensemblistes

Objectif : Pouvoir réaliser des Requêtes en SQL.

Enoncé de l'Exercice:

On considère le schéma relationnel suivant qui modélise une application sur la gestion d’une Bibliothèque
Bibliothque

Créer les requêtes suivantes:
1 - Réunissez dans une seule liste tous les titres de livres contenant le mot " conte " et tous les titres contenant le mot " livre ".
2 - On veut afficher le titre des livres qui contiennent à la fois "conte" et "légende".
3 - Affichez dans une colonne répertoire lesnoms et téléphones des emprunteurs et des editeurs.
5 - Affichez dans une colonne répertoire lesnoms et téléphones des emprunteurs et des editeurs.
6 - Sélectionnez sur une colonne Lecteurs/Auteurs tous les emprunteurs qui sont aussi auteurs.
7 - Affichez la liste detous les auteurs qui ne sont pas leur prorpres éditeurs.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
-- 1 - Réunissez dans une seule liste tous les titres de livres contenant le mot " conte " et tous les titres contenant le mot " livre ". 
 
SELECT titre FROM livres
WHERE titre LIKE '%CONTE%'
UNION
SELECT titre FROM livres
WHERE titre LIKE '%livre%'
ORDER BY 1 DESC;
 
-- 2ème Suggestion de réponse avec la clause OR
SELECT titre FROM livres
 WHERE titre LIKE '%CONTE%' OR titre LIKE '%livre%'
 ORDER BY TITRE DESC;
 
 -- 2 - On veut afficher le titre des livres qui contiennent à la fois "conte" et "légende". 
 
SELECT titre FROM livres WHERE titre LIKE '%légende%'
intersect
SELECT titre FROM livres WHERE titre LIKE '%conte%';
 
-- 5 - Affichez dans une colonne répertoire lesnoms et téléphones des emprunteurs et des editeurs. 
SELECT nom AS "Repertoire", tel FROM emprunteurs
UNION
SELECT nom, tel FROM editeurs; 
 
-- 6 - Sélectionnez sur une colonne Lecteurs/Auteurs tous les emprunteurs qui sont aussi auteurs. 
 
SELECT nom AS "Lecteurs/Auteurs" FROM emprunteurs
INTERSECT
SELECT nom FROM auteurs;

Exercice sur les Jointures

Objectif : Pouvoir réaliser des Requêtes en SQL.

Enoncé de l'Exercice:

On considère le schéma relationnel suivant qui modélise une application sur la gestion d’une Bibliothèque
Bibliothque

Créer les requêtes suivantes:
  1. En face de chaque titre d'ouvrage, afficher le nom et prénom de son auteur. 
  2. Afficher le nom et le prenom des emprunteurs suivi de la date de ses emprunts. 
  3. Affichez le titre et l'auteur des ouvrages empruntés suivi du nom de leur emprunteur 
  4. A la suite de problèmes de saisie informatique, il existe un certain nombre d'emprunts sans emprunteurs. Affichez l'identifiant de tous les emprunts suivi du nom de l'emprunteur qu'il y en ait un ou non 
  5. Afficher la liste des emprunts suivi de l'identifiant de l'emprunteur seulement s'il y a un emprunteur, mais aussi comprenant les emprunteurs n'ayant pas encore effectué d'emprunts. 
  6. Afficher la liste des emprunts et des emprunteurs que les emprunts n'ai pas d'emprunteurs ou que les emprunteurs n'ai jamais efectué d'emprunts.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
--1 - En face de chaque titre d'ouvrage, afficher le nom et prénom de son auteur. 
 
SELECT titre, nom, prenom
FROM livres, auteurs
WHERE livres.idauteur = auteurs.idauteur
ORDER BY titre ASC;
 
-- on aurait obtenu le même résultat avec la jointure interne suivante:
 
SELECT titre, nom, prenom
FROM livres JOIN auteurs USING (idauteur)
ORDER BY titre ASC;
 
-- 2 - Afficher le nom et le prenom des emprunteurs suivi de la date de ses emprunts. 
 
SELECT nom, prenom, datepret
FROM emprunteurs, emprunts
WHERE emprunteurs.idemprunteur = emprunts.idemprunteur;
 
-- on aurait obtenu le même résultat avec la jointure interne suivante:
 
SELECT nom, prenom, datepret
FROM emprunteurs JOIN emprunts USING(idemprunteur);
 
-- 3 - Affichez le titre et l'auteur des ouvrages empruntés suivi du nom de leur emprunteur 
 
SELECT titre, auteurs.nom, emprunteurs.nom
FROM livres, auteurs, emprunteurs, emprunts
WHERE emprunts.idlivre = livres.idlivre
AND emprunts.idemprunteur = emprunteurs.idemprunteur
AND livres.idauteur = auteurs.idauteur; 
 
-- 4 - A la suite de problèmes de saisie informatique, il existe un certain nombre d'emprunts sans emprunteurs. Affichez l'identifiant de tous les emprunts suivi du nom de l'emprunteur qu'il y en ait un ou non 
 
SELECT idemprunt, nom
FROM emprunts LEFT OUTER JOIN emprunteurs USING(idemprunteur)
ORDER BY idemprunt ASC;
 
-- 5 - Afficher la liste des emprunts suivi de l'identifiant de l'emprunteur seulement s'il y a un emprunteur, mais aussi comprenant les emprunteurs n'ayant pas encore effectué d'emprunts. 
 
SELECT idemprunt, idemprunteur
FROM emprunts RIGHT OUTER JOIN emprunteurs USING(idemprunteur)
ORDER BY idemprunteur ASC;
 
-- 6 - Afficher la liste des emprunts et des emprunteurs que les emprunts n'ai pas d'emprunteurs ou que les emprunteurs n'ai jamais efectué d'emprunts. 
 
SELECT idemprunt, idemprunteur
FROM emprunts FULL OUTER JOIN emprunteurs USING(idemprunteur)
ORDER BY idemprunteur ASC;
 
-