Entendido.

Este sitio utiliza cookies para analizar la navegación. Si continúa navegando se entiende que acepta su uso. Ver más detalles.";

Logo

Aprende Web

Crea y diseña tus sitios en la Web.

Manual de SQL

SQL es el lenguaje para trabajar con bases de datos en la web.


Y ahora tambien aprende a programar en C++ con Aprende Web C++

logo rss RSS. Suscribir canal.

Buscar en Aprende Web

Traducir página

Visita nuestro blog:

bolg.aprende-web.net

y entérate de las novedades o deja un comentario.

Dudas y sugerencias:

aprendeweb@aprende-web.net





Sobre ésta página

Ültima modificación: 29-01-2016.

Visitas este mes: 207

Visitas el mes pasado: 218

logo
WEB-GRAFÍA

Mi agradecimiento a las siguientes páginas Web. en las cuales me he basado para la elaboración de este manual:


Bases de datos
monografías.com
Curso MySQL
Curso MySQL de AulaFácil
MySQL con clase
conclase.net
Introducción a MySQL
ProgramacionWeb.net
Manual práctico de SQL
www.cepeu.edu.py
MySQL 5.0 Reference Manual
dev.mysql.com
SQL Tutorial
w3schools.com
Tutorial de SQL
desarrolloweb.com
Tutorial de SQL: Curso de SQL
sql.1keydata.com

Donativos

Si este sitio te parece interesante puedes contribuir con una pequeña aportación.




SQL (XI)

Relaciones

imagen sql

Datos de varias tablas relacionadas

En una base de datos las tablas pueden estar relacionadas entre sí. Esto permite poder seleccionar datos de varias tablas en una misma consulta. Veamos esto mediante un ejemplo: En la base "mi_musica" habíamos creado una relación entre la tabla "artistas" y la tabla "discos". Ahora podemos, gracias a esa relación seleccionar datos de las dos tablas que están relacionados. por ejemplo, seleccionar junto a un registro de "discos" los datos del registro de "artistas" con el que está relacionado.

Para ello utilizaremos la instrucción INNER JOIN que selecciona sólo aquellos registros de la tabla que están relacionados. La sentencia que utilizaremos será la siguiente:

SELECT discos.titulo, artistas.artista, discos.num_pistas, discos.info 
    FROM discos
    INNER JOIN artistas
    ON artistas.id_artistas=discos.ref_artista

analicemos la sentencia anterior en la que observamos varias novedades:

El resultado es que hemos seleccionado en una sóla consulta los datos de una tabla junto a los que tienen relación en la otra, tal como vemos a continuación:


titulo = Pájaros en la cabeza ... artista = Amaral ... num_pistas = 14 ... info = Cuarto disco de este artista, año 2005 ...

titulo = Brothers in arms ... artista = Dire Straits ... num_pistas = 9 ... info = Quinto disco de la banda ...

titulo = Money for Nothng ... artista = Dire Straits ... num_pistas = 12 ... info = Primer disco recopilación de la banda tras sus 5 discos anteriores. ...

titulo = Tubular Bells ... artista = Mike Oldfield ... num_pistas = 2 ... info = Primer disco de estudio del compositor ...

titulo = Tr3s lunas ... artista = Mike Oldfield ... num_pistas = 14 ... info = instrumental, Año 2002 ...


De forma genérica una consulta de datos en dos tablas relacionadas mediante INNER JOIN tiene la siguiente sintaxis:

SELECT tabla1.columna1, tabla1.columna2, tabla2.columna1, tabla2.columna2 
    FROM tabla1
    INNER JOIN tabla2
    ON tabla2.id_tabla2=tabla1.ref_tabla2

Donde "tabla1" y "tabla2", son el nombre de las tablas. "columna1", "columna2", ... son el nombre de las columnas, y "id_tabla2" , "ref_tabla2", son las columnas que relacionan las dos tablas.


Seleccionar con LEFT JOIN

En la consulta anterior se seleccionan sólo los datos que están relacionados en ambas tablas. Si hubiera datos en una tabla que no tuvieran relación con la otra éstos no aparecen en la consulta.

Por ejemplo, en la tabla "discos" anterior, si hubiera algún disco que no estuviera asignado a un artista, éste no aparecería. Si queremos ver, además de los datos que están relacionados, aquellos de la primera tabla que no tienen relación con la segunda, en lugar de utilizar INNER JOIN utilizaremos LEFT JOIN.

La sintaxis de la sentencia es exactamente igual, después de sustituirlos:

SELECT tabla1.columna1, tabla1.columna2, tabla2.columna1, tabla2.columna2 
    FROM tabla1
    LEFT JOIN tabla2
    ON tabla2.id_tabla2=tabla1.ref_tabla2

Además de los mismos registros seleccionados con INNER JOIN se seleccionan aquí los registros de la tabla 1 que no tienen relación en la tabla2. Los datos de la tabla2 correspondientes a estos últimos registros se quedarán en blanco.


Seleccionar con RIGHT JOIN

De forma similar a la instrucción anterior, con RIGHT JOIN se seleccionarán, además de los registros que están relacionados en las dos tablas, aquellos registros de la segunda tabla que no están relacionados con la primera tabla. Los datos indicados en la consulta que pertenezcan a la primera tabla, quedarán en blanco en estos últimos registros.

