: Oui, Il ne faut pas le faire, parce qu'il n'a pas de sens sur le plan conceptuel.
La sous-requête sera utilisé dans certains requête externe (sinon il serait inutile), et que la requête externe devra faire la commande de toute façon, donc il n'y a pas de point de commande de la sous-requête.
C'est parce que les résultats de la requête dans SQL viendra en aucun ordre particulier, sauf si vous utilisez un ORDRE explicite. Donc, même si vous avez utilisé de l'ORDRE dans la sous-requête, vous n'avez aucune garantie que cela va affecter l'ordre des résultats de la requête externe; il est donc inutile.
Il peut bien sûr faire une différence dans certains SGBDR spécifique en raison de sa mise en œuvre, mais qui sera mise en œuvre spécifiques, et non pas quelque chose que vous devriez compter.
Edit: bien sûr, si vous utilisez le HAUT ou LIMITE dans la sous-requête, vous sera besoin d'utiliser de l'ORDRE. Mais ce n'est pas le standard SQL de toute façon...
Vous devez les utiliser si la sous-requête qui utilise une sorte de LIMIT /TOP.
SQL Server ne le permettra pas, à moins que la sous-requête contient TOP ou FOR XML clause ainsi:
-- FailsWITH q(id)AS(SELECT1UNIONALLSELECT2)SELECT*FROM(SELECT*FROM q
ORDERBY
id DESC) q2
-- SucceedsWITH q(id)AS(SELECT1UNIONALLSELECT2)SELECT*FROM(SELECTTOP1*FROM q
ORDERBY
id DESC) q2
-- Succeeds, but ORDER BY is ignoredWITH q(id)AS(SELECT1UNIONALLSELECT2)SELECT*FROM(SELECTTOP100PERCENT*FROM q
ORDERBY
id DESC) q2
Des gens intelligents dire que c'est pas bon/moyen valable de le faire.
Dans mon cas, SÉLECTIONNER le TOP 100 pour CENT dans la sous-requête a résolu le problème.
En fonction de la taille de la sous-requête, il aura un impact sur la performance à une varrying degré.
Ordre ne compte pas sur une sous-requête. Vous devriez être en mesure de déplacer la Commande Par la partie de la Requête Externe (qui devrait être l'un retour des résultats de la finale).
Aucune COMMANDE n'est valide que dans une sous-requête lorsque vous êtes intéressé par un sous-ensemble de l'ensemble de données, donc vous devez toujours vous TOP (SQL Server). Il n'y a aucun point d'avoir une COMMANDE sans HAUT dans une sous-requête, car l'ensemble de l'ordre des résultats est assurée par la requête externe.
Vous ne devriez pas l'utiliser. Selon "l'Art de SQL', cela empêche l'optimiseur de l'exécution de diverses optimisations qu'il pourrait faire autrement parce que ce prématurément transforme les données.
C'est tout à fait légitime. I. e. SELECT id FROM entries WHERE author_id IN (SELECT id FROM authors ORDER BY name DESC) mais vous allez vraiment obtenir les mêmes résultats.
Habituellement? Pouvez-vous donner tous les cas où les résultats seraient différents? Il sera différent si vous ajoutez une LIMITE de déclaration de votre sous-sélection. Dans ce cas, si vous voulez voir toutes les entrées du top 5 des auteurs par nom, vous pouvez modifier votre sous-sélection (SELECT id from auteurs ORDER BY nom DESC LIMIT 5). Vrai. Avec TOP/LIMITE qu'elle fait une différence (et elle est nécessaire, parfois même nécessaire). Sinon, ce n'est pas de faire une différence. Veuillez noter que MySQL ne prend pas en charge ORDER BY ... LIMIT dans le IN les sous-requêtes.
: Oui, Il ne faut pas le faire, parce qu'il n'a pas de sens sur le plan conceptuel.
La sous-requête sera utilisé dans certains requête externe (sinon il serait inutile), et que la requête externe devra faire la commande de toute façon, donc il n'y a pas de point de commande de la sous-requête.
C'est parce que les résultats de la requête dans SQL viendra en aucun ordre particulier, sauf si vous utilisez un ORDRE explicite. Donc, même si vous avez utilisé de l'ORDRE dans la sous-requête, vous n'avez aucune garantie que cela va affecter l'ordre des résultats de la requête externe; il est donc inutile.
Il peut bien sûr faire une différence dans certains SGBDR spécifique en raison de sa mise en œuvre, mais qui sera mise en œuvre spécifiques, et non pas quelque chose que vous devriez compter.
Edit: bien sûr, si vous utilisez le HAUT ou LIMITE dans la sous-requête, vous sera besoin d'utiliser de l'ORDRE. Mais ce n'est pas le standard SQL de toute façon...
OriginalL'auteur sleske
Vous devez les utiliser si la sous-requête qui utilise une sorte de
LIMIT
/TOP
.SQL Server
ne le permettra pas, à moins que la sous-requête contientTOP
ouFOR XML
clause ainsi:OriginalL'auteur Quassnoi
Sauf si vous utilisez des haut il n'est pas utile puisque vous serez de la commande dans la requête externe de toute façon
OriginalL'auteur SQLMenace
Des gens intelligents dire que c'est pas bon/moyen valable de le faire.
Dans mon cas, SÉLECTIONNER le TOP 100 pour CENT dans la sous-requête a résolu le problème.
Acclamations
OriginalL'auteur Marko
Vous pouvez le faire, mais je ne serait pas l'habitude, sauf si vous avez un besoin.
L'optimiseur va l'ignorer (ou de jeter une erreur?)
Voir "Intermédiaire matérialisation" pour certains usages.
OriginalL'auteur gbn
En fonction de la taille de la sous-requête, il aura un impact sur la performance à une varrying degré.
Ordre ne compte pas sur une sous-requête. Vous devriez être en mesure de déplacer la Commande Par la partie de la Requête Externe (qui devrait être l'un retour des résultats de la finale).
OriginalL'auteur Justin Niessner
Aucune COMMANDE n'est valide que dans une sous-requête lorsque vous êtes intéressé par un sous-ensemble de l'ensemble de données, donc vous devez toujours vous
TOP
(SQL Server). Il n'y a aucun point d'avoir une COMMANDE sans HAUT dans une sous-requête, car l'ensemble de l'ordre des résultats est assurée par la requête externe.OriginalL'auteur AdaTheDev
Vous ne devriez pas l'utiliser. Selon "l'Art de SQL', cela empêche l'optimiseur de l'exécution de diverses optimisations qu'il pourrait faire autrement parce que ce prématurément transforme les données.
OriginalL'auteur Jordan Parmer
C'est tout à fait légitime. I. e.
SELECT id FROM entries WHERE author_id IN (SELECT id FROM authors ORDER BY name DESC)
mais vous allez vraiment obtenir les mêmes résultats.Il sera différent si vous ajoutez une LIMITE de déclaration de votre sous-sélection. Dans ce cas, si vous voulez voir toutes les entrées du top 5 des auteurs par nom, vous pouvez modifier votre sous-sélection (SELECT id from auteurs ORDER BY nom DESC LIMIT 5).
Vrai. Avec TOP/LIMITE qu'elle fait une différence (et elle est nécessaire, parfois même nécessaire). Sinon, ce n'est pas de faire une différence.
Veuillez noter que
MySQL
ne prend pas en chargeORDER BY ... LIMIT
dans leIN
les sous-requêtes.OriginalL'auteur loginx