Está en la página 1de 26

“AÑO DE LA UNIVERLIZACIÓN DE LA SALUD”

UNIVERSIDAD NACIONAL
JOSÉ FAUSTINO SÁNCHEZ CARRIÓN
FACULTAD DE INGENIERIA INDUSTRIAL SISTEMAS E
INFORMÁTICA

IMPLEMEN ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMAS

TACIÓN Y
GESTIÓN
DE BASE DE
DATOS

DOCENTE: ING. RIOS HERRERA, JOSUE JOEL

ALUMNO: LAURENTE BALDERA, JESÚS

CICLO: V

2020
INNER JOIN, LEFT JOIN, RIGHT JOIN y FULL JOIN
1. INNER JOIN:
La palabra clave INNER JOIN selecciona todas las filas de ambas tablas siempre que se
cumpla la condición. Esta palabra clave creará el conjunto de resultados combinando todas
las filas de ambas tablas donde la condición se satisfaga, es decir, el valor del campo común
será el mismo.

Sintaxis:

SELECT nombreColumna(s)
FROM tabla1 INNER JOIN tabla2
ON tabla1.nombreColumna=table2.nombreColumna;

2. LEFT JOIN:
Esta combinación devuelve todas las filas de la tabla en el lado izquierdo de la combinación
y las filas coincidentes para la tabla en el lado derecho de la combinación. Las filas para las
que no hay una fila coincidente en el lado derecho, el conjunto de resultados contendrá
nulo. LEFT JOIN también se conoce como LEFT OUTER JOIN.

Sintaxis:

SELECT nombreColumna(s)
FROM tabla1 LEFT JOIN tabla2
ON tabla1.nombreColumna=tabla2.nombreColumna;

2
3. RIGHT JOIN:
RIGHT JOIN es similar a LEFT JOIN. Esta combinación devuelve todas las filas de la tabla en
el lado derecho de la combinación y las filas coincidentes de la tabla en el lado izquierdo de
la combinación. Las filas para las que no hay una fila coincidente en el lado izquierdo, el
conjunto de resultados contendrá NULL. RIGHT JOIN también se conoce como RIGHT OUTER
JOIN.

Sintaxis:

SELECT nombreColumna(s)
FROM tabla1 RIGHT JOIN tabla2
ON tabla1.nombreColumna=tabla2.nombreColumna;

4. FULL JOIN:
FULL JOIN crea el conjunto de resultados combinando el resultado de LEFT JOIN y RIGHT
JOIN. El conjunto de resultados contendrá todas las filas de ambas tablas. Las filas para las
que no hay coincidencia, el conjunto de resultados contendrá valores NULL.

Sintaxis:

SELECT nombreColumna(s)
FROM tabla1 OUTER JOIN tabla2
ON tabla1.nombreColumna=tabla2.nombreColumna;

3
EJEMPLOS:

a) Considere las dos tablas siguientes:

ESTUDIANTE

ID_ALUMNO NOMBRE DIRECCIÓN EDAD


1 Juan Zambrano Av. Grau 18
2 José Balcazar Av. Aparicio 19
3 Yomara Susanibar Ca. Derecha 20
4 Roberto Marino Jr. Luis Falcón 22
5 Alfredo Solano Ca. San Pedro 19
6 Miguel Hidalgo Ca. Victoria Baja 20
7 Noelia Flores Ca. Los Naturales 18
8 Yojaira Ramirez Av. 2 de mayo 19

ESTUDIANTE_CURSO

ID_CURSO ID_ALUMNO
1 1
2 2
2 3
3 4
1 5
4 9
5 10
4 11

 Usaremos INNER JOIN. Mostrar los nombres y la edad de los estudiantes matriculados
en diferentes cursos

SELECT ESTUDIANTE_CURSO.ID_CURSO, ESTUDIANTE.NOMBRE, ESTUDIANTE.EDAD


FROM ESTUDIANTE INNER JOIN ESTUDIANTE CURSO
ON ESTUDIANTE.ID_ALUMNO = ESTUDIANTE_CURSO.ID_ALUMNO

Resultado:
ID_CURSO NOMBRE EDAD
1 Juan Zambrano 18
2 José Balcazar 19
2 Yomara Susanibar 20
3 Roberto Marino 22
1 Alfredo Solano 19

4
 Usaremos LEFT JOIN. Mostrar el nombre del estudiante y cualquier curso.

SELECT ESTUDIANTE_CURSO.ID_CURSO, ESTUDIANTE.NOMBRE


FROM ESTUDIANTE INNER JOIN ESTUDIANTE CURSO
ON ESTUDIANTE.ID_ALUMNO = ESTUDIANTE_CURSO.ID_ALUMNO

