Introduction aux Bases De Données. (Term NSI)

18
Introduction aux Bases De Données. (Term NSI) I. Introduction. Aujourd’hui nous disposons d’énormes quantités de données. Avec le développement du Web, la quantité de données à stocker et exploiter a explosé. La majorité des sites web utilisent une (au moins) base de données. Ainsi, organiser et gérer ces données sont devenus des enjeux très importants et les méthodes vues en 1ère (par exemple utilisation de fichiers csv : données en tables) ne suffisent pas pour gérer efficacement ces données. Une base de données est un concept qui permet de stocker efficacement une immense quantité d’information. Peu importe le support utilisé pour rassembler et stocker les données, dès lors que des données sont rassemblées et stockées d’une manière organisée dans un but spécifique, on parle de base de données. Les bases de données permettent de croiser facilement les informa- tions et d’en extraire le contenu. De nos jours les bases de données stockent des données quasi exclusivement numériques et ces données peuvent servir à un ou plusieurs programmes. La gestion et l’accès à une base de données sont assurés par un ensemble de programmes qui con- stituent le Système de gestion de base de données (SGBD). L’information d’une base de données est stockée dans des fichiers et contrairement aux fichiers csv, il n’est pas possible de travailler directement sur ces données avec un simple éditeur de texte, c’est pour cela qu’on a besoin d’un SGBD dont le rôle est de simplifier la gestion des bases de données. Les SGBD sont de gros logiciels, fonctionnant en mode client/serveur, assez complexes à mettre en oeuvre et à utiliser. Ils sont conçus pour gérer plusieurs millions, voire milliards d’enregistrements de manière fiable et sécurisée. Un SGBD doit permettre de : • Stocker un grand volume de données, pendant longtemps et avec sécurité, • Accéder efficacement aux données, • Assurer le respect des règles de cohérence définies sur les données et vérifier les contraintes d’intégrité, • Permettre à l’utilisateur de créer de nouvelles bases de données, • Permettre à l’utilisateur d’interroger et de modifier les données de la base de données, • Contrôler l’accès aux données par plusieurs utilisateurs en même temps (autorisations d’accès) et l’action d’un utilisateur ne doit pas en affecter un autre. 1

Transcript of Introduction aux Bases De Données. (Term NSI)

Page 1: Introduction aux Bases De Données. (Term NSI)

Introduction aux Bases De Données. (Term NSI)

I. Introduction.

Aujourd’hui nous disposons d’énormes quantités de données. Avec le développement du Web,la quantité de données à stocker et exploiter a explosé. La majorité des sites web utilisent une(au moins) base de données. Ainsi, organiser et gérer ces données sont devenus des enjeux trèsimportants et les méthodes vues en 1ère (par exemple utilisation de fichiers csv : données entables) ne suffisent pas pour gérer efficacement ces données.

Une base de données est un concept qui permet de stocker efficacement une immense quantitéd’information. Peu importe le support utilisé pour rassembler et stocker les données, dès lorsque des données sont rassemblées et stockées d’une manière organisée dans un but spécifique,on parle de base de données. Les bases de données permettent de croiser facilement les informa-tions et d’en extraire le contenu. De nos jours les bases de données stockent des données quasiexclusivement numériques et ces données peuvent servir à un ou plusieurs programmes.

La gestion et l’accès à une base de données sont assurés par un ensemble de programmes qui con-stituent le Système de gestion de base de données (SGBD). L’information d’une base de donnéesest stockée dans des fichiers et contrairement aux fichiers csv, il n’est pas possible de travaillerdirectement sur ces données avec un simple éditeur de texte, c’est pour cela qu’on a besoin d’unSGBD dont le rôle est de simplifier la gestion des bases de données.

Les SGBD sont de gros logiciels, fonctionnant en mode client/serveur, assez complexes à mettre enoeuvre et à utiliser. Ils sont conçus pour gérer plusieurs millions, voire milliards d’enregistrementsde manière fiable et sécurisée.

Un SGBD doit permettre de :

• Stocker un grand volume de données, pendant longtemps et avec sécurité,• Accéder efficacement aux données,• Assurer le respect des règles de cohérence définies sur les données et vérifier les contraintes

