Sei sulla pagina 1di 60

Ricardo I.

Roque
Covarrubias
Base de datos para
aplicaciones
UNIDAD I. Manipulacin
avanzada de datos con SQL

Resultado de Aprendizaje

A partir de un caso de estudio


elaborar un cuadernillo de
scripts
que
contenga
las
siguientes consultas:
Manejo de vistas.
Subconsultas.
Sinnimos.
Ligas remotas de bases de datos.
Justificacin
de
las
mejores
prcticas utilizadas.

1.1 Clusulas avanzadas


para manipulacin de
datos
Operadores especiales
Operadores de agregado
Agrupacin
Tablas combinadas
Operador UNION
Subconsultas

Operadores Especiales

Concatenacin

Permite concatenar en una sola


salida varios campos. Los campos
deben ser String, sino lo son se
pueden trasformar utilizando la
operacin
convert
(tipo
dato,
campo)

Select convert(nvarchar(2),EmployeeID) +
LastName + FirstName as Nombre from
Employees
MC Ricardo Israel Roque Covarrubias

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
Seleccin.
Se puede colocar el mensaje entre
comillas simples () o Colocar el
nombre de la columna de salida
entre corchetes [ ] = valor de
salida.

MC Ricardo Israel Roque Covarrubias

Operadores Especiales

Literales
Select EmployeeID, LastName as Apellido,
FirstName as Nombre, 'ESTOS SON
EMPLEADOS' as Literal, [Otra Forma] =
'Esta es otra forma'
from Employees

MC Ricardo Israel Roque Covarrubias

Operadores Especiales

BETWEEN . AND
Este operador se utiliza en la clusula
where, para poder restringir una lista de
seleccin segn un rango de valores.
WHERE Nombre_Columna BETWEEN
parametro1 AND parametro2
NOTA: parametro1 (Mnimo) y parametro2 (Mximo)

Select * from Products


where UnitPrice Between 5 and 20
MC Ricardo Israel Roque Covarrubias

Operadores Especiales

IN
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.
WHERE campo_tabla IN (Lista de datos o
Subconsulta)
Select * from Products where UnitPrice in
(10,18,19)

MC Ricardo Israel Roque Covarrubias

Operadores Especiales

IN
Select title from Titles where title_id IN
(Select title_id FROM sales)

MC Ricardo Israel Roque Covarrubias

Operadores Especiales

LIKE
Esta palabra clave indica el patrn de ajuste
con una condicin de bsqueda. La
coincidencia de patrones significa analizar
una coincidencia entre una expresin y el
patrn especificado en la condicin de
bsqueda.
Columna_Tabla LIKE Patron_de_Busqueda

Si la expresin coincide con el patrn se


devuelve un valor booleano TRUE. En caso
contrario se devuelve FALSO. La expresin
MC Ricardo Israel Roque Covarrubias
(COLUMNA_TABLA) debe ser de tipo

Operadores Especiales

LIKE
Los patrones son realmente expresiones de
cadena. Y van acompaados de caracteres
de comodn, que colocados en la expresin
toman un significado especial.

MC Ricardo Israel Roque Covarrubias

Operadores Especiales

LIKE

Carcter
Comodn

Descripcin

Ejemplo

Smbolo de porcentaje, coincide con WHERE


title
una cadena de cero o ms caracteres.
'%computer%'

Subrayado, coincide con un nico WHERE au_fname LIKE


carcter.
'_ean'

[]

Carcter comodn en rango, coincide WHERE au_lname LIKE


con cualquier carcter nico en el rango '[C-P]arsen'
o conjunto, tales como [m p] o
[ mnop ], significando que cualquiera de
los caracteres puede ser m, n, o ,p.

[^ ]

Carcter comodn no en rango, coincide WHERE au_lname LIKE


