Consultas Combinadas. Las consultas combinadas pueden ser de tres tipos: Combinación interna Combinación externa Uniones



Documentos relacionados
Tema: Uso de sentencias SQL

Tema: Combinación de tablas

Tema: USO DE COMBINACIONES EXTERNAS.

Tema: SUBCONSULTAS Y CREACION DE VISTAS.

UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS TECNOLOGICOS ESCUELA DE COMPUTACION

SQL Server FEMEPA SQL Server 2000

Consultas con combinaciones

1. DML. Las subconsultas

CONSULTAS CON SQL. 3. Hacer clic sobre el botón Nuevo de la ventana de la base de datos. Aparecerá el siguiente cuadro de diálogo.

LAS SUBCONSULTAS SQL SERVER Manual de Referencia para usuarios. Salomón Ccance CCANCE WEBSITE

6- Combinación de tablas

5- Uso de sentencias avanzadas

Unidad III: Lenguaje de manipulación de datos (DML) 3.1 Inserción, eliminación y modificación de registros

Base de datos I Facultad de Ingeniería. Escuela de computación.

Práctica A: Trabajo con subconsultas

CONSULTAS BASICAS EN SQL SERVER

CONSULTAS MULTITABLAS SQL SERVER Manual de Referencia para usuarios. Salomón Ccance CCANCE WEBSITE

COMANDOS DE SQL, OPERADORES, CLAUSULAS Y CONSULTAS SIMPLES DE SELECCIÓN

CONSULTAS DE RESUMEN SQL SERVER Manual de Referencia para usuarios. Salomón Ccance CCANCE WEBSITE

Procedimientos para agrupar y resumir datos

SQL (Structured Query Language)

Tema: CREACIÓN DE TABLAS DE RDBMS (RELATIONAL DATA BASE MANAGEMENT SYSTEM).

El lenguaje SQL es un lenguaje estándar para el acceso y

select nombre from profesores where categoria='aso6';

Práctica A: Procedimientos para agrupar y resumir datos

Boletín de Problemas de la Asignatura II18 Bases de Datos. Ingeniería Informática Universitat Jaume I

Tema 4. Manipulación de datos con SQL

Toda base de datos relacional se basa en dos objetos

CURSO DE SQL SERVER 2005

Tema: CREACIÓN DE TABLAS DE RDBMS (RELATIONAL DATA BASE MANAGEMENT SYSTEM).

El lenguaje de manipulación de datos (DML) es una parte fundamental de SQL.

Bases de Datos Relacionales

MANUAL BÁSICO DEL LENGUAJE SQL

T12 Vistas y tablas temporales

Trabajo con Subconsultas

Manual de ACCESS Intermedio

UNIDAD 1.- PARTE 1 MANIPULACIÓN AVANZADA DE DATOS CON SQL. BASES DE DATOS PARA APLICACIONES. Xochitl Clemente Parra Armando Méndez Morales

Base de Datos Práctica 1.

SENTENCIAS Y CONSULTAS EN SQL SERVER

CASO PRÁCTICO DISTRIBUCIÓN DE COSTES

A.1. Definiciones de datos en SQL

Base de datos en Excel

TALLER #5 ACCESS CONSULTAS. objeto Consulta en la vista lateral izquierda de la ventana Base de datos. Aparece esta ventana.

Curso Excel Básico - Intermedio

Diseño de bases de datos Diapositiva 1

Práctica 3. Consultas SQL

Sub consultas avanzadas

Programa diseñado y creado por Art-Tronic Promotora Audiovisual, S.L.

La ventana de Microsoft Excel

Operación Microsoft Access 97

LABORATORIO Nº 2 GUÍA PARA REALIZAR FORMULAS EN EXCEL

Empresarial y Financiero NIVEL AVANZADO

Charla N 6: Utilidades de Consulta de datos.

BASES DE DATOS - Microsoft ACCESS 2007-

Internet Information Server

Trabajos de Ampliación. Bases de datos NoSQL.

Modelos y Bases de Datos

USANDO SQL. EN BASE DE Ooo.

4- Uso de sentencias para el envió y extracción de datos

MINI MANUAL PARA CREAR FORMULARIOS CON PHP Marzo 2007

Base de datos relacional

Visual Basic 1. Empleo de módulos y Procedimientos. Procedimientos definidos por el usuario

8 SQL SERVER 2008 RA-MA

Operación de Microsoft Excel. Guía del Usuario Página 79. Centro de Capacitación en Informática

Tema: PROCEDIMIENTOS ALMACENADOS.

CASO PRÁCTICO. ANÁLISIS DE DATOS EN TABLAS DINÁMICAS

Concesionario de coches

Tema: Creacion de una base de datos utilizando sintaxis Sql.

MATERIAL 2 EXCEL 2007

Bases de Datos 2. Teórico

Structured Query Language (SQL) Fundamentos de Bases de Datos InCo

Índice general de materias LECCIÓN 7 74

Unidad I. 1.1 Sistemas numéricos (Binario, Octal, Decimal, Hexadecimal)

LiLa Portal Guía para profesores

Tecnología de la Información y la Comunicación. Base de datos. Consultas

GUIA APLICACIÓN DE SOLICITUDES POR INTERNET. Gestión de Cursos, Certificados de Aptitud Profesional y Tarjetas de Cualificación de Conductores ÍNDICE

LENGUAJE SQL. En Mysql se utiliza un subconjunto de SQL (update, insert into, delete, select, truncate,etc).

SINTAXIS DE SQL-92. <definición de esquema >::= CREATE SCHEMA <cláusula de nombre de esquema> [ <elemento de esquema>... ]

Bases de datos relacionales y el modelo entidad-relación

Manual para la utilización de PrestaShop

SOLUCIÓN CASO GESTIÓN DE PERSONAL I

1.264 Tema 7. Introducción a SQL

Lenguaje de Consulta Estructurado S Q. Lenguaje de Consulta Estructurado. Wael Najjar /

Operación de Microsoft Word

TABLA DE DECISION. Consideremos la siguiente tabla, expresada en forma genérica, como ejemplo y establezcamos la manera en que debe leerse.

Restricciones de Integridad

Creación y administración de grupos de dominio

ÍNDICE. Introducción... Capítulo 1. Novedades de Access

EXPLOTACIÓN DE BASES DE DATOS CON ACCESS

Apuntes de ACCESS. Apuntes de Access. Campos de Búsqueda:

CAPITULO V. SIMULACION DEL SISTEMA 5.1 DISEÑO DEL MODELO

Manual de rol gestor de GAV para moodle 2.5

Tema: Creacion de una base de datos utilizando sintaxis Sql.

Análisis estadístico con Microsoft Excel

TEMA 10. INTRODUCCCIÓN A SQL. CONSULTAS BASADAS EN UNA TABLA

Curso SQL Nivel Avanzado 1. Miguel Jurado García

En cualquier caso, tampoco es demasiado importante el significado de la "B", si es que lo tiene, lo interesante realmente es el algoritmo.

