IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Exprimer des requêtes SQL


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 2
    Par défaut Exprimer des requêtes SQL
    Bonjour,

    Je dispose d'un schéma relationnel, et je dois exprimer des requêtes en SQL. J'avoue avoir un peu de mal. Serait-il possible que vous me corrigiez ?

    Voici l’énoncé :

    Soit le schéma relationnel suivant :

    Chanteur(Chanteur_id, Nom, Type)
    Spectacle(Spectacle_id, Titre, DateDéb, Durée, Salle_id, Chanteur_id)
    Concert(Concert_id, Date, Heure, Spectacle_id)
    Salle(Salle_id, Nom, Aresse, Capacité)
    Billet(Billet_id, Concert_id, Num_Place, Catégorie, Prix)
    Vente(Vente_id, Dat_Vente, Billet_id, MoyenPaiement)

    (Johnny est un nom de chanteur, le Zenith et la Cygale sont des noms de salle).

    Exprimer les requêtes suivantes en SQL :

    1.Quelles sont les dates de concert de "Johnny" au "Zenith" ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Select Concert.Date
    From Chanteur, Concert, Salle
    Where Chanteur.Nom=Salle.Nom
    Chanteur=’Johnny’
    Salle=’Zenith’
    2. Quels sont le chanteurs qui ont fait un concert au "Zenith" et la "Cygale" ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Select Chanteur.Nom
    From Chanteur, Salle
    Where Chanteur.Nom=Salle.Nom
              Salle.Nom='Cygale'
              Salle.Nom='Zenith'
    3. Quels sont les chanteurs qui n'ont jamais donné de spectacle au "Zenith" ?

    Je ne sais pas ...

    4. Quels sont les chanteurs qui ont fait un concert au "Zenith" et à la "Cygale" à l'exclusion de toute autre salle ?

    Je ne sais pas non plus

    5. Quelle est la capacité du "Zenith" ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Select Capacité
    From Salle
    6. Quels sont les noms des salles de plus grande capacité ?

    Je ne sais pas comment faire la comparaison...

    7. Quel est, pour chaque concert, le nombre de billets vendus ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Select count(*), Billet_id
    From Billet, Vente_id
    Where Billet.Billet_id=Vente.Vente_id
              group_by Billet_id
    8. Quels sont les chanteurs qui ont chanté dans toutes les salles ?

    Je ne sais pas non plus..

    Voila merci beaucoup ...

    Cordialement,
    Jo-57

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 039
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 039
    Billets dans le blog
    6
    Par défaut
    Permettez-moi tout d'abord de vous dire que si l'on vous a appris à faire des jointures dans le WHERE, alors votre professeur est un imbécile. Et je me permet de le dire, étant moi même enseignant et auteur de ce livre qui est utilisé par bon nombre de profs : http://www.amazon.fr/dp/2744076309/ (ce livre en est à sa 4e édition...)

    Or depuis la norme SQL de 1992, les jointures se font avec l'opérateur JOIN associé au prédicat ON !
    Sans cela vous allez immanquablement faire des erreurs dans vos jointures... C'est d'ailleurs le cas de votre première requête !

    Votre prof ne s'est donc pas recyclé depuis 23 ans... Quel âge a-t-il ? Ne serait-il pas temps qu'il prenne sa retraite ?

    De plus vous avez sans doute fait vos requêtes avec MySQL. C'est le plus mauvais des SGBDR et peu respectueux de la norme. par exemple vos chaines de caractères sont entourés d'accents ce qui est une connerie. Vous devez les entourer d'apostrophes simple (quote). Utilisez donc un bon SGBDR comme PostGreSQL ou SQL Server et pas cette merde de MySQL si vous voulez apprendre le langage SQL !

    J'ai honte envers le système éducatif quand je voit un tel cumul de stupidité !

    Corrigeons donc votre première requête :

    1.Quelles sont les dates de concert de "Johnny" au "Zenith" ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Select Concert.Date
    From   Chanteur AS CHA
           JOIN Concert AS CON 
    	        ON ??? --> quelle condition lie les tables CHA et CON ???
    	   JOIN Salle AS SAL
    	        ON ??? --> quelle condition lie les tables CON et SAL ? CHA.Nom = SAL.Nom ???
    Where Chanteur = 'Johnny'
    Oubli du connecteur logique "AND" dans la clause WHERE

    Bref, apprenez le SQL. Mon livre, comme mon site web peuvent vous y aider.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 259
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    Permettez-moi tout d'abord de vous dire que si l'on vous a appris à faire des jointures dans le WHERE, alors votre professeur est un imbécile. Et je me permet de le dire, étant moi même enseignant et auteur de ce livre qui est utilisé par bon nombre de profs : http://www.amazon.fr/dp/2744076309/ (ce livre en est à sa 4e édition...)

    Or depuis la norme SQL de 1992, les jointures se font avec l'opérateur JOIN associé au prédicat ON !
    Sans cela vous allez immanquablement faire des erreurs dans vos jointures... C'est d'ailleurs le cas de votre première requête !
    Et c'est malheureusement bien encore trop souvent ce qui est enseigné dans bon nombre d'écoles informatique, y compris par des profs relativement jeunes.

    J'ai encore eu affaire, ya pas si longtemps, à un jeune ingénieur en stage de fin d'étude, qui ne connaissait ni le mot clé INNER JOIN, ni les expressions "Jointure implicite" et "Jointure explicite". Dans son code, il jonglait difficilement, car il ne peut en être autrement, avec de la jointure implicite pour les jointures internes et les LEFT et RIGHT pour les jointures externes.

    Ca ne sera plus le cas, à mon avis, seulement lorsque les SGBD seront conçus pour ne plus accepter ces p***** de sa**** de jointures implicites

  4. #4
    Membre émérite Avatar de bstevy
    Homme Profil pro
    Solutions Architect
    Inscrit en
    Mai 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Japon

    Informations professionnelles :
    Activité : Solutions Architect
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2009
    Messages : 552
    Par défaut
    LOL ! J'adore ta réponse pour l'énoncé 2 ^^

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Select Chanteur.Nom
    From Chanteur, Salle
    Where Chanteur.Nom=Salle.Nom
              Salle.Nom='Cygale'
              Salle.Nom='Zenith'
    Bon, sans parlé du fait que c'est faux syntaxiquement, tu as Chanteur.Nom=Salle.Nom et Salle.Nom='Cygale' et Salle.Nom='Zenith',
    autrement dit, d'un simple point de vue logique : 'Cygale' = 'Zenith' ; ca te parait pas un peu bizarre ?


    Je pense que la colonne nom de ta table chanteur ne doit pas etre le meme nom que ta table salle ^^


    essaye ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select	A.Nom, C.Nom 
    FROM	Chanteur A
    inner join Spectacle B on A.Chanteur_id = B.Chanteur_id
    inner join Salle C on C.Salle_id = B.Salle_id
    where C.Nom in ('Zenith', 'Cygale')
    ;

  5. #5
    Membre émérite Avatar de bstevy
    Homme Profil pro
    Solutions Architect
    Inscrit en
    Mai 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Japon

    Informations professionnelles :
    Activité : Solutions Architect
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2009
    Messages : 552
    Par défaut
    quelques réponses en vrac

    --3) Quels sont les chanteurs qui n'ont jamais donné de spectacle au "Zenith" ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    select Nom
    from Chanteur A
    where not exists	(	select 1
    						from Spectacle B
    						inner join Salle C on B.Salle_id = C.Salle_id
    						where A.Chanteur_id = B.Chanteur_id
    						AND C.nom = 'Zenith'
    					)
    ;
    --4) Quels sont les chanteurs qui ont fait un concert au "Zenith" et à la "Cygale" à l'exclusion de toute autre salle ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    select Nom
    from Chanteur A
    where exists	(	select 1
    					from Spectacle B
    					inner join Salle C on B.Salle_id = C.Salle_id
    					where A.Chanteur_id = C.Chanteur_id
    					AND C.nom in ( 'Zenith', 'Cygale')
    				)
    and not exists	(	select 1
    					from Spectacle B
    					inner join Salle C on B.Salle_id = C.Salle_id
    					where A.Chanteur_id = C.Chanteur_id
    					AND C.nom not in ( 'Zenith', 'Cygale')
    				)
    ;
    --6) Quels sont les noms des salles de plus grande capacité ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select Nom
    from Salle
    order by Capacité desc
    ;
    --8) Quels sont les chanteurs qui ont chanté dans toutes les salles ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    select nom from (
    	select nom, count(*) as nb_salle from 
    	(
    		select distinct A.nom, C.Salle_id
    		from Chanteur A
    		inner join Spectacle B on A.Chanteur_id = B.Chanteur_id
    		inner join Salle C on B.Salle_id = C.Salle_id
    	)
    	group by nom
    ) where nb_salle = (select count(*) from Salle)
    ;

  6. #6
    Membre extrêmement actif
    Avatar de islamov2000
    Homme Profil pro
    Ingénieur d'études & developpement en informatique
    Inscrit en
    Septembre 2007
    Messages
    814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur d'études & developpement en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 814
    Billets dans le blog
    6
    Par défaut
    --8) Quels sont les chanteurs qui ont chanté dans toutes les salles ?
    @bstevy;pourquoi être compliqué et aller à 3 requêtes imbriquées puisque on peut la faire avec une seule requête.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select count (distinct  SL.Salle_id),C.Chanteur_id,C.Nom
    from  Salle SL join spectacle SP on SL.Salle_id=SP.Salle_id join Chanteur C on C.Chanteur_id=SP.Chanteur_id
    group by C.Chanteur_id,C.Nom
    having count(distinct  SL.Salle_id)=(select count(*) from Salle)

Discussions similaires

  1. Valeur des formulaire réutilisées dans des requètes SQL.
    Par cotmar dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 09/05/2006, 10h16
  2. Fabriquer des requêtes sql à partir d'un document xml
    Par ktel dans le forum XQUERY/SGBD
    Réponses: 4
    Dernier message: 18/10/2005, 16h45
  3. [MFC] comment écrire des requêtes SQL
    Par kitsune dans le forum MFC
    Réponses: 9
    Dernier message: 27/09/2005, 15h23
  4. Journal des requêtes SQL effectuées
    Par Kcirtap dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 18/07/2005, 09h58
  5. Recherche ibrairie pour éxécuter des requêtes SQL via C++
    Par daemon dans le forum Choisir un environnement de développement
    Réponses: 5
    Dernier message: 14/06/2004, 10h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo