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

MS SQL Server Discussion :

Exercices sql server


Sujet :

MS SQL Server

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 177
    Points : 74
    Points
    74
    Par défaut Exercices sql server
    Bonjour, je fait des exo en ce moment pourriez vous me dire si se que je fais est juste:

    énoncé:
    On considère la bd qui représente des réservation de vols:
    VOL(Numvol, VilleDep, VilleDest, Compagnie)
    DEPART(NumDep, Numvol, DateDep, NbDisp)
    FREQUENCE(Numvol, jour)
    RESERVATION(Client, NumDep, Npostes)

    *Jour indique les jours de la semaine (1 = lundi, 7=dimanche et 10 =tous les jours)

    1) Trouver les compagnies qui effectuent à la fois des vols a destination e PAris et a destination de lisbone

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Select Compagnie from VOL
    where villeDest ='Paris' and Compagnie in (select Compagnie from VOL where villeDest ='Lisbone';
    2)Trouver les clients qui n'ont de reservation qu au départ de paris(cad les clients dont toutes les résa sont au départs de paris)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    select client from RESERVATION 
    where Client in (select RESERVATION.client from RESERVATION 
    join (DEPART on RESERVATION.NumDep = DEPART.NumDep) 
    join VOL on DEPART.Numvol = VOL.Numvol ) 
    where VilleDep = 'Paris'
    and client not in (select RESERVATION.client from RESERVATION 
    join (DEPART on RESERVATION.NumDep = DEPART.NumDep) 
    join VOL on DEPART.Numvol = VOL.Numvol)
    where VilleDep !='Paris';
    3)trouver les numéros de vols au départ de paris dont la fréquence hebdomadaire est journalière ou au moins deux fois par semaine

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select Numvol, count(jour) from FREQUENCE join VOL on FREQUENCE.Numvol = VOL.Numvol
    where VilleDep = 'Paris'
    group by Numvol
    having count(jour) > 2;
    Merci de votre aide

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 177
    Points : 74
    Points
    74
    Par défaut ex2
    ex2
    creer une vue VolsDestParis des vols a destination de paris:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    create view VolsDestParis (numeroDeVol, VilleDepart, VilleDestination, CompagnieAvion as
    select Numvol, VilleDep, villeDest, compagnie from VOL
    where villeDest = 'Paris';
    inserer dans la vue le vol : Numvol = KL789, VilleDep = Olso, villeDest = Malaga, Compagnie = KLM:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into VolsDestParis (numeroDeVol, VilleDepart, VilleDestination, CompagnieAvion) values ('KL789', 'Olso', 'Malaga', 'KLM')
    Sans check Option:
    Le tuple est insere ou pas dans la vue? -->Non
    Le tuple est insere dans la table VOL? -->Oui
    Le tuple apparait ou pas dans la vue -->Non

    Avec check Option:
    Le tuple est insere ou pas dans la vue? -->Non
    Le tuple est insere dans la table VOL? -->Non
    Le tuple apparait ou pas dans la vue -->Non

    Donner l'instrution SQL pour creer la vue ReservationSynth contennat le nom du client, le numero de vol, la ville de départ, la ville de destibnation et la date de depart.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    create view ReservationSynth (nom, numero_vol, ville_de_dep, ville_de dest, date_depart ) as
    select RESERVATION.client, VOL.NumVol, VOL.VilleDep, VOL.VilleDest, DEPART.DateDep from (RESERVATION join DEPART on RESERVATION.NumDep = DEPART.NumDep) join VOL on DEPART.NumVol = VOL.NumVol
    whith check option
    Peut on supprimer des données de la vue?
    Non car la vue utilise plusieurs tables.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 50
    Points : 60
    Points
    60
    Par défaut
    Bonjour,

    1) Il me semble utile d'éliminer les doublons, et pourquoi s'embêter avec une sous-requête inutile ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DISTINCT Compagnie FROM VOL WHERE VilleDest = 'Paris' OR VilleDest = 'Lisbone'
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DISTINCT Compagnie FROM VOL WHERE VilleDest IN ('Paris', 'Lisbone')

    A prendre en compte également pour tes autres requêtes.

    Par exemple pour 2) ; tu peux sauf erreur te contenter de sélectionner (et avec un DISTINCT) tous les clients qui ne sont pas dans la liste des clients ayant un départ <> Paris.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 177
    Points : 74
    Points
    74
    Par défaut ex3
    Ecrire une procedure ayant en parametre une ville de depart qui affiche:
    1/les numeros de vol partant de cette ville
    2/la ville de destination
    3/Les jours de la semaine indiqué par leur noms

    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
    16
    17
    18
    create procedure proc (@villeDeDepart char) as
     
    if exists(select * from VOL where VilleDep = @villeDeDepart )
    begin
    select VOL.NumVol, VOL.VilleDest, DEPART.jour from VOL join DEPART on VOL.Numvol = DEPART.Numvol
    and select case 
    when jour = 1 then 'Lundi'
    when jour = 2 then 'Mardi'
    when jour = 3 then 'Mercredi'
    when jour = 4 then 'jeudi'
    when jour = 5 then 'vendredi'
    when jour = 6 then 'samedi'
    when jour = 7 then 'dimanche'
    end
    else
    begin
    print('ville inexistante')
    end

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 177
    Points : 74
    Points
    74
    Par défaut ex4
    écrire un trigger qui met a jour le nombre de postes disponible sur un vol lorsqu'un réservation est ajoutée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    create trigger poste_dispo on RESERVATION for insert as
    declare @resa int
    declare @dispo int
    select @resa = Nposte from inserted
    select @dispo = NbDisp from depart
    update depart set NbDisp = @dispo -@resa

  6. #6
    Membre régulier
    Inscrit en
    Septembre 2003
    Messages
    91
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 91
    Points : 95
    Points
    95
    Par défaut
    Bonjour,
    pour l'exo 1.1 j'utilise un
    where exist (select....)
    de même que pour le 1.2 j'utilise un
    where not exist (select....)
    -
    pour l'exercice 3 (je met juste le code du select qui diffère du tient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SELECT     v.compagnie Compagnie, 
                   v.numID Num_Vol, 
                   v.arrivee Dest, 
                   CASE 
                      WHEN d .jour = 2 THEN 'mardi' 
                      WHEN d .jour = 3 THEN 'mercredi' 
                   END Jour
    FROM         vols v, Depart d
    WHERE     v.numID = d .numVol
    Code rapide donc j'ai pas repirs tous les cas.
    -
    Judas ta requete est fausse elle ressort toutes les compagnies qui désservent Paris ou Lisbonne ou les 2
    -
    bonne journée

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 50
    Points : 60
    Points
    60
    Par défaut
    Ah oui au temps pour moi, j'avais mal lu l'énoncé , merci d'avoir corrigé.

  8. #8
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Quelques corrections:

    Exercice 3 :

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    CREATE PROCEDURE PsGetParametresVol
    	@villeDeDepart VARCHAR(50)
    AS
    BEGIN 
    	IF EXISTS
    	(
    		SELECT *
    		FROM dbo.VOL
    		WHERE VilleDep = @villeDeDepart
    	)
    	BEGIN
    		SELECT VOL.NumVol,
    				VOL.VilleDest,
    				CASE DEPART.jour
    					WHEN 1 THEN 'Lundi'
    					WHEN 2 THEN 'Mardi'
    					WHEN 3 THEN 'Mercredi'
    					WHEN 4 THEN 'Jeudi'
    					WHEN 5 THEN 'Vendredi'
    					WHEN 6 THEN 'Jeudi'
    					WHEN 7 THNE 'Dimanche'
    					ELSE 'Inconnu'
    				END AS JourDeDepart
    		FROM dbo.VOL
    		JOIN dbo.DEPART ON VOL.Numvol = DEPART.Numvol
    	END
    	ELSE
    	BEGIN
    		RAISERROR('La ville %s n''existe pas !', 16, 1, @villeDeDepart)
    	END
    END
    Exercice 4 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CREATE TRIGGER TR_AI_RESERVATION
    	ON RESERVATION
    AFTER INSERT
    AS
    BEGIN
    	UPDATE dbo.depart
    	SET NbDisp = D.NbDisp - I.Nposte
    	FROM dbo.depart AS D
    	JOIN INSERTED AS I ON I.ID = D.ID
    END
    Votre trigger est faux parce qu'il n'est pas ensembliste.
    Que se passe-t-il si j'ajoute 150 réservations d'un coup ? seul la première va être traitée

    Veillez également à qualifier le nom des objets que vous utilisez par le nom du schéma auquel ils appartiennent, car cela évite des recherches implicites dans le catalogue de métadonnées, donc les performances en seront améliorées.
    Ne spécifiez pas non plus vos jointures dans un WHERE

    @++

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    génie informatique
    Inscrit en
    Janvier 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : génie informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 2
    Points : 0
    Points
    0
    Par défaut je veux une réponse ????
    *)trouver les numéros de vols et les compagnies lesquels il n'y a aucun poste disponible?

Discussions similaires

  1. exercices avec leurs corrigés de sql server 2005
    Par asmar dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 07/01/2010, 12h04
  2. Exercice sql server 2000
    Par tobba dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 20/05/2008, 05h30
  3. Pb migration Access / SQL server
    Par yoyo dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 25/04/2005, 10h39
  4. Backup BD SQL Server
    Par Ethmane dans le forum Administration
    Réponses: 3
    Dernier message: 07/06/2002, 00h42

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