#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