Joins
FACULTAD DE INGENIERIA MECANICA Y ELECTRICA
Base de datos y Lenguajes
______________________________
José Eduardo González Badillo Mat: 1383800
José de Jesús Mireles Hernández Mat: 1119642
Hora: N4
Salón: 2301
San Nicolás de los Garza. NL. 11-Mayo-2011
JOIN
La sentencia join en SQL permitecombinar registros de dos o más tablas en una base de datos relacional. En el Lenguaje de Consultas Estructurado (SQL), hay tres tipo de JOIN: interno, externo, y cruzado.
En casos especiales una tabla puede unirse a sí misma, produciendo una auto-combinación, SELF-JOIN.
Matemáticamente, JOIN es composición relacional, la operación fundamental en el álgebra relacional, y generalizando es unafunción de composición.
Consultas combinadas.
Habitualmente cuando necesitamos recuperar la información de una base de datos nos encontramos con que dicha información se encuentra repartida en varias tablas, referenciadas a través de varios códigos. De este modo si tuviéramos una tabla de ventas con un campo cliente, dicho campo contendría el código del cliente de la tabla de cliente.
Sin embargo está forma de almacenar la información no resulta muy útil a la hora de consultar los datos.SQL nos proporciona una forma fácil de mostrar la información repartida en varias tablas, las consultas combinadas o JOINS.
Las consultas combinadas pueden ser de tres tipos:
* Combinación interna
* Combinación externa
* Uniones
Combinación interna.
La combinación internanos permite mostrar los datos de dos o más tablas a través de una condición WHERE.
Si recordamos los ejemplos de los capítulos anteriores tenemos una tabla de coches, en la que tenemos referenciada la marca a través del código de marca. Para realizar la consulta combinada entre estas dos tablas debemos escribir una consulta SELECT en cuya cláusula FROM escribiremos el nombre de las dostablas, separados por comas, y una condición WHERE que obligue a que el código de marca de la tabla de coches sea igual al código de la tabla de marcas.
Lo más sencillo es ver un ejemplo directamente:
SELECT tCoches.matricula,
tMarcas.marca,
tCoches.modelo,
tCoches.color,
tCoches.numero_kilometros, tCoches.num_plazas
FROM tCoches, tMarcas
WHERE tCoches.marca = tMarcas.codigo |
La misma consulta de forma "visual"
Demonos cuenta que hemos antepuesto el nombre de cada tabla al nombre del campo, esto no es obligatorio si los nombres de campos no se repiten en las tablas, pero es aconsejable para evitar conflictos de nombres entre campos. Por ejemplo, si para referirnos al campo marca noanteponemos el nombre del campo la base de datos no sabe si queremos el campo marca de la tabla tCoches, que contiene el código de la marca, o el campo marca de la tabla tMarcas, que contiene el nombre de la marca.
Otra opción es utilizar la cláusula INNER JOIN. Su sintaxis es idéntica a la de una consulta SELECT habitual, con la particularidad de que en la cláusula FROM sólo aparece una tablao vista, añadiéndose el resto de tablas a través de cláusulas INNER JOIN.
SELECT [ALL | DISTINCT ]
<nombre_campo> [{,<nombre_campo>}]
FROM <nombre_tabla>
[{INNER JOIN <nombre_tabla> ON <condicion_combinacion>}]
[WHERE <condicion> [{ AND|OR <condicion>}]]
[GROUP BY <nombre_campo> [{,<nombre_campo >}]][HAVING <condicion>[{ AND|OR <condicion>}]]
[ORDER BY <nombre_campo>|<indice_campo> [ASC | DESC]
[{,<nombre_campo>|<indice_campo> [ASC | DESC ]}]] |
El ejemplo anterior escrito utilizando la clausula INNER JOIN quedaría de la siguiente manera:
SELECT tCoches.matricula,
tMarcas.marca, ...
Regístrate para leer el documento completo.