Resultado:
NOMBRE ID_CURSO
Juan Zambrano 1
José Balcazar 2
Yomara Susanibar 2
Roberto Marino 3
Alfredo Solano 1
Miguel Hidalgo NULL
Noelia Flores NULL
Yojaira Ramirez NULL

 Usaremos RIGHT JOIN. Mostrar el ID del curso y cualquier estudiante.

SELECT ESTUDIANTE_CURSO.ID_CURSO, ESTUDIANTE.NOMBRE


FROM ESTUDIANTE RIGHT JOIN ESTUDIANTE CURSO
ON ESTUDIANTE.ID_ALUMNO = ESTUDIANTE_CURSO.ID_ALUMNO

Resultado:
ID_CURSO NOMBRE
1 Juan Zambrano
2 José Balcazar
2 Yomara Susanibar
3 Roberto Marino
1 Alfredo Solano
4 NULL
5 NULL
4 NULL

5
 Usaremos FULL JOIN. Mostrar el nombre de los alumnos y el ID del curso

SELECT ESTUDIANTE_CURSO.ID_CURSO, ESTUDIANTE.NOMBRE


FROM ESTUDIANTE FULL JOIN ESTUDIANTE CURSO
ON ESTUDIANTE.ID_ALUMNO = ESTUDIANTE_CURSO.ID_ALUMNO

Resultado:
NOMBRE ID_CURSO
Juan Zambrano 1
José Balcazar 2
Yomara Susanibar 2
Roberto Marino 3
Alfredo Solano 1
Miguel Hidalgo NULL
Noelia Flores NULL
Yojaira Ramirez NULL
NULL 9
NULL 10
NULL 11

b) Considere de las siguientes tablas:


EMPLEADO
ID_EMP NOMBRE APELLIDO_PATERNO APELLIDO_MATERNO ID_DEP
1 ANTONIO PEREZ GOMEZ 1
2 ANTONIO GARCIA RODRIGUEZ 2
3 PEDRO RUIZ GONZALEZ 2

DEPARTAMENTO

ID_DEP NOMBRE
1 ADMINISTRACION
2 INFORMATICA
3 COMERCIAL

6
 Usaremos INNER JOIN. Mostrar el nombre del empleado y el departamento al que
pertenece

SELECT EMPLEADO.NOMBRE, APELLIDO_PATERNO, APELLIDO_MATERNO,


DEPARTAMENTO.NOMBRE AS 'DEPARTAMENTO'
FROM EMPLEADO INNER JOIN DEPARTAMENTO
ON EMPLEADO.ID_DEP = DEPARTAMENTO.ID_DEP

Resultado:

NOMBRE APELLIDO_PATERNO APELLIDO_MATERNO DEPARTAMENTO


ANTONIO PEREZ GOMEZ ADMINISTRACION
ANTONIO GARCIA RODRIGUEZ INFORMATICA
PEDRO RUIZ GONZALEZ INFORMATICA

 Usaremos LEFT JOIN. Mostrar el nombre del empleado y cualquier departamento

SELECT EMPLEADO.NOMBRE, EMPLEADO.APELLIDO_PATERNO,


DEPARTAMENTO.NOMBRE AS 'DEPARTAMENTO'
FROM EMPLEADO LEFT JOIN DEPARTAMENTO
ON EMPLEADO.ID_DEP = DEPARTAMENTO.ID_DEP

Resultado:
NOMBRE APELLIDO_PATERNO DEPARTAMENTO
ANTONIO PEREZ ADMINISTRACION
ANTONIO GARCIA INFORMATICA
PEDRO RUIZ INFORMATICA

 Usaremos RIGHT JOIN. Mostrar cualquier empleado y los departamentos que existen.

SELECT EMPLEADO.NOMBRE, EMPLEADO.APELLIDO_PATERNO,


DEPARTAMENTO.NOMBRE AS 'DEPARTAMENTO'
FROM EMPLEADO RIGHT JOIN DEPARTAMENTO
ON EMPLEADO.ID_DEP = DEPARTAMENTO.ID_DEP

Resultado:
NOMBRE APELLIDO_PATERNO DEPARTAMENTO
ANTONIO PEREZ ADMINISTRACION
ANTONIO GARCIA INFORMATICA
PEDRO RUIZ INFORMATICA
NULL NULL COMERCIAL

7
 Usaremos FULL JOIN. Mostrar los nombres de los empleados y los departamentos que
existen.

SELECT EMPLEADO.NOMBRE, EMPLEADO.APELLIDO_PATERNO,


DEPARTAMENTO.NOMBRE AS 'DEPARTAMENTO'
FROM EMPLEADO FULL JOIN DEPARTAMENTO
ON EMPLEADO.ID_DEP = DEPARTAMENTO.ID_DEP

