Tutorial SQL – Recuperar Datos de Tablas Relacionadas


Tutorial Java

Recuperar información de la Base de Datos que se encuentran en diferentes tablas al mismo tiempo, es un de las tareas más realizadas cuando creas una Aplicación.

Estoy hablando por supuesto de bases de datos que poseen un diseño bien definido y que cumple con las reglas de normalización.

En éste breve artículo aprenderás a recuperar y mostrar Datos de más de una tabla a la vez realizando consultas directas a la base de datos.

En el Modelo de Datos del Sistema de Biblioteca, podemos tomar varios ejemplos de relaciones para realizar la consulta de datos y extraer información combinada de más de una tabla.

Una de éstas relaciones es la establecida entre los Clientes y las Ciudades.

Relación Clientes – Ciudades

El caso típico es la relación existente entre Clientes y Ciudades, ya que como sabes en la tabla clientes se guardan sólo el código de la ciudad a la cual pertenece cada cliente y no el nombre por lo que si queremos mostrar el nombre de la ciudad tendríamos que buscar en la tabla Ciudades.

Debido a que la relación entre tablas se establece a nivel de campos, lo que te recomiendo como regla general antes de armar tu sentencia SQL es que conozcas cuáles son los campos que hacen parte de la relación.

Una vez identificado los campos, la implementación de la sentencia SQL será exageradamente sencilla.

En la relación mencionada, se puede notar claramente que el campo ciu_codigo y el campo cli_ciudad son los campos que hacen posible la relación entre Ciudades y Clientes.

Así que, por ejemplo si deseamos recuperar el nombre de todos los clientes y el nombre de la ciudad donde ellos residen, podríamos escribir la siguiente sentencia SQL

SELECT cli_nombre, ciu_nombre FROM clientes, ciudades WHERE ciu_codigo=cli_ciudad;

Nota que despues del SELECT incluimos directamente los campos que deseamos recuperar, independientemente de la tabla donde éstos se encuentren.

Luego de la clausula FROM incluimos el nombre de las tablas, separadas por comas, desde donde deseamos recuperar dicha información.

Y por último, la expresión de relación (ciu_codigo=cli_ciudad) que hará la magia de unir los datos de una tabla con la otra, la cual debe ir como condición en la clausula WHERE

Esto hacemos para indicar que sólo se deben recuperar los registros que coincidan con la relación, es decir que a cada cliente su ciudad. (Por eso la importancia de conocer los campos de la relación antes)

Si no utilizamos dicha expresión de relación en clausula WHERE tendremos la seguridad de que vendrán datos incorrectos, pues se recuperarían todos los campos de clientes mas todos los datos de ciudades.

Luego de eso tu puedes agregar al WHERE más expresiones de filtro ya sea utilizando operadores AND u OR.

Por Ejemplo:

SELECT cli_nombre, ciu_nombre FROM clientes, ciudades WHERE ciu_codigo=cli_ciudad AND cli_obs != ”;

Recupera solamente el nombre del cliente y nombre de la ciudad que poseean algun tipo de observación almacenada.

Cualquier sugerencia o duda por favor escribeme un comentario.

Un cordial Saludo.

Esta entrada fue publicada en Tutorial SQL- Ejemplos prácticos. Guarda el enlace permanente.

13 respuestas a Tutorial SQL – Recuperar Datos de Tablas Relacionadas

  1. Ricardo dijo:

    Hola Quiero saber si no tienes el codigo el la recuperacion de la base de datos gracias

  2. Oscar Careaga dijo:

    hola profe que tal, viste que estoy haciendo el trabajo de info IV en la facu, y acá tengo un problema justo enla relación de tablas creo..este es el error:

    Exception in thread “main” java.sql.SQLException: Duplicate entry ‘1’ for key 1
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2921)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1570)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1665)
    at com.mysql.jdbc.Connection.execSQL(Connection.java:2972)
    at com.mysql.jdbc.Connection.execSQL(Connection.java:2902)
    at com.mysql.jdbc.Statement.executeUpdate(Statement.java:929)
    at com.progress.bd.ControladorBD.execute(ControladorBD.java:151)
    at com.sysschool.sesiones.SesionInscripcionMovimiento.insertarInscripcion(SesionInscripcionMovimiento.java:21)
    at com.sysschool.sesiones.SesionInscripcionMovimiento.guardarInscripcion(SesionInscripcionMovimiento.java:58)
    at com.sysschool.sesiones.SesionInscripcionMovimiento.main(SesionInscripcionMovimiento.java:67)
    –>jdbc:mysql://localhost/syschoolbd – root – 123456
    Conexion realizada con exito!!
    20/03/2011 11:21:04, @1608e05, SELECT * FROM inscripcion,alumno,curso,secciones WHERE ain_alum=alu_codi AND ain_curs=cur_codi AND ain_secc=sec_codi AND ain_matr=1
    20/03/2011 11:21:04, @1608e05, BEGIN TRANSACTION
    20/03/2011 11:21:04, @1608e05, ROLLBACK

    Pero lo que me es raro,.mi insertar funciona perfectamente,..solo que al intentar usar en mi método guardar, como ya existe el código 1 debería de actualizar,..pero no lo hace. desde ya gracias Marcos!!

    • Ivan Grandi dijo:

      Tenes que fijarte que si ya existe el código en ves de un INSERT es un UPDATE. Busca en google los parametros de la sentencia UPDATE y listo.

      Saludos

  3. Emi dijo:

    hola tengo un problema que resolver me tengo dos tablas relacionadas (equipo y jugadores) un equipo puede tener varios jugadores un jugador solo pertenece a un equipo. Ahora como consulto que equipo tiene mas jugadores!!
    Gracias

  4. Edilmar dijo:

    Marcos por ahi detecte un error en la primer consulta “SELECT cli_nombre, ciu_nombre FROM clientes, ciudades WHERE ciu_codigo=cli_ciudad;”

    “ciu_nombre”, es incorrecto, era ciu_descripcion no?

  5. oscar dijo:

    buenos dias, estoy haciendo por mi cuenta un “sistema” para el trabajo que me agilice el tema de ingresar datos a una bd por medio de una aplicacion swing. los videos me ayudan muchisimo hasta ahora solo aprendi C y C++ y quiero meterme con java a fondo! puede enviarse el dato que se escribio en un jtextfield a una columna de un jtable pero sin pasar por la base de datos sino como paso previo para luego insertarlo en la misma?

    algo asi como un visor de los datos que ingreso al apretar el boton agregar. y que me permita modificar y borrar!

    gracias

  6. Jorge dijo:

    Un cordial saludo Marco: quiero felicitarte por la calidad de excelencia q tienes en tu blog y te digo la verdad q es la mejor, ahora estoy empezando a programar con java pero segun lo q explicastes no lo entiendo mucho, el codigo fuente no se como aplicarlo jejejje…no se si podrias poner un video para entender mejor….gracias de antemano.

    Saludos.

  7. Marcelo Ramírez dijo:

    Una consulta,

    ¿No es necesario utilizar INNER JOIN en la consulta sql, cuando recuperas datos de tablas relacionadas?

    Un saludo!; excelente sitio!

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s