Sei sulla pagina 1di 34

SQL Server 2008

Lenguaje SQL
“Lenguaje de Manipulación de Datos (DML) –
Consultas Avanzadas”
Lenguaje de Manipulación de Datos (DML)
Operadores Especiales
Concatenación

Permite concatenar en una sola salida varios campos. Los campos deben ser String,
sino lo son se pueden trasformar utilizando la operación convert (tipo dato, campo)

Ejemplo 1: Utilizando la base de datos Northwind. Genere una lista de selección de


la tabla Employees (Empleado) donde solo se genere una columna de salida y esta
contenga los campos: EmployeeID, LastName y FirstName.

Select convert(nvarchar(2),EmployeeID) + ‘’ + LastName + ‘’ + FirstName as Nombre


from Employees
Lenguaje de Manipulación de Datos (DML)
Operadores Especiales
Literales

Es cualquier cosa que no sea ni alias ni nombre de columna.


Existen dos formas para colocar estos valores anexados a la Lista de Selección.
Se puede colocar el mensaje entre comillas simples (‘’) o Colocar el nombre de la
columna de salida entre corchetes [ ] = valor de salida.
Ejemplo 2: Utilizando la tabla Employees liste las columnas EmployeeID, LastName,
FirstName, además envié dos mensajes en conjunto con cada fila utilizando para
cada uno una de las opciones de literales.

Select EmployeeID, LastName as Apellido, FirstName as Nombre, 'ESTOS SON


EMPLEADOS' as Literal, [Otra Forma] = 'Esta es otra forma'
from Employees
Lenguaje de Manipulación de Datos (DML)
Operadores Especiales
Between … AND ……

Este operador se utiliza en la cláusula where, para poder restringir una lista de selección
según un rango de valores.
NOMENCLATURA:
WHERE Nombre_Columna BETWEEN parametro1 AND parametro2
NOTA: parametro1 (Mínimo) y parametro2 (Máximo)
Ejemplo 4: Suponga que queremos ver aquellos productos (Tabla Products) cuyos valores
se encuentran entre los 4 y 20 Dólares.
Select *
from Products
where UnitPrice Between 5.0 and 20.0
Lenguaje de Manipulación de Datos (DML)
Operadores Especiales
IN (Lista)

Este operador permite verificar si el campo se encuentra en una lista determinada o


subconsulta. Retorna verdadero si el campos se encuentra en la lista.
NOMENCLATURA:
WHERE campo_tabla IN (Lista de datos o Subconsulta)
Ejemplo 5: Liste los campos de la tabla productos que tengan exactamente un
precio de 18, 19 y 10 dolares.

Select *
from Products
where UnitPrice in (10.0,18.0,19.0)
Lenguaje de Manipulación de Datos (DML)
Operadores Especiales
Like

Esta palabra clave indica el patrón de ajuste con una condición de búsqueda. La
coincidencia de patrones significa analizar una coincidencia entre una expresión y el
patrón especificado en la condición de búsqueda.
NOMENCLATURA:
Columna_Tabla LIKE Patron_de_Busqueda
Si la expresión coincide con el patrón se devuelve un valor booleano TRUE. En caso
contrario se devuelve FALSO. La expresión (COLUMNA_TABLA) debe ser de tipo
carácter.
Los patrones son realmente expresiones de cadena. Y van acompañados de caracteres
de comodín, que colocados en a expresión toman un significado especial.
Lenguaje de Manipulación de Datos (DML)
Operadores Especiales
Like

Carácter Comodín Descripción


% Símbolo de porcentaje, coincide con una cadena de
cero o más caracteres.
_ Subrayado, coincide con un único carácter.
[] Carácter comodín en rango, coincide con cualquier
carácter único en el rango o conjunto, tales como [m –
p] o [ mnop ], significando que cualquiera de los
caracteres puede ser m, n, o ,p.
Lenguaje de Manipulación de Datos (DML)
Operadores Especiales
Like

Ejemplo 7: Encontrar todos los apellidos (LastName) en la tabla Employees que


comiencen con la letra <<S>>. Use el carácter comodín %.

SELECT LastName
FROM Employees
WHERE LastName LIKE 'S%' – Acá se arma la frase con el comodín

Ejemplo 8: Para recuperar el apellido de los Empleados cuya primera letra comienza
entre <<A>> y <<M>>. Utilice el comodín [ ].

SELECT LastName
FROM Employees
WHERE LastName LIKE '[A-M ]%'
Lenguaje de Manipulación de Datos (DML)
Operadores Especiales
Like

Ejemplo 9: Usar Base de Datos Pubs. Para recuperar la información de un autor cuyo ID
comienza con el numero 724, sabiendo que cada ID tiene el formato de tres dígitos
seguidos por un guión, seguido por dos dígitos, otro guión y finalmente cuatro dígitos.
Utilizar el comodín _ .

