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 Firebird Discussion :

Question de débutant en SQL


Sujet :

SQL Firebird

  1. #1
    Expert éminent

    Homme Profil pro
    Retraité
    Inscrit en
    Septembre 2002
    Messages
    2 174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 174
    Points : 6 490
    Points
    6 490
    Billets dans le blog
    2
    Par défaut Question de débutant en SQL
    Bonjour,

    N'ayant eu aucune formation en SQL, je me trouve parfois devant ce qui est un mur pour moi (même si ça peut sembler élémentaire pour d'autres).

    Voila, j'ai trois tables
    Table A avec :
    A.ID_A1, {clé primaire}
    A.DESCRIPTION_A1,

    Table B avec :
    B.ID_B1, {clé primaire}
    B.DESCRIPTION_B1,

    Table A avec :
    A.REF_A1, {clé étrangère liée a A.ID_A1}
    A.REF_A2, {clé étrangère liée a B.ID_B1}
    A.REF_A3,
    A.REF_A4,
    A.CHAMP1,
    A.CHAMP2,
    A.CHAMP3,
    A.CHAMP4,
    A.etc...,
    mais pas de clé primaire car l'unicité des enregistrements se fait par un Index unique comportant : A.REF_A1, A.REF_A2, A.REF_A3 et A.REF_A4.

    Plusieurs questions :
    • Comment trier sur A.REF_A1 puis A.REF_A2 puis A.REF_A3 puis A.REF_A4 (avec un tableur, c'est facile)
    • Je sais créér une vue qui permet l'affichage, mais pas le trie (et d'ailleurs, "order by" fonctionne avec un champ, pas avec un index ni plusieurs champs).
    • Le but est aussi de mettre tout ça dans un programme Delphi (ou Lazarus) et de pouvoir lire (forcément) mais aussi écrire. Est-ce possible dans une vue par exemple ?
    • Comment ça marche les jointures ? et différence avec les vues ?

  2. #2
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 157
    Points : 1 414
    Points
    1 414
    Par défaut
    La première des choses serait de faire un tour dans les tutoriels qui sont particulièrement bien fait

    Citation Envoyé par Pierre GIRARD Voir le message
    Bonjour,

    Plusieurs questions :
    [LIST][*]Comment trier sur A.REF_A1 puis A.REF_A2 puis A.REF_A3 puis A.REF_A4 (avec un tableur, c'est facile)
    Facile aussi ORDER BY, que vous indiquez ensuite


    Citation Envoyé par Pierre GIRARD Voir le message
    Bonjour,
    • Je sais créér une vue qui permet l'affichage, mais pas le trie (et d'ailleurs, "order by" fonctionne avec un champ, pas avec un index ni plusieurs champs).
    ORDER BY. Et fonctionne avec plusieurs colonnes, et avec ou sans index (mais cela impacte sur la vitesse d’exécution)

    Citation Envoyé par Pierre GIRARD Voir le message
    Bonjour,
    • Le but est aussi de mettre tout ça dans un programme Delphi (ou Lazarus) et de pouvoir lire (forcément) mais aussi écrire. Est-ce possible dans une vue par exemple ?
    • Comment ça marche les jointures ? et différence avec les vues ?
    Ca c'est une autre question; il me semble qu'il y a quelques choses la dessus dans une FAQ

    Citation Envoyé par Pierre GIRARD Voir le message
    Bonjour,
    • Comment ça marche les jointures ? et différence avec les vues ?
    Ça n'a rien à voir, voir les tutoriels

  3. #3
    Expert éminent

    Homme Profil pro
    Retraité
    Inscrit en
    Septembre 2002
    Messages
    2 174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 174
    Points : 6 490
    Points
    6 490
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par dehorter olivier Voir le message
    ...ORDER BY. Et fonctionne avec plusieurs colonnes, et avec ou sans index (mais cela impacte sur la vitesse d’exécution) ...
    Je n'avais trouvé que des exemples avec "order by CHAMP". Je suppose que la syntaxe est :
    - order by CHAMP1, CHAMP2, CHAMP3 ... ?

    Est-ce que ça tient compte de la hiérarchie, c'est-à-dire : d'abord tri sur CHAMP1, puis sur CHAMP2 etc... ?

  4. #4
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 157
    Points : 1 414
    Points
    1 414
    Par défaut
    Citation Envoyé par Pierre GIRARD Voir le message
    Je n'avais trouvé que des exemples avec "order by CHAMP". Je suppose que la syntaxe est :
    - order by CHAMP1, CHAMP2, CHAMP3 ... ?

    Est-ce que ça tient compte de la hiérarchie, c'est-à-dire : d'abord tri sur CHAMP1, puis sur CHAMP2 etc... ?
    absolument

  5. #5
    Expert éminent

    Homme Profil pro
    Retraité
    Inscrit en
    Septembre 2002
    Messages
    2 174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 174
    Points : 6 490
    Points
    6 490
    Billets dans le blog
    2
    Par défaut
    C'était aussi la partie facile, car pour les jointures ??? surtout avec mes trois tables, même avec les tutoriels ça ne m'as pas l'air très facile. Il me semble que le "UNION JOIN" correspond le mieux à ce que je cherche à faire, mais tous les exemples sont avec deux tables, pas trois (ou plus).

    Bon, dès que j'aurais le temps, je ferais des essais, mais j'ai le sentiment que je vais ramer pas mal de temps.

    Maintenant, c'est pas vital, c'est juste pour faire une base de données de recettes de cuisines Avec des tables du genre :
    Table 1 - Base de la recette
    01 Abats
    02 Boeuf
    03 Boissons (cocktails par exemple)
    04 Champignons
    05 ...

    Table 2 - Type de préparation
    01 Cru
    02 Casserole
    03 Cocotte
    04 ...

    Table 3 - Les recettes proprement dites

    Le tout pour accéder à des recettes scannées (et mises en forme) du genre :
    "./Recette/01/03/Code_Num.ext".
    Avec 01=Abats, 03=Cocotte, Code=GrasDoubleGratiné et Num=1 (1 par défaut, ou 2 ou plus) "_Num" permettant de rendre uniques deux recettes avec le même titre.
    ".ext" étant ".jpg" pour l'image, ".ingr" pour la liste des ingrédients et ".prep" pour la marche à suivre (les deux derniers étant des fichiers RTF).

    Actuellement, j'ai une application qui marche, mais elle est surtout efficace en consultation et je voudrais l'améliorer pour les recherches, les tries, et surtout pour l'ajout de nouvelles recettes dans la base.

  6. #6
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 157
    Points : 1 414
    Points
    1 414
    Par défaut
    C'était aussi la partie facile, car pour les jointures ??? surtout avec mes trois tables, même avec les tutoriels ça ne m'as pas l'air très facile. Il me semble que le "UNION JOIN" correspond le mieux à ce que je cherche à faire, mais tous les exemples sont avec deux tables, pas trois (ou plus).
    Les jointures à 3 tables (et même bien plus) sont tout à fait possibles. la syntaxe est exactement la même (les exemples sont souvent fournis avec 2 tables, parce que c'est plus court a écrire )

    Le type de jointure à utiliser dépend des besoins. Mais je ne suis pas sur que le "UNION JOIN" soit la meilleur solution (je ne connais pas exactement ce que tu souhaites, mais cela ressemble à de "simples" jointures INNER JOIN.
    Le plus judicieux est comme tu le proposes de tester des choses, et si des difficultés et/ou des questions de revenir sur le forum avec des posts plus précis auxquelles le forum essayera de t'aider

    Pense aussi à lire les règles du forum. par exemple à indiquer sur quel SGBD tu travailles (la jointure UNION JOIN n'est pas implémenté sur tous. donc autant ne pas partir la dessus si tu ne peux pas l'utiliser)

  7. #7
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 268
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 268
    Points : 41 668
    Points
    41 668
    Billets dans le blog
    64
    Par défaut
    Citation Envoyé par Pierre GIRARD Voir le message
    C'était aussi la partie facile, car pour les jointures ??? surtout avec mes trois tables, même avec les tutoriels ça ne m'as pas l'air très facile.
    Il me semble que le "UNION JOIN" correspond le mieux à ce que je cherche à faire, mais tous les exemples sont avec deux tables, pas trois (ou plus).
    UNION JOIN tout d'un coup j'ai eu un doute
    non c'est UNION pour joindre 2 ensemble de résultats (indentiques en forme)
    et JOIN pour joindre 2 tables ou 3 ou plus

    ensuite le JOIN va se distinguer en CROSS , INNER | {LEFT | RIGHT | FULL} [OUTER]

    ici se trouve je pense le summum de l'autoformation au SQL

    pour ce qui est du ORDER BY , avec firebird on peut aussi utiliser le 'numéro d'ordre' des champs dans la query (bien pratique quelquefois ) par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT CHAMP1,CHAMP2,CHAMP3 FROM TABLE1 
    ORDER BY 3,2 
    --est l'équivalent de
    SELECT CHAMP1,CHAMP2,CHAMP3 FROM TABLE1 
    ORDER BY CHAMP3,CHAMP2
    inutile dans ce cas là bien sur , mais dans ce cas ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT CHAMP1,CHAMP2,SUM(VAL1) FROM TABLE1
    GROUP BY 1,2 -- ou CHAMP1,CHAMP2
    Comment trier selon la Somme ?
    (simplifié il a moins de sel car on pourrais utiliser un nom d'alias pour SUM(VAL1) )

    Pour la question sur les vues , je vais aussi réduire , mais il faut considérer une vue comme un simple SQL stocké dans la base
    Citation Envoyé par SQLPro
    Les vues de la norme SQL 2 ne sont autre que des requêtes instanciées.
    Elles sont nécessaires pour gérer finement les privilèges. Elles sont utiles pour masquer la complexité de certains modèles relationnel.

  8. #8
    Expert éminent

    Homme Profil pro
    Retraité
    Inscrit en
    Septembre 2002
    Messages
    2 174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 174
    Points : 6 490
    Points
    6 490
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par dehorter olivier Voir le message
    ...Pense aussi à lire les règles du forum. par exemple à indiquer sur quel SGBD tu travailles ...
    Désolé, mais dans le Forum "SGBD > Firebird > SQL", il me semblait que ça allait de soit

    Comme je le disais, il faudra que je teste tout ça car jusqu'à présent je me contentais de :
    CREATE VIEW VUE1(liste)
    AS
    select
    liste
    from
    TBL_1 A,
    TBL_2 B,
    TBL_3 C
    where
    A.CHAMP1 = B.ID
    and A.CHAMP2 = C.ID
    order by CHAMPx;

    Et ensuite, le programme utilisait cette vue comme si c'était la seule table de la base. Comme je le disais, c'est parfait pour de la consultation, mais les limites sont vite atteintes.

    Pour ce qui est de JOIN, c'est quelque chose de totalement inconnu pour moi. Déjà, quand j'aurais compris à quoi correspondent "INNER", "OUTER", "LEFT" ... ça sera pas mal.

  9. #9
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 268
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 268
    Points : 41 668
    Points
    41 668
    Billets dans le blog
    64
    Par défaut
    Citation Envoyé par Pierre GIRARD Voir le message
    Pour ce qui est de JOIN, c'est quelque chose de totalement inconnu pour moi. Déjà, quand j'aurais compris à quoi correspondent "INNER", "OUTER", "LEFT" ... ça sera pas mal.
    comme déjà dit tu trouveras tout là , lien plus détaillé

  10. #10
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 157
    Points : 1 414
    Points
    1 414
    Par défaut
    Citation Envoyé par Pierre GIRARD Voir le message
    Désolé, mais dans le Forum "SGBD > Firebird > SQL", il me semblait que ça allait de soit

    c'est le WE

    Si tu dois passer des paramètres, utilise plutôt les procédures stockées que les VIEW

    Ce type de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    select
    liste
    from
    TBL_1 A,
    TBL_2 B,
    TBL_3 C
    where
    A.CHAMP1 = B.ID
    and A.CHAMP2 = C.ID
    order by CHAMPx;
    devrait plutôt s'écrire :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    select
        liste
    FROM
      TBL_1 A 
         INNER JOIN TBL_2 B ON A.CHAMP1 = B.ID
         INNER JOIN TBL_3 C ON A.CHAMP2 = C.ID
    WHERE yyyy  -- Si nécessaire 
    order by CHAMPx;

    Voila pour le INNER JOIN; Pour le LEFT JOIN
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select
        liste
    FROM
      TBL_1 A 
         LEFT JOIN TBL_2 B ON A.CHAMP1 = B.ID
    order by CHAMPx;
    Elle va t'afficher TOUS les éléments de la table A MEME ceux qui n'ont aucune correspondance avec la table B contrairement à la requête précédente.

    Comme le précise SergioMaster, les cours de SQLPro sont VRAIMENT un must; et il y aussi son bouquin pour ceux qui ont aussi un faible pour le papier

  11. #11
    Expert éminent

    Homme Profil pro
    Retraité
    Inscrit en
    Septembre 2002
    Messages
    2 174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 174
    Points : 6 490
    Points
    6 490
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par dehorter olivier Voir le message
    ...Elle va t'afficher TOUS les éléments de la table A MEME ceux qui n'ont aucune correspondance avec la table B contrairement à la requête précédente.
    En fait, dans mon cas, elles marchent exactement de la même façon, mais ça me semble normal, du fait que dans mon cas, il y a TOUJOURS une correspondance avec la table B et la table C.
    Citation Envoyé par dehorter olivier Voir le message
    Comme le précise SergioMaster, les cours de SQLPro sont VRAIMENT un must; et il y aussi son bouquin pour ceux qui ont aussi un faible pour le papier
    Je vais certainement y faire un sérieux tour mais je fais partie de ceux qui préfèrent les versions électroniques (plus facile de faire des "copier/Coller" ).

    Pour ce qui est des "VIEW", c'est quand même bien pratique pendant les tests pour comparer les résultats des requêtes. Dans le cas qui m'occupe, les 3 donnent exactement le même résultat (3608 enregistrements).

Discussions similaires

  1. question de débutant sur SQL
    Par looping dans le forum Bases de données
    Réponses: 1
    Dernier message: 14/03/2009, 11h33
  2. Question de débutant en Sql
    Par dryzd dans le forum Langage SQL
    Réponses: 4
    Dernier message: 25/02/2009, 16h54
  3. [débutant] Questions sur le Transact-SQL
    Par nagty dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 05/07/2005, 18h43
  4. Questions de débutant
    Par J-P-B dans le forum XMLRAD
    Réponses: 12
    Dernier message: 24/07/2003, 16h19
  5. [HyperFile] 2 questions de débutant
    Par khan dans le forum HyperFileSQL
    Réponses: 2
    Dernier message: 30/04/2002, 00h18

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