J'utilise mysql depuis le même temps que j'utilise PHP. Cependant, je me sens environ 10 fois plus confiant en PHP; ou tout autre langage de programmation. Mais je n'arrive pas vraiment à vraiment saisir SQL. Je veux dire, je peux sélectionner, mettre à jour, insérer, supprimer, rejoindre, etc. mais quand il s'agit de choses plus complexes, je suis perdu. Comment écrire une instruction select plus compliquée, comment utiliser correctement les index, quel moteur utiliser, etc.
Pour une raison quelconque, je trouve vraiment les documents mysql difficiles à suivre, mais ceux php faciles à suivre.
Je commence à penser que mon cerveau est peut-être simplement câblé d'une manière qui rend la programmation plus complexe, mais sql. Je ne sais pas. La plupart des gens pensent que Regex est tellement déroutant, mais pour moi, cela a plus de sens scientifique que de construire une déclaration SQL. S'il vous plaît, ne vous méprenez pas, je ne déteste pas SQL, je l'aime vraiment, je veux juste mieux le comprendre.
Quel est le meilleur moyen / le plus rapide pour vraiment maîtriser MySQL?
Quand je dis «maître», je ne parle pas du gourou parmi les gourous, je veux dire assez intelligent pour comprendre la plupart des questions que je pose sur SO sans avoir besoin d'aide.
Réponses:
Utilise le
Internaliser le fonctionnement des bases de données relationnelles est difficile pour beaucoup de gens - mais c'est très précieux. Au fur et à mesure que vous travaillez avec SQL, il pénètrera dans votre cerveau. Continuez à vous pousser.
Lorsque quelque chose semble étrange, enquêtez
Dans Chrome, j'ai configuré ce moteur de recherche de sorte que tout ce que j'ai à faire est de taper "m [requête de recherche]" pour rechercher dans les documents (la recherche de dev.mysql.com craint): {google: baseURL} rechercher? {Google: RLZ} {google :acceptSuggestion} {google: originalQueryForSuggestion} sourceid = chrome & ie = {inputEncoding} & q = site: dev.mysql.com/doc/refman/5.1/en+%s
Si les documents n'ont pas de réponse, accédez à #mysql sur freenode et voyez si quelqu'un peut fournir des informations.
Lis!
Une fois que vous comprendrez comment les bases de données relationnelles font leur travail, vous voudrez en savoir un peu plus sur ce que MySQL fait avec ces requêtes magiques que vous écrivez. Je recommande fortement High Performance MySQL - cela en vaut la peine.
la source
Avant tout, obtenez une compréhension approfondie des jointures. Pas seulement les jointures internes et gauches. Sachez ce que fait une jointure croisée et une jointure externe complète. Connaissez les circonstances qui vous amèneraient à choisir un type particulier de jointure. Comprenez qu'ils ne sont pas interchangeables et que la requête qui utilise une jointure gauche peut renvoyer des résultats différents de celle qui utilise une jointure interne. (On pourrait penser que ce serait évident, mais j'ai lu trop de questions où les gens, en décrivant leur problème, essaient un peu au hasard différentes jointures.)
Ensuite, comprenez vraiment les agrégats et leur fonctionnement. Mysql vous permettra de ne pas faire de bys de groupe de manière standard. Mais ayez la discipline de définir correctement la clause group by. Il vous aidera à comprendre ce que vous faites et rendra vos connaissances plus facilement transférables à d'autres bases de données.
Découvrez ce que fait l'énoncé de cas.
Lorsque vous effectuez des requêtes complexes, apprenez à travailler en morceaux. Vérifiez à chaque morceau que vous avez les résultats escomptés. Par exemple, supposons que vous deviez rédiger une requête de rapport sur les commandes qui ont été retournées au cours des 3 derniers mois et la raison du retour ainsi que les coordonnées du client. La première étape consiste à récupérer les commandes au cours des trois derniers mois. Une fois que vous savez que vous avez ce solide, vous pouvez ajouter les informations sur la raison du retour. Une fois que vous avez ce solide, vous pouvez ajouter le client qui l'a retourné. Une fois que vous avez ce solide, ajoutez les coordonnées de la personne. À chaque étape, vérifiez vos résultats et voyez s'ils ont du sens. Dans ce cas, je veux probablement me retrouver avec un seul enregistrement par commande retournée. Si à un stade intermédiaire, le nombre de résultats augmente ou diminue, vous savez que vous avez un problème avec la requête. Parfois, dans les blocs de construction, vous souhaiterez voir des champs supplémentaires juste pour vérifier si les informations sont correctes. Je les mets sur une ligne distincte et les commente pendant que je passe à l'étape suivante (en les supprimant à la fin une fois que je sais que j'ai raison) afin qu'ils soient disponibles pour voir à nouveau facilement si l'ajout d'une autre ride a rendu la requête drôle. Vous ne pouvez pas effectuer correctement des requêtes complexes sans bien comprendre à quoi devraient ressembler vos résultats. Penser que cela semble OK car il a renvoyé certains résultats garantira presque que vous avez de mauvais résultats une bonne partie du temps. m à droite) donc ils sont disponibles pour voir à nouveau facilement si l'ajout d'une autre ride a rendu la requête drôle. Vous ne pouvez pas effectuer correctement des requêtes complexes sans bien comprendre à quoi devraient ressembler vos résultats. Penser que cela semble OK car il a renvoyé certains résultats garantira presque que vous avez de mauvais résultats une bonne partie du temps. m à droite) donc ils sont disponibles pour voir à nouveau facilement si l'ajout d'une autre ride a rendu la requête drôle. Vous ne pouvez pas effectuer correctement des requêtes complexes sans bien comprendre à quoi devraient ressembler vos résultats. Penser que cela semble OK car il a renvoyé certains résultats garantira presque que vous avez de mauvais résultats une bonne partie du temps.
Voici une liste de certaines choses de base que vous devriez pouvoir faire en SQL sans avoir à y penser:
Une fois que vous vous sentez à l'aise avec vos connaissances SQL de base, apprenez à connaître la structure de votre base de données. Je peux écrire des requêtes complexes contre les dbs très compliqués que je supporte beaucoup plus rapidement que les autres parce que je comprends la structure et que je n'ai pas à penser où les choses sont stockées. Si vous comprenez la structure de la table et les relations de clé étrangère et où les valeurs de recherche sont stockées et ce que signifient les colonnes (pas seulement leur nom mais quelles données y sont contenues), vous pouvez être expert dans l'interrogation de cette base de données. La première chose que je fais dans tout nouveau travail est de bien comprendre la structure de la base de données.
la source
À mon avis, pour apprendre SQL (et c'est vraiment pour ce que vous demandez, les spécificités de MySQL peuvent venir plus tard), vous devez vous retirer du flux de contrôle de la programmation de style PHP. Penser spécifiquement dans le paradigme des langages déclaratifs:
SQL définit ce que vous voulez, pas comment le faire. Si vous pouvez essayer de supprimer mentalement ce dernier, le premier suivra à temps. Abstenez cette couche dans votre esprit et laissez MySQL (ou Oracle ou autre) s'inquiéter de la façon dont .
La logique d'application peut se produire dans SQL vs code procédural / OO en PHP. Par exemple, lorsque vous effectuez des requêtes sur la base de données pour quelque chose, vous pouvez toujours joindre une table d'utilisateurs et peut-être une table d'autorisations pour garantir les droits appropriés au lieu d'effectuer plusieurs requêtes préalables. L'insertion peut être effectuée via une sélection similaire (
insert into ... select ...
) au lieu de valeurs nommées pour garantir la validation des données.Quoi qu'il en soit, je recommande fortement de se concentrer sur la primitives Codd et de comprendre la sélection, la projection, la jonction, l'union et la différence. À la fin de la journée, les concepts sont simples et vous pouvez probablement accomplir 80% de ce que vous voulez faire à travers eux. Le reste peut suivre.
la source
Le moyen le plus rapide que j'ai trouvé pour «maîtriser» n'importe quoi était de me mettre au défi. Prenez un ensemble de données et notez huit à dix choses différentes que vous souhaitez demander. Un groupe d'élèves que vous voudrez peut-être trouver l'âge moyen de tout le monde groupé par la moyenne pondérée cumulative arrondie au nombre entier le plus proche. Ensuite, écrivez les requêtes pour eux. Commencez avec une table, puis ajoutez-en plus. Pratiquez les jointures de données et les fonctions intégrées.
la source