SlideShare una empresa de Scribd logo

        
        




                            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 o Agrupadas




                               COMBINACIÓN INTERNA.

               La combinación interna nos permite mostrar los datos de dos o más tablas a
través de una condición WHERE.

              Para realizar la consulta combinada entre estas dos tablas debemos escribir una
consulta SELECT en cuya clausula FROM escribiremos el nombre de las dos tablas, 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" ...




                Démonos 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 no anteponemos 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.




                                 COMBINACIÓN EXTERNA

   La combinación interna es excluyente. Esto quiere decir que si un registro no cumple la
condición de combinación no se incluye en los resultados. De este modo en el ejemplo anterior
si un coche no tiene grabada la marca no se devuelve en mi consulta.

   Según la naturaleza de nuestra consulta esto puede ser una ventaja, pero en otros casos
significa un serio problema. Para modificar este comportamiento SQL pone a nuestra
disposición la combinación externa. La combinación externa no es excluyente.

  La sintaxis es muy parecida a la combinación interna,



      SELECT [ALL | DISTINCT ]
                   <nombre_campo> [{,<nombre_campo>}]
      FROM <nombre_tabla>
      [{LEFT|RIGHT OUTER 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 ]}]]
La combinación externa puede ser diestra o siniestra, LEFT OUTER JOIN o RIGHT OUTER
JOIN. Con LEFT OUTER JOIN obtenemos todos los registros de en la tabla que situemos a
la izquierda de la clausula JOIN, mientras que con RIGHT OUTER JOIN obtenemos el efecto
contrario.

  Como mejor se ve la combinación externa es con un ejemplo.



       SELECT tCoches.matricula,
              tMarcas.marca,
              tCoches.modelo,
              tCoches.color,
              tCoches.numero_kilometros,
              tCoches.num_plazas
       FROM tCoches
       LEFT OUTER JOIN tMarcas ON tCoches.marca = tMarcas.codigo


   Esta consulta devolverá todos los registros de la tabla tCoches, independientemente de que
tengan marca o no. En el caso de que el coche no tenga marca se devolverá el valor null para
los campos de la tabla tMarcas.

  Visualmente (la consulta devuelve los datos en azul) ...




  El mismo ejemplo con RIGHT OUTER JOIN.



       SELECT tCoches.matricula,
              tMarcas.marca,
              tCoches.modelo,
              tCoches.color,
              tCoches.numero_kilometros,
              tCoches.num_plazas
       FROM tCoches
       RIGHT OUTER JOIN tMarcas ON tCoches.marca = tMarcas.codigo


   Esta consulta devolverá los registros de la tabla tCoches que tengan marca relacionada y
todos los registros de la tabla tMarcas, tengan algún registro en tCoches o no.

  Visualmente (la consulta devuelve los datos en azul) ...
COMBINACION DE UNION O AGRUPADAS

  La cláusula UNION permite unir dos o más conjuntos de resultados en uno detrás del otro
como si se tratase de una única tabla. De este modo podemos obtener los registros de más de
una tabla "unidos".

   La sintaxis corresponde a la de varias SELECT unidas a través de UNION, como se muestra
a continuación:



      SELECT [ALL | DISTINCT ]
                   <nombre_campo> [{,<nombre_campo>}]
      FROM <nombre_tabla>
      [{LEFT|RIGHT OUTER JOIN <nombre_tabla> ON
      <condicion_combinacion>}]
      [WHERE <condicion> [{ AND|OR <condicion>}]]
      [GROUP BY <nombre_campo> [{,<nombre_campo >}]]
      [HAVING <condicion>[{ AND|OR <condicion>}]]
      {
      UNION [ALL | DISTINCT ]
      SELECT [ALL | DISTINCT ]
                   <nombre_campo> [{,<nombre_campo>}]
      FROM <nombre_tabla>
      [{LEFT|RIGHT OUTER 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 ]}]]


  Para utilizar la clausula UNION debemos cumplir una serie de normas.

Las consultas a unir deben tener el mismo número campos, y además los campos deben ser del
mismo tipo.
Sólo puede haber una única clausula ORDER BY al final de la sentencia SELECT.

  El siguiente ejemplo muestra el uso de UNION



