Vous êtes sur la page 1sur 82

TALLER DE BASE DE

DATOS
UNIDAD 3
SEMANA 10
Ing. César E. Aguirre Rodríguez
UNIDAD 3: IMPLEMENTACIÓN DE BASES DE DATOS

SEMANA 10: Operadores aritméticos, relacionales y lógicos.


Funciones de columna, Funciones de fecha, sub consultas
y consultas anidadas
LOGRO DE SESIÓN

Al finalizar la sesión, el estudiante realiza consultas con fechas,


operaciones con columnas, consultas multi tablas.

Temario:

1. Funciones fecha
2. Funciones cadena
3. Funciones matemáticas
4. Consultas multi tabla
5. Sub consultas
FUNCIONES CADENA
FUNCIONES DE TEXTO O CADENA

• Las funciones de texto en SQL Server realizan operaciones sobre cadenas de


caracteres o contenido de los campos de tipo carácter y devuelven un valor de
cadena o un valor entero.

Función Explicación
ASCII Retorno el valor ASCII del primer caracter
LTRIM Elimina espacios en blanco iniciales
SPACE Devuelve una cadena de espacios
STR Convierte un dato a tipo cadena de caracteres
CONCAT Concatena cadenas de caracteres
STUFF Inserta una cadena en otra
REPLACE Reemplaza una cadena por otra
SUBSTRING Extrae una cantidad de caracteres de una cadena
REPLICATE Repite una cadena de caracteres
FUNCIONES DE TEXTO O CADENA

Función Explicación
LEFT Obtiene caracteres de la izquierda
REVERSE Invierte la escritura de una cadena
UPPER Convierte a mayúsculas
LEN Obtiene la longitud de la cadena
RIGHT Devuelve caracteres de la derecha
LOWER Convierte a minúsculas
Elimina los espacios en blanco del final de una cadena
RTRIM
de caracteres
EJEMPLOS

/* Quita los espacios en blanco, reemplaza los espacios en


blanco por una cadena sin caracteres.*/
select REPLACE('SQL Server Manual Profesional',' ','');

/* Muestra la Cuarta letra*/


SELECT SUBSTRING(Replace('Del Castillo',' ',''),4,1);

/* letras en minuscula*/
SELECT LOWER('Del Castillo');

/* REVERSE invierte la cadena de caracteres.*/


select REVERSE('Un gestor de base de datos');
EJEMPLOS

