Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
U.A.M.Reynosa-Rodhe
1
Introducción
Nombre
Compañía
Título / Funcion
Responsabilidades
Experiencia en Bases de Datos
Experiencia en Sql Server
Expectativas del curso
2
Temario
Módulo 1: Panorama general de SQL Server
3
Temario
4
Logística
Horario
Breaks
Teléfonos
Estacionamiento
Baños
Fumadores
5
6
Temario
Qué es SQL Server?
Conceptos Básicos
Arquitectura de SQL Server
Bases de Datos de SQL Server
7
Conceptos Básicos
Manejador de bases de datos relacional
Basado en la arquitectura cliente-servidor
Soporta:
- Grandes volúmenes de transacciones en línea
- Operaciones Concurrentes
- Procesos con gran volúmen de información
- Conexiones simultáneas
Garantiza la Integridad de los datos
8
Conceptos Básicos
Garantiza la realización o no de una
transacción completa
Recuperación de datos en un estado
consistente en caso de fallas
Lenguaje Transact SQL para programación
(Apegado a ANSI SQL-92, 95)
Administración Centralizada de servidores
distribuidos
9
Plataformas de SQL Server
Servidor
Windows 2000, 2003, 2012, NT , XP
Windows 98
Cliente
Windows 2000, NT y XP
Windows 95 y 98
MS-DOS, Windows 3.x
Exploradores de Internet
Otros Fabricantes
10
Integración de SQL Server con
Windows NT
Sistema de Seguridad
Capacidad de Multiprocesamiento
Mensaje en el Event Viewer
Servicios de NT o 2000
Performance Monitor
Microsoft Cluster Server
11
Servicios de SQL Server
MSSQLServer
Administración e Integridad de datos, consultas y manejo
de transacciones.
SQLServerAgent
Alertas, Operadores y Trabajos
Microsoft Search
Catálogos e índices de texto
12
Seguridad de SQL Server
Autenticación de SQL Server
Cuenta propia de SQL Server
SQL Verifica el password
El usuario debe especificar cuenta y password al
conectarse a SQL
13
Seguridad de SQL Server
Modo de Autenticación
De Windows NT
○ Solo Autenticación de Windows NT
Modo Mixto
○ Autenticación de Windows NT o autenticación de SQL
Server
14
Bases de Datos SQL Server
Tipos de bases de datos
Objetos en la base de datos
Tablas del sistema
Obtención de metadata
15
Tipos de bases de datos
Bases de datos del sistema
Master
Model
Tempdb
Msdb
Distribution
16
Tipos de bases de datos
Bases de Datos del Sistema
master
model tempdb msdb distribution
17
Objetos en la Base de Datos
Tablas
Tipos de Datos
Restricciones (Constraints)
Reglas
Defaults
Indices
Vistas
Stored Procedures
Triggers
18
Tablas del sistema
Almacenan información necesaria acerca del sistema y los
objetos de la base de datos
19
Obtención de Metadata
Stored Procedures del sistema
sp_help, sp_helpdb, sp_helpindex, etc
20
Repaso
Qué es SQL Server?
Conceptos Básicos
Arquitectura de SQL Server
Bases de Datos de SQL Server
21
22
Temario
Herramientas de Programación
Lenguaje de programación Transact-SQL
Elementos de Transact-SQL
Reglas de Identificadores
Ejecución de comandos de Transact-SQL
Procesamiento de Queries
23
Herramientas de Programación
SQL Server Query Analyzer
Identificación por colores de elementos de sintaxis
Múltiples ventanas de consulta
Forma personalizada para ver los resultados
Vista Gráfica de planes de ejecución
Capacidad de ejecutar selectivamente partes de un script
Utilería osql
Se comunica con el servidor mediante ODBC
Se ejecuta desde una ventana de Command Prompt
Los parámetros de la instrucción osql distinguen
mayúsculas de minúsculas
24
Transact-SQL
Utilizado por SQL Server como lenguaje de consulta y
programación de sus bases de datos
Transact-SQL es una versión del lenguaje de consulta
estructurado (SQL, Structured Query Language)
Transact-SQL acepta el estándar SQL de ISO ANSI SQL-
92
Se agregan elementos adicionales al lenguaje para
brindar mayor funcionalidad
Puede ser ejecutado desde cualquier producto
compatible con ANSI-SQL
25
Elementos de Transact-SQL
Lenguaje de control de datos
(DCL, Data Control Languaje)
Elementos adicionales
26
Lenguaje de Control de Datos (DCL)
27
Lenguaje de Definición de Datos (DDL)
28
Lenguaje de Manipulación de Datos (DML)
29
Elementos Adicionales
Variables Locales
- Definidas en el DECLARE
- Se les asigna valor usando el SET o SELECT
Operadores
- Aritméticos ( +, -, *, /, % )
- De Comparación ( =, <, >, >=, <=, <>, !>, !<, !=)
- De Concatenación de caracteres ( + )
- Lógicos ( AND, OR, NOT )
Funciones
- De conjunto de filas (OPENQUERY, OPENROWSET, etc.)
- De agregado (AVG, SUM, COUNT, etc.)
- Escalares (CONVERT, GETDATE, USER_NAME, etc.)
30
Elementos Adicionales
Instrucciones para control de flujo
- BEGIN … END
- IF … END
- WHILE …
- CASE …
Comentarios
- De linea
- Se usan dos guiones ( -- )
- De bloque
- Se usan caracteres ( /* ) para iniciar el comentario y ( */ ) para
terminarlo
31
Reglas de Identificadores
Los identificadores pueden tener de 1 a 128
caracteres
Los identificadores para tablas temporales no
pueden ser de más de 116 caracteres
Hay dos clases de identificadores
Identificadores regulares
Identificadores delimitados
32
Reglas de Identificadores
Identificadores Regulares
El primer carácter puede ser una letra o un símbolo:
○ a-z, A-Z, _, @, #
Los demás caracteres pueden ser letras, números,
simbolos
El identificador no debe ser una palabra reservada de
SQL
No se permiten espacios en blanco
Identificadores Delimitados
Se encierran entre corchetes ( [ ] ) o comillas ( “ “ )
Pueden incluir palabras reservadas
Pueden incluir espacios en blanco y caracteres como:
○ @, $, #, _, ., &, {, \, etc.
33
Ejecución de comandos de
Transact-SQL
Construcción dinámica de clausulas
Uso de EXECUTE con variables o constantes string
Uso de ‘Batches’
Uno o más clausulas enviados juntos, delimitados por la
clausulaGO
Uso de ‘Scripts’
Uno o más batches
Uso de transacciones
Garantizan la integridad de los datos
Se delimitan por las instrucciones BEGIN
TRANSACTION, COMMIT / ROLLBACK TRANSACTION
34
Procesamiento de queries
35
Repaso
Herramientas de Programación
Lenguaje de programación Transact-SQL
Elementos de Transact-SQL
Reglas de Identificadores
Ejecución de comandos de Transact-SQL
Procesamiento de Queries
36
37
Temario
SQL Enterprise Manager
Cómo se almacenan los datos
Creación de Bases de Datos
Opciones de una Base de Datos
Modificación de Bases de Datos
Tipos de Datos
Creación de Tablas
38
SQL Enterprise Manager
Herramienta para Administrar SQL Server
Permite la Admon. Y Monitoreo de
Servidores Remotos
Todas las tareas administrativas se pueden
realizar desde esta herramienta o a través
de comandos
Lo pueden usar: DBA´s, Operadores,
Desarrolladores
39
Como se almacenan los Datos
Base de Datos
Datos Log
( .mdf ) ( .ldf )
Tablas, Extent
Indices (8 páginas de 8KB)
En master..sysdatabases se almacena
información acerca de las bases de datos
41
Creación de Bases de Datos…
Sintaxis
CREATE DATABASE database_name
[ ON
[ < filespec > [ ,...n ] ]
[ , < filegroup > [ ,...n ] ]
]
[ LOG ON { < filespec > [ ,...n ] } ]
[ COLLATE collation_name ]
[ FOR LOAD | FOR ATTACH ]
< filespec > ::=
[ PRIMARY ]
( [ NAME = logical_file_name , ]
FILENAME = 'os_file_name'
[ , SIZE = size ]
[ , MAXSIZE = { max_size | UNLIMITED } ]
[ , FILEGROWTH = growth_increment ] ) [ ,...n ]
< filegroup > ::=
FILEGROUP filegroup_name < filespec > [ ,...n ]
42
Creación de Bases de Datos…
PRIMARY: Define el grupo de archivos que forman el
archivo principal de la base de datos. Solamente puede
existir un archivo principal por base de datos. La extensión
recomendada para estos archivos es .mdf
FILENAME: es el nombre y ruta del archivo del sistema
operativo
SIZE: Especifica el tamaño de los archivos (de datos o log)
puede estar en MB o en KB. El tamaño minimo es de
512KB.
MAXSIZE: Indica el tamaño máximo hasta el que puede
crecer el archivo. Si no se especifica el tamaño, el archivo
crece según la capacidad del disco
FILEGROWTH: Indica el incremento del crecimiento del
archivo. Un valor 0 indica no crecimiento. El valor puede ser
indicado en MB, KB o como un porcentaje
43
Creación de Bases de Datos…
Ejemplo
CREATE DATABASE Sales
ON
( NAME = Sales_dat,
FILENAME = 'c:\program files\microsoft sql server\mssql\data\saledat.mdf',
SIZE = 10,
MAXSIZE = 50,
FILEGROWTH = 5 )
LOG ON
( NAME = 'Sales_log',
FILENAME = 'c:\program files\microsoft sql server\mssql\data\salelog.ldf',
SIZE = 5MB,
MAXSIZE = 25MB,
FILEGROWTH = 5MB )
44
Creación de Bases de Datos…
Ejemplo de hacer un attach de una base existente
45
Opciones de una Base de Datos
46
Opciones de una base de datos
Opciones más frecuentes
Detallar algunas de las opciones.
(Pendientes)
47
Opciones de una base de datos
Sintaxis
EXEC sp_option ‘base_de_datos’
‘opcion’, TRUE | FALSE
48
Modificación de Bases de Datos
Expandir una Base de Datos
Ya no cabe más información en la base de
datos
Se llenó el log de transacciones y no se desea
borrarlo
49
Modificación de Bases de Datos
Sintaxis
ALTER DATABASE database
{ ADD FILE < filespec > [ ,...n ] [ TO FILEGROUP filegroup_name ]
| ADD LOG FILE < filespec > [ ,...n ]
| REMOVE FILE logical_file_name
| ADD FILEGROUP filegroup_name
| REMOVE FILEGROUP filegroup_name
| MODIFY FILE < filespec >
| MODIFY NAME = new_dbname
| MODIFY FILEGROUP filegroup_name {filegroup_property |
NAME = new_filegroup_name }
| SET < optionspec > [ ,...n ] [ WITH < termination > ]
| COLLATE < collation_name >
}
Archivo =
( NAME = logical_file_name
[ , NEWNAME = new_logical_name ]
[ , FILENAME = 'os_file_name' ]
[ , SIZE = size ]
[ , MAXSIZE = { max_size | UNLIMITED } ]
[ , FILEGROWTH = growth_increment ] )
50
Modificación de Bases de Datos
Ejemplo para agregar un archivo
ALTER DATABASE Test1
ADD FILE (
NAME = Test1dat2,
FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\t1dat2.ndf',
SIZE = 5MB, MAXSIZE = 100MB,
FILEGROWTH = 5MB )
51
Expandir una Bases de Datos
Ejemplo para incrementar el tamaño de un
archivo
ALTER DATABASE Test1
MODIFY FILE (NAME = test1dat3,
SIZE = 20MB)
52
Modificación de Base de Datos
Es posible aumentar el tamaño de los archivos de datos
o de log
El tamaño de la base de datos se puede controlar
mediante:
La configuración automática del crecimiento de los archivos
La configuración manual del crecimiento de los archivos
El agregado manual de archivos secundarios
Para expandir una base de datos se puede utilizar:
El SQL Enterprise Manager
La instrucción ALTER DATABASE
53
Reducir una Base de Datos
Reducción de toda la base de datos
Mediante el Enterprise Manager o DBCC SHRINKDATABASE
Reduce el tamaño de todos los archivos de la base de datos
○ DBCC SHRINKDATABASE (Ventas, 10) Porcentaje
54
Reducir una Base de Datos
Puntos importantes a considerar
La base de datos resultante no puede ser menor que Model
DBCC SHRINKDATABASE: no puede reducir un archivo un
tamaño menor al especificado al crear la base de datos
DBCC SHRINKFILE: si permite reducir el tamaño del archivo por
debajo del tamaño especificado cuando se creó
El tamaño al cual se reduce un archivo nunca podrá se menor al
tamaño ocupado por sus datos
DBCC SHRINKDATABASE y SHRINKFILE se ejecutan de
manera diferida
55
Eliminar una Base de Datos
Toda la información de la base de datos se pierde, se
borran los archivos físicos.
No se permite borrar las bases de datos del sistema:
master, model y tempdb
Para borrar una base de datos se puede utilizar:
El Enterprise Manager (una base de datos a la vez)
La instrucción DROP DATABASE (varias bases de datos a la vez)
○ Ejemplo: Drop database Ventas, Alumnos
56
Eliminar una Base de Datos
Restricciones al borra una base de datos:
Cuando está en proceso de restauración
Cuando están usuarios conectados a ella
Cuando está siendo publicada alguna de sus tablas en un
proceso de replicación
SQL Server permite eliminar la base de datos de msdb
pero esto no se recomienda si se piensa utilizar
Los servicios de replicación
Los servicios de transformación de datos (DTS)
El agente de SQL Server
El asistente de WEB
57
Tipos de Datos
Tipos de datos del sistema
Binarios
Caracteres
Caracteres Unicode
Fecha y Hora
Numéricos
58
Tipos de Datos
Binarios binary[(n)], varbinary[(n)]
Caracteres char[(n)], varchar[(n)]
Carac. Unicode nchar[(n)], nvarchar[(n)]
Fecha y Hora datetime, smalldatetime
Numericos:
Numerico Exacto decimal[p[,s]], numeric[p[,s]]
Numerico Aprox. real, float[(n)]
Entero int, smallint, tinyint
59
Tipos de Datos
Numericos (Continuacion):
Especial bit, timestamp, cursor,
sysname
Identif. Global uniqueidentifier
Texto e imagen text, image
Texto Unicode ntext
60
Tipos de Datos
Tipos de datos definidos por el usuario
El usuario los construye
Están basados en los datos que provee SQL
Server
Sintaxis para agregar:
EXEC sp_addtype nombre_tipoDato,
‘tipoDato_SQL’
Sintaxis para eliminar:
EXEC sp_droptype nombre_tipoDato
Ejemplo:
EXEC sp_addtype Matricula, ‘char(6)’
EXEC sp_droptype Matricula
61
Creación de Tablas
Tabla.- Unidad de almacenamiento de
información. Agrupa datos comunes a un
tema en especial dentro de la base de
datos. Contiene Atributos (campos) y
Registros (filas). Ej. Clientes, artículos, etc.
Atributos
62
Creación de Tablas
Al crear una tabla debemos de conocer al
menos los siguiente:
La estructura que tendrá la tabla (atributos)
Tipos de datos que aplicarán para cada atributo
63
Creación de Tablas
Se pueden crear 2 billones de tablas por
base de datos
Una tabla puede contener:
Hasta 1024 columnas ó
8092 bytes por registro (sumando la longitud de
los tipos de datos de cada atributo)
El nombre de una tabla debe de ser único
por base de datos
Los nombres de las columnas deben ser
únicos por tabla
64
Creación de Tablas
Cada columna debe de tener su
correspondiente tipo de dato (definido por
el usuario o propio de SQL)
Una columna es NOT NULL por default a
menos que se tenga la opción “Columns
NULL by default” encendida
65
Creación de Tablas
Sintaxis Parcial
CREATE TABLE
[ database_name.[ owner ] . | owner. ] table_name
( { < column_definition >
| column_name AS computed_column_expression
| < table_constraint > ::= [ CONSTRAINT constraint_name ] }
| [ { PRIMARY KEY | UNIQUE } [ ,...n ]
)
[ ON { filegroup | DEFAULT } ]
[ TEXTIMAGE_ON { filegroup | DEFAULT } ]
< column_definition > ::= { column_name data_type }
[ COLLATE < collation_name > ]
[ [ DEFAULT constant_expression ]
| [ IDENTITY [ ( seed , increment ) [ NOT FOR REPLICATION ] ]
]
]
[ ROWGUIDCOL]
[ < column_constraint > ] [ ...n ]
66
Modificación de Tablas
Agregar columnas
ALTER TABLE … ADD
Si la columna es NOT NULL, debe de tener asociado un
DEFAULT
Borrar Columnas
ALTER TABLE … DROP COLUMN
Antes de borrar la columna, se deben eliminar los indices
y/o constraints asociados
Cambiar el tipo de dato o nulabilidad de una
columna
ALTER TABLE … ALTER COLUMN …
Si la columna se cambia a NOT NULL, debe tener
asociado un DEFAULT
67
Modificación de Tablas
Sintaxis Parcial
ALTER TABLE nombre_tabla
{| [ALTER COLUMN nombre_columna]
|{ ADD
{ nombre_columna tipo_dato
{ [NULL|NOT NULL]
| DROP COLUMN nombre_columna } [,…n]
Ejemplo
ALTER TABLE Alumni
ADD correoelectronico varchar(30) NULL
68
Modificación de Tablas
Cambio de nombre de un objeto de la base
de datos:
EXEC sp_rename
Nombre_anterior, Nombre_nuevo
[, COLUMN | INDEX | OBJECT | USERDATATYPE]
OBJECT
Cualquier objeto que se almacene en sysobjects:
tablas, stored procedures, vistas, triggers,
constraints, rules.
69
Repaso
SQL Enterprise Manager
Cómo se almacenan los datos
Creación de Bases de Datos
Opciones de una Base de Datos
Modificación de Bases de Datos
Tipos de Datos
Creación de Tablas
70
71
Temario
Clausula SELECT
Consulta de Varias tablas
Tópicos avanzados de Consulta de
datos
72
Clausula SELECT
Introducción al SELECT
Selección de columnas
Funciones matemáticas
Funciones de caracteres
Funciones de fechas
Funciones del sistema
Selección de registros
73
Clausula SELECT
Permite la extracción (consulta) de
información de una o varias tablas de la
base de datos
SELECT (columnas a extraer)
FROM (Tablas donde están los datos)
WHERE (Condiciones de la consulta)
74
Clausula SELECT
En un SELECT se especifican los campos
que se desean ver en el resultado.
Si se escribe DISTINCT previo a los
campos de la consulta es para indicar que
no queremos que se incluyan valores de
registros duplicados
“Todas los nombres de las personas”
Select Nombre
From Personas “Todas los nombre de las personas”
(Sin duplicados)
75
Clausula SELECT
En la cláusula FROM se especifican la o
las tablas de donde se obtendrán los
datos. Las tablas pueden ser identificadas
por Alias
Select *
From Materias M
Where M.MateriaId = 2293
Select *
From Materias as M
Where M.MateriaId = 2293
76
Clausula SELECT
El orden de las columnas en el SELECT es en el
orden que apareceran en la salida. No
corresponde con el orden en la tabla
Se pueden escribir encabezados para asignar o
cambiar el nombre de una columna en el
resultado
SELECT NumMateria = MateriaID,
‘Nombre Materia’ = NomMateria
NomMaestro as Maestro
FROM Materias
Se pueden poner literales dentro del SELECT
como valores prestablecidos
SELECT ‘Cve_escuela’ = ‘RODHE’, MatriculaID, AlumnoNom
FROM Alumnos
77
Clausula SELECT
Al seleccionar columnas numéricas, es
pósible realizar operaciones de:
Suma operador +
Resta operador -
Multiplicación operador *
División operador /
Módulo operador % (enteros)
78
Funciones Matemáticas
Las funciones matemáticas realizan
operaciones con datos numéricos
Funciones comúnes:
ABS(número) Absoluto
EXP(float) Exponencial
LOG(float) Logaritmo Natural
PI() Valor de PI
ROUND(número, cantidad) Redondeo
SIGN(número) (-), (+), 0
SQRT(float) Raíz Cuadrada
SQUARE(float) El cuadrado de
POWER(número, elevado a) Número elevado a
79
Funciones Matemáticas
FLOOR(número) Entero mayor <= numero
CEILING(número) Entero menor <= numero
SIN(float) Seno
COS(float) Coseno
TAN(float) Tangente
COT(float) Cotangente
DEGREES(número) Conversión de Radianes a °
RADIANS(número) Conversion de ° a Radianes
RAND(semilla) Random(float) entre 0 y 1
LOG10(float) Logaritmo base 10
80
Funciones de Caracteres
•Estas funciones realizan operaciones sobre datos binarios y
caracteres de strings o expresiones
•Funciones más comunes:
ASCII(char) Concatenación
CHAR(entero) Valor Asccii del más izquierdo
CHARINDEX(‘p’, string) Posición de inicio de ‘p’ en el string
LOWER(string) Convierte a minúsculas
UPPER(string) Convierte a mayúsculas
LTRIM(string) Quita espacios de la izquierda
RTRIM(string) Quita espacios de la derecha
REPLICATE(string, n) Repite ‘n’ veces el string
81
Funciones de Caracteres
SPACE(n) Repíte ‘n’ veces un espacio
SUBSTRING(string, ini, long) Regresa la parte del string
desde la posición de ‘inicio’ con
una longitud ‘long’
REVERSE(string) Regresa el string al revés
RIGHT(string, n) Regresa los últimos ‘n’
caracteres
82
Funciones de Fechas
Las funciones de Fechas, manejan los tipos de
datos de fecha y sus componentes
Funciones
○ DATEADD(datepart, número, fecha)
○ DATEDIFF(datepart, fecha1, fecha2)
○ DATENAME(datepart, fecha)
○ DATEPART(datepart, fecha)
○ GETDATE()
EJEMPLO
SELECT ‘Dif. En Meses’ = DATEDIFF(mm, Fecha1, Fecha2)
‘Hoy m[as 15 Días’ = DATEADD(dd, 15, GETDATE())
‘El mes actual es’ = DATENAME(mm, GETDATE())
‘El año actual es’ = DATEPART(yy, GETDATE())
FROM Fechas
83
Funciones de Fechas
DateParts
84
Funciones de Fechas
Mediante la clausulaCONVERT, podemos formatear los
tipos de datos fecha a un estilo determinado
Ejemplo
SELECT ‘Hoy es:’ = CONVERT(Char(8), GETDATE(), 1)
Algunos de los estilos que provee SQL Server son:
85
Funciones del Sistema
Estas funciones nos regresan información especial de la
Base de Datos
Obtención de valores de la conexión
APP_NAME( ), HOST_NAME( ), HOST_ID( ),
USER, USER_NAME( ), USER_ID( )
SUSER_ID( ), SUSER_NAME( )
DB_NAME( ), DB_ID( )
Validaciones
ISDATE(string), ISNUMERIC(string)
86
Funciones del Sistema
Objetos de la base de datos
COL_NAME ( tabla, id_de_la_columna )
COL_LENGTH ( tabla, columna )
INDEX_COL ( tabla, id_indice, id_llave )
OBJECT_ID ( objeto )
OBJECT_NAME ( id_del_objeto )
STATS_NAME ( tabla.indice ) = fecha de la última actualización de
las estadísticas de un índice
Propiedad IDENTITY
IDENT_INCR ( tabla )
IDENT_SEED ( tabla )
87
Funciones del Sistema
De Caracteres
DATALENGTH ( string )
Condicionales
ISNULL ( expresion, valor )
NULLIF ( expresion1, expresion2 )
COALESCE ( expresion1, expresion2, expresion3, etc.)
88
Selección de Registros
En la cláusula WHERE definimos los criterios de
busqueda de una consulta y esta puede incluir:
Comparaciones =, >, <, <=, >=, <>, !=, !>, !<
Rangos BETWEEN, NOT BETWEEN
Listas IN, NOT IN
Datos Null IS NULL, IS NOT NULL
Porciones de caracteres LIKE
Lógicos AND, OR
Negación NOT
Para hacer más rápida la ejecución de las consultas, se
recomienda usar lo menos posible las negaciones.
89
Selección de Registros
Comparaciones
“Alumnos que se dieron de alta el día de hoy”
Select * from Alumno
Where AltaFecha = CONVERT(char(8), GETDATE(),1)
Rangos
“Alumnos con matricula entre el 100 y 200”
Select * from Alumno
Where MatriculaID BETWEEN 100 and 200
90
Selección de Registros
Listas
“Alumnos que se dieron de alta el 9 o 10 de Ene.
2003”
Select * from Alumno
Where AltaFecha IN ( ’01/08/03’, ’01/08/03 )
Datos NULL
“Alumnos sin fecha de alta”
Select * from Alumno
Where AltaFecha IS NULL
91
Selección de Registros
Porciones de caracteres. Utilizan comodines
(wildcards) para hacer comparaciones
% Cualquier string de cero o más caracteres
_ Cualquier caracter (una posicion)
[] Cualquier carcater dentro del rango
descrito
[^] Cualquier caracter fuera del rango
Select MatriculaId, ApellidoPaterno, NomAlumno FROM Alumnos Where
NomAlumno LIKE ‘Mar%’ Las 3 primeras letras del nombre sean “Mar”
NomAlumno LIKE ‘_arla’ El nomre sea de 5 caracteres y termine en
“arla”
NomAlumno LIKE ‘[A-C]%’ La primer letra del nombre sea A, B o C
NomAlumno LIKE ‘[^R]%’ El nombre no empiece con “R”
92
Selección de Registros
Lógicos
“Alumnos con matricula > a 200, que entraron un
día especifico y que sean de primer semestre
Select * from Alumno
Where MatriculaId > 200 AND AltaFecha = ’08/10/2002’ AND
Semestre = 1
Negación
“Alumnos que no estén en 1 o 3 semestre[
Select * from Alumno
Where Semestre NOT IN (1,3)
93
Consultas a varias tablas
Introducción el uso de JOINS
Tipos de JOINS
JOINS de más de dos tablas
JOINS de una tabla consigo misma
Union de varios conjuntos de resultados
Creación de tablas a partir de resultados
94
Introducción al uso de Joins
Es posible utilizar cualquiera de las sintaxis
que brinda SQL
NO estándar
○ Las tablas del JOIN se especifican en el FROM,
separadas por comas y en el WHERE se indican las
condiciones del JOIN.
Estandar ANSI SQL-92
○ Las tablas del JOIN se especifican en el FROM,
indicando el tipo de JOIN mediante ciertas claves, y en
el ON se indican las condiciones del JOIN
Select * from tabla CROSS JOIN tabla | tabla [Clave_JOIN] JOIN tabla
ON Condiciones
(Claves: INNER, LEFT (OUTER), RIGHT (OUTER), FULL OUTER)
95
Tipos de Joins
Joins Internos ( inner joins )
Operación típica de join. Utiliza operadores
como el =, <>, etc. para comparar columnas
comunes a ambas tablas
SELECT a.MatriculaID, AlumnoNom, MateriaCve
FROM Alumno a, AlumnoMateria m
Where a.MatriculaId = m.MatriculaId
96
Tipos de Joins
Joins Internos ( inner joins )
Operación típica de join. Utiliza operadores
como el =, <>, etc. para comparar columnas
comunes a ambas tablas
SELECT a.MatriculaID, a.AlumnoNom, m.MateriaCve
FROM Alumno a, AlumnoMateria m
Where a.MatriculaId = m.MatriculaId
97
Tipos de Joins
Joins cruzados ( cross joins )
Producto cartesiano. Regresa todas las
combinaciones de los registros de la tabla
izquierda con los registros de la tabla derecha
98
Tipos de Joins
Joins Externos ( outer joins )
Cuando un regsitro en la tabla X no tiene un registro
correspondiente en la tabla Y, el resultado de ese
renglón tendrá valores NULOS para los campos que
provengan de la tabla Y
Left Outer Join: *= incluye todos los registros de la
tabla izquierda. Donde: X=izquierda y Y=derecha
Right Outer Join: =* incluye todos los registros de la
tabla derecha. Donde: X=derecha y Y=izquierda
Full Outer Join: incluye todos los registros de ambas
tablas, izquierda y derecha, colocando nulos en
donde no exista información
99
Tipos de Joins
Ejemplo de Left Outer Join
“Ver todos los alumnos (con o sin materias
inscritas), y para los alumnos inscritos la clave
las materias que inscribieron”
100
Joins de dos o más tablas
Cualquier tabla a la que se haga referencia en una
operación de Join, se puede combinar con otra
tabla mediante un campo común.
“Seleccionar la matrícula, nombre del alumno, y nombre
de las materias que cursa un alumno”
SELECT a.MatriculaID, a.AlumnoNom, m.MateriaNom
FROM Alumno a, AlumnoMateria am, Materia m
WHERE a.MatriculaId = am.MatriculaId AND
am.MateriaCve = m.MateriaCve
101
Joins de una tabla consigo misma
SELECT MateriaCve, SemestreNo,
CostoMto
FROM Materia a, Materia b
WHERE a.MateriaCve =
b.MateriaCve AND
a.CostoMto <
Materia a b.CostoMto Materia b
MateriCve SemestreNo CostoMto MateriCve SemestreNo CostoMto
CL0402 1 500 CL0402 1 500
103
Creación de tablas a partir de resultados
104
Laboratorio
105
Topicos Avanzados de
Consulta de Datos
Uso de SubQueries
Funciones agregadas
ORDER BY
GROUP BY
Presentación de los ‘n’ primeros valores
106
Uso de Subqueries
Para dividir una consulta compleja en varios
pasos lógicos
Utiles cuando una consulta depende de los
resultados de otra consulta
Se pueden tener subqueries anidados o
correlativos
Consideraciones:
Simpe van entre parentesis
No hay límite en el nivel de anidamiento
Si se utilizan comparaciones de un solo valor, el resultado
del subquery debe regresar un solo renglón
No se pueden utilizar en columnas con tipos de datos text
o image
En algunos casos es posible sustituir los subqueries
usando joins (esto resulta más rápido que los subqueries)
107
Subqueries Anidados
Regresando un valor único
El subquery sustituye una expresión en la lista del select
o en una cláusula WHERE usando un operador de
comparación
“Todos los alumnos que se dieron de alta el último día”
Select MatriculaID, AlumnoNom, AltaFecha
From Alumno
Where AltaFecha = (Select Max(AltaFecha) From Alumno)
Regresando una lista de valores
El subquery sustituye a una expresión en una cláusula
WHERE que lleva la palabra IN
“Todos los alumnos que lleven al menos una materia”
Select MatriculaID, AlumnoNom
From Alumno
Where MatriuclaId IN (Select MatriulaId From AlumnoMateria)
108
Exists y Not Exists
Regresan TRUE si existen datos en una lista de
valores y FALSE si no existen
Si se cumple la condición de la consulta interna
entonces se regresan los datos de la consulta
externa
Su utilización puede ser similar a la del IN / NOT
IN
109
Funciones Agregadas
Función Descripción
AVG([ALL|DISTINCT] expresion) Valor Promedio
COUNT([ALL|DISTINCT] expresion) Número de valores
110
Funciones Agregadas
Se pueden utilizar en la instrucción select o en
combinación con el GROUP BY
Todas las funciones de agregados excepto el
COUNT(*) devuelven NULL si nungún renglón
cumple con la cláusula WHERE
El COUNT(*) regresa un valor de cero si ningún
renglón cumple con la cláusula WHERE
Es recomendable que las columnas utilizadas con
funciones agregadas estén indexadas
“Número total de Alumnos” “Costo total de las materias del primer semestre”
SELECT COUNT(*) SELECT SUM(CostoMto)
FROM Alumno FROM Materia
WHERE SemestreNo = 1
111
ORDER BY
Utilizado para indicar el ordenamiento de los resultados
La columna (o columnas) sobre la cual se va a hacer un
GROUP BY, se puede especificar por su nombre, alias o
posición que ocupa en la lista del SELECT
La posición de las columnas en el ORDER BY define el
orden de los resultados
Si se utiliza el DISTINCT o UNION, todas las columnas que
aparecen en el ORDER BY deben estar en la lista del
SELECT
Con la clave DESC, los datos se ordenan
descendentemente, si no se especifica SQL los ordena de
manera Ascendente (ASC)
“Todos los alumnos ordenados por carrera, matrícula, y fecha de alta
(descendente)”
113
GROUP BY y HAVING
Consideracione al utilizar HAVING
El HAVING establece condiciones para el GROUP BY de
manera similar a la forma en que el WHERE establece
condiciones para el SELECT
El uso del HAVING sin su respectivo GROUP BY no tiene
sentido (se comportaría como un WHERE)
Se pueden referenciar cualquiera de las columnas que
aparezcan en el SELECT
Es posible tener hasta 128 condiciones (combinadas con
operadores lógicos AND, OR, NOT)
Si se utiliza HAVING con GROUP BY ALL, la cláusula
HAVING pasa por alto la palabra ALL y solo devuelve los
grupos que cumplen con el HAVING
114
GROUP BY y HAVING
“Cuantos Alumnos existen por Carrera
Select CarreraID, Count(*)
From Alumno
Group By CarreraID
116
Presentación de los primeros N valores
Primeros 5 alumnos Inscritos 198800 ‘Aug 9 2002’
Select Top 5 MatriculaID, AltaFecha 198801 ‘Aug 9 2002’
From Alumno 198802 ‘Aug 9 2002’
Order By AltaFecha 198803 ‘Aug 9 2002’
198804 ‘Aug 10 2002’
117
Laboratorio Avanzado
de Consultas
118
119
Temario
Inserción de Registros
Actualización de Registros
Eliminación de Registros
120
Inserción de Registros
Inserción Simple.- Se inserta un registro
solamente por instrucción ejecutada
Inserción Masiva.- Se inserta más de un
renglón por instrucción ejecutada
121
Inserción Simple
Es necesario ejecutar un comando o
instrucción por registro que se desea
insetar en la tabla.
Sólo es posible insertar en una tabla a la
vez
Nombres de las columnas:
Si no especifican, los valores enviados deben
estar en el orden de la definición de la tabla y se
deben incluir todas las columnas
Si se especifican, los valores enviados pueden
estar en desorden y pueden no incluirse todas
las columnas (en caso de que así lo permita la
definición de la tabla)
122
Inserción Simple
Si no se especifica el nombre de las
columnas
INSERT [INTO] tabla
VALUES ( col1, col2, … coln)
Insert Materia
Values(‘CB-001’, ‘Computacion’, 1, 150)
123
Inserción Masiva
Hacer uso del comando SELECT para seleccionar
datos de una tabla e insertarlos en otra
Nombres de las columnas: Aplican los mismos
criterios que cuando es una inserción simple
Los tipos de datos deben ser compatibles con las
columnas arrojadas por el SELECT
124
Columnas con Default
Si todas las columnas tienen valores DEFAULT es
posible escribir la cláusula DEFAULT VALUES en
lugar de los valores de las columnas
INSERT [INTO] nombre_tabla
DEFAULT VALUES
Si sólo algunas columnas tienen valores
DEFAULT, solamente se especifica la palabra
DEFAULT en lugar del valor de la columna
INSERT [INTO] nombre_tabla (col1, col2, … coln)
VALUES (valor1, DEFAULT, … valorN)
125
Columnas no listadas
Si el nombre de la columna no se especifica en el
comando INSERT debe:
Permitir NULL la columna
Ser una columna con tipo de dato TIMESTAMP
Ser una columna con propiedad IDENTITY
Tener asociado un DEFAULT
Importante
Las columnas con propiedad IDENTITY no se
deberán listar en el INSERT (tanto el nombre de
la columna como su valor)
126
Columnas EXECUTE
Es posible ejecuitar stored procedures que
regresen un resultado con SELECT e insertarlo en
una tabla
El procedimiento a ejecutar puede ser
System Stored Procedure
Stored Procedure realizado por el usuario
Extended Stored Procedure
Stored Procedure Remoto
Comando DBCC
127
Insert EXECUTE
Sintaxis
INSERT INTO {tabla|vista} [(columns)]
{DEFAULT VALUES | valores | select | EXEC}
128
Actualización de Registros
la clausulaUPDATE actrualiza los atributos
y registros que se especifican
Solamente se puede hacer UPDATE sobre
una tabla a la vez
Pero es posible realizar un UPDATE sobre
una tabla consultando los valores de otra
Si al realizar la actualización SQL Server
detecta que no se cumple alguna de las
restricciones de la tabla, el UPDATE no se
realiza
129
Actualización de Registros
Actualización Simple
UPDATE tabla_a_actualizar
SET columna1 = {DEFAULT | NULL | VALOR},
columna2 = {DEFAULT | NULL | VALOR}
WHERE Condicion
130
Actualización de Registros
En la cláusula FROM se definen las tablas de
las cuales se pueden realizar comparaciones
para realizar una operación de UPDATE
UPDATE Tabla
SET Col1 = (Select Sum(col2) from Tabla2)
Where Col1 = xxxx
131
Actualización de Registros
Un UPDATE nunca actualiza un renglón más de
una vez, esto se diseño para minimizar la
cantidad de actualzaciones que se registran en
el LOG de transacciones
132
Eliminación de Registros
Es posible eliminar uno o más renglones
de una tabla
Solamente se pueden eliminar renglones
de una tabla a la vez
El renglón se elimina físicamente de la
tabla
Se puede especificar la cláusula WHERE
para especificar criterios de eliminación. Si
no se especifica WHERE se elimina toda la
tabla
133
Eliminación de Registros
Elimina toda la tabla
DELETE [FROM] tabla_a_borrar
Actualización de Registros
Eliminación de Regsitros
135
136
Temario
Integridad de Datos
Métodos de integridad de datos
IDENTITY
DEFAULTS
Reglas
CONSTRAINTS
Comparación de los métodos
137
Integridad de datos
Tipos de Integridad
De Entidad
○ Todos los renglones tienen un identificador único (PK)
De Dominio
○ Conjunto de valores que puede tomar una columna
(tipo de dato, formato, valores nulos o no)
Referencial
○ Asegura que los valores que tome una llave foránea de
una tabla X existan en una llave primaria de una tabla
Y
Definida por el usuario
○ Reglas especificas del negocio
138
Métodos de Integridad de datos
Implementación de Integridad Declarativa
Se declara como parte de la definición de la base de
datos
Es asegurada de manera automática por SQL
Server
Usando constraints, defaults y rules
Implementación de Integridad Procedimental
Los criterios se definen en un script
Es asegurada mediante la secuencia de comandos
del script
Usando triggers y stored procedures
139
IDENTITY
Esta propiedad ayuda en la implementación de la
integridad de la entidad, con la generación
automática de números secuenciales
Sólo una columna IDENTITY por tabla
No permite valores NULL
Puede ser usada con los siguientes tipos de datos
Tinyint, smallint, int
Numeric, decimal (especificando 0 en la escala)
La variable global @@IDENTITY regresa el último
valor identity insertado
140
IDENTITY
Se utiliza en el CREATE TABLE, ALTER TABLE
Si se realiza un SELECT INTO la columna de la
nueva tabla hereda esta propiedad
Especificar la semilla (a partir de que valor va a
generar los números) y el incremento (para
generar el siguiente valor)
Create Table Alumno
(Alumno int NOT NULL IDENTITY
Nombre char(20) NOT NULL)
Alter Table Maestro
Add
MaestroId tinyint NOT NULL IDENTITY(5,10)
141
IDENTITY
Con IDENTITYCOL no es necesario recordar el
nombre de la columna IDENTITY
Si se hace un DELETE de todos los renglones el
valor de IDENTITY continua en el que se quedó
Se se hace un TRUNCATE TABLE el valor vuelve
a iniciar en la semilla
Update Alumno
Set Nombre = ‘Carlos Perales’
Select IDENTITYCOL, Nombre Where IDENTITYCOL=10
From Alumno
Delete Alumno
Where IDENTITYCOL between 10 and 20
142
IDENTITY
El valor de las columnas IDENTITY no se
puede actualizar de manera directa
Se puede explicitamente dar un valor a
una columna IDENTITY realizando:
SET IDENTITY_INSERT tabla ON
Para checar y/o corregir el valor actual de
una columna IDENTITY:
DBCC CHECKIDENT (table)
143
DEFAULTS
Util para implementar integridad de dominio
Definen el valor que una columna tomará si no se
especifica la columna en la clausulaINSERT
144
Reglas
Util para implementar la integridad de dominio
Definen el rango de valores posibles para una
columna
Es verificadocada vez que se inserta o actualiza una
columna
Puede ser reutilizada para múltiples columnas
Create Rule Alumno_Clave
As @Clave = 10 and @Clave = 20
Ejemplo: Ejemplo:
146
Borrar Reglas y Defaults
Es necesario primero desligar los defraults o reglas
antes de borrarlos
Una vez desligados es posible borrarlos
Desligar:
EXEC sp_unbindefault Nombre_Default, Nombre_Objeto
EXEC sp_unbindrule Nombre_Default, Nombre_Objeto
Borrar
DROP DEFAULT Nombre_Default, Nombre_Default, etc
DROP RULE Nombre_Regla, Nombre_Regla, etc
147
Constraints
Ayudan a conservar la integridad de los
datos
Dominio ( DEFAULT, CHECK)
De Entidad ( PRIMARY KEY, UNIQUE )
Referencial ( FOREIGN KEY, CHECK )
Limitaciones:
Mensajes de Error
No pueden ser reutilizados entre múltiples tablas
148
Constraints
Se definen durante la creación de la tabla o
mediante el comando ALTER TABLE
Con ALTER TABLE pueden agregarse o
eliminarse
Se pueden aplicar a una columna (restricción de
columna) o a varias columnas (restricción de
tabla)
Se almacenan en syscomments, sysreferences y
sysconstraints
Al borrar la tabla, se eliminan todos sus
constraints
149
Constraints
Si no se cumple una restricción la
clausulatermina, pero no termina la
transacción
Los triggers son ejecutados después de
que los constraints son evaluados
Para obtener información de contraints se
pueden usar los Store Proceduresdel
sistema, sp_helpconstraint, sp_help o
mediante las vistas del esquema de
información como check_constraints,
referential_constraints, y table_constraints
150
Constraints
PRIMARY KEY
Conjunto de columnas que identifican de forma
única a cada renglón de una tabla
UNIQUE
Conjunto de columnas que no pueden repetir su
valor entre más de un renglón de la misma tabla
FOREIGN KEY
El valor de una columna de una tabla debe
existir (como clave primaria) en otra tabla
151
Constraints
DEFAULT
Si el usuario no incluye la columna en la
clausulaINSERT, la columna toma el valor dado
en el DEFAULT
CHECK
Especifica el dominio de valores que pueden
ser insertados en una columna
152
Constraint PRIMARY KEY
Solo puede haber una definición de
Primary Key por tabla
No se permiten valores nulos en los datos
(definir las columnas como not null
Se pueden definir en una o varias
columnas
La información de las columnas debe ser
única
153
Constraint PRIMARY KEY
Crea un índice clustered o nonclustered (si
no se especifica el tipo lo crea como
clustered)
El índice creado para esta restricción no
puede eliminarse con el DROP INDEX (se
elimina al quitar la restricción)
Si se desea replicar la información es
necesario que exista el Primary Key
154
Constraint PRIMARY KEY
Sintaxis Parcial
[ CONSTRAINT nombre_constraint ]
PRIMARY KEY [CLUSTERED |
NONCLUSTERED]
{ (columna [,…n] ) }
Ejemplo
Alter Table Alumno
Add
Constraint pkAlumno
PRIMARY KEY CLUSTERED (AlumnoID)
155
Constraint UNIQUE
Semejante a PRIMARY KEY, con la
diferencia de que si permite valores nulos
Se puede aplicar una restricción UNIQUE
a las columnas que deban tener valores
exclusivos y que no sean la llave principal
de la tabla
No puede existir más de un renglón con el
valor de NULL (en caso de que las
columnas permitan nulos)
Se puede definir en una o varias columnas
156
Constraint UNIQUE
Puede existir más de una declaración
UNIQUE por tabla
Crea de manera automática un índice
único (clustered o nonclustered)
Se se crea en una tabla con datos, no
pueden existir valores duplicados en más
de un renglón
157
Constraint FOREIGN KEY
Sintaxis Parcial
[ CONSTRAINT nombre_constraint ]
UNIQUE [CLUSTERED | NONCLUSTERED]
{ (columna [,…n] ) }
Ejemplo
Alter Table Empleado
Add
Constraint uEmpleado_Licencia
UNIQUE NONCLUSTERED
(LicenciaConductor)
158
Constraint FOREIGN KEY
Valida la existencia de una clave primaria
para la clave foránea que se está
insertando
El número de columnas, el orden y tipos de
datos especificados deben ser iguales en
ambas tablas
Debe referenciar a un constraint UNIQUE
o PRIMARY KEY de otra tabla
No crea índices automáticamente
159
Constraint FOREIGN KEY
Los usuarios deben tener permiso de
SELECT o REFERENCES sobre las tablas
referenciadas
Si se especifica WITH NOCHECK no se
verifican los valores existentes en la tabla
Se verifican antes que los triggers
160
Constraint UNIQUE
Sintaxis Parcial
[ CONSTRAINT nombre_constraint ]
FOREIGN KEY { (columna [,…n] ) }
REFERENCES tabla_referencia { (columna
[,…n] ) }
Ejemplo despues de creada la tabla
Alter Table Estado WITH NO CHECK
Add
Constraint fkEstadoPais
FOREIGN KEY (PaisId)
REFERENCES Pais (PaisId)
161
Constraint DEFAULT
Equivalente al CREATE DEFAULT
No es necesario realizar un bind a las
columnas
Sólo se puede crear un default por
columna
No puede usarse en columnas con la
propiedad IDENTITY, o con el tipo de dato
timespamp
162
Constraint DEFAULT
Sólo se aplica a las instrucciones INSERT
Permite incluir en el valor del default
algunos valores proporcionados por el
sistema, como:
USER
CURRENT_USER
SESSION_USER
SYSTEM_USER
CURRENT_TIMESTAMP
163
Constraint DEFAULT
Sintaxis Parcial
[ CONSTRAINT nombre_constraint ]
DEFAULT expresionConstante
[FOR columna]
Ejemplo despues de creada la tabla
Alter Table Alumno
Add
Constraint dfNacionalidad
DEFAULT ‘Mexicano’
FOR NacionalidadID
164
Constraint CHECK
Equivalente al CREATE RULE
No puede contener subqueries
No es necesario realizar un bind a las
columnas
Si se especifica WITH NOCHECK no se
verifican los valores existentes
165
Constraint CHECK
Es utilizada con las intrucciones de
INSERT y UPDATE
Puede hacer referencia a otras columnas
de la misma tabla (a diferencia de la reglas
creadas con el CREATE RULE)
No pueden usarse en columnas con la
propiedad IDENTITY,ocon los tipos de
datos timespamp o uniqueidentifier
166
Constraint CHECK
Sintaxis Parcial
[ CONSTRAINT nombre_constraint ]
CHECK ( expresion_logica )
167
Borrando un CONSTRAINT
Especificar el nombre del constraint para
eliminarlo de una tabla
Se puede borrar más de un constraint a la
vez
Sintaxis Parcial
Alter Table Nombre_tabla
Drop Constraint nombre_constraint
Ejemplo
Alter Table Alumno
Drop Constraint chktelefono, dfnacionalidad
168
Constraints VS Otras Implementaciones
169
Comparación de Métodos
Performance
CONSTRAINTS,
Tipos de Datos Triggers,
Reglas,
(Sistema, definidos Stored
Defaults
por el usuario), Procedures
Null / Not Null
Funcionalidad
170
Repaso
Integridad de datos
Métodos de integridad de datos
IDENTITY
DEFAULTS
Reglas
CONSTRAINTS
Comparación de los métodos
171
172
Temario
Introducción a las Vistas
Ventajas de las Vistas
Creación de Vistas
Restricciones del Uso de Vistas
Modificación y Elimnación de Vistas
Obtención de Información de Vistas
Modificación de Datos mediante Vistas
173
Introducción a las Vistas
Una vista es una forma de ver los datos de
una o más tablas
Se guardan como objetos de la base de
datos
Algunos ejemplos de vistas incluyen:
Un subconjunto de renglones y columnas de
una tabla
Un join entre dos o más tablas
Una unión de dos o más tablas
Un subconjunto de otra vista
Una combinación de vistas y tablas
174
Ventajas de las Vistas
Se centra la atención solo sobre aquellos
datos que le interesan al usuario
Simplifican el esquema de permisos sobre
los objetos
Se limita el acceso a datos específicos,
ocultando el resto
Ocultan la complejidad de las consultas
sobre los datos
Los Usuarios pueden modificar los datos a
través de las vistas
175
Creación de Vistas
Para poder crear una vista, es necesario tener
alguna de las siguientes funciones: sysadmin,
db_owner, db_ddladmin, o tener permiso de
CREATE VIEW
Es necesario tenerl el permiso de SELECT sobre
todas las tablas o vistas a las que haga referencia
Sintaxis
CREATE VIEW propietario.nombreVista [(columna[, n…])]
[WITH ENCRYPTION]
AS
Instruccion SELECT
[WITH CHECK OPTION]
176
Creación de Vistas
Al crear una vista, se debe especificar el nopmbre
de las columnas cuando:
La columna se deriva de alguna expresión aritmética,
función integrada o de una constante
Existen columnas con el mismo nombre en las tablas que
están involucradas en el select
Antes de crear la vista, es recomendable verificar
que el SELECT regrese los resultados esperados
WITH ENCRYPTION: encripta la definición de la
vista
WITH CHECK OPTION: verifica que los cambios
que se hacen a los datos de la vista cumplan con
la condición del WHERE definido al crear la vista
177
Ejemplos de Vistas
Vista informativa no actualizable
CREATE VIEW VistaInformativa
AS
Select GETDATE() as FechaActual,
Vista con JOINS entre tablas
Current_User as UsuarioActual
CREATE VIEW VistaAlumnoMateria
AS
Select a.MatriculiaId, m.MateriaCve
Vista con UNION de dos tablas FROM Alumno a, AlumnoMateria m
CREATE VIEW VistaAlumnos WHERE a.MatriculaId = m.MatriculaId
AS
Select * from AlumnoCampusMty
UNION
Select * from AlumnoCampusMex
UNION
Select * from AlumnoCampusGdl
178
Restricciones del Uso de Vistas
La instrucción SELECT de la vista no
puede incluir las cláusulas ORDER BY,
COMPUTE, COMPUTE BY
No es posible usar el INTO para crear una
tabla en una vista
No se pueden referenciar tablas
temporales
Se pueden incluir hasta 1,024 columnas
179
Modificación y Eliminación de Vistas
180
Ejemplos de Modificación y Borrado
Vistas
Modificación
Alter View VistaAlumno
As
Select MatriculaId, PaternoApellido,
Nacionalidad
From Alumno
Borrado
DROP VIEW VistaAlumno
181
Obtención de Información de Vistas
Utilizar el SQL Enterprise Manager o alguno de los
siguientes objetos:
182
Obtención de Información de Vistas
Si al crear la vista se utilizó la opción WITH
ENCRYPTION la información sobre la definición
de la vista no estará disponible
Para descifrar el texto de una vista encriptada
deberá borrarla y volverla a crear, o usar el ALTER
VIEW utilizando la sintaxis original
Para obtener información de las tablas o vistas de
las que depende una vista, y de los objetos que
depeneden de una vista determinada, se puede
utilizar sql SQL Enterprise Manager o ejecutar el
sp:
○ sp_depends nombreVista
183
Modificación de Datos mediante
Vistas
Al modificar los datos de una vista se está
modificando la información en la tabla base
Las modificaciones de datos a través de vistas:
Solo pueden afectar a una tabla
No pueden afectar a ciertas columnas (por ejemplo,las
que son resultado de un cálculo)
Pueden generar erores si afectan columnas no incluidas
en la definición de la vista (por ejemplo, si se hace
referencia a columnas no incluidas en la vista y que en la
definición de la tabla no aceptan valores NULL ni tienen
valores por DEFAULT)
Se comprueba que la actualización sea valida, cuando se
usa la opción WITH CHECK OPTION
184
Repaso
Introducción a las Vistas
Ventajas de las Vistas
Creación de Vistas
Restricciones del Uso de Vistas
Modificación y Elimnación de Vistas
Obtención de Información de Vistas
Modificación de Datos mediante Vistas
185
186
Temario
Stored Procedures
Sintaxis
Parámetros
Valores Regresados
Stored Procedures de Sistema
Startup Stored Procedures
Programación
Declaración de Variables
Clausulas de control
Ciclos
187
Stored Procedures
Un stored procedure es un procedimiento
que es llamado por el usuario o por otro
procedimiento y realiza una función
especifica
Es posible definir permisos de ejecución
sobre los stored procedures, por lo que no
es necesario que los usuarios tengan
acceso directo a las tablas
Acepta parametros de entrada
188
Stored Procedures
Dentro de ellos se pueden realizar
operaciones de búsquedas y regresar un
resultado en uno o más selects (result set),
operaciones de modificación de
información o ambas.
Hay 5 tipos de stored procedures
Del Sistema
Locales
Temporales
Remotos
Extendidos
189
Procesamiento de Stored Procedures
Procesamiento Inicial
Creación y ejecución del SP por primera vez, se coloca su
plan de ejecución en la caché de procedimientos
(procedure caché, que es donde se encuentran los planes
de ejecución de los SP´s mpas importantes, los cuales
son los utilizados con mayor frecuencia y/o los que
requieren mayor tiempo para compilar)
Procesamientos posteriores
Es más rápido que el procesamiento inicial porque SQL
Server utiliza el plan de ejecución que está en procedure
caché
190
Procesamiento Inicial
Creación
Se verifica que las instrucciones que hay en el SP sean
correctas semánticamente. SQL Server registra el nombre
del SP en la tabla sysobjects y el texto en syscomments
En caso de que haya error en la sintaxis, el SP no se crea
y se envía un mensaje de error
Es posible hacer referencia a objetos que no existen al
momento de crear el SP (esto es conocido como
resolución diferida de nombres); sin embargo, al momento
de la ejecución todos los objetos referenciados deben
existir
191
Procesamiento Inicial
Ejecución (Por primera vez o
recompilación)
La primera vez que se ejecuta un SP o cuando
éste se debe volver a compilar, SQL Server
realiza un proceso llamado resolución
○ Optimización
SQL Server crea un plan que contiene el método
más rapido para accesar a los datos
○ Compilación
Este proceso consiste en analizar el SP y crear un
plan de ejecución que será colocado en procedure
cache
192
Procesamientos Posteriores
SQL Server reutiliza el plan de ejecución
que se encuentra en procedure cache si:
El entorno en que se compiló el plan es el mismo al actual
(configuraciones del servidor, de la base de datos y de la
conexión)
Los objetos a los que se hace referencia dentro del SP no
requieren el proceso de resolución de nombres (este
proceso se realiuza cuando hay objetos con el mismo
nombre pero que pertencen a diferentes usuarios)
SQL Server retira de procedure cache los
planes más antiguos y sin usar cuando
necesita espacio
193
Ventajas de los Stored Procedures
Procedimientos reutilizables
Restringe el acceso directo a las tablas
Facilita el esquema de permisos
Menjor rendimiento de ejecución
Reduce el tráfico por la red
194
Sintaxis de los Stored Procedures
Create Procedure [owner.]nombre
[;number]
[lista de parametros]
[with
{ RECOMPILE | ENCRYPTION | RECOMPILE ,
ENCRYPTION } ]
[FOR REPLICATION]
AS
[BEGIN]
clausulas
[END]
195
Sintaxis de los Stored Procedures
;number
Para agrupar SP´s con el mismo nombre de forma que
puedan ser borrados con un solo DROP PROCEDURE
WITH RECOMPILE
Cada vez que se ejecuta el stored procedure se vuelve a
recompilar y a crear su plan de ejecución
WITH ENCRYPTION
El código del stored procedure se encripta, no puede ser
visto con sp_helptext
FOR REPLICATION
Utilizado por el replicador
196
Restricciones y Reglas
No se pueden hacer uso de CREATE VIEW,
CREATE TRIGGER, CREATE DEFAULT, CREATE
PROCEDURE y CREATE RULE dentro del stored
procedure
Se pueden tener hasta 1,024 parámetros
definidos
El número máximo de variables locales está
limitado por la memoria disponible
Se pueden tener hasta 32 niveles de anidamiento
de SP’s
197
Restricciones y Reglas
El tamaño máximo de un SP es de 128MB
Al declarar variables y parámetros se permite
utilizar tipos de datos definidos por el usuario
Se pueden crear tablas temporales locales que
son destruidas al salir de él. Tablas temporales
globales se pueden usar aún y cuando se hayan
creado fuera de él
El número de transacciones debe ser igual al
inicio y al final del stored procedure
198
Parámetros
Es posible definir valores defaults para los
parámetros
Estos valores se sustituirán en caso de que no
sea enviado algún valor en ese parámetro
Los valores que pueden asignarse como default
debe ser constantes o NULL
199
Parámetros
Tipos de parámetros
200
Ejecución
Se ejecután con la clausulaEXECute
Es posible pasar los valores de los
parámetros directamente:
201
Ejecución
Nombrar los parámetros antes de enviar su
valor (recomendable)
Exec spInsAlumno
@Nacionalidad = 1,
@Carrera = ’ISC’,
@AlumnoNom = @AlumnoNom,
@PaternoApellido = ‘Limon’,
@MaternoApellido = ‘Peña’
Los parámetros pueden estar en desorden
El nombre del parámetro debe corresponder con la
definición del Stored Procedure
Se puede omitir cualquier parámetro para que tome su
default
202
RETURN
Create Procedure spInsAlumno
Utilizado @Nacionalidad tinyint = 1,
generalmente para @Carrera
@AlumnoNom
char(4) = Nu
Nombre,
regresar si el stored @PaternoApellido Apellido,
@MaternoApellido Apellido OU
procedure terminó As
BEGIN
con errores o Insert into Alumno
correctamente (NacionalidadId, CarreraID, …)
Values (@Nacionalidad, @Carre
Variable tipo int IF @@rowcount = 0
RETURN 1
RETURN 0
END
203
Stored Procedures del Sistema
Se instalan al instalar SQL Server
Inician con sp_
Se encuentran en master
Pueden ser ejecutadas desde cualquier base
de datos
Ejemplos
sp_help sp_lock
sp_addlogin sp_adduser
sp_message sp_addalias
sp_helptext sp_rename
sp_addserver
204
Startup Stored Procedures
Son ejecutados automáticamente cuando arranca
SQL Server
Inician cuando la última base de datos es
recuperada
Deben ser creados por el sa y esta en master
No hay limite de startup stored procedures
Cada stored procedure ejecutado consume una
conexión
Usar el comando sp_procoption para marcar los
startup stored procedures
205
Programación
Batch
Conjunto de clausulas que se compilan todos juntos
Denotado por la palabra GO
Se pueden realizar batches en DOS y ejecutarlos en
ISQL
Si ocurre un error, no se ejecuta ningún comando
del batch
Script
Conjunto de batches enviados al servidor uno detrás
de otro, si ocurre un error en uno, el programa que
los envía tiene la decisión de enviar o no el siguiente
206
Declaración de Variables
DECLARE
Se asigna un valor con SELECT
@variable=valor
Variables globales ya definidas
@@Connections @@SPID
@@Cursors_Rows @@DBTS
@@Error @@Fetch_Status
@@Identity @@Max_Connections
@@Version @@RowCount
@@NestLevel @@ProcID
@@ServerName @@ServiceName
@@TranCount
207
Mensaje de Error
RAISERROR
Mensajes de usuario tienen que ser mayores a
50000
Se pueden insertar en el Event Viewer
Se pueden definir e insertar en sysmessages
con:
sp_addmessage o sp_dropmessage
208
Clausulas Print y Case
PRINT
Se puede imprimir un string o variable
PRINT { “String” | @var_local | @@var_global }
CASE
CASE expresion
WHEN expresion1 then expresion1
[WHEN] expresion2 then expresion2…
[ELSE expresion]
END
209
Clausulas de Control
BEGIN … END
Denotan Inicio y Fin de un bloque
IF … ELSE
Clausula Condicional
IF EXISTS ( Select MatriculaId from alumno
Where MatriculaId = @MatriculaId )
BEGIN
Delete AlumnoMateria
Where MatriculaId = @MatriculaId
END
ELSE
PRINT “No Existe”
210
Ciclos
WHILE
Repetición mientras la condición se cumple
BREAK … CONTINUE
Utilizado en el WHILE
Se termina el ciclo BREAK
Se regresa al inicio del ciclo CONTINUE
WHILE @MatriculaID IS NOT NULL
BEGIN
Clausulas
If @matriculaId = 1
Continue
Else
Clausulas
END
211
Clausula EXEC
EXEC
Ejecuta un stored procedure, system stored procedure,
extended stored procedure o un string
DECLARE @BasedeDatos Varchar(30)
Select @BasedeDatos = ‘Ventas’
EXEC(@BasedeDatos + ‘..spSelVentasDelMes’)
212
Cursores
Mas rapidos que el utilizar WHILE
Procesan un rengl[on a la vez
La información se almacena en tempdb
Para crear un cursor
DECLARE CURSOR nombre
[INSENSITIVE][SCROLL] CURSOR
FOR clausula_Select
[FOR {READ ONLY | UPDATE [OF columnas] } ]
213
Cursores
Para abrir un cursor
OPEN nombre_cursor
214
Cursores
Para cerrar el cursor
CLOSE nombre_cursor
215
Repaso
Stored Procedures
Sintaxis
Parámetros
Valores Regresados
Stored Procedures de Sistema
Startup Stored Procedures
Programación
Declaración de Variables
Clausulas de control
Ciclos
216
217
Temario
Introducción a los Triggers
Creación de Triggers
Modificación y Eliminación de Triggers
Triggers anidados
Triggers Recursivos
218
Introducción a los Triggers
¿Qué es un Trigger?
Caracteristicas de los Triggers
219
¿Qué es un Trigger?
Es una clase especial de stored procedure
que se ejecuta de manera automática cada
vez que se modifican los datos de la tabla
a la cual está asociado
220
Caracteristicas de los Triggers
Los triggers se definen para una tabla específica
(no puede ser tabla temporal ni vista)
No pueden ser ejecutados directamente (se
ejecutan de manera automática)
No aceptan parámetros
Los triggers pueden ser utilizados para reforzar la
integridad de los datos de una forma más
compleja que con el uso de CONSTRAINTS
221
Caracteristicas de los Triggers
Permiten realizar cambios en cascada sobre
tablas relacionadas
Pueden enviarse mensajes de error
personalizados (predefinidos o construidos
dinámicamente mediante el RAISERROR)
Utilizados para reforzar las reglas del negocio
Se pueden comparar los datos antes y después
de que sean modificados
222
Caracteristicas de los Triggers
Si la tabla tiene un CONSTRAINT se ejecuta primero y
si ocurre un error el trigger no es disparado ( los
triggers son reactivos, las restricciones son proactivas
)
Las tablas pueden tener varios triggers asociados de la
misma acción (insert, update, delete)
Si la tabla es borrada, sus triggers asociados son
eliminados automáticamente
Se recomienda no regresar resultados (con select)
Un trigger siempre está dentro de una transacción
implicita (clausula)
Un Rollback dentro del trigger destruye la transacción
implicita y la transacción de mayor jerarquía.
223
Creación de Triggers
Sintaxis
Tipos de Triggers
Comandos no permitidos
Consideraciones
224
Sintaxis
CREATE TRIGGER [owner.]nombre_trigger
ON [owner.]nombre_tabla
[ WITH ENCRYPTION ]
{ FOR { INSERT | UDATE | DELETE }
AS
[ IF UPDATE (nombre_columna)…]
[ { AND | OR } UPDATE (nombre_columna)…]
instruccionesSQL }
225
Sintaxis
WITH ENCRYPTION
El código del trigger se encripta, no puede ser
visto con sp_helptext
FOR INSERT | UPDATE | DELETE
Define el tipo de trigger. La acción que lo va a
activar
IF UPDATE
Aplica sólo para triggers de UPDATE, para
verificar si hubo cambio en una columna
226
Tipos de Triggers
Trigger de INSERT
Trigger de DELETE
Trigger de UPDATE
227
Trigger de Insert
Se inserta el renglón en la tabla final (origen)
Se crea una tabla de paso llamada inserted
que es destruida al terminar el trigger
En esta tabla se almacenan los renglones
insertados y con ellos se pueden realizar
validaciones
Si las validaciones que se tienen en el trigger
no se cumplen es necesario realizar un
ROLLBACK TRANSACTION para que los
renglones no sean insertados en la tabla final
228
Trigger de Insert
Ejemplo:
“Validar que al dar de alta un Alumno, la Nacionalidad sea
válida”
CREATE TRIGGER trInsAlumno
ON Alumno
FOR INSERT
AS
IF @@ROWCOUNT <> 1
RETURN
IF NOT EXISTS ( Select n.* from Inserted I, Nacionalidad n
Where i.NacionalidadId = n.NacionalidadID )
BEGIN
RAISERROR 50000 “La Clave de nacionalidad no es valida”
ROLLBACK TRANSACTION
RETURN
END
229
Trigger de Delete
Se elimina el renglón de la tabla final
Se crea una tabla de paso llamada deleted que es
destruida al terminar el trigger
En esta tabla se almacenan los renglones
eliminados y con ellos se pueden realizar
validaciones
No se realiza para el TRUNCATE TABLE
Si las validaciones que se tienen en el trigger no se
cumplen es necesario realizar un ROLLBACK
TRANSACTION para que los renglones no sean
eliminados de la tabla final
230
Trigger de Insert
Ejemplo:
“Validar que al dar de baja una materia, no esté asignada a un alumno”
CREATE TRIGGER trDelMateria
ON Materia
FOR DELETE
AS
IF @@ROWCOUNT <> 1
RETURN
IF EXISTS ( Select * from deleted
Where MateriaCve IN
( Select MateriaCve from AlumnoMateria )
BEGIN
RAISERROR 50000 “No es posible borrar la materia, esta asignada”
ROLLBACK TRANSACTION
RETURN
END
231
Trigger de Update
Se crean dos tablas de paso, inserted y
deleted
Inserted: tiene los renglones con las
modificaciones
Deleted: tiene los renglones antes de ser
modificados
Si las validaciones que se tienen en el trigger
no se cumplen es necesario realizar un
ROLLBACK TRANSACTION para que los
renglones no sean modificados
Es posible utilizar la
clausulaUPDATE(columna)
232
Trigger de Update
Ejemplo:
“Si hacen un cambio en el costo de la materia, registrarlo en una
bitácora”
CREATE TRIGGER trUpdMateria
ON Materia
FOR UPDATE
AS
DECLARE @CostoOld money,
@CostoNew money,
@MateriaCve char(6)
IF @@ROWCOUNT <> 1
RETURN
IF UPDATE(CostoMto)
BEGIN
Select @MateriaCve = MateriaCve, CostoNew = CostoMto
From Inserted
Select @CostoOld = CostoMto from Deleted
INSERT TablaBitacora
VALUES(@MateriaCve, @CostoOld, @CostoNew, GETDATE(), HOST_NAME,USER_NAME() )
END
233
Comandos No Permitidos
Dentro de la definición del trigger no es
posible utilizar:
Instrucciones CREATE (Database, Schema, Table, Index,
Procedure, Rule, Trigger, View)
Instrucciones DROP
ALTER (Table, Database, Procedure, View, Trigger)
TRUNCATE TABLE
GRANT, REVOKE, DENY
UPDATE STATISTICS
RECONFIGURE
LOAD DATABASE y LOG, RESTORE DATABASE y LOG
234
Consideraciones
Las tablas inserted y deleted están
siempre en memoria caché
El tiempo de ejecución del trigger está
determinado por el número de tablas
referenciadas y el número de renglones
afectados
Las acciones contenidas en un trigger
forman parte de una transacción
235
Modificación y Eliminación de Triggers
Modificación de un Trigger
Cambios en la definición sin quitar el trigger
ALTER TRIGGER nombre_trigger
ON tabla
[ WITH ENCRYPTION ]
{ FOR { [,] [DELETE] [,] [UPDATE] [,] [INSERT] } }
AS
INSTRUCCIONES SQL
236
Modificación y Eliminación de Triggers
Eliminación de un Trigger
DROP TRIGGER nombre_trigger
237
Triggers Anidados
Se pueden tener hasta 32 niveles de
anidamiento
La variable @@NESTLEVEL permite ver el
nivel actual de anidamiento
Es posible deshabilitar la opción de
anidamiento usando: sp_configure ‘nested
triggers’, 0
Si un trigger es una cadena de anidamiento
provoca un conflicto infinito, el nivel de
anidamiento se superará terminado el trigger y
deshaciendo la transacción
238
Triggers Recursivos
Cuando la opción de triggers recursivos
está habilitada, un trigger puede activarse
de nuevo a si mismo. Para dehabilitar esta
opción usar:
Sp_dboption nombreBD, ‘recursive triggers’, True
Si la opción de triggers anidados está desactivada
la de triggers recursivos también los estará (sin
importar la configuración que esta última tenga en
la BD)
Las tablas inserted y deleted solo tendrán los
datos correspondientes a la instrucción insert,
update, o delete que lo invocó la última vez.
239
Repaso
Introducción a los Triggers
Creación de Triggers
Modificación y Eliminación de Triggers
Triggers anidados
Triggers Recursivos
240