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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 175
    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 Expert
    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
    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
    Membre éprouvé

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 175
    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 Expert
    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
    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
    Membre éprouvé

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 175
    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 Expert
    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
    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 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 599
    Billets dans le blog
    65
    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.

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, 10h33
  2. Question de débutant en Sql
    Par dryzd dans le forum Langage SQL
    Réponses: 4
    Dernier message: 25/02/2009, 15h54
  3. [débutant] Questions sur le Transact-SQL
    Par nagty dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 05/07/2005, 17h43
  4. Questions de débutant
    Par J-P-B dans le forum XMLRAD
    Réponses: 12
    Dernier message: 24/07/2003, 15h19
  5. [HyperFile] 2 questions de débutant
    Par khan dans le forum HyperFileSQL
    Réponses: 2
    Dernier message: 29/04/2002, 23h18

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