8
votes

Représenter une sous-requête en algèbre relationnelle

Comment est-ce que je représente une sous-requête en relation d'algèbre? Dois-je mettre le nouveau sélection sous la condition de sélection précédente? XXX


0 commentaires

3 Réponses :


11
votes

Vous venez de réécrire cela comme un rejoindre .

Je ne sais pas dans quelle mesure la syntaxe que j'ai apprise pour l'algèbre relationnelle est tellement en mots.

  1. Prendre une projection de AnneNumber à partir de anotherck
  2. Renommer AnneNumber à partir du résultat de l'étape 1 comme numéro
  3. Natural Inscrivez-vous le résultat de l'étape 2 sur Collection
  4. Prendre une dernière projection de numéro à partir du résultat de l'étape 3

1 commentaires

Un pourrait réécrire cela comme une jointure :)



1
votes

6 commentaires

Vous devriez être un peu plus précis dans votre choix de mots. Si la correspondance peut être utilisée dans une clause WHERE (dans la manière dont vous avez décrit), alors cet opérateur doit renvoyer un booléen, puis le match ne peut pas être «un opérateur de semijoin», comme vous le demandez. Un opérateur de semijoin retourne une relation.


@Erwinsmout: Vous avez un point. L'utilisation du terme "opérateur relationnel" dans le contexte de SQL n'est jamais strictement correcte. Mais il est vrai que j'ai utilisé le terme opérateur trop lâchement ici. J'ai tenté une réécriture mais s'il vous plaît n'hésitez pas à modifier à votre propre satisfaction.


Si vous voyez à quel point SQL et RA sont graves, c'est vraiment étonnant que SQL puisse toujours prétendre être une mise en œuvre de RA, non? Ce qui m'étonne également, c'est comment il semble que ce qui semble être beaucoup de personnes qui veulent savoir comment réécrire SQL en termes de RA. J'aurais pensé que si SQL est une langue pour la mise en œuvre (/ SOLUTION / ...), RA serait en quelque sorte la langue de la spécification ... et une spécification a généralement la spécification avant que l'on ait la mise en œuvre ... ou a fait Cela me manque d'avoir changé pendant mes 5 années sur Mars?


@Erwinsmout: Peut-être que j'ai commencé cette tendance sur Stackoverflow? :) plus probablement peut-être que les gens lisent le même matériel que moi. Le livre récent de la date de la date SQL et relation relationnelle: comment Pour rédiger un code SQL précis , c'est que l'apprentissage de la part de ses activités devrait aider à écrire mieux SQL. Remarque La date pousse à la fois l'algèbre relationnelle et calcul ...


@Erwin Smout: ... Chapitre 10: "SQL était spécifiquement destiné à être différent de l'algèbre et de la calcul ... Cependant, il s'est avéré que certaines caractéristiques de l'algèbre et de la calcul étaient nécessaires après tout ... La situation actuelle est donc que certains aspects de SQL sont "comme une algèbre comme", certains sont "du calibre comme" et certains ne sont ni - avec la plus grande implication que la plupart des requêtes, des contraintes, etc., peut être exprimée en SQL du tout peut en fait être exprimé de différentes manières différentes ».


... même si je ne l'ai pas démarré, je suis d'accord des termes de l'algèbre - notamment "Division" et "Semijoin" - sont souvent enregistrés sur Stackoverflow en ce qui concerne SQL de nos jours, il est donc probablement temps de moi arrêter;)



0
votes

Selon Ce PDF, vous pouvez Convertissez facilement une sous-requête en une expression algébrique relationnelle.

Tout d'abord, vous devez convertir toute la requête du formulaire P>

PI[some-column-from-sub-query](
    SIGMA[extra-where-clause-if-needed 
        ^ some-column = some-column-from-sub-query
        ](RO[T1](R1) x RO[T2](R2) x ... x RO[t1](r1) x RO[t2](r2) x ...)
)


0 commentaires