Resultado:
NOMBRE APELLIDO_PATERNO DEPARTAMENTO
ANTONIO PEREZ ADMINISTRACION
ANTONIO GARCIA INFORMATICA
PEDRO RUIZ INFORMATICA
NULL NULL COMERCIAL

c) Considere de las siguientes tablas:

CLIENTE
ClienteID NombreCliente Contacto
1 Marco Lambert 987654321
2 Lydia Roderic 980208021
3 Ebbe Therese 988982635
4 Sofie Mariona 912436773

PEDIDO
PedidoID ClienteID Factura
234 4 160
235 2 48
236 3 64
237 4 92

 Usaremos INNER JOIN. Mostrar los clientes con pedidos

SELECT CLIENTE.NombreCliente, PEDIDO.PedidoID


FROM CLIENTE INNER JOIN PEDIDO
ON CLIENTE.ClienteID=PEDIDO.ClienteID
ORDER BY CLIENTE.NombreCliente

Resultado:
NombreCliente PedidoID
Ebbe Therese 236
Lydia Roderic 235
Sofie Mariona 234
Sofie Mariona 237

8
 Usaremos LEFT JOIN. Mostrar el nombre de los clientes y cualquier pedido.

SELECT CLIENTE.NombreCliente, PEDIDO.PedidoID


FROM CLIENTE LEFT JOIN PEDIDO
ON CLIENTE.ClienteID=PEDIDO.ClienteID
ORDER BY CLIENTE.NombreCliente

Resultado:
NombreCliente PedidoID
Ebbe Therese 236
Lydia Roderic 235
Marco Lambert NULL
Sofie Mariona 234
Sofie Mariona 237

 Usaremos RIGHT JOIN. Mostrar todos los pedidos y los clientes.

SELECT CLIENTE.NombreCliente, PEDIDO.PedidoID


FROM CLIENTE RIGHT JOIN PEDIDO
ON CLIENTE.ClienteID=PEDIDO.ClienteID
ORDER BY PEDIDO.PedidoID;

Resultado:
PedidoID NombreCliente
234 Sofie Mariona
235 Lydia Roderic
236 Ebbe Therese
237 Sofie Mariona

 Usaremos FULL JOIN. Mostrar todos los pedidos y todos los clientes

SELECT CLIENTE.NombreCliente, PEDIDO.PedidoID


FROM CLIENTE FULL JOIN PEDIDO
ON CLIENTE.ClienteID=PEDIDO.ClienteID
ORDER BY CLIENTE.NombreCliente

Resultado:
NombreCliente PedidoID
Ebbe Therese 236
Lydia Roderic 235
Marco Lambert NULL
Sofie Mariona 234
Sofie Mariona 237

9
CONSULTA
Una consulta sirve para extraer información de una base de datos. Permite manipular datos:
agregar, eliminar y cambiar. Así es como usaremos esta palabra.

Sin embargo, no solo hay que escribir una “solicitud” aleatoria. Debes escribir tu consulta basándote
en un conjunto de códigos predefinidos, de modo que tu base de datos pueda entender la
instrucción. Nos referimos a este código como el lenguaje de consulta.

Ejemplos:

PARTICIPANTE
ID Nombre Sexo Edad Ocupación
1 Juan Masculino 17 Estudiante
2 Pedro Masculino 26 Desempleado
3 Sara Femenino 34 Profesor
4 María Femenino 34 Desempleado

a) Seleccionar solo las columnas «Nombre» y «Ocupación» de la tabla «Participantes»

SELECT Nombre, Ocupación


FROM Participantes

Resultado:

Nombre Ocupación
Juan Estudiante
Pedro Desempleado
Sara Profesor
María Desempleado

b) Eliminar los datos de los encuestados desempleados.

DELETE FROM Participantes


WHERE Ocupación = 'Desempleado'

Resultado:
ID Nombre Sexo Edad Ocupación
1 Juan Masculino 17 Estudiante
3 Sara Femenino 34 Profesor

10
c) Insertar una nueva fila que contiene un participante llamado Mario.

INSERT INTO Participantes (ID, Nombre, Sexo, Edad, Ocupación)


VALUES ('5', 'Mario', 'Masculino', '67', 'Retirado')

Resultado:
ID Nombre Sexo Edad Ocupación
1 Juan Masculino 17 Estudiante
2 Pedro Masculino 26 Desempleado
3 Sara Femenino 34 Profesor
4 María Femenino 34 Desempleado
5 Mario Masculino 67 Retirado

