Soit la base de donnée suivante :
Livre (numL,titre,numA,langue)Auteur (numA,nom)Exemplaire(numE,numL,etat)Abonne(numAB,nom,prenom,age,adresse,cp,ville)Pret(numE,date,numAB,dateretour)
On écrira les requètes suivantes pour :
- 1 - Abonnés triés par ville et par nom
SELECT * FROM abonne ORDER BY ville,nom
- 2 - Liste des livres de langue francaise
SELECT * from livre WHERE langue = "FR"
- 3 - Les livres de Voltaire
SELECT titre FROM livre,auteur WHERE auteur.numA = livre.numA AND nom = "Voltaire"
- 4 - Les exemplaires de Voltaire
SELECT exemplaire.numE,exemplaire.numL,etat FROM livre,auteur,exemplaire WHERE exemplaire.numL = livre.numL AND livre.numA = auteur.numA AND auteur.nom = "Voltaire"
- 5 - Les auteurs dont la bibliothèque possède des exemplaires de livre
SELECT DISTINCT auteur.nom FROM livre,auteur,exemplaire WHERE exemplaire.numL = livre.numL AND auteur.numA = livre.numA
- 6 - Les auteurs dont la bibliothèque ne possède pas d'exemplaire
SELECT auteur.nom FROM auteur WHERE auteur.nom NOT IN ( SELECT DISTINCT auteur.nom FROM livre,exemplaire WHERE exemplaire.numL = livre.numL )
- 7 - L' auteur qui a écrit le plus de livres
SELECT A.nomFROM auteur A, livre LWHERE A.numA = L.numAGROUP BY A.numA,A.nomHAVING COUNT(*) >= ALL (SELECT COUNT( * )FROM livre GROUP BY numA )
- 8 - L'age moyen des abonnés
SELECT AVG(age) FROM abonne
- 9 - L'abonné le plus vieux
SELECT nom, prenom FROM abonne WHERE age = ( SELECT MAX(age) FROM abonne )
- 10 - Les abonnés de l'Hérault qui ont emprunté des livres de langue anglaise
SELECT DISTINCT nom, prenomFROM abonne, pret, exemplaire, livreWHERE abonne.numAb = pret.numAb AND pret.numE = exemplaire.numEAND exemplaire.numL = livre.numLAND livre.langue = 'EN' AND abonne.cp LIKE '34___'
- 11 - Les abonnés qui ont des prêts en cours
SELECT nom, prenomFROM abonne, pretWHERE dateretour IS NULLAND abonne.numAb = pret.numAb
- 12 - Les abonnés qui ont emprunté des livres de langue française ou anglaise
SELECT DISTINCT nom, prenomFROM pret, abonne, exemple, livreWHERE abonne.numAb = pret.numAb AND pret.numE = exemplaire.numEAND exemplaire.numL = livre.numLAND ( livre.langue = "EN" OR livre.langue = "FR" )
- 13 - Les abonnés qui ont emprunté des livres de langue française et anglaise
SELECT nom, prenomFROM pret, abonne, exemple, livreWHERE abonne.numAb = pret.numAb AND pret.numE = exemplaire.numEAND exemplaire.numL = livre.numLAND livre.langue = "EN"AND abonne.numAb IN (SELECT numAb FROM pret, livre, exemplaire WHERE pret.numE = exemplaire.numE AND exemplaire.numL = livre.numL AND livre.langue = "FR")
- 14 - Les abonnés qui n'ont emprunté que des livres en langue anglaise
SELECT nom, prenom FROM pret, abonne, exemple, livreWHERE abonne.numAb = pret.numAbAND exemplaire.numL = livre.numLAND pret.numE = exemplaire.numEAND livre.langue = "EN"AND abonne.numAb NOT IN (SELECT numAb FROM pret,livre,exemplaire WHERE pret.numE = exemplaire.numE AND exemplaire.numL = livre.numL AND livre.langue <> "EN")
- 15 - Le nombre d'exemplaire par auteur
SELECT COUNT(*), auteur.nomFROM exemplaire,livre,auteurWHERE exemplaire.numL = livre.numLAND livre.numA = auteur.numAGROUP BY auteur.numA, auteur.nom
- 16 - Le ou les emprunts les plus récents
SELECT * FROM pretWHERE date = (SELECT MAX(date) FROM pret )
- 17 - Les abonnés ayant emprunté plus de 10 livres de Voltaire
SELECT abonne.numAb, abonne.nom, abonne.prenomFROM abonne,pret,auteur,livre,exemplaireWHERE abonne.numAb = pret.numAbAND livre.numL = exemplaire.numLAND auteur.numA = livre.numAAND pret.numE = exemplaire.numEAND auteur.nom = "Voltaire"GROUP BY abonne.numAb,abonne.nom,abonne.prenomHAVING COUNT(DISTINCT titre) > 10
- 18 - Les abonnés ayant emprunté plus de 10 fois Voltaire
SELECT abonne.numAb, abonne.nom, abonne.prenomFROM abonne,pret,auteur,livre,exemplaireWHERE abonne.numAb = pret.numAbAND livre.numL = exemplaire.numLAND auteur.numA = livre.numAAND pret.numE = exemplaire.numEAND auteur.nom = "Voltaire"GROUP BY abonne.numAb,abonne.nom,abonne.prenomHAVING COUNT(*) > 10
- 19 - Les abonnés ayant emprunté le plus de livres de Voltaire
SELECT abonne.nom,abonne.prenomFROM abonne,pret,livre,exemplaire,auteurWHERE abonne.numAb = pret.numAbAND pret.numE = exemplaire.numEAND exemplaire.numL = livre.numLAND livre.numA = auteur.numAAND auteur.nom = "Voltaire"GROUP BY abonne.numAb,abonne.nom, abonne.prenomHAVING COUNT(DISTINCT livre.titre) >= ALL (SELECT COUNT(DISTINCT titre) FROM livre,pret,exemplaire,auteur WHERE livre.numL = exemplaire.numL AND exemplaire.numE = pret.numE AND livre.numA = auteur.numA AND auteur.nom = "Voltaire" GROUP BY pret.numAB )
- 20 - Les abonnés dont les prêts en cours ont plus de 15 jours
SELECT DISTINCT abonne.nom, abonne.prenomFROM abonne,pretWHERE abonne.numAb = pret.numAbAND pret.dateretour IS NULLAND DATESYSTEM - pret.date >= 15
- 21 - Le % de livre emprunté pour chaque auteur
SELECT auteur.nom, COUNT(DISTINCT livre.numL) / COUNT(DISTINCT L2.numL)FROM auteur,livre,exemplaire,pret,livre L2WHERE auteur.numA = livre.numAAND livre.numL = exemplaire.numLAND exemplaire.numE = pret.numE AND L2.numA = auteur.numAGROUP BY auteur.numA, auteur.nom