bdd2 e
bdd2 e
bdd2 e
Partie 1
Langage SQL
SQL : structured query langage = langage de requêtes structuré est un langage informatique de dialogue avec
une base de données relationnelle (un fichier qui organise les données sur une ou plusieurs tables).
Une requête est une question posée à une base de données. Nous allons voir comment sont écrites les requêtes
de base en SQL. Une requête est la traduction d’une relation écrite en algèbre relationnelle.
L’algèbre relationnelle est un outil créé par le chercheur E. Codd (1970) pour manipuler les tables dans le mo-
dèle relationnel. Ses principales opérations sont : SELECTIONNER certaines colonnes (Projection) ou certaines
lignes (selection) d’une table, mais aussi de combiner 2 tables.
Chaque opération SQL prend en entrée une ou deux tables et renvoie une table.
Voyons dans un premier temps les requêtes utiles pour CREER, SUPPRIMER, REMPLIR et MODIFIER la table
Créons la table :
CREATE TABLE va permettre d’indiquer le schéma d’une relation, avec ses Attributs et Domaines. Les types
(ou domaines) les plus courants sont parmi :
On peut ajouter des contraintes (constraints) en paramètre : PK (Primary Key), UNIQUE (dans une colonne,
les valeurs doivent être uniques à chaque ligne), AUTOINCREMENT, NOT NULL (doit comprendre une valeur),
DEFAULT ‘Not Applicable’ (la valeur mise par défaut si vide).
("Doe", 16, 17, 18) est un argument contenant les valeurs à insérer.
Remarque : si un enregistrement n’existe pas, il faudra mettre NULL
1 UPDATE Table_notes
2 SET Math = 18
3 WHERE Nom = "Doe";
Partie 2
Les mots-clefs SELECT, FROM, WHERE, GROUP BY, HAVING et ORDER BY sont appelés des clauses.
page - 2
BDD2 Cours et exercices - SQL
SELECT est la commande qui retourne la table selon les attributs choisis. Il s’agit d’une Projection comme
type d’opération relationnelle.
Une projection est un type de sélection où seulement une partie des attributs des tables choisies est retenue pour
le résultat.
FROM est la table concernée.
Pour avoir toutes les colonnes, faire :
On peut renommer une colonne avec l’alias AS, et choisir un nom plus pratique.
SELECT DISTINCT retourne les éléments de manière unique.
Et limiter le nombre de lignes à 10 par exemple :
La clause WHERE permet de SELECTIONNER des lignes à partir de conditions dans les requêtes, mais aussi
de realiser des JOINTURES (voir plus loin)
1 SELECT Nom_eleve
2 FROM Table_notes
3 WHERE Math > 14 OR Info >= 18;
Exercice : Représenter la table Table_notes (En-tête et contenu de la colonne) qui sera retournée
par cette requête.
page - 3
BDD2 Cours et exercices - SQL
2.3 AVG SUM MIN MAX COUNT
Ce sont des fonctions d’agregation, qui retournent un resultat évalué sur la colonne issue de la SELECTION
Exemple1 : Combien d’élèves ont plus de 15 en math dans la table Table_notes ?
• SUM(attribut) va faire la somme pour les valeurs de l’attribut et pour la selection donnée
Exercice : Ecrire la requête qui calcule la moyenne de math pour tous les élèves de la table
Table_notes
Remarque : On peut aussi rajouter une clause sur le nombre de lignes retournées avec LIMIT <nombre> Très
pratiques pour de grandes tables.
page - 4
BDD2 Cours et exercices - SQL
2.6 WHERE <colonne> LIKE <motif> et WHERE <colonne> IN <tuple>
2.6.1 LIKE
On peut faire une recherche dans une table selon certains motifs. Pour cela, on utilise WHERE ... LIKE <
suivi de caractères spéciaux>.
Caractères spéciaux :
– %s permet d’obtenir toutes chaines qui finissent par s, mais aussi le caractère unique s.
Exercice : Dans la relation Eleves de schéma ‘((prenom, TEXT), (nom, TEXT), (nais, DATE),
(rue, TEXT), (numero, INTEGER), (CP, INTEGER), (ville, TEXT), (email, TEXT)) :
1. Définir une requête qui permet d’obtenir tous les élèves nés en 2002
2. Définir une requête qui permet d’obtenir tous les élèves habitant dans le département des
Alpes Maritimes.
3. Définir une requête qui permet d’obtenir tous les élèves ayant un compte e-mail chez l’opérateur
laposte (du type [email protected])
2.6.2 IN
Pour faire une recherche dans une table selon une liste de critères, on utilise le mot clé IN On peut par exemple
rechercher les élèves qui habitent Nice, Saint-Laurent ou Cagnes-sur-mer dans la table Eleves :
Remarque : Cette syntaxe peut être ajoutée à l’opérateur NOT, ce qui fait NOT IN.
On peut avoir besoin d’extraire un groupe de lettres du texte. On utilise alors la fonction substr. Les para-
mètres attendus sont :
• nom de l’attribut
Exemple : Recherche des élèves dont les noms commencent par ‘a’, ‘b’ ou ‘c’ :
page - 5
BDD2 Cours et exercices - SQL
Exercice :
Ecrire une requête sur la table Eleves qui retourne les noms des élèves dont la famille habite dans
les départements (‘06’, ‘83’, ‘05’)
2.7 Jointure
Pour eviter les redondances, on a vu qu’il était préférable de répartir les données sur plusieurs tables, chaque
table modélisant UNE seule entité.
La jointure permet de mettre en relation plusieurs tables, par l’intermédiaire des liens qui existent en particuler
entre la clé primaire de l’une et la clé étrangère de l’autre. La jointure est une opération de sélection car elle
permet de ne retenir que les enregistrements pour lesquels la valeur de la clé primaire d’une table correspond
à la valeur de la clé étrangère d’une autre table.
• 1ere méthode :
1 SELECT *
2 FROM orders
3 JOIN customers
4 ON orders . customer_id = customers . customer_id ;
à la 4e ligne : on declare comment les 2 tables sont combinées : on veut faire correspondre la colonne
ìd_customersde la table orders avec celle ìd_customersde la table customers.
page - 6
BDD2 Cours et exercices - SQL
Comme le nom d’une colonne va se retrouver dans de nombreuses tables, on utilisera la syntaxe : table_name
.column_name
• 2e méthode :
1 SELECT *
2 FROM orders , customers
3 WHERE orders . customer_id = customers . customer_id ;
Exercice : Voici les tables order, subscriptions et customers d’un service d’abonnements à des
magazines, à New York :
Question 1 : Quelle est la clé primaire de la table order. Quelles colonnes de la table order sont
des clés étrangères, en vue du lien possible avec les autres relations ?
Question 2 : Ecrire la requête qui renvoie la table suivante, par jointure des tables orders et
customers :
order_id ’customer_name‘
1 Jane Doe
2 Jane Doe
3 Joe Schmo
page - 7
BDD2 Cours et exercices - SQL
Question 3 : chercher les objets de la table jointe selon la valeur d’une clé : Que renvoie la requête
suivante ?
1 SELECT *
2 FROM orders
3 JOIN subscriptions
4 ON orders . subscription_id = subscriptions . subscription_id
5 WHERE subscriptions . description = 'Fashion Magazine ';
Partie 3
Exercices
3.1 Connaissances
3.1.1 Quel outil permet à un utilisateur de rechercher une information spécifique dans une base de don-
nées ?
• Une recherche
• Une requête
• Une clause
• Un filtre
• INSERT
• INSERT INTO
• ADD
• PUT
• GET
• OPEN
• EXTRACT
• SELECT
page - 8
BDD2 Cours et exercices - SQL
3.1.5 Quelle commande permet d’extraire TOUTES les lignes de la table élève ?
• SELECT * .Eleves
• HAVING
• SORT
• SELECT
• WHERE
• plusieurs tables
3.1.8 Représenter l’architecture du modèle client-serveur incluant une base de données et une application
web.
Partie 4
Les clés primaires sont en gras et les clés étrangères sont précédées d’un #.
Ainsi emploi.id_ind est une clé étrangère faisant référence à individu.id_ind.
Voici un extrait des tables individu et realisation :
page - 9
BDD2 Cours et exercices - SQL
4.1 Question 1
B. Fournir une requête SQL permettant de récupérer le titre et la clé primaire de chaque film dont la date de
sortie est strictement supérieure à 2020.
4.2 Question 2
A. Dire s’il faut utiliser la requête 1 ou la requête 2 proposées ci-dessous pour modifier la date de nais-
sance de Daniel Crog. Justifier votre réponse en expliquant pourquoi la requête refusée ne pourra pas
fonctionner.
Requête 1 :
1 UPDATE individu
2 SET naissance = '02 -03 -1968 '
3 WHERE id_ind = 688 AND nom = 'Crog ' AND prenom = 'Daniel ';
Requête 2 :
B. Expliquer si la relation individu peut accepter (ou pas) deux individus portant le même nom, le même
prénom et la même date de naissance.
4.3 Question 3
page - 10
BDD2 Cours et exercices - SQL
A. Recopier sur votre copie les demandes ci-dessous, dans leur intégralité, et les compléter correctement
pour qu’elles ajoutent dans la relation emploi les rôles de Daniel Crog en tant que James Bond dans le
film nommé ‘Casino Impérial’ puis dans le film ‘Ciel tombant’.
B. On désire rajouter un nouvel emploi de Daniel Crog en tant que James Bond dans le film ‘Docteur Yes’.
Expliquer si l’on doit d’abord créer l’enregistrement du film dans la relation realisation ou si l’on doit d’abord
créer le rôle dans la relation emploi.
4.4 Question 4
A. Recopier sur votre copie la requête SQL ci-dessous, dans son intégralité, et la compléter de façon à
ce qu’elle renvoie le nom de l’acteur, le titre du film et l’année de sortie du film, à partir de tous les
enregistrements de la relation emploi pour lesquels la description de l’emploi est 'Acteur(James
Bond)'.
1 SELECT ...
2 FROM emploi
3 JOIN individu ON ...
4 JOIN realisation ON ...
5 WHERE emploi . description = 'Acteur ( James Bond)';
B. Fournir une requête SQL permettant de trouver toutes les descriptions des emplois de Denis Johnson
(Denis est son prénom et Johnson est son nom). On veillera à n’afficher que la description des emplois
et non les films associés à ces emplois.
page - 11