Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Como hacer un (sql o query) en mysql?

Estas en el tema de Como hacer un (sql o query) en mysql? en el foro de Mysql en Foros del Web. Saludos, se que es una tontería lo que voy a preguntar pero soy nuevo en esto y requiero ayuda tecnica y psicologica para resolver esta ...
  #1 (permalink)  
Antiguo 04/03/2010, 21:34
 
Fecha de Ingreso: enero-2010
Mensajes: 40
Antigüedad: 14 años, 2 meses
Puntos: 1
Como hacer un (sql o query) en mysql?

Saludos, se que es una tontería lo que voy a preguntar pero soy nuevo en esto y requiero ayuda tecnica y psicologica para resolver esta consulta, [Estoy trabajando con dreamwaver y php].

Vamos directamente al punto...

PLANTEAMIENTO:
tengo una tabla en la que solo tengo datos indice, por ejemplo: mi tabla se llama "grupo_empleados" y en ella los campos que tengo son: "codigo_empresa, codigo_horario, codigo_tanda, codigo_posicion, codigo_ocupacion".

_Bien LA PREGUNTA ES LA SIGUIENTE:

¿Como puedo hacer el query o Sql en mysql para que traigan los valores que corresponden a cada uno de esos indices, en vez de salir los codigos de cada uno de esos campos, aparescan los nombres?

ME GUSTARIA QUE SALGAN LOS SIGUIENTES DATOS PARTIENDO DE LA SECUENCIA PLANTEADA ANTERIORMENTE:

EMPRESA MANOFACTURERA
8:30 AM A 12:30 PM
MATUTINO
GERENTE
ENCARGADO DE EMBARQUE

Gracias, es posible que sea una tonteria, pero no se hacerlo, cualquier ayuda bienvenida sea.
  #2 (permalink)  
Antiguo 05/03/2010, 04:59
 
Fecha de Ingreso: enero-2010
Ubicación: Sevilla
Mensajes: 202
Antigüedad: 14 años, 2 meses
Puntos: 5
Respuesta: Como hacer un (sql o query) en mysql?

Debes hacer JOIN de las distintas tablas.
Por favor, usa el buscador del foro porque ese tema se ha tratado muchisimas veces.
__________________
Mi blog de temas más o menos técnicos

Y aquí el Jamón jamon de Jabugo
  #3 (permalink)  
Antiguo 05/03/2010, 05:59
 
Fecha de Ingreso: julio-2007
Mensajes: 239
Antigüedad: 16 años, 8 meses
Puntos: 2
Respuesta: Como hacer un (sql o query) en mysql?

como te comentan debes hacer un join

Código mysql:
Ver original
  1. select campos from tabla1 t1 inner join tabla2 t2 using(campo_relacional) ... etc ...
  #4 (permalink)  
Antiguo 05/03/2010, 07:27
 
Fecha de Ingreso: enero-2010
Mensajes: 40
Antigüedad: 14 años, 2 meses
Puntos: 1
Respuesta: Como hacer un (sql o query) en mysql?

Saludos, realmente antes de plantear el tema, hice una pequeña búsqueda en el foro con relación al mismo, pero no encontré nada que pudiera ayudarme.

BIEN MIS AMIGOS Y LE AGRADEZCO POR RESPONDERME SUCEDE QUE NO SUPE COMO PREGUNTAR [LO SIENTO]! y les pido disculpas, voy a aclarar algo:

Sucede que estoy utilizando INNER JOIN como me han dicho, he realizado un sql bastante grande relacionando cada tabla y sacando sus resultado ya que que son mucho mas campos de VARIAS tablas de los que les mencione y la verdad es que no quiero forzar la base de datos pues estoy pensando que a esa pagina se van a conectar en un futuro mas de 3000 usuarios al mismo tiempo y se va a tornar bastante lenta al dar respuesta.

