Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500...

75
SQL : Langage d’Interrogation de Donn ´ ees Achref El Mouelhi Docteur de l’universit ´ e d’Aix-Marseille Chercheur en programmation par contrainte (IA) Ing ´ enieur en g ´ enie logiciel [email protected] H & H: Research and Training 1 / 57

Transcript of Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500...

Page 1: Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500 Citroen C4 2015 4 600 Ford Kuga 2019 700 Fiat punto 2008 5 immatriculation : cl´e

SQL : Langage d’Interrogation de Donnees

Achref El Mouelhi

Docteur de l’universite d’Aix-MarseilleChercheur en programmation par contrainte (IA)

Ingenieur en genie logiciel

[email protected]

H & H: Research and Training 1 / 57

Page 2: Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500 Citroen C4 2015 4 600 Ford Kuga 2019 700 Fiat punto 2008 5 immatriculation : cl´e

Plan

1 Introduction2 Requetes simples

SELECT ... FROM ...LIMIT et OFFSETDISTINCTCOUNTWHEREBETWEENINNOTLIKEISIFNULLORDER BYGROUP BYHAVINGUNION

H & H: Research and Training 2 / 57

Page 3: Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500 Citroen C4 2015 4 600 Ford Kuga 2019 700 Fiat punto 2008 5 immatriculation : cl´e

Plan

3 JointureJointure impliciteJointure explicite

JOIN ... ONLEFT JOIN ... ONRIGHT JOIN ... ON

4 Requetes imbriqueesWHERE ... IN ... SELECTWHERE ... ANY ... SELECTWHERE EXISTS ... SELECTFROM ... SELECT ... AS

5 Fonctions sur les chaınes de caractere

H & H: Research and Training 3 / 57

Page 4: Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500 Citroen C4 2015 4 600 Ford Kuga 2019 700 Fiat punto 2008 5 immatriculation : cl´e

c© Achref EL MOUELHI c©

Introduction

SQL

SQL

Langage de definition de donnees

Langage de manipulation de donnees

Langage de controle de donnees

Langage d’interrogation de donnees

Langage d’interrogation de donnees

Langage qui permet de lire de donnees stockees dans la base de donnees

Utilisant des concepts connus en algebre relationnel : projection, jointure,intersection, union, produit cartesien...

H & H: Research and Training 4 / 57

Page 5: Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500 Citroen C4 2015 4 600 Ford Kuga 2019 700 Fiat punto 2008 5 immatriculation : cl´e

c© Achref EL MOUELHI c©

Introduction

SQL

SQL

Langage de definition de donnees

Langage de manipulation de donnees

Langage de controle de donnees

Langage d’interrogation de donnees

Langage d’interrogation de donnees

Langage qui permet de lire de donnees stockees dans la base de donnees

Utilisant des concepts connus en algebre relationnel : projection, jointure,intersection, union, produit cartesien...

H & H: Research and Training 4 / 57

Page 6: Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500 Citroen C4 2015 4 600 Ford Kuga 2019 700 Fiat punto 2008 5 immatriculation : cl´e

c© Achref EL MOUELHI c©

Introduction

Considerons la base de donnees poei contenant les deux tables suivantes

personnenum nom prenom salaire ville

1 Cohen Sophie 2000 Marseille2 Leberre Bernard 1500 Marseille3 Benamar Pierre 1800 Lyon4 Hadad Karim 2500 Paris5 Wick John 3000 Paris

num : la cle primaire

vehiculeimmatriculation marque modele annee nump

100 Peugeot 5008 2018 5200 Renault clio 2000 4300 Ford fiesta 2010 1400 Peugeot 106 2002 3500 Citroen C4 2015 4600 Ford Kuga 2019700 Fiat punto 2008 5

immatriculation : cle primaire

nump : cle etrangere

H & H: Research and Training 5 / 57

Page 7: Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500 Citroen C4 2015 4 600 Ford Kuga 2019 700 Fiat punto 2008 5 immatriculation : cl´e

c© Achref EL MOUELHI c©

Introduction

SQLScript de la creation de la base de donnees

create database poei;

use poei;

create table personne (num int(3) primary key,nom varchar(20),prenom varchar(20),salaire int(4),ville varchar(20)

);

create table vehicule (immatriculation int(3) primary key,marque varchar(20),modele varchar(20),annee int(4),nump int(3),constraint fk_vehicule_personne foreign key (nump) references

personne(num));

H & H: Research and Training 6 / 57

Page 8: Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500 Citroen C4 2015 4 600 Ford Kuga 2019 700 Fiat punto 2008 5 immatriculation : cl´e

c© Achref EL MOUELHI c©

Introduction

SQL

Script d’insertion de donnees

insert into personne values(1, ’Cohen’, ’Sophie’, 2000, ’Marseille’),(2, ’Leberre’, ’Bernard’, 1500, ’Marseille’),(3, ’Benamar’, ’Pierre’, 1800, ’Lyon’),(4, ’Hadad’, ’Karim’, 2500, ’Paris’),(5, ’Wick’, ’John’, 3000, ’Paris’);

insert into vehicule values(100, ’Peugeot’, ’5008’, 2018, 5),(200, ’Renault’, ’clio’, 2000, 4),(300, ’Ford’, ’fiesta’, 2010, 1),(400, ’Peugeot’, ’106’, 2002, 3),(500, ’Citroen’, ’C4’, 2015, 4),(600, ’Ford’, ’Kuga’, 2019, null),(700, ’Fiat’, ’punto’, 2008, 5);

H & H: Research and Training 7 / 57

Page 9: Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500 Citroen C4 2015 4 600 Ford Kuga 2019 700 Fiat punto 2008 5 immatriculation : cl´e

c© Achref EL MOUELHI c©

Requetes simples

SQL

Remarque

Une requete SQL de lecture est composee d’au moins deux clauses

Quelques clauses possibles

select : les colonnes a selectionner

from : les tables concernees

where : les conditions

...

