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

Requêtes MySQL Discussion :

Quelques requêtes sur une base de donnée


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 38
    Par défaut Quelques requêtes sur une base de donnée
    Bonjour,
    J'ai quelques requête à faire sur une base de donnée en SQL

    la base :
    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
    32
    33
    34
    35
    TABLE PROJECT
      PROJECTID      CHARACTER(10) (Primary Key)
      PROJECT_NAME   CHARACTER(40)
     
    TABLE COMPOUND
      COMPID	     CHARACTER(15) (Primary Key)
      STRUCTURE      BLOB
     
    TABLE REACTION
      REACTIONID     INTEGER (Primary Key)
      COMPID         CHARACTER(15)
      BATCHNO        CHARACTER(35)(Unique Key)
      PROJECTID      CHARACTER(10)
      LIBRARYNAME    CHARACTER(35)
     
    TABLE BIOLOGICAL_DATA
      COMPID              CHARACTER(15)
      BATCHNO             CHARACTER(35)
      TESTID              NUMBER
      PROJECTID           CHARACTER(10)
      NUM_VALUE           NUMBER
      ANALYTICALID        INTEGER
      REACTIONID          INTEGER
      BIODATAID           INTEGER (Primary Key)
     
    TABLE SAMPLE_DATA
      ANALYTICALID         INTEGER (Primary Key)
      REACTIONID           INTEGER  
      PROJECTID            CHARACTER(10)
      BARCODE              CHARACTER(35)
      CONTAINERID          CHARACTER(35)
      WELL                 NUMBER
      QUANTITY             NUMBER
      UNIT                 CHARACTER(10)
      PURITY               NUMBER
    Mes requète :

    1) obtenir la liste de tous les projets (PROJECTID) et le nombre total de "batches" (repéré par, je pense, BATCHNO) pour chaqu'un.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select PROJECTID, count(BATCHNO) asnumber of batches”
    from PROJECT P, REACTION R
    where P.PROJECTID = R.PROJECTID
    2) obtenir la liste de tous les projets (PROJECTID) et le nombre total de "biological results" (repéré par, je pense, BIODATAID) pour chaqu'un.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select PROJECTID, count(BIODATAID) asnumber of  biological results”
    from PROJECT P, BIOLOGICAL_DATA B
    where P.PROJECTID = B.PROJECTID
    3) obtenir la liste de tous les composants (COMPID) et le nombre total de "batches"(lots) et "sample"(échantillon) pour chaqu'un.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select COMPID, count(BATCHNO), sum(QUANTITY)
    from BIOLOGICAL_DATA B, SAMPLE_DATA S
    where B.ANALYTICALID = S.ANALYTICALID
    4) obtenir la liste de tous les "batches"(lots) (BATCHNO) ayant une "purity" moyenne >50 pour les "samples"(échantillions) ayant une "quantity">10.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select BATCHNO, avg(PURITY)
    from REACTION R, SAMPLE_DATA S
    where R.REACTIONID = S.REACTIONID
    and S.QUANTITY <10
    group by BATCHNO
    having AVG(PURITY)<50
    5) obtenir la liste de tous les "batches"(lots) (BATCHNO) n'ayant pas de "biological data"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select BATCHNO
    from REACTION R
    where R.BATCHNO not in(
    		select BATCHNO from BIOLOGICAL_DATA )
    Voilà c'est assez long je m'en excuse,

    Est-ce quelqu'un peut me dire si mes réponses sont correctes, et sinon quelles sont fautes que je doit corriger ?

    Je débute en SQL, donc toute aide est la bien venue !!

    MERCI d'avance !!

  2. #2
    Expert confirmé
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 932
    Par défaut
    Je ne vois pas l'intérêt de la jointure sur la 1...

  3. #3
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 059
    Par défaut
    Bonjour,

    Si je peux me permettre quelques remarques .
    De manière générale, puisque tu débutes en SQL, essaie de prendre l'habitude d'écrire les jointures avec la synthaxe INNER JOIN, LEFT JOIN... plutôt que par la condition de jointure dans le WHERE. C'est plus propre, ça permet d'identifier ce qui est du domaine de la jointure et du domaine de la condition... Bref, ça n'a que des avantages.
    Voici un excellent tutoriel pour apprendre tout ça : SQL de A à Z.

    Prenons maintenant les requêtes les unes après les autres :
    1/ il faut un GROUP BY pour avoir le nombre de batchs par projet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT P.PROJECTID, count(R.BATCHNO) AS NB_BATCHES
    FROM PROJECT P
    INNER JOIN REACTION R ON P.PROJECTID = R.PROJECTID
    GROUP BY P.PROJECTID
    Il faut également donner l'alias P ou R devant PROJECTID dans le SELECT et le GROUP BY, sinon MySQL hésitera entre les 2... et renverra une erreur.
    Dernière remarque, renommer le nombre de batches par un nom sans espaces (éventuellement en mettant entre ` (touches Alt Gr + 7) et non pas entre guillemets).

    2/ Idem que pour la requête 1.

    3/ Egalement les mêmes remarques. Ne connaissant pas les données dans les tables, il est difficile de te dire si la condition de jointure est correcte ou pas... Avec un jeu de données en exemple, ça serait peut-être plus simple...
    Attention, avec le INNER JOIN, on élimine les lignes qui n'ont pas de correspondance. Pour avoir 0 en retour du COUNT, il faut faire un LEFT JOIN.

    4/ Encore une fois, mettre les alias d'une des deux tables sur les données du SELECT (en tout cas pour BATCHNO), ainsi que dans le GROUP BY.

    5/ Pour de meilleures performances, on obtient le même résultat sans sous-requête avec une jointure à gauche comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT R.BATCHNO
    FROM REACTION R
    LEFT JOIN BIOLOGICAL_DATA B ON R.BATCHNO = B.BATCHNO
    WHERE B.BATCHNO IS NULL
    Elle tournera plus vite et est compatible avec toutes les versions de MySQL.

    Voilà quelques indications .

    Bon courage,

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [2008] Requête SQL sur une base de données en python
    Par noramokh dans le forum Développement
    Réponses: 2
    Dernier message: 16/02/2015, 17h02
  2. Réponses: 11
    Dernier message: 22/01/2014, 19h30
  3. [Lazarus] Problème de requête sur une base de données
    Par bubulemaster dans le forum Lazarus
    Réponses: 1
    Dernier message: 09/11/2007, 18h14

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