Requêtes SQL
SQL
1 SQL
Sélection
Jointure
Renommage
2/27
SQL
Interroger la base de données
Nous avons vu comment construire une base de données
Nous allons voir comment l’interroger, à l’aide de requêtes
Pour cela nous allons utiliser un langage , SQL (Structured
Query Language)
3/27
SQL
Exemples de requêtes
Soit les tables suivantes :
STUDENTS [StudNb , Name, City]
INSCRIPTION [StudNb, CourseCode, Year ]
COURSE [CourseCode, Title, WebSite]
Voici des exemples de requêtes que l’on souhaite poser :
Quel est le nom de l’étudiant dont le numéro est ’1013’ ?
Dans quels cours l’étudiant ’Martin’ est inscrit en 2016 ?
Combien d’étudiant suivent le cours de droit en 2015 ?
Quels sont les étudiants inscrits dans le cours de marketing et
dans le cours d’économie ?
4/27
SQL
Comment écrire une requête ?
Langages de requêtes théoriques : algèbre relationnelle
Langages de requêtes commerciaux : SQL
5/27
SQL
Requête de base en SQL
Lister tous les tuples d’une instance
SELECT attributs
FROM R ;
SELECT : permet de choisir les attributs que l’on souhaite
FROM : précise les tables où trouver les attributs
Une requête se termine toujours pas ;
Exemple : requête de base
Toutes les informations sur les inscriptions
INSCRIPTION
StudNb CourseCode Year
1234 1101 2016
1234 2103 2016
SELECT StudNb, CourseCode, Year 1235 1101 2016
1235 2103 2015
FROM Inscription; 1236 1101 2015
1237 3103 2015
6/27
SQL
Sélection
Sélection en SQL
Format
SELECT *
FROM R
WHERE condition ;
Exemple 1
Lister toutes les informations concernant les cours où l’étudiant
1234 est inscrit
StudNB CourseCode Year
SELECT *
1234 1101 2016
FROM Inscription
1234 2103 2016
WHERE StudNB = 1234;
7/27
SQL
Sélection
Sélection en SQL
Exemple 2
Lister toutes les informations concernant le cours 1101 où
l’étudiant 1234 est inscrit
SELECT *
StudNB CourseCode Year
FROM Inscription
1234 1101 2016
WHERE CourseCode = 1101
and StudNb = 1234;
8/27
SQL
Sélection
Projection et sélection en SQL
Format
SELECT A1 . . . An
FROM R
WHERE condition ;
Exemple 1
Quels sont les étudiants habitant à Orléans ?
Name
SELECT Name
Garcia
FROM Student
Dupont
WHERE City =’Orleans’;
9/27
SQL
Jointure
Jointure en SQL
Comment faire lorsque les attributs sont sur plusieurs tables ?
Exemple
Lister les inscriptions dans différents cours, des étudiants avec leur
nom et prénom
Ici les informations des étudiants se trouvent dans la table
STUDENTS et celles sur les inscriptions dans INSCRIPTION
Il ne suffit pas de mettre les deux tables dans le FROM
requête fausse
SELECT *
FROM INSCRIPTION,STUDENT
Cette requête retourne toutes les inscriptions avec tous les
étudiants juxtaposés. Donc s’il y a 10 inscriptions, et 5 étudiants,
nous obtiendrons 50 lignes !
10/27
SQL
Jointure
requête fausse
SELECT *
FROM INSCRIPTION,STUDENT;
StudNb CourseCode Year StudNb Name City
1234 1101 2016 1234 Martin Paris
1234 1101 2016 1235 Smith Paris
1234 1101 2016 1236 Garcia Orléans
1234 1101 2016 1237 Dupont Orléans
1234 2103 2016 1234 Martin Paris
1234 2103 2016 1235 Smith Paris
... ... ... ... ... ...
11/27
SQL
Jointure
Parmi ces résultats certaines lignes ont du sens :
StudNb CourseCode Year StudNb Name City
1234 1101 2016 1234 Martin Paris
1234 1101 2016 1235 Smith Paris
1234 1101 2016 1236 Garcia Orléans
1234 1101 2016 1237 Dupont Orléans
1234 2103 2016 1234 Martin Paris
1234 2103 2016 1235 Smith Paris
... ... ... ... ... ...
Ces lignes sont correctement associées, car le numéro étudiant
(StudNb), attribut présent dans les deux tables, est identique
12/27
SQL
Jointure
Il est donc nécessaire de ne retourner que les résultats qui ont
du sens
Il faut trouver les colonnes identiques entre les tables, qui
vont permettre la jointure
On filtre les résultats pour ne retourner que les lignes où ces
attributs communs sont identiques dans les deux tables
13/27
SQL
Jointure
Format
SELECT A1 ... An
FROM R1, R2
WHERE conditions de jointure;
Exemple
Information de tous les étudiants inscrits
SELECT *
FROM Inscription , Students
WHERE [Link] = [Link];
14/27
SQL
Jointure
SELECT *
FROM Inscription , Students
WHERE [Link] = [Link];
StudNB CourseCode Year Name City
1234 1101 2016 Martin Paris
1234 2103 2016 Martin Paris
1235 1101 2016 Smith Paris
1235 2103 2015 Smith Paris
1236 1101 2015 Garcia Orleans
1237 3103 2015 Dupont Orleans
15/27
SQL
Jointure
Remarque sur la jointure
Les jointures se font toujours entre deux tables
Si l’information est sur trois tables ou plus, par exemple entre
les tables A,B et C , il faudra faire une jointure entre A et B,
puis entre B et C
La jointure n’a de sens que si les deux tables ont des attributs
communs : pourquoi si votre base de données est
correctement formée, est-ce généralement le cas ?
16/27
SQL
Jointure
Natural join
Il est possible d’utiliser une natural join quand il existe des
attributs ayant le même nom dans les deux tables.
Simplifie les requêtes, il n’est plus nécessaire d’indiquer les
conditions de jointure
Format
SELECT *
FROM R1 natural join R2 ;
17/27
SQL
Jointure
Les deux requêtes sont équivalentes
SELECT *
FROM Inscription , Students
WHERE [Link] = [Link];
SELECT *
FROM Inscription natural join Students;
18/27
SQL
Renommage
Changer le nom de la colonne affiché dans un résultat
Associer des alias aux colonnes
SELECT A1 as nouveauNom, ... An
FROM R
select StudNb as NumEtu, NumEtu Nom Ville
Name as Nom, 1234 Martin Paris
12345 Garcia Orléans
City as Ville
from Students ;
19/27
SQL
Renommage
Renommage : les relations sont associées à des alias
Associer des alias aux relations
SELECT A1 ... An
FROM R r1 , R r2 ;
WHERE conditions de jointure;
Exemple 2
Information de tous les étudiants inscrits
select *
from Inscription s1 , Students s2
where [Link] = [Link];
20/27
SQL
Renommage
Requête sur la même table
Avec le renommage, il est possible d’avoir plusieurs fois la même
table dans la clause FROM, ce qui permet de répondre à certaines
requêtes :
Requête
Lister les couples d’étudiants qui habitent dans la même ville
City Name(1) Name (2)
SELECT [Link], [Link], [Link] Paris Martin Smith
FROM Student s1, Student s2 Orleans Garcia Dupont
WHERE [Link] = [Link];
21/27
SQL
Renommage
Quelques compléments de SQL
Des remarques sur SQL
22/27
SQL
Renommage
Les doublons
Suppression des doublons
Utilisation de l’instruction DISTINCT pour supprimer les doublons.
Lister les villes où habitent les étudiants
City
SELECT DISTINCT(City) Paris
FROM Student; Orleans
23/27
SQL
Renommage
L’ordre du résultat
Format
ORDER BY list of attributes
Usage
L’ordre est établi par rapport à la valeur d’un attribut.
Un deuxième attribut peut être utilisé pour résoudre les cas de
valeurs identiques et ainsi de suite.
Par défaut l’ordre est croissant mais nous pouvons demander
l’ordre décroissant avec l’instruction DESC.
24/27
SQL
Renommage
Exemple
Lister tous les numéro d’étudiants, les trier par leur nom
StudNb Name
1237 Dupont
select StudNB, Name
1236 Garcia
from Student
1234 Martin
order by Name;
1235 Smith
25/27
SQL
Renommage
Comparaison approximative de chaı̂nes
Format
SELECT A1, ..., An
FROM R
WHERE Ai LIKE pattern;
Pattern
Le pattern est une chaı̂ne de caractères qui peut contenir des
symboles spéciaux, à savoir :
% qui est un joker, remplace 0 ou plusieurs caractères.
remplace 1 seul caractère.
Nous pouvons aussi utiliser NOT LIKE
26/27
SQL
Renommage
Lister tous les noms d’étudiant dont le nom se termine par ’n’
SELECT distinct Name Name
FROM Students Martin
WHERE Name LIKE %n;
27/27