Select *
from authors
where au_id LIKE '724-__-____'
Lenguaje de Manipulación de Datos (DML)
Operadores Especiales
IS NULL

Realiza un testeo para valores que son Nulos. Retorna True si la columna es NULL sino
retorna FALSE.
NOMENCLATURA:
WHERE Columna IS NULL
Ejemplo 10: Usar base de datos Northwind. Liste todos los campos de la tabla Suppliers
cuya columna Región sea NULL.

Select *
from Suppliers
where Region is null
Lenguaje de Manipulación de Datos (DML)
Operadores de Agregado
Las funciones de agregado son:

SUM, AVG, COUNT, COUNT(*), MAX y MIN

Estas funciones generan valores de resumen en los conjuntos de resultados de


las consultas. Una función de agregado (con la excepción de COUNT(*))
procesa todos los valores seleccionados en una única columna para generar un
único resultado.
Las funciones de agregado se pueden aplicar a todas las filas de una tabla, a
un subconjunto de la tabla especificado por una cláusula WHERE o a uno o
varios grupos de filas de la tabla. Cuando se aplica una función de agregado,
se genera un valor individual por cada conjunto de filas.
Lenguaje de Manipulación de Datos (DML)
Operadores de Agregado

Función de agregado Resultado


SUM([ALL | DISTINCT] expression) Total de los valores de la expresión numérica.
AVG([ALL | DISTINCT] expression) Promedio de los valores de la expresión
numérica.

COUNT([ALL | DISTINCT] expression) Número de valores en la expresión.


COUNT(*) Número de filas seleccionadas.

MAX(expression) Valor mayor de la expresión.

MIN(expression) Valor menor de la expresión.


Lenguaje de Manipulación de Datos (DML)
Operadores de Agregado
SUM, AVG, COUNT, MAX y MIN omiten los valores NULL; COUNT(*) no lo
hace.

La palabra clave opcional DISTINCT se puede usar con SUM, AVG y COUNT
para eliminar los valores duplicados antes de que se establezca la función de
agregado.

SUM y AVG se pueden usar sólo con columnas numéricas, como, por ejemplo,
las de los tipos de datos int, smallint, tinyint, decimal, numeric, float, real,
money y smallmoney. MIN y MAX no se pueden usar con tipos de datos bit.
El resto de las funciones de agregado que no sean COUNT(*) no se puede usar
con los tipos de datos text e image.
Lenguaje de Manipulación de Datos (DML)
Operadores de Agregado
SUM

Retorna: Total de los valores de la expresión numérica.

NOMENCLATURA:

SUM (Columna para la suma)

Ejemplo: Usando la base de dato PUBS. Calcula la suma de las ventas del año
hasta la fecha (ytd_sales) de todos los libros de la tabla titles.

USE pubs
SELECT SUM(ytd_sales)
FROM titles
Lenguaje de Manipulación de Datos (DML)
Operadores de Agregado
AVG

Retorna: Promedio de los valores de la expresión numérica.

NOMENCLATURA:

AVG (Columna a Promediar)

Ejemplo: Usando la base de datos PUBS. Puede averiguar el precio promedio


de todos los libros si se duplicaran los precios (tabla titles).

SELECT avg (price * 2)


FROM titles
Lenguaje de Manipulación de Datos (DML)
Operadores de Agregado
MAX

Retorna: Valor mayor de la expresión.

NOMENCLATURA:

MAX (Columna a obtener el Máximo valor)

Ejemplo: Usando la base de dato PUBS. Muestre el mayor valor de las las
ventas del año (ytd_sales) de todos los libros de la tabla titles.

USE pubs
SELECT MAX(ytd_sales)
FROM titles
Lenguaje de Manipulación de Datos (DML)
Operadores de Agregado
MIN

Retorna: Valor menor de la expresión.

NOMENCLATURA:

MIN (Columna a obtener el Mínimo valor)

Ejemplo: Usando la base de dato PUBS. Muestre el mínimo valor de las ventas
del año (ytd_sales) de todos los libros de la tabla titles.

USE pubs
SELECT MIN (ytd_sales)
FROM titles
Lenguaje de Manipulación de Datos (DML)
Operadores de Agregado
COUNT

Retorna: Número de valores en la expresión. En el caso de utilizar (*) retorna el


numero de filas.

NOMENCLATURA:

COUNT (expresión) o COUNT (*)

Ejemplo: Usando la base de datos PUBS. Cuente las filas de la tabla titles.

Use Pubs
SELECT COUNT(*)
FROM titles
Lenguaje de Manipulación de Datos (DML)
Operadores de Agregado
COUNT

Ejemplo: Usando la base de datos PUBS. Cuente los datos de la tabla titles,
cuyo tipo (TYPE) sea business .