d’intégrité,• Permettre à l’utilisateur de créer de nouvelles bases de données,• Permettre à l’utilisateur d’interroger et de modifier les données de la base de données,• Contrôler l’accès aux données par plusieurs utilisateurs en même temps (autorisations

d’accès) et l’action d’un utilisateur ne doit pas en affecter un autre.

1

Page 2: Introduction aux Bases De Données. (Term NSI)

• Assurer la sécurité des données (sauvegardes, synchronisations et maintenance de la basede données sur plusieurs machines/serveurs) et la récupération de la base et le retour à lanormale en cas de panne.

Il existe de nombreux SGBD, certains sont payants (et très chers), d’autres gratuits et libres, parmisles plus célèbres on peut citer : Oracle (propriétaire), MySql (libre), Microsoft SQL Server (proprié-taire) ou encore PostgreSQL (libre), SQLite (libre).

Remarque :

Un SGBD est très différent d’un tableur même si les 2 permettent de saisir des données, de lesafficher sous forme de tableau ou de faire des calculs mais la comparaison s’arrête à ça.

Un tableur :

• n’a pas d’architecture des données (pas de relations entre les éléments avec des contraintes),

• n’effectue pas de contrôle d’intégrité des données,

• ne permet pas l’accès simultané aux données par plusieurs utilisateurs,

• ne vérifie pas les droits d’un utilisateur sur les données,

• ne permet de gérer qu’une seule table à la fois, etc.

Un tableur est pratique, facile à utiliser et a de bonnes performances à condition que les donnéessoient en faibles quantités.

En ce qui concerne ce cours, nous utiliserons un logiciel "relativement basique” et libre mais quipermet tout de même de créer une base de données et effectuer des requêtes sur cette dernière : lelogiciel "DB Browser for SQLite” : https://sqlitebrowser.org/.

II. Base de données relationnelle.

Il existe différents types de bases de données, par exemple, les bases de données hiérarchiques,les bases de données objet, les bases de données réseau ou bien encore les bases de donnéesrelationnelles.

C’est le type de bases que l’on connaît et qu’on utilise le plus dans le monde aujourd’hui. In-ventées en 1970 et basées sur l’algèbre relationnelle et les travaux de l’informaticien britanniqueE.F. Codd, alors chercheur pour IBM, elles permettent de modéliser facilement et sans grandescontraintes les systèmes du monde réel et de créer des bases de données simples à maintenir, àfaire évoluer et indépendantes de leur support. C’est la technologie majeure en bases de donnéesdepuis les années 1980 (mais elles ne sont pas utilisées pour les bdd des réseaux sociaux).

Dans ce type de bases de données, les données sont organisées en tables ou relations (on peututiliser les 2 termes).

Une table (ou une relation) peut être vue comme un tableau à 2 dimensions qui formel’ensemble des enregistrements qui existent sur les données.

Exemple : Une bibliothèque stocke des informations sur ses livres empruntés dans la table ci-dessous :

2

Page 3: Introduction aux Bases De Données. (Term NSI)

Une table est formée d’un en-tête et d’un corps.

Sur l’exemple précédent, l’en-tête est la 1ère ligne : "Titre, Auteur, Emplacement. . . ”

Le corps est la partie qui est située sous l’en-tête, il contient les données.

Chaque colonne de la table possède un titre appelé "attribut”, sur l’exemple précédent les attributssont : "Titre”, "Auteur”,. . . Il ne doit pas y avoir d’attribut en double.

Chaque ligne (ou enregistrement) est composée de plusieurs informations distinctes appartenantà un même objet. Elle est appelée p-uplet (ou tuple) qui contient les données elles-mêmes. Onpeut donc dire qu’une table (ou relation) est un ensemble fini de p-uplets.

Les cellules contiennent la valeur elle-même.

Exercice :

1. Faire la liste des éléments de l’attribut "Auteur”.

2. La table précédente contient combien d’enregistrement ?

Chaque attribut possède un type, par exemple Titre est du type "chaîne de caractères” et Nbreemprunts est du type "entier”.

L’ensemble des valeurs que peut prendre un attribut d’une relation est son domaine. Le do-maine d’un attribut donné correspond à un ensemble (fini ou infini) de valeurs admissibles.

Par exemple : Pour la table ci-dessus, les 4 premiers attributs ont pour domaine l’ensemble deschaînes de caractères, mais le domaine de l’attribut "Nbre d’emprunts” est l’ensemble des nombresentiers naturels.