SELECT tCoches.matricula,
       tMarcas.marca,
       tCoches.modelo,
tCoches.color,
         tCoches.numero_kilometros,
         tCoches.num_plazas
FROM tCoches
INNER JOIN tMarcas ON tCoches.marca = tMarcas.codigo
UNION
SELECT tMotos.matricula,
         tMarcas.marca,
         tMotos.modelo,
         tMotos.color,
         tMotos.numero_kilometros,
         0
FROM tMotos
INNER JOIN tMarcas ON tMotos.marca = tMarcas.codigo;
Puede observarse el uso de la constante cero en la segunda lista de selección para hacer coincidir
el número y tipo de
campos que devuelve la consulta UNION.

Más contenido relacionado

La actualidad más candente

Ecuaciones Diferenciales Lineales de Primer Orden
Ecuaciones Diferenciales Lineales de Primer OrdenEcuaciones Diferenciales Lineales de Primer Orden
Ecuaciones Diferenciales Lineales de Primer Orden
Ruben Dario Lara Escobar
 
Modelo Entidad Relación
Modelo Entidad RelaciónModelo Entidad Relación
Modelo Entidad Relación
josecuartas
 
Matlab integración numérica, método del trapecio
Matlab integración numérica, método del trapecioMatlab integración numérica, método del trapecio
Matlab integración numérica, método del trapecio
Tensor
 
Guía sobre integral indefinida
Guía sobre integral indefinidaGuía sobre integral indefinida
Guía sobre integral indefinidaangiegutierrez11
 
Método del trapecio - grupo 5 UNI profe Naupay
Método del trapecio - grupo 5 UNI profe NaupayMétodo del trapecio - grupo 5 UNI profe Naupay
Método del trapecio - grupo 5 UNI profe Naupay
gemc12
 
ensayo unidad 4. luis.pdf
ensayo unidad 4. luis.pdfensayo unidad 4. luis.pdf
ensayo unidad 4. luis.pdf
LuisSaulRuizSampayp
 
Ejercicio de distribución binomial
Ejercicio de distribución binomialEjercicio de distribución binomial
Ejercicio de distribución binomial
Enrique Vasquez
 
Unidad5. algebra relacional. yama.may.joseluis.j4
Unidad5. algebra relacional. yama.may.joseluis.j4Unidad5. algebra relacional. yama.may.joseluis.j4
Unidad5. algebra relacional. yama.may.joseluis.j4LuiS YmAY
 
Estructuras de control
Estructuras de  controlEstructuras de  control
Estructuras de control
mellcv
 
Interpolacion y Regresion - R. Campillo
Interpolacion y Regresion - R. CampilloInterpolacion y Regresion - R. Campillo
Interpolacion y Regresion - R. Campillo
Rafael Campillo Rodriguez
 
Prueba de independencia (arriba y abajo)
Prueba de independencia (arriba y abajo)Prueba de independencia (arriba y abajo)
Prueba de independencia (arriba y abajo)Henry Cordova
 
Modelo relacional y reglas de integridad
Modelo relacional y reglas de integridadModelo relacional y reglas de integridad
Modelo relacional y reglas de integridad
kamui002
 
Algebra relacional
Algebra relacionalAlgebra relacional
Algebra relacionalLuis Jherry
 
Algoritmos para matlab
Algoritmos para matlabAlgoritmos para matlab
Algoritmos para matlabVitoto96
 
Unidad 6 Lenguaje Sql 4 (Consultas Dml Avanzado)
Unidad 6 Lenguaje Sql 4 (Consultas Dml Avanzado)Unidad 6 Lenguaje Sql 4 (Consultas Dml Avanzado)
Unidad 6 Lenguaje Sql 4 (Consultas Dml Avanzado)Sergio Sanchez
 
maquinas de turing
maquinas de turingmaquinas de turing
maquinas de turing
Anel Sosa
 

La actualidad más candente (20)

Clase2
Clase2Clase2
Clase2
 
Ecuaciones Diferenciales Lineales de Primer Orden
Ecuaciones Diferenciales Lineales de Primer OrdenEcuaciones Diferenciales Lineales de Primer Orden
Ecuaciones Diferenciales Lineales de Primer Orden
 
