2013-05-31 4 views
3

J'ai cette question.Comment convertir une commande Sql en algèbre relationnelle?

pour deux tables: tout d'abord, est employé: Employee(id, roomID) et seconde est: Room(roomID, roomName)

La question est: Combien d'employés travaillent dans chaque chambre.

Je peux le faire facilement dans SQL Langue:

select Room.roomID, COUNT(Employee.id) as NumofEmployee 
from Employee, Room 
where employee.roomID = Room.roomID 
group by Room.roomID 

La même question, mais l'écriture en langage algèbre relationnelle. Cette question me fait tellement mal à la tête, car je sais dans ce langage, juste avoir une opération simple: joinselectionprojectiondifference. Donc, beaucoup de commandes SQL je ne sais pas comment faire avec, par exemple: group by ou count.

Merci :)

+4

Ne pas écrire "' de l'employé, Room'" comme ça. C'est mauvais. Utilisez le mot clé JOIN: 'FROM Employee INNER JOIN Pièce ON employee.roomID = Room.roomID'. Ce n'est pas aussi important à ce stade, mais au fur et à mesure que vous commencez à créer des requêtes plus difficiles, cela fait une différence énorme. –

+0

@JoelCoehoorn pas que votre commentaire a fait quelque chose pour aider l'affiche du tout, quel raisonnement pouvez-vous citer pour cette déclaration? Je suis toujours sous l'impression que les programmeurs ne voulaient pas que vous le fassiez d'une certaine manière qu'ils ne permettent pas la construction? –

+0

La raison pour laquelle la syntaxe existe est historique. C'est de la norme ansi-89. ansi-92 et plus tard préfèrent utiliser le mot-clé join, et certaines normes récentes ont même déprécié l'ancienne syntaxe A, B dans certaines situations. –

Répondre

4

agrégation et les opérations de regroupement ne peuvent pas être construites à partir des opérations d'algèbre relationnelle de base. Vous devez définir vos propres opérateurs COUNT et GROUP BY pour effectuer cela.

Il existe de nombreuses extensions proposées à l'algèbre relationnelle de base que vous pourriez utiliser, ou vous pourriez même définir la vôtre - mais pour ce faire formellement, je soupçonne que les mathématiques deviendraient raisonnablement complexes.

Une proposition simple (sans beaucoup de formalité) peut être trouvée ici, http://myweb.lmu.edu/dondi/share/db/relational3.pdf. (Section 3.2)

En utilisant l'algèbre étendue proposée dans ce lien, votre expression sera écrite comme:

Questions connexes