banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

#1 Mon 07 February 2011 13:02

chacha17
Juste Inscrit !
Date d'inscription: 7 Feb 2011
Messages: 5

Requête SQL débutante

Bonjour à tous,

Je viens de parcourir l'ensemble du forum sur toutes les informations que je pourrais trouver sur la rédaction des requêtes SQL sur Mapinfo. J'ai également lu pas mal de documents sur le sujet.

Malheureusement, les requêtes sql que je fais ne fonctionnent pas du tout et ca me donne toujours un message d'erreur (variable ou champs select non défini)!

J'ai essayé de commencer par des requêtes très simples, mais je n'arrive pas à décrypter la manière de parler des SQL et à comprendre la manière d'écrire!

Pour vous donnez un exemple:
Je pars d'une carte d'un quartier où j'ai tracé les rues et j'ai localisé sur chaque rues des "points noirs"
J'ai une table ("Point_analyse") contenant plusieurs colonnes. Les colonnes qui m'intéressent (pour faire simple) sont: "element_chaine"(caractère) et "visuel"(entier)
Je voudrais par exemple faire apparaitre en requête sql, tous les points de la colonne "element_chaine" qui ont un numéro 6 de la colonne "visuel".

Dans ma sélection SQL je met bien:
Colonnes: element_chaine, visuel
Tables: Point_analyse
Critères: select element_chaine from Point_analyse where visuel=6

Je vous remercie

Bonne journée

Hors ligne

 

#2 Mon 07 February 2011 13:18

Maurice
Membre
Lieu: Montpellier
Date d'inscription: 5 Sep 2005
Messages: 5331

Re: Requête SQL débutante

Bonjour
Soit vous utilisez la boîte de dialogue (le "requêteur") accessible par le menu Séléction -> Sélection SQL... et, dans ce cas, dans la zone "critères" il suffit d'indiquer visuel=6
Soit vous utilisez la fenêtre MapBasic (FMB) et dans ce cas vous devez y taper toute la requête
select element_chaine,visuel from Point_analyse where visuel=6 (puis faire 'enter' sur la ligne)

Hors ligne

 

#3 Mon 07 February 2011 13:22

Daniel
Membre
Lieu: Victoriaville, Québec
Date d'inscription: 6 Sep 2005
Messages: 2028

Re: Requête SQL débutante

Bonjour et bienvenue sur GeoRezo

Selon ce que je peux lire, c'est une simple requêtes!!!  Juste une sélection.
Dans le fenêtre sélection :
Table : Point_analyse
Requête : Visuel= 6

Ou je ne suis pas bien le demande!!! Des fois on peut faire une sélection et refaire une sélection dans le query.  Ou, on peut trier par une colonne.  Ce qui va facilié la lecture et pouvoir faire une sous-sélection manuelle. 

Daniel


De retour à la géomatique

Hors ligne

 

#4 Mon 07 February 2011 14:02

chacha17
Juste Inscrit !
Date d'inscription: 7 Feb 2011
Messages: 5

Re: Requête SQL débutante

Merci beaucoup pour la rapidité de vos réponses!!

cha

Hors ligne

 

#5 Tue 08 February 2011 12:41

chacha17
Juste Inscrit !
Date d'inscription: 7 Feb 2011
Messages: 5

Re: Requête SQL débutante

Bonjour,

Me revoilà!!

Après les nombreux essais que j'ai fait pour essayer de comprendre comment fonctionnent les requêtes SQL, je dois avouer que je suis assez perdue!! Le document que vous avez mis en lien sur ce site est très intéressant mais je me mélange les pinceaux avec tous les types d'expressions, les ponctuations, l'ordre et les chemas à respecter dans l'ecriture. Serait-il possible d'avoir des exemples et une idée des étapes à suivre pour la requête.

Par exemple dans mon cas:

1. Quand utilise t'on (dans quel cas) une requête SQL (dans Sélection) ou une requête simple (dans Sélection)?

2. Exemple quand on a une table avec plusieurs colonnes. Comment rédige t'on une requête pour faire un lien entre différentes colonnes d'une table unique?

ex: Table = Tab_X
Colonne 1 de la table = Rues (rue / place / stationnement)
Colonne 2 de la table = Nom (AA / BB / CC / ect)
Colonne 3 de la table = Caractéristiques  (pente / travaux / plateforme / danger)
Colonne 4 de la table = longueur ( 1 / 2 / 3)

Si par exemple je veux faire une requête dans cette table où je veux connaitre les rues (trier par nom) qui ont une caractéristiques "pente" et une longueur "2"

3. Faut-il bien respecter les "", les (), dans quelles circonstances on les utilise exactement?

