Je suis entièrement nouveau chez SQL, mais disons que sur le Stackexchange Data Explorer , je viens de vouloir énumérer les 15 meilleurs utilisateurs par réputation, et j'ai écrit quelque chose comme ceci: actuellement ceci donne une erreur afin que les questions sont les suivantes: p> : nom de colonne invalide 'repink' code>, ce qui fait sens, je pense, parce que
RepInK code> est pas une colonne dans
utilisateurs code>. Je peux facilement résoudre ce problème en disant
où la réputation / 1000> 10 code>, répétant essentiellement la formule. P>
repink code> "colonne" dans le
où code> clause?
Sélectionner / où code> interroge dessus? LI>
ul> li>
Réputation / 1000 Code>, il suffit donc de répéter les noms dans quelques endroits au lieu de la formule?
5 Réponses :
Puis-je réellement utiliser la "colonne" repink dans la clause WHERE? P> blockQuote>
Non, mais vous pouvez être assuré que votre base de données évaluera
(réputation / 1000) code> une fois, même si vous l'utilisez à la fois dans les champs code> CODE> et dans le < code> où code> clause. p>
Dois-je peut-être créer une table / une vue virtuelle avec cette colonne, puis effectuez une sélection / la requête sur elle? P> blockQuote>
Oui, une vue est une option pour simplifier les requêtes complexes. P>
Puis-je nommer une expression, par exemple Réputation / 1000, il suffit donc de répéter les noms dans quelques endroits au lieu de la formule? P> blockQuote>
Vous pouvez créer une fonction définie par l'utilisateur que vous pouvez appeler quelque chose comme
converttok code>, qui recevrait la valeur REP comme argument et renvoie cet argument divisé par 1000. Cependant, il n'est souvent pas pratique pour un cas trivial comme celui de votre exemple. p>
Y a-t-il une fiche rapide, glossaire de termes, spécification linguistique, tout ce que je peux utiliser pour récupérer rapidement la syntaxe et la sémantique de la langue? P> blockQuote>
Je suggère de pratique. Vous voudrez peut-être commencer à suivre le Tag MySQL sur le débordement de la pile, où de nombreuses questions débutantes sont posées tous les jours. Téléchargez MySQL , et quand vous pensez qu'il y a une question à votre portée, essayez d'aller pour le Solution. Je pense que cela vous aidera à ramasser de la vitesse, ainsi que de conscience des caractéristiques des langues. Il n'est pas nécessaire de poster la réponse au début, car il y a des armes à feu assez rapides sur le sujet ici, mais avec une certaine pratique, je suis sûr que vous pourrez apporter des points à la maison :) p>
Je comprends qu'il existe différentes "saveurs"? p> blockQuote>
Les saveurs sont en réalité des extensions de ANSI SQL . Les fournisseurs de base de données augmentent généralement la langue SQL avec des extensions telles que transact-sql et
PL / SQL . P>
Seriez-vous conseiller contre l'apprentissage SQL par l'explorateur de données Exchange Stack Exchange? Parce que c'était mon plan. Pas besoin d'installer quelque chose, beaucoup de personnes qui l'interrogent déjà afin que je puisse rechercher les requêtes des autres, les données réelles que je connais et stipistes, etc.
@polygenelubrançants: non pas du tout. C'est certainement une bonne pratique, surtout si vous avez des curiosités spécifiques que vous souhaitez satisfaire des décharges de données SE :) ... J'ai suggéré de suivre des questions simplement parce que les vrais problèmes révèlent souvent beaucoup plus de situations pour des trucs sql pratiques. De plus, vous verrez également comment les experts répondent, de qui il y a beaucoup à apprendre. La balise MySQL rassemble généralement des problèmes plus simples que les balises SQL-Server, ou d'autres. La syntaxe n'est pas si différente: la plupart des requêtes seront exécutées sur toutes les bases de données.
@polygenLubrançants: on dirait que vous n'êtes pas le seul intéressées par l'apprentissage SQL de l'Exchange Stack Exchange Data Exporer :)
Vous pouvez simplement ré-écrire la clause où la clause Ce n'est pas toujours pratique. En tant que alternativement, vous pouvez utiliser une vue en ligne: p>
vous peut strud> se référer à repink dans la clause code> par code>, mais dans la clause où code>, vous devez répéter l'expression. Mais, comme d'autres l'ont dit, il ne sera exécuté qu'une seule fois. P>
Il existe déjà de bonnes réponses pour le problème technique, donc je ne vais donc aborder que certaines des autres questions. P>
Si vous travaillez avec le dataExplorer, vous voudrez vous familiariser avec SQL Server Syntax depuis que c'est en cours d'exécution. Le meilleur endroit pour trouver que, bien sûr, est MSDN Référence . P>
Oui, il existe différentes variations de la syntaxe SQL. Par exemple, la clause top code> dans la requête que vous avez donnée est SQL Server spécifique; Dans MySQL, vous utiliseriez la clause code> limite code> plutôt (et ces mots-clés n'apparaissent pas nécessairement dans le même endroit de la requête!). P>
En ce qui concerne quelque chose comme des expressions nommées, tandis qu'il y a plusieurs alternatives possibles, l'optimiseur de requêtes va faire de mieux simplement écrire la formule en tant que alternative, (et dans les cas où la performance n'est pas une grande partie du problème), vous pouvez essayer quelque chose comme: p> si je ne crois pas que ce soit supporté par tous les dialectes SQL et Encore une fois, l'optimiseur est susceptible de faire un travail bien pire que ce genre de chose (puisqu'il exécutera la sélection de la table des utilisateurs complète, puis de filtrer ce résultat). Néanmoins, pour certaines situations, ce type de requête est approprié (il y a un nom pour cela ... je dessine un vide pour le moment). P> Personnellement, quand j'ai commencé avec SQL, j'ai trouvé < Un href = "http://www.w3schools.com/sql/default.asp" rel = "Nofollow NOREFERRER"> Les écoles W3 font référence à mon point d'arrêt constant. Cela correspond à mon style pour être quelque chose que je peux jeter un coup d'œil pour trouver une réponse rapide et passer à autre chose. Finalement, cependant, profiter vraiment de la base de données, il est nécessaire de plonger dans la documentation des fournisseurs. p> Bien que SQL soit "STULARISÉ", malheureusement (cependant, heureusement, heureusement), chaque fournisseur de base de données implémente sa propre version avec leurs propres extensions, ce qui peut entraîner une syntaxe très différente (pour Une discussion sur les incompatibilités de diverses bases de données sur un numéro Voir le Documentation SQLITE sur NULL Manipulation . Dans Les fonctions standard, par exemple pour la manutention des dates et des temps ont tendance à différer par fournisseur, et il existe d'autres différences plus drastiques (notamment dans les sous-éléments de support ni de manipulation correctement). Si vous vous souciez de certains des détails, Ce document fournit à la fois les formulaires standard et les écarts pour plusieurs bases de données principales. P> P> réputation / 1000 code> longue main. Si vous avez vraiment besoin d'exécuter tout un groupe de requêtes en utilisant la même valeur évaluée, votre meilleur pari est de créer une vue avec le champ défini, mais vous ne voudriez pas le faire pour une requête unique.
(Re: nommé requêtes et optimiseur) À ce stade, je me soucie de l'écriture de bonnes requêtes lisibles; Je m'inquiète de l'optimisation / de la performance plus tard. Je pense que c'est le meilleur moyen d'apprendre la plupart des langues; J'espère que c'est aussi vrai pour SQL.
Vous ne pouvez pas utiliser
Sélectionner des instructions code> comme
où code> conditions, dans votre cas
repink code>, car ils seront résolus après le
où < / Code>, c'est un paradoxe et le serveur explosera avec l'ensemble du bâtiment.