Sei sulla pagina 1di 45

TALLER DE BASE DE

DATOS

Clase N° 10

23– ABRIL - 2020


CONDICIONES FAVORABLES PARA LA CLASE

Mantén todos tus


sentidos activos

Práctica la puntualidad

Mantén tus dispositivos


electrónicos en silencio

Respeta el turno de
participación
PRESENTACIÓN DE LA CLASE
Aprendizaje Esperado: Manipulan bases de datos utilizando funciones especiales según requerimientos.

Criterios de Evaluación: Crea consultas utilizando funciones matemáticas según requerimientos.


Crea consultas utilizando funciones para el manejo de cadenas según requerimientos.
Crea consultas utilizando funciones de fecha y hora según requerimientos.
Trabaja responsablemente en las actividades propuestas.

Contenidos: Funciones matemáticas, subconsultas, operadores.


Funciones de agrupamiento
MOMENTO PARA RECORDAR
PROCEDIMIENTOS ALMACENADOS
Los procedimientos almacenados son objetos, así que para obtener
información de ellos pueden usarse los siguientes procedimientos almacenados
del sistema y las siguientes tablas:
"sp_help": sin parámetros nos muestra todos los objetos de la base de datos
seleccionada, incluidos los procedimientos.
"sp_helptext": seguido del nombre de un procedimiento almacenado nos
muestra el texto que define el procedimiento, excepto si ha sido encriptado.
“sp_stored_procedures": muestra todos los procedimientos almacenados, los
propietarios, etc. Este procedimiento almacenado puede recibir 3 parámetros:
@sp_name (nombre, nvarchar, admite comodines para búsqueda de patrones),
@sp_owner (propietario, nvarchar, admite comodines) y @qualifier (nombre de
la base de datos).
PROCEDIMIENTOS ALMACENADOS
"sp_depends": seguido del nombre de un objeto, nos devuelve 2 resultados:
1) nombre, tipo, campos, etc. de los objetos de los cuales depende el
objeto enviado y
2) nombre y tipo de los objetos que dependen del objeto nombrado.
aparecen las tablas (y demás objetos) de las cuales depende el procedimiento,
es decir, las tablas referenciadas en el mismo.
Podemos ejecutar el procedimiento seguido del nombre de una tabla:
PROCEDIMIENTOS ALMACENADOS

Dijimos que SQL Server guarda el nombre del procedimiento almacenado en la


tabla del sistema "sysobjects" y su contenido en la tabla "syscomments".

Si no quiere que los usuarios puedan leer el contenido del procedimiento


podemos indicarle a SQL Server que codifique la entrada a la tabla
"syscomments" que contiene el texto. Para ello, debemos colocar la opción
"with encryption" al crear el procedimiento
CREATE PROCEDURE Nombre_procedimiento Parametros
WITH ENCRYPTION
AS Instrucciones
PROCEDIMIENTOS ALMACENADOS

Los procedimientos almacenados pueden modificarse, por necesidad de los


usuarios o por cambios en la estructura de las tablas que referencia.
Un procedimiento almacenado existente puede modificarse con "alter
procedure".
Sintaxis:
ALTER PROCEDURE Nombre_procedimiento
@Parametro tipo = Valorpredeterminado
AS Sentencias
PROCEDIMIENTOS ALMACENADOS
ALTER PROCEDURE pa_libros_autor
@autor varchar(30)=null
AS
if @autor is null
begin
select 'Debe indicar un autor'
return
end
else
select titulo,editorial,precio
from libros
where autor = @autor
PROCEDIMIENTOS ALMACENADOS
Podemos ingresar datos en una tabla con el resultado devuelto por un
procedimiento almacenado.
La instrucción siguiente crea el procedimiento "pa_ofertas", que ingresa libros
en la tabla "ofertas":
CREATE PROC pa_ofertas
AS select titulo,autor,editorial,precio
from libros where precio<50