H & H: Research and Training 8 / 57

Page 10: Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500 Citroen C4 2015 4 600 Ford Kuga 2019 700 Fiat punto 2008 5 immatriculation : cl´e

c© Achref EL MOUELHI c©

Requetes simples

SQL

Remarque

Une requete SQL de lecture est composee d’au moins deux clauses

Quelques clauses possibles

select : les colonnes a selectionner

from : les tables concernees

where : les conditions

...

H & H: Research and Training 8 / 57

Page 11: Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500 Citroen C4 2015 4 600 Ford Kuga 2019 700 Fiat punto 2008 5 immatriculation : cl´e

c© Achref EL MOUELHI c©

Requetes simples SELECT ... FROM ...

SQLPour selectionner toutes les donnees de la table personne

SELECT *FROM personne;

Le resultat

+-----+---------+---------+---------+-----------+| num | nom | prenom | salaire | ville |+-----+---------+---------+---------+-----------+| 1 | Cohen | Sophie | 2000 | Marseille || 2 | Leberre | Bernard | 1500 | Marseille || 3 | Benamar | Pierre | 1800 | Lyon || 4 | Hadad | Karim | 2500 | Paris || 5 | Wick | John | 3000 | Paris |+-----+---------+---------+---------+-----------+

H & H: Research and Training 9 / 57

Page 12: Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500 Citroen C4 2015 4 600 Ford Kuga 2019 700 Fiat punto 2008 5 immatriculation : cl´e

c© Achref EL MOUELHI c©

Requetes simples SELECT ... FROM ...

SQLPour selectionner toutes les donnees de la table personne

SELECT *FROM personne;

Le resultat

+-----+---------+---------+---------+-----------+| num | nom | prenom | salaire | ville |+-----+---------+---------+---------+-----------+| 1 | Cohen | Sophie | 2000 | Marseille || 2 | Leberre | Bernard | 1500 | Marseille || 3 | Benamar | Pierre | 1800 | Lyon || 4 | Hadad | Karim | 2500 | Paris || 5 | Wick | John | 3000 | Paris |+-----+---------+---------+---------+-----------+

H & H: Research and Training 9 / 57

Page 13: Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500 Citroen C4 2015 4 600 Ford Kuga 2019 700 Fiat punto 2008 5 immatriculation : cl´e

c© Achref EL MOUELHI c©

Requetes simples LIMIT et OFFSET

SQL

Et si on veut selectionner que les deux premieres personnes

SELECT *FROM personneLIMIT 2;

Le resultat

+-----+---------+---------+---------+-----------+| num | nom | prenom | salaire | ville |+-----+---------+---------+---------+-----------+| 1 | Cohen | Sophie | 2000 | Marseille || 2 | Leberre | Bernard | 1500 | Marseille |+-----+---------+---------+---------+-----------+

H & H: Research and Training 10 / 57

Page 14: Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500 Citroen C4 2015 4 600 Ford Kuga 2019 700 Fiat punto 2008 5 immatriculation : cl´e

c© Achref EL MOUELHI c©

Requetes simples LIMIT et OFFSET

SQL

Et si on veut selectionner que les deux premieres personnes

SELECT *FROM personneLIMIT 2;

Le resultat

+-----+---------+---------+---------+-----------+| num | nom | prenom | salaire | ville |+-----+---------+---------+---------+-----------+| 1 | Cohen | Sophie | 2000 | Marseille || 2 | Leberre | Bernard | 1500 | Marseille |+-----+---------+---------+---------+-----------+

H & H: Research and Training 10 / 57

Page 15: Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500 Citroen C4 2015 4 600 Ford Kuga 2019 700 Fiat punto 2008 5 immatriculation : cl´e

c© Achref EL MOUELHI c©

Requetes simples LIMIT et OFFSET

SQL

Et si on veut selectionner les deux personnes suivantes

SELECT *FROM personneLIMIT 2OFFSET 2;

Le resultat

+-----+---------+--------+---------+-------+| num | nom | prenom | salaire | ville |+-----+---------+--------+---------+-------+| 3 | Benamar | Pierre | 1800 | Lyon || 4 | Hadad | Karim | 2500 | Paris |+-----+---------+--------+---------+-------+

H & H: Research and Training 11 / 57

Page 16: Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500 Citroen C4 2015 4 600 Ford Kuga 2019 700 Fiat punto 2008 5 immatriculation : cl´e

c© Achref EL MOUELHI c©

Requetes simples LIMIT et OFFSET

SQL

Et si on veut selectionner les deux personnes suivantes

SELECT *FROM personneLIMIT 2OFFSET 2;

Le resultat

+-----+---------+--------+---------+-------+| num | nom | prenom | salaire | ville |+-----+---------+--------+---------+-------+| 3 | Benamar | Pierre | 1800 | Lyon || 4 | Hadad | Karim | 2500 | Paris |+-----+---------+--------+---------+-------+

H & H: Research and Training 11 / 57

Page 17: Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500 Citroen C4 2015 4 600 Ford Kuga 2019 700 Fiat punto 2008 5 immatriculation : cl´e

c© Achref EL MOUELHI c©

Requetes simples LIMIT et OFFSET

SQL

On peut aussi simplifier l’ecriture precedente

SELECT *FROM personneLIMIT 2, 2;

Le resultat est le meme

+-----+---------+--------+---------+-------+| num | nom | prenom | salaire | ville |+-----+---------+--------+---------+-------+| 3 | Benamar | Pierre | 1800 | Lyon || 4 | Hadad | Karim | 2500 | Paris |+-----+---------+--------+---------+-------+

H & H: Research and Training 12 / 57

Page 18: Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500 Citroen C4 2015 4 600 Ford Kuga 2019 700 Fiat punto 2008 5 immatriculation : cl´e

c© Achref EL MOUELHI c©

Requetes simples LIMIT et OFFSET

SQL

On peut aussi simplifier l’ecriture precedente

SELECT *FROM personneLIMIT 2, 2;

