Question

Quand j'écris requêtes SQL, je me surprends à penser souvent que « il n'y a aucun moyen de le faire avec une seule requête ». Quand cela arrive, je tourne souvent à des procédures ou des fonctions de valeur table à plusieurs instructions stockées qui utilisent des tables temporaires (d'une manière ou d'une autre) et finissent par la simple combinaison de résultats et retourner le tableau de résultats.

Je me demande si quelqu'un sait, simplement une question de théorie, si elle devrait possible d'écrire toute requête qui renvoie un seul jeu de résultats en une seule requête (pas plusieurs instructions). De toute évidence, j'ignore les points pertinents tels que la lisibilité du code et la maintenabilité, peut-être même les performances des requêtes / efficacité. Ceci est plus sur la théorie - peut-il être fait ... et ne vous inquiétez pas, je ne prévois certainement pas commencer à me forcer à écrire une requête à une seule instruction lorsque plusieurs instructions correspondent mieux à mon but dans tous les cas, mais il pourrait me faire réfléchir à deux fois ou un peu plus s'il existe un moyen viable pour obtenir le résultat d'une seule requête.

Je suppose que quelques paramètres sont dans l'ordre - je pense à une base de données relationnelle (comme MS SQL) avec des tables qui suivent les meilleures pratiques communes (telles que toutes les tables ayant une clé primaire et ainsi de suite)

Note: (. À partir de documents web ou quelque chose de similaire) afin de gagner « Accepté réponse » à ce sujet, vous devrez fournir une preuve définitive

Était-ce utile?

La solution

Au moins, avec la version récente d'Oracle est tout à fait possible. Il a une « clause type » qui rend complet turation sql. (

Autres conseils

Je crois qu'il est possible. J'ai travaillé avec des requêtes très difficiles, des requêtes très longues, et souvent, il est possible de le faire avec une seule requête. Mais la plupart du temps, il est plus difficile à mantenir, donc si vous le faites avec une seule requête, assurez-vous commenter votre requête attentivement.

Je ne l'ai jamais rencontré quelque chose qui ne pouvait être fait en une seule requête.
Mais parfois, il est préférable de le faire dans plus d'une requête.

Je ne peux pas le prouver, mais je crois que la réponse est oui prudent - à condition que la conception de votre base de données se fait correctement. En général, forcé d'écrire plusieurs déclarations pour obtenir un certain résultat est un signe que votre schéma peut avoir besoin des améliorations.

En théorie oui, si vous utilisez des fonctions ou un labyrinthe tortueux de OUTER applys ou sous-requêtes; Cependant, pour une meilleure lisibilité et la performance, nous avons toujours fini par aller avec des tables temporaires et à plusieurs instructions des procédures stockées.

Comme quelqu'un ci-dessus a commenté, cela est généralement un signe que votre structure de données commence à sentir; pas que ce soit mauvais , mais que peut-être il est temps de denormalise pour des raisons de performance (arrive aux meilleurs d'entre nous), ou peut-être mettre une couche d'interrogation dénormalisé devant vos données « réelles » normalisées.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top