La siguiente instrucción ingresa en la tabla "ofertas" el resultado del


procedimiento "pa_ofertas“

INSERT INTO ofertas EXEC pa_ofertas


PROCEDIMIENTOS ALMACENADOS
Un procedimiento almacenado puede llamar a otro procedimiento almacenado.
El procedimiento que es invocado por otro debe existir cuando creamos el
procedimiento que lo llama. Es decir, si un procedimiento A llama a otro
procedimiento B, B debe existir al crear A
Los procedimientos almacenados pueden anidarse hasta 32 niveles.
Creamos un procedimiento almacenado que reciba 2 números enteros y nos
retorne el producto de los mismos
CREATE PROCEDURE pa_multiplicar @numero1 int, @numero2 int,
@producto int output
AS select @producto=@numero1*@numero2
MOMENTO PARA CONOCER
PROCEDIMIENTOS ALMACENADOS
La funcionalidad de un procedimiento consiste básicamente en que contengan muchas
instrucciones o instrucciones complejas y así evitar tipear repetidamente dichas instrucciones
Podemos crear procedimientos que incluyan combinaciones (join), subconsultas, varias
instrucciones y llamadas a otros procedimientos

CREATE PROCEDURE ConsultarC_Prestamo


AS
SELECT Cod_socio, Nom_socio, Tel_socio, Fecha_pre, Fecha_ent, No_ejemplar,
Fecha_entregado, Titulo_lib, Editorial
FROM Socio INNER JOIN Prestamo ON Socio.Cod_socio = Prestamo.Cod_socio1
INNER JOIN Libros ON Libros.ISBN = Prestamo.ISBN2
INNER JOIN Editorial ON Libros.Id_editorial1 = Editorial.Id_editorial
MOMENTO PARA APLICAR
PROCEDIMIENTOS ALMACENADOS
Practica Base de Datos Biblioteca

exec sp_help ConsultarS_Prestamo

exec sp_helptext ConsultarS_Prestamo


PROCEDIMIENTOS ALMACENADOS
Practica Base de Datos Biblioteca
exec sp_stored_procedures @sp_name='co%‘

exec sp_depends ConsultarS_Prestamo


PROCEDIMIENTOS ALMACENADOS
Practica Base de Datos Biblioteca
exec sp_depends Prestamo

select *from sysobjects


PROCEDIMIENTOS ALMACENADOS
Practica Base de Datos Biblioteca
select *from sysobjects
where xtype='P' and
name like 'co%‘

select *from sysobjects


where xtype='P'
PROCEDIMIENTOS ALMACENADOS
Practica Base de Datos Biblioteca

create procedure pa_libros_autor @libro varchar(30)=null


with encryption
as select *from libros
where Titulo_lib=@libro
PROCEDIMIENTOS ALMACENADOS
Practica Base de Datos Biblioteca
exec pa_libros_autor '100 años de soledad'

exec sp_helptext pa_libros_autor


PROCEDIMIENTOS ALMACENADOS
Practica Base de Datos Biblioteca

CREATE PROCEDURE ConsultarC_Prestamo


AS SELECT Cod_socio, Nom_socio, Tel_socio, Fecha_pre, Fecha_ent,
No_ejemplar, Fecha_entregado, Titulo_lib, Editorialbeta
FROM Socio INNER JOIN Prestamo
ON Socio.Cod_socio = Prestamo.Cod_socio1 INNER JOIN Libros
ON Libros.ISBN = Prestamo.ISBN2 INNER JOIN Editorial
ON Libros.Id_editorial1 = Editorial.Id_editorial
PROCEDIMIENTOS ALMACENADOS
Practica Base de Datos Biblioteca