Le resultat est le meme

+-----+---------+--------+---------+-------+| num | nom | prenom | salaire | ville |+-----+---------+--------+---------+-------+| 3 | Benamar | Pierre | 1800 | Lyon || 4 | Hadad | Karim | 2500 | Paris |+-----+---------+--------+---------+-------+

H & H: Research and Training 12 / 57

Page 19: Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500 Citroen C4 2015 4 600 Ford Kuga 2019 700 Fiat punto 2008 5 immatriculation : cl´e

c© Achref EL MOUELHI c©

Requetes simples LIMIT et OFFSET

SQLPour filtrer les colonnes (ici la ville de chaque personne)

SELECT villeFROM personne;

Le resultat

+-----------+| ville |+-----------+| Marseille || Marseille || Lyon || Paris || Paris |+-----------+

Comment on fait pour supprimer les doublons?

H & H: Research and Training 13 / 57

Page 20: Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500 Citroen C4 2015 4 600 Ford Kuga 2019 700 Fiat punto 2008 5 immatriculation : cl´e

c© Achref EL MOUELHI c©

Requetes simples LIMIT et OFFSET

SQLPour filtrer les colonnes (ici la ville de chaque personne)

SELECT villeFROM personne;

Le resultat

+-----------+| ville |+-----------+| Marseille || Marseille || Lyon || Paris || Paris |+-----------+

Comment on fait pour supprimer les doublons?

H & H: Research and Training 13 / 57

Page 21: Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500 Citroen C4 2015 4 600 Ford Kuga 2019 700 Fiat punto 2008 5 immatriculation : cl´e

c© Achref EL MOUELHI c©

Requetes simples DISTINCT

SQL

Pour supprimer les doublons

SELECT distinct(ville)FROM personne;

Le resultat

+-----------+| ville |+-----------+| Marseille || Lyon || Paris |+-----------+

H & H: Research and Training 14 / 57

Page 22: Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500 Citroen C4 2015 4 600 Ford Kuga 2019 700 Fiat punto 2008 5 immatriculation : cl´e

c© Achref EL MOUELHI c©

Requetes simples COUNT

Pour compter le nombre de ville dans la table personne

SELECT COUNT( distinct(ville))FROM personne;

Le resultat

+------------------------+| COUNT( distinct(ville)) |+------------------------+| 3 |+------------------------+

Remarque

count compte les tuples (les lignes) et pas les colonnes.

Question

Comment remplacer le nom de la colonne COUNT( distinct(ville)) par un autrepersonnalise?

H & H: Research and Training 15 / 57

Page 23: Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500 Citroen C4 2015 4 600 Ford Kuga 2019 700 Fiat punto 2008 5 immatriculation : cl´e

c© Achref EL MOUELHI c©

Requetes simples COUNT

Pour compter le nombre de ville dans la table personne

SELECT COUNT( distinct(ville))FROM personne;

Le resultat

+------------------------+| COUNT( distinct(ville)) |+------------------------+| 3 |+------------------------+

Remarque

count compte les tuples (les lignes) et pas les colonnes.

Question

Comment remplacer le nom de la colonne COUNT( distinct(ville)) par un autrepersonnalise?

H & H: Research and Training 15 / 57

Page 24: Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500 Citroen C4 2015 4 600 Ford Kuga 2019 700 Fiat punto 2008 5 immatriculation : cl´e

c© Achref EL MOUELHI c©

Requetes simples COUNT

Pour compter le nombre de ville dans la table personne

SELECT COUNT( distinct(ville))FROM personne;

Le resultat

+------------------------+| COUNT( distinct(ville)) |+------------------------+| 3 |+------------------------+

Remarque

count compte les tuples (les lignes) et pas les colonnes.

Question

Comment remplacer le nom de la colonne COUNT( distinct(ville)) par un autrepersonnalise?

H & H: Research and Training 15 / 57

Page 25: Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500 Citroen C4 2015 4 600 Ford Kuga 2019 700 Fiat punto 2008 5 immatriculation : cl´e

c© Achref EL MOUELHI c©

Requetes simples COUNT

SQL

Pour modifier le nom d’une colonne dans l’affichage du resultat

SELECT COUNT( distinct(ville)) as nombre_villeFROM personne;

Le resultat

+--------------+| nombre_ville |+--------------+| 3 |+--------------+

H & H: Research and Training 16 / 57

Page 26: Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500 Citroen C4 2015 4 600 Ford Kuga 2019 700 Fiat punto 2008 5 immatriculation : cl´e

c© Achref EL MOUELHI c©

Requetes simples WHERE

SQL

Pour selectionner les personnes dont la ville = ’Marseille’

SELECT *FROM personneWHERE ville = ’Marseille’;

Le resultat

+-----+---------+---------+---------+-----------+| num | nom | prenom | salaire | ville |+-----+---------+---------+---------+-----------+| 1 | Cohen | Sophie | 2000 | Marseille || 2 | Leberre | Bernard | 1500 | Marseille |+-----+---------+---------+---------+-----------+

H & H: Research and Training 17 / 57

Page 27: Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500 Citroen C4 2015 4 600 Ford Kuga 2019 700 Fiat punto 2008 5 immatriculation : cl´e

c© Achref EL MOUELHI c©

Requetes simples WHERE

SQL

Il est possible de definir plusieurs conditions en utilisant les operateurslogiques

and

or

!

H & H: Research and Training 18 / 57

Page 28: Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500 Citroen C4 2015 4 600 Ford Kuga 2019 700 Fiat punto 2008 5 immatriculation : cl´e

c© Achref EL MOUELHI c©

Requetes simples WHERE

SQL

Exercice 1

Ecrire une requete SQL qui permet de selectionner les personnes quihabitent Marseille ou Lyon.

Exercice 2

Ecrire une requete SQL qui permet de selectionner les personnes dontle salaire est compris entre 2000 et 3000.

H & H: Research and Training 19 / 57

