Home Bases de Datos MySQL Consultas avanzadas

PostHeaderIcon Consultas avanzadas

Usar puntuación: / 16
MaloBueno 

En MySQL, todas las consultas generan tablas, bien sean tabls de varios registros y varios campos, bien de un solo registro, bien de un valor. Además sabe diferenciar cuando se trata de un único valor, cuando de una fila y cuando de una tabla más avanzada.

Es importante tener esto en cuenta para entender que se pueden combinar varias instrucciones distintas. Veamos algunos casos:

 

 

Se podría insertar en una tabla, a partir de valores de otra, incluso con operaciones matemáticas y valores literales juntos de la siguiente manera:

INSERT INTO nombre_tabla (columna1, columna2…)

SELECT columna1, columna2…

FROM nombre_tabla2

Resto de cláusulas;

INSERT INTO nombre_tabla

SELECT *

FROM nombre_tabla2

Resto de cláusulas

Veamos un ejemplo:

INSERT INTO ALUMNOS (NOMBRE, DIRECCIÓN, FECHA_NACIMIENTO, SEXO , EXTRANJERO)

VALUES ('PABLO MÉNDEZ', SELECT DIRECCION FROM ALUMNOS WHERE NOMBRE = 'ALFREDO MÉNDEZ', MAX(FECHA_NACIMIENTO), 'HOMBRE', 'NO');

El nombre del alumno es una constante (Pablo Méndez), así como su sexo y si es extranjero

La dirección es la misma que la de Alfredo Méndez

La fecha de nacimiento es la mayor de las fechas de nacimiento que existan en la tabla

EJEMPLO:

— La tabla EMPLE30 tiene los mismos datos que EMPLE. Insertarle a la tabla EMPLE30 los empleados del departamento 30.

INSERT INTO EMPLE30 (EMP_NO, NOMBRE, OFICIO, FECHA_ALTA, SALARIO, COMISIÓN, DEPT_NO)

SELECT (EMP_NO, NOMBRE, OFICIO, FECHA_ALTA, SALARIO, COMISIÓN, DEPT_NO)

FROM EMPLE

WHERE DEPT_NO = 30;

o posiblemente más sencillo

INSERT INTO EMPLE30

SELECT * FROM EMPLE WHERE DEPT_NO=30;

De la misma manera que podemos insertar datos con un SELECT también podríamos actualizarlos. Existen 3 posibilidades

UPDATE nombre_tabla

SET columna1=valor1, columna2 = valor2…

WHERE columna3= (SELECT…);

 

UPDATE nombre_tabla

SET columna1, columna2... = (SELECT col1, col2…)

WHERE condición;

 

UPDATE nombre_tabla

SET columna1 = (SELECT col1…), columna2= (SELECT col2…)

WHERE condición;

 

Veamos algunos ejemplos:

— En la tabla centros igualar la dirección y el número de plazas del centro 10 a los valores correspondientes del centro 50.

UPDATE CENTROS

SET (DIRECCION, NUM_PLAZAS)=

     (SELECT DIRECCION, NUM_PLAZAS

     FROM CENTROS

     WHERE COD_CENTRO = 50)

WHERE COD_CENTRO=10;

 

— Para todos los empleados de la tabla EMPLE y del departamento de Contabilidad, cambiar su salario al doble del salario de José Gil Pérez y ponemos su apellido en Mayúsculas.

UPDATE EMPLE

SET APELLIDO = UPPER (APELLIDO), SALARIO =

     (SELECT SALARIO*2

     FROM EMPLE

     WHERE NOMBRE=‘José Gil Pérez’)

     WHERE DEPT_NO =

          (SELECT DEPT_NO

          FROM DEPART

          WHERE DNOMBRE = ‘CONTABILIDAD’);

 

  • En la tabla EMPLE cambiar el salario a la mitad y la comisión a 0 a aquellos empleados que pertenezcan al departamento con mayor número de empleados.

UPDATE EMPLE

SET SALARIO=SALARIO/2, COMISION=0,

WHERE DEPT_NO =

     (SELECT DEPT_NO FROM EMPLE GROUP BY DEPT_NO HAVING COUNT(*) =

          (SELECT MAX(COUNT(*)) FROM EMPLE GROUP BY DEPT_NO));

 

El secreto de todas estas instrucciones no es otro que saber qué se quiere y dónde está. Los valores literales son eso: literales; Los valores que salen de otro registro (de la misma o de distinta tabla) salen de un SELECT; Los valores que incluyen una función (máximo, mínimo, mayúsculas, count...) salen del resultado de esa misma función.

 

Comentarios   

 
0 #2 Administrator 26-09-2017 08:08
Cito a roman antonio:
hola buenos dias oye queria saber si me podrias ayudar a resolver un problemilla que tengo bueno
estamos elaborando un proyecto por parte de la universidad y mi probelma es que quiero hacer una consulta en mysql esta es mi sentencia que estoy manejando

selext * from modulo_de_importacion where fecha >= '2017/03/15 and fecha


Por el momento le falta una comilla después de la fecha

Saludos
Citar
 
 
0 #1 roman antonio 26-05-2017 13:39
hola buenos dias oye queria saber si me podrias ayudar a resolver un problemilla que tengo bueno
estamos elaborando un proyecto por parte de la universidad y mi probelma es que quiero hacer una consulta en mysql esta es mi sentencia que estoy manejando

selext * from modulo_de_impor tacion where fecha >= '2017/03/15 and fecha
Citar
 

Escribir un comentario


Código de seguridad
Refescar

PostHeaderIcon Más Comentado

PostHeaderIcon Últimos Comentarios

mod_vvisit_countermod_vvisit_countermod_vvisit_countermod_vvisit_countermod_vvisit_countermod_vvisit_countermod_vvisit_counter
mod_vvisit_counterHoy1493
mod_vvisit_counterAyer1493
mod_vvisit_counterEsta semana10792
mod_vvisit_counterLa semana pasada10142
mod_vvisit_counterEste mes27350
mod_vvisit_counterEl mes pasado44972
mod_vvisit_counterTodos los días1432920

We have: 152 guests online
Hoy es: Dic 16, 2017