Use Pubs
SELECT COUNT(TYPE)
FROM titles
WHERE TYPE = ‘business’
Lenguaje de Manipulación de Datos (DML)
Sentencia GROUP BY
Esta sentencia no permite dividir el resultado de una lista de selección en
grupos más pequeños.

Para poder listar otras columnas con las funciones de agregación se debe
utilizar esta sentencia.

NOMENCLATURA:

SELECT lista _de_seleccion


FROM Tablas
[WHERE OPCIONAL]
GROUP BY Nombre_columnas_de_grupo
Lenguaje de Manipulación de Datos (DML)
Sentencia GROUP BY
Ejemplo: Utilizando la base de datos PUBS. Liste las suma de las ventas por
año ( ytd_sales ) hasta la fecha, clasificándolas por tipo (TYPE) de titulo (titles).

Use Pubs
SELECT TYPE,SUM(ytd_sales)
FROM titles
GROUP BY TYPE –Resultados mostrados por TYPE

Ejemplo: (GRUPOS DENTRO DE GRUPOS). Liste las sumas de las ventas por
año (ydt_sales) hasta la fecha, clasificándolas por tipo (TYPE) y pub_id.

Use Pubs
SELECT TYPE, pub_id,SUM(ytd_sales)
from titles
Group by TYPE, pub_id - - El orden de evaluación es TYPE, pub_id
Lenguaje de Manipulación de Datos (DML)
Sentencia GROUP BY – CLAUSULA HAVING
Esta cláusula se utiliza si se desea especificar cuales grupos van a ser
desplegados, o sea, restringir los grupos que retornan.

NOMENCLATURA:

SELECT columnas
FROM Tablas
[WHERE OPCIONAL]
GROUP BY columnas_para_grupos
HAVING condiciones_para_grupos

Ejemplo: Utilizando el ultimo ejemplo. Liste solamente los grupos cuyo pub_id
sea igual a 0877. Utilice HAVING

SELECT TYPE, pub_id,SUM(ytd_sales)


from titles
Group by TYPE,pub_id
HAVING pub_id = '0877‘ --ACA SE HACE RESTRICCION PARA LOS GRUPOS
Lenguaje de Manipulación de Datos (DML)
TABLAS COMBINADAS
Una tabla combinada es el resultado de una operación de combinación
realizada sobre dos o más tablas. Se pueden realizar varios tipos de
combinaciones de tablas: combinaciones internas (inner), externa completa (full
outer), externa por la izquierda (left outer), externa por la derecha (rigth outer) y
cruzada (cross).

Combinación Interna (Inner Join): Es el tipo de combinación predeterminado;


especifica que solamente se han de incluir en el resultado filas de la tabla que
satisfagan la condición ON.
Para especificar una combinación hay que utilizar la palabra clave JOIN. Se
utiliza la palabra clave ON para identificar la condición de búsqueda sobre la
cual se basa la combinación. NOMENCLATURA:

SELECT columnas_de_las_tablas
FROM tabla1 JOIN tabla2 ON condiciones
Lenguaje de Manipulación de Datos (DML)
TABLAS COMBINADAS
Combinación Interna (Inner Join)

Ejemplo: De la base de datos PUBS. Combine las tablas stores y discounts


para mostrar que tienda (stor_id) ofrece un descuento y el tipo de descuento
(discounttype).

Use Pubs
SELECT s.stor_id as ALMACEN, d.discounttype as DESCUENTO
FROM stores s JOIN discounts d
ON s.stor_id = d.stor_id



SELECT s.stor_id as ALMACEN, d.discounttype as DESCUENTO


FROM stores as s,discounts as d
WHERE s.stor_id = d.stor_id
Lenguaje de Manipulación de Datos (DML)
TABLAS COMBINADAS
Combinación externas Completas (full Outer Join)

Especifica que se debería incluir en el resultado las filas no coincidentes (filas


que no cumplen con la condición ON) así como las filas que coincidan (filas que
cumplen la condición ON). En el campo donde no es coincidente la condición
se coloca NULL.

Ejemplo: Utilice el mismo ejemplo anterior solo utilice en el from la instrucción


FULL OUTER JOIN.

Use Pubs
SELECT s.stor_id as ALMACEN, d.discounttype as DESCUENTO
FROM stores s FULL OUTER JOIN discounts d
ON s.stor_id = d.stor_id
Lenguaje de Manipulación de Datos (DML)
TABLAS COMBINADAS
Combinación externa por la izquierda (Left Outer Join)

Devuelve las filas coincidentes más todas las filas de la tabla que se
especifican a la izquierda de la palabra clave JOIN.

Ejemplo: Utilice el mismo ejemplo anterior solo utilice en el from la instrucción


LEFT OUTER JOIN.

