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

SQL Oracle Discussion :

Exercices SQL


Sujet :

SQL Oracle

  1. #1
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 174
    Par défaut Exercices SQL
    bonjour quelqu'un peut corriger avec moi ces exercices
    voici la table
    Nom : sql.png
Affichages : 2020
Taille : 157,1 Ko

    Exercices

    1 Liste des employés travaillant à "DALLAS"
    2 Noms et dates d'embauche des employés embauchés avant leur manager, avec le nom et la date d'embauche du manager
    3 Noms et dates d'embauche des employés embauchés avant 'BLAKE'

    Résultats

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from emp where deptno = (select deptno from dept where upper(loc)='DALLAS')
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select em.ename , mg.ename,em.hiredate, mg.hiredate from emp em , emp mg WHERE em.empno = mg.mgr
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select ename , hiredate from emp where hiredate < (select hiredate from emp where upper(ename)='BLAKE')

  2. #2
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Si tu veux vérifier, crée toi une base (sur Apex online par exemple) avec tes données et exécute tes requêtes.

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2011
    Messages
    135
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 135
    Par défaut
    Bonsoir,

    2 Noms et dates d'embauche des employés embauchés avant leur manager, avec le nom et la date d'embauche du manager :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select EM.ename,EM.hiredate,MG.ename,MG.hiredate
    From EMP EM JOIN EMP MG
    ON (EM.mgr=MG.empno)
    AND EM.hiredate<MG.hiredate;

  4. #4
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 174
    Par défaut
    Citation Envoyé par goldray Voir le message
    Bonsoir,

    2 Noms et dates d'embauche des employés embauchés avant leur manager, avec le nom et la date d'embauche du manager :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select EM.ename,EM.hiredate,MG.ename,MG.hiredate
    From EMP EM JOIN EMP MG
    ON (EM.mgr=MG.empno)
    AND EM.hiredate<MG.hiredate;
    mercii

    31- Insérer le salaire minimum et maximum pour chaque département dans la table
    SALGRADE(GRADE, LOSAL, HISAL) qui exist déja, avec le numéro de département comme grade.

    pour cette question je fais quoi ?

  5. #5
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 174
    Par défaut
    Citation Envoyé par McM Voir le message
    Si tu veux vérifier, crée toi une base (sur Apex online par exemple) avec tes données et exécute tes requêtes.
    je veux savoir aussi si c'est la meilleur réponse c'est pour cela j'ai poster ici par exemple question 1 est-ce que c'est mieu d'utiliser sous requette ou jointure ...
    pour la table je l'ai deja il existe par défaut sur oracle Schéma scott

  6. #6
    Membre confirmé
    Inscrit en
    Avril 2011
    Messages
    135
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 135
    Par défaut
    Bonsoir,

    L'utilisation des sous requêtes est moins couteuse par rapport à la jointure.

    31- Insérer le salaire minimum et maximum pour chaque département dans la table
    SALGRADE(GRADE, LOSAL, HISAL) qui exist déja, avec le numéro de département comme grade.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    INSERT INTO SALGRADE
    SELECT DEPTNO,MIN(SAL),MAX(SAL)
    FROM EMP
    GROUP BY DEPTNO
    ORDER BY DEPTNO;

  7. #7
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 174
    Par défaut
    Citation Envoyé par goldray Voir le message
    Bonsoir,

    L'utilisation des sous requêtes est moins couteuse par rapport à la jointure.

    31- Insérer le salaire minimum et maximum pour chaque département dans la table
    SALGRADE(GRADE, LOSAL, HISAL) qui exist déja, avec le numéro de département comme grade.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    INSERT INTO SALGRADE
    SELECT DEPTNO,MIN(SAL),MAX(SAL)
    FROM EMP
    GROUP BY DEPTNO
    ORDER BY DEPTNO;
    merci
    pour l'utilisation du jointure ui sous requette est mieu mais si il nous demande d'afficher ou il travail aussi il faut utiliser jointure parce c'est impossible de le faire avec sous requette .
    dans la question je suis pas sur si il faut affiche ou il travail ou pas .

  8. #8
    Membre confirmé
    Inscrit en
    Avril 2011
    Messages
    135
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 135
    Par défaut
    Citation Envoyé par MR-SMOOT Voir le message
    merci
    pour l'utilisation du jointure ui sous requette est mieu mais si il nous demande d'afficher ou il travail aussi il faut utiliser jointure parce c'est impossible de le faire avec sous requette .
    dans la question je suis pas sur si il faut affiche ou il travail ou pas .
    Il y en a des cas où nous sommes obligés d'utiliser la jointure pour récupérer des données depuis deux ou plusieurs tables.

    Il n'est pas nécessaire d'afficher la colonne "LOC" puisque le résultat va afficher tous les employés travaillant à DALLAS, donc on sait déjà la ville de chaque employé, c'est inutile de la mentionner.

  9. #9
    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
    Les jointures ne se fonts pas avec des sous-requetes, en plus, elles se fonts actuellement avec nouvelle techniques et pas avec la méthodes classique.

    Pour la requete 2:
    tu n'as pas intégré le critère de date de recrutement du manager pour avoir les employées recrutés avant leurs managers.

    Requete 1:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from emp A join dept B on  A.DEPTNO=B.DEPTNO where upper(loc)='DALLAS'
    Requete 2:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select A.ENAME,A.HIREDATE,M.ENAME,M.HIREDATE from emp A join emp M on A.MGR=M.EMPNO and A.HIREDATE<M.HIREDATE

    Requête 3:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select A.ename,A.HIREDATE from emp A  join emp B on  A.HIREDATE < B.HIREDATE and B.ENAME='BLAKE'

  10. #10
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 591
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 591
    Billets dans le blog
    10
    Par défaut
    Citation Envoyé par islamov2000 Voir le message
    Les jointures ne se fonts pas avec des sous-requetes, en plus, elles se fonts actuellement avec nouvelle techniques et pas avec la méthodes classique.
    Si vous faites allusion à la séparation des critères de filtrage (where) des critères de jointures (JOIN) alors ce n'est pas franchement nouveau, puisque c'est ainsi depuis plus de 15 ans et ce n'est pas vraiment une technique mais plutôt une syntaxe
    Tant qu'à faire, il est préférable de coder explicitement la jointure INNER (INNER JOIN) plutôt qu'implicitement (JOIN seulement), ça évite toute ambiguïté.

  11. #11
    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
    Oui tu as raison, escartefigue.
    J'ai dit nouvelle, c'est relative à l'ancienne syntaxe.
    Avant bien les années 2000, nous avons appris que les jointures se fonts dans la clause where.

  12. #12
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 461
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    ...Tant qu'à faire, il est préférable de coder explicitement la jointure INNER (INNER JOIN) plutôt qu'implicitement (JOIN seulement), ça évite toute ambiguïté.
    Je ne vois pas quelle ambiguïté il y a dans un JOIN, puisqu'il y aura des éléments distinctifs en cas de jointure externe.
    Mais pour le coup, j'aime bien écrire LEFT OUTER JOIN et non LEFT JOIN tout court, car je trouve ça plus explicite.

  13. #13
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 591
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 591
    Billets dans le blog
    10
    Par défaut
    Ca me semble toujours plus clair d'écrire clairement ce que l'on fait plutôt que de le laisser supposer, et ça facilite la vie aux débutants qui ne se poseront pas la question (ils sont nombreux sur les plates formes de dev, ne l'oublions pas)
    Cela dit je n'irai pas me battre pour ce point de détail

    Ca participe de la même logique que de séparer le filtrage de la jointure : c'est plus clair

  14. #14
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    Tant qu'à faire, il est préférable de coder explicitement la jointure INNER (INNER JOIN) plutôt qu'implicitement (JOIN seulement), ça évite toute ambiguïté.
    En SQL, je vois très souvent écrit trunc(unedate) pour arrondir à la journée.
    En suivant votre raisonnement, il faut écrire trunc(unedate, 'dd').
    On peut pousser ce raisonnement sur énormément de fonctions, sur le ASC dans les clauses de tri, sur les caractères d'échappement dans le LIKE et sûrement encore d'autres choses auxquelles je ne pense pas, ça revient à se priver de facilités d'écriture.

    Citation Envoyé par Pomalaix Voir le message
    Mais pour le coup, j'aime bien écrire LEFT OUTER JOIN et non LEFT JOIN tout court, car je trouve ça plus explicite.
    Quand il n'y a que des jointures fortes dans une requête, j'écris simplement JOIN partout.
    Quand il y a des jointures externes ou des produits cartésiens, j'écris INNER JOIN, LEFT JOIN et CROSS JOIN.
    J'évite le mot OUTER qui décalerait trop ma mise en page.

    L'important au final c'est que la requête soit juste, et s'exécute dans des conditions acceptables au sein de son environnement technique.

  15. #15
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 461
    Par défaut
    Mode blague : et moi j'écris COMMIT WORK WRITE WAIT IMMEDIATE pour être sûr de l'effet de mon COMMIT sans dépendre des aléas du paramétrage.

  16. #16
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Ce qui compte probablement c’est d’adopter un style d’écriture des requêtes et de prendre soin de le respecter. Normalement il devrait y avoir des normes d’écriture propre à chaque « équipe » de développement.
    Je remarque également que certains experts assez réputé n’utilisent jamais les jointures AINSI.
    Et je tiens à rappeler que de toute façon dans la plupart des cases l’optimiseur d’Oracle récrit la requête à son sauce non-ANSI
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Select d.dname, e.ename
      from dept d
           Left Outer Join
           emp e
        On d.deptno = e.deptno
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Predicate Information (identified by operation id):
    ------------------------------------------
    * 1 - access("D"."DEPTNO"="E"."DEPTNO"(+))

Discussions similaires

  1. [Exercices SQL] Patient, médicament, allergies, etc
    Par D3V1L J4M dans le forum Langage SQL
    Réponses: 9
    Dernier message: 07/04/2018, 11h03
  2. Exercice SQL sous Oracle
    Par IDE dans le forum Langage SQL
    Réponses: 4
    Dernier message: 03/12/2007, 22h41
  3. [Exercices SQL] requêtes
    Par titecherie02 dans le forum Langage SQL
    Réponses: 9
    Dernier message: 21/02/2006, 13h53
  4. des exercices SQL SERVER7 SVP..
    Par jeune85 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 03/01/2006, 16h15
  5. problemes exercices sql
    Par siciliano_messinese dans le forum Langage SQL
    Réponses: 3
    Dernier message: 23/09/2005, 16h52

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