EXEC ConsultarC_Prestamo
PROCEDIMIENTOS ALMACENADOS
Practica Base de Datos Biblioteca
CREATE PROCEDURE BuscarC_Prestamo @C_socio int
AS SELECT Cod_socio, Nom_socio, Tel_socio, Fecha_pre, Fecha_ent,
No_ejemplar, Fecha_entregado, Titulo_lib, Editorialbeta
FROM Socio INNER JOIN Prestamo
ON Socio.Cod_socio = Prestamo.Cod_socio1 INNER JOIN Libros
ON Libros.ISBN = Prestamo.ISBN2 INNER JOIN Editorial
ON Libros.Id_editorial1 = Editorial.Id_editorial
WHERE Cod_socio = @C_socio
PROCEDIMIENTOS ALMACENADOS
Practica Base de Datos Biblioteca

EXEC BuscarC_Prestamo 102


PROCEDIMIENTOS ALMACENADOS
Practica Base de Datos Biblioteca

CREATE PROCEDURE Eliminar_Prestamo @F_pre datetime, @C_socio int,


@ISBN2 int
AS DELETE FROM Prestamo
WHERE Fecha_pre = @F_pre AND Cod_socio1 = @C_socio
AND ISBN2 = @ISBN2
PROCEDIMIENTOS ALMACENADOS
Practica Base de Datos Biblioteca

EXEC Eliminar_Prestamo '15/12/12', 102, 567891234


MOMENTO PARA CONOCER
OPERADORES
Operadores Aritméticos: + suma,- resta,* multiplicación,/ división,% módulo
Los operadores aritméticos permiten realizar cálculos con valores numéricos.
Son: multiplicación (*), división (/) y módulo (%) (el resto de dividir números
enteros), suma (+) y resta (-).
Es posible obtener salidas en las cuales una columna sea el resultado de un
cálculo y no un campo de una tabla.
Si queremos por ejemplo saber el monto total en dinero de un título podemos
multiplicar el precio por la cantidad por cada título, pero también podemos hacer
que SQL Server realice el cálculo y lo incluya en una columna extra en la salida:
SELECT titulo, precio, cantidad,
precio*cantidad
FROM libros
MOMENTO PARA CONOCER
OPERADORES
Si queremos saber el precio de cada libro con un 10% de descuento podemos
incluir en la sentencia los siguientes cálculos:

SELECT titulo,precio,
precio-(precio*0.1)
FROM libros
También podemos actualizar los datos empleando operadores aritméticos:

UPDATE libros SET precio=precio-(precio*0.1)


OPERADORES
• Operadores Lógicos: Hasta el momento, hemos aprendido a establecer una condición
con "where" utilizando operadores relacionales. Podemos establecer más de una condición
con la cláusula "where", para ello aprenderemos los operadores lógicos. Son los siguientes:

• AND, significa "y", OR, significa "y/o", NOT, significa "no", invierte el resultado, (), paréntesis

Los operadores lógicos se usan para combinar condiciones. Si queremos recuperar todos los
libros cuyo autor sea igual a "Borges" y cuyo precio no supere los 20 pesos, necesitamos 2
condiciones:
SELECT * FROM libros
WHERE (autor='Borges') AND
(precio<=20)
OPERADORES
• Operadores Lógicos:
Queremos ver los libros cuyo autor sea "Borges" y/o cuya editorial sea "Planeta":
SELECT * FROM libros
WHERE autor='Borges' OR
editorial='Planeta‘
Queremos recuperar los libros que NO cumplan la condición dada, por ejemplo, aquellos cuya
editorial NO sea "Planeta":
SELECT * FROM libros
WHERE NOT editorial='Planeta'
OPERADORES
• Operadores Lógicos:
Los paréntesis se usan para encerrar condiciones, para que se evalúen como una sola
expresión.
Por ejemplo, las siguientes expresiones devuelven un resultado diferente:
SELECT* FROM libros
WHERE (autor='Borges') OR
(editorial='Paidos' AND precio<20);

SELECT * FROM libros


WHERE (autor='Borges' OR editorial='Paidos') AND
(precio<20);
OPERADORES
• Operadores de Cadena: “+ “ concatenación de cadena