Análisis de los datos

9- Procedimientos almacenados.

Transcripción:

Bases de Datos SQL

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 coches con un campo marca, dicho campo contendría el código de la marca de la tabla de marcas.

Consultas Combinadas 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 Nos permite mostrar los datos de dos o más tablas a través de una condición WHERE. Para realizar la consulta combinada debemos escribir una consulta SELECT en cuya claúsula FROM escribiremos el nombre de 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.

Combinación Interna Demonos cuenta que hemos antepuesto el nombre de cada tabla a el 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 (ambiguedad). 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 Interna 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 tabla o vista, añadiéndose el resto de tablas a través de cláusulas INNER JOIN.

Combinación Interna El ejemplo anterior escrito utilizando la clausula INNER JOIN quedaría de la siguiente manera:

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.

Combinación Externa La sintaxis es muy parecida a la combinación interna 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.

Combinación Externa Como mejor se ve la combinación externa es con un ejemplo de LEFT OUTER JOIN 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.

Combinación Externa Como mejor se ve la combinación externa es con un ejemplo de RIGHT OUTER JOIN 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)...

Combinación Unión 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 mas de una tabla "unidos". La sintaxis corresponde a la de varias SELECT unidas a través de UNION, como se muestra a continuación:

Combinación Unión 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

Combinación Unión 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.

Vistas Una vista es una tabla virtual cuyo contenido está definido por una consulta. Al igual que una tabla real, una vista consta de un conjunto de columnas y filas de datos que proceden de tablas a las que se hace referencia en la consulta y se producen de forma dinámica cuando se hace referencia a la vista.

Vistas

Utilización de vistas Para centrarse en datos específicos Para simplificar la manipulación de datos

Utilización de vistas Para proporcionar compatibilidad con versiones anteriores

Vistas encriptadas vs no encriptadas Una vista no cifrada nos permite obtener información acerca de su definición debido a que es posible que necesite ver la definición de la vista para entender cómo derivan sus datos de las tablas de origen o para ver los datos que ella misma define. Una vista no encriptada es aquella cuya secuencia de comandos no ha sido encriptada, de modo que la columna VIEW_DEFINITION de la vista INFORMATION_SCHEMA.VIEWS expone legiblemente al usuario la T-SQL que genera la vista. Para crear una vista no encriptada de manera predeterminada no se utiliza el atributo ENCRYPTION.

Muchas Gracias

Consulta Combinadas (Joins) ------------------------------------------------------------------------- --CONSULTAS DE VARIAS TABLAS (Producto cartesiano de filas)-- ------------------------------------------------------------------------- - - Si no se hacen coincidir los valores de las columnas relacionadas se ob tiene gran duplicidad de filas. Tantas como - - el producto cartesiano de las filas de las tablas a las que se hace ref erencia. Ejemplo: select * from dbo.products select * from dbo.orders select * from dbo.products, dbo.orders ------------------------------------------------------------------------- --UTILIZAR ALIAS EN UNA TABLA-- ------------------------------------------------------------------------- - - Cuando se relacionan varias tablas es normal que una misma columna form e parte de varias tablas. Para evitar - - errores de nombres duplicados podemos hacer dos cosas. Una es utilizar la sintaxis de nombre completo: -- NombreTabla.NombreColumna. select * from dbo.products, dbo.categories where dbo.products.categoryid = dbo.categories.categoryid -- La otra forma es dar un alias a cada tabla. Ejemplo: select * from dbo.products P, dbo.categories C where P.CategoryID = C.CategoryID ------------------------------------------------------------------------- --INSTRUCCIÓN JOIN ON(Coincidencia INTERNAS de columnas)-- ------------------------------------------------------------------------- -- NOTA: La instrucción INNER JOIN es exactamente lo mismo que JOIN, dado q ue es el valor predeterminado. --TEORÍA--

- - La instrucción JOIN nos permite combinar varias tablas haciendo coincid ir los valores de las columas que nos - - interesen. Es decir, si tenemos dos tablas A y B que contienen una (o v arias) columnas con el mismo nombre, -- podemos relacionar ambas tablas por la columna del mismo nombre. - - Por cada registro de la columna en la tabla A que también esté en la co lumna de la tabla B, obtendremos un - - una relación. Lo que quiere decir que se produce un producto cartesiano de cada valor de la columna de la tabla A, -- por todos los valores coincidentes de la columna en la tabla B. --VOLVIENDO A LA BASE DE DATOS NORTHWIND-- - - 1. Por ejemplo, la tabla empleados nos facilita bastante información de los mismos. La más significativa es el - - número de empleado, el nombre y la ciudad donde vive. Sin embargo, no n os dice nada de las ventas efectuadas por -- cada empleado. - - Si miramos la tabla de ventas veremos que además del número de ventas, tenemos información del empleado que - - realizo estas ventas. Por lo tanto, por medio de la columna EmployeeID presente en las dos tablas podemos -- relacionar los empleados con el número de venta. Ejemplo: select OrderID, LastName, FirstName, City from dbo.orders O join dbo.employees E on O.EmployeeID = E.EmployeeID order by OrderID - - De este modo podemos concluir que la columna que pertenece a una tabla

A y otra B sirve de nexo para relacionar - - los datos de otras columnas de la tabla A que no estan incluidos en la tabla B y viceversa. -- 2. Otro caso es la tabla de productos que nos da mucha información sobre los mismos pero apenas nos dice nada de - - la categoría a la que pertenece cada producto. Mostremos una tabla prod uctos personal que muestre la información - - más interesante de los productos, más el nombre de la categoría y una d escripción de esta. select ProductID, ProductName, C.CategoryID, CategoryName, Description, U nitprice, UnitsInStock from dbo.products P join dbo.categories C on P.CategoryID = C.CategoryID -- 3. COMBINACIÓN DE TRES TABLAS. Si nos fijamos en las tablas de empleados y de clientes nos damos cuenta que no hay - - forma de relacionar que empleado atendió (o vendió) a que cliente. Pode mos hacerlo a través de la tabla de ventas -- que tiene los números de empleados y de clientes. select E.EmployeeID, LastName, FirstName, OrderID, C.CustomerID, CompanyN ame, ContactName from dbo.orders O join dbo.employees E on O.EmployeeID = E.EmployeeID join dbo.customers C on O.CustomerID = C.CustomerID order by EmployeeID -- 4. Puede darse el caso en que solo interese esta información para los cli entes de España. select E.EmployeeID, LastName, FirstName, OrderID, C.CustomerID, CompanyN ame, ContactName from dbo.orders O