Redes
RedesRedes
Redes
 
Modelo Entidad Relación
Modelo Entidad RelaciónModelo Entidad Relación
Modelo Entidad Relación
 
Matlab integración numérica, método del trapecio
Matlab integración numérica, método del trapecioMatlab integración numérica, método del trapecio
Matlab integración numérica, método del trapecio
 
Guía sobre integral indefinida
Guía sobre integral indefinidaGuía sobre integral indefinida
Guía sobre integral indefinida
 
Grafos resueltos
Grafos  resueltosGrafos  resueltos
Grafos resueltos
 
Método del trapecio - grupo 5 UNI profe Naupay
Método del trapecio - grupo 5 UNI profe NaupayMétodo del trapecio - grupo 5 UNI profe Naupay
Método del trapecio - grupo 5 UNI profe Naupay
 
ensayo unidad 4. luis.pdf
ensayo unidad 4. luis.pdfensayo unidad 4. luis.pdf
ensayo unidad 4. luis.pdf
 
Manejo de archivos en c#
Manejo de archivos en c#Manejo de archivos en c#
Manejo de archivos en c#
 
Ejercicio de distribución binomial
Ejercicio de distribución binomialEjercicio de distribución binomial
Ejercicio de distribución binomial
 
Unidad5. algebra relacional. yama.may.joseluis.j4
Unidad5. algebra relacional. yama.may.joseluis.j4Unidad5. algebra relacional. yama.may.joseluis.j4
Unidad5. algebra relacional. yama.may.joseluis.j4
 
Estructuras de control
Estructuras de  controlEstructuras de  control
Estructuras de control
 
Interpolacion y Regresion - R. Campillo
Interpolacion y Regresion - R. CampilloInterpolacion y Regresion - R. Campillo
Interpolacion y Regresion - R. Campillo
 
Prueba de independencia (arriba y abajo)
Prueba de independencia (arriba y abajo)Prueba de independencia (arriba y abajo)
Prueba de independencia (arriba y abajo)
 
Modelo relacional y reglas de integridad
Modelo relacional y reglas de integridadModelo relacional y reglas de integridad
Modelo relacional y reglas de integridad
 
Algebra relacional
Algebra relacionalAlgebra relacional
Algebra relacional
 
Algoritmos para matlab
Algoritmos para matlabAlgoritmos para matlab
Algoritmos para matlab
 
Unidad 6 Lenguaje Sql 4 (Consultas Dml Avanzado)
Unidad 6 Lenguaje Sql 4 (Consultas Dml Avanzado)Unidad 6 Lenguaje Sql 4 (Consultas Dml Avanzado)
Unidad 6 Lenguaje Sql 4 (Consultas Dml Avanzado)
 
maquinas de turing
maquinas de turingmaquinas de turing
maquinas de turing
 

Similar a Consultas combinadas

Consultas combinadas
Consultas combinadasConsultas combinadas
Consultas combinadasyehisam
 
Seleccion de datos_sql_2005
Seleccion de datos_sql_2005Seleccion de datos_sql_2005
Seleccion de datos_sql_2005zankero
 
Operaciones basicas de sql
Operaciones basicas de sqlOperaciones basicas de sql
Operaciones basicas de sql
juanfrancisco501920
 
Objeto De Aprendizaje
Objeto De AprendizajeObjeto De Aprendizaje
Objeto De Aprendizajegviera
 
Objeto De Aprendizaje
Objeto De AprendizajeObjeto De Aprendizaje
Objeto De Aprendizajegviera
 
Consultas básicas en sql server
Consultas básicas en sql serverConsultas básicas en sql server
Consultas básicas en sql server
Rodrigo Alfaro Pinto
 
Consultas sql
Consultas sqlConsultas sql
Consultas sql
Hector Naranjo
 
8 Guía_Fundamentos de Base de Datos (2).docx
8 Guía_Fundamentos de Base de Datos (2).docx8 Guía_Fundamentos de Base de Datos (2).docx
8 Guía_Fundamentos de Base de Datos (2).docx
LeydyVeronicaDelgado
 
