[MUSIQUE] [MUSIQUE] [MUSIQUE] [MUSIQUE] Bienvenue dans cette leçon qui va donc porter sur l'interrogation des bases de données par des requêtes. Et sur le langage SQL qui est utilisé pour écrire ces requêtes. Dans cette leçon, nous allons aborder donc les bases du langage SQL. Langage qui va nous occuper pour les cinq ou six prochaines leçons. L'objectif de cette première leçon est donc de découvrir les principes les plus fondamentaux du langage SQL. Et en particulier, la fonction ou la clause la plus basique qui soit, qui est la clause SELECT et ses différents usages. Au terme de cette leçon, vous devriez être en mesure de sélectionner les attributs dans une table et d'éliminer les doublons qui pourraient se trouver dans cette sélection. Nous verrons donc successivement les principes du langage SQL. Puis la sélection simple d'un attribut dans une table. Le principe de la sélection distincte qui permet d'éliminer les doublons d'une requête. Ensuite, la sélection à partir de deux tables. Et finalement, l'utilisation des alias pour les attributs et pour les tables. [MUSIQUE] Le SQL ou Structured Query Language est donc un langage destiné à la gestion des bases de données relationnelles spécifiquement. C'est un langage qui a été normalisé, donc qui est en principe indépendant du système de gestion de bases de données utilisé. Même s'il est vrai que chaque système de gestion de bases de données a quelques spécialités au niveau de la syntaxe utilisée. C'est un langage qui permet d'interagir avec des bases de données, sous forme de requêtes structurées, comme son nom l'indique. Le SQL est composé de quatre groupes d'instructions complémentaires. En premier lieu, le Data Query Language, langage d'interrogation des données qui permet d'extraire des données d'une base de données. Le Data Definition Language, langage de définition de données qui permet de modifier ou de définir la structure d'une base de données. Le langage de manipulation, DML, qui permet d'insérer, de mettre à jour, de supprimer des données. Et finalement, le langage de contrôle qui permet de gérer les droits et les accès des utilisateurs. Dans le domaine de l'interrogation des données, la syntaxe de base comprend les clauses de sélection avec les mots-clés SELECT et FROM. Les clauses de filtre conditionnel avec le mot-clé WHERE. Des clauses d'agrégation avec les mots-clés GROUP BY ou HAVING. Les clauses de tris avec les mots-clés ORDER BY ou LIMIT. Et finalement des clauses de fusion avec les mots-clés UNION, INTERSECT, EXCEPT. L'utilisation de ces différents mots-clés dans des requêtes va être illustrée dans la suite de cette leçon et dans les leçons suivantes. Sur la base de données qui ont été regroupées dans une série de bases de données test. Données qui portent sur les îles proches des Seychelles et qui comprennent en fait quatre couches de données. Les districts sous formes de polygones, les hôtels, les lieux-dits qui sont des points. Et les routes qui sont lignes. Ces données sont stockées dans trois formats différents, ce qui permettra d'illustrer trois types d'approche, de gestion différente des requêtes. Le format ESRI Shapefile, une base de données SpatiaLite et une base de données PostGIS. On peut voir ici que ces différentes couches de données ont un certain nombre d'attributs. Pour les districts, la géométrie, l'identifiant et le nom. Pour les hôtels, de nouveau géométrie, identifiant, le nom et une série d'attributs complémentaires. Le nombre de chambres, le nombre de lits, le statut. Et le district dans lequel se trouvent les hôtels. Pour les lieux-dits, géométrie, identifiant et nom. De même que pour les routes, avec en plus le lieu où elles se trouvent, le type de route et le type de surface. On voit qu'il y a une petite clé autour de l'identifiant qui montre que dans tous ces cas de figure, l'identifiant joue le rôle de clé primaire. Il existe de nombreux outils de requêtes. Et nous allons nous concentrer sur ceux que l'on peut utiliser en lien avec le logiciel QGIS. Il y a tout d'abord dans le logiciel même, une série de trois outils de requêtes qui s'appliquent de manière générale à tous les types de couches. Mais ces trois solutions ont le défaut de ne pas implémenter de manière explicite le langage SQL. Si bien que dans le cas présent, ce n'est pas très intéressant. Nous avons une extension gestion de base de données qui permet de traiter des bases de données SpatiaLite et PostGIS. Et sans doute d'autres. Et puis, une série de solutions spécifiques à SpatiaLite et spécifiques à PostGIS. Certaines d'entre elles faisant appel à des logiciels hors QGIS, comme SQLiteStudio, pgAdmin III. Dans les solutions PostGIS, PostGIS Query Builder est également peu intéressante, car n'implémentant pas explicitement le langage SQL. Pour les besoins de ce cours, nous allons travailler avec l'extension SpatiaLite pour QGIS qui permet d'écrire et d'exécuter des requêtes SQL sur une base de données SpatiaLite dans QGIS. Et nous utiliserons également pgAdmin III qui est un logiciel qui fait partie de la suite PostgreSQL. Et qui présente l'avantage de proposer un outil de construction de requêtes graphique. [MUSIQUE] [MUSIQUE] La requête de sélection comprend donc les mots-clés SELECT suivi du nom de l'attribut recherché. Et le mot-clé FROM qui permet de préciser dans quelle table se trouve l'attribut en question. Dans QGIS, avec l'extension QSpatiaLite, on voit donc que l'on peut écrire une requête SQL dans la fenêtre prévue à cet effet. Nous allons ici écrire une requête pour sélectionner la liste des hôtels par leur nom. Donc l'attribut recherché, c'est l'attribut nom. Et la table, la table hôtel. L'exécution de la requête donne donc la liste des noms des hôtels des Seychelles. La même opération peut être effectuée graphiquement dans pgAdmin III. En ajoutant la table des hôtels dans le champ de construction de la requête. En sélectionnant le champ nom. Et on voit que cela se traduit par la création d'une requête SQL dont la syntaxe est un tout petit peu différente. Cette syntaxe permet de lever toute ambiguïté dans le cas où on a plusieurs tables avec des attributs de même nom. Par contre, elle n'est pas obligatoire lorsque le doute n'est pas permis. La requête de sélection de deux attributs comprend le mot-clé SELECT suivi du nom des attributs, séparés par une virgule. Puis du mot-clé FROM et du nom de la table. Dans notre exemple, nous ajoutons le nombre de chambres comme attribut recherché. Et l'exécution de la requête montre donc le nombre de chambres par, en regard du nom de l'hôtel. Dans pgAdmin, il suffit de sélectionner le champ supplémentaire dans le constructeur graphique. Ce qui met à jour la requête en SQL. Et son exécution donne bien le résultat escompté. La syntaxe qui permet de sélectionner l'ensemble des attributs d'une table est constitué du mot-clé SELECT suivi d'un astérisque puis du mot-clé FROM et du nom de la table. On voit dans cet exemple que si l'on remplace les noms des champs recherchés par un astérisque, on obtient effectivement une table qui contient l'ensemble des champs de la couche. Pareillement, dans le constructeur graphique de pgAdmin, on voit qu'il n'y a pas d'astérisque. Donc, on peut sélectionner l'ensemble des champs manuellement. Ou alors, dans la fenêtre SQL, simplement remplacer les champs par un astérisque. Et le résultat est toujours le même. On peut noter au passage qu'il y a 124 hôtels sélectionnés. [MUSIQUE] [MUSIQUE] Le mot-clé DISTINCT, placé à la suite du mot-clé SELECT, permet d'éliminer les doublons qui se retrouveraient dans le résultat d'une requête. On voit que si l'on effectue une requête sur le statut des hôtels, on obtient une table dans laquelle on retrouve plusieurs fois la même valeur. Puisque de nombreux hôtels ont en fait le même statut. Petit hôtel, grand hôtel, etc. Le mot-clé DISTINCT ajouté à cette requête permet en fait de filtrer ce résultat et de n'obtenir que la liste des différentes valeurs possibles de l'attribut STATUT. L'opération est la même dans pgAdmin, si on ne conserve que le champ STATUT on met à jour la requête et on ajoute le mot-clé DISTINCT et on voit qu'en exécutant ma requête, le résultat obtenu est le même. [MUSIQUE] [MUSIQUE] L'un des grands intérêts du language SQL est de pouvoir associer plusieurs tables au sein d'une même requête, pour obtenir un résultat qui combine des données provenant de deux tables différentes. Cette syntaxe, plus explicite, implique de décrire un attribut par le nom de la table dont il provient, suivi du nom de l'attribut, les deux éléments étant séparés par un point. Dans notre exemple ici, nous allons sélectionner le champ nom de la table hôtels, donc, décrite par hôtels.NOM. Et dans la table Districts, également le champ nom, ce qui montre bien tout l'intérêt d'avoir cette syntaxe un peu plus spécifique. Donc, ces deux champs, tirés des deux tables hôtels et districts. [AUDIO_VIDE] On voit que, dans le résultat, on trouve l'association systématique des noms des deux champs et on voit que, pour 124 hôtels et 25 districts, ça nous donne effectivement 3 100 résultats. Dans Pgadmin, les choses se passent de la même manière. On sélectionne le champ nom dans la table hôtels, on ajoute la table districts, on sélectionne le champ nom également, et en passant dans l'onglet requête SQL, on voit que la requête a été rédigée de la bonne façon et l'exécution donne le même résultat, avec 3 100 possibilités. [MUSIQUE] [MUSIQUE] Il est parfois utile de pouvoir remplacer le nom d'attribut original par un alias plus visible, ou compréhensible, opération qui s'effectue à l'aide du mot-clé AS nom d'attribut AS nom d'alias. Dans notre exemple de tout à l'heure, nous remplaçons ici le champ nom de l'hôtel par Hotel_Name, et le champ nom du district par District_Name, ce qui permet aussi d'éliminer toute ambiguïté dans la table de résultat. On voit que les en-têtes des colonnes portent bien des noms qui permettent de savoir à quoi on a à faire. Même chose dans Pgadmin, l'alias est précisé dans les critères, les caractéristiques des résultats de la requête et on voit qu'en passant en mode SQL, la syntaxe de la requête est bien celle à laquelle on s'attend et le résultat est bien celui que l'on s'attend à trouver. Deuxième possibilité d'utilisation du concept d'alias, cette fois pour changer le nom des tables, ce qui est souvent intéressant pour simplifier un petit peu la syntaxe des requêtes. Dans le cas des tables, les alias ne font pas appel au mot-clé AS mais sont simplement créés en ajoutant un nom au nom de la table, avec un espace entre les deux. Dans notre exemple ici, nous supprimons les alias des colonnes, les attributs, et nous créons des alias pour les tables, h pour la table Hôtels et d pour la table Districts, ce qui permet de remplacer dans la définition des attributs recherchés, le nom des tables par leurs alias. h pour hôtels et d pour districts. Et on voit que l'exécution de cette requête donne toujours le même résultat. Même opération dans Pgadmin, on supprime les alias des attributs, clic droit sur la table pour créer un alias de la table, h pour la table hôtels, d pour la table districts, comme tout à l'heure. Et là , o voit en revenant dans l'éditeur SQL, que la syntaxe a été adaptée correctement et l'exécution donne bien le même résultat. [MUSIQUE] [MUSIQUE] Dans cette leçon, nous avons donc découvert les principes de base du language SQL et en particulier, les éléments fondamentaux des requêtes de sélection avec les mots-clés SELECT et FROM. Nous avons vu comment sélectionner les attributs dans une table, comment éliminer les doublons dans le résultat, à l'aide du mot-clé DISTINCT, et finalement, nous avons vu comment utiliser des alias. [MUSIQUE] [MUSIQUE]