Ce chapitre est une combinaison des concepts vus précédemment.

Database schema

Figure 10.1 : schéma de base de données

1. Combinaison d’alias et d’ORDER BY

Supposons que nous aimerions obtenir les données à propos des employés et du salaire mensuel de chacun. Nous aimerions obtenir les données dans l’ordre croissant par salaire mensuel.

SELECT Last_name AS LastName, First_name AS FirstName, Salary/12 AS MonthlySalary
FROM Employee
ORDER BY MonthlySalary ASC

On obtient le tableau suivant.

{{h}}
{{r}}

2. Ensemble complémentaire

Supposons que nous aimerions obtenir les données à propos des projets dans lesquels l’employé Ryu Tanaka n’est pas impliqué. Comme ce genre de requêtes pose parfois des problèmes aux étudiants, nous allons détailler comment les appréhender. Certains pourraient proposer la requête suivante. Or celle-ci est fausse !

SELECT p.name AS Projet
FROM Involvement AS inv, Project AS p, Employee AS emp
WHERE inv.Project_id = p.ID AND inv.Employee_id = emp.ID
AND emp.First_name <> 'Ryu' AND emp.Last_name <> 'Tanaka'

On obtient le tableau suivant.

{{h}}
{{r}}

Pourquoi, cette requête est-elle fausse ? Ceci vient du fait de la table Involvement. Cette table est une table spéciale, appelée table liante. Elle joue le rôle de connecteur entre les tables Employee et Project. Plusieurs lignes de cette table peuvent donc concerner un même projet. La Figure 10.2 illustre la construction de la requête.

multiple join in SQL

Figure 10.2 : construction d’une jointure multiple SQL

Changeons d’approche. Créons d’abord l’ensemble des projets auxquels l’employé en question participe avec une sous-requête. Enlevons cet ensemble de l’ensemble de tous des projets et obtenons ainsi l’ensemble complémentaire.

SELECT p.Name
FROM Project AS p
WHERE p.ID NOT IN (
	SELECT inv.project_id
	FROM Involvement AS inv, Employee AS emp
	WHERE inv.Employee_id = emp.ID
	AND emp.First_name = 'Ryu' AND emp.Last_name = 'Tanaka'
)

On obtient le tableau suivant.

{{h}}
{{r}}

Récap

Nous avons vu dans ce chapitre comment combiner ensemble les différents concepts vus dans les chapitres précédents.