He estado usando mysql por la misma cantidad de tiempo que he estado usando PHP. Sin embargo, me siento 10 veces más seguro en PHP; o cualquier otro lenguaje de programación. Pero parece que no puedo entender realmente SQL Quiero decir, puedo seleccionar, actualizar, insertar, eliminar, unir, etc. pero cuando se trata de cosas más complejas, estoy perdido. Cómo escribir una declaración select más complicada, cómo usar índices correctamente, qué motor usar, etc.
Por alguna razón, realmente encuentro que los documentos mysql son difíciles de seguir, pero los php son fáciles de seguir.
Estoy empezando a pensar que tal vez mi cerebro está conectado de una manera que hace que la programación sea confusa desde entonces. No lo sé. La mayoría de la gente piensa que Regex es muy confuso, pero para mí tiene más sentido científico que cómo construir una declaración SQL. Por favor, no me malinterpreten, no odio SQL, realmente me gusta, solo quiero entenderlo mejor.
¿Cuál es la mejor / más rápida forma de dominar realmente MySQL?
Cuando digo "maestro" no me refiero al gurú entre los gurús, me refiero a lo suficientemente inteligente como para resolver la mayoría de las preguntas que hago sobre SO sin necesidad de ayuda.
Respuestas:
Úsalo
Internalizar cómo funcionan las bases de datos relacionales es difícil para muchas personas, pero es muy valioso. A medida que trabaje más con SQL, se abrirá paso en su cerebro. Sigue empujándote a ti mismo.
Cuando algo parece extraño, investiga
En Chrome, configuré este motor de búsqueda, así que todo lo que tengo que hacer es escribir "m [consulta de búsqueda]" para buscar los documentos (la búsqueda de dev.mysql.com apesta): {google: baseURL} buscar? {Google: RLZ} {google: acceptSuggestion} {google: originalQueryForSuggestion} sourceid = chrome & ie = {inputEncoding} & q = site: dev.mysql.com/doc/refman/5.1/en+%s
Si los documentos no tienen una respuesta, ingrese a #mysql en freenode y vea si alguien puede proporcionar alguna información.
¡Leer!
Una vez que comprenda cómo las bases de datos relacionales hacen lo suyo, querrá saber un poco más sobre lo que MySQL está haciendo con esas consultas mágicas que está escribiendo. Recomiendo encarecidamente MySQL de alto rendimiento , vale la pena su tiempo.
fuente
En primer lugar, obtenga una comprensión profunda de las uniones. No solo se une el interior y el izquierdo. Sepa lo que hace una unión cruzada y una unión externa completa. Conozca las circunstancias que le harían elegir un tipo particular de unión. Comprenda que no son intercambiables y que la consulta que usa una combinación izquierda puede devolver resultados diferentes a los de una combinación interna. (Uno podría pensar que sería obvio, pero he leído demasiadas preguntas en las que las personas al describir su problema, de alguna manera intentan al azar diferentes combinaciones).
A continuación, realmente entiendo los agregados y cómo funcionan. Mysql le permitirá salirse con la suya al no hacer bys grupales de manera estándar. Pero tenga la disciplina para definir completamente al grupo mediante una cláusula adecuada. Le ayudará a comprender lo que está haciendo y hará que su conocimiento sea más fácilmente transferible a otras bases de datos.
Aprenda lo que hace la declaración del caso.
Al hacer consultas complejas, aprenda a trabajar en trozos. Verifique en cada fragmento que tenga los resultados que espera. Entonces, por ejemplo, supongamos que necesita escribir una consulta de informes sobre los pedidos que se han devuelto en los últimos 3 meses y el motivo de la devolución, así como la información de contacto del cliente. El primer paso es obtener los pedidos devueltos en los últimos tres meses. Una vez que sepa que tiene ese sólido, puede agregar la información sobre el motivo de la devolución. Una vez que tenga ese sólido, puede agregar el cliente que lo devolvió. Una vez que tenga ese sólido, agregue la información de contacto de la persona. En cada etapa, verifique sus resultados y vea si tienen sentido. En este caso, probablemente quiera terminar con solo un registro por pedido devuelto. Si en cualquier etapa intermedia, el número de resultados aumenta o disminuye, sabe que tiene un problema con la consulta. A veces, en los bloques de construcción, querrá ver campos adicionales solo para verificar si la información es correcta. Los pongo en una línea separada y los comento a medida que avanzo en el siguiente paso (eliminarlos al final una vez que sé que estoy en lo cierto) para que estén disponibles para volver a verlos fácilmente si agregar otra arruga hizo que la consulta fuera divertida. No puede realizar consultas complejas correctamente sin una comprensión profunda de cómo deberían ser sus resultados. Pensar que se ve bien porque devolvió algunos resultados casi garantizará que tenga resultados incorrectos una buena parte del tiempo. m a la derecha) para que estén disponibles para volver a ver fácilmente si agregar otra arruga hizo que la consulta fuera divertida. No puede realizar consultas complejas correctamente sin una comprensión profunda de cómo deberían ser sus resultados. Pensar que se ve bien porque devolvió algunos resultados casi garantizará que tenga resultados incorrectos una buena parte del tiempo. m a la derecha) para que estén disponibles para volver a ver fácilmente si agregar otra arruga hizo que la consulta fuera divertida. No puede realizar consultas complejas correctamente sin una comprensión profunda de cómo deberían ser sus resultados. Pensar que se ve bien porque devolvió algunos resultados casi garantizará que tenga resultados incorrectos una buena parte del tiempo.
Aquí hay una lista de algunas cosas básicas que debería poder hacer en SQL sin tener que pensarlo:
Una vez que se sienta cómodo con su conocimiento básico de SQL, conozca la estructura de su base de datos. Puedo escribir consultas complejas contra los dbs muy complicados que soporto mucho más rápido que otras personas porque entiendo la estructura y no tengo que pensar dónde están almacenadas las cosas. Si comprende la estructura de la tabla y las relaciones de clave externa y dónde se almacenan los valores de búsqueda y qué significan las columnas (no solo su nombre, sino qué datos se encuentran en ellas), entonces puede ser experto en consultar esa base de datos. Lo primero que hago en cualquier trabajo nuevo es comprender a fondo la estructura db.
fuente
En mi opinión, para aprender SQL (y esto es realmente por lo que está preguntando, los detalles de MySQL pueden venir más adelante), debe eliminarse del flujo de control de la programación al estilo PHP. Piensa específicamente en el paradigma de los lenguajes declarativos:
SQL define QUÉ quieres, no cómo hacerlo. Si puede intentar eliminar mentalmente el último, el primero seguirá a tiempo. Resuma esta capa en su mente y deje que MySQL (u Oracle o lo que sea) se preocupe por cómo .
La lógica de la aplicación puede ocurrir en SQL vs código procesal / OO en PHP. Por ejemplo, cuando realiza consultas a la base de datos por algo, puede unirse de manera consistente en una tabla de usuario y tal vez en una tabla de permisos para garantizar los derechos adecuados en lugar de realizar múltiples consultas previas. La inserción se puede realizar a través de una selección similar (
insert into ... select ...
) en lugar de valores con nombre para garantizar la validación de los datos.De todos modos, recomiendo centrarse en las primitivas de Codd y comprender la selección, proyección, unión, unión y diferencia. Al final del día, los conceptos son sencillos y es probable que pueda lograr el 80% de lo que quiere hacer a través de ellos. El resto puede seguir.
fuente
La forma más rápida en que encontré para "dominar" algo fue desafiarme a mí mismo con eso. Tome un conjunto de datos y escriba entre ocho y diez cosas diferentes que le gustaría consultar. Un grupo de estudiantes que tal vez desee encontrar la edad promedio de todos los grupos agrupados por el promedio de calificaciones redondeado al número entero más cercano. Luego escribe las consultas para ellos. Comience con una tabla, luego agregue más. Practique uniones de datos y funciones integradas.
fuente