Page 29: Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500 Citroen C4 2015 4 600 Ford Kuga 2019 700 Fiat punto 2008 5 immatriculation : cl´e

c© Achref EL MOUELHI c©

Requetes simples WHERE

SQL

Exercice 1

Ecrire une requete SQL qui permet de selectionner les personnes quihabitent Marseille ou Lyon.

Exercice 2

Ecrire une requete SQL qui permet de selectionner les personnes dontle salaire est compris entre 2000 et 3000.

H & H: Research and Training 19 / 57

Page 30: Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500 Citroen C4 2015 4 600 Ford Kuga 2019 700 Fiat punto 2008 5 immatriculation : cl´e

c© Achref EL MOUELHI c©

Requetes simples BETWEEN

SQL

Pour l’exercice 2, on peut aussi utiliser between et and

SELECT *FROM personneWHERE salaire BETWEEN 2000 AND 3000;

Le resultat

+-----+-------+--------+---------+-----------+| num | nom | prenom | salaire | ville |+-----+-------+--------+---------+-----------+| 1 | Cohen | Sophie | 2000 | Marseille || 4 | Hadad | Karim | 2500 | Paris || 5 | Wick | John | 3000 | Paris |+-----+-------+--------+---------+-----------+

H & H: Research and Training 20 / 57

Page 31: Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500 Citroen C4 2015 4 600 Ford Kuga 2019 700 Fiat punto 2008 5 immatriculation : cl´e

c© Achref EL MOUELHI c©

Requetes simples IN

SQL

Pour selectionner les personnes ayant un salaire = 2000 ou 3000

SELECT *FROM personneWHERE salaire IN (2000, 3000);

Le resultat

+-----+-------+--------+---------+-----------+| num | nom | prenom | salaire | ville |+-----+-------+--------+---------+-----------+| 1 | Cohen | Sophie | 2000 | Marseille || 5 | Wick | John | 3000 | Paris |+-----+-------+--------+---------+-----------+

H & H: Research and Training 21 / 57

Page 32: Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500 Citroen C4 2015 4 600 Ford Kuga 2019 700 Fiat punto 2008 5 immatriculation : cl´e

c© Achref EL MOUELHI c©

Requetes simples IN

SQL

Exercice 3

Ecrire une requete SQL qui permet de selectionner les personnes quihabitent Marseille et dont le salaire est soit inferieur a 2000 soitsuperieur a 2500.

H & H: Research and Training 22 / 57

Page 33: Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500 Citroen C4 2015 4 600 Ford Kuga 2019 700 Fiat punto 2008 5 immatriculation : cl´e

c© Achref EL MOUELHI c©

Requetes simples NOT

SQL

Pour l’exercice 3, on peut aussi utiliser not et between

SELECT *FROM personneWHERE ville = ’Marseille’AND salaire NOT BETWEEN 2000 AND 2500;

Le resultat

+-----+---------+---------+---------+-----------+| num | nom | prenom | salaire | ville |+-----+---------+---------+---------+-----------+| 2 | Leberre | Bernard | 1500 | Marseille |+-----+---------+---------+---------+-----------+

H & H: Research and Training 23 / 57

Page 34: Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500 Citroen C4 2015 4 600 Ford Kuga 2019 700 Fiat punto 2008 5 immatriculation : cl´e

c© Achref EL MOUELHI c©

Requetes simples LIKE

SQLPour selectionner les personnes dont le nom de la ville contient lecaractere a

SELECT *FROM personneWHERE ville like ’%a%’;

Le resultat

+-----+---------+---------+---------+-----------+| num | nom | prenom | salaire | ville |+-----+---------+---------+---------+-----------+| 1 | Cohen | Sophie | 2000 | Marseille || 2 | Leberre | Bernard | 1500 | Marseille || 4 | Hadad | Karim | 2500 | Paris || 5 | Wick | John | 3000 | Paris |+-----+---------+---------+---------+-----------+

H & H: Research and Training 24 / 57

Page 35: Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500 Citroen C4 2015 4 600 Ford Kuga 2019 700 Fiat punto 2008 5 immatriculation : cl´e

c© Achref EL MOUELHI c©

Requetes simples LIKE

SQL

Remarque

% : designe 0, 1 ou plusieurs classes

: designe un seul caractere

H & H: Research and Training 25 / 57

Page 36: Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500 Citroen C4 2015 4 600 Ford Kuga 2019 700 Fiat punto 2008 5 immatriculation : cl´e

c© Achref EL MOUELHI c©

Requetes simples IS

SQLPour selectionner les vehicules dont le numero du proprietaire est non-nul

SELECT *FROM vehiculeWHERE nump IS NOT NULL;

Le resultat

+-----------------+---------+--------+-------+------+| immatriculation | marque | modele | annee | nump |+-----------------+---------+--------+-------+------+| 100 | Peugeot | 5008 | 2018 | 5 || 200 | Renault | clio | 2000 | 4 || 300 | Ford | fiesta | 2010 | 1 || 400 | Peugeot | 106 | 2002 | 3 || 500 | Citroen | C4 | 2015 | 4 || 700 | Fiat | punto | 2008 | 5 |+-----------------+---------+--------+-------+------+

H & H: Research and Training 26 / 57

Page 37: Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500 Citroen C4 2015 4 600 Ford Kuga 2019 700 Fiat punto 2008 5 immatriculation : cl´e

c© Achref EL MOUELHI c©

Requetes simples IFNULL

SQLPour remplacer les valeurs nulles par une autre valeur, on peut utiliser lafonction ifnull()

SELECT marque, IFNULL(nump,’pas de proprietaire’) AS proprietaire

FROM vehicule;

Le resultat

+---------+---------------------+| marque | proprietaire |+---------+---------------------+| Peugeot | 5 || Renault | 4 || Ford | 1 || Peugeot | 3 || Citroen | 4 || Ford | pas de proprietaire || Fiat | 5 |+---------+---------------------+

H & H: Research and Training 27 / 57

