Exemples
Exemple : Nom et Prénom des acteurs
SELECT nom, prenom
FROM acteur;
Algèbre :
\(\pi_{nom, prenom}(ACTEUR)\)
Calcul :
\(res=\{x_{nom}, x_{prenom} \mid \exists x_{id}, ACTEUR(x_{id}, x_{nom}, x_{prenom})\}\)
Exemple : Directeur du film numéro 42
Notons que nous utilisons la définition de la table Film telle qu'elle a été donnée au début de cette séquence : idfilm, titre, directeur, annee, titre_vo.
SELECT directeur
FROM film f
WHERE f.idfilm = 42
Algèbre :
\(\pi_{directeur}(\sigma_{idfilm = 42}(FILM))\)
Calcul :
\(res=\{x_{directeur} \mid \exists x_{titre},x_{annee},x_{titre\_vo}, FILM(42, x_{titre}, x_{directeur}, x_{annee}, x_{titre\_vo})\}\)
La clause FROM accepte en paramètre une liste de tables. La requête porte alors sur le produit cartésien de ces tables. Pour effectuer une jointure entre les tables, il convient d'utiliser les opérateurs de jointure du langage. Le mot-clé JOIN placé entre deux tables indique qu'il faut en faire la jointure. La condition de jointure est précisée avec le mot-clé ON. Une jointure naturelle (une jointure sur un attribut clé primaire, et l'autre attribut clé étrangère lié à cette clé primaire) s'exprime avec le mot-clé NATURAL JOIN.
Exemple : Titre d'un film avec la liste des identifiants de ses acteurs.
Dans le cas de l'algèbre, on utilise la jointure naturelle, c'est-à-dire que ce sont les attributs ayant le même nom dans les deux tables jointes qui sont choisis, et l'opérateur utilisé est l'égalité.
SELECT f.titre AS titre, jd.idacteur AS id
FROM film f JOIN jouedans jd ON f.idfilm = jd.idfilm;
Autre possibilité (équivalente) en utilisant le produit cartésien.
SELECT f.titre AS titre, jd.idacteur AS id
FROM film f , jouedans jd
WHERE f.idfilm = jd.idfilm;
Algèbre :
\(\pi_{titre, idacteur}(FILM \bowtie JOUEDANS)\)
ce qui signifie :
\(\pi_{titre, idacteur}(FILM \underset{FILM.idfilm = JOUEDANS.idfilm}{\bowtie} JOUEDANS)\)
Calcul :
\(res=\{titre, idacteur \mid \exists (idfilm, directeur, annee), FILM(idfilm, titre, directeur, annee)\wedge JOUEDANS(idfilm, idacteur)\)
La clause WHERE permet d'exprimer la sélection. SQL supporte des opérateurs de comparaison (<, <=, =, >=, >, <>), logiques (AND, OR), de test de valeur manquante (IS NULL, IS NOT NULL), de recherche textuelle (LIKE), de sélection d'intervalle (BETWEEN), de liste (IN), et d'imbrication de blocs (IN, EXIST, NOT EXIST, ALL, SOME, ANY).
Exemple : Titre des films datant d'avant 2000
SELECT titre FROM film
WHERE annee < 2000;
Algèbre :
\(\pi_{titre}(\sigma_{annee < 2000}(FILM))\)
Calcul :
\(res=\{titre \mid \exists (idfilm, directeur, annee),FILM(idfilm, titre, directeur, annee)\wedge (annee<2000)\}\)
Exemple : Titre et directeur des films produits entre 2003 et 2013 dont le titre commence par 'L'
SELECT titre, directeur FROM film
WHERE annee BETWEEN 2003 AND 2013
AND titre LIKE 'L%';
Algèbre :
\(\pi_{titre, directeur}(\sigma_{annee > 2013\>\wedge\>annee < 2000\>\wedge titre\>LIKE\>'L\%'}(FILM))\)
Calcul :
\(res=\{titre, directeur \mid \exists (idfilm, annee),FILM(idfilm, titre, directeur, annee)\wedge (annee>2000)\wedge (annee<2013)\}\)