4. Lorsqu'on a plusieurs tables, comment se rédigent les requêtes pour faire la liaison entre ces tables? Il y a un ordre à respecter? des ponctuations spécifiques?

ex: on a 3 tables: Tab_X       Tab_Y       Tab_Z
Colonnes de la TAB_X (correspondant par exemple à l'ensemble des rues d'un quartier)
Colonne 1 = Rues (rue / place / stationnement)
Colonne 2 = Nom (AA / BB / CC / ect)
Colonne 3 = Caractéristiques  (pente / travaux / plateforme / danger)
Colonne 4 = longueur ( 1 / 2 / 3)
Colonne 5 = IdX

Colonnes de la Tab_Y: (correspond par exemple à des points noirs, que l'on nommera "points_noirs" relevés sur les rues du quartier en question)
Colonne 1 = IdY
Colonne 2 = Id de la rue d'appartenance
Colonne 3 = Nom du point
Colonne 4 = Caractéristique du point (stationnement / obstacle/ traversée)

Colonnes de la Tab_Z: (correspond par exemple à des sous catégorie des points noirs relevés précédemment, que l'on nommera "sous_points_noirs", pour essayer d'être plus clair un point noir peut être associé à plusieurs sous points noirs.
Colonne 1 = IdZ
Colonne 2 = Nom du sous point noir
Colonne 3 = Caractéristique (rétrécissement, hauteur suffisante, présence d'obstacle)
Colonne 4 = Réponse (avec transformation / sans transformation / avec changement de niveau)
Colonne 5 = Cout des travaux

Types de requêtes:

Je veux connaitre le cout des travaux pour les sous points noirs qui ont une caractéristique "présence d'obstacle" et une caractéristique de point noir "traversée", pour les rues qui ont une longueur "3"

ou

je veux avoir les stationnement (triés par leurs noms) qui ont des sous points noirs avec une réponse "avec changement de niveau" avec un cout de travaux supérieur à 1000

Je me demandais si je me posais la requête dans le bon ordre? ca fait un peu bazars en relisant la requête!!
Es-ce qu-il y a un schéma d'ordre à respecter? la typologie et les ponctuations sont-elles les mêmes?

Merci d'avance et bonne fin de journée
J'espère que c'est assez explicite.

Cha

Hors ligne

 

#6 Tue 08 February 2011 14:07

Daniel
Membre
Lieu: Victoriaville, Québec
Date d'inscription: 6 Sep 2005
Messages: 2028

Re: Requête SQL débutante

Bonjour

Je ne sais pas si c'est de ce site dont vous parliez (des documents en lien) mais je vous met le lien quand même.
http://georezo.net/jparis/MI_Enviro/MBW/MB_fenetre.htm

Le SQL, c'est une façon de poser des questions.  Il faut donc connaître un peu le langage.  Prenez le temps de bien lire les posts et regardez la syntaxe.  Ça va vous orienter plus facilement.

Maintenant, sans passer trop de temps, et surtout de vous donner toutes les réponses, voici quelques pistes pour vos questions.  Il y aura probablement d'autres réponses mais voici les miennes.
1- Dans la majorité des cas, la Sélection seule, se fait sur une seule table.  Le SQL se fait majoritairement sur deux tables.  À quelques exceptions près!!!

2- Souvent il est plus facile de faire deux ou plusieurs requêtes sur une table pour avoir un résultat.  Ce que je veux dire, dans votre exemple, vous sélectionner vos rues avec une pente, ce qui donne QUERY1 et de ce query1, vous sélectionnez longueur 2, trier par nom de rue.

3- Les "" sont toujours utilisées pour du texte.  Dans les (), on ajoute des conditions, critères....

4- Mapinfo est très bon pour le SQL sur 2 tables.  Lorsque l'on en ajoute d'autres, il faut être très précis.  Comme dans le réponse 2, on commence par faire un SQL sur 2 tables et par la suite on ajoute les autres.  Il faut souvent prendre quelques minutes pour bien réfléchir à ce qu'on veut comme réponse.  Il y a probablement de meilleures réponses mais comme débutante, il faut y aller prudemment.

Pour le reste de vos questions, prenez le temps de lire les documents qui sont en épinglé.  Vous aurez bien des réponses.

J'espère que ça vous donne quelques réponses.

Daniel


De retour à la géomatique

Hors ligne

 

#7 Tue 08 February 2011 14:27

CRIGBAB
Participant assidu
Lieu: Bayonne
Date d'inscription: 14 Nov 2005
Messages: 180

Re: Requête SQL débutante

Bonjour,

Si tu es directement sous Mapinfo le plus simple est de le faire en deux étapes

1) première étape

select * from tab_Y where colonne4="traversée" and colonne2 in (select colonne5 from tab_x where colonne4=3) into point_noir_trav_rue_long_3
cette ligne peut être directement écrite dans la fenêtre MapBasic de MI

dans une le module de selection sql de MI

première case colonnes mettre : *

au niveau Tables  : tab_y

dans la case Critères  : colonne4="traverséé" and colonne2 in (select colonne5 from tab_x where colonne4=3)

et dans le nom de la table resultante mettre par exemple : point_noir_trav_rue_long_3

2) 2eme étape:

faire une deuxième sql

select * from Tab_Z where colonne3="présence d'obstacle" and colonne2 in (select colonne3 from point_noir_trav_rue_long3) into table_resultat
cette ligne peut être écrite dans la fenêtre MapBasic directement

ou en remplissant les cases de la bd sql

première case Colonnes : *

Tables : tab_z

dans les Critères : colonne3="présence d'obstacle" and colonne2 in (select colonne3 from point_noir_trav_rue_long3)

et table de résultat : table_resultat



Cela te permettra de répondre à ta première requète

En espérant que cela t'aura aidé.

Dernière modification par CRIGBAB (Tue 08 February 2011 14:28)

Hors ligne

 

#8 Tue 08 February 2011 14:55

chacha17
Juste Inscrit !
Date d'inscription: 7 Feb 2011
Messages: 5

Re: Requête SQL débutante

Un très grand merci à Daniel et Crigbab!

Je commence à beaucoup mieux cerner le problème!

Maintenant il me reste à faire des petits exercices de prise en main!!

Cha

Hors ligne

 

#9 Tue 08 February 2011 17:38

Spacejo
Membre
Lieu: Nancy
Date d'inscription: 17 Aug 2008
Messages: 2511

Re: Requête SQL débutante

Salut,

Si par exemple je veux faire une requête dans cette table où je veux connaitre les rues (trier par nom) qui ont une caractéristiques "pente" et une longueur "2"


Code:

Select * from Tab_X where Caracteristiques like "Pente" and Longueur=2 order by Nom into Resultat

Faut-il bien respecter les "", les (), dans quelles circonstances on les utilise exactement?


Les Guillemets ou double cotes --> " " sont utiliser si ton critère est en texte (colonne texte)
Par exemple je n'ai sait pas si ton champs "Pente" est en texte ou entier --> Si le format est en texte --> like "2" si format entier --> =2
A+
Joël

Hors ligne

 

#10 Thu 10 February 2011 10:36

chacha17
Juste Inscrit !
Date d'inscription: 7 Feb 2011
Messages: 5

Re: Requête SQL débutante

Bonjour,

Je continue dans mon apprentissage des requêtes SQL...

Dans mon cas, je vais partir sur une seule table (TAB_X), elle comprend diverses colonnes
colonne 1: Id
colonne 2: Nom (A / B / C / D)
colonne 3: caractéristiques (avec obstacle/sans obstacle/travaux)
colonne 4: cout (20/50/100/10000)

* Je veux savoir dans ma colonne 4, quel est le cout le plus élevé:
j'ai essayé dans la fenêtre simple de sélection la formule suivante: max(cout)     en mettant TAB_X dans le champs table
mais mapinfo me met un message d'erreur

* J'ai essayé la même chose pour connaitre le "cout total" des points "travaux" mais mapinfo me met encore un message d'erreur
la formule:    travaux from caractéristiques count (cout)

* pour utiliser "count(*)" et "sum (amount)", quel est l'ordre de la formule?

* La dernière chose est l'utilisation de order by ou group by
j'ai essayé la formule, pour trier la caractéristique "sans obstacle" en fonction du cout qui sera en ordre décroissant! me met encore un message d'erreur!

J'ai l'impression qu'il y a 2 manières de rédiger une requête mais qu'il y en a qu'une qui peut être interprétée par mapinfo, je me trompe?
c'est comme si il y avait une formule littéraire et une formule mathématique

Je vous remercie

Bonne journée

Cha

Hors ligne

 

#11 Thu 10 February 2011 11:07

Spacejo
Membre
Lieu: Nancy
Date d'inscription: 17 Aug 2008
Messages: 2511

Re: Requête SQL débutante

Salut,

Je veux savoir dans ma colonne 4, quel est le cout le plus élevé:


Code:

Select max(cout) from TAB_X into Resultat

J'ai essayé la même chose pour connaitre le "cout total" des points "travaux"


Code:

Select sum(cout) from TAB_X into Resultat

La dernière chose est l'utilisation de order by ou group by


--> http://sql.1keydata.com/fr/sql-group-by.php
--> http://sql.1keydata.com/fr/sql-order-by.php
A+
Joël

Hors ligne

 

Pied de page des forums

Powered by FluxBB