Page 38: Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500 Citroen C4 2015 4 600 Ford Kuga 2019 700 Fiat punto 2008 5 immatriculation : cl´e

c© Achref EL MOUELHI c©

Requetes simples ORDER BY

SQLPour ordonner le resultat selon le numero du proprietaire

SELECT *FROM vehiculeWHERE nump IS NOT NULLORDER BY nump;

Le resultat

+-----------------+---------+--------+-------+------+| immatriculation | marque | modele | annee | nump |+-----------------+---------+--------+-------+------+| 300 | Ford | fiesta | 2010 | 1 || 400 | Peugeot | 106 | 2002 | 3 || 200 | Renault | clio | 2000 | 4 || 500 | Citroen | C4 | 2015 | 4 || 100 | Peugeot | 5008 | 2018 | 5 || 700 | Fiat | punto | 2008 | 5 |+-----------------+---------+--------+-------+------+

H & H: Research and Training 28 / 57

Page 39: Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500 Citroen C4 2015 4 600 Ford Kuga 2019 700 Fiat punto 2008 5 immatriculation : cl´e

c© Achref EL MOUELHI c©

Requetes simples GROUP BY

SQLPour compter le nombre de vehicule pour chaque personne, il faut lesregrouper et utiliser une fonction d’agregation

SELECT nump, COUNT( *) AS nombre_vehiculeFROM vehiculeWHERE nump is not nullGROUP BY nump;

Le resultat

+------+-----------------+| nump | nombre_vehicule |+------+-----------------+| 1 | 1 || 3 | 1 || 4 | 2 || 5 | 2 |+------+-----------------+

H & H: Research and Training 29 / 57

Page 40: Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500 Citroen C4 2015 4 600 Ford Kuga 2019 700 Fiat punto 2008 5 immatriculation : cl´e

c© Achref EL MOUELHI c©

Requetes simples HAVING

SQLPour filtrer les resultats de la fonction d’agregation

SELECT nump, COUNT( *) as nombre_vehiculeFROM vehiculeWHERE nump is not nullgroup by numpHAVING nombre_vehicule > 1;

Le resultat

+------+-----------------+| nump | nombre_vehicule |+------+-----------------+| 4 | 2 || 5 | 2 |+------+-----------------+

H & H: Research and Training 30 / 57

Page 41: Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500 Citroen C4 2015 4 600 Ford Kuga 2019 700 Fiat punto 2008 5 immatriculation : cl´e

c© Achref EL MOUELHI c©

Requetes simples HAVING

SQLFonctions d’agregation

max

min

count

sum

avg

Remarques

Imbriquer les fonctions d’agregation n’est pas possible.

distinct n’est pas une fonction d’agregation.

Pas d’espace entre la fonction d’agregation et la parenthese ouvrante(par exemple : max(...))

H & H: Research and Training 31 / 57

Page 42: Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500 Citroen C4 2015 4 600 Ford Kuga 2019 700 Fiat punto 2008 5 immatriculation : cl´e

c© Achref EL MOUELHI c©

Requetes simples HAVING

SQLFonctions d’agregation

max

min

count

sum

avg

Remarques

Imbriquer les fonctions d’agregation n’est pas possible.

distinct n’est pas une fonction d’agregation.

Pas d’espace entre la fonction d’agregation et la parenthese ouvrante(par exemple : max(...))

H & H: Research and Training 31 / 57

Page 43: Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500 Citroen C4 2015 4 600 Ford Kuga 2019 700 Fiat punto 2008 5 immatriculation : cl´e

c© Achref EL MOUELHI c©

Requetes simples HAVING

SQL

Exercice 4

Ecrire une requete SQL qui permet de compter la somme des salairespar ville

Exercice 5

Ecrire une requete SQL qui permet de selectionner les numeros depersonne qui ont un vehicule de marque Renault ou Citroen

H & H: Research and Training 32 / 57

Page 44: Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500 Citroen C4 2015 4 600 Ford Kuga 2019 700 Fiat punto 2008 5 immatriculation : cl´e

c© Achref EL MOUELHI c©

Requetes simples HAVING

SQL

Exercice 4

Ecrire une requete SQL qui permet de compter la somme des salairespar ville

Exercice 5

Ecrire une requete SQL qui permet de selectionner les numeros depersonne qui ont un vehicule de marque Renault ou Citroen

H & H: Research and Training 32 / 57

Page 45: Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500 Citroen C4 2015 4 600 Ford Kuga 2019 700 Fiat punto 2008 5 immatriculation : cl´e

c© Achref EL MOUELHI c©

Requetes simples UNION

SQLPour repondre a la question de l’exercice 5, on peut utiliser union

SELECT numpFROM vehiculeWHERE marque = ’Renault’UNIONSELECT numpFROM vehiculeWHERE marque = ’Citroen’;

Le resultat

+------+| nump |+------+| 4 |+------+

H & H: Research and Training 33 / 57

Page 46: Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500 Citroen C4 2015 4 600 Ford Kuga 2019 700 Fiat punto 2008 5 immatriculation : cl´e

c© Achref EL MOUELHI c©

Requetes simples UNION

SQL

Operations sur les ensembles

union

intersect

except

minus

Les trois dernieres operations ne fonctionnent pas avec MySQL.Il est cependant possible de les remplacer par les requetesimbriquees.

H & H: Research and Training 34 / 57

Page 47: Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500 Citroen C4 2015 4 600 Ford Kuga 2019 700 Fiat punto 2008 5 immatriculation : cl´e

c© Achref EL MOUELHI c©

Requetes simples UNION

SQL

Operations sur les ensembles

union

intersect

except

minus

Les trois dernieres operations ne fonctionnent pas avec MySQL.Il est cependant possible de les remplacer par les requetesimbriquees.

H & H: Research and Training 34 / 57

Page 48: Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500 Citroen C4 2015 4 600 Ford Kuga 2019 700 Fiat punto 2008 5 immatriculation : cl´e

c© Achref EL MOUELHI c©