join dbo.employees E on O.EmployeeID = E.EmployeeID join dbo.customers C on O.CustomerID = C.CustomerID where C.Country = 'Spain' order by EmployeeID -- 5. La instrucción JOIN también podemos utilizarla para sustituir a las su bconsultas. La forma de hacerlo es dando -- dos alias diferentes a una misma tabla. Ejemplo: -- (Mostrar los empleados que son mayores que el empleado 5 (1955-03- 04) ). -- Técnica de subconsultas. select EmployeeID, LastName, FirstName, BirthDate from dbo.employees where BirthDate > (select BirthDate from dbo.employees where EmployeeID = 5) -- Instrucción JOIN. select E1.EmployeeID, E1.LastName, E1.FirstName, E1.BirthDate from dbo.em ployees E1 join dbo.employees E2 on E1.BirthDate > E2.BirthDate where E2.EmployeeID = 5 ------------------------------------------------------------------------- --INSTRUCCIÓN OUTER JOIN (Coincidencias EXTERNAS de columnas)-- ------------------------------------------------------------------------- - - Puede darse el caso que nos interese mostrar todos los valores de una c olumna (todas las filas) aunque no tengan -- correspondencia en la otra tabla. Así podemos tener 3 casos: -- 1.Mostrar todos los valores de la tabla IZQ (LEFT), con NULL para la tabl a DCH cuando no hay correspondencia select ProductID, ProductName, C.CategoryID, CategoryName, C.Description, UnitPrice, UnitsInStock from dbo.products P left outer join dbo.categories C on P.CategoryID = C.CategoryID -- 2.Mostrar todos los valores de la tabla DCH (RIGHT), con NULL para la tab la IZQ cuando no hay correspondencia.

select ProductID, ProductName, C.CategoryID, CategoryName, C.Description, UnitPrice, UnitsInStock from dbo.products P right outer join dbo.categories C on P.CategoryID = C.CategoryID -- 3.Mostrar todos los valores de ambas tablas (FULL) con NULL cuando no hay correspondencia. select ProductID, ProductName, C.CategoryID, CategoryName, C.Description, UnitPrice, UnitsInStock from dbo.products P full outer join dbo.categories C on P.CategoryID = C.CategoryID -- NOTA: La sentencia OUTER es opcional. Al incluir las sentencias LEFT, RIG HT Y FULL el sistema sabe que es una -- consulta de combinación externa. Ejemplo anterior: select ProductID, ProductName, C.CategoryID, CategoryName, C.Description, UnitPrice, UnitsInStock from dbo.products P full join dbo.categories C on P.CategoryID = C.CategoryID ------------------------------------------------------------------------- -- INSTRUCCIÓN UNION (Unión de filas en distintas tablas)-- ------------------------------------------------------------------------- -- 1. Unir (UNION) todas (ALL) las filas de dos columnas de tablas diferente s. select City from dbo.employees union all select City from dbo.customers - - Devuelve la suma de todas las filas en ambas columnas. -- 2. Unir (UNION) las filas de dos columnas de tablas diferentes sin repeti r ningún valor. select City from dbo.employees union select City from dbo.customers - - Devuelve la suma de todas las filas en ambas columnas pero con valores únicos.

-- NOTA: Se debe cumplir que las columnas en ambas instruciones SELECT coinc idan en el tipo de datos. ------------------------------------------------------------------------- - - INSTRUCCIÓNES EXCEPT Y INTERSECT (Diferencia e Intersección de conjunto s)-- ------------------------------------------------------------------------- -- EXCEPT - - Devuelve los valores de la primera consulta que no se encuentran en la segunda. select City from dbo.employees except select City from dbo.customers -- INTERSECT - - Devueleve una intersección de todos los valores, es decir, solo los que se encuentran ambas columnas. select City from dbo.employees intersect select City from dbo.customers -------------------------------------------------------------------------

Consulta SQL Server para Conocer las Tablas y Vistas de una Base de Datos En Sql Server tenemos una sencilla consulta que nos devolverá las tablas y vistas de una base de datos: SELECT * from Information_Schema.Tables De aquí nos interesa el campo table_name (nombre de la tabla) y table_type (nos dice si es una tabla o una vista). Por tanto, filtrar por tablas o vistas es bastante sencillo (con el campo table_type). Para saber si existe una tabla en la base de datos (también nos sirve para las vistas) podemos utilizar la siguiente consulta (vamos a consultar si en Northwind existe la tabla Customers ): SELECT * from Information_Schema.Tables where table_name= Customers Si esta consulta nos devuelve registros es que existe la tabla (o vista) y si nos devuelve vacío, es que no existe. Vistas Usando la base de datos northwind crearemos una vista que selecciona las cinco clientes de la tabla Customers visualizando los siguientes campos: CustomerID, CompanyName, ContactName, Country, city, y además con la condición de que el nombre de la ciudad a la que pertenecen empiece con la letra M, ordenándolos por el campo companyname.

Se dará; cuenta que no usamos el atributo ENCRYPTION, o en todo caso, no se usa la cláusula WITH ENCRYPTION. Podemos comprobar esto al momento de ejecutar la siguiente sentencia (explicada en el cuadro anterior):

En contraste, para generar una vista encriptada se usa la cláusula WITH ENCRYPTION que se encargará de encriptar la T-SQL de la vista. En este cuadro es explica a detalle todo el proceso de generación y consulta de la vista encriptada.

Pues ahora usted verá que el campo view_definition está encriptado, negándonos de esta manera leer la secuencia de comandos que define esta vista viewcustomersencrypted.

Base de datos I. Guía 5 1 Facultad: Ingeniería Escuela: Computación Asignatura: Base de datos I Tema: Uso de sentencias SQL Objetivo Modificar, eliminar e insertar registros en una tabla Listar los registros de una tabla utilizando la sentencia select Materiales y Equipo Computadora con SQL Server 2008. Guía Número 5 Introducción En esta guía terminaremos de examinar los elementos que pueden ir en una instrucción SELECT así como las instrucciones que nos ayudan a definir una estructura de una base de datos y las instrucciones para poder realizar modificaciones a los objetos de la base de datos. Sintaxis general de la consulta SELECT SELECT <lista de columnas> [FROM <tabla(s) de origen >] [WHERE <condición restrictiva >] [GROUP BY <nombre de columna o expresión que utiliza una columna en la lista de selección>] [HAVING <condición restrictiva basadas en los resultados de GROUP BY>] [ORDER BY <listas de columna>] Ejemplo: USE NORTHWIND SELECT OrderID, Quantity As [Sin nombre de columna] FROM [Order Details] WHERE OrderID BETWEEN 11000 AND 11002

2 Base de datos I, Guía 5 Nota: Observe el uso de corchetes en esta consulta. Se debe de utilizar corchetes si el nombre de un objeto (en este caso una tabla) tiene espacios de por medio en él, tenemos que delimitar el nombre utilizando corchetes o comillas simples, lo que permite a SQL Server saber dónde empieza y dónde termina el nombre. Resultado de la consulta anterior es el siguiente: Aunque se ha solicitado sólo tres pedidos, se están viendo cada línea individual de detalle del pedido. Podríamos utilizar una calculadora o podríamos utilizar la cláusula GROUP BY con un agregado (en este caso vamos a utilizar SUM ( ) ) para obtener el total deseado. SELECT OrderID, SUM (Quantity) As [Sin nombre de columna] FROM [Order Details] WHERE OrderID BETWEEN 11000 AND 11002 GROUP BY OrderID Así obtiene lo que se está buscando:

Base de datos I. Guía 5 3 Lo que hizo fue agrupar en una suma los ORDER ID de los resultados, es decir en la primera consulta aparecían ORDER ID 11000 11000 11000 Sin nombre de columna 25 30 30 Con la función sum lo que hace es agrupar(en este caso por el ORDER ID) y realizar la suma, por eso da el resultado ORDER ID Sin nombre de columna 11000 85 TIPS: Puedo agregarle un titulo a la columna sin nombre con AS Como es de suponer, la función SUM devuelve totales; pero totales de qué? Si no hubiésemos suministrado la cláusula GROUP BY, la función SUM habría sumado todos los valores de todas las filas para la columna con nombre. Sin embargo, en este caso hemos suministrado una cláusula GROUP BY y, por tanto, el total proporcionado por la función SUM es el total de cada grupo. También podemos agrupar basándonos en múltiples columnas. Para ello, sólo tenemos que añadir una coma y el nombre de la siguiente columna. Funciones de agregado Las funciones de agregado realizan un cálculo sobre un conjunto de valores y devuelven un solo valor. Con la excepción de COUNT, las funciones de agregado omiten los valores NULL. Las funciones de agregado se suelen utilizar con la cláusula GROUP BY de la instrucción SELECT. COUNT: Devuelve el número de elementos de un grupo (conjunto de resultados). SELECT COUNT(*) FROM Employees AVG Devuelve la media de los valores de un grupo. Los valores nulos se pasan por alto al probar a ejecutar la misma consulta que ejecutamos anteriormente, pero ahora vamos a modificarla para que devuelva el promedio de la cantidad por pedido en lugar del total de cada pedido:

4 Base de datos I, Guía 5 SELECT OrderID, AVG (Quantity) AS promedio FROM [Order Details] WHERE OrderID BETWEEN 11000 AND 11002 GROUP BY OrderID El resultado es: MAX / MIN: MAX devuelve el valor máximo de la expresión o del valor de una columna y MIN lo contrario. SELECT OrderID, MIN(Quantity) AS promedio FROM [Order Details] WHERE OrderID BETWEEN 11000 AND 11002 GROUP BY OrderID NOTA: En realidad todas las funciones de agregado ignoran los valores NULL excepto COUNT (*). Agrupar condiciones con la cláusula HAVING. Hasta el momento, hemos aplicado todas nuestras condiciones a filas específicas. Si una determinada columna en una fila no tiene un valor especifico o no se encuentra dentro de un rango de valores, se omitirá toda la fila, y todo ello antes de pensar siquiera en las agrupaciones. Qué pasaría si deseáramos agrupar condiciones? Es decir, Qué pasaría si deseáramos que todas las filas se agregasen a un grupo pero sólo cuando los grupos se hubiesen acumulado completamente estaríamos preparados para aplicar la condición? Bueno, aquí es donde entra en acción la cláusula HAVING. La cláusula HAVING sólo se utiliza si también existe una cláusula GROUP BY en la consulta. Mientras la cláusula WHERE se aplica a todas las filas antes incluso de tener la oportunidad de convertirse en parte de un grupo, la cláusula HAVING se aplica al valor agregado de dicho grupo. Ejemplo:

Base de datos I. Guía 5 5 Primero vamos a realizar un ejemplo que no lleve la cláusula HAVING y después vamos a utilizar el mismo ejemplo, pero ahora con la cláusula HAVING. Sin HAVING SELECT OrderID, SUM(Quantity) AS TOTAL FROM [Order Details] GROUP BY OrderID El resultado es: filas afectadas) (830 Lamentablemente, es bastante difícil analizar una lista tan larga. Por tanto, vamos a dejar que SQL Server reduzca esta lista para ayudarnos a realizar nuestro análisis. Supongamos que sólo estamos interesados en cantidades de pedidos más grandes. Podemos modificar la consulta para que devuelva la misma información pero limitándose a los pedidos cuya cantidad total esté por encima de 300? La respuesta es sí, y es tan fácil como añadir la cláusula HAVING.

6 Base de datos I, Guía 5 Con HAVING SELECT OrderID, SUM(Quantity) AS TOTAL FROM [Order Details] GROUP BY OrderID HAVING SUM(Quantity) > 300 El resultado es: Como puede comprobar, podemos reducir rápidamente la lista hasta los elementos que nos interesan. INSTRUCCION SELECT Ejemplo: USE Northwind SELECT * FROM Employees En la instrucción anterior la primera línea indica que utilizaremos la base de datos Northwind. La segunda line se ha pedido seleccionar información (SELECT puede pensar en ello como en pedir que se muestre o consulte información). El asterisco * podría parecer algo extraño, pero realmente funciona igual que en cualquier otro sitio: es un comodín. Cuando escribimos SELECT * estamos indicando que deseamos seleccionar todas las columnas de la tabla (En este caso la tabla Employees.) FROM indica que hemos terminado de especificar los elementos que deseamos ver y estamos a punto de indicar el origen de la información (el origen es la tabla Employees). Ejemplo: USE AdventureWorks SELECT FirstName, Lastname, EmailAddress FROM Person.Contact En esta consulta solamente se piden los campos FirstName, Lastname y EmailAddress de la table Person.Contact

Base de datos I. Guía 5 7 LA CLAUSULA WHERE. Esta cláusula nos permite colocar condiciones sobre los resultados deseados. Los ejemplos que hemos visto hasta el momento son consultas SELECT sin restricciones en el sentido de que se han incluido en el resultado todas las filas de la tabla especificada. Las consultas sin restricciones son muy útiles para rellenar cuadros de lista y cuadros combinados y en otros escenarios en los que intentamos proporcionar un listado de dominio. Ejemplo: Ahora vamos a buscar información más específica de la tabla Person.Address de la base de datos AdventureWorks: USE AdventureWorks SELECT City, AddressLine1, PostalCode,StateProvinceID FROM Person.Address WHERE StateProvinceID = 74 Los primeros 3 resultados son: Ejemplo: City AddressLine1 PostalCode Nevada 2487 Riverside Drive 84407 Salt Lake 683 Larch Ct. 84101 City Salt Lake City 6119 11th 84101 Esta sentencia listara productos que tengan un precio único mayor a 60 USE NORTHWIND SELECT * FROM dbo.products WHERE UnitPrice >60.00 Esta sentencia listara todas los campos de la tabla categoria donde el nombre de categoria tenga coincidencia con la palabra produ(en cualquier parte del nombre) SELECT * FROM dbo.categories WHERE CategoryName LIKE '%produ%' OPERADORES QUE PODEMOS USAR CON LA CLAUSULA WHERE

8 Base de datos I, Guía 5 Insertando datos en una Tabla.

Base de datos I. Guía 5 9 El comando INSERT inserta una nueva fila en la tabla, al llenar las columnas con valores específicos. Sintaxis: INSERT INTO <tabla> [(lista de columnas)] VALUES (valores_de_datos) Ejemplo: INSERT INTO demo(cod_sucursal,nombre,apellido,telefono) VALUES (14,'Julia','Morales','22552100') Eliminando datos de una tabla. El comando DELETE elimina filas de una tabla o vista, que satisfagan una condición específica. Sintaxis: DELETE FROM table_name WHERE condición. Ejemplo: DELETE FROM demo where nombre= julia Si no se incluye la cláusula WHERE, se eliminarán todas las filas en la tabla indicada. Actualizando datos de una tabla. Este comando permite la actualización de uno o más campos de una fila o grupo de filas de una tabla o vista. Las sentencias UPDATE se utilizan para modificar datos existentes. Sintaxis: UPDATE nombre_tabla nombre_vista SET (nombre_columna = expresion DEFAULT NULL) WHERE (condición) Ejemplo: UPDATE demo SET cod_sucursal = 55 WHERE apellido= Morales Set: especifica la lista de columnas que se actualizarán.

10 Base de datos I, Guía 5 Procedimiento Ejercicio No 1 Realizar lo siguiente: 1. Crear una Base de datos con el siguiente nombre: SUCARNET_PRACTICA3. Nota: recuerde que SUCARNET se refiere a su código de carné como estudiante de la UDB 2. Poner en uso la base de datos que acaba de crear con el comando USE. Ejemplo: USE SUCARNET_PRACTICA3 3. Crear las siguientes tablas dentro de la base de datos: TABLA : ESTUDIANTES CAMPO TIPO DE DATO LONGITUD IdEstudiante INT Nombres VARCHAR 25 Apellidos VARCHAR 25 Direccion VARCHAR 50 Telefono VARCHAR 8 sexo char 1 TABLA : MATERIAS CAMPO TIPO DE DATO LONGITUD IdMateria INT Materia VARCHAR 30 TABLA : NOTAS CAMPO TIPO DE DATO LONGITUD IdEstudiante INT

Base de datos I. Guía 5 11 IdMateria INT Nota DECIMAL (10,2) 4. Insertar los siguientes datos a las tablas creadas anteriormente. TABLA ESTUDIANTES IdEstudiante Nombres Apellidos Dirección Teléfono Sexo 01 Maria HERNANDEZ COL. SANTA ISABEL 02 OSCAR MEJIA FINAL 4 CALLE OTE. 2254212 F 2609834 M 03 HILARIO URRUTIA Fnal cl progreso 2907834 M 04 JOSE JOSE 05 ELIAS ALFREDO QUEZADA Mejicanos 23663322 M URRUTIA Santa Tecla 2778934 M TABLA MATERIAS IdMateria Materias 111 Base de datos II 114 Ingenieria del Software 115 SQL SERVER TABLA NOTAS IdEstudiante IdMateria Nota 01 111 7 01 114 6.0 01 115 4 02 111 6 02 114 10 02 115 8.0

12 Base de datos I, Guía 5 5. Eliminar registros. Eliminar los registros de la tabla NOTAS; su IdMateria sea igual a 111 DELETE FROM NOTAS WHERE IdMateria = 113 6. Actualizar registros. Modificar los registros de la tabla NOTAS para el IdEstudiante = 2 y IdMateria = 115, la nota a modificar es 8.0 a 9.0 UPDATE NOTAS SET Nota=9.0 WHERE IdEstudiante =1 AND IdMateria=115 7-Modificar el nombre de la materia Ingeniería del Software por Desarrollo del Software 8- Eliminar a todos los alumnos que tengan apellido URRUTIA 9-Listar todos los estudiantes la tabla estudiantes 10-listar los apellidos y la direccion de los estudiantes que tienen id=1 ASIGNACION A continuación deberá realizar diferentes consultas con distintos niveles de dificultad, utilizando en algunas de ellas diferentes funciones asociadas con la sentencia SELECT: 1) Se desea un listado de los alumnos ordenados ascendentemente apellido 2) Se desea conocer cuántos estudiantes hay por cada género 3) Se desea conocer la nota promedio del alumno con id 1 4) Se desea conocer la nota mayor de las evaluaciones 5) De la tabla notas que estudiantes tienen promedios mayor o igual que 6 Bibliografía Francisco Charte Ojeda, SQL Server 2008. Madrid, España : ANAYA, 2009 1era edicion

Base de datos I. Guía 5 13 Guía 5: USO DE SENTENCIAS SQL Hoja de cotejo: 5 Alumno: Máquina No: Docente: GL: Fecha: EVALUACION % 1-4 5-7 8-10 Nota CONOCIMIENTO Del 20 al 30% Conocimie nto deficient e de los fundament os teóricos Conocimiento y explicación incompleta de los fundamentos teóricos Conocimiento completo y explicación clara de los fundamentos teóricos APLICACIÓN DEL CONOCIMIENTO Del 40% al 60% ACTITUD Del 15% al 30% No tiene actitud proactiva. Actitud propositiva y con propuestas no aplicables al contenido de la guía. Tiene actitud proactiva y sus propuestas son concretas. TOTAL 100%

Base de datos I. Guía 6 1 Facultad: Ingeniería Escuela: Computación Asignatura: Base de datos I Tema: Combinación de tablas Objetivo Utilice alias en los nombres de las tablas. Combine datos de varias tablas mediante combinaciones. Combinación de varios conjuntos de resultados en un único conjunto de resultados mediante el operador UNION. Materiales y Equipo Computadora con SQL Server 2008. Guía Número 6 Base de datos de ejemplo Joindb y Library Introducción Clave primaria Una clave primaria es un campo (o varios) que identifica un solo registro (fila) en una tabla. Para un valor del campo clave existe solamente un registro. create table usuarios( nombre varchar(20), clave varchar(10), primary key(nombre) ); Clave foranea Con la restricción "foreign key" se define un campo (o varios) cuyos valores coinciden con la clave primaria de la misma tabla o de otra, es decir, se define una referencia a un campo con una restricción "primary key" o "unique" de la misma tabla o de otra. La integridad referencial asegura que se mantengan las referencias entre las claves primarias y las externas. Por ejemplo, controla que si se agrega un código de editorial en la tabla "libros", tal código exista en la tabla "editoriales".