SQL Parte 1.pdf
SQL Parte 1.pdfSQL Parte 1.pdf
SQL Parte 1.pdf
davidvargas666
 
Sql
SqlSql
BD_L8_EXP_ROZIC_CAP9_SQL
BD_L8_EXP_ROZIC_CAP9_SQLBD_L8_EXP_ROZIC_CAP9_SQL
BD_L8_EXP_ROZIC_CAP9_SQLdemoiselle
 

Similar a Consultas combinadas (20)

Consultas combinadas
Consultas combinadasConsultas combinadas
Consultas combinadas
 
Consultas
ConsultasConsultas
Consultas
 
Consultas
ConsultasConsultas
Consultas
 
Expo consul.
Expo consul.Expo consul.
Expo consul.
 
Seleccion de datos_sql_2005
Seleccion de datos_sql_2005Seleccion de datos_sql_2005
Seleccion de datos_sql_2005
 
Seleccion de datos_sql_2005
Seleccion de datos_sql_2005Seleccion de datos_sql_2005
Seleccion de datos_sql_2005
 
Teoria sql
Teoria sqlTeoria sql
Teoria sql
 
Operaciones basicas de sql
Operaciones basicas de sqlOperaciones basicas de sql
Operaciones basicas de sql
 
Sentencias sql
Sentencias sqlSentencias sql
Sentencias sql
 
Objeto De Aprendizaje
Objeto De AprendizajeObjeto De Aprendizaje
Objeto De Aprendizaje
 
Objeto De Aprendizaje
Objeto De AprendizajeObjeto De Aprendizaje
Objeto De Aprendizaje
 
Consultas básicas en sql server
Consultas básicas en sql serverConsultas básicas en sql server
Consultas básicas en sql server
 
Consultas sql
Consultas sqlConsultas sql
Consultas sql
 
Sql exposición
Sql exposiciónSql exposición
Sql exposición
 
Consultas basicas en sql server
Consultas basicas en sql serverConsultas basicas en sql server
Consultas basicas en sql server
 
8 Guía_Fundamentos de Base de Datos (2).docx
8 Guía_Fundamentos de Base de Datos (2).docx8 Guía_Fundamentos de Base de Datos (2).docx
8 Guía_Fundamentos de Base de Datos (2).docx
 
SQL Parte 1.pdf
SQL Parte 1.pdfSQL Parte 1.pdf
SQL Parte 1.pdf
 
SQL Parte 1.pdf
SQL Parte 1.pdfSQL Parte 1.pdf
SQL Parte 1.pdf
 
Sql
SqlSql
Sql
 
BD_L8_EXP_ROZIC_CAP9_SQL
BD_L8_EXP_ROZIC_CAP9_SQLBD_L8_EXP_ROZIC_CAP9_SQL
BD_L8_EXP_ROZIC_CAP9_SQL
 

Más de Lokiyo Ps

La amistad 3
La amistad 3La amistad 3
La amistad 3Lokiyo Ps
 
La amistad 3
La amistad 3La amistad 3
La amistad 3Lokiyo Ps
 
La amistad 3
La amistad 3La amistad 3
La amistad 3Lokiyo Ps
 
La amistad 3
La amistad 3La amistad 3
La amistad 3Lokiyo Ps
 

Más de Lokiyo Ps (6)

Juanfotos
JuanfotosJuanfotos
Juanfotos
 
I
II
I
 
La amistad 3
La amistad 3La amistad 3
La amistad 3
 
La amistad 3
La amistad 3La amistad 3
La amistad 3
 
La amistad 3
La amistad 3La amistad 3
La amistad 3
 
La amistad 3
La amistad 3La amistad 3
La amistad 3
 

