28 - SELECT (Acceso a datos de varias tablas)


Para relacionar dos tablas debemos utilizar la sentencia join en el select; las tablas participantes se combinan según los campos comunes a ambas tablas.
Se emplea para obtener información de dos tablas y combinar dicha información en una salida.

Para ver su implementación resolveremos la consulta de un artículo por su código y mostraremos su descripción, precio y finalmente la descripción del rubro al que pertenece, este último dato lo rescatamos de la tabla rubros.

pagina1.html

<html>
<head>
<title>problema</title>
</head>
<body>
<form action="pagina1.asp" method="post">
Ingrese el código del artículo a consultar:
<input type="text" name="codigo"><br>
<input type="submit" value="Buscar"><br>
</form>
</body>
</html> 

Ahora veamos el archivo asp que hace la búsqueda en la base de datos (pagina1.asp)

<%option explicit%>
<html>
<head>
<title>problema</title>
</head>
<body>
<%
dim conexion
set conexion = Server.CreateObject("ADODB.Connection")
  conexion.ConnectionString = "Provider=SQLOLEDB.1;" & _
  "Data Source=.;" & _
  "Integrated Security=SSPI;" & _
  "Persist Security Info=False;" & _
  "Initial Catalog=wi630629_aspya"
conexion.Open
dim registros
set registros = Server.CreateObject("ADODB.RecordSet") 
registros.open "select ar.descripcion as descriarticulo, " & _ 
  "precio,ru.descripcion as descrirubro " & _
  "from articulos as ar " & _
  "join rubros as ru on ru.codigo=ar.codigorubro " & _
  "where ar.codigo=" & request.form("codigo") ,conexion
if not registros.eof then
  response.write("Descripción:" & registros("descriarticulo"))
  response.write("<br>")
  response.write("Precio:" & registros("precio"))
  response.write("<br>")
  response.write("Rubro:" & registros("descrirubro"))
  response.write("<br>")
else
  response.write("No existe ningún artículo con dicho código")
end if
conexion.close
%>
</body>
</html>

Veamos la sintaxis para hacer la combinación de las dos tablas:

registros.open "select ar.descripcion as descriarticulo, " & _ 
  "precio,ru.descripcion as descrirubro " & _
  "from articulos as ar " & _
  "join rubros as ru on ru.codigo=ar.codigorubro " & _
  "where ar.codigo=" & request.form("codigo") ,conexion

La sintaxis básica es:

 select CAMPOS
  from TABLA1
  join TABLA2 on CONDICIONdeCOMBINACION;

Analicemos la consulta de la página asp:
- especificamos los campos que aparecerán en el resultado en la lista de selección;
- indicamos el nombre de la tabla luego del "from" ("articulos") y su alias;
- combinamos esa tabla con "join" y el nombre de la otra tabla ("rubros"); se especifica qué tablas se van a combinar y cómo;
- cuando se combina información de varias tablas, es necesario especificar qué registro de una tabla se combinará con qué registro de la otra tabla, con "on". Se debe especificar la condición para enlazarlas, es decir, el campo por el cual se combinarán, que tienen en común.
"on" hace coincidir registros de ambas tablas basándose en el valor de tal campo, en el ejemplo, el campo "codigorubro" de "articulos" y el campo "codigo" de "rubros" son los que enlazarán ambas tablas. Se emplean campos comunes, que deben tener tipos de datos iguales.

Cuando rescatamos los datos de la consulta es importante notar que hacemos referencia a los alias creados para los campos:

if not registros.eof then
  response.write("Descripción:" & registros("descriarticulo"))
  response.write("<br>")
  response.write("Precio:" & registros("precio"))
  response.write("<br>")
  response.write("Rubro:" & registros("descrirubro"))
  response.write("<br>")
else

Tengamos en cuenta que creamos alias para los campos que se llaman iguales en ambas tablas y que generan conflictos en el gestor de base de datos, al no saber que campo debe rescatar.


Retornar