2 Base de datos I, Guía6 También controla que no pueda eliminarse un registro de una tabla ni modificar la clave primaria si una clave externa hace referencia al registro. Por ejemplo, que no se pueda eliminar o modificar un código de "editoriales" si existen libros con dicho código. alter table NOMBRETABLA1 add constraint NOMBRERESTRICCION foreign key (CAMPOCLAVEFORANEA) references NOMBRETABLA2 (CAMPOCLAVEPRIMARIA); Ejemplo Se tienen las tablas VENTAS y VENDEDOR, dichas tablas deberán relacionarse por el idvendedor que es la llave primaria en la tabla VENDEDOR y es foránea en la tabla VENTAS. El script es el siguiente --Creación de BD CREATE Database ventas GO USE ventas GO ---tabla vendedor CREATE TABLE VENDEDOR( idvendedor INT PRIMARY KEY, nombre VARCHAR(20), apellido VARCHAR(10), ); GO ---tabla ventas CREATE TABLE VENTAS( Idventa INT PRIMARY KEY, nombre VARCHAR(20), apellido VARCHAR(10), idvendedor INT foreign key (idvendedor) references VENDEDOR(idvendedor)) Cuando creamos relaciones en SQL Server, este nos permite crear un diagrama relacional de las tablas de la base de datos, como se muestra en la siguiente figura.

Base de datos I. Guía 6 3 Uso de alias en los nombres de tablas. El uso de alias en los nombres de tablas mejora la legibilidad de las secuencias de comandos, facilita la escritura de combinaciones complejas y simplifica el mantenimiento de Transact-SQL. Al escribir secuencias de comandos, puede sustituir un nombre de tabla descriptivo largo y complejo por un alias sencillo y abreviado. El alias se utiliza en lugar del nombre completo de la tabla. Sintaxis parcial: aliastabla SELECT * FROM servidor.basededatos.esquema.tabla AS Ejemplo 1: En este ejemplo se muestran los nombres de los clientes, el identificador del cliente y la cantidad vendida de las tablas buyers y sales. Esta consulta no utiliza alias en las tablas de la sintaxis de JOIN. USE joindb SELECT buyer_name, sales.buyer_id, qty FROM buyers INNER JOIN sales ON buyers.buyer_id = sales.buyer_id GO Ejemplo 2: En este ejemplo se muestran los nombres de los clientes, el identificador del cliente y la cantidad vendida de las tablas buyers y sales. Esta consulta utiliza alias en las tablas de la sintaxis de JOIN. USE joindb SELECT buyer_name, s.buyer_id, qty FROM buyers AS b INNER JOIN sales AS s ON b.buyer_id = s.buyer_id GO Ahora la tabla buyers se le podrá conocer con el alias b y la tabla sales se podrá conocer con el alias s NOTA: Algunas veces, la compleja sintaxis de JOIN y las subconsultas deben usar alias en los nombres de tablas. Por ejemplo, al combinar una tabla consigo misma deben utilizarse alias.

4 Base de datos I, Guía6 Combinación de datos de varias 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. Las tablas se combinan en función de las columnas que son comunes a ambas tablas. Cuando se combinan tablas, Microsoft SQL Server compara los valores de las columnas especificadas fila por fila y, después, utiliza los resultados de la comparación para combinar los valores que cumplan los criterios especificados en nuevas filas. Hay tres tipos de combinaciones: combinaciones internas, combinaciones externas y combinaciones cruzadas. Adicionalmente, en una instrucción SELECT se pueden combinar más de dos tablas mediante un conjunto de combinaciones o se puede combinar una tabla consigo misma mediante una autocombinación. JOIN: Es una operación que combina registros de dos tablas en una base de datos relacional que resulta en una nueva tabla (temporal) llamada tabla de JOIN. Las tablas se combinan para producir un único conjunto de resultados que incorpore filas y columnas de dos o más tablas. Sintaxis Parcial SELECT columna [, columna ] FROM {<tablaorigen >} [,...n] <tipocombinación > ::= [ INNER { { LEFT RIGHT FULL } [OUTER] } ] [ <sugerenciacombinación> ] JOIN <tablacombinada> ::= <tablaorigen > <tipocombinación > <tablaorigen > ON

Base de datos I. Guía 6 5 <condiciónbúsqueda> <tablaorigen > CROSS JOIN <tablaorigen > <tablacombinada> Selección de columnas específicas de varias tablas: Una combinación permite seleccionar columnas de varias tablas al expandir la cláusula FROM de la instrucción SELECT. En la cláusula FROM se incluyen dos palabras clave adicionales: JOIN y ON. La palabra clave JOIN especifica qué tablas se van a combinar y cómo. La palabra clave ON especifica las columnas que las tablas tienen en común. Consultas de dos o más tablas para producir un conjunto de resultados: Una combinación permite consultar dos o más tablas para producir un único conjunto de resultados. Al implementar combinaciones, tenga en cuenta los siguientes hechos e instrucciones: 1. Especifique la condición de combinación en función de claves principales y externas. 2. Si una tabla tiene una clave principal compuesta, cuando combine tablas debe hacer referencia a toda la clave en la cláusula ON. 3. Para combinar tablas, utilice columnas comunes a las tablas especificadas. Dichas columnas deben tener tipos de datos iguales o similares. 4. Haga referencia al nombre de la tabla si las columnas de las tablas que va a combinar tienen el mismo nombre. Califique los nombres de las columnas con el formato tabla.columna. 5. Limite el número de tablas de las combinaciones porque cuantas más tablas combine, mayor será la duración del proceso de la consulta. 6. Puede incluir varias combinaciones en una instrucción SELECT. Uso de combinaciones internas:

6 Base de datos I, Guía6 Las combinaciones internas combinan tablas mediante la comparación de los valores de las columnas que son comunes a ambas tablas. SQL Server sólo devuelve las filas que cumplen las condiciones de la combinación. Por qué se utilizan combinaciones internas: Utilice combinaciones internas para obtener información de dos tablas independientes y combinar dicha información en un conjunto de resultados. Al utilizar combinaciones internas, tenga en cuenta los siguientes hechos e instrucciones: 1. Las combinaciones internas son el tipo predeterminado de SQL Server. Puede abreviar la cláusula INNER JOIN como JOIN. 2. Para especificar las columnas que desea presentar en el conjunto de resultados, incluya los nombres calificados de las columnas en la lista de selección. 3. Incluya una cláusula WHERE para restringir las filas que se devuelven en el conjunto de resultados. 4. No utilice valores NULL como condición de combinación, ya que no se evalúan como iguales entre sí.

Base de datos I. Guía 6 7 Ejemplo 1: Supongamos que tenemos dos tablas: una de películas y otra de directores relacionadas entre sí: movies id title year director id directors name 1 Four Rooms 1995 3 2 Die Hard 1988 1 3 The Hunt for Red October 1990 1 1 John McTiernan 2 Alfred Hitchcock 3 Quentin Tarantino 4 Psycho 1960 2 Si quiero obtener todas las películas y el nombre de su director haría lo siguiente: USE MOVIES SELECT m.title, d.name FROM movies m INNER JOIN directors d ON m.director = d.id Donde los campos a seleccionar son title que está en la tabla movies y name que está en la tabla directores, como movies tiene el alias m, podemos anteponer ese alias a los campos que queramos seleccionar de la tabla movies, esto se hace para no causar ambigüedad en caso que hallan 2 campos con nombres iguales en cada tabla. Ejemplo 2: Este ejemplo devuelve los valores buyer_name, buyer_id y qty de los clientes que han adquirido algún producto. Los clientes que no hayan adquirido nada no se incluyen en el conjunto de resultados. Los clientes que han adquirido más de un producto aparecen una vez por cada compra realizada. Las columnas buyer_id de las dos tablas pueden especificarse en la lista de selección. USE joindb SELECT buyer_name, sales.buyer_id, qty FROM buyers INNER JOIN sales ON buyers.buyer_id = sales.buyer_id GO