SUBCONSULTA
Una subconsulta es una consulta dentro de otra consulta SQL. Una subconsulta también se
denomina consulta interna o selección interna y la declaración que contiene una subconsulta se
denomina consulta externa o selección externa.
Nota
 Las subconsultas deben estar entre paréntesis,
 Un ORDER BY no se puede utilizar en una subconsulta.
 El tipo de imagen, como BLOB, matriz, tipos de datos de texto, no están permitidos en
subconsultas.
Las subconsultas se pueden utilizar con declaraciones de selección, inserción, actualización y
eliminación dentro de dónde, desde, cláusula de selección junto con IN, operadores de
comparación, etc.
Ejemplos:
 Subconsultas con declaración selecta
- Con el operador IN y la cláusula WHERE:
ITCompanyInNepal

11
SELECT *
FROM ITCompanyInNepal
WHERE Headquarter IN (SELECT Headquarter
FROM ITCompanyInNepal
WHERE Headquarter = 'USA');

- Con operador de comparación y donde la cláusula

SELECT *
FROM ITCompanyInNepal
WHERE NumberOfEmployee < (SELECT AVG(NumberOfEmployee)
FROM ITCompanyInNepal
)

- Con cláusula selecta

SELESELECT CompanyName,
CompanyAddress,
Headquarter,
(Select SUM(NumberOfEmployee)
FROM ITCompanyInNepal
Where Headquarter = 'USA') AS
TotalEmployeeHiredByUSAInKathmandu
FROM ITCompanyInNepal
WHERE CompanyAddress = 'Kathmandu' AND Headquarter = 'USA'

 Subconsultas con declaración de inserción

IndianCompany

Tenemos que insertar datos de la tabla IndianCompany en ITCompanyInNepal.

INSERT INTO ITCompanyInNepal


SELECT *
FROM IndianCompany

12
 Subconsultas con estado de actualización

Supongamos que todas las compañías cuya sede central es EE. UU. Decidieron despedir a
50 empleados de todas las compaías de Nepal basadas en EE. UU. Debido a algún cambio
en la política de las compaías estadounidenses.

UPDATE ITCompanyInNepal
SET NumberOfEmployee = NumberOfEmployee - 50
WHERE Headquarter IN (SELECT Headquarter
FROM ITCompanyInNepal
WHERE Headquarter = 'USA')

 Subconsultas con declaración de borrado

Supongamos que todas las empresas cuya sede central es Dinamarca decidieron cerrar sus
empresas de Nepal.

DELETE FROM ITCompanyInNepal


WHERE Headquarter IN (SELECT Headquarter
FROM ITCompanyInNepal
WHERE Headquarter = 'Denmark')

13
MDF, LDF, NDF
MDF: Archivos de base de datos primarios: aquí
es donde normalmente se almacena todo en la
base de datos. Cuando hay varios archivos de
base de datos (consulte archivos .NDF), el
archivo .MDF siempre almacenará la
información de configuración interna de la base
de datos y otros datos internos del sistema. Una
base de datos solo puede tener un archivo de
base de datos principal y no hay dos bases de
datos que puedan compartir el mismo archivo
de base de datos principal. El servidor SQL de
forma predeterminada creará un archivo de
datos principal y un archivo de registro. El
archivo de base de datos principal tiene una
extensión .mdf.

NDF: Archivos de base de datos secundarios: los archivos de base de datos secundarios se utilizan
para almacenar todos los datos que no caben en el archivo de base de datos principal. Los archivos
secundarios se pueden utilizar para distribuir datos en varios discos colocando cada archivo en una
unidad de disco diferente. El servidor SQL de forma predeterminada no creará un archivo "ndf". Los
archivos NDF se pueden crear mientras se crea la base de datos del servidor SQL o se pueden crear
manualmente después de que se crea la base de datos utilizando la declaración "ALTER DATABASE".
Un archivo de base de datos secundario tiene una extensión .ndf.

LDF: archivos de registro de transacciones: cada base de datos contiene un archivo de base de datos
principal y un archivo de registro de transacciones (los archivos de registro se escriben
secuencialmente, por lo que no hay ningún beneficio en tener varios de ellos, a menos que exceda
el tamaño máximo del archivo de registro (2 TB) entre copias de seguridad). Los archivos de registro
de transacciones se utilizan para almacenar la información de registro utilizada para recuperar la
base de datos. El registro de transacciones es un registro en serie de todas las modificaciones que
se han producido en la base de datos, así como la transacción que realizó cada modificación. El
registro de transacciones registra el inicio de cada transacción. Registra los cambios en los datos y
suficiente información para deshacer las modificaciones (si es necesario más adelante) realizadas
durante cada transacción. La información del registro de transacciones y datos nunca se mezcla en
el mismo archivo. Cada base de datos debe incluir al menos un archivo de registro de transacciones.
Los archivos de registro de transacciones tienen la extensión .ldf.