LA PREGUNTA 1 SERIA: ¿COMO PUEDO HACER UN SQL MAS FACTIBLE TOMANDO EN CONSIDERACIÓN EL PRIMER PLANTEAMIENTO QUE HICE EN AL PRINCIPIO DE ESTE TEMA?

LA PREGUNTA 2 ES: ¿CONSIDERAN USTEDES QUE ESO NO AFECTARÍA A LA VELOCIDAD DE RESPUESTA AL MOMENTO DE QUE GRAN CANTIDAD DE USUARIO CONSULTEN AL MISMO TIEMPO?

Última edición por Andy2010; 05/03/2010 a las 07:34
  #5 (permalink)  
Antiguo 05/03/2010, 07:40
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Como hacer un (sql o query) en mysql?

A tu primera pregunta:
- Segmenta los INNER JOIN para contenerlos en tablas derivadas en el FROM por medio de subconsultas, que a su vez sean las que reduzcan los resultados intermedios de la mejor forma posible.
- Verifica el uso de índices de alta selectividad. Cuando un índice contiene todos los datos que MySQL necesita para devolver una consulta, no lee la tabla.
- Reduce el uso de "SELECT * ...". haz que MySQL recupere campos específicos para lo que necesitas. El "*" es la forma menos óptima de consulta.

Y en general:
- Modifica el tipo de campos, si es posible, para optimizar el almacenamiento y recuperación. Cuando tienes un dato que nunca será BIGINT, BLOB, LONGTEXT o DATETIME, por ejemplo, no tiene sentido usarlo. Mientras menor sea el registro devuelto, más rápida será la lectura de datos.
- Nunca te olvides que el hardware y los enlaces de red afectan muchísimo la perfomance de la base. De nada te servirá un Oracle 11g, si lo vas a usar con una PC de 256 Mb de ram... Con MySQL pasa algo parecido: Si usarás muchos recursos, es mejor que lo que uses resista. Por eso las PCs no son servidores de bases de datos... Hay máquinas específicas para eso.


... y muchísmo más.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 05/03/2010, 08:06
 
Fecha de Ingreso: enero-2010
Mensajes: 40
Antigüedad: 14 años, 2 meses
Puntos: 1
Respuesta: Como hacer un (sql o query) en mysql?

Gracias Hermano excelente respuesta!, necesito aclaración con esto que me dices:

1-"Segmentar", quieres decir que use una secuencia coordinada de los INNER JOIN en el posicionamiento de cada tabla con relación al select?

2-¿Un Indice de alta selectividad seria aquel que esta contenido en las dos tablas como tal y que llama los campos específicos de igual manera?

Solo eso dos planteamientos para estar completamente claro con lo que me dices, con las demás sugerencias gracias, las he entendido perfectamente.
  #7 (permalink)  
Antiguo 05/03/2010, 08:24
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Como hacer un (sql o query) en mysql?

Cita:
1-"Segmentar", quieres decir que use una secuencia coordinada de los INNER JOIN en el posicionamiento de cada tabla con relación al select?
Cuando tienes varios INNER JOIN encadenados uno detrás de otro, siempre hay alguno(s) que poseen una mayor selectividad (un resultado reducido sobre un conjunto datos muy grande) y que se puede reducir mucho más aplicando condiciones sobre el WHERE de ese par específico.
En esos casos, no tiene sentido esperar que el WHERE actúe sobre el conjunto completo de lo devuelto por los INNER JOIN. Antes bien es mejor encerrar en el FROM ese par y crear una subconsulta (que en defintiva devolverá una tabla derivada) donde aplicar todo el filtrado para ese sólo par. COmo el resto de los INNER JOIN actúan ya sobre la tabla derivada, el resultado es mucho más efiicente y efectivo que hacer una sola consulta gigante.

Se entiende la idea?