8 Base de datos I, Guía6 RESULTADO: Ejemplo 3: En este ejemplo se devuelven los nombres de los productos y de las compañías que los suministran. Los productos sin suministradores asignados y los suministradores sin productos asignados no se incluyen en el conjunto de resultados. USE northwind SELECT productname, companyname FROM products INNER JOIN suppliers ON products.supplierid = suppliers.supplierid GO RESULTADO Ejemplo 4: En este ejemplo se devuelven los nombres de los clientes que han hecho pedidos después del 1/1/98. Observe que se utiliza una cláusula WHERE para restringir las filas devueltas en el conjunto de resultados. USE northwind SELECT DISTINCT companyname, orderdate FROM orders INNER JOIN customers ON orders.customerid = customers.customerid

Base de datos I. Guía 6 9 WHERE orderdate > '1/1/98' GO Procedimiento Realice los siguientes ejercicios: 1- Inicie Microsoft SQL Server Management Studio y verifique si existen las bases de datos Library y JoinDB, en caso que las BD antes mencionadas no se encuentren realice los siguientes pasos: a. Descargue del mismo sitio donde descargó la guía el archivo Recursos Guía 6. b. Cree una Carpeta y descomprima el archivo, se mostraran 4 archivos, que son el archivo Mdf y Ldf de cada Base de datos c. Dentro de SQL Server Management de clic derecho en Databases y seleccione Attach d. Se mostrará la ventana Attach DataBases, de clic en Add y se aparecerá una ventana donde deberá indicar la ubicación de los archivos que descargó.

10 Base de datos I, Guía6 e. Seleccione la base de datos joindb y de clic en OK. Luego se mostrara una ventana en la que daremos clic en OK f. Actualice su lista de base de datos y deberá aparecer joindb

Base de datos I. Guía 6 11 Realice el mismo procedimiento para adjuntar la base de datos Library 2 En este ejercicio, va a escribir y ejecutar consultas que combinan tablas en la base de datos library. Abra una sesión del SQL Server Management Studio e ingrese su número de carné en el usuario y password. En la lista de BD, haga clic en library. Utilice las tablas member y adult para realizar una consulta que devuelva los campos firstname, middleinitial, lastname, street, city, state y zip. Concatene las columnas firstname, middleinitial y lastname en una cadena de texto y asigne a la columna el alias name. Ejecute la consulta para comprobar que devuelve los resultados deseados (ver figura 1). Figura 1. 2. Para este ejercicio va utilizar las tablas title, item y copy, y va a generar una consulta que devuelva isbn, copy_no, on_loan, title, translation y cover, y valores para las filas de la tabla copy cuyo ISBN sea 1 (uno), 500 (quinientos) o

12 Base de datos I, Guía6 1000 (mil). Ordene los resultados por la columna isbn. Para cada tabla debe utilizar un alias. PASOS Escriba la lista de selección de la consulta. Escriba una cláusula FROM que cree una combinación interna entre las tablas title y copy sobre las columnas title_no. En la cláusula FROM, establezca los alias de las tablas que haya utilizado en la lista de selección. Agregue una segunda cláusula INNER JOIN para crear la combinación entre las tablas item y copy sobre las columnas isbn. agregue una cláusula WHERE que restrinja las filas de la tabla copy obtenidas de aquéllas cuyo ISBN sea 1 (uno), 500 (quinientos) o 1000 (mil). Escriba la cláusula ORDER BY para ordenar el resultado por el ISBN. Ejecute la secuencia de comandos (ver figura2). 3- En la base de datos Library (biblioteca) se tienen las siguientes tablas. Member Reservation Ítem Title En la tabla Member están los miembros que están afiliados a la biblioteca, en la tabla Reservation están las reservaciones de libros que han realizado los miembros de la biblioteca, la reserva se realiza por el isbn(número de identificación de los libros), la tabla Title esta los títulos de los libros el autor y la sinopsis y la tabla ítem están las traducciones que se les ha realizado a los libros que están en la tabla Title, cada libro

Base de datos I. Guía 6 13 solo puede tener un isbn, por ende si hay un libro traducido en 4 lenguajes tiene isbn diferentes para cada uno. Se pide una consulta que muestra el nombre y apellido (firstname y el lastname) de los cliente que han reservado libros, la consulta debe contener los siguientes campos: firstname, lastname, log_date,title, translation. Investigación -Investigue en qué consisten las combinaciones externas Bibliografía Francisco Charte Ojeda, SQL Server 2008. Madrid, España : ANAYA, 2009 1era edicion

14 Base de datos I, Guía6 Guía 6: COMBINACIO Y RELACION DE TABLAS Hoja de cotejo: 6 Alumno: Máquina No: Docente: GL: Fecha: EVALUACION % 1-4 5-7 8-10 Nota CONOCIMIENTO Del 20 al 30% Conocimie nto deficient e de los fundament os teóricos Conocimiento y explicación incompleta de los fundamentos teóricos Conocimiento completo y explicación clara de los fundamentos teóricos APLICACIÓN DEL CONOCIMIENTO Del 40% al 60% ACTITUD Del 15% al 30% No tiene actitud proactiva. Actitud propositiva y con propuestas no aplicables al contenido de la guía. Tiene actitud proactiva y sus propuestas son concretas. TOTAL 100%

Base de datos I. Guía 7 1 Facultad: Ingeniería Escuela: Computación Asignatura: Base de datos I Tema: USO DE COMBINACIONES EXTERNAS. Objetivo Específico Definir las combinaciones externas Conocer el uso de las combinaciones RIGTH y LEFT Materiales Equipo Computadora con SQL Server 2008 R2. Guía Número 7 Introducción Teórica y Una combinación interna (JOIN) encuentra registros de la primera tabla que se correspondan con los registros de la segunda, es decir, que cumplan la condición del "ON" y si un valor de la primera tabla no se encuentra en la segunda tabla, el registro no aparece. Si queremos saber qué registros de una tabla NO encuentran correspondencia en la otra, es decir, no existe valor coincidente en la segunda, necesitamos otro tipo de combinación, "OUTER JOIN" (combinación externa). Las combinaciones externas combinan registros de dos tablas que cumplen la condición, más los registros de la segunda tabla que no la cumplen; es decir, muestran todos los registros de las tablas relacionadas, aún cuando no haya valores coincidentes entre ellas. Este tipo de combinación se emplea cuando se necesita una lista completa de los datos de una de las tablas y la información que cumple con la condición. Las combinaciones externas se realizan solamente entre 2 tablas. Hay tres tipos de combinaciones externas: "LEFT OUTER JOIN", "RIGHT OUTER JOIN" y "FULL OUTER JOIN"; se pueden abreviar con "LEFT JOIN", "RIGHT JOIN" y "FULL JOIN" respectivamente.