Consultas combinadas

  • 1.
  • 2.   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 o Agrupadas COMBINACIÓN INTERNA. La combinación interna nos permite mostrar los datos de dos o más tablas a través de una condición WHERE. Para realizar la consulta combinada entre estas dos tablas debemos escribir una consulta SELECT en cuya clausula FROM escribiremos el nombre de las dos tablas, 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:
  • 3. 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" ... Démonos 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 no anteponemos 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. COMBINACIÓN EXTERNA La combinación interna es excluyente. Esto quiere decir que si un registro no cumple la condición de combinación no se incluye en los resultados. De este modo en el ejemplo anterior si un coche no tiene grabada la marca no se devuelve en mi consulta. Según la naturaleza de nuestra consulta esto puede ser una ventaja, pero en otros casos significa un serio problema. Para modificar este comportamiento SQL pone a nuestra disposición la combinación externa. La combinación externa no es excluyente. La sintaxis es muy parecida a la combinación interna, SELECT [ALL | DISTINCT ] <nombre_campo> [{,<nombre_campo>}] FROM <nombre_tabla> [{LEFT|RIGHT OUTER 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 ]}]]
  • 4. La combinación externa puede ser diestra o siniestra, LEFT OUTER JOIN o RIGHT OUTER JOIN. Con LEFT OUTER JOIN obtenemos todos los registros de en la tabla que situemos a la izquierda de la clausula JOIN, mientras que con RIGHT OUTER JOIN obtenemos el efecto contrario. Como mejor se ve la combinación externa es con un ejemplo. SELECT tCoches.matricula, tMarcas.marca, tCoches.modelo, tCoches.color, tCoches.numero_kilometros, tCoches.num_plazas FROM tCoches LEFT OUTER JOIN tMarcas ON tCoches.marca = tMarcas.codigo Esta consulta devolverá todos los registros de la tabla tCoches, independientemente de que tengan marca o no. En el caso de que el coche no tenga marca se devolverá el valor null para los campos de la tabla tMarcas. Visualmente (la consulta devuelve los datos en azul) ... El mismo ejemplo con RIGHT OUTER JOIN. SELECT tCoches.matricula, tMarcas.marca, tCoches.modelo, tCoches.color, tCoches.numero_kilometros, tCoches.num_plazas FROM tCoches RIGHT OUTER JOIN tMarcas ON tCoches.marca = tMarcas.codigo Esta consulta devolverá los registros de la tabla tCoches que tengan marca relacionada y todos los registros de la tabla tMarcas, tengan algún registro en tCoches o no. Visualmente (la consulta devuelve los datos en azul) ...
  • 5. COMBINACION DE UNION O AGRUPADAS La cláusula UNION permite unir dos o más conjuntos de resultados en uno detrás del otro como si se tratase de una única tabla. De este modo podemos obtener los registros de más de una tabla "unidos". La sintaxis corresponde a la de varias SELECT unidas a través de UNION, como se muestra a continuación: SELECT [ALL | DISTINCT ] <nombre_campo> [{,<nombre_campo>}] FROM <nombre_tabla> [{LEFT|RIGHT OUTER JOIN <nombre_tabla> ON <condicion_combinacion>}] [WHERE <condicion> [{ AND|OR <condicion>}]] [GROUP BY <nombre_campo> [{,<nombre_campo >}]] [HAVING <condicion>[{ AND|OR <condicion>}]] { UNION [ALL | DISTINCT ] SELECT [ALL | DISTINCT ] <nombre_campo> [{,<nombre_campo>}] FROM <nombre_tabla> [{LEFT|RIGHT OUTER 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 ]}]] Para utilizar la clausula UNION debemos cumplir una serie de normas. Las consultas a unir deben tener el mismo número campos, y además los campos deben ser del mismo tipo. Sólo puede haber una única clausula ORDER BY al final de la sentencia SELECT. El siguiente ejemplo muestra el uso de UNION SELECT tCoches.matricula, tMarcas.marca, tCoches.modelo,
  • 6. tCoches.color, tCoches.numero_kilometros, tCoches.num_plazas FROM tCoches INNER JOIN tMarcas ON tCoches.marca = tMarcas.codigo UNION SELECT tMotos.matricula, tMarcas.marca, tMotos.modelo, tMotos.color, tMotos.numero_kilometros, 0 FROM tMotos INNER JOIN tMarcas ON tMotos.marca = tMarcas.codigo; Puede observarse el uso de la constante cero en la segunda lista de selección para hacer coincidir el número y tipo de campos que devuelve la consulta UNION.