Tout cela est fixé à la création d’une relation. Lors de la création, on doit obligatoirement indiquerle domaine de chaque attribut et si on ne respecte pas ce domaine pour une donnée, le SGBDsignalera l’erreur et refusera l’enregistrement de cette donnée.

Attention : Dans une base de données relationnelles, une table (ou relation) ne pouvant pas con-tenir 2 p-uplets identiques ("visuellement” il ne peut pas y avoir 2 lignes identiques), le SGBDn’autorisera pas un tel enregistrement.

Pour garantir la non-répétition des enregistrements, les bases de données contiennent un conceptde clé qui doit être pensé dès sa conception et indiqué à sa création. Ce concept a également sonimporance lors de l’utilisation de relations multiples.

On définit la notion de "clef primaire” : une clef primaire est un attribut dont la valeur permetd’identifier de manière unique un p-uplet de la relation donc si un attribut est considéré comme

3

Page 4: Introduction aux Bases De Données. (Term NSI)

clef primaire, on ne doit pas trouver dans toute la relation 2 fois la même valeur pour cet attribut.

Indiquer au système une clé primaire pour chaque relation permet une indexation des donnéesà l’aide de cette clé, ce qui renforce l’efficacité des procédures d’interrogation de la table. Cetteindication doit se faire à la création de la table. On introduit souvent un attribut supplémentaire(commençant souvent par id), dans la définition de la relation qui sera un entier qu’on incré-mentera à chaque ajout d’un tuple et c’est alors cet attribut qui sera forcement unique qui sera laclé primaire.

Exemple :

Avec la relation précédente, on peut prendre comme clé primaire l’attribut Titre, mais dans ce cas,il faut que tous les titres soient différents, ce qui n’est pas toujours le cas (par exemple pour lep-uplet 6 et le p-uplet 7, j’ai un peu triché, les 2 livres ont normalement le même titre, seul leur n°change). Si on veut ne pas avoir ce problème, on peut construire la table précédente en ajoutantun attribut id unique qui est incrémenté à chaque nouvelle création d’un p-uplet, ce qui donne :

La bibliothèque doit modifier sa base pour rajouter des informations sur la langue utilisée dansles livres dont elle dispose. On ajoute alors un attribut "Langue” à la table "livres_SF”.

Comme on peut le remarquer, il y a plusieurs informations identiques qui apparaissent plusieursfois dans cette relation : "Asimov Isaac”, "Le Cycle des Robots”, "Français”, etc. Cette duplicationdes données n’est ni indispensable ni souhaitable puisque la duplication de l’information fait quela base n’est pas optmisée, elle occupe de l’espace inutilement. Si nous dupliquons des donnéesinutilement c’est donc que la structure utilisée n’est pas la bonne.

4

Page 5: Introduction aux Bases De Données. (Term NSI)

Mais alors, comment faire pour avoir aussi des informations sur les auteurs des livres ? La solutionest simple, il "suffit” de travailler avec plusieurs tables et créer un lien entre les tables.

Nous allons donc créer 2 tables : la table "Auteurs” et la table "Langues” et modifier la table"livres_SF” :

L’attribut "id_auteur” de la table "livres_SF” permet de créer un lien avec la relation Auteurs."id_auteur” correspond à l’attribut "id” de la table "Auteurs” et l’attribut "id_langue” correspond

5

Page 6: Introduction aux Bases De Données. (Term NSI)

à l’attribut "id” de la table "Langues”. L’introduction des tables "Auteurs” et "Langues” et lamise en place de liens entre ces tables et la table "livres_SF” permettent d’éviter la répétitiond’informations.

Pour établir un lien entre 2 tables notées RA et RB, on ajoute à RA un attribut x qui prendra lesvaleurs de la clé primaire de RB. Cet attribut x est alors appelé clef étrangère (l’attribut corre-spond à la clé primaire d’une autre table, d’où le nom).

Dans l’exemple précédent, l’attribut "id_auteur” de la table "livres_SF” permet bien d’établir unlien entre la relation livres_SF et la relation Auteurs, "id_auteur” correspond bien à la clef primairede la table "Auteurs” donc "id_auteur” est une clef étrangère.

Dernière définition, on appelle schéma relationnel l’ensemble des tables présentes dans unebase de données.

Pour donner le schéma relationnel d’une base de données, il est nécessaire de fournir les informa-tions suivantes :

• Les noms des différentes tables (relations),

• pour chaque table, la liste des attributs avec leur domaine respectif et

• pour chaque table, la clef primaire et éventuellement la clef étrangère.

On représentera la clef primaire en la soulignant dans l’énoncé de la relation et la clé étrangère ennotant un # devant son nom.

Exemple :

Pour la base précédente le schéma relationnel est :

Auteurs(id : Entier naturel, Nom : Chaîne, Prenom : Chaîne, Emplacement : Chaîne)

Langues(id : Entier naturel, Langue_Livre : Chaîne)

livres_SF(id : Entier naturel, Titre : Chaîne, Numero : Chaîne, #id_auteur : Entier naturel,#id_langue : Entier naturel, Nbre emprunts : Entier naturel)

En conclusion : On retiendra les principes généraux pour regrouper les données en plusieurstables :

• Mettre dans une même table les données relatives à un même sujet, le choix des tables estprimordial car il détermine en grande partie la qualité de la base.

• Créer de nouvelles tables pour :

– éviter la redondance des données,

– limiter les incohérences lors des mises à jour,

– faciliter le traitement des données.

• Chaque attribut ne contient qu’une seule valeur.

• Créer une clé primaire pour chaque table.

6

Page 7: Introduction aux Bases De Données. (Term NSI)

Exercice 1 :

Une bibliothèque gère une base de données dont on donne le schéma relationnel suivant :

Abonne(Abonne_ID, Nom, Prenom, DateNaissance, Adresse, Ville, CodePostal)

Livre(Livre_ID, Titre, Auteur, Genre, ISBN)

Emprunt(Abonne_ID, Livre_ID, Livre_Titre, Livre_ISBN, DateEmprunt, DateRetourPrevu,DateRetourReel)

1. Quelles sont les anomalies dans ce schéma ?

On utilise maintenant le schéma suivant :

CHAR(n) comporte exactement n caractères, VARCHAR(n) comporte Le format des datesest YYYY-MM-DD, par exemple ’2020-11-02’.

2. Proposer une clé primaire pour la table Emprunt.

3. La table Emprunt a-t-elle une (ou des) clé(s) étrangère(s) ?

III. Découverte du langage SQL (cours / TP).

Afin d’effectuer toutes les requêtes possibles sur les données d’une base de données, il faut dis-poser d’un langage de requête. Très vite, un langage dédié s’est détâché, et est maintenant reconnupar la plupart des SGBD : il s’agit de SQL (Structured Query Language). SQL est propre auxbases de données relationnelles, les autres types de bases de données utilisent d’autres langagespour effectuer des requêtes. SQL n’est en fait pas qu’un langage de requête ; il est constitué de 4parties :

• Langage d’Interrogation de Données (LID) : pour retrouver des informations dans la basede données ;

• Langage de Manipulation de Données (LMD) : pour modifier les données de la base ;

• Langage de Description de Données (LDD) : pour définir la structure d’une base de données;

• Langage de Contrôle de Données (LCD) : pour définir les droits d’accès à la base.

7

Page 8: Introduction aux Bases De Données. (Term NSI)

Nous n’aborderons pas toutes ces parties dans ce cours qui n’est qu’une découverte du langageSQL. Pour la suite de cette partie, nous allons créer une base de données et effectuer des requêtessur cette dernière. Pour cela nous allons utiliser le logiciel "DB Browser for SQLite” :https://sqlitebrowser.org/.

SQLite est un système de gestion de base de données relationnelles très répandu, il est opensource et n’utilise pas de serveur. Il stocke la base dans un unique fichier et est très rapide pourdes bases "modestes” (< 1 million d’enregistrements). Il existe d’autres SGBD relationnelles libreset répendus comme MySQL ou PostgreSQL. Dans tous les cas, le langage de requête utilisé est leSQL donc ce qui est valable avec SQLite restera valable avec les autres SGBDR (à quelques petitesexceptions près).

SQLite est implémenté en Python (import sqlite3), sous windows, macOs et Linux avec DBBrowser et même en ligne : https://inloop.github.io/sqlite-viewer/ (et même sur les OSdes téléphones IOS et Android).

1. Construction de la base de données.

Lancer le logiciel "DB Browse for SQlite” et cliquer sur Nouvelle base de données et donner unnom de votre choix (par exemple "cinéma”) :

Sauvegarder, puis cliquer sur Annuler : la base de données est alors créée.

8

Page 9: Introduction aux Bases De Données. (Term NSI)

Pour construire la base de données, on peut alors soit créer les tables en utilisant l’interface dulogiciel (il ne fallait pas cliquer sur Annuler dans ce cas) soit "à la main” en utilisant directementSQL. Le but étant de découvrir le langage SQL, nous allons créer les relations "à la main” directe-ment avec SQL.

Les mots-clés de SQL sont usuellement écrits en majuscule mais ce n’est pas obligatoire et pourles différencier des noms des tables et des attributs, il est conseillé d’écrire ces derniers en minus-cule. Les requêtes se terminent par un point-virgule.

Cliquer sur "Exécuter le SQL”.

En SQL, on utilise le mot table plutôt que le mot relation .

Pour créer une table, on utilise la syntaxe : CREATE TABLE nom_table (nom_col1 TYPE1,nom_col2 TYPE2, . . . )

Copier-coller la requête suivante dans la fenêtre et exécuter là (bouton en forme de triangle) :

[ ]: CREATE TABLE Artistes(id INT NOT NULL, nom TEXT NOT NULL, prenom TEXT NOT NULL, annee_naissance␣

↪→INT, PRIMARY KEY(id));

9

Page 10: Introduction aux Bases De Données. (Term NSI)

La requête s’est bien passée (il suffit de le lire, c’est écrit), on vient donc de créer notre premièretable, la table "Artistes”.

La syntaxe est simple à comprendre, on a créé la table Artistes avec les attributs id, nom, prenom,annee_naissance.

On a précisé que la clé primaire est l’attribut id donc on ne pourra pas attribuer 2 fois la mêmevaleur à cet attribut, si on essaye de le faire, le logiciel nous avertira.

Il n’était pas obligatoire de préciser "NOT NULL”, le fait de le préciser oblige à avoir une valeurqui correspond à cet attribut.

Remarque : On peut, bien-sûr, aussi supprimer une table qui a été créée, pour cela, on utilise lasyntaxe : DROP TABLE nom_table

Maintenant que la table a été créée, il faut ajouter des données à la table Artistes.

2. Ajout des données.

On utilise la syntaxe :

INSERT INTO NomTable (attribut1, attribut2,. . . ) VALUES (valeurChamp1, valeurChamp2, . . .valeurChampn);

Effacer la requête précédente (sinon elle sera de nouveau exécutée et renvera une erreur puisquela table a déjà été créée) puis copier-coller la requête suivante dans la fenêtre "Exécuter le SQL” :

[ ]: INSERT INTO Artistes (id, nom, prenom, annee_naissance) VALUES(1,'Hitchcock','Alfred', 1899),(2,'Scott','Ridley', 1937),(3,'Weaver','Sigourney', 1949),(4,'Cameron','James', 1954),(5,'Woo','John', 1946),(6,'Travolta','John', 1954),(7,'Cage','Nicolas', 1964),

10

Page 11: Introduction aux Bases De Données. (Term NSI)

(8,'Burton','Tim', 1958),(9,'Depp','Johnny', 1964),(10,'Stewart','James', 1908),(11,'Spacey','Kevin', 1959),(12,'Eastwood','Clint', 1930),(13,'Freeman','Morgan', 1937),(14,'Crowe','Russell', 1964),(15,'Ford','Harrison', 1942),(16,'Willis','Bruce', 1955),(17,'Harlin','Renny', 1959),(18,'Pialat','Maurice', 1925),(19,'Fincher','David', 1962),(20,'Pitt','Brad', 1963),(21,'Connery','Sean', 1930),(22,'Tarantino','Quentin', 1963),(23,'Jackson','Samuel L.', 1948),(24,'Arquette','Rosanna', 1959),(25,'Thurman','Uma', 1970),(26,'Farrelly','Bobby', 1958),(27,'Diaz','Cameron', 1972),(28,'Schwartzenegger','Arnold', 1947),(29,'Spielberg','Steven', 1946),(30,'Hopkins','Anthony', 1937),(31,'Foster','Jodie', 1962),(32,'Kilmer','Val', 1959),(33,'Pfeiffer','Michelle', 1957),(34,'Bullock','Sandra', 1964),(35,'Goldblum','Jeff', 1952),(36,'Reno','Jean', 1948),(37,'Wachowski','Andy', 1967),(38,'Reeves','Keanu', 1964),(39,'De Palma','Brian', 1940),(40,'Cruise','Tom', 1962),(41,'Bart','Emmanuelle', 1965),(42,'De Funes','Louis', 1914),(43,'Galabru','Michel', 1922),(44,'Balasko','Josiane', 1950),(45,'Lavanant','Dominique', 1944),(46,'Lanvin','Gerard', 1950),(47,'Villeret','Jacques', 1951),(48,'Hoffman','Dustin', 1937),(49,'Leconte','Patrice', 1947),(50,'Blanc','Michel', 1952),(51,'Clavier','Christian', 1952),(52,'Lhermite','Thierry', 1952),(53,'Perkins','Anthony', 1932),(54,'Fisher','Carrie', 1956),

11

Page 12: Introduction aux Bases De Données. (Term NSI)

(55,'Ricci','Christina', 1980),(56,'Walken','Christopher', 1943),(57,'Kubrick','Stanley', 1928),(58,'Kidman','Nicole', 1967),(59,'Nicholson','Jack', 1937),(60,'Kelly','Grace', 1929),(61,'DiCaprio','Leonardo', 1974),(62,'Besson','Luc', 1959),(63,'Jovovich','Milla', 1975),(64,'Dunaway','Fane', 1941),(65,'Malkovitch','John', 1953),(66,'Holm','Ian', 1931),(67,'Portman','Natalie', 1981),(68,'Parillaud','Anne', 1960),(69,'Barr','Jean-Marc', 1960),(70,'Ferrara','Abel', 1951),(71,'Caruso','David', 1956),(72,'von Trier','Lars', 1956),(73,'Deneuve','Catherine', 1943),(74,'Kassowitz','Matthieu', 1967),(75,'Cassel','Vincent', 1966),(76,'Theron','Charlize', 1975),(77,'Chabrol','Claude', 1930),(78,'Huppert','Isabelle', 1953),(79,'Costner','Kevin', 1955),(80,'Hanks','Tom', 1956),(81,'Damon','Matt', 1970),(82,'Douglas','Kirk', 1976),(83,'Bergman','Ingrid', 1915),(84,'De Niro','Robert', 1943),(85,'Fonda','Bridget', 1964),(86,'Keaton','Michael', 1951),(87,'Pacino','Al', 1940),(88,'Crowe','Russel', 1964),(89,'Coppola','Francis Ford', 1939),(90,'Brando','Marlon', 1924),(91,'Keaton','Diane', 1946),(92,'Garcia','Andy', 1956),(93,'Moss','Carrie-Anne', 1967),(94,'Jackson','Samuel', 1948),(95,'Liu','Lucy', 1968),(96,'Simpson','Homer', 1987),(97,'Carradine','David', 1936);

Comme avec la requête précédente, tout se passe bien et les données sont écrites dans la table"Artistes”.

On vérifie que les données sont bien présentes avec l’onglet "Parcourir les données” :

12

Page 13: Introduction aux Bases De Données. (Term NSI)

Si on ne souhaite pas préciser de valeur pour un champ, il faut passer le mot-clé dédié NULL.

Remarque : Attention une éventuelle violation d’une contrainte telle que l’unicité d’une clé estsignalée (avec un bandeau rouge !) et l’insertion est refusée.

On peut modifier et supprimer une ligne donnée d’une table :

• Pour supprimer, la syntaxe est : DELETE FROM NomTable WHERE condition

13

Page 14: Introduction aux Bases De Données. (Term NSI)

La commande WHERE dans une requête SQL permet d’extraire les lignes d’une base de don-nées qui respectent une condition. Cela permet d’obtenir uniquement les informations désirées.

Par exemple pour supprimer la ligne ayant l’id 96 :

[ ]: DELETE FROM Artistes WHERE ID=96;

• Pour modifier, la syntaxe est : UPDATE nomTable SET champx = valx, champy = valy, . . .WHERE condition

Par exemple pour modifier la date de naissance de Kirk Douglas qui est fausse :

[ ]: UPDATE Artistes SET annee_naissance=1916 WHERE id=82;

On peut vérifier que la date de naissance de Kirk Douglas a bien été corrigée. . .

3. Lire les données.

L’utilisation la plus courante de SQL consiste à lire des données issues de la base de données.Cela s’effectue grâce à la commande SELECT, qui retourne des enregistrements dans un tableaude résultat. Cette commande peut sélectionner une ou plusieurs colonnes d’une table.

La syntaxe "basique” est : SELECT nom_du_champ FROM nom_du_tableau

La syntaxe est (encore) facile à comprendre, la requête sélectionne (SELECT) le champ"nom_du_champ” provenant (FROM) du tableau appelé "nom_du_tableau”.

Exemple : Copier-Coller la requête suivante :

[ ]: SELECT id, nom,prenom FROM Artistes;

14

Page 15: Introduction aux Bases De Données. (Term NSI)

On constate que la requête SQL a permis d’afficher tous les artistes et leur identifiant (mais pasleur date de naissance). Il est évidemment possible d’afficher tous les attributs ou au contraire unseul attribut.

Pour obtenir tous les attributs, au lieu de tous les saisir dans la requête, on peut saisir :

[ ]: SELECT * FROM Artistes;

Copier-coller la requête suivante :

[ ]: SELECT prenom FROM Artistes;

La requête SQL a permis d’afficher tous les prénoms des artistes et on retrouve plusieurs lesmêmes prénoms (John, James. . . ). On peut utiliser la clause DISTINCT si on veut éviter lesdoublons :

[ ]: SELECT DISTINCT prenom FROM Artistes;

La commande ORDER BY permet de trier les lignes dans un résultat d’une requête SQL. Il estpossible de trier les données sur une ou plusieurs colonnes, par ordre croissant ou décroissant.

Copier-coller la requête suivante :

15

Page 16: Introduction aux Bases De Données. (Term NSI)

[ ]: SELECT prenom FROM Artistes ORDER BY prenom;

On remarque que par défaut les résultats sont classés par ordre croissant mais il est possibled’inverser l’ordre en utilisant le suffixe DESC après le nom de la colonne :

[ ]: SELECT prenom FROM Artistes ORDER BY prenom DESC;

Tout comme ce qu’on a déjà utilisé avec les commandes UPDATE et DELETE, il est possibled’utiliser WHERE afin d’imposer des conditions permettant de sélectionner uniquement cer-taines lignes.

Exemple : On affiche le nom et prénom des artistes nés en 1970 :

[ ]: SELECT nom,prenom FROM Artistes WHERE annee_naissance=1970;

La fonction COUNT() permet de compter le nombre d’enregistrements correspondant à un critèrespécifié dans une table. Connaître ce nombre est très pratique dans de nombreux cas, par exemplepour savoir combien d’utilisateurs sont présents dans une table ou pour connaître le nombre decommentaires sur un article.

Copier-coller la requête suivante :

[ ]: SELECT COUNT(*) FROM Artistes;

Remarques : Il est aussi possible de connaitre le nombre d’enregistrements sur une colonne enparticulier, les enregistrements possédant la valeur nul ne sont pas comptabilisés.

SELECT COUNT(nom_colonne) FROM table;

Exercice 2 SQL :

1. Écrire une requête SQL qui permet d’obtenir le nom des artistes dont le prénom est ‘David’.

2. Écrire une requête SQL qui permet d’ajouter le nouvel artiste : ‘Christopher Nolan - 1972’dans la table Artiste.

3. Écrire une requête SQL qui permet d’ajouter une nouvelle artiste : ‘Camille Honette - 1987’dans la table Artiste.

4. Après vérification, l’année de naissance de Christopher Nolan est 1970. Écrire une requêteSQL qui permet de corriger cette erreur.

5. Écrire une requête SQL qui permet d’obtenir le nom des artistes dont le prénom est ‘John’ etdont l’id est strictement supérieur à 30.

6. Écrire une requête SQL qui permet d’obtenir le nom et prénom des artistes nés à partir de1970 ou dont le prénom est ‘James’.

7. Écrire une requête SQL qui permet d’obtenir le nombre d’artistes nés avant 1920.

8. Écrire une requête qui supprime l’artiste Camille Honette.

16

Page 17: Introduction aux Bases De Données. (Term NSI)

4. Les jointures.

Nous allons maintenant utiliser une table "Films” avec les attributs : id (INT), titre (TEXT), annee(INT) et id_Artistes (INT).

Pour cela, vous devez saisir la requête : . . . (à vous de trouver)

Une fois la table créée, ajouter les données en copiant-collant la requête ci-dessous :

[ ]: INSERT INTO Films VALUES(1, 'Vertigo', 1958, 1),(2, 'Alien', 1979, 2),(3, 'Titanic', 1997, 4),(4, 'Sleepy Hollow', 1999,8),(5, 'Impitoyable', 1992, 12),(6, 'Gladiator', 2000, 2),(7, 'Blade Runner', 1982, 2),(8, 'Pulp fiction', 1994, 22),(9, 'Terminator', 1984, 2),(10, 'Les dents de la mer', 1975, 29),(11, 'Le monde perdu', 1997, 29),(12, 'La mort aux trousses', 1959, 1),(13, 'Nikita', 1990, 62),(14, 'Le grand bleu', 1988,62),(15, 'Le parrain', 1972, 39),(16, 'Le parrain II', 1974, 39),(17, 'Kill Bill', 2003,22),(18, 'Million Dollar Baby', 2005,12);

Nous avons maitenant 2 tables dans la base de données et nous allons pouvoir associer ces 2 tablesdans une même requête grâce aux jointures.

Les jointures permettent d’associer plusieurs tables dans une même requête. Cela permetd’exploiter la puissance des bases de données relationnelles pour obtenir des résultats qui combi-nent les données de plusieurs tables de manière efficace.

En général, les jointures consistent à associer des lignes de 2 tables en associant l’égalité desvaleurs d’une colonne d’une première table par rapport à la valeur d’une colonne d’une secondetable. Elles permettent d’établir un lien entre 2 tables. Qui dit lien entre 2 tables dit souvent clefétrangère et clef primaire.

Par exemple, si un site web possède une table pour les articles (titre, contenu, date de publica-tion. . . ) et une autre pour les rédacteurs (nom, date d’inscription, date de naissance. . . ), avec unejointure il est possible d’effectuer une seule recherche pour afficher un article et le nom du rédac-teur. Cela évite d’avoir à stocker le nom du rédacteur dans la table "article” et donc la redondancede données.

Il y a plusieurs méthodes pour associer 2 tables ensemble. Nous n’allons n’en aborder qu’uneseule qui est au programme. Nous allons utiliser : INNER JOIN. C’est l’une des jointures les pluscommunes. C’est une jointure interne pour retourner les enregistrements quand la condition estvraie dans les 2 tables.

17

Page 18: Introduction aux Bases De Données. (Term NSI)

Copier-Coller la requête ci-dessous :

[ ]: SELECT * FROM Films INNER JOIN Artistes ON Films.id_Artistes = Artistes.id;

"FROM Films INNER JOIN Artistes” permet de créer une jointure entre les tables Films et Artistes(comme si les 2 tables étaient "rassemblées”).