2 Base de datos I, Guía 7 Se emplea una combinación externa izquierda para mostrar todos los registros de la tabla de la izquierda. Si no encuentra coincidencia con la tabla de la derecha, el registro muestra los campos de la segunda tabla seteados a "null". En el siguiente ejemplo solicitamos el título y nombre de la editorial de los libros: SELECT titulo,nombre FROM editoriales AS e LEFT JOIN libros AS l ON codigoeditorial = e.codigo; El resultado mostrará el título y nombre de la editorial; las editoriales de las cuales no hay libros, es decir, cuyo código de editorial no está presente en "libros" aparece en el resultado, pero con el valor "null" en el campo "titulo". Es importante la posición en que se colocan las tablas en un "left join", la tabla de la izquierda es la que se usa para localizar registros en la tabla de la derecha. Entonces, un "left join" se usa para hacer coincidir registros en una tabla (izquierda) con otra tabla (derecha); si un valor de la tabla de la izquierda no encuentra coincidencia en la tabla de la derecha, se genera una fila extra (una por cada valor no encontrado) con todos los campos Sintaxis: SELECT CAMPOS FROM TABLAIZQUIERDA LEFT JOIN TABLADERECHA ON CONDICION; Ejemplo 1: 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

Base de datos I. Guía 7 3 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. 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

4 Base de datos I, Guía 7 Ejemplo 2 En este ejemplo se devuelven los valores buyer_name, buyer_id y qty de todos los clientes y sus compras. Observe que los clientes que no han adquirido ningún producto se enumeran en el conjunto de resultados, pero aparecen valores NULL en las columnas buyer_id y qty. USE joindb SELECT buyer_name, sales.buyer_id, qty FROM buyers LEFT OUTER JOIN sales ON buyers.buyer_id = sales.buyer_id GO Uso de las combinaciones cruzadas Utilice combinaciones cruzadas para presentar todas las combinaciones de filas posibles de las columnas seleccionadas en las tablas combinadas.

Base de datos I. Guía 7 5 Por qué se utilizan las combinaciones cruzadas. Aunque las combinaciones cruzadas no se suelen utilizar en una base de datos normalizada, se pueden utilizar para generar datos de prueba para una base de datos o listas de todas las combinaciones posibles para elaborar listas de comprobación o patrones comerciales. Cuando se utilizan combinaciones cruzadas, SQL Server genera un producto cartesiano en el que el número de filas del conjunto de resultados es igual al número de filas de la primera tabla multiplicado por el número de filas de la segunda tabla. Por ejemplo, si hay 8 filas en una tabla y 9 filas en la otra, SQL Server devuelve un total de 72 filas. Sugerencia: Señale que la palabra clave ON y la lista de columnas asociada no se utilizan en la instrucción SELECT porque las combinaciones cruzadas devuelven todas las combinaciones posibles de las filas de cada tabla especificada. En las combinaciones cruzadas no se requiere una columna común. o Combinación de varios conjuntos de resultados. El operador UNION combina el resultado de dos o más instrucciones SELECT en un único conjunto de resultados.

6 Base de datos I, Guía 7 Utilice el operador UNION cuando los datos que desee obtener residan en ubicaciones diferentes y no se pueda tener acceso a ellas con una única consulta. Al utilizar el operador UNION, tenga en cuenta los siguientes hechos e instrucciones: o o o o o SQL Server requiere que las tablas a las que se hace referencia tengan tipos de datos similares, el mismo número de columnas y el mismo orden de columnas en la lista de selección de cada consulta. SQL Server quita las filas duplicadas del conjunto de resultados. Sin embargo, si utiliza la opción ALL, se incluyen todas las filas en el conjunto de resultados, incluso las duplicadas. Debe especificar los nombres de las columnas en la primera instrucción SELECT. Por lo tanto, si desea definir nuevos encabezados de columnas en el conjunto de resultados, deberá crear los alias de columnas en la primera instrucción SELECT. Si desea que todo el conjunto de resultados aparezca con un orden específico, debe especificar la ordenación con una cláusula ORDER BY en la instrucción UNION. De lo contrario, puede que el conjunto de resultados no se devuelva en el orden que desea. Puede lograr un mayor rendimiento si divide una consulta compleja en varias instrucciones SELECT y, después, utiliza el operador UNION para combinarlas. Sintaxis instrucciónselect UNION [ALL] instrucciónselect Ejemplo 1: En este ejemplo se combinan dos conjuntos de resultados. El primero devuelve el nombre, la ciudad y el código postal de todos los clientes desde la tabla customers. El segundo devuelve el nombre, la ciudad y el código postal de todos los empleados desde la tabla employees. Observe que, cuando se utiliza el operador UNION para combinar ambos conjuntos de resultados, se devuelven los alias de las columnas de la primera lista de selección. USE northwind SELECT (firstname + ' ' + lastname) AS name, city, postalcode FROM employees UNION SELECT companyname, city, postalcode FROM customers GO

Base de datos I. Guía 7 7 Procedimiento Bibliografía Realice los siguientes ejercicios. Guía 1 1. Para combinar varias tablas mediante una combinación externa En este procedimiento va a escribir y ejecutar una consulta para obtener el nombre completo y member_no de un miembro de la tabla member y los valores isbn y log_date de la tabla reservation, para los miembros 250, 341 y 1675 de la base de datos LIBRARY Ordene los resultados por member_no. Debe mostrar la información de estos miembros incluso si no tienen libros en préstamo. Escriba la lista de selección de la consulta: o o o o o Cree la columna name; para ello, concatene las columnas lastname,firstname y middleinitial de cada miembro. Cree la columna date; para ello, convierta log_date al tipo de datos char(8). Escriba una cláusula FROM que cree una combinación externa izquierda entre las tablas member y reservation sobre las columnas member_no. Escriba una cláusula WHERE para obtener de la tabla member los miembros cuyos números sean 250, 341 y 1675. Escriba la cláusula ORDER BY para ordenar los resultados por los números de los miembros.

8 Base de datos I, Guía 7 Ejecute la consulta para comprobar que devuelve los resultados deseados. Qué miembros no tienen libros en préstamo? El resultado debería ser el siguiente: 2. Uso del operador UNION para combinar conjuntos de resultados En este ejercicio, va a producir un único conjunto de resultados al utilizar el operador UNION para concatenar los resultados de tres instrucciones SELECT similares. Se desea obtener como resultado una lista de direcciones completas para enviar tarjetas a nuestros empleados, clientes y suministradores. Utilice la base de datos Northwind, las tablas a utilizar son las siguientes: Customers, Suppliers, Employees.