Jointure

SQL

Remarques

Pour les proprietaires des vehicules, on affichait chaque fois lenumero.

Pour l’utilisateur, il serait mieux de connaıtre les nom et prenomque le numero.

Les nom et prenom sont dans la table personne.

Solution

Les jointures

H & H: Research and Training 35 / 57

Page 49: Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500 Citroen C4 2015 4 600 Ford Kuga 2019 700 Fiat punto 2008 5 immatriculation : cl´e

c© Achref EL MOUELHI c©

Jointure

SQL

Remarques

Pour les proprietaires des vehicules, on affichait chaque fois lenumero.

Pour l’utilisateur, il serait mieux de connaıtre les nom et prenomque le numero.

Les nom et prenom sont dans la table personne.

Solution

Les jointures

H & H: Research and Training 35 / 57

Page 50: Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500 Citroen C4 2015 4 600 Ford Kuga 2019 700 Fiat punto 2008 5 immatriculation : cl´e

c© Achref EL MOUELHI c©

Jointure

SQL

Deux types de jointure

Implicite : sans le mot-cle join

Explicite : avec le mot-cle join

H & H: Research and Training 36 / 57

Page 51: Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500 Citroen C4 2015 4 600 Ford Kuga 2019 700 Fiat punto 2008 5 immatriculation : cl´e

c© Achref EL MOUELHI c©

Jointure Jointure implicite

SQLPour selectionner toutes les donnees de la table personne

SELECT nom, prenom, ville, marque, modeleFROM personne, vehiculeWHERE personne.num = vehicule.nump;

Le resultat

+---------+--------+-----------+---------+--------+| nom | prenom | ville | marque | modele |+---------+--------+-----------+---------+--------+| Cohen | Sophie | Marseille | Ford | fiesta || Benamar | Pierre | Lyon | Peugeot | 106 || Hadad | Karim | Paris | Renault | clio || Hadad | Karim | Paris | Citroen | C4 || Wick | John | Paris | Peugeot | 5008 || Wick | John | Paris | Fiat | punto |+---------+--------+-----------+---------+--------+

H & H: Research and Training 37 / 57

Page 52: Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500 Citroen C4 2015 4 600 Ford Kuga 2019 700 Fiat punto 2008 5 immatriculation : cl´e

c© Achref EL MOUELHI c©

Jointure Jointure implicite

SQL

Remarques

La jointure se fait, generalement, sur une colonne commune entredeux tables (cle primaire dans une premiere table qui estetrangere dans une deuxieme).

En cas d’ambiguıte, c’est-a-dire, si deux colonnes portent lememe nom, il faut les prefixer par le nom de leurs tablesrespectives.

Il est aussi possible de definir et d’utiliser des alias.

Les personnes n’ont pas de vehicules et les vehicules sontproprietaires n’apparaissent pas dans le resultat.

H & H: Research and Training 38 / 57

Page 53: Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500 Citroen C4 2015 4 600 Ford Kuga 2019 700 Fiat punto 2008 5 immatriculation : cl´e

c© Achref EL MOUELHI c©

Jointure Jointure implicite

SQLOn peut aussi utiliser les alias

SELECT nom, prenom, ville, marque, modeleFROM personne p, vehicule vWHERE p.num = v.nump;

Le resultat est le meme

+---------+--------+-----------+---------+--------+| nom | prenom | ville | marque | modele |+---------+--------+-----------+---------+--------+| Cohen | Sophie | Marseille | Ford | fiesta || Benamar | Pierre | Lyon | Peugeot | 106 || Hadad | Karim | Paris | Renault | clio || Hadad | Karim | Paris | Citroen | C4 || Wick | John | Paris | Peugeot | 5008 || Wick | John | Paris | Fiat | punto |+---------+--------+-----------+---------+--------+

H & H: Research and Training 39 / 57

Page 54: Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500 Citroen C4 2015 4 600 Ford Kuga 2019 700 Fiat punto 2008 5 immatriculation : cl´e

c© Achref EL MOUELHI c©

Jointure Jointure implicite

SQLEn l’absence d’ambiguıte, on peut aussi ecrire

SELECT nom, prenom, ville, marque, modeleFROM personne, vehiculeWHERE num = nump;

Le resultat est le meme

+---------+--------+-----------+---------+--------+| nom | prenom | ville | marque | modele |+---------+--------+-----------+---------+--------+| Cohen | Sophie | Marseille | Ford | fiesta || Benamar | Pierre | Lyon | Peugeot | 106 || Hadad | Karim | Paris | Renault | clio || Hadad | Karim | Paris | Citroen | C4 || Wick | John | Paris | Peugeot | 5008 || Wick | John | Paris | Fiat | punto |+---------+--------+-----------+---------+--------+

H & H: Research and Training 40 / 57

Page 55: Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500 Citroen C4 2015 4 600 Ford Kuga 2019 700 Fiat punto 2008 5 immatriculation : cl´e

c© Achref EL MOUELHI c©

Jointure Jointure explicite

SQL

Plusieurs syntaxes

JOIN ... ON : exactement comme la jointure implicite

LEFT JOIN ... ON : jointure gauche

RIGHT JOIN ... ON : jointure droite

FULL JOIN ... ON : jointures droite + gauche (ne fonctionnepas avec MySQL)

...

H & H: Research and Training 41 / 57

Page 56: Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500 Citroen C4 2015 4 600 Ford Kuga 2019 700 Fiat punto 2008 5 immatriculation : cl´e

c© Achref EL MOUELHI c©

Jointure Jointure explicite

SQLOn peut utiliser le mot-cle join et indiquer les colonnes sur lesquelles on fait lajointure

SELECT nom, prenom, ville, marque, modeleFROM personneJOIN vehicule ON num = nump;

Le resultat est le meme

