¿Cómo dominar realmente MySQL?

13

He estado usando mysql durante 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 el SQL. Quiero decir, puedo seleccionar, actualizar, insertar, eliminar, unirme, etc. pero cuando se trata de cosas más complejas, estoy perdido. Cómo escribir una declaración de selección más complicada, cómo usar correctamente los índices, qué motor usar, etc.

Por alguna razón, encuentro que los documentos de mysql son difíciles de seguir, pero los de 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 más simple, pero confusa. No lo sé. La mayoría de la gente piensa que Regex es tan confuso, pero para mí tiene más sentido científico que cómo construir una declaración SQL. Por favor, no me malinterpretes, no estoy odiando a SQL, realmente me gusta, solo quiero entenderlo mejor.

¿Cuál es la forma mejor / más rápida de dominar realmente MySQL?

Cuando digo "maestro" no me refiero al gurú entre los gurús, quiero decir lo suficientemente inteligente como para resolver la mayoría de las preguntas que formulo SO, sin necesidad de ayuda.

    
pregunta JD Isaacks 24.09.2010 - 22:04

4 respuestas

10

Úsalo

La internalización de cómo funcionan las bases de datos relacionales es difícil para muchas personas, pero es muy valiosa. A medida que trabaje más con SQL, se abrirá camino en su cerebro. Sigue empujándote.

Cuando algo parezca extraño, investiga

En Chrome, configuré este motor de búsqueda, así que todo lo que tengo que hacer es escribir "m [búsqueda de búsqueda]" para buscar en los documentos (la búsqueda de dev.mysql.com apesta): {google: baseURL} search? {google : RLZ} {google: acceptSuggestion} {google: originalQueryForSuggestion} sourceid = chrome & es decir = {inputEncoding} & q = site: dev.mysql.com/doc/refman/5.1/en+%ss

Si los documentos no tienen una respuesta, ingrese a #mysql en freenode y vea si alguien puede proporcionar alguna información.

¡Lee!

Una vez que entiendas cómo las bases de datos relacionales hacen lo que tienen que hacer, querrás saber un poco más sobre lo que está haciendo MySQL con esas consultas mágicas que estás escribiendo. Recomiendo encarecidamente MySQL de alto rendimiento : vale la pena su tiempo.

    
respondido por el TehShrike 23.12.2010 - 05:03
9

En primer lugar, obtenga una comprensión completa de las uniones. No solo juntas internas y de izquierda tampoco. Sepa lo que hace una unión cruzada y una unión externa completa. Conozca las circunstancias que podrían causarle elegir un tipo particular de unión. Comprenda que no son intercambiables y que la consulta que utiliza una combinación a la izquierda puede generar resultados diferentes a los de una combinación interna. (Uno podría pensar que eso sería obvio, pero he leído demasiadas preguntas en las que las personas al describir su problema, intentan de forma aleatoria diferentes combinaciones).

Siguiente realmente entiende los agregados y cómo funcionan. Mysql le permitirá salirse con la suya de no hacer bys de grupo de forma estándar. Pero ten la disciplina para definir completamente el grupo por cláusula adecuadamente. 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 parte que tenga los resultados que espera. Por ejemplo, supongamos que necesita escribir una consulta de informe 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, es probable que desee terminar con un solo registro por pedido devuelto. Si en cualquier etapa intermedia, el número de resultados aumenta o disminuye, usted sabe que tiene un problema con la consulta. A veces, en bloques de construcción, deseará ver campos adicionales solo para verificar si la información es correcta. Los coloco en una línea separada y los comento a medida que avanzo el siguiente paso (eliminándolos al final una vez que sé que tengo razón), por lo que están disponibles para ver de nuevo 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 deben verse los resultados. Pensar que se ve bien porque obtuvo algunos resultados casi garantizará que haya 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:

  1. Primero, una selección directa sin uniones (y ninguna selección *) pero con condiciones en la selección
  2. Debe saber cómo combinar dos o más tablas y obtener registros que están en todas las tablas
  3. Debe saber cómo combinar dos o más tablas y obtener registros que están en todas las tablas pero devuelven solo un registro de la tabla con los muchos aspectos de la relación uno a muchos
  4. Debería poder obtener los registros en una tabla pero no en una tabla asociada
  5. Debería poder agregar datos para un informe
  6. Debería poder insertar un registro en una tabla
  7. Debería poder actualizar un registro en una tabla
  8. Debería poder eliminar un registro en una tabla
  9. Debería poder insertar un grupo de registros en una tabla sin un cursor
  10. Debería poder actualizar un grupo de registros en una tabla  sin un cursor
  11. Debería poder eliminar un grupo de registros en una tabla sin  un cursor
  12. Debes poder realizar múltiples acciones en una  transacción y manejar la captura de errores
  13. Debería poder crear una unión de registros y saber cuándo  use UNION vice UNION ALL
  14. Debería poder variar los datos para un campo basándose en algunos  criterios (utilizando CASE)

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 apoyo mucho más rápido que otras personas porque entiendo la estructura y no tengo que pensar dónde se almacenan 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 también los datos que contienen), puede ser un experto en la consulta de esa base de datos. Lo primero que hago en cualquier trabajo nuevo es entender completamente la estructura de la base de datos.

    
respondido por el HLGEM 06.09.2011 - 18:05
3

En mi opinión, para aprender SQL (y esto es realmente para lo que estás preguntando, las características específicas de MySQL pueden aparecer más adelante), debes retirarte del flujo de control de la programación estilo PHP. Piense específicamente en el paradigma de los lenguajes declarativos:

SQL define lo que quieres, no cómo hacerlo. Si puede intentar eliminar mentalmente lo último, lo primero lo 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 de procedimiento / OO en PHP. Por ejemplo, cuando realiza consultas a la base de datos por algo, puede unirse de manera consistente a una tabla de usuarios y tal vez a 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 enfáticamente enfocarse en Codd primatives y entender 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.

    
respondido por el Jé Queue 23.12.2010 - 06:29
2

La forma más rápida que encontré para "dominar" cualquier cosa era desafiarme con eso. Tome un conjunto de datos y escriba de ocho a diez cosas diferentes que le gustaría consultar. Es posible que un grupo de estudiantes quiera encontrar la edad promedio de todos los 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. Práctica de datos, combinaciones y funciones incorporadas.

    
respondido por el Josh K 24.09.2010 - 22:48

Lea otras preguntas en las etiquetas