SQL
Algèbre relationnelle
Recherche…
Vue d'ensemble
L'algèbre relationnelle n'est pas un langage SQL complet, mais plutôt un moyen d'acquérir une compréhension théorique du traitement relationnel. En tant que tel, il ne devrait pas faire référence à des entités physiques telles que des tables, des enregistrements et des champs. il devrait faire référence à des constructions abstraites telles que des relations, des tuples et des attributs. En disant cela, je n'utiliserai pas les termes académiques dans ce document et je m'en tiendrai aux termes profanes plus connus - tableaux, enregistrements et champs.
Quelques règles de l'algèbre relationnelle avant que nous commencions:
- Les opérateurs utilisés dans l'algèbre relationnelle travaillent sur des tables entières plutôt que sur des enregistrements individuels.
- Le résultat d'une expression relationnelle sera toujours une table (cela s'appelle la propriété de fermeture ).
Tout au long de ce document, je ferai référence aux deux tableaux suivants:
SÉLECTIONNER
L'opérateur select renvoie un sous-ensemble de la table principale.
sélectionnez <table> où <condition>
Par exemple, examinez l'expression:
sélectionnez Personnes où DepartmentID = 2
Cela se traduira par une table dont les enregistrements comprennent tous les enregistrements de la table People où la valeur DepartmentID est égale à 2:
Les conditions peuvent également être jointes pour restreindre davantage l'expression:
sélectionnez Personnes où StartYear> 2005 et DepartmentID = 2
se traduira par le tableau suivant:
PROJET
L'opérateur de projet renverra des valeurs de champ distinctes à partir d'une table.
projet <table> sur <liste de champs>
Par exemple, examinez l'expression suivante:
projet People over StartYear
Cela se traduira par une table comprenant les valeurs distinctes contenues dans le champ StartYear de la table People .
Les valeurs en double sont supprimées de la table résultante en raison de la propriété de fermeture créant une table relationnelle: tous les enregistrements d'une table relationnelle doivent être distincts.
Si la liste de champs comprend plusieurs champs, la table résultante est une version distincte de ces champs.
projet People over StartYear, DepartmentID retournera:
Un enregistrement est supprimé en raison de la duplication de 2006 StartYear et 1 DepartmentID .
DONNANT
Les expressions relationnelles peuvent être chaînées en nommant les expressions individuelles à l'aide du mot-clé donnant ou en intégrant une expression dans une autre.
<expression de l'algèbre relationnelle> donnant <nom de l'alias>
Par exemple, considérez les expressions suivantes:
sélectionnez Personnes où DepartmentID = 2 donne A
projet A sur PersonName donnant B
Cela se traduira par la table B ci-dessous, la table A étant le résultat de la première expression.
La première expression est évaluée et le tableau résultant reçoit l'alias A. Cette table est ensuite utilisée dans la seconde expression pour donner la table finale avec un alias de B.
Une autre façon d'écrire cette expression consiste à remplacer le nom d'alias de la table dans la seconde expression par le texte entier de la première expression entre crochets:
projet ( sélectionnez People où DepartmentID = 2) sur PersonName en donnant B
Ceci est appelé une expression imbriquée .
NATURAL JOIN
Une jointure naturelle assemble deux tables en utilisant un champ commun partagé entre les tables.
joindre <table 1> et <table 2> où <champ 1> = <champ 2>
en supposant que <champ 1> est dans <table 1> et que <champ 2> est dans <table 2>.
Par exemple, l'expression de jointure suivante joint les personnes et les départements en fonction des colonnes DepartmentID et ID des tables respectives:
rejoindre les personnes et les départements où DepartmentID = ID
Notez que seul le DepartmentID de la table People est affiché et non l' ID de la table Department . Un seul des champs comparés doit être affiché, ce qui correspond généralement au nom de la première table de l'opération de jointure.
Bien que cela ne soit pas illustré dans cet exemple, il est possible que la réunion de tables génère deux champs ayant le même en-tête. Par exemple, si j'avais utilisé l'en-tête Nom pour identifier les champs PersonName et Dept (c'est-à-dire pour identifier le nom de la personne et le nom du service). Lorsque cette situation se présente, nous utilisons le nom de la table pour qualifier les noms de champs en utilisant la notation par points: People.Name et Departments.Name
La jointure combinée avec select et project peut être utilisée ensemble pour extraire des informations:
rejoindre les personnes et les départements où DepartmentID = ID donnant A
sélectionnez A où StartYear = 2005 et Dept = 'Production' donnant B
projet B sur PersonName en donnant C
ou comme expression combinée:
projet ( sélectionnez ( joindre les personnes et les départements où DepartmentID = ID) où StartYear = 2005 et Dept = 'Production') sur PersonName en donnant C
Cela se traduira par cette table: