|
|
Mysql...Les bases. (2)
Mysql...Les bases. (2)La clause SELECT FROM WHERE11 mai 2004, parPour les exemples suivants, on s’appuiera sur ces tables :
Leur signification est sans surprises : La table ’user est la table contenant la liste des membres d’un site (quelconque). Chaque membre a un identifiant, un nom et un statut : Soit c’est un auteur (auteur=1) et il a le droit d’écrire un article, soit ce n’est pas un auteur (auteur=0). Dans le script, on pourra dire : Si auteur=1 alors ’voulez vous ajouter un article ?’ La table ’article’ est sans surprises non plus. Un numéro identifiant, le titre de l’article, le texte de l’article, et le numéro identifiant de l’auteur de l’article. La table ’lu’ permet de savoir quels articles ont été lu, et par qui. On y retrouve donc l’identifiant des articles, et l’identifiant des membres. On y apprend par exemple que le membre n° (), a lu l’article n° (). En pratique, par la suite, on pourreze dire à un membre : Vous avez lu tel et tel article, et vous n’avez pas lu tel et tel autre. Clause SELECT...FROM...WHERE Pour lire une table, il faut l’interroger. Pour cela, on utilise la clause SELECT. On sélectionne les champs qui nous intéressent, puis la table dans laquelle ces champs on été pris, et s’il y en a, on donne les conditions. Un exemple ? On veut la liste de tous les utilisateurs. Ce qui nous intéresse, c’est le nom des utilisateurs. Donc il nous faut deux informations : "nom_user" et le nom de la table où se trouve ce nom, la table "USER". Il n’y a pas de conditions, donc il n’y aura pas de clause WHERE. La requète donnera : SELECT nom_user FROM USER L’explication est simple : Sélectionner le champ nom_user dans la table USER. On pourrait aussi avoir besoin du champ id_user. La requète donnera : SELECT id_user,nom_user FROM USER ou avec les champs dans un ordre différent : SELECT nom_user,id_user FROM USER La réponse de la base de données sera :
Autrement dit : la liste des utilisateurs. On peut aussi vouloir la liste des utilisateurs (comme précédemment), mais avec une condition. Que cet utilisateur soit un auteur. On utilisera donc le WHERE. La condition pour qu’un utilisateur soit auteur, c’est que le champ "auteur" de la base "USER" soit à "1". La requète se fera ainsi : SELECT nom_user,id_user FROM USER WHERE auteur=1 ; La réponse de la base sera
Le champ "auteur" n’apparait pas, puisqu’il n’est pas mentionné dans le SELECT. Les utilisateurs dont le champ "auteur" est à "0" n’apparaissent pas non plus, puisque la condition WHERE ne le permet pas. Jointure La clause where permet donc de mettre des conditions. Il est ainsi possible de faire des jointures entre les tables, de sorte que, lorsque l’on demande le nom de l’utilisateur, et le titre de l’article, les informations retournées par la base soient cohérentes. Sans jointure, faire une requète du style : SELECT nom_user,titre FROM user,articles retournerait le nom de tous les utilisateurs, associé à tous les titres de tous les articles. C’est ce qu’il nous faut, sauf qu’en plus, on veut une condition. On veut : le titre, et l’utilisateur associé au titre. Autrement dit, pour chaque titre, on veut le nom de son auteur. Condition : A condition qu’il ait écrit l’article. On retrouve, dans la table ’articles’, le champ id_user. Ce champ fait implicitement référence au champ id_user de la table ’user’. Il nous faut donc le déclarer explicitement, de cette façon : SELECT nom_user, titre FROM user,articles WHERE user.id_user=articles.id_user Le résultat de la base sera :
et correspondra à la demande : Selectionner le nom de l’utilisateur, et le titre de l’article, dans les tables user et articles, avec la condition que le champ id_user de la table user et le champ id_user de la table articles correspondent. Et ça marche ! On aurait pu mettre une seconde condition : SELECT nom_user, titre FROM user,articles WHERE user.id_user=articles.id_user AND auteur=1 Mais il est évident que seuls les auteurs auront un article, donc ce serait redondant, et donc inutile dans ce cas. Autre exemple, avec plusieurs jointures : Je disais, plus haut, que la table ’lu’ permet de répondre à la question : qui a lu quoi. Pour cela, nous devons utiliser la table ’lu’, associée aux tables user et articles. On sélectionnera le nom_user, pour avoir le nom de l’utilisateur, puis le titre, pour connaitre le nom de l’article, puis on se servira de la table jointure ’lu’, qui permet de relier les articles aux utilisateurs. La requète sera : SELECT nom_user,titre FROM user,articles,lu WHERE user.id_user=lu.id_user AND lu.id_page=articles.id_page En sortie, la base nous délivrera le résultat suivant :
Il correspond aux titres des articles, avec le nom des personnes qui les ont lu. Les utilisateurs n’ayant rien lu n’apparaitront pas, de même que les articles n’ayant pas été lu. Le prochain article sera consacré aux clauses : Order by et limit, pour savoir comment ordonner les résultats, et limiter la taille des données renvoyées par la base de données. |
|
||
|