Los operadores de concatenación: permite concatenar cadenas, el más (+).

Para concatenar el título, el autor y la editorial de cada libro usamos el


operador de concatenación ("+"):

SELECT titulo+'-'+autor+'-'+editorial

FROM libros
FUNCIONES MATEMÁTICAS
Las funciones matemáticas realizan operaciones con expresiones numéricas y
retornan un resultado, operan con tipos de datos numéricos.

Microsoft SQL Server tiene algunas funciones para trabajar con números. Aquí
presentamos algunas.

-abs(x): retorna el valor absoluto del argumento "x".


Ejemplo:

SELECT abs(-20); retorna 20.


FUNCIONES MATEMÁTICAS
ceiling(x): redondea hacia arriba el argumento "x".
Ejemplo:
SELECT ceiling(12.34); retorna 13.

floor(x): redondea hacia abajo el argumento "x".


Ejemplo:
SELECT floor(12.34); retorna 12.

%: devuelve el resto de una división.


Ejemplos:
SELECT 10%3; retorna 1.

SELECT 10%2; retorna 0.


FUNCIONES MATEMÁTICAS
power(x,y): retorna el valor de "x" elevado a la "y" potencia.
Ejemplo:
SELECT power(2,3); retorna 8.
round(numero,longitud): retorna un número redondeado a la longitud especificada.
Ejemplos:
SELECT round(123.456,1); retorna "123.400", es decir, redondea desde el primer decimal.

SELECT round(123.456,2); retorna "123.460", es decir, redondea desde el segundo decimal.

SELECT round(123.456,-1); retorna "120.000", es decir, redondea desde el primer valor


entero (hacia la izquierda).

SELECT round(123.456,-2); retorna "100.000", es decir, redondea desde el segundo valor


entero (hacia la izquierda).
FUNCIONES MATEMÁTICAS
square(x): retorna el cuadrado del argumento.
Ejemplo:
SELECT square(3); retorna 9.
FUNCIONES DE AGRUPAMIENTO
Podemos ordenar el resultado de un "SELECT" para que los registros se muestren
ordenados por algún campo, para ello usamos la cláusula "ORDER BY".
La sintaxis básica es la siguiente:

SELECT * FROM Nombre_tabla


ORDER BY Campo;
Por ejemplo, recuperamos los registros de la tabla "libros" ordenados por el título:

SELECT *FROM libros


ORDER BY titulo;
Aparecen los registros ordenados alfabéticamente por el campo especificado
FUNCIONES DE AGRUPAMIENTO
También podemos colocar el número de orden del campo por el que queremos que se ordene en
lugar de su nombre, es decir, referenciar a los campos por su posición en la lista de selección.
Por ejemplo, queremos el resultado del "SELECT" ordenado por "PRECIO":
SELECT titulo,autor,precio
FROM libros ORDER BY 3
Por defecto, si no aclaramos en la sentencia, los ordena de manera ascendente (de menor a
mayor).
Podemos ordenarlos de mayor a menor, para ello agregamos la palabra clave "desc":
SELECT * FROM libros
ORDER BY editorial desc;
También podemos ordenar por varios campos, por ejemplo, por "titulo" y "editorial":
SELECT * FROM libros
ORDER BY titulo,editorial;
FUNCIONES DE AGRUPAMIENTO
Incluso, podemos ordenar en distintos sentidos, por ejemplo, por "titulo" en
sentido ascendente y "editorial" en sentido descendente:
SELECT * FROM libros
ORDER BY titulo asc, editorial desc;

• Debe aclararse al lado de cada campo, pues estas palabras claves afectan al campo inmediatamente
anterior.
• Es posible ordenar por un campo que no se lista en la selección.
• Se permite ordenar por valores calculados o expresiones.
• La cláusula "order by" no puede emplearse para campos text, ntext e image.
MOMENTO PARA APLICAR
MICROSOFT SQL SERVER MANAGEMENT STUDIO