+---------+--------+-----------+---------+--------+| nom | prenom | ville | marque | modele |+---------+--------+-----------+---------+--------+| Cohen | Sophie | Marseille | Ford | fiesta || Benamar | Pierre | Lyon | Peugeot | 106 || Hadad | Karim | Paris | Renault | clio || Hadad | Karim | Paris | Citroen | C4 || Wick | John | Paris | Peugeot | 5008 || Wick | John | Paris | Fiat | punto |+---------+--------+-----------+---------+--------+

H & H: Research and Training 42 / 57

Page 57: Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500 Citroen C4 2015 4 600 Ford Kuga 2019 700 Fiat punto 2008 5 immatriculation : cl´e

c© Achref EL MOUELHI c©

Jointure Jointure explicite

SQLPour afficher aussi les personnes qui n’ont pas de voiture, on peut ecrire

SELECT nom, prenom, ville, marque, modeleFROM personneLEFT JOIN vehicule ON num = nump;

Le resultat

+---------+---------+-----------+---------+--------+| nom | prenom | ville | marque | modele |+---------+---------+-----------+---------+--------+| Cohen | Sophie | Marseille | Ford | fiesta || Leberre | Bernard | Marseille | NULL | NULL || Benamar | Pierre | Lyon | Peugeot | 106 || Hadad | Karim | Paris | Renault | clio || Hadad | Karim | Paris | Citroen | C4 || Wick | John | Paris | Peugeot | 5008 || Wick | John | Paris | Fiat | punto |+---------+---------+-----------+---------+--------+

H & H: Research and Training 43 / 57

Page 58: Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500 Citroen C4 2015 4 600 Ford Kuga 2019 700 Fiat punto 2008 5 immatriculation : cl´e

c© Achref EL MOUELHI c©

Jointure Jointure explicite

SQLPour afficher les vehicules qui n’ont pas de proprietaire, on peut ecrire

SELECT nom, prenom, ville, marque, modeleFROM personneRIGHT JOIN vehicule ON num = nump;

Le resultat

+---------+--------+-----------+---------+--------+| nom | prenom | ville | marque | modele |+---------+--------+-----------+---------+--------+| Cohen | Sophie | Marseille | Ford | fiesta || Benamar | Pierre | Lyon | Peugeot | 106 || Hadad | Karim | Paris | Renault | clio || Hadad | Karim | Paris | Citroen | C4 || Wick | John | Paris | Peugeot | 5008 || Wick | John | Paris | Fiat | punto || NULL | NULL | NULL | Ford | Kuga |+---------+--------+-----------+---------+--------+

H & H: Research and Training 44 / 57

Page 59: Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500 Citroen C4 2015 4 600 Ford Kuga 2019 700 Fiat punto 2008 5 immatriculation : cl´e

c© Achref EL MOUELHI c©

Jointure Jointure explicite

SQL

Exercice 6

Ecrire une requete SQL qui permet d’afficher le resultat de la jointureentre personne et vehicule + les personnes n’ayant pas de voiture +les voitures n’ayant pas de vehicule (full join)

H & H: Research and Training 45 / 57

Page 60: Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500 Citroen C4 2015 4 600 Ford Kuga 2019 700 Fiat punto 2008 5 immatriculation : cl´e

c© Achref EL MOUELHI c©

Requetes imbriquees

SQL

Imbriquer les requetes

Avoir une requete dans la clause d’une autre.

Plusieurs niveaux d’imbrication

WHERE

FROM

HAVING

H & H: Research and Training 46 / 57

Page 61: Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500 Citroen C4 2015 4 600 Ford Kuga 2019 700 Fiat punto 2008 5 immatriculation : cl´e

c© Achref EL MOUELHI c©

Requetes imbriquees

SQL

Imbriquer les requetes

Avoir une requete dans la clause d’une autre.

Plusieurs niveaux d’imbrication

WHERE

FROM

HAVING

H & H: Research and Training 46 / 57

Page 62: Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500 Citroen C4 2015 4 600 Ford Kuga 2019 700 Fiat punto 2008 5 immatriculation : cl´e

c© Achref EL MOUELHI c©

Requetes imbriquees WHERE ... IN ... SELECT

SQL

Exercice 7

Ecrire une requete SQL qui permet de selectionner les personnes quiont a la fois un vehicule Fiat et un Peugeot

H & H: Research and Training 47 / 57

Page 63: Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500 Citroen C4 2015 4 600 Ford Kuga 2019 700 Fiat punto 2008 5 immatriculation : cl´e

c© Achref EL MOUELHI c©

Requetes imbriquees WHERE ... IN ... SELECT

SQLPour repondre a la question de l’exercice 7, on peut utiliser les requetesimbriquees

SELECT nom, prenomFROM personne, vehiculeWHERE nump = numAND marque = ’Fiat’AND num IN (SELECT nump

FROM vehiculeWHERE marque = ’Peugeot’);

Le resultat

+------+--------+| nom | prenom |+------+--------+| Wick | John |+------+--------+

H & H: Research and Training 48 / 57

Page 64: Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500 Citroen C4 2015 4 600 Ford Kuga 2019 700 Fiat punto 2008 5 immatriculation : cl´e

c© Achref EL MOUELHI c©

Requetes imbriquees WHERE ... ANY ... SELECT

SQLLa meme requete peut etre reecrite avec = any

SELECT nom, prenomFROM personne, vehiculeWHERE nump = numAND marque = ’Fiat’AND num = ANY (SELECT nump

FROM vehiculeWHERE marque = ’Peugeot’);

Le resultat

+------+--------+| nom | prenom |+------+--------+| Wick | John |+------+--------+

H & H: Research and Training 49 / 57

Page 65: Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500 Citroen C4 2015 4 600 Ford Kuga 2019 700 Fiat punto 2008 5 immatriculation : cl´e

c© Achref EL MOUELHI c©

Requetes imbriquees WHERE ... ANY ... SELECT

SQL

Pour les requetes imbriquees, on peut utiliser

in

all

any

Avec all et in, on peut utiliser les operateurs de comparaisonsuivants

=, <, >, <>, !=,<=, >=...