Cita:
2-¿Un Indice de alta selectividad seria aquel que esta contenido en las dos tablas como tal y que llama los campos específicos de igual manera?
Un índice de alta selectividad es aquel que tiene la menos cantidad de valores asignados a la misma clave.
Esto se da en dos circunstancias: La PK es la de mayor selectividad (1:1), las FK generan un índice de menor selectividad (1:N ó N:N); a su vez los índices INDEX son los de menor nivel de selectividad, pero en estos últimos dos casos dependerá de la dispersión de los arboles de claves generados.
Si un índice definido sobre un campo tiene pocas repeticiones de grupos, se considera que tiene alta selectividad. No hay un límite preciso para definir eso porque depende del contexto: Si en un caso de 10.000 registros, 50 registros por clave se consideran poco selectivos, la misma cantidad sobre 1.000.000 de registros es alta selectividad.

Esto se usa para saber cual es el costo de consultas (se define como costo de consultas la cantidad de tiempo de procesador, bloques de memoria y accesos a disco necesarios para resolver una consulta).

Un detalle final: Los índices secundarios (o no agrupados) tienen mucho efecto, pero también aumentan el costo de las inserciones, por lo que no hay que abusar de ellos.
Además, el uso de " >="," >", "<=" y "<" pueden generar lectura de tablas completas cuando no hay índices definidos en los campos del WHERE, por lo que es bueno revisar lo que se esá solicitando y analizar el procedimiento de consulta con EXPLAIN.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 05/03/2010, 08:59
 
Fecha de Ingreso: enero-2010
Mensajes: 40
Antigüedad: 14 años, 2 meses
Puntos: 1
Respuesta: Como hacer un (sql o query) en mysql?

*Bien!!, Antes de finalizar ya que me has ayudado bastante necesito hacerte tres preguntas:

1ra. ¿Hermano es usted un científico de base de datos? ufff!
2da. ¿Donde puedo conseguir una consulta de ejemplo de esto que me planteas ?

Código cita:
Ver original
  1. Cuando tienes varios INNER JOIN encadenados uno detrás de otro, siempre hay alguno(s) que poseen una mayor selectividad (un resultado reducido sobre un conjunto datos muy grande) y que se puede reducir mucho más aplicando condiciones sobre el WHERE de ese par específico.
  2. En esos casos, no tiene sentido esperar que el WHERE actúe sobre el conjunto completo de lo devuelto por los INNER JOIN. Antes bien es mejor encerrar en el FROM ese par y crear una subconsulta (que en defintiva devolverá una tabla derivada) donde aplicar todo el filtrado para ese sólo par. COmo el resto de los INNER JOIN actúan ya sobre la tabla derivada, el resultado es mucho más efiicente y efectivo que hacer una sola consulta gigante.

3ra. ¿Me gustaría saber si puedo enviarte una consulta que he realizado anteriormente via email para una pequeña revisión?, de ser "si" mi email es [email protected], mandame algo y luego te respondo.

Gracias tu ayuda ha sido satisfactoria.
_Espero tu respuesta!

Última edición por Andy2010; 05/03/2010 a las 09:05
  #9 (permalink)  
Antiguo 05/03/2010, 09:16
 
Fecha de Ingreso: julio-2007
Mensajes: 239
Antigüedad: 16 años, 8 meses
Puntos: 2
Respuesta: Como hacer un (sql o query) en mysql?

te lo ha planteado para casos concretos, son sugerencias generales que se deben tomar en cuenta a la hora de plantear las consultas pero que no siempre vas a poder aplicar :

un ejemplo corto

Código mysql:
Ver original
  1. select t1.campo1, t2.campo2 from tabla1 t1 inner join (select t3.campo1, t4.campo2 from tabla3 t3 inner join tabla4 using(campo_relacion) where campo2>1234) t2 using(campo1) inner join ...N  ... where ...

así el where de la subconsulta con alias t2 solamente hará las comprobaciones limitadas al resultado de ambas tablas, si unieses las tablas fuera (sin subconsulta) se añadiría el where al general con lo que comprobaría en todo el conjunto resultante de los inner joins