14
PROCEDIMIENTO ALMACENADO
Un procedimiento almacenado es un conjunto de instrucciones de T-SQL que SQL Server compila,
en un único plan de ejecución, los llamados "store procedures" se encuentran almacenados en la
base de datos, los cuales pueden ser ejecutados en cualquier momento.

¿Para qué se utilizan?


Los procedimientos almacenados se utilizan para agrupar las instrucciones de T-SQL y cualquier
lógica asociada necesaria para llevar a cabo una tarea.

¿Cómo se ejecutan?
Cuando un procedimiento almacenado es ejecutado por primera vez se compila, se crea y se
guarda en memoria su plan de ejecución., luego SQL utiliza ese plan de ejecución cuando se vuelve
a llamar al procedimiento sin volver a compilarlo nuevamente.

¿Qué nos proporcionan?


Nos proporcionan a nosotros los usuarios un acceso fácil a la base de datos, se puede tener acceso
a la base de datos sin tener que conocer los detalles de la arquitectura de tablas -simplemente se
ejecutan los procedimientos almacenados que llevan a cabo las tareas solicitadas.

Los procedimientos almacenados pueden aceptar datos de entrada, utilizar variables locales y
devolver datos.

Tipos de Procedimientos Almacenados:


Procedimientos Almacenados del sistema, se utilizan para administrar el SQL Server y para
mostrar información sobre base de datos y sobre usuarios.

Procedimientos almacenados Extendidos, son bibliotecas de vínculos dinámicos (dynamic-link


libraries, DLLs) que SQL puede cargar y ejecutar de manera dinámica.

Procedimientos Almacenados sencillos definidos por el usuario, son los procedimientos creados
por los usuarios y están personalizados para llevar a cabo la tarea deseada por el usuario.

Los procedimientos almacenados ofrecen ventajas importantes:


Rendimiento: al ser ejecutados por el motor de base de datos ofrecen un rendimiento inmejorable
ya que no es necesario transportar datos a ninguna parte. Cualquier proceso externo tiene una
penalidad de tiempo adicional dada por el transporte de datos.

Potencia: el lenguaje para procedimientos almacenados es muy potente. Permiten ejecutar


operaciones complejas en pocos pasos ya que poseen un conjunto de instrucciones avanzado.

Centralización: al formar parte de la base de datos los procedimientos almacenados están en un


lugar centralizado y pueden ser ejecutados por cualquier aplicación que tenga acceso a la misma.

15
TIPO DE DATO
Tipos de datos de cadena

Tipo de datos Descripción Tamaño máximo Almacenamiento

Cadena de caracteres de
char (n) 8,000 caracteres Ancho definido
ancho fijo

Cadena de caracteres de 2 bytes + número de


varchar (n) 8,000 caracteres
ancho variable caracteres

Cadena de caracteres de 1,073,741,824 2 bytes + número de


varchar (max)
ancho variable caracteres caracteres

Cadena de caracteres de 2 GB de datos de 4 bytes + número de


text
ancho variable texto caracteres

Cadena Unicode de ancho


nchar 4.000 caracteres Ancho definido x 2
fijo

nvarchar Ancho de cadena Unicode 4.000 caracteres

536,870,912
nvarchar (max) Ancho de cadena Unicode
caracteres

2 GB de datos de
ntext Ancho de cadena Unicode
texto

binary (n) Cadena binaria de ancho fijo 8,000 bytes

Cadena binaria de ancho


varbinary 8,000 bytes
variable

Cadena binaria de ancho


varbinary (max) 2 GB
variable

Cadena binaria de ancho


image 2 GB
variable

16
Tipos de datos numéricos

Tipo de
Descripción Almacenamiento
datos

bit Entero que puede ser 0, 1 o NULL

tinyint Permite números enteros de 0 a 255 1 byte

smallint Permite números enteros entre -32,768 y 32,767 2 bytes

Permite números enteros entre -2,147,483,648 y


int 4 bytes
2,147,483,647

Permite números enteros entre -9,223,372,036,854,775,808 y


bigint 8 bytes
9,223,372,036,854,775,807

Números de escala y precisión fijos.

Permite números de -10 ^ 38 +1 a 10 ^ 38 -1.

El parámetro p indica el número total máximo de dígitos que


se pueden almacenar (tanto a la izquierda como a la derecha
decimal (p, s) del punto decimal). p debe ser un valor de 1 a 38. El valor 5-17 bytes
predeterminado es 18.

El parámetro s indica la cantidad máxima de dígitos


almacenados a la derecha del punto decimal. s debe ser un
valor de 0 a p. El valor predeterminado es 0