/* Reemplazo de caracteres */
select stuff('Funciones de texto y cadena',14, 5,'Fechas y
Horas');

/* Concatenar */
select Upper('Alberto debe ') + ltrim(Str(800)) + Space(1) +
lower('dólares');

/* Elimina los espacios de la derecha y de izquierda */


select len(rTRIM(lTRIM(' Hola ')));
EJEMPLOS

/*Extraer caracteres, desde la posición 3 extrae 5 caracteres*/


SELECT SUBSTRING('Gestor de Negocios',4,3);

/*Replace, reemplaza la letra a por el número 3*/


select REPLACE('Este mensaje es el original','e','3');
FUNCIONES FECHA
FUNCIONES DE FECHA Y HORA EN SQL SERVER

• Fecha y Hora del sistema

• SYSDATETIME — Fecha y Hora del Servidor

• GETDATE — Obtiene la fecha del Servidor

• Fecha en partes

• DateName — Nombre de parte de la fecha determinada

• DatePart — Parte de la fecha

• Day — El número de día del mes

• Month — El número del mes

• Year — El año de una fecha


FUNCIONES DE FECHA Y HORA EN SQL SERVER

• Añadir y obtener lapsos entre fechas.

• DateDiff — Diferencia entre dos fechas

• DATEADD — Añade partes de fecha a una fecha determinada

• Obtener si el dato es fecha o no

• IsDate — Verdadero si es dato es de tipo fecha


IDIOMA DEL SGBD SQL SERVER

• Es importante conocer el idioma del SGBD SQL SERVER

• ¿Cómo ver el lenguaje SQL?

select @@language

• Para ver todos los lenguajes disponibles en SQL y cuáles son sus propiedades
podemos hacer lo siguiente:

exec sp_helplanguage;
SELECT @@LANGUAGE

• con lenguaje «español» el formato de fecha es

• dd/mm/yyy

• con lenguaje «español» el formato de fecha es

• mm/dd/yyyy

-- Formato de fecha (Ingles) Y=año/M=mes/D=dia


set dateformat YMD;

select dateadd(day,3,'1980/11/02');
MODIFICAR EL LENGUAJE CON MANAGMENTENT STUDIO

* Opcional
MODIFICAR EL LENGUAJE CON MANAGMENTENT STUDIO

* Opcional
PARTES DE LA FECHA

• Las partes de la fecha son abreviaturas que permiten especificar que parte de la
fecha u hora se desea trabajar u obtener.
Significado Abreviatura
year yy , yyyy
quarter qq , q
month mm , m
dayofyear dy , y
day dd , d
week wk , ww
weekday dw
hour hh
minute mi, n
second ss , s
EJEMPLOS CON FECHAS

/*Horas, minutos, segundo y milisegundos */


select datepart(hour,getdate()) 'Hora',
datepart(minute ,getdate()) 'Minuto',
datepart(second,getdate()) 'Segundo',
datepart(millisecond,getdate()) 'Milisegundo';

/*Año, mes y dia*/


select datepart(year,getdate()) 'Año',
datepart(month,getdate()) 'Mes',
datepart(day,getdate()) 'Dia';
EJEMPLOS CON FECHAS

/*GetDate () obtiene hasta MilliSeconds.


SysDateTime() obtiene hasta NanoSeconds.*/
select getdate() As 'Fecha Actual',
SYSDATETIME() As 'Fecha Sistema';

/*Año, nombre del mes y nombre del día*/


select DATENAME(yy,Getdate()) As 'Año',
DATENAME(mm,Getdate()) 'Mes',
DATENAME(dw,Getdate()) 'Día';

/*Año, mes y dia*/


select datename(year,getdate()) 'Año',
datename(month,getdate()) 'Mes',
datename(day,getdate()) 'Dia';
OPERACIONES CON FECHAS - DATEADD

dateadd(partedelafecha,numero,fecha): agrega un intervalo a la fecha especificada, es


decir, retorna una fecha adicionando a la fecha enviada como tercer argumento, el
intervalo de tiempo indicado por el primer parámetro, tantas veces como lo indica el
segundo parámetro. Los valores para el primer argumento pueden ser: year (año),
quarter (cuarto), month (mes), day (dia), week (semana), hour (hora), minute
(minuto), second (segundo) y millisecond (milisegundo). Ejemplos:

/*Agregando 60 días a la fecha actual*/


select GetDate(), dateadd(d,60,GetDate())

/*Agregamos 3 dias*/
select dateadd(d,3, GetDate());

/*Visualiamos el dia anterior*/


SELECT DATEADD(d,-1,GETDATE()) 'Ayer'
OPERACIONES CON FECHAS - DATEADD

/*Agregamos 3 meses a la fecha actual*/


select dateadd(month,3,GETDATE());

/*Agregar 2 horas a la fecha actual */


select dateadd(hour,2,GETDATE());

/*Agregamos 16 minutos a la fecha actual*/


select dateadd(minute,16,GETDATE());
OPERACIONES CON FECHAS - DATEDIFF

datediff(partedelafecha,fecha1,fecha2): calcula el intervalo de tiempo (según el


primer argumento) entre las 2 fechas. El resultado es un valor entero que corresponde
a fecha2-fecha1. Los valores de "partedelafecha) pueden ser los mismos que se
especificaron anteriormente. Ejemplos:

set dateformat YMD;


-- Diferencia de fechas
select datediff (day,'2005/10/28','2006/10/28');

set dateformat YMD;


-- Diferencia de fechas
select datediff(month,'2005/10/28','2006/11/29');
FECHAS CON BD - NORTHWIND

/*Órdenes del año 1998 */


select *
from Orders
where year(OrderDate) = 1998;

/*Órdenes de Abril, Mayo y Junio de 1997*/


select *
from Orders
where MONTH(OrderDate) in (4,5,6) and year(Orderdate) = 1997;
FECHAS CON BD - NORTHWIND

/*Listado de las órdenes, su ID o número,


la fecha de la orden, la fecha de atención
y la cantidad de días en que fue atendida.*/

select OrderID, Format(OrderDate,'dd/MM/yy') As 'Fecha Emisión',


Format(ShippedDate,'dd/MM/yy') As 'Fecha Atención' ,
Datediff(d,OrderDate, ShippedDate) As 'Días en Atender'
from Orders;
FECHAS CON FORMATO

• A partir de SQL Server 2012:

SELECT FORMAT(GETDATE(), 'dd/MM/yyyy');

SELECT FORMAT(GETDATE(), 'yyyy/MM/dd');


FUNCIONES DE COLUMNA - AGREGADOS
FUNCIONES DE COLUMNAS

• Las funciones de agregado se usan generalmente para obtener información desde


varias tablas haciendo cálculos en base a un detalle, por ejemplo, poder calcular la
cantidad de facturas o boletas generadas por un empleados, el total de compras
de un clientes, el promedio de monto de los documentos de compra de los
proveedores, etc.
FUNCIONES DE COLUMNAS

AVG Devuelve el Promedio de los valores


MIN Devuelve el valor Mínimo
SUM Suma los valores
COUNT Cuenta la cantidad de celdas
STDEV Devuelve la desviación estándar Muestral
STDEVP Devuelve la desviación estándar Poblacional
VAR Devuelve la Varianza muestral
VARP Devuelve la Varianza Poblacional
MAX Devuelve el valor Máximo
EJERCICIOS – BD NORTHWIND

/* usamos la BD Northwind */
use Northwind

/*El promedio de Precios de los productos */


select AVG(UnitPrice) As Promedio from Products ;

/*El Precio mas alto de los productos*/


select Max(UnitPrice) As 'Precio mayor' from Products;

/*El Precio mas bajo de los productos*/


select Min(UnitPrice) As 'Precio menor' from Products;

/* Cantidad de Productos*/
select Count(*) As 'Cantidad de Productos' from Products;
EJERCICIOS – BD NORTHWIND

/*Cantidad de Productos en Stock*/


select Sum(UnitsInStock) As 'Productos en Stock' from Products;

/* Valor total de los Productos en Stock*/


select Sum(UnitsInStock * UnitPrice) 'Productos en Stock'
from Products;

/*Monto total vendido en el año 1997 y la cantidad de órdenes*/


select Sum(Freight) As 'Monto total',
COUNT(OrderID) As 'Cantidad'
from Orders
where YEAR(OrderDate) = 1997;
EJERCICIOS – BD NORTHWIND

/*Stock mas alto y mas bajo de productos*/


select Max(UnitsInStock) As 'MAX. Productos en Stock',
Min(UnitsInStock) As 'MIN. Productos en Stock'
from Products;

/*Cantidad vendida del producto con código 23*/


select sum(Quantity) 'Unidades'
from [Order Details] where ProductID = 23

/* Cantidad de órdenes generadas y monto total vendido del


Empleado con código 3*/
select Count(OrderID) 'Cantidad', SUM(Freight) 'Monto Total'
from Orders
where EmployeeID = 3;
CONSULTAS SELECT MULTI TABLAS
Tipos de JOIN
SENTENCIA JOIN

• La sentencia JOIN (unir, combinar) de SQL permite combinar registros de una o


más tablas en una base de datos relacional.

• El estándar ANSI del SQL especifica cinco tipos de JOIN: INNER, LEFT OUTER, RIGHT
OUTER, FULL OUTER y CROSS.
INNER JOIN

• Cualquier registro de la tabla A o de la tabla B que no tenga uno correspondiente


en la otra tabla es excluido, y solo aparecerán los que tengan correspondencia en
la otra tabla.

• Este es el tipo de JOIN más utilizado, por lo que es considerado el tipo de


combinación predeterminado.

A∩B
INNER JOIN

• Su sintaxis es:

FROM Tabla1 [INNER] JOIN Tabla2 ON Condiciones_Vinculos_Tablas

• Así, para seleccionar los registros comunes entre la Tabla1 y la Tabla2 que tengan
correspondencia entre ambas tablas por el campo Col1, escribiríamos:

SELECT T1.Col1, T1.Col2, T1.Col3, T2.Col7


FROM Tabla1 T1 INNER JOIN Tabla2 T2 ON T1.Col1 = T2.Col1
INNER JOIN

• Por ejemplo, para obtener en la BD Northwind los clientes que tengan algún pedido,
bastaría con escribir:

SELECT O.OrderID,
C.CustomerID,
C.CompanyName,
O.OrderDate
FROM Customers C
INNER JOIN Orders O ON C.CustomerID = O.CustomerID ;
INNER JOIN
COMBINACIONES EXTERNAS (OUTER JOIN)

• Mediante esta operación no se requiere que un registro en una tabla tenga un


registro relacionado en la otra tabla.

• Nos permite seleccionar algunas filas de una tabla aunque éstas no tengan
correspondencia con las filas de la otra tabla con la que se combina.

• Existen tres tipos de combinaciones externas, el Left Join, el Right Join y el Full
Join.

• La sintaxis general de las combinaciones externas es:

FROM Tabla1 [LEFT/RIGHT/FULL] [OUTER]


JOIN Tabla2 ON Condiciones_Vinculos_Tablas

* el uso de la palabra OUTER es opcional.


LEFT JOIN

• Se obtienen todas las filas de la tabla colocada a la izquierda, aunque no tengan


correspondencia en la tabla de la derecha.

• Esto se ilustra gráficamente de la siguiente manera:

A-B
LEFT JOIN

• La sintaxis general de es:

SELECT T1.Col1, T1.Col2, T1.Col3, T2.Col7


FROM Tabla1 T1 LEFT [OUTER] JOIN Tabla2 T2 ON T1.Col1 = T2.Col1
LEFT JOIN

• De este modo, volviendo a BD Northwind, si escribimos la siguiente consulta:

SELECT O.OrderID, C.CustomerID, C.CompanyName, O.OrderDate


FROM Customers C
LEFT JOIN Orders O ON C.CustomerID = O.CustomerID;
LEFT JOIN

• Obtendremos 832 registros ya que se incluyen todos los clientes y sus pedidos,
incluso aunque no tengan pedido alguno.
RIGHT JOIN

• Análogamente, usando RIGHT JOIN se obtienen todas las filas de la tabla de la


derecha, aunque no tengan correspondencia en la tabla de la izquierda.

• El diagrama en este caso es complementario al anterior:

B-A
RIGHT JOIN

• Así, para seleccionar todas las filas de la Tabla2, aunque no tengan


correspondencia con las filas de la Tabla1 podemos utilizar la cláusula RIGHT:

SELECT T1.Col1, T1.Col2, T1.Col3, T2.Col7


FROM Tabla1 T1
RIGHT [OUTER] JOIN Tabla2 T2 ON T1.Col1 = T2.Col1
RIGHT JOIN

• Si en nuestra base de datos de ejemplo queremos obtener todos los pedidos


aunque no tengan cliente asociado, junto a los datos de dichos clientes,
escribiríamos:

SELECT OrderID, C.CustomerID, CompanyName, OrderDate


FROM Customers C RIGHT JOIN
Orders O ON C.CustomerID = O.CustomerID;

En este caso se devuelven 830 registros que son todos los pedidos. Si hubiese
algún pedido con el CustomerID vacío (nulo) se devolvería también en esta
consulta (es decir, órdenes sin clientes), aunque en la base de datos de ejemplo
no se da el caso.
FULL JOIN

• Se obtienen todas las filas en ambas tablas, aunque no tengan correspondencia en


la otra tabla. Es decir, todos los registros de A y de B aunque no haya
correspondencia entre ellos, rellenando con nulos los campos que falten:

BUA
FULL JOIN

• Su sintaxis es:

SELECT T1.Col1, T1.Col2, T1.Col3, T2.Col7


FROM Tabla1 T1
FULL [OUTER] JOIN Tabla2 T2 ON T1.Col1 = T2.Col1

• Por ejemplo, en Northwind esta consulta:

SELECT OrderID, C.CustomerID, CompanyName, OrderDate


FROM Customers C
FULL JOIN Orders O ON C.CustomerID = O.CustomerID;

Nos devuelve nuevamente 832 registros: los clientes y sus pedidos, los clientes sin
pedido (hay 2) y los pedidos sin cliente (que en este caso son 0).
EJERCICIO 1 – BD NORTHWIND

• Listado de las órdenes y los nombres del cliente y del empleado que las generó

select O.OrderID As 'Orden',


O.Freight as 'Monto',
C.CompanyName 'Cliente',
Empleado = E.LastName + SPACE(1) + E.FirstName
from Orders As O
inner join Customers As C on O.CustomerID = C.CustomerID
join Employees As E on O.EmployeeID = E.EmployeeID;
EJERCICIO 2 – BD NORTHWIND

• El detalle de la orden 10275, incluyendo el nombre del producto.

select Od.OrderID As 'Nº Orden',


Od.ProductID 'Cód. Producto',
P.ProductName As 'Descripción',
Od.UnitPrice As 'Precio',
Od.Quantity As 'Cantidad'
from [Order Details] As OD
inner join Products As P on od.ProductID = P.ProductID
where OrderID = 10275
OPCIONES DE LISTADO
Top, Distinct, Union
OPCIONES EN UN LISTADO CON SELECT

Las opciones son cláusulas adicionales que nos permiten reducir la cantidad de
registros en el listado, mostrar registros únicos, obligar al optimizar a usar un índice,
combinar dos instrucciones, entre otras opciones.

Opción Explicación
Limita las filas del conjunto de resultados. Se puede usar con un valor n o
Top
especificar un porcentaje.

Permite mostrar registros que hayan sido limitados usando la opción Top
With Ties
pero que tienen un valor igual al último registro que aparece.

Distinct Permite mostrar valores sin duplicados en una consulta.

With (index…) Obliga al optimizador a usar un índice específico.

Union Permite unir diferentes consultas en un solo conjunto de resultados.

Into Tabla Permite crear una tabla con el conjunto de resultados.

Permiten listar un grupo de resultados que aparecen ordenados pero sin


Offset y Fetch Next
incluir los primeros.
EJERCICIOS 1

• Listar los productos ordenados por precio, mostrar los 10 mas caros.

select Top 10 P.ProductID, P.ProductName,


P.UnitPrice, P.UnitsInStock
from Products P
order by P.UnitPrice desc;
EJERCICIOS 2

• Listar las órdenes con mas monto, mostrar el 20% de estas.

select Top 20 percent O.OrderID,


O.OrderDate, O.Freight
from Orders As O
order by O.Freight desc;
USO DE DISTINCT

• Usando Northwind, listado de los clientes que compraron en el primer mes de


1998

select C.CustomerID As 'Código', C.CompanyName


'Cliente'
from Customers C
inner join Orders O on C.CustomerID = O.CustomerID
where Month(O.OrderDate) = 1
and YEAR(O.OrderDate) = 1998
Order by Cliente;
USO DE DISTINCT

• Note que hay Clientes que se repiten.


USO DE DISTINCT

• Usando Distinct los clientes que se repiten no aparecen

select Distinct C.CustomerID As 'Código',


C.CompanyName As 'Cliente'
from Customers As C
join Orders As O on C.CustomerID = O.CustomerID
where Month(O.OrderDate) = 1
and YEAR(O.OrderDate) = 1998
Order by Cliente;
USO DE DISTINCT
USO DE UNION SIMPLE

• Listado de los productos de las categorías 3 y 5 unida con los productos de las
categorías 2,6 y 8

select * from Products where


CategoryID in (3,5)
union
select * from Products where
CategoryID in (2,6,8);
ESTRUCTURA CASE
ESTRUCTURA CASE

• CASE se puede usar en cualquier declaración o cláusula que permita una expresión
válida.

• La estructura CASE se puede usar en SELECT, UPDATE, DELETE y SET. Case se


puede usar también en:

• La lista de campos de la instrucción Select

• En las expresiones con el operador IN (Ver Operadores en SQL Server)

• La cláusula WHERE (Ver Filtrado de datos)

• La cláusula ORDER BY (Ver Ordenamientos)

• La cláusula HAVING (Ver Filtros Having).


EJERCICIO 1

select P.ProductID as 'Código', P.ProductName as


'Descripción',
Case CategoryID
When 1 then 'Bebidas'
When 2 then 'Condimentos'
When 3 then 'Confecciones'
When 4 then 'Productos diarios'
When 5 then 'Cereales'
When 6 then 'Carnes'
When 7 then 'Conservas'
When 8 then 'Productos marinos' End As Categoría
from Products As P;
EJERCICIO 2

select T.TerritoryID As 'Código',


T.TerritoryDescription As 'Territorio',
Region = case T.RegionID
When 1 then 'Este'
When 2 then 'Oeste'
When 3 then 'Norte'
When 4 then 'Sur' End
from Territories As T;
SUB CONSULTAS
SUB CONSULTAS

• Una sub consulta es una consulta anidada en un SELECT, INSERT, UPDATE o DELETE
e inclusive en otra sub consulta.

• Las sub consultas se pueden utilizar en cualquier parte en la que se permita una
expresión.

• Es necesario conocer la estructura de la base de datos para poder relacionar las


tablas correctamente y lograr los resultados esperados.

• Los resultados obtenidos con sub consultas se pueden también obtener con el uso
de Joins.
SUB CONSULTAS

• Las sub consultas pueden utilizarse de dos formas:

1. Dentro de la Lista de campos de la instrucción Select, esta subconsulta es la que


reporta un valor. Se debe relacionar la tabla después del From con la tabla de la
Subconsulta.

select ListaCampos, (Select …. subconsulta)


from Tabla

2. En las clásulas Where

Select ListadeCampos, OtroCampo, UltimoCampo


from Tabla
WHERE Campo [NOT] IN (subconsulta)
WHERE Campo operador [ANY | ALL] (subconsulta)
WHERE [Not] Exists (subconsulta)
EJERCICIOS 1

• Listado de las categorías y la cantidad de productos de cada una.

select C.CategoryID As 'Código Categoría',


C.CategoryName As 'Descripción',
(select COUNT(P.ProductID)
from Products As P
where P.CategoryID = C.CategoryID) As 'Cant. Productos'
from Categories As C
EJERCICIOS 1
EJERCICIOS 2

• Empleados y la cantidad de órdenes del año 1997, orden descendente


por cantidad de órdenes.

select E.EmployeeID As 'Código',


Empleado = E.FirstName + SPACE(1)+ E.LastName,
E.Address As 'Dirección',
(select Count(O.OrderID)
from Orders As O
where O.EmployeeID = E.EmployeeID
and year(O.Orderdate) = 1997) As 'Cantidad Órdenes'
from Employees As E
EJERCICIOS 2
EJERCICIO 3

• Listar las órdenes que generaron los clientes de México

select O.OrderID As 'Nº Orden',


Format(O.OrderDate,'dd/MM/yyy') As 'Fecha',
O.CustomerID As 'Cód. Cliente',
C.CompanyName As 'Cliente' ,
C.Country As 'País'
from Orders As O
join Customers As C on O.CustomerID = C.CustomerID
where O.CustomerID in (select C.CustomerID
from Customers As C where Country = 'Mexico');
EJERCICIO 3
RESTRICCIONES EN SUB CONSULTAS

Las sub consultas tienen las siguientes restricciones:

• Los campos de una sub consulta que se especifica con un operador de comparación, sólo
puede incluir un nombre de expresión o columna.

• Los campos que incluyen EXISTS e IN pueden reportar un conjunto de resultados.

• Si la cláusula WHERE de una consulta externa incluye un nombre de columna, debe ser
compatible con una combinación con la columna indicada en la lista de selección de la sub
consulta.

• La palabra clave DISTINCT no se puede usar con sub consultas que incluyan GROUP BY.

• No se pueden especificar las cláusulas COMPUTE (Compute by están discontinuadas en


las versiones de SQL Server 2012 y sucesivas) e INTO.
RESTRICCIONES EN SUB CONSULTAS

• Los tipos de datos ntext, text y image no están permitidos en sub consultas.

• Las sub consultas que se especifican con un operador de comparación sin modificar (no
seguido de la palabra clave ANY o ALL) no pueden incluir las cláusulas GROUP BY y HAVING.

• Sólo se puede especificar ORDER BY si se especifica también TOP.

• Una vista creada con una sub consulta no se puede actualizar.

• La lista de selección de una sub consulta especificada con EXISTS, por convención, tiene un
asterisco (*) en lugar de un solo nombre de columna. Las reglas de una sub consulta
especificada con EXISTS son idénticas a las de una lista de selección estándar, porque este
tipo de sub consulta crea una prueba de existencia y devuelve TRUE o FALSE en lugar de
datos.
ESTRUCTURA UNION
COMO USAR UNION

• El operador UNION permite combinar resultados de varias consultas con SELECT


en un único resultado.

• Todas las instrucciones Select deben tener la misma cantidad de campos y todos
los campos deben ser datos compatibles.

• Los nombres de los campos del conjunto de resultados son iguales a los
especificados en la primera consulta.

• Los resultados que se repiten son eliminados al hacer una combinación de select
usando Union.
COMO USAR UNION

• Tenga en cuenta la intercalación del servidor y de la base de datos para que SQL
Server decida cuando dos datos de tipo caracter son iguales o diferentes.

• Se puede especificar la palabra All para que los resultados repetidos no se


eliminen del conjunto de resultados final.

• Se debe especificar solamente una cláusula Order by y se escribe al final de la


instrucción.

• No es posible hacer UNION con bases de datos que tienen diferente intercalación.

• No se puede incluir campos de tipo nText.


EJERCICIO 1

• Listar los productos de categoría 1 y los productos de categoría 5

Select * from Products where CategoryID = 1


union
Select * from Products where CategoryID = 5;
EJERCICIO 2

• Listar los clientes de Francia (France), España (Spain) y Canada.

Select CustomerID As 'Código',


CompanyName As 'Cliente',
Country As 'País'
from Customers where Country = 'France'
Union
Select CustomerID As 'Código',
CompanyName As 'Cliente',
Country As 'País'
from Customers where Country = 'Spain'
union
Select CustomerID As 'Código',
CompanyName As 'Cliente',
Country As 'País'
from Customers where Country = 'Canada'
Order by País, Cliente
EJERCICIO 3

• Listar los proveedores de que tienen mas de 3 productos registrados o los que
tienen un producto. Ordenador por cantidad de productos descendentemente.
EJERCICIO 3

select S.SupplierID, S.CompanyName, S.ContactName,


(select count(P.ProductID)
from Products As P
where P.SupplierID= S.SupplierID) As 'Cantidad de Productos'
from Suppliers As S
where (select count(P.ProductID)
from Products As P where P.SupplierID= S.SupplierID) > 3

UNION

select S.SupplierID, S.CompanyName, S.ContactName,


(select count(P.ProductID)
from Products As P
where P.SupplierID= S.SupplierID) As 'Cantidad de Productos'
from Suppliers As S
where (select count(P.ProductID)
from Products As P
where P.SupplierID= S.SupplierID) = 1
order by [Cantidad de Productos] desc
RESUMEN

• Las funciones cadenas mayormente usadas son. LTRIM, RTRIM, STR, CONCAT, SUBSTRING,
UPPER, LOWER y LEN

• Las sentencias DATEDIFF y DATEADD, nos permite realizar operaciones de fecha.

• La sentencia JOIN (unir, combinar) de SQL permite combinar registros de una o más tablas en
una base de datos relacional.

• El estándar ANSI del SQL especifica cinco tipos de JOIN: INNER, LEFT OUTER, RIGHT OUTER,
FULL OUTER y CROSS.

• El operador UNION permite combinar resultados de varias consultas con SELECT en un único
resultado

• Una sub consulta es una consulta anidada en un SELECT, INSERT, UPDATE o DELETE e
inclusive en otra sub consulta
¿Preguntas o
Comentarios?

Vous aimerez peut-être aussi