Guia-8 SQL
Guia-8 SQL
I. Objetivos
COMBINACIÓN DE TABLAS.
Una combinación es una operación que permite consultar dos o más tablas para producir un conjunto de
resultados que incorpore filas y columnas de cada una de las tablas en cuestión. Las tablas se combinan en
función de las columnas que son comunes a ambas tablas.
1
La combinación de campos de tablas distintas sólo es posible cuando se han definido campos relacionados
entre tablas. Esto es si existe un campo clave primaria en una tabla que aparece como clave foránea en la
otra tabla.
La sentencia JOIN en SQL permite combinar registros de dos o más tablas en una base de datos relacional.
Sentencias JOIN
En el Lenguaje de Consultas Estructurado (SQL) hay tres tipos de JOIN: interno, externo y cruzado.
SQL JOINS
INNER JOIN
Se utiliza para mostrar los datos coincidentes entre las tablas de donde se quiere mostrar la información:
SELECT <lista_campos>
FROM <TablaA A>
INNER JOIN <TablaB B>
ON A.Key=B.Key
Nota: ON se utiliza para colocar los nombres de los campos con los cuales se ha realizado la relación entre
las tablas.
Ejemplo 1: Se desea conocer todos los productos que se encuentran en una orden
2
Para obtener los registros coincidentes en ambas tablas habría que realizar la siguiente consulta:
Ejemplo 2: Se desea conocer los empleados que han atendido una orden y en qué fecha lo hicieron, los
registros se deben ordenar por el campo EmployeeID
3
La consulta SQL es:
Nota: al campo EmployeeID se le coloca el nombre de la tabla de donde queremos sacar los resultados, ya
que el nombre de este campo aparece tanto en la tabla Orders y Employees, y si no se utiliza así da error
de nombre ambiguo.
LEFT JOIN
Muestra los registros de la tabla izquierda más los registros coincidentes con la tabla derecha
SELECT <lista_campos>
FROM <TablaA A>
LEFT JOIN <TablaB B>
ON A.Key=B.Key
Ejemplo: Se desea conocer que empleados han atendido un pedido independientemente si este lo ha
realizado o no
4
Se obtiene el siguiente resultado:
Muestra los registros de la tabla izquierda menos los registros coincidentes con la tabla derecha
SELECT <lista_campos>
FROM <TablaA A>
LEFT JOIN <TablaB B>
ON A.Key=B.Key
WHERE B.Key IS NULL
Ejemplo: Se desea conocer los empleados que no han atendido ningún pedido
5
RIGHT JOIN
Muestra los registros de la tabla derecha más los registros coincidentes con la tabla izquierda
SELECT <lista_campos>
FROM <TablaA A>
RIGHT JOIN <TablaB B>
ON A.Key=B.Key
Ejemplo: Mostrar que productos ofrece cada proveedor independientemente si este lo hace o no
En el último registro se
verifica que el proveedor
Coca Cola no ha ofrecido
ningún producto
Muestra los registros de la tabla derecha menos los registros coincidentes con la tabla izquierda
SELECT <lista_campos>
FROM <TablaA A>
RIGHT JOIN <TablaB B>
ON A.Key=B.Key
WHERE A.Key IS NULL
6
La consulta SQL es:
FULL JOIN
Muestra los registros de la tabla izquierda y la tabla derecha más los registros coincidentes entre ambas
SELECT <lista_campos>
FROM <TablaA A>
FULL JOIN <TablaB B>
ON A.Key=B.Key
Ejemplo: En la siguiente consulta se muestra los productos que tengan o no asignado un proveedor y los
proveedores independientemente si estos han ofrecido o no un producto
7
Observar que el primer registro indica que el Producto X no tiene proveedor asignado y en el último
registro el Proveedor Coca Cola no ha ofrecido ningún producto.
Muestra los registros de la tabla izquierda y la tabla derecha menos los registros coincidentes entre ambas
SELECT <lista_campos>
FROM <TablaA A>
FULL JOIN <TablaB B>
ON A.Key=B.Key
WHERE A.Key IS NULL OR B.Key IS
NULL
Ejemplo: En la siguiente consulta se muestra los productos que no tienen asignado un proveedor y los
proveedores que no han ofrecido un producto
CROSS JOIN
Una combinación cruzada que no tenga una cláusula WHERE genera el producto cartesiano de las tablas
involucradas en la combinación.
8
El tamaño del conjunto de resultados de un producto cartesiano es igual al número de filas de la primera
tabla multiplicado por el número de filas de la segunda tabla.
Ejemplo
Ejecutamos las siguientes consultas para conocer la cantidad de filas o registros tienen las siguientes tablas:
Como resultado tenemos 2340 filas o registros, ya que si multiplicamos las 78 filas de la primera tabla por
las 30 filas de la segunda obtenemos ese resultado
Sin embargo, si se agrega una cláusula WHERE, la combinación cruzada se comporta como una
combinación interna (INNER JOIN)
9
SUBCONSULTAS.
Una SUBCONSULTA es una consulta T-SQL normal anidada dentro de otra consulta, se crean utilizando
paréntesis en una instrucción SELECT que sirve como base para cualquier parte de los datos o de la
condición de otra consulta.
Las SUBCONSULTAS devuelven grupos o arreglos de valores los cuales pueden servir de parámetros a otras
búsquedas. Esto permite que los valores a buscar no sean estáticos sino dinámicos, y que la consulta no
tenga que ser regenerada en vista de los cambios de información que puede haber en la BD.
Normalmente las SUBCONSULTAS se utilizan para satisfacer una o un par de las siguientes necesidades:
Una sola columna o un solo valor en cualquier lugar en donde pueda utilizarse una expresión de un
sólo valor y puede compararse usando los siguientes operadores: =,<,>,<=,>= ,<>,!> y !<.
Una sola columna o muchos valores que se pueden utilizar con el operador de comparación de
listas IN en la cláusula WHERE.
Muchas filas que pueden utilizarse para comprobar la existencia, usando la palabra EXISTS en la
cláusula WHERE.
Sintaxis:
Ejemplos
Ejemplo 1:
Mostrar los campos ProductID, ProductName y UnitPrice de todos los productos con cantidades mayores a
100
10
Ejemplo 2:
En este ejemplo se utiliza la instrucción EXISTS y obtenemos los mismos resultados de la consulta anterior:
UPDATE
Antes de ejecutar la consulta, comprobamos que código tiene la categoría que comienza con la letra B:
11
Los productos que tienen ese código:
DELETE
En la siguiente consulta se elimina el o los clientes cuya fecha de pedido sea mayor a 2014-01-01
12
III. Requerimientos
IV. Procedimiento
Para conectarse con el servidor de base de datos elija los siguientes parámetros de autenticación:
Tipo de servidor: Database Engine
Nombre del servidor: Colocar el nombre del servidor local, por ejemplo PCNumMaquina-SALA2
Nota: NumMaquina es el número de la maquina local
Autenticación: SQL Server Authentication
Login: sa
Password: 123456
13
2. Por medio de una instrucción INSERT agregar los siguientes datos a cada una de las tablas:
Campos Campo
CustomerID CompanyName CustomerID
1 TIPLE Típicos Regionales 1 NULL
2 FLOSU Flores del Sur
4. Construir de nuevo la consulta implementando ALIAS para los nombres de las tablas
5. Ejecutar la consulta
3. Construir de nuevo la consulta implementando ALIAS para los nombres de las tablas
4. Ejecutar la consulta
14
Ejercicio 3. Uso del RIGHT JOIN (IS NULL)
3. Construir de nuevo la consulta implementando ALIAS para los nombres de las tablas
4. Ejecutar la consulta
3. Construir de nuevo la consulta implementando ALIAS para los nombres de las tablas
4. Ejecutar la consulta
15
2. Ejecutar la consulta para obtener los resultados
3. Construir de nuevo la consulta implementando ALIAS para los nombres de las tablas
4. Ejecutar la consulta
3. Construir de nuevo la consulta implementando ALIAS para los nombres de las tablas
4. Ejecutar la consulta
3. Construir de nuevo la consulta implementando ALIAS para los nombres de las tablas
4. Ejecutar la consulta
16
Ejercicio 8. Uso del CROSS JOIN
4. Ejecutar la consulta
1. Obtener los datos de los clientes que han realizado pedidos mayor o igual a la fecha 1 de Enero de
1998
Ejecute la consulta
El resultado de una subconsulta especificada con IN (o con NOT IN) es una lista de cero o más valores
que se compara con el campo especificado en la cláusula WHERE
2. Construir la consulta anterior, cambiando la instrucción IN por NOT IN, ejecute la consulta y verifique
los resultados.
3. Con el siguiente ejemplo se obtiene los datos del cliente que posee el código del Pedido 10248
17
Ejecute la consulta
Las subconsultas se pueden presentar con uno de los operadores de comparación ( =, < >, >, > =, <,
< = ).
4. Cuando una subconsulta se especifica con la palabra clave EXISTS, funciona como una prueba de
existencia
5. En el siguiente ejemplo se evalúa si existen clientes que han realizado pedidos mayor o igual a la
fecha 1 de Enero de 1998 y se muestra el resultado
Ejecute la consulta
6. Copie de nuevo la consulta pero hoy en lugar de utilizar la instrucción EXISTS utilice la instrucción
NOT EXISTS, ejecute la consulta y analice los resultados.
8. Ejecute la consulta
V. Ejercicio Complementario
18
Ejercicio 1.
Haciendo uso de INNER JOIN mostrar los campos OrderDate y ProductID de las tablas Orders y Order
Details donde el dato almacenado en el campo OrderDate sea igual 8 de Julio de 1996
Ejercicio 2.
Se desea mostrar cuantas cantidades de cada producto se han vendido y la fecha de la venta de cada uno
de ellos, se debe tomar en cuenta el siguiente diagrama relacional:
Ejercicio 3.
Haciendo uso de SUBCONSULTAS mostrar los campos OrderID, ProductID y Quantity de la tabla Orders
Details donde la fecha de pedido (OrderDate de la tabla Orders) sea la más antigua
Ejercicio 4:
Dos nuevos registros a la tabla Orders, en el primer registro en el campo EmployeeID debe agregar el
código del nuevo empleado y en el segundo registro debe ingresar para ese campo un valor NULL
Al final del ejercicio y después de hacer las pruebas necesarias, elimine de las tablas los datos que agrego.
19
Guardar el archivo como: Guia8_EjercicioComplementario.sql
TRABAJO INDIVIDUAL
Ejercicio 1.
Tabla: BITACORA
Tabla: MAQUINA
20
Tabla: EMPLEADO
a. Mostrar los empleados que hayan o estén haciendo uso de una maquina
i. Campos a mostrar: Nombres del empleado, Marca, Modelo y Descripción de la
maquina
Ejercicio 2.
1. Mostrar el primer nombre, primer apellido de los autores junto con el título de libro que estos han
escrito
3. Mostrar los títulos de los libros y el nombre de la editorial, donde esta sea del país de Inglaterra
4. Mostrar los nombres de los autores y el título del libro donde el año de edición sea el más actual
5. Mostrar los nombres de los autores y el título del libro donde el año de edición sea el menos actual
21
6. Agregue los datos necesarios a las tablas, para luego implementar las instrucciones LEFT JOIN,
RIGHT JOIN Y FULL JOIN, como por ejemplo autores que no han escrito un libro todavía etc.
3. Tipos de Subconsultas
https://technet.microsoft.com/es-es/library/ms175838(v=sql.105).aspx
22