Números de escala y precisión fijos.

Permite números de -10 ^ 38 +1 a 10 ^ 38 -1.

El parámetro p indica el número total máximo de dígitos que


se pueden almacenar (tanto a la izquierda como a la derecha
numeric (p, s) del punto decimal). p debe ser un valor de 1 a 38. El valor 5-17 bytes
predeterminado es 18.

El parámetro s indica la cantidad máxima de dígitos


almacenados a la derecha del punto decimal. s debe ser un
valor de 0 a p. El valor predeterminado es 0

17
smallmoney Datos monetarios de -214,748.3648 a 214,748.3647 4 bytes

Datos monetarios de -922,337,203,685,477.5808 a


money 8 bytes
922,337,203,685,477.5807

Datos del número de precisión flotante desde -1.79E + 308 a


1.79E + 308.
float (n) El parámetro n indica si el campo debe contener 4 u 8 bytes. 4 u 8 bytes
float (24) contiene un campo de 4 bytes y float (53) contiene
un campo de 8 bytes. El valor predeterminado de n es 53.

Datos numéricos de precisión flotante desde -3.40E + 38 a


real 4 bytes
3.40E + 38

Tipos de datos de fecha

Tipo de datos Descripción Almacenamiento

Del 1 de enero de 1753 al 31 de diciembre de 1999, con una


datetime 8 bytes
precisión de 3,33 milisegundos

Desde el 1 de enero de 0001 hasta el 31 de diciembre de


datetime2 6-8 bytes
1999, con una precisión de 100 nanosegundos

Del 1 de enero de 1900 al 6 de junio de 2079 con una


smalldatetime 4 bytes
precisión de 1 minuto

Almacenar una fecha solamente. Del 1 de enero de 0001 al


date 3 bytes
31 de diciembre de 9999

Almacenar un tiempo solo con una precisión de 100


time 3-5 bytes
nanosegundos

Lo mismo que datetime2 con la adición de un


datetimeoffset 8-10 bytes
desplazamiento de zona horaria

Almacena un número único que se actualiza cada vez que se


crea o modifica una fila. El valor de la marca de tiempo se
timestamp
basa en un reloj interno y no corresponde a tiempo real.
Cada tabla puede tener una sola variable de marca de tiempo

18
Otros tipos de datos

Tipo de datos Descripción

Almacena hasta 8,000 bytes de datos de varios tipos de datos, excepto texto,
sql_variant
ntext e indicación de fecha y hora

uniqueidentifier Almacena un identificador único global (GUID)

xml Almacena datos formateados en XML. Máximo 2 GB

Almacena una referencia a un cursor utilizado para las operaciones de la base


cursor
de datos

table Almacena un conjunto de resultados para un procesamiento posterior

VISTA
Una vista es una tabla virtual cuyo contenido está definido por una consulta. Como una tabla, una
vista consta de un conjunto de columnas y filas de datos con nombre. A menos que esté indexada,
una vista no existe como un conjunto almacenado de valores de datos en una base de datos. Las
filas y columnas de datos provienen de tablas a las que se hace referencia en la consulta que
define la vista y se producen dinámicamente cuando se hace referencia a la vista.

Una vista actúa como un filtro en las tablas subyacentes a las que se hace referencia en la vista. La
consulta que define la vista puede ser de una o más tablas o de otras vistas en la base de datos
actual o en otras.

TIPOS DE VISTA
Vistas indexadas

Una vista indexada es una vista que se ha materializado. Esto significa que la definición de la vista
se ha calculado y los datos resultantes almacenados como una tabla. Puede indexar una vista
creando un índice agrupado único en ella. Las vistas indexadas pueden mejorar drásticamente el
rendimiento de algunos tipos de consultas. Las vistas indexadas funcionan mejor para consultas
que agregan muchas filas. No son adecuados para conjuntos de datos subyacentes que se
actualizan con frecuencia.

Vistas

particionadas Una vista particionada une datos particionados horizontalmente de un conjunto de


tablas miembro en uno o más servidores. Esto hace que los datos aparezcan como si fueran de una
tabla. Una vista que une tablas de miembros en la misma instancia de SQL Server es una vista
particionada local.

19
Vistas del sistema

Las vistas del sistema exponen los metadatos del catálogo. Puede utilizar vistas del sistema para
devolver información sobre la instancia de SQL Server o los objetos definidos en la instancia. Por
ejemplo, puede consultar la vista del catálogo sys.databases para devolver información sobre las
bases de datos definidas por el usuario disponibles en la instancia.

Ejemplos:

a) TABLA: CLIENTE

Nombre Apellido_Paterno Teléfono Ciudad País