H & H: Research and Training 50 / 57

Page 66: Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500 Citroen C4 2015 4 600 Ford Kuga 2019 700 Fiat punto 2008 5 immatriculation : cl´e

c© Achref EL MOUELHI c©

Requetes imbriquees WHERE ... ANY ... SELECT

SQL

Pour les requetes imbriquees, on peut utiliser

in

all

any

Avec all et in, on peut utiliser les operateurs de comparaisonsuivants

=, <, >, <>, !=,<=, >=...

H & H: Research and Training 50 / 57

Page 67: Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500 Citroen C4 2015 4 600 Ford Kuga 2019 700 Fiat punto 2008 5 immatriculation : cl´e

c© Achref EL MOUELHI c©

Requetes imbriquees WHERE ... ANY ... SELECT

SQL

Exercice 8

Ecrire une requete SQL qui permet de selectionner les marques devoiture qui appartiennent a des personnes ayant deux vehicules etdont la ville = Paris.

H & H: Research and Training 51 / 57

Page 68: Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500 Citroen C4 2015 4 600 Ford Kuga 2019 700 Fiat punto 2008 5 immatriculation : cl´e

c© Achref EL MOUELHI c©

Requetes imbriquees WHERE EXISTS ... SELECT

SQLLa meme requete peut etre reecrite avec exists qui retourne un booleen

SELECT nom, prenomFROM personne p, vehicule vWHERE nump = numAND marque = ’Fiat’AND EXISTS (SELECT *

FROM vehicule v2WHERE marque = ’Peugeot’AND v.nump = v2.nump);

Le resultat est le meme

+------+--------+| nom | prenom |+------+--------+| Wick | John |+------+--------+

H & H: Research and Training 52 / 57

Page 69: Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500 Citroen C4 2015 4 600 Ford Kuga 2019 700 Fiat punto 2008 5 immatriculation : cl´e

c© Achref EL MOUELHI c©

Requetes imbriquees WHERE EXISTS ... SELECT

SQL

Pour les requetes imbriquees, il est aussi possible d’utiliser la negation

NOT IN

NOT EXISTS

...

H & H: Research and Training 53 / 57

Page 70: Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500 Citroen C4 2015 4 600 Ford Kuga 2019 700 Fiat punto 2008 5 immatriculation : cl´e

c© Achref EL MOUELHI c©

Requetes imbriquees FROM ... SELECT ... AS

SQL

On peut aussi imbriquer des requetes dans la clause from

SELECT nom, prenomFROM personne p, (SELECT nump FROM vehicule WHERE marque = ’

Peugeot’) AS peugeotWHERE peugeot.nump = p.num;

Le resultat

+---------+--------+| nom | prenom |+---------+--------+| Benamar | Pierre || Wick | John |+---------+--------+

H & H: Research and Training 54 / 57

Page 71: Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500 Citroen C4 2015 4 600 Ford Kuga 2019 700 Fiat punto 2008 5 immatriculation : cl´e

c© Achref EL MOUELHI c©

Requetes imbriquees FROM ... SELECT ... AS

SQLExercice 9

Ecrire une requete SQL qui permet de selectionner les marques de voiturequi sont a la fois a Paris et a Lyon

Exercice 10

Ecrire une requete SQL qui permet de selectionner les personnes qui ont unevoiture Peugeot mais pas Fiat

Exercice 11

Ecrire une requete SQL qui permet de selectionner les personnes qui ont leplus grand nombre de voitures

H & H: Research and Training 55 / 57

Page 72: Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500 Citroen C4 2015 4 600 Ford Kuga 2019 700 Fiat punto 2008 5 immatriculation : cl´e

c© Achref EL MOUELHI c©

Requetes imbriquees FROM ... SELECT ... AS

SQLExercice 9

Ecrire une requete SQL qui permet de selectionner les marques de voiturequi sont a la fois a Paris et a Lyon

Exercice 10

Ecrire une requete SQL qui permet de selectionner les personnes qui ont unevoiture Peugeot mais pas Fiat

Exercice 11

Ecrire une requete SQL qui permet de selectionner les personnes qui ont leplus grand nombre de voitures

H & H: Research and Training 55 / 57

Page 73: Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500 Citroen C4 2015 4 600 Ford Kuga 2019 700 Fiat punto 2008 5 immatriculation : cl´e

c© Achref EL MOUELHI c©

Requetes imbriquees FROM ... SELECT ... AS

SQLExercice 9

Ecrire une requete SQL qui permet de selectionner les marques de voiturequi sont a la fois a Paris et a Lyon

Exercice 10

Ecrire une requete SQL qui permet de selectionner les personnes qui ont unevoiture Peugeot mais pas Fiat

Exercice 11

Ecrire une requete SQL qui permet de selectionner les personnes qui ont leplus grand nombre de voitures

H & H: Research and Training 55 / 57

Page 74: Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500 Citroen C4 2015 4 600 Ford Kuga 2019 700 Fiat punto 2008 5 immatriculation : cl´e

c© Achref EL MOUELHI c©

Fonctions sur les chaınes de caractere

SQL

Plusieurs fonctions predefinies

CONCAT

TRIM

LENGTH

SUBSTRING

UPPER

LOWER

...

H & H: Research and Training 56 / 57

Page 75: Achref El Mouelhi - LIS lab · 2020. 7. 26. · 300 Ford fiesta 2010 1 400 Peugeot 106 2002 3 500 Citroen C4 2015 4 600 Ford Kuga 2019 700 Fiat punto 2008 5 immatriculation : cl´e

c© Achref EL MOUELHI c©

Fonctions sur les chaınes de caractere

SQLExemple avec concat et upper

SELECT CONCAT(UPPER(nom), prenom) AS nom_completFROM personne;

Le resultat

+----------------+| nom_complet |+----------------+| COHENSophie || LEBERREBernard || BENAMARPierre || HADADKarim || WICKJohn |+----------------+

H & H: Research and Training 57 / 57