Trabajamos con la tabla "libros" de una librería.


Eliminamos la tabla si existe:

if object_id ('libros') is not null


drop table libros;
Creamos la tabla:

create table libros(


codigo int identity,
titulo varchar(40) not null,
autor varchar(20) default 'Desconocido',
editorial varchar(20),
precio decimal(6,2),
primary key (codigo)
);
MICROSOFT SQL SERVER MANAGEMENT STUDIO

Ingresamos algunos registros:

insert into libros values('El aleph','Borges','Emece',25.33);


insert into libros values('Java en 10 minutos','Mario Molina','Siglo XXI',50.65);
insert into libros values('Alicia en el pais de las maravillas','Lewis Carroll', 'Emece',19.95);
insert into libros values('Alicia en el pais de las maravillas','Lewis Carroll','Planeta',15);
MICROSOFT SQL SERVER MANAGEMENT STUDIO

Recuperamos los registros ordenados por el título:


select * from libros
order by titulo;

Ordenamos los registros por el campo "precio", referenciando el campo por su posición en
la lista de selección:
select titulo,autor,precio
from libros order by 3;

Los ordenamos por "editorial", de mayor a menor empleando "desc":


select * from libros
order by editorial desc;
MICROSOFT SQL SERVER MANAGEMENT STUDIO
Ordenamos por dos campos:
select * from libros
order by titulo,editorial;

Ordenamos en distintos sentidos:


select * from libros
order by titulo asc, editorial desc;

Podemos ordenar por un campo que no se lista en la selección:


select titulo, autor
from libros
order by precio;

Está permitido ordenar por valores calculados:


select titulo, autor, editorial,
precio+(precio*0.1) as 'precio con descuento'
from libros
order by 4;
MICROSOFT SQL SERVER MANAGEMENT STUDIO
Problema:
En una página web se guardan los siguientes datos de las visitas: número de visita, nombre, mail, pais, fecha.
1- Elimine la tabla "visitas", si existe:
if object_id('visitas') is not null
drop table visitas;

2- Créela con la siguiente estructura:


create table visitas (
numero int identity,
nombre varchar(30) default 'Anonimo',
mail varchar(50),
pais varchar (20),
fecha datetime,
primary key(numero)
);
MICROSOFT SQL SERVER MANAGEMENT STUDIO

3- Ingrese algunos registros:


insert into visitas values ('Ana Maria Lopez','AnaMaria@hotmail.com','Argentina','2006-10-10 10:10');
insert into visitas values ('Gustavo Gonzalez','GustavoGGonzalez@hotmail.com','Chile','2006-10-10 21:30');
insert into visitas values ('Juancito','JuanJosePerez@hotmail.com','Argentina','2006-10-11 15:45');
insert into visitas values ('Fabiola Martinez','MartinezFabiola@hotmail.com','Mexico','2006-10-12 08:15');
insert into visitas values ('Fabiola Martinez','MartinezFabiola@hotmail.com','Mexico','2006-09-12 20:45');
insert into visitas values ('Juancito','JuanJosePerez@hotmail.com','Argentina','2006-09-12 16:20');
insert into visitas values ('Juancito','JuanJosePerez@hotmail.com','Argentina','2006-09-15 16:25');
MICROSOFT SQL SERVER MANAGEMENT STUDIO

4- Ordene los registros por fecha, en orden descendente.

5- Muestre el nombre del usuario, pais y el nombre del mes, ordenado por pais (ascendente) y nombre del
mes (descendente)

6- Muestre el pais, el mes, el día y la hora y ordene las visitas por nombre del mes, del día y la hora.

7- Muestre los mail, país, ordenado por país, de todos los que visitaron la página en octubre (4 registros)
MOMENTO PARA RETROALIMENTAR
MUCHAS GRACIAS

Potrebbero piacerti anche