Joaquín Montalvo 998877665 Arequipa Perú
Robert Merino 987654321 Lima Perú

CREATE VIEW V_CLIENTE


AS SELECT Nombre, Apellido_Paterno, País
FROM CLIENTE;

Ahora tenemos la vista llamada V_CLIENTE:

Nombre Apellido_Paterno País


Joaquín Montalvo Perú
Robert Merino Perú

b) TABLA: TIENDA

ID_Tienda Nombre Ventas Fecha


001 Los Angeles 1500 05-01-2018
002 San Diego 250 07-01-2018
001 Los Angeles 300 08-01-2018
003 Boston 700 08-01-2018

TABLA: UBICACION

Ciudad Nombre
Lima Boston
Lima New York
Trujillo Los Angeles
Trujillo San Diego

Creamos la vista V_CIUDAD_VENTAS

CREATE VIEW V_CIUDAD_VENTAS


AS SELECT UBICACION.Ciudad, SUM(TIENDA.Ventas) Ventas
FROM TIENDA, UBICACION
WHERE TIENDA.Nombre = UBICACION.Nombre
GROUP BY UBICACIÓN.Ciudad

20
Para saber el contenido de la vista insertamos:

SELECT * FROM V_CIUDAD_VENTAS;

Resultado:

Lima 700
Trujillo 2050

TRIGGER
Un "trigger" (disparador o desencadenador) es un tipo de procedimiento almacenado que se
ejecuta cuando se intenta modificar los datos de una tabla o vista.

Se definen para una tabla o vista específica.

Se crean para conservar la integridad referencial y la coherencia entre los datos entre distintas
tablas.

Si se intenta modificar (agregar, actualizar o eliminar) datos de una tabla en la que se definió un
disparador para alguna de estas acciones (inserción INSERT, actualización UPDATE y eliminación
DELETE), el disparador se ejecuta en forma automática.

Un trigger se asocia a un evento (inserción INSERT, actualización UPDATE y eliminación DELETE)


sobre una tabla.

La diferencia con los procedimientos almacenados del sistema es que los triggers:

- no pueden ser invocados directamente; al intentar modificar los datos de una tabla para la
que se ha definido un disparador, el disparador se ejecuta automáticamente.
- no reciben y retornan parámetros.
- son apropiados para mantener la integridad de los datos, no para obtener resultados de
consultas.

Los triggers, a diferencia de las restricciones "check", pueden hacer referencia a campos de otras
tablas. Por ejemplo, puede crearse un trigger de inserción en la tabla "ventas" que compruebe el
campo "stock" de un artículo en la tabla "articulos"; el disparador controlaría que, cuando el valor
de "stock" sea menor a la cantidad que se intenta vender, la inserción del nuevo registro en
"ventas" no se realice.

Los disparadores se ejecutan DESPUES de la ejecución de una instrucción "insert", "update" o


"delete" en la tabla en la que fueron definidos. Las restricciones se comprueban ANTES de la
ejecución de una instrucción "insert", "update" o "delete". Por lo tanto, las restricciones se
comprueban primero, si se infringe alguna restricción, el desencadenador no llega a ejecutarse.

Los triggers se crean con la instrucción "create trigger". Esta instrucción especifica la tabla en la
que se define el disparador, los eventos para los que se ejecuta y las instrucciones que contiene.

21
Sintaxis:

CREATE TRIGGER NOMBREDISPARADOR


ON NOMBRETABLA
FOR EVENTO- INSERT, UPDATE o DELETE
AS SENTENCIA SQL

Ejemplos:

a) Implementar un Trigger que permita mostrar un mensaje cada vez que se inserte o
actualice un registro en la tabla pasajero.

ON PASAJERO
FOR INSERT, UPDATE
AS
PRINT 'Pasajero actualizado correctamente'
GO

22
b) Implementar un trigger que permita crear una réplica de los registros insertados en la
tabla AVION para dicho proceso implementar una nueva tabla llamada avionBAK con las
mismas columnas de la tabla AVION.

CREATE TRIGGER replicaavion


ON AVION
AFTER INSERT
AS
BEGIN
INSERT avionBAK select * from inserted
END
GO

c) Implementar un trigger que permita controlar el registro de un pago, se deberá evaluar


que el monto a registrar sea mayor que cero en la columna monto de la tabla pago.

23
CREATE TRIGGER validapago
ON PAGO
FOR INSERT
AS
IF (select monto from inserted)<=0
BEGIN
ROLLBACK TRANSACTION
PRINT 'No puede registrar monto Cero'
END
ELSE
PRINT 'Pago registrado correctamente'
GO