lo que no tengo claro es si el resultaro sería parejo al hacerlo así (yo "soy nuevo" en esto)

Código mysql:
Ver original
  1. select t1.campo1, t4.campo2 from tabla1 t1 inner join tabla3 t3 using(campo_relacion) inner join tabla4 on t3.campo_relacion=t4.campo_relacion and t4.campo2>1234 inner join ...N  ... where ...

veamos que dice el experto
  #10 (permalink)  
Antiguo 05/03/2010, 11:45
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Como hacer un (sql o query) en mysql?

Código MySQL:
Ver original
  1. SELECT t1.campo1, t4.campo2
  2. FROM tabla1 t1
  3.       INNER JOIN tabla3 t3 USING(campo_relacion)
  4.       INNER JOIN tabla4 t4 on t3.campo_relacion=t4.campo_relacion AND t4.campo2>1234
  5.       INNER JOIN ...N  ...
  6. WHERE ...
Este es un caso especial, pero cumple las generales de la ley: SI no hay un índice no agrupado sobre t4.campo2, el efecto podría ser que MySQL omitiera esta cláusula si el valor indicado no se halla en el primer par de lecurtas de datos.

Me explico:
La teoría dice que en este caso lo que los DBMS hacen es leer los dos registros límite (inferior y superior). Si el inferior es mayor, debe leer toda la tabla, por lo que omite la cláusula. Si el límite superior es menor, omite la tabla y devuelve nulos.
Si está entremedio, leería el registro medio; en ese caso, si el medio es mayor, puede llegar a omitir la cláusula porque la cantidad de saltos para encontrar el punto de lectura equivaldría a más tiempo queel que usaría para leer la tabla entera.
Sólo si lo buscado está en el bloque superior, seguiría buscando, porque en ese caso como mucho leería la mitad de la tabla...
¿Se entiende un poco la idea.

Los diferentes DBMS implementan de diferentes formas esta idea, pero en principio el TableScan se hace cuando el tiempo medio de saltos es igual o superior a la mitad del tiempo de lectura total de datos.
Al menos eso decía la teoría.

Y sí: Cursé efectivamente este tema en la universidad, donde tuve profesores que explicaron el funcionamiento del costo de consultas...
De todos modos es un tema que se puede comprender bastante bien leyendo, sobre todo si has hecho algo de programación en C/C++, porque algunos conceptos se parecen.
Tengo todavía algunos apuntes que se pueden compartir, pero sería bueno pasarle la idea a los moderadores del foro para ver si hubiese un modo de implementar un almacen de documentos libres para los foristas...

¿Qué opinan?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #11 (permalink)  
Antiguo 05/03/2010, 12:18
 
Fecha de Ingreso: enero-2010
Mensajes: 40
Antigüedad: 14 años, 2 meses
Puntos: 1
Respuesta: Como hacer un (sql o query) en mysql?

Saludos Pez_del_web Gracias por tu intervención "Excelente!"

Gnzsoloyo, Felicidades, veo que si asimilaste bien el tema en tus estudios, me parece excelente la idea que has dado para los forista y los planteamientos que has hecho han sido bien estructurados.

Por favor me gustaría enviarles una consulta, para que me orienten pues necesito saber si esta desarrollada para cumplir con un buena y eficiente arquitectura?

me ayudan? mi email es [email protected]

Espero respuesta...
  #12 (permalink)  
Antiguo 05/03/2010, 12:21
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Como hacer un (sql o query) en mysql?

Postea la consulta, con la estructura de tablas implicadas, si es posible.
Entre todos veremos cómo ayudarte.

No te puedo responder a tu e-mail porque eso va contra las reglas de Foros de Web; si tienes alguna duda más específica que desees tratar,siempre están los mensajes privados (MP)...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: query, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:18.