"ON Films.id_Artistes = Artistes.id” signifie qu’une ligne quelconque A de la table Films devraêtre fusionnée avec la ligne B de la table Artistes à condition que l’attribut id de la ligne A soit égalà l’attribut id_Artistes de la ligne B.

Par exemple, la ligne 1 (id=1) de la table Films (ligne A) sera fusionnée avec la ligne 1 (id=1) de latable Artistes (ligne B) car l’attribut id_Artistes de la ligne A est égal à 1 et l’attribut id de la ligneB est aussi égal à 1.

Si un même nom d’attribut est présent dans les 2 tables (par exemple ici l’attribut id), il estnécessaire d’ajouter le nom de la table devant afin de pouvoir les distinguer (Artistes.id etFilms.id).

Exercice 3 SQL :

1. Écrire une requête SQL qui permet d’ajouter un nouveau film : ‘19, Psychose, 1960, 1’.

Dans le cas d’une jointure, il est tout à fait possible de sélectionner certains attributs et pas d’autres.

2. Écrire une requête SQL qui permet d’obtenir pour tous les films, leur titre, leur année desortie et les noms et prénoms de leur réalisateur.

Il est de nouveau possible d’utiliser la clause WHERE dans le cas d’une jointure.

3. Écrire une requête SQL qui permet d’obtenir pour tous les films sortis depuis 1980, leur titre,leur année de sortie et les noms et prénoms de leur réalisateur.

18