Use Pubs
SELECT s.stor_id as ALMACEN, d.discounttype as DESCUENTO
FROM stores s LEFT OUTER JOIN discounts d
ON s.stor_id = d.stor_id
Lenguaje de Manipulación de Datos (DML)
TABLAS COMBINADAS
Combinación externa por la derecha (Right Outer Join)

Es lo contrario a Left Outer Join

Ejemplo: Utilice el mismo ejemplo anterior solo utilice en el from la instrucción


RIGHT OUTER JOIN.

Use Pubs
SELECT s.stor_id as ALMACEN, d.discounttype as DESCUENTO
FROM stores s RIGHT OUTER JOIN discounts d
ON s.stor_id = d.stor_id
Lenguaje de Manipulación de Datos (DML)
SELECT ANIDADOS
En algunas situaciones es necesario utilizar SELECT anidados para resolver
cierta necesidades de consultas que no pueden ser resueltas utilizando un
único SELECT.

Recordar que al realizar un SELECT se genera una tabla temporal de la lista de


selección, esto es lo que realmente hace posible que se puedan generar
consultas sobre consultas o condiciones sobre listas de selección.

NOMENCLATURA:

SELECT Lista_de_selección
FROM Tablas o Otros Select.
WHERE condiciones [JOIN | SUBCONSULTAS | etc. ]
Lenguaje de Manipulación de Datos (DML)
SELECT ANIDADOS
Ejemplo: Usando base de datos Northwind. Muestre los Productos (ID del
Producto, Nombre y Precio Unitario) que tengan un precio unitario igual al Máximo.

SELECT ProductID as ID,ProductName as Nombre, UnitPrice as Precio_Unitario


FROM Products
WHERE UnitPrice = (SELECT MAX (UnitPrice)
FROM Products)

Ejemplo: Usando base de datos Northwind. Muestre los Productos (ID del
Producto, Nombre y Precio Unitario) que tengan un precio unitario igual al Mínimo.

SELECT ProductID as ID,ProductName as Nombre, UnitPrice as Precio_Unitario


FROM Products
WHERE UNITPRICE = (SELECT MIN(UNITPRICE)
FROM Products)
Lenguaje de Manipulación de Datos (DML)
Operador UNION

Este operador mezcla los resultados de dos o más consultas en un solo conjunto
de resultados que contiene todas las filas que pertenecen a las consultas de la
unión.

Como restricción las columnas que se obtienen por la UNION en ambas consultas
deben ser del mismo tipo de datos.

NOMENCLATURA:

SELECT * FROM TABLAS

UNION [ ALL ]

SELECT * FROM TABLAS


Lenguaje de Manipulación de Datos (DML)
Operador UNION

NOTA: Al usar el operador opcional ALL se listan como resultados todas las filas
de ambas consultas. Sino no se utiliza ALL se lista la UNION es decir no se listan
datos duplicados.

Ejemplo: Realice una unión de las consultas anidadas vistas anteriormente.


Usando ambas opciones de unión (Con y Sin ALL).

SELECT ProductID as ID,ProductName as Nombre, UnitPrice as Precio_Unitario


FROM Products
WHERE UNITPRICE = (SELECT MIN(UNITPRICE)
FROM Products)
UNION

SELECT ProductID as ID,ProductName as Nombre, UnitPrice as Precio_Unitario


FROM Products
WHERE UNITPRICE = (SELECT MIN(UNITPRICE)
FROM Products)
Lenguaje de Manipulación de Datos (DML)
Operador UNION

SELECT ProductID as ID,ProductName as Nombre, UnitPrice as Precio_Unitario


FROM Products
WHERE UNITPRICE = (SELECT MIN(UNITPRICE)
FROM Products)
UNION ALL

SELECT ProductID as ID,ProductName as Nombre, UnitPrice as Precio_Unitario


FROM Products
WHERE UNITPRICE = (SELECT MIN(UNITPRICE)
FROM Products)
Lenguaje de Manipulación de Datos (DML)
Ejercicio

USE BASE DE DATOS PUBS

Obtenga la suma de los Precios Unitarios, cuyos productos tengan un precio igual
al Máximo precio unitario o al Mínimo precio unitario de la lista de productos.

Sergio Sánchez
Bibliografía

 “Introducción a los Sistemas de Base de Datos”, C. J. Date,


Prentice Hall – Séptima Edición, 2001.
 “Running SQL SERVER 2000”, Marci Frohock García & Jamie
Reding & Edward Whalen & Steve Adrien Deluca, McGraw – Hill
– 2001.
 “SQL SERVER 7.0 – Iniciación y Referencia”, José Antonio
Ramalho, McGraw-Hill – 2000.
 “Bases de Datos Relacionales”, Matilde Celma Giménez &
Juan Casamayor & Laura Mota, Prentice Hall, 2003.
 Cátedra “Introducción a las bases de datos”, Profesor L. Marti,
Universidad de Valparaíso, 2004.
Sergio Sánchez