La sintaxis es similar a la de la instrucción anterior.

SELECT tabla1.columna1, tabla1.columna2, tabla2.columna1, tabla2.columna2 
    FROM tabla1
    RIGHT JOIN tabla2
    ON tabla2.id_tabla2=tabla1.ref_tabla2


Seleccionar con FULL JOIN

La instrucción FULL JOIN selecciona, además de los registros relacionados en las dos tablas, aquellos que no están relacionados, tanto en la primera tabla, como en la segunda. Los datos que no tengan correspondencia en la otra tabla aparecerán en blanco en las columnas de las consultas.

Su sintaxis es similar a la de las instrucciones anteriores:

SELECT tabla1.columna1, tabla1.columna2, tabla2.columna1, tabla2.columna2 
    FROM tabla1
    FULL JOIN tabla2
    ON tabla2.id_tabla2=tabla1.ref_tabla2


Selección varios de uno.

Supongamos ahora que en la base "mi_musica", queremos seleccionar sólo los discos de un artista. Es decir, en dos tablas que tienen una relación de uno a varios (un artista, varios discos) queremos ver los "varios" que se corresponden a un "uno".

Para ello utilizaremos la misma sentencia de INNER JOIN a la que le añadimos una condición WHERE. Por ejemplo, queremos ver los discos pertenecientes al artista 'Dire Straits'. Escribiremos la siguiente sentencia SQL:

SELECT discos.titulo, artistas.artista, discos.num_pistas, discos.info 
    FROM discos
    INNER JOIN artistas
    ON artistas.id_artistas=discos.ref_artista
    WHERE artistas.artista='Dire Straits'

La instrucción WHERE debe ponerse después de la instrucción INNER JOIN ... ON ya que de ponerla antes la sentencia no sería válida.

El resultado de la consulta anterior nos dará lo siguiente en nuestra base de datos.

titulo = Brothers in arms ... artista = Dire Straits ... num_pistas = 9 ... info = Quinto disco de la banda ...

titulo = Money for Nothng ... artista = Dire Straits ... num_pistas = 12 ... info = Primer disco recopilación de la banda tras sus 5 discos anteriores. ...



Insertar referencias

Volvemos ahora a un asunto que habíamos dejado pendiente al insertar registros en la tabla "discos". En esta tabla tenemos una columna llamada "ref_artista", cuyo valor debe ser igual al del la columna "id_artistas", de la tabla artistas.

El problema está, al insertar un nuevo disco, en cómo insertar el valor de la columna "ref_artistas".

Recuerda que en el formulario para insertar nuevo disco habíamos puesto para ello la siguiente línea:

<p>Num ref_artista: <input type="text" name="ref_artista" /></p>

Normalmente no sabemos el número de registro (id) que tiene un artista, sino el nombre, por lo que sustituiremos esta parte del formulario por una lista desplegable tipo "select" en la que aparezcan todos los artistas que tenemos en la tabla "artistas". Para ello necesitaremos insertar código PHP y SQL que crea la lista desplegable:

<?php 
$db=mysql_connect("localhost","root","");
mysql_select_db("mi_musica",$db);
$sql="SELECT id_artistas, artista FROM artistas";
$datos=mysql_query($sql,$db);
mysql_close($db);

echo "<p>Artista: <select name='ref_artista'>";
while ($row=mysql_fetch_assoc($datos)) {
   foreach ($row as $clave=>$valor) {
      if ($clave=="id_artistas") { $num=$valor; }
      if ($clave=="artista") { $art=$valor; }
      }
   echo "<option value='$num'>$art</option>";
   }
echo "</select></p>";
?>

En primer lugar, al llevar código PHP, la página del formulario debe guardarse con la extensión php (a no ser que lo insertemos mediante ajax).

Vemos ahora el código PHP. En él hay dos partes. La primera es la conexión con la base de datos, donde extraemos los datos de la tabla "artistas".

En la segunda creamos el desplegable "select", poniendo como opciones los diferentes registros de la tabla.

Observa como en cada opcion (etiqueta option), ponemos el "id_artistas" en el atributo "value", mientras que lo que mostramos en pantalla es el nombre del artista. Al enviar el formulario, los datos que se enviarán serán los del atributo "value", es decir, el "id_artista". Esto permitirá insertar este dato en la columna "ref_artistas" de la tabla "discos".

Si el disco corresponde a un artista que no está en la lista, entonces debemos insertar primero el artista en la tabla "artistas", y después volver al formulario de "discos", en el cual, tras recargar la página, aparecerá el nuevo artista.

Esto último debemos indicarlo en el formulario, diciendole al usuario que si el artista no está en la lista, debe insertar primero el artista con el formulario de "artistas" y después recargar la página del formulario "discos". Para facilitarle las cosas podemos ponerle también un enlace al formulario "artistas" y un botón para recargar la página.






En la siguiente página veremos las funciones de SQL que permiten realizar operaciones con los datos.

Funciones.



Manual de SQL

Anterior siguiente ... Siguiente siguiente


imprimir esta página

Página creada por ANYELGUTI.

Sugerencias: aprendeweb@aprende-web.net. Envia un manda un correo

Visita nuestro blog par saber en qué estamos trabajando: Aprende Web Blog

Más sobre anyelguti en http://anyelguti.16mb.com