INICIO DE SESIÓN
Un inicio de sesión es una entidad de seguridad o una entidad que puede ser autenticada por un
sistema seguro. Los usuarios necesitan iniciar sesión para conectarse a SQL Server. Puede crear un
inicio de sesión basado en una entidad de seguridad de Windows (como un usuario de dominio o
un grupo de dominio de Windows) o puede crear un inicio de sesión que no lo esté (como un inicio
de sesión de SQL Server).

Como entidad de seguridad, se pueden conceder permisos a los inicios de sesión. El ámbito de un
inicio de sesión es todo el Motor de base de datos. Para establecer conexión con una base de
datos concreta de la instancia de SQL Server, un inicio de sesión debe estar asignado a un usuario
de la base de datos. Los permisos dentro de la base de datos se conceden y deniegan al usuario de
la base de datos, no al inicio de sesión. Los permisos que tienen como ámbito la instancia
completa de SQL Server (por ejemplo, el permiso CREATE ENDPOINT) se pueden conceder a un
inicio de sesión.

ROL
Los roles son los conjuntos de permisos. Estos conjuntos existen a tres niveles distintos: servidor,
base de datos y aplicación. Los roles permiten agrupar los derechos y gestionar más fácilmente los
diferentes usuarios y las conexiones. Siempre es preferible asignar los derechos a los roles y
posteriormente asignar los roles a los usuarios. Con una estructura como esta, la adición y la
modificación de permisos o de usuarios son más sencillas.

Es posible definir un rol como un conjunto identificado de permisos. Para facilitar la gestión de los
permisos, SQL Server ofrece los roles predefinidos, también llamados fijos, ya que no es posible
añadir o eliminar privilegios en estos roles.

Estos roles fijos se definen en dos niveles:

- Servidor.
- Base de datos.

24
Además de estos roles fijos, es posible gestionar otros roles. Es conveniente establecer un nombre
único para definir un rol y posteriormente asignar uno o varios permisos respetando un
procedimiento en todo punto similar al utilizado para asignar los permisos a los usuarios. Estos
roles se pueden definir en tres niveles:

- Servidor.
- Base de datos.
- Aplicación.

Los roles permiten una gestión simplificada de los privilegios, ya que también es posible definir los
perfiles tipo de privilegios y posteriormente asignar a cada usuario de base de datos uno o varios
perfiles tipo con objeto de darle todas las autorizaciones que necesita para trabajar en la base de
datos.

Sintaxis:

CREATE ROLE role_name [AUTHORIZATION owner_name]

Ejemplos:

a) Crear un rol de base de datos propiedad de un usuario de la base de datos

En el siguiente ejemplo se crea el rol de base de datos buyers que es propiedad del
usuario BenMiller.

CREATE ROLE buyers AUTHORIZATION BenMiller;


GO

b) Crear un rol de base de datos que es propiedad de un rol fijo de base de datos

En el siguiente ejemplo se crea el rol de base de datos auditors que es propiedad del rol
fijo de base de datos db_securityadmin.

CREATE ROLE auditors AUTHORIZATION db_securityadmin;


GO

25
PERFIL
Los perfiles se utilizan para limitar la cantidad de recursos del sistema y de los BD disponibles para
un usuario. Si no se definen perfiles para un usuario se utiliza el perfil por defecto, que especifica
recursos ilimitados.
Los recursos que pueden ser limitados vía perfil son los siguientes:

Recurso Descripción

El número de sesiones concurrentes que un usuario puede tener en


SESSIONES_PER_USER
una instancia.

El tiempo de CPU, en centenas de segundos, que una sesión puede


CPU_PER_SESSION
utilizar.

CONNECT_TIME El número de minutos que una sesión puede permanecer activa.

El número de minutos que una sesión puede permanecer sin que sea
IDLE_TIME
utilizada de manera activa.

LOGICAL_READS_PER_SE
El número de bloques de datos que se pueden leer en una sesión.
SSION

LOGICAL_READS_PER_C
El número de bloques de datos que se pueden leer en una operación.
ALL

La cantidad de espacio privado que una sesión puede reservar en la


PRIVATE_SGA
zona de SQL compartido de la SGA.

El número de total de recursos por sesión, en unidades de servicio.


Esto resulta de un calculo ponderado
COMPOSITE_LIMIT de CPU_PER_SESSION, CONNECT_TIME, LOGICAL_READS_PER_SESSIO
N y PRIVATE_SGA, cuyos pesos se pueden variar con el
comando ALTER RESOURCE COST.

Los perfiles se pueden crear vía el comando CREATE PROFILE, y se pueden modificar con la
sentencia ALTER PROFILE.
En general, el perfil por defecto debe ser adecuado para los usuarios normales; los usuarios con
requerimientos especiales deberían tener perfiles especiales.

26

También podría gustarte