SQL Vue d'ensemble


Exemple

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:

Exemples de tableaux

SÉLECTIONNER

L'opérateur select renvoie un sous-ensemble de la table principale.
sélectionnez <table> <condition>

Par exemple, examinez l'expression:

sélectionnez Personnes DepartmentID = 2

Cela peut être écrit comme:
entrer la description de l'image ici

Cela se traduira par une table dont les enregistrements comprennent tous les enregistrements de la table People où la valeur DepartmentID est égale à 2:
entrer la description de l'image ici

Les conditions peuvent également être jointes pour restreindre davantage l'expression:

sélectionnez Personnes StartYear> 2005 et DepartmentID = 2

se traduira par le tableau suivant:
entrer la description de l'image ici

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 peut être écrit comme:
entrer la description de l'image ici

Cela se traduira par une table comprenant les valeurs distinctes contenues dans le champ StartYear de la table People .
entrer la description de l'image ici

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:
entrer la description de l'image ici
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 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.
entrer la description de l'image ici

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 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> <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 DepartmentID = ID

entrer la description de l'image ici

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 DepartmentID = ID donnant A
sélectionnez A 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 DepartmentID = ID) StartYear = 2005 et Dept = 'Production') sur PersonName en donnant C

Cela se traduira par cette table:
entrer la description de l'image ici

ALIAS

DIVISER

SYNDICAT

INTERSECTION

DIFFÉRENCE

UPDATE (: =)

FOIS