con cualquier carcter distinto de m, n, 'de[^l]%'
o, p (segn ejemplo anterior [ ^ mnop ].

MC Ricardo Israel Roque Covarrubias

LIKE

Operadores Especiales

LIKE
SELECT LastName FROM Employees
WHERE LastName LIKE 'S%'
SELECT LastName FROM Employees
WHERE LastName LIKE '[A-M ]%
Select * from authors
where au_id LIKE '724-__-____'

MC Ricardo Israel Roque Covarrubias

Operadores Especiales

IS NULL
Realiza un testeo para valores que son
Nulos. Retorna True si la columna es NULL
sino retorna FALSE.
WHERE Columna IS NULL
Select * from Suppliers
where Region is null

MC Ricardo Israel Roque Covarrubias

Operadores Especiales

TOP n
Devuelve solamente las n primeras
filas de un conjunto de registros
resultantes.
Por ejemplo, si se quiere obtener los
nombres de los empleados de las tres
(3) primeras filas de la tabla
employees. Se escribe la siguiente
instruccin:

Select top (3) FirstName


MC Ricardo Israel Roque Covarrubias
From Employees

Operadores Especiales

YEAR MONTH DAY


Estas tres sentencias sirven para
trabajar con fechas, si queremos
saber los empleados que nacieron en
el 1963 sera:
SELECT * FROM Employees
WHERE YEAR(BirthDate)=1963
Para mes sera Month y para da DAY.

MC Ricardo Israel Roque Covarrubias

Operadores Especiales

GETDATE
Regresa la fecha y hora actuales.
select getdate()

MC Ricardo Israel Roque Covarrubias

Operadores Especiales

DATEPART
Tambin se puede utilizar la clusula
DATEPART(YYYY,Campo)
DATEPART(MM,Campo) o
DATEPART(DD,Campo)

Para saber las ordenes realizadas en


el ao de 1996 hacemos:
SELECT * FROM Orders
WHERE
Datepart(yyyy,OrderDate)=1996
MC Ricardo Israel Roque Covarrubias

Operadores Especiales

DATEPART

Datepart
year
quarter
month
dayofyear
day
week
weekday
hour
minute
second
millisecon
d Covarrubias
MC Ricardo Israel Roque

Abbreviations
yy yyyy
qq q
mm, m
dy y
dd d
wk ww
dw
hh
mi, n
ss s
ms

Operadores Especiales

DATENAME
Regresa el nombre de una parte
especfica de una fecha
datename(partedefecha,fecha).
Los valores para "partedefecha"
pueden ser los mismos que se
explicaron anteriormente. Ejemplos:
select datename(month,getdate());

MC Ricardo Israel Roque Covarrubias

Operadores Especiales

ORDER BY
Es posible ordenar los registros
devueltos por la sentencia SELECT
aadiendo a la instruccin la clusula
ORDER BY, por defecto se ordenan en
forma ascendente.

Select top 15 WITH


ProductID, Quantity
From [Order Details]
Order by Quantity desc

MC Ricardo Israel Roque Covarrubias

TIES

OrderID,

Operadores Especiales

WITH TIES
Esta clusula permite incluir en la
seleccin, todos los registros que
tengan el mismo valor del campo por
el que se ordena, que el ltimo
registro retornado si el ltimo registro
retornado (es decir, el nmero n)
tiene un valor repetido en el registro
n+1

Select top 15 WITH TIES OrderID, ProductID,


Quantity
From [Order Details]
MC Ricardo Israel Roque Covarrubias
Order by Quantity desc

Funciones 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
funcin de agregado (con la
excepcin de COUNT(*)) procesa
todos los valores seleccionados
en una nica columna para
MC Ricardo Israel Roque Covarrubias
generar un nico resultado.

Funciones de agregado

Las funciones de agregado se


pueden aplicar a todas las filas
de una tabla, a un subconjunto
de la tabla especificado por una
clusula WHERE o a uno o varios
grupos de filas de la tabla.
Cuando se aplica una funcin de
agregado, se genera un valor
individual por cada conjunto de
filas.

MC Ricardo Israel Roque Covarrubias

Funciones de agregado
Funcin de agregado

Resultado

SUM([ALL | DISTINCT] expression)

Total de los valores de la expresin


numrica.

AVG([ALL | DISTINCT] expression)

Promedio de los valores de la


expresin numrica.

COUNT([ALL | DISTINCT]
expression)

Nmero de valores en la expresin.

COUNT(*)

Nmero de filas seleccionadas.

MAX(expression)

Valor mayor de la expresin.

MIN(expression)

Valor menor de la expresin.

MC Ricardo Israel Roque Covarrubias

Funciones de agregado

SUM: Devuelve el total de los


valores
de
la
expresin
numrica.
SUM (Columna para la suma)

Ejemplo: Usando la base de dato PUBS.


Calcula la suma de las ventas del ao
hasta la fecha (ytd_sales) de todos los
libros de la tabla titles.
USE pubs
SELECT SUM(ytd_sales)
FROM titles
MC Ricardo Israel Roque Covarrubias

Funciones de agregado

AVG: Devuelve el Promedio de


los valores de la expresin
numrica.
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
MC Ricardo Israel Roque Covarrubias

Funciones de agregado

MAX: Devuelve el valor mayor de


la expresin.
MAX (Columna a obtener el Mximo valor)

Ejemplo: Usando la base de dato


PUBS. Muestre el mayor valor de
las ventas del ao (ytd_sales) de
todos los libros de la tabla titles.
USE pubs
SELECT MAX(ytd_sales)
FROM titles
MC Ricardo Israel Roque Covarrubias

Funciones de agregado

MIN: Devuelve el valor menor de


la expresin.
MIN (Columna a obtener el Mnimo valor)

Ejemplo: Usando la base de dato PUBS.


Muestre el mnimo valor de las ventas
del ao (ytd_sales) de todos los libros
de la tabla titles.
USE pubs
SELECT MIN (ytd_sales)
FROM titles
MC Ricardo Israel Roque Covarrubias

Funciones de agregado

COUNT: Devuelve el nmero de


valores en la expresin. En el
caso de utilizar (*) retorna el
numero de filas.
COUNT (expresin) o COUNT (*)

Ejemplo: Usando la base de datos PUBS.


Cuente las filas de la tabla titles.
Use Pubs
SELECT COUNT(*)
FROM titles
MC Ricardo Israel Roque Covarrubias

Funciones 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
MC Ricardo Israel Roque Covarrubias

Agrupacin
GROUP BY: Esta sentencia no
permite dividir el resultado de
una lista de seleccin en grupos
ms pequeos.
Para poder listar otras columnas
con las funciones de agregacin
se debe utilizar esta sentencia.

SELECT lista _de_seleccion


FROM Tablas
[WHERE OPCIONAL]
GROUP BY Nombre_columnas_de_grupo
MC Ricardo Israel Roque Covarrubias

Agrupacin

Ejemplo: Utilizando la base de


datos PUBS. Liste las suma de las
ventas por ao ( ytd_sales )
hasta la fecha, clasificndolas
por tipo (TYPE) de titulo (titles).
Use Pubs
SELECT TYPE,SUM(ytd_sales)
FROM titles
GROUP BY TYPE Resultados
mostrados por TYPE

MC Ricardo Israel Roque Covarrubias

Agrupacin

Ejemplo: (GRUPOS DENTRO DE


GRUPOS). Liste las sumas de las
ventas por ao (ydt_sales) hasta
la fecha, clasificndolas 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
evaluacin es
MC Ricardo Israel Roque Covarrubias
TYPE, pub_id

Agrupacin

GROUP
BY
HAVING:
Esta
clusula se utiliza si se desea
especificar cuales grupos van a
ser desplegados, o sea, restringir
los grupos que retornan.
SELECT columnas FROM Tablas
[WHERE OPCIONAL]
GROUP BY columnas_para_grupos
HAVING condiciones_para_grupos

MC Ricardo Israel Roque Covarrubias

Agrupacin

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 --AQUI SE HACE

LA
MC Ricardo Israel Roque Covarrubias

RESTRICCIN PARA LOS


GRUPOS

Tablas combinadas

Una tabla combinada es el


resultado de una operacin de
combinacin realizada sobre dos
o ms tablas. Se pueden realizar
varios tipos de combinaciones de
tablas:
INNER JOIN
LEFT JOIN
RIGTH JOIN
UNION

MC Ricardo Israel Roque Covarrubias

Tablas combinadas

INNER JOIN: Devuelve solo los


registros de la combinacin de
ambas tablas de en los hay
coincidencia de acuerdo a la
expresin vinculante.

MC Ricardo Israel Roque Covarrubias

Tablas combinadas

INNER JOIN:

Tabla Empleados

Tabla Salarios

SELECT
E.CODIGO,
E.NOMBRES,
E.APELLIDOS,
E.TELEFONO, E.DIRECCION, S.SECCION, S.CARGO,
S.SALARIO
FROM EMPLEADOS E INNER JOIN SALARIO S ON
S.CODIGO = E.CODIGO

MC Ricardo Israel Roque Covarrubias

Tablas combinadas

INNER JOIN:

LEFT JOIN

MC Ricardo Israel Roque Covarrubias

Tablas combinadas

RIGHT JOIN:

MC Ricardo Israel Roque Covarrubias

Tablas combinadas

Queremos saber el total de


rdenes realizadas por cada
empleado:

SELECT COUNT(*) as total, e.LastName


from Orders as o inner join Employees
as e on o.EmployeeID=e.EmployeelD
group by LastName

MC Ricardo Israel Roque Covarrubias

Tablas combinadas

LEFT JOIN: Devuelve los registros


de la combinacin de ambas
tablas
en
los
cuales
hay
coincidencia de acuerdo a la
expresin vinculante e incluye
adems a todos los registros de
la primera tabla que no tengan
pareja en la segunda.

MC Ricardo Israel Roque Covarrubias

Tablas combinadas

RIGTH
JOIN:
Devuelve
los
registros de la combinacin de
ambas tablas en los cuales hay
coincidencia de acuerdo a la
expresin vinculante e incluye
adems a todos los registros de
la segunda tabla que no tengan
pareja en la primera.

MC Ricardo Israel Roque Covarrubias

Tablas combinadas

UNION: Crea un conjunto de


resultados a partir de varias
consultas

Unir (UNION) todas (ALL) las filas de dos


columnas de tablas diferentes.
select City from Employees
union all
select City from Customers

Devuelve la suma de todas las filas en


ambas columnas.
MC Ricardo Israel Roque Covarrubias

Tablas combinadas
UNION
Unir (UNION) las filas de dos
columnas de tablas diferentes sin
repetir ningn valor.

select City from Employees


union
select City from Customers

Devuelve la suma de todas las


filas en ambas columnas pero con
valores nicos.
MC Ricardo Israel Roque Covarrubias

Subconsultas

Subconsulta como tabla derivada


Es un conjunto de registros dentro
de una consulta que funciona como
una tabla
Ocupa el lugar de la tabla en la
clusula FROM

USE northwind
SELECT T.orderid, T.customerid
FROM (SELECT orderid, customerid
orders ) AS T
MC Ricardo Israel Roque Covarrubias

FROM

Subconsultas

Subconsulta
expresin

como

una

Se evala y trata como una


expresin
Se
ejecuta una vez para la
instruccin entera

USE pubs
SELECT title, price,( SELECT AVG(price) FROM
titles) AS promedio, price-(SELECT AVG(price)
FROM titles) AS diferencia FROM titles WHERE
type='popular_comp
MC Ricardo Israel Roque Covarrubias

Subconsultas

Subconsulta correlacionada

Cuando crea una subconsulta


correlacionada, las subconsultas
internas se evalan repetidamente,
una vez por cada fila de la consulta
externa

USE northwind
SELECT orderid, customeridFROM orders AS
or1 WHERE 20 < (SELECT quantity FROM
[order details] AS od WHERE or1.orderid =
od.orderid AND od.productid = 23)
MC Ricardo Israel Roque Covarrubias

Subconsultas
USE northwind
SELECT DISTINCT productid, quantity
FROM [order details] AS ord1
WHERE quantity = (SELECT MAX(quantity)
FROM [order details] AS ord2
WHERE ord1.productid = ord2.productid)

En este ejemplo se devuelve una lista de


productos y el pedido mayor realizado hasta
la fecha de cada producto de la tabla order
details.

MC Ricardo Israel Roque Covarrubias

Subconsultas
USE pubs
SELECT DISTINCT t1.type FROM titles AS t1
WHERE t1.type IN(SELECT t2.type FROM titles
AS t2 WHERE t1.pub_id = t2.pub_id)

En este ejemplo se utiliza una subconsulta


correlacionada para buscar los tipos de
libros publicados por ms de un editor.

MC Ricardo Israel Roque Covarrubias

Subconsultas
USE pubs
SELECT t1.type, t1.title, t1.priceFROM titles AS
t1WHERE
t1.price
>
(
SELECT
AVG(t2.price)FROM titles AS t2WHERE t1.type
= t2.type )

En este ejemplo se buscan todos los ttulos


con un precio mayor que el precio promedio
para libros del mismo tipo.

MC Ricardo Israel Roque Covarrubias

Subconsultas

EXISTS y NOT EXISTS:

Determinar si hay datos en una lista de valores

USE NorthWind
SELECT
lastname,
employeeid
FROM
employees AS e WHERE EXISTS ( SELECT *
FROM orders AS o WHERE e.employeeid =
o.employeeid AND o.orderdate = '5/9/1997' )
En este ejemplo se utiliza una subconsulta
correlacionada con un operador EXISTS en
la clusula WHERE para devolver una lista
de empleados que realizarn pedidos el da
MC Ricardo Israel Roque Covarrubias
5/9/1997

Vistas

Una vista es un objeto que no


contiene datos por si mismo. Es
una
clase
de
tabla
cuyo
contenido es tomado de otras
tablas por medio de la ejecucin
de una consulta.

MC Ricardo Israel Roque Covarrubias

Vistas
nombre

ciudad

gerente

capital

Clementi

Kuala Lumpur

Ahmed Abdalah

Clementi

Singapur

Ng Wee Hiong

3000000

Costa Este

Singapur

Sanjay Bata

1000000

Jaya

Kuala Lumpur

Putri Bte Alif

9500000

Lion

Singapur

Kevin Hsu

2500000

Monas

Jakarta

Agus Arianto

4000000

Wijaya

Jakarta

Oliver Ooi

1200000

sucursal_singapur

Diapositiva 55

nombre

ciudad

750000

gerente

sucursal

capital

Clementi

Singapur

Ng Wee Hiong

3000000

Costa Este

Singapur

Sanjay Bata

1000000

Lion

Singapur

Kevin Hsu

2500000

Ricardo I. Roque Covarrubias

Vistas

Sintaxis
CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition

MC Ricardo Israel Roque Covarrubias

Vistas

Crear vista
CREATE VIEW Lista_productos AS
SELECT ProductID,ProductName
FROM Products
WHERE Discontinued=0

Utilizar una vista


select * from Lista_productos

Borrar la vista
IF EXISTS (SELECT TABLE_NAME FROM
INFORMATION_SCHEMA.VIEWS
WHERE TABLE_NAME = Lista_productos)

drop view Lista_productos


MC Ricardo Israel Roque Covarrubias

Vistas

Ver las consultas que generaron las


vistas
SELECT TABLE_NAME, VIEW_DEFINITION
FROM INFORMATION_SCHEMA.Views

MC Ricardo Israel Roque Covarrubias

Sinnimos

Los sinnimos sirven para hacer


referencia a nuestros objetos de
base de datos de una manera
ms
entendible,
clara,
o
simplemente para abreviar los
nombres de tal manera que nos
faciliten su uso en nuestras
Consultas.

MC Ricardo Israel Roque Covarrubias

Sinnimos

Ejemplo

USE Northwind
GO
IF OBJECT_ID('MyOrders', 'SN') IS NOT
NULL
DROP SYNONYM MyOrders;
GO
CREATE
SYNONYM
MyOrders
FOR
Orders
SELECT * FROM MyOrders

MC Ricardo Israel Roque Covarrubias

Potrebbero piacerti anche