Duda con SQL

Responder
TrIpeR
Mensajes: 963
Registrado: 07 Feb 2007 21:18
Ubicación: Madrid

Duda con SQL

Mensaje por TrIpeR »

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!!
Avatar de Usuario
Zoltelder
Mensajes: 4727
Registrado: 02 Feb 2007 19:59
Ubicación: Badajoz

Re: Duda con SQL

Mensaje por Zoltelder »

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
Icono de PC  PC Gamer Desplegar firma
  • Procesador
    Intel i5 750 3.8GHz
  • Placa base
    Asus P7P55D PRO
  • RAM
    GSkill Trident 4GB 1600Mhz
  • Tarjeta gráfica
    Gigabyte 5850
  • Disco Duro
    SSD Crucial M4 128GB / WD CB 1TB / WD CB 500GB
  • Unidad Óptica
    -
  • Refrigeración
    Noctua NH-U12P SE2
  • Fuente alimentación
    Corsair HX 650
  • Caja
    Antec Twelve Hundred
  • Sonido
    Creative X-Fi Titanium
  • Sistema operativo
    Windows 7 Ultimate 64 bits
  • Monitor
    LG W2453V-PF
  • Teclado
    Logitech Wave
  • Ratón
    Logitech G9x
  • Otros
    Sennheiser PC350
  • Otros
    -
Ocultar
TrIpeR
Mensajes: 963
Registrado: 07 Feb 2007 21:18
Ubicación: Madrid

Re: Duda con SQL

Mensaje por TrIpeR »

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 !!!
Avatar de Usuario
Ghost
Site Admin
Mensajes: 6344
Registrado: 16 Ene 2007 23:18
Ubicación: Planeta Tierra
Contactar:

Re: Duda con SQL

Mensaje por Ghost »

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.
Icono de PC  Equipo de pruebas Desplegar firma
  • Procesador
    Intel Core i7 [email protected]
  • Placa base
    ASUS Rampage IV Formula
  • RAM
    16Gb Corsair Dominator Platinum 2133Mhz
  • Tarjeta gráfica
    AMD Radeon HD 7970 3Gb
  • Disco Duro
    Seagate 2Tb
  • Unidad Óptica
    Liteon I-HAS 124B
  • Refrigeración
    Corsair H110
  • Fuente alimentación
    Corsair AX860i
  • Caja
    NZXT Switch 810
  • Sonido
    Creative X-FI Platinum HD
  • Sistema operativo
    Windows 7 64bits
  • Monitor
    Dell U2412P
  • Teclado
    Corsair K90
  • Ratón
    SteelSeries XAI
  • Otros
    SteelSeries 5H V2
  • Otros
    Corsair Neutron GTX 240Gb
Ocultar
Avatar de Usuario
ari0k0
Mensajes: 634
Registrado: 11 Ago 2008 17:32
Ubicación: Mérida (Badajoz)
Contactar:

Re: Duda con SQL

Mensaje por ari0k0 »

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!
TrIpeR
Mensajes: 963
Registrado: 07 Feb 2007 21:18
Ubicación: Madrid

Re: Duda con SQL

Mensaje por TrIpeR »

Muchas gracias, voy a hacerlo así, las tablas separadas y cuando se necesiten datos, subconsultas. Muchas gracias!
Avatar de Usuario
Zoltelder
Mensajes: 4727
Registrado: 02 Feb 2007 19:59
Ubicación: Badajoz

Re: Duda con SQL

Mensaje por Zoltelder »

más que subconsultas, el uso inner join, ya que como te ha dicho ghost, son más lentas
Icono de PC  PC Gamer Desplegar firma
  • Procesador
    Intel i5 750 3.8GHz
  • Placa base
    Asus P7P55D PRO
  • RAM
    GSkill Trident 4GB 1600Mhz
  • Tarjeta gráfica
    Gigabyte 5850
  • Disco Duro
    SSD Crucial M4 128GB / WD CB 1TB / WD CB 500GB
  • Unidad Óptica
    -
  • Refrigeración
    Noctua NH-U12P SE2
  • Fuente alimentación
    Corsair HX 650
  • Caja
    Antec Twelve Hundred
  • Sonido
    Creative X-Fi Titanium
  • Sistema operativo
    Windows 7 Ultimate 64 bits
  • Monitor
    LG W2453V-PF
  • Teclado
    Logitech Wave
  • Ratón
    Logitech G9x
  • Otros
    Sennheiser PC350
  • Otros
    -
Ocultar
TrIpeR
Mensajes: 963
Registrado: 07 Feb 2007 21:18
Ubicación: Madrid

Re: Duda con SQL

Mensaje por TrIpeR »

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
Avatar de Usuario
Ghost
Site Admin
Mensajes: 6344
Registrado: 16 Ene 2007 23:18
Ubicación: Planeta Tierra
Contactar:

Re: Duda con SQL

Mensaje por Ghost »

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.
Icono de PC  Equipo de pruebas Desplegar firma
  • Procesador
    Intel Core i7 [email protected]
  • Placa base
    ASUS Rampage IV Formula
  • RAM
    16Gb Corsair Dominator Platinum 2133Mhz
  • Tarjeta gráfica
    AMD Radeon HD 7970 3Gb
  • Disco Duro
    Seagate 2Tb
  • Unidad Óptica
    Liteon I-HAS 124B
  • Refrigeración
    Corsair H110
  • Fuente alimentación
    Corsair AX860i
  • Caja
    NZXT Switch 810
  • Sonido
    Creative X-FI Platinum HD
  • Sistema operativo
    Windows 7 64bits
  • Monitor
    Dell U2412P
  • Teclado
    Corsair K90
  • Ratón
    SteelSeries XAI
  • Otros
    SteelSeries 5H V2
  • Otros
    Corsair Neutron GTX 240Gb
Ocultar
Responder