Duda con SQL
Duda con SQL
Buenas! No he visto un subforo para SQL, aasique posteo aqui ya que tengo un poco de urgencia. Si hace falta luego lo borro o se mueve.
Para los que controlen SQL, se puede crear una tabla con columnas que provengan de otras tabalas?
Por ejemplo: tengo 2 tablas, pedidos y precios. En pedidos tengo los productos que ha pedido el cliente. En precios tengo el valor de cada producto.
¿¿Puedo crear una tabla que coja los productos de pedidos, despues coja el precio de esos productos de precios???, y luego ya sumas y tal...
Gracias!!
Para los que controlen SQL, se puede crear una tabla con columnas que provengan de otras tabalas?
Por ejemplo: tengo 2 tablas, pedidos y precios. En pedidos tengo los productos que ha pedido el cliente. En precios tengo el valor de cada producto.
¿¿Puedo crear una tabla que coja los productos de pedidos, despues coja el precio de esos productos de precios???, y luego ya sumas y tal...
Gracias!!
Re: Duda con SQL
Se puede hacer, pero no sería lo más óptimo y habría redundancia de información. Quizás lo más claro sería tener:
Tabla productos: identificador_producto, producto, precio
Tabla pedidos: id_pedido, id_producto
En el caso de que tengas que hacer sumas para ver el total de un pedido, sería uniendo las tablas mediante consulta con un inner join, en su defecto con una subconsulta
Tabla productos: identificador_producto, producto, precio
Tabla pedidos: id_pedido, id_producto
En el caso de que tengas que hacer sumas para ver el total de un pedido, sería uniendo las tablas mediante consulta con un inner join, en su defecto con una subconsulta
Re: Duda con SQL
Ok, yo lo que quería era hacer una tabla "Factura, en la que se reflejase el pedido, lo que compne el pedido, lo que cuesta cada producto y el total.. pero alfinal creo que lo hare copiando datos. Mi mente no está muy acostumbrada a SQL y me pienso que más o menos se puede jugar como con C y no...
Muchas gracias !!!
Muchas gracias !!!
Re: Duda con SQL
Si el programa es para ponerlo en producción y va a manejar una gran cantidad de datos es mejor no hacer subconsultas, ya que consumen muchos más recursos y son más lentas.
Respecto a la estructura lo ideal es como te comenta Zoltelder.
Si aún así sigues con tu idea de hacer la tabla así, puedes hacer un SELECT ..... INSERT.
Respecto a la estructura lo ideal es como te comenta Zoltelder.
Si aún así sigues con tu idea de hacer la tabla así, puedes hacer un SELECT ..... INSERT.
Re: Duda con SQL
EJemplo con SQL estándar:
PEDIDOS
ID_USUARIO | ID_PRODUCTO | CANTIDAD | FECHA
Manolete | 1 | 1 | 01/01/2010
Manolete | 2 | 1 | 01/01/2010
Vanesa | 2 | 12 | 01/01/2010
PRECIOS
ID_PRODUCTO | DESCRIPCION_CORTA | PRECIO_E
1 | Tanga a lunares | 12
2 | Tanga a rayas | 10
Consulta SQL para calcular el precio total del pedido para hoy 01/01/2010, de Manolete:
SELECT SUM(T1.CANTIDAD*T2.PRECIO_E) AS TOTAL
FROM PEDIDOS T1, PRECIOS T2
WHERE T1.ID_PRODUCTO = T2.ID_PRODUCTO AND T1.FECHA = '01/01/2010' AND T1.ID_USUARIOS = 'Manolete'
Para listar todo el listado de Manolete
SELECT *
FROM PEDIDOS T1, PRECIOS T2
WHERE T1.ID_PRODUCTO = T2.ID_PRODUCTO AND T1.FECHA = '01/01/2010' AND T1.ID_USUARIOS = 'Manolete'
Lista de los precios totales de todos los usuarios:
SELECT ID_USUARIOS, SUM(T1.CANTIDAD*T2.PRECIO_E) AS TOTAL
FROM PEDIDOS T1, PRECIOS T2
WHERE T1.ID_PRODUCTO = T2.ID_PRODUCTO AND T1.FECHA = '01/01/2010'
GROUP BY ID_USUARIOS
No necesitas tablas intermedias... en caso de que quieras hacer una... puedes rellenarla con un SELECT ... INSERT
Al igual que puedes hacer la suma con SUM, puedes hacer la media mensual del gasto, con AVG, y muchas otras operaciones aritméticas.
Saludos!
PEDIDOS
ID_USUARIO | ID_PRODUCTO | CANTIDAD | FECHA
Manolete | 1 | 1 | 01/01/2010
Manolete | 2 | 1 | 01/01/2010
Vanesa | 2 | 12 | 01/01/2010
PRECIOS
ID_PRODUCTO | DESCRIPCION_CORTA | PRECIO_E
1 | Tanga a lunares | 12
2 | Tanga a rayas | 10
Consulta SQL para calcular el precio total del pedido para hoy 01/01/2010, de Manolete:
SELECT SUM(T1.CANTIDAD*T2.PRECIO_E) AS TOTAL
FROM PEDIDOS T1, PRECIOS T2
WHERE T1.ID_PRODUCTO = T2.ID_PRODUCTO AND T1.FECHA = '01/01/2010' AND T1.ID_USUARIOS = 'Manolete'
Para listar todo el listado de Manolete
SELECT *
FROM PEDIDOS T1, PRECIOS T2
WHERE T1.ID_PRODUCTO = T2.ID_PRODUCTO AND T1.FECHA = '01/01/2010' AND T1.ID_USUARIOS = 'Manolete'
Lista de los precios totales de todos los usuarios:
SELECT ID_USUARIOS, SUM(T1.CANTIDAD*T2.PRECIO_E) AS TOTAL
FROM PEDIDOS T1, PRECIOS T2
WHERE T1.ID_PRODUCTO = T2.ID_PRODUCTO AND T1.FECHA = '01/01/2010'
GROUP BY ID_USUARIOS
No necesitas tablas intermedias... en caso de que quieras hacer una... puedes rellenarla con un SELECT ... INSERT
Al igual que puedes hacer la suma con SUM, puedes hacer la media mensual del gasto, con AVG, y muchas otras operaciones aritméticas.
Saludos!
Re: Duda con SQL
Muchas gracias, voy a hacerlo así, las tablas separadas y cuando se necesiten datos, subconsultas. Muchas gracias!
Re: Duda con SQL
más que subconsultas, el uso inner join, ya que como te ha dicho ghost, son más lentas
Re: Duda con SQL
Zoltelder escribió:más que subconsultas, el uso inner join, ya que como te ha dicho ghost, son más lentas
ok, he encontrado un manual de SQL, aprendere a usar el inner join jeje
Re: Duda con SQL
Inner Join, Left Join, etc ... Yo personalmente uso más el left join, pero supongo que dependerá de los gustos y de las formas de trabajar de cada uno.