+ All Categories

SQL

Date post: 12-Aug-2015
Category:
Upload: diego-prieto-huber
View: 88 times
Download: 0 times
Share this document with a friend
Popular Tags:
327
SQL Sistemas Gestores de Bases de Datos 3º CAS – IES El Rincón Agustín Jiménez Guerra
Transcript
Page 1: SQL

SQLSistemas Gestores de Bases de Datos3º CAS – IES El Rincón

Agustín Jiménez Guerra

Page 2: SQL

Índice

Introducción

Características SQL

Componentes SGBD

Aplicaciones

Instrucciones SQL

Tipos de Sentencias SQL

Page 3: SQL

Índice

Instrucción SELECTDiferentes tipos de consultasSELECT con predicado: WHERETipos de datosFunciones:

TiposEscalares Colectivas

Agrupamiento de filas: GROUP BY, HAVINGConsultas sobre varias tablas

Instrucción INSERTInstrucción DELETEInstrucción UPDATE

Page 4: SQL

Índice

Creación de bases de datosTablas

Relaciones entre tablasConstrains

VistasComposición de consultas

UnionIntersectMinus o Except

ÍndicesSinónimos

Page 5: SQL

Índice

Transact SQLProcedimientos almacenados

Triggers

Funciones definidas por el usuario

Cursores

Transacciones

Page 6: SQL

Índice

Transact SQLAdministración

Herramientas de administraciónCreación de gruposRegistro de servidoresSeguridadDefinir usuariosFunciones definidas por el usuarioPermisos de las tablasCopias de seguridadMantenimiento de bases de datos

Page 7: SQL

Introducción SQL

Lenguaje para acceso a la información almacenada en Bases de Datos relacionalesBases de datos Relacionales

Información en tablas (entidad): filas o registros (tuplas) y columnas o campos (atributos) La mayoría de las Bases de datos actuales son relacionales

Básicamente se puede introducir datos, almacenar datos, recuperar datos y trabajar con ellos

SQL: Structure Query Language (Lenguaje estructurado de consultas)Es un lenguaje utilizado en muchos productos tanto para ordenadores tipo PC como para grandes sistemas, y corre en muchos sistemas operativos diferentesFue creado por IBM (SEQUEL).Existen unas especificaciones ANSI sobre el SQL, aunque no todos los productos las cumplen

Esta es una de las razones por lo que es muy usado

Page 8: SQL

Características

Se puede manejar conjunto de registrosEstructura simpleGran potencia: Con una instrucción se puede obtener una consulta complejaFlexibilidad: Permite especificar muchas condicionesAcceso directo a datos (sin programación, en modo interactivo)Se puede usar SQL desde dentro de programas, o directamente interactivo dentro de un Query (preguntador), consultas abiertas

Por esta razón tanto lo pueden usar los programadores como los usuarios (que quieran acceder a los datos mediante consultas)

Page 9: SQL

Características

SQL InteractivoEl usuario escribe sentencias en la línea de comandos o en una pantalla visual y son respondidas por el SGBD.

SQL EmbebidoPermite ejecutar sentencias en el interior de programas escritos en otros lenguajes. Se pone un delimitador antes de la sentencia SQL � PrecompiladorSQL.

SQL modularPermite compilar sentencias SQL separadas del lenguaje de programación y enlazadas (links) después con el resto de módulos objeto para crear el programa ejecutable. Los procedimientos almacenados son de este tipo.

Otra clasificación:SQL estático: Las sentencias incluidas en el programa no pueden cambiar durante la ejecución. Es sencillo y eficiente.SQL dinámico: Las sentencias pueden ser modificadas en tiempo de ejecución. Es potente

Page 10: SQL

Componentes SGBD Relacional

S.G.B.D

CATÁLOGO B.D.

USUARIOS

Programa---------------------------SQL----------------

HARDWARE

Page 11: SQL

Componentes SGBD Relacional

SGBDPrograma encargado de manejar y gestionar los datos almacenados en la BDPermiten acceder a los datos de forma lógica, sin atender a como están éstos organizados físicamente en la BDNo se tiene que tener en cuenta el uso de punteros sobre los datos, donde se graban, superficie

libre del disco, etc.Programas independiente de la organización física de los ficheros.Modelo externo de datos: Estructuras de datos que ven los usuarios (Tablas)Modelo interno de datos: Estructuras físicas que soportan los datos (punteros, ficheros, etc.)

SQLLenguaje que permite operar con tablas, (manejo de registros por consulta o actualización)Las operaciones con tablas se expresan en sentencias SQLLas sentencias SQL (interactivas o de programa), son enviadas al SGBD que las analiza y procesa.

El SGBD se responsabiliza de coordinar las peticiones de distintos usuarios sobre los mismos datos (integridad)

Page 12: SQL

Componentes SGBD Relacional

CatálogoTambién llamado diccionario de datosEs un componente del SGBD que posee unas tablas donde se guarda información de todas las tablas de la BD (nombres de tablas, campos que tienen, características de los campos, tipo, tamaño, etc.)La información se actualiza cada vez que se añade una tabla a la BDCon SQL también se puede consultar tablas del catálogo

Page 13: SQL

Componentes SGBD Relacional

SYSTABLESTablas y vistas de la base de datos (Tabla, propietario, número de campos, ...)

SYSCOLUMNSColumnas de cada tabla que está en SYSTABLES (campo, tabla, tipo, tamaño, ..)

SYSINDEXSÍndices del sistema (índice, tabla, usuario, ...)

SYSVIEWVistas de la base de datos (vista, tabla, usuario, ...)

Page 14: SQL

Componentes SGBD Relacional

Estas tablas se pueden consultar con el SQL y por ejemplo, conocer:

Que tablas contienen el campo NOMBRE:SELECT TBNAME FROM SYSCOLUMNS WHERE NAME = ‘NOMBRE’Que campos tiene la tabla EMPLEADOS:SELECT NAME FROM SYSCOLUMNS WHERE TBNAME = ‘EMPLEADOS’Cuantas tablas posee el usuario USER1:SELECT COUNT (*) FROM SYSTABLES WHERE CREATOR = ‘USER1’

Con esto se puede ver la estructura de la base de datos. Las tablas que posee, los campos de cada tablas, etc.

Page 15: SQL

Componentes SGBD Relacional

El catálogo se puede consultar con un SELECT

No se puede actualizar con: INSERT, UPDATE y DELETE (podría ser peligroso)

Para modificar la estructura de tablas, índices, vistas, etc. se usa: CREATE TABLE, CREATE INDEX, CREATE VIEW, ALTER TABLE, DROP TABLE, DROP INDEX y DROP VIEW.

Page 16: SQL

Aplicaciones del SQL

Consulta y actualizaciones de datos almacenados en tablas relacionalesDescribir o crear nuevas tablas (definir tablas) y vistas

Generalmente lo realiza el Administrador de la Base de Datos (ABD o DBA)

Gestión de autorizaciones de accesoPara poder consultar o actualizar una tabla se debe estar autorizado (mediante sentencias SQL)

Page 17: SQL

Instrucciones SQL

El usuario solo ve tablas (filas y columnas)Como están organizada físicamente da igual, eso es misión del SGBDEl ADB debe conocer algunas de esas características.

Los datos de una columna son homogéneosNo hay criterio de orden entre las filasCada columna tiene un nombre (para distinguirla de las otras)

Page 18: SQL

Instrucciones SQLComponentes de una sentencia SQL

Palabras definidasTienen un significado en SQL

Nombres de tablas o camposse asignan al crear la BD

ConstantesValor determinado.

Signos<, >, =, <=, >=, <>, ( ), ...

VariablesSi se usa el SQL dentro de un programa.

SELECT campo1, campo2 FROM Tabla1 WHERE Código=101 2 2 1 2 1 2 4 3

Page 19: SQL

Instrucciones SQL

Pasos al analizar la sentencia1. Selección Tabla1 de entre todas las tablas

2. Extraer los registros que tienen el valor 10 en el campo código

3. De los registros anteriores extrae campo1 y campo2

4. Devuelve el resultado

Page 20: SQL

Tipos de sentencias SQL

Sentencias de manipulación de datos DML: Data Manipulation LanguagePermiten realizar consultas y mantenimientos de datos

Sentencias de definición de datosDDL: Data Definition LanguagePermiten crear objetos nuevos, alterar o destruir objetos existentes (tablas, índices, vistas, etc.)

Sentencias de control de datos DCL: Data Control LanguagePermiten el control de permisos, etc.

Page 21: SQL

Tipos de sentencias SQL

Sentencias de manipulación de datos DML: Data Manipulation Language)Permiten realizar consultas y mantenimientos de datos.

SELECTExtraer o seleccionar datos de una o varias tablas (Consultas o Querys), dando como resultado una tabla de ninguna, una o varias filas (registros)

INSERTAñadir uno o varios registros a una tabla

UPDATEModificar uno o varios valores de uno o varios registros de una o varias tablas

DELETEBorrar uno o varios registros de una tabla

Page 22: SQL

Tipos de sentencias SQL

Sentencias de definición de datosDDL: Data Definition LanguagePermiten crear objetos nuevos, alterar o destruir objetos existentes (tablas, índices, vistas, etc.)

CREATECrear nuevas tablas, índices o vistas

DROPDestruir tablas, índices o vistas

ALTERAlterar tablas

Page 23: SQL

Tipos de sentencias SQL

Sentencias de control de datosDCL: Data Control Language

Permiten el control de varios aspectos

GRANTDar autorizaciones de acceso.

REVOKEDenegar autorizaciones de acceso

Page 24: SQL

SELECT

Utilizada para realizar consultas

Permite recuperar información de una o varias tablas

Muy potente

Page 25: SQL

SELECT

SELECT [ALL] Col1 [, Col2] … [[AS] Alias] DISTINCT *DISTINCT ROW Expresion1TOPPERCENT

FROM Tabla [[AS] Alias] [WHERE condición]

[GROUP BY Col1 [, Col2] …] [HAVING condición]

ORDER BY Col1 [DESC][ , Col2 [DESC] ] … Num1 [DESC][ , Num2 [DESC] ] …

[COMPUTE Expresion2 [BY Col1] ]

Consultas sencillas

Page 26: SQL

SELECT

SELECTSeleccionar datos de una tablaSe eligen los campos a ser seleccionadosPuede ser una columna, varias o todasTambién se admiten expresiones

FROMIndica la tabla o tablas desde donde se van a seleccionar los datos (donde están los datos que se van a extraer en el SELECT)Si se trabaja con varias tablas se puede especificar en FROM una expresión para indicar que datos ha de buscarAquí es donde se establece la relación entre dos o más tablas

Page 27: SQL

SELECT

WHERECondición o condiciones que deben cumplir los datos que se van a seleccionarEs un filtro de búsqueda que establece las condiciones que deben cumplir los registros, con lo que se limita el número de registros

ORDER BYOrden de clasificación en que se van a obtener los datosSe puede especificar el nombre del campo, campos, o expresión, o el número que hace el campo en el SELECTLa ordenación puede ser creciente (por defecto) o decreciente (DESC)

Page 28: SQL

SELECT

GROUP BYAgrupa los registros que tengan valores iguales en los campos especificados

HAVINGDe entre todos los grupos, descarta los que no cumplan la condición dada

COMPUTEUsa funciones para producir filas adicionales que resuman los contenidos de grupos

Page 29: SQL

SELECT

ALLPor defecto aparecen todos los registros, incluidos los que tienen valores iguales. Para que esto no ocurra, y restringir el número de registros a devolver (además del WHERE)DISTINCT

Para que en el resultado no aparezcan filas repetidas (si las hay las elimina), dejando sólo valores distintos

DISTINCTROWExclusivo de ACCESS. Es similar a DISTINCT pero busca duplicados en todos los campos de la tabla (no sólo en los campos seleccionados).TOP(n)

Exclusivo de ACCESS. Muestra los n primeros valores que cumplen la condición del WHERE

PERCENTSelecciona un % de registros

Page 30: SQL

SELECT: Orden en que se ejecutan las instrucciones

Siempre que se ejecuta un SELECT se obtiene por resultado una tablas que puede tener una fila, varias o ninguna (vacía)1. FROMSelecciona la tabla de entre todas las tablas de la BDPor ahora es la tabla resultante de la sentencia (la resultante es igual a la tabla original)2. WHEREElimina de la tabla resultante los registros que no cumplen la condición3. GROUP BYSe forman grupos con las filas de la tabla resultante que tengan valores iguales en las columnas de

agrupamiento4. HAVINGDescarta los grupos que no satisfagan la condición5. SELECTSe evalúan las expresiones de la SELECT para cada grupo; produciendo por cada uno una fila en la tabla

resultante final; con tantos valores como expresiones o campos se hayan seleccionadoSi los registros no están agrupados selecciona en cada registro los campos que estén en el SELECT,

descartando los demás6. ORDER BYPresenta la tabla resultante final, clasificada (ordenada) por los campos indicados7. DISTINCT/ALLSe eliminan los valores de la tabla resultante que sean repetidos o iguales (si se elige DISTINCT). Por

defecto es ALL

Page 31: SQL

SELECT CON PREDICADO

Condición del WHEREDistintos tipos:

SencillosComplejos

Condiciones de búsqueda en una operación pueden ser muy complejas

El predicado o la condición puede ser: Verdadera, Falsa o DesconocidaLos predicados pueden ser también Simples o Compuestos

SimplesSólo se pone una condición de comparación

CompuestosVarias condiciones enlazadas por un operador lógico (AND o OR)

Page 32: SQL

SELECT CON PREDICADO

[WHERE condición]

Consultas con predicado sencillas

Page 33: SQL

SELECT CON PREDICADO

[WHERE subselect]

[WHERE SELECT Col1 [, Col2] … [[AS] Alias] FROM Tabla [[AS] Alias] ]

Una Subselect, es una Select subordinada, que sólo puede devolver un valor, a menos que tenga un cuantificador (ALL, SOME, ANY), que puede devolver varios

Consultas con predicado complejas

Page 34: SQL

SELECT CON PREDICADO

[WHERE Col1 IS [NOT] NULL]

[WHERE [ALL] (SELECT Col1 [, Col2] ... FROMTabla .... ])]SOMEANY

[WHERE expresión1 [NOT] BETWEEN expresión2 AND expresión3]

[WHERE Col1 [NOT] LIKE cte_alfanumérica]

Consultas con predicado complejas

Page 35: SQL

SELECT CON PREDICADO

[WHERE expresión [NOT] IN constante1 [, constante2] ...]

[WHERE expresión [NOT] IN (SELECT Col1 [, Col2] ... FROM Tabla .......)]

[WHERE [NOT] EXIST (SELECT Col1 [, Col2] ... FROM Tabla ... )]

Consultas con predicado complejas

Page 36: SQL

SELECT CON PREDICADO

PREDICADOS SIMPLES: WHERE condición.Selecciona las filas en que la condición es Verdadera

Un operando puede ser una expresión u otra sentencia SELECT (Subselect)Ésta debe ir entre paréntesis, y producir como resultado un valor único (tabla de una columna y una fila o ninguna fila)Si se utiliza SELECT no se puede utilizar ORDER BY

NULLSirve para preguntar si el valor contenido en una columna de un registro determinado es o no Nulo, y según lo sea o no tomará el valor V o F (no puede ser D)Un campo puede tener: dato, blanco o null (desconocido)

PREDICADOS CUANTIFICADOSSi se utiliza una sentencia Select subordinada en un predicado de comparación, su valor debe ser único como ya se ha dichoSe admite que el predicado tenga varios valores, si la sentencia subordinada es precedida de algún cuantificador: ALL, SOME o ANY (predicado cuantificado).El resultado de la Select subordinada deber ser una tabla con una columna (un campo) que puede contener 0 o más filasALL: Predicado cuantificado que es V si la comparación es Verdadera para todos y cada uno de los valores resultantes de la sentencia subordinadaSOME: Predicado cuantificado que es V si la comparación es V para uno cualquiera de los valores del resultado de la sentencia subordinadaANY: Igual que SOME

Page 37: SQL

SELECT CON PREDICADO

BETWEENSirve para hallar si un valor está comprendido entre otros dos, o si no lo estáEl resultado es Verdadero si el valor de expresión 1 está comprendido entre el de expresión2 y expresión3, ambos inclusiveSi expresión1, expresión2 o expresión3 es NULL, el resultado es DesconocidoExpresión2 debe ser menor o igual que expresión3

V1 BETWEEN V2 AND V3 (V1>=V2) AND (V1<=V3)V1 NOT BETWEEN V2 AND V3 (V1<V2) OR (V1>V3)

LIKESirve para buscar combinaciones de caracteres que cumplan ciertas condicionesEn la constante alfanumérica se pueden utilizar máscaras

_ Sustituye a un carácter cualquiera% Sustituye a una cadena de caracteres cualquiera

Si el valor de nombre_columna está comprendido en la constante alfanumérica el resultado es VSi nombre_columna es NULL, el resultado es DSi nombre_columna y constante alfanumérica son Null, el resultado es V

Page 38: SQL

SELECT CON PREDICADO

INSirve para preguntar si el resultado de una expresión está incluido en una lista de valoresLa lista de valores se puede especificar uno a uno, o se puede poner una sentencia Select subordinada que de una tabla de una columna, de donde se cogen los valores a comparar

EXISTEl predicado es V si la Select subordinada es una tabla con 1 o más filas (no es una tabla vacía)La SELECT puede tener varias columnas

PREDICADOS COMPUESTOSSon combinaciones de predicados simples enlazados con los operadores AND y/o OR

Page 39: SQL

TIPOS DE DATOSNuméricos

EnterosBINARY: 0 – 1SMALLINT: -32768, +32767INTEGER: -2147483647, +2147483647AUTOINCREMENTMONEY

DecimalesDECIMAL (p,s): p=precisión (nº total de dígitos)

s=nº de dígitos de la parte decima

Coma flotanteREALFLOAT(n): 5.4E-79, 7.2E+75

n = precisión de bits de la mantisa (1,21)

Rojo no ANSI

Page 40: SQL

TIPOS DE DATOS

AlfanuméricoTEXT, LONGTEXT, LONGCHAR, MEMO

Longitud fija: CHAR, VARCHAR, NCHAR, NVARCHAR, TEXT(n), CHARACTER, STRING

CHAR(n): n es la longitud (entre 1 y 254)

Longitud variable (los datos tienen una longitud mínima y máxima):

VARCHAR(n): n es la longitud (entre 9 y 32704).

Page 41: SQL

TIPOS DE DATOS

FechaFecha: DATE dd.mm.aaaa

01.01.0001, 31.12.9999Hora: TIME hh:mm:ss

00:00:00, 24:00:00Instante: TIMESTAMP

dd.mm.aaaa.hh.mm.ss.mmmmmmDATETIME

GráficosIMAGE

Page 42: SQL

TIPOS DE DATOS

Page 43: SQL

TIPOS DE DATOS

http://office.microsoft.com/es-es/access/HA012315043082.aspx

http://office.microsoft.com/es-es/access/CH010499573082.aspx

Page 44: SQL

TIPOS DE DATOS

Valor nuloSe puede poner nulos: NULL (desconocido)

No se pueden poner nulos: NOT NULL

ConstantesNuméricas: 3, +10, +3.04, 003.04, +3.14E-2, ...

Alfanuméricas: ‘ABC’, ‘abc’, ‘aB458c’, …

Page 45: SQL

TIPOS DE DATOSValor nulo

Se puede poner nulos: NULL (desconocido)No se pueden poner nulos: NOT NULL

ConstantesNuméricas: 3, +10, +3.04, 003.04, +3.14E-2, ...Alfanuméricas: ‘ABC’, ‘abc’, ‘aB458c’, ...

ExpresionesEn una consulta se pueden realizar operaciones con los datos (valores de una columna sumados con los de otra o multiplicados por un número, etc.). Esto se realiza con expresionesTambién se utilizan en las condiciones de selección de registros

Expresión: Combinación de valores, operandos y paréntesis, que dan un valorOperandos: Campos, constantes, variables o registros especialesOperadores: Signos con los que se opera: Numéricos (+ - * /) y alfanumérico (||)Registros especiales

Palabras que representan un valorP.e. el registro especial USER, que indica el usuario que está conectado al sistema (cada vez que un usuario se conecta, el SGBD controla el acceso, por motivos de seguridad y confidencilidad). El contenido de este registro especial es alfunumérico de longitud fija y tamaño 8, y guarda en cada momento el identificador personal del usuario que ejecuta la instrucción

Page 46: SQL

FUNCIONES

Las funciones del lenguaje SQL permiten realizar ciertas operacionesFunción

Representa un valor único que se obtiene al aplicar determinadas operaciones a otros valores dados (argumentos)

Las funciones pueden serEscalares

El resultado se obtiene a partir de un valor únicoDentro de las funciones escalares se distinguen tres grupos: Convertir valores, Funciones de tratamiento de cadenas y funciones de tratamiento de fechas

ColectivasEl resultado se obtiene a partir de una colección de valoresSe obtiene un valor como resultado de aplicar una determinada operación a los valores de una columna (separándolos en grupos)

Page 47: SQL

FUNCIONES ESCALARES

Funciones para convertir valores INTEGER: Convierte un valor a un número entero

FLOAT: Convierte un valor a un float

DECIMAL: Convierte un valor a un decimal

DIGITS: Convierte un valor numérico a alfanumérico

HEX: Convierte un valor a hexadecimal

Page 48: SQL

FUNCIONES ESCALARESFunciones de tratamiento de cadenas

LENGHT: Obtiene la longitud de un valorLENGHT (expresión)La tamaño del dato será:

Tipo argumento LongitudAlfanumérico TamañoEntero corto 2Entero largo 4Decimal pFlotante 8

SUBSTR: Extrae caracteres de una cadena.SUBSTR (expresión1, expresión2 [, expresión3])expresión1 es la cadena desde la que se va a extraer.expresión2 es la posición a partir de la cual se va a extraer.expresión3 es el número de caracteres a extraer

Page 49: SQL

FUNCIONES ESCALARES

Funciones de tratamiento de cadenas|| : Este símbolo se utiliza para concatenar cadenas de caracteres. En algunos sistemas también se usa la función: CONCAT (cadena1, cadena2)RTRIM: Extrae caracteres de una cadena por la derecha. No funciona en todos los sistemas.LTRIM: Extrae caracteres de una cadena por la izquierda. No funciona en todos los sistemasUPPER: Convierte las letras de una cadena de caracteres a mayúsculas. No funciona en todos los sistemasLOWER: Convierte las letras de una cadena de caracteres a minúsculas. No funciona en todos los sistemas

Page 50: SQL

FUNCIONES ESCALARES

Funciones de tratamiento de fechasConvertir de alfanumérico a fecha/horaDATE: Convierte una cadena de caracteres a: yyyy/mm/dd

DATE (expresión)

Convierte una cadena en una fecha o un número de días en una fecha (a partir del 1/1/0001).

TIME: Convierte una cadena de caracteres a: hh:mm:ssTIME (expresión)

Page 51: SQL

FUNCIONES ESCALARES

Funciones de tratamiento de fechasConvertir de alfanumérico a fecha/hora

TIMESTAMP: Convierte una cadena de caracteres a: yyyy/mm/dd/hh/mm/ss/mmmmmm

TIMESTAMP (expresión)Los formatos que pueden tener los datos son:

Formato Fecha Formato HoraTipo

aaaa-mm-dd hh.mm.ss ISOmm/dd/aaaa hh.mm AM hh.mm PM

USAdd.mm.aaaa hh.mm.ss EURaaaa-mm-dd hh:mm:ss JIS

Para inicializar una variable fecha, se inicializa como si fuera alfanumérica

Page 52: SQL

FUNCIONES ESCALARES

Funciones de tratamiento de fechasObtener un elemento de un dato fecha/hora

YEAR: Obtener el componente año de una fechaYEAR (expresión)

MONTH: Obtener el valor mes de una fechaMONTH (expresión)

DAY: Obtener el valor día de una fechaDAY (expresión)

HOUR: Obtener el valor hora de una horaHOUR (expresión)

MINUTE: Obtener el valor minuto de una horaMINUTE (expresión)

SECOND: Obtener el valor segundo de una horaSECOND (expresión)

MICROSECOND: Obtener el valor microsegundo de una horaMICROSECOND (expresión)

DAYS: Días transcurridos desde el 1/1/0001 hasta la fecha actualDAYS (expresión)

Page 53: SQL

FUNCIONES ESCALARES

Funciones de tratamiento de fechasRealizar conversión de formatosCHAR: Convertir un valor de fecha a un valor alfanumérico

CHAR (expresión, tipo_formato)

Tipo formato: ISO, USA, EUR, JIS

Page 54: SQL

FUNCIONES ESCALARES

Funciones de tratamiento de fechasDuraciones. Intervalos de tiempo

Duración de calendario: Se obtiene al restar dos fechas de 8 cifras (aaaa.mm.dd). Se obtiene un número que representa: 2 primeros dígitos número de años, 2 segundos dígitos número de meses y 2 últimos dígitos número de días

DATE(’18.4.2000’) – DATE(’31.12.1999’) = 318El 318 indica 0 años, 3 meses y 18 días

Duración de reloj: Se obtiene al restar dos horas. Las dos primeras cifras del número que se obtiene representa las horas, las dos segundas los minutos y las dos últimas los segundos

TIME(’18.50.55’) – TIME(’15.30.45’) = 32010El 32010 indica 3 horas, 20 minutos y 10 segundos

Duración explícita: Es un número seguido de una palabra que indica una unidad de tiempo (YEARS, MONTHS, DAYS, HOURS, MINUTES o SECONDS). Estas palabras también son funciones

FECHA_NACIMIENTO + 3 MONTHS + 20 DAYS

Page 55: SQL

FUNCIONES ESCALARES

Funciones de tratamiento de fechasOperaciones con fechas

Se pueden realizar las siguientes operaciones:Fecha1 – Fecha2Fecha1 + duraciónFecha1 – duración

Operaciones con horasSe pueden realizar las siguientes operaciones:Hora1 – Hora2Hora1 + duraciónHora1 – duración

Registros especialesAdemás del registro especial USER ya comentado, existen otros como:CURRENT_DATE: Indica la fecha del sistema.CURRENT_TIME: Indica la hora del sistema.€

Page 56: SQL

FUNCIONES COLECTIVAS

AVG: Calcula la media de los valores de un campo (columna)AVG (expresión)AVG([DISTINCT / ALL] expresión)El resultado es numérico.

MAX: Halla el máximo entre los valores de un campoMAX (expresión)El resultado es del mismo tipo que la expresión

MIN: Halla el mínimo entre los valores de un campoMIN (expresión)El resultado es del mismo tipo que la expresión

SUM: Calcula la suma de los valores de un campoSUM (expresión)SUM([DISTINCT / ALL] expresión)El resultado es numérico

Page 57: SQL

FUNCIONES COLECTIVAS

COUNT: Halla cuantos valores hay en una colecciónCOUNT (expresión)COUNT (*) Número de filas que hay en el grupo al que se aplicaCOUNT ([DISTINCT / ALL] expresión)El resultado es numérico

FORMATO GENERALNombre_función ([DISTINC] campo)El DISTINCT elimina antes los valores repetidos. En una SELECT no se puede poner DISTINCT más de una vezNombre_función ([DISTINC] expresión)

Page 58: SQL

AGRUPAMIENTO DE FILAS

Se pueden formar grupos de registros o filas de acuerdo a un determinado criterio, para aplicarles luego las funciones colectivasLos registros se pueden dividir en grupos y calcular subtotales, medias, etc.GROUP BY

Se incluye en la sentencia SELECT. Sirve para agrupar filas, y se escribe detrás del WHERE (si existe éste)GROUP BY col1 [, col2] ...

Se especifican las columnas o campos por los que se van a agrupar los registrosSe van a agrupar las filas de la tabla, tal que todas las que tengan el mismo valor en las columnas de agrupamiento forman un grupoPueden haber grupos de 1 registro (1 fila)Una vez se forman los grupos para cada uno se evalúan las expresiones de la cláusula SELECT (cada grupo produce 1 fila en la tabla final resultante)Las otras columnas que no se usan en los agrupamientos sólo se pueden usar como argumento de las funciones colectivas de la SELECT dando lugar a una fila en el resultado

Page 59: SQL

AGRUPAMIENTO DE FILAS

HAVINGSe incluye en la sentencia SELECT. Sirve para descartar grupos de filas que cumplan una condición.HAVING condición

Después de haber separado las filas en uno o varios grupos, se descartan aquellos que no sastifagan la condiciónSi no se agrupan las filas con GROUP BY, se forma un grupo con todos los registrosGROUP BY debe preceder a HAVINGEl agrupamiento se puede hacer por GROUP BY o funciones colectivas en la SELECT o las dosSi se usa GROUP BY se agrupan las filas con igual valor en las columnas de agrupamiento, sino todos los registros forman un grupoUna vez formados los grupos: Se evaluan las expresiones de la SELECT dando lugar a una fila en el resultado

Page 60: SQL

AGRUPAMIENTO DE FILAS

[GROUP BY Col1 [, Col2] …]

[HAVING condición]

Consultas con agrupamiento de filas

Page 61: SQL

SELECT SOBRE VARIAS TABLAS

Se pueden manejar varias tablas en una sola sentencia SELECT

Si interviene más de una tabla es una instrucción SQL, para referirse a un campo de una tabla (puesto que pueden haber campos con el mismo nombre en varias tablas) se indica a que tabla pertenece

Propietario.Tabla.Columna

Esta operación también se denomina JOIN

Page 62: SQL

SELECT SOBRE VARIAS TABLASFROM

Se especifican las distintas tablasWHERE

El WHERE que aparece después del FROM se aplica a una tabla formada por las filas que resulten de pegar una al lado de otra una fila de la 1ª tabla, y todas las de la 2ª, la 2ª fila de la 1ª tabla y todas las de la 2ª y así sucesivamente, formando todas las combinaciones posibles (producto cartesiano)Si no se pone WHERE aparecen todas las combinaciones

Page 63: SQL

SELECT SOBRE VARIAS TABLASDespués de formar el producto cartesiano de las dos tablas, lo normal es quedarse sólo con las filas que cumplen unas determinadas condiciones

Usualmente que la clave ajena de la 1ª tabla sea igual a la clave primaria de la 2ª tabla, con tablas relacionadas

En la condición se pueden incluir columnas de distintas tablas (anteponiendo el nombre de la tabla)En la tabla final resultante se tiene:

Nº columnas: col . Tabla1 + col. Tabla2 + ...Nº filas: filas Tabla1 * filas Tabla2 * ...

Page 64: SQL

SELECT SOBRE VARIAS TABLAS

Con la sentencia SELECT podemos seleccionar de dos o más tablas

SELECT columnas FROM tabla1, tabla2, ... tablaN

OJO. La SELECT no tiene ni idea de cómo están relacionadas las tablasSi le decimos que seleccione datos de dos tablas, combinará las dos tablas haciendo un producto cartesiano entre las dosPor cada fila de la primera tabla se incluyen todas las filas de la segunda tabla

Page 65: SQL

SELECT SOBRE VARIAS TABLAS

Page 66: SQL

SELECT SOBRE VARIAS TABLAS

Si existe una relación de 1 a N entre las tablas, lo que nos interesa es que, por cada fila de la tabla del lado N (“PIEZAS”) aparezca la fila relacionada en la tabla del lado 1 (“FABRICANTES”)

Queremos que en el resultado sólo aparezcan las filas sombreadas

¿cómo podemos hacer esto?

Page 67: SQL

SELECT SOBRE VARIAS TABLAS

A esto se le llama la condición de emparejamiento de tablas

SELECT * FROM Piezas, Fabricantes

WHERE Piezas.Fabricante = Fabricantes.Codigo

Para hacer un emparejamiento de tablas no es necesario que haya unarelación de 1 a N entre ellas. Sin embargo, el emparejamiento detablas suele hacerse cuando queremos juntar dos o más tablasrelacionadas

Page 68: SQL

SELECT SOBRE VARIAS TABLAS

Al hacer un emparejamiento de tablas, puede ocurrir que no queramos todas las columnas (SELECT *) sino solo unas cuantas de cada tabla. ¿qué ocurre si en las dos tablas hay columnas que tienen el mismo nombre?

Solución: Utilizamos prefijos. Antes del nombre de la columna ponemos el nombre de la tabla y un punto

Para que este trabajo no sea demasiado engorroso se pueden utilizar los alias (etiquetas) de tablas para abreviar el nombre de las mimas

Page 69: SQL

SELECT SOBRE VARIAS TABLASEn el SELECT se pueden especificar nombres de columnas de cualquiera de las tablas especificadas en la cláusula FROM

Si en el SELECT se hace referencia a algún campo de tablas que se llamen igual, hay que ponerle el nombre de la tabla precediendo al del campo.

Nombres Locales

Los nombres locales son alias que se asignan a las tablas de una sentencia SELECT (su ámbito de utilización es la sentencia SELECT). Detrás del nombre de la tabla, se pone su nombre local, refiriéndonos a la tabla por su nombre local

Page 70: SQL

SELECT SOBRE VARIAS TABLAS

Page 71: SQL

SELECT SOBRE VARIAS TABLAS

INNER JOIN

Existe otra manera de realizar los emparejamiento. En lugar de utilizaruna condición de emparejamiento podemos utilizar la cláusulaINNER JOIN.

SELECT columnas FROM tabla1 INNER JOIN tabla 2 ON condición_emparejamiento

SELECT * FROM Piezas, Fabricantes WHERE Piezas.Fabricante = Fabricantes.Codigo

SELECT * FROM Piezas INNER JOIN Fabricantes ON Piezas.Fabricante = Fabricantes.Codigo

EQUIVALENTES

Page 72: SQL

SELECT SOBRE VARIAS TABLASLa sentencia JOIN permite combinar registros de dos o más tablas en una base de datos relacional.

Tipos de JOIN:

Interno

Externo

Cruzado

Self-join (una tabla puede unirse consigo misma en casos especiales)

Page 73: SQL

SELECT SOBRE VARIAS TABLASInner join (interno)

Cada registro en la tabla A es combinado con cada registro de la tabla B; pero sólo permanecen aquellos registros en la tabla combinada que satisfacen las condiciones que se especifiquen

Es el más utilizadoTipos

Forma explícita

Forma implícita

Page 74: SQL

SELECT SOBRE VARIAS TABLASInner join (interno) explícito

Inner join (interno) implícito

SELECT * FROM Empleado INNER JOIN Departamento ONEmpleado.IDDepartamento=Departamento.IDDepartamento

SELECT * FROM Empleado, Departamento WHEREEmpleado.IDDepartamento=Departamento.IDDepartamento

Page 75: SQL

SELECT SOBRE VARIAS TABLASInner join (interno). Otra clasificación

De equivalenciausa comparaciones de igualdad en el predicado JOIN

No usa < o >

NaturalesLos columnas con el mismo valor se muestran sólo 1 vez

CruzadasProducto cartesiano de todos los registros de las 2 tablas

SELECT * FROM Empleado INNER JOIN Departamento ONEmpleado.IDDepartamento=Departamento.IDDepartamento

SELECT * FROM Empleado NATURAL JOIN Departamento

SELECT * FROM Empleado CROSS JOIN Departamento

SELECT * FROM Empleado, Departamento

Page 76: SQL

SELECT SOBRE VARIAS TABLAS

OUTER JOIN

Supongamos lo siguiente:

Page 77: SQL

SELECT SOBRE VARIAS TABLAS

OUTER JOIN

Si juntamos las dos tablas de la siguiente manera:

SELECT * FROM Piezas, Fabricantes WHERE Piezas.Fabricante = Fabricantes.Codigo

El resultado será:

¿dónde está la tuerca?

Page 78: SQL

SELECT SOBRE VARIAS TABLAS

OUTER JOIN

El registro de la tuerca no aparece porque no cumple la condición deemparejamiento (Fabricante es NULL).¿Qué hacemos si queremos que aparezcan todos los registros de unatabla, a pesar de que no cumplan la condición de emparejamiento?OUTER JOIN.

SELECT columnas FROM tabla1 LEFT OUTER JOIN tabla 2 ON condición_emparejamiento

SELECT columnas FROM tabla1 RIGHT OUTER JOIN tabla 2 ON condición_emparejamiento

Page 79: SQL

SELECT SOBRE VARIAS TABLAS

OUTER JOIN

Si realizamos la siguiente consulta:

SELECT * FROM Piezas LEFT OUTER JOIN Fabricantes ON Piezas.Fabricante = Fabricantes.Codigo

El resultado será:

Page 80: SQL

SELECT SOBRE VARIAS TABLAS

OUTER JOIN

La consulta coge todas las filas de la tabla de la izquierda (Piezas) y lasjunta con la otra tabla. Por cada fila de la tabla izquierda:

• Si la fila cumple la condición de emparejamiento, las dos filas sejuntan como si fuese una INNER JOIN.

• Si la fila no cumple la condición de emparejamiento, se ponenlos datos de la fila correspondiente a la tabla de la izquierda y elresto de los datos se dejan a NULL.

La RIGHT OUTER JOIN es igual, pero con la tabla de la derecha.También existe un FULL OUTER JOIN, que coge todas las filas deambas tablas.

Page 81: SQL

SELECT SOBRE VARIAS TABLAS

OUTER JOIN

Pueden abreviarse:LEFT OUTER JOIN -> LEFT JOINRIGHT OUTER JOIN -> RIGHT JOINFULL OUTER JOIN -> FULL JOIN

Page 82: SQL

INSERTAñadir Registros

Añadir una o más filas completas a una tabla.Una filaINSERT INTO Tabla [(Col1, Col2, ...)] VALUES (Valor1, Valor2, ...)

• No hace falta insertar todos los campos, ni en el mismo orden en que están en la tabla• Si se omite Col1, Col2, ..., entonces hay que poner todos los campos y en el mismo orden.• Si no se pone nada en un campo: NULL

Varias filasINSERT INTO Tabla[(Col1, Col2, ...)] SELECT .....

• Si se usa una instrucción SELECT dentro de otra, se le llama Subselect o Select subordinada• Todas las filas que resulten de ejecutar la SELECT se insertan en la tabla• No se puede hacer referencia en el SELECT a la tabla en la que se está insertando• El número de columnas del SELECT deber ser igual al número de nombres en la lista de

columnas

Page 83: SQL

INSERT

INSERT INTO Tabla [(Col1, Col2, ...)] VALUES (Valor1, Valor2, ...)

INSERT INTO Tabla[(Col1, Col2, ...)] SELECT .....

Insertado de registros

Page 84: SQL

DELETEBorrar Registros

• Borrar filas de una tabla (la fila completa no parcialmente)

DELETE FROM Tabla [Nombre_Local] [WHERE condición]

• Si no se pone la cláusula WHERE se borran todos los registros de la tabla (no la tabla)

Page 85: SQL

DELETE

DELETE FROM Tabla [Nombre_Local] [WHERE condición]

Borrado de registros

Page 86: SQL

UPDATEModificar Registros

• Modificar o actualizar varias filas de una tabla ( no tiene que ser la fila completa)

UPDATE Tabla [Nombre_Local] SET Col1=expresión1[,Col2=expresión2] ...

[WHERE condición]

• En expresión se puede poner NULL

• Si se omite WHERE se actualizan todas las filas de la tabla

Page 87: SQL

UPDATE

UPDATE Tabla [Nombre_Local] SET

Col1=expresión1 [,Col2=expresión2]...

[WHERE condición]

Modificación de registros

Page 88: SQL

Administrar Bases de DatosLa base de trabajo es donde se organiza toda la información en SQL Server. Ésta es unaagrupación de tablas, vistas, procedimientos almacenados, funciones, etc., un servidor SQLServer puede contener multitud de bases de datos y cada una de ellas millones de objetos.

Crear nueva base de datos

Las bases de datos las podemos crear de diferentes formas, lo más normal es que utilicemosel administrador corporativo (SQL 2000-2005), managament console (SQL 2008) paracrearlas pero se pueden crear desde Transact-SQL o desde un programa realizado en VBcon SQL-DMO. Todas las bases de datos que creamos en SQL Server se crean a partir deun modelo que es la base de datos Model que instala SQL Server, esta base de datos lesirve a SQL Server como ejemplo y modelo para crear las nuevas bases de datos.

Page 89: SQL

Crear nueva base de datos1. Desde el árbol de la izquierda, abrimos los nodos y nos posicionamos encima del nodo

“bases de datos”, con el botón derecho del ratón seleccionamos “Nueva base de datos”.2. En esta primera pantalla ponemos el nombre de la base de datos y el orden de

intercalación si queremos cambiarlo para hacerla compatible la base de datos conotras bases de datos existentes en otros servidores. Por defecto deja el orden deintercalación del SQL Server especificado en el proceso de instalación.

3. Pulsamos la siguiente opción, “Archivo de datos” para seleccionar la ruta donde estaráalojado el fichero físico de datos, por defecto estará en el directorio de instalación deSQL Server en “MSSQL\Data”. En esta opción también le daremos el tamaño delfichero físico o si queremos que se auto incremente a medida que la base de datoscrezca.

4. La siguiente opción, “Registro de transacciones” es similar al punto 3 solo que en lugarde especificar las opciones para el fichero de datos lo hacemos para el fichero detransacciones (fichero de registro o log).

Page 90: SQL

Crear nueva base de datos

EL proceso es muy sencillo, como ejemplocreamos una base de datos llamada pruebascon un tamaño de 10 MB y limitada a 50 MB yun incremento de 5 MB.

El registro de transacciones lo creamos con untamaño de 5MB y limitado a 25 y unincremento de la base de datos de 5 MB.

USE masterGOCREATE DATABASE PruebasON( NAME = Pruebas_data, FILENAME = 'c:\program files\microsoft sql server\mssql\data\pruebas_data.mdf',SIZE = 10,MAXSIZE = 50,FILEGROWTH = 5 )LOG ON( NAME = ‘Pruebas_log',FILENAME = 'c:\program files\microsoft sql server\mssql\data\pruebas_log.ldf',SIZE = 5MB,MAXSIZE = 25MB,FILEGROWTH = 5MB )

Page 91: SQL

Crear nueva base de datos

Sintaxis:• NAME = Nombre_del_archivo_lógico,• FILENAME = Nombre_del_archivo_en_el_sistema (path completo)• SIZE = TAMAÑO (inicial)• MAXSIZE = (tamaño_máximo | UNLIMITED)(Tamaño máximo que puede tener la base de datos, UNLIMITED = tamaño ilimitado)•FILEGROWTH = Incremento del archivo (crecimiento en MB)

Para ejecutar esta código utilizaremos el Analizador de consultas (Query Analyzer)

Page 92: SQL

ON (ARCHIVO BD)

• Especifica que los archivos de disco utilizados para almacenar las secciones de datos de la base de datos (archivos de datos) se definen explícitamente.

• ON es obligatorio cuando va seguido de una lista de elementos <filespec> separados por comas que definen los archivos de datos del grupo de archivos principal

• Detrás de la lista de archivos del grupo de archivos principal se puede colocar una lista opcional de elementos <filegroup> separados por comas que definan los grupos de archivos de usuario y sus archivos

PRIMARY

• Especifica que la lista de elementos <filespec> asociada define el archivo principal

• El primer archivo especificado en la entrada <filespec> del grupo de archivos principal se convierte en el archivo principal

• Una base de datos sólo puede tener un archivo principal. Si no se especifica PRIMARY, el primer archivo enumerado en la instrucción CREATE DATABASE se convierte en el archivo principal

Page 93: SQL

ARCHIVOS BASE DE DATOS• SQL Server asigna una base de datos a un conjunto de archivos del sistema operativo• Los datos y la información del registro nunca se mezclan en el mismo archivo, y cada archivo sólo

es utilizado por una base de datos• Los grupos de archivos se denominan colecciones con nombre de archivos que se utilizan como

ayuda en tareas de colocación de datos y administrativas, como las operaciones de copias de seguridad y restauración

• Archivos de base de datos • Las bases de datos de SQL Server utilizan tres tipos de archivos:

• Archivos de datos principales El archivo de datos principal es el punto de partida de la base de datos y apunta a los otros archivos de la base de datos

• Cada base de datos tiene un archivo de datos principal

• La extensión recomendada para los nombres de archivos de datos principales es .mdf.

• Archivos de datos secundarios Los archivos de datos secundarios son todos los archivos de datos menos el archivo de datos principal

• Puede que algunas bases de datos no tengan archivos de datos secundarios, mientras que otras pueden tener varios archivos de datos secundarios

• La extensión de nombre de archivo recomendada para los archivos de datos secundarios es .ndf.

• Archivos de registro Los archivos de registro almacenan toda la información de registro que se utiliza para recuperar la base de datos

• Como mínimo, tiene que haber un archivo de registro por cada base de datos, aunque puede haber varios

• La extensión de nombre de archivo recomendada para los archivos de registro es .ldf.

Page 94: SQL

ARCHIVOS BASE DE DATOS• SQL Server no exige las extensiones de nombre de

archivo .mdf, .ndf y .ldf, pero estas extensiones ayudan a identificar las distintas clases de archivos y su uso

• En SQL Server, las ubicaciones de todos los archivos de una base de datos se guardan tanto en el archivo principal de la base de datos como en la base de datos maestra

Page 95: SQL

LOG ON (ARCHIVO LOG)• Especifica que los archivos de disco utilizados para

almacenar el registro de la base de datos (archivos de registro) se definen explícitamente

• LOG ON va seguido de una lista de elementos <filespec> separados por comas que definen los archivos de registro

• Si no se especifica LOG ON, se crea automáticamente un archivo de registro cuyo tamaño es el 25 por ciento de la suma de los tamaños de todos los archivos de datos de la base de datos, o 512 KB, lo que sea mayor.

• LOG ON no se puede especificar en una instantánea de base de datos

Page 96: SQL

Crear una base de datos sin especificar archivosUSE master; GO IF DB_ID (N'mytest') IS NOT NULL DROP

DATABASE mytest; GO

CREATE DATABASE mytest; GO -- Verify the database files and sizesSELECT name, size, size*1.0/128 AS [Size in MBs]

FROM sys.master_files WHERE name = N'mytest'; GO

Page 97: SQL

Crear una base de datos que especifica los archivos de datos y de registro de transaccionesUSE master;

GO

IF DB_ID (N'Sales') IS NOT NULL DROP DATABASE Sales;

GO

-- Get the SQL Server data path

DECLARE @data_path nvarchar(256);

SET @data_path = (SELECT SUBSTRING(physical_name, 1, CHARINDEX(N'master.mdf', LOWER(physical_name)) - 1) FROM master.sys.master_files WHERE database_id = 1 AND file_id = 1);

-- execute the CREATE DATABASE statement

EXECUTE ('CREATE DATABASE Sales

ON

( NAME = Sales_dat,

FILENAME = '''+ @data_path + 'saledat.mdf'',

SIZE = 10,

MAXSIZE = 50,

FILEGROWTH = 5 )

LOG ON

( NAME = Sales_log,

FILENAME = '''+ @data_path + 'salelog.ldf'',

SIZE = 5MB,

MAXSIZE = 25MB,

FILEGROWTH = 5MB )' );

GO

Page 98: SQL

Crear una base de datos mediante la especificación de múltiples archivos de datos y de registro de transaccionesUSE master;

GO

IF DB_ID (N'Archive') IS NOT NULL DROP DATABASE Archive;

GO

-- Get the SQL Server data path

DECLARE @data_path nvarchar(256);

SET @data_path = (SELECT SUBSTRING(physical_name, 1, CHARINDEX(N'master.mdf', LOWER(physical_name)) - 1) FROM master.sys.master_files WHERE database_id = 1 AND file_id = 1);

-- execute the CREATE DATABASE statement

EXECUTE ('CREATE DATABASE Archive

ON PRIMARY

(NAME = Arch1,

FILENAME = '''+ @data_path + 'archdat1.mdf'',

SIZE = 100MB,

MAXSIZE = 200,

FILEGROWTH = 20),

( NAME = Arch2, FILENAME = '''+ @data_path + 'archdat2.ndf'',

SIZE = 100MB,

MAXSIZE = 200,

FILEGROWTH = 20),

( NAME = Arch3, FILENAME = '''+ @data_path + 'archdat3.ndf'',

SIZE = 100MB,

MAXSIZE = 200,

FILEGROWTH = 20)

LOG ON

(NAME = Archlog1,

FILENAME = '''+ @data_path + 'archlog1.ldf'',

SIZE = 100MB,

MAXSIZE = 200,

FILEGROWTH = 20),

(NAME = Archlog2,

FILENAME = '''+ @data_path + 'archlog2.ldf'',

SIZE = 100MB,

MAXSIZE = 200,

FILEGROWTH = 20)' );

GO

Page 99: SQL

Configurar la Base de Datos

Se pueden modificar las opciones deconfiguración de las bases de datosexcepto el nombre, la ruta de los ficherosy el “Nombre de intercalación”.

Para acceder a la opción de propiedadespulsamos con el botón derecho del ratónen la base de datos que vamos a modificary seleccionamos propiedades.

Page 100: SQL

Mónica Frey Grimm

Copia de SeguridadUna de las cosas más importantes respecto a nuestra base de datos son las copias deseguridad, que debemos hacerlas regularmente por lo que pudiera pasar, teniendo una copiade seguridad de la base de datos, si por cualquier motivo tenemos un desastre o hay querestaurar la base de datos, siempre podremos hacerlo recuperando la copia.

Las copias debemos hacerlas en función de la utilización de la base de datos, si por ejemplouna base de datos no se actualiza nada más que una vez a la semana, la copia de seguridad lapodemos hacer después de actualizar la base de datos, si por el contrario se actualiza deforma constante es bueno realizar las copias diarias o dos veces al día.

Las copias y restauración de las bases de datos al igual que casi todo lo que queramos hacerdesde SQL Server tenemos varias formas de hacerlo, desde el administrador corporativo quees la forma más usual de trabajar con SQL Server, en entorno gráfico o medianteprogramación a través de Transact-SQL o desdeVB,ASP, etc., con SQL-DMO.

Page 101: SQL

Copia de SeguridadPara crear copias de seguridad desde eladministrador corporativo, seleccionamos la basede datos de la que queremos crear una copia deseguridad y con el botón derecho del ratónseleccionamos Todas las tareas -> Copia de seguridad

de la base de datos.

Podemos decir que clase de copia queremoshacer:

• Base de datos completa.• Diferencial, esta forma solo copiara loscambios realizados desde la última copia.• Copiar el registro de transacciones.

Page 102: SQL

Copia de Seguridad

Seleccionamos “agregar” y saldrá una pantalla donde especificaremos la ruta y el nombre del ficheroque queremos utilizar como copia, el fichero puede ser de nueva creación o uno existente, opodemos especificar un dispositivo ya existente o crear uno nuevo.

Un dispositivo de copia de seguridad no es más que un archivo igual que el que hubieramosseleccionado en la opción superior, pero estos a diferencia de los anteriores, podemos adminístraloy ver su contenido desde la opción del nodo Administración -> Copias de seguridad.

Una vez seleccionado donde alojaremos la copia, debemos elegir si sobrescribimos las copias quetenga el fichero o la nueva copia se anexa a las ya existentes en el fichero (en caso de ser unfichero con copias existentes).

Una vez hecho ésto seleccionamos la ficha “opciones” y habilitamos la opción “Comprobar la copia deseguridad al concluir”, para que una vez finalizada la copia de seguridad compruebe si se ha realizadocorrectamente.

Page 103: SQL

Copia de Seguridad utilizando Transact-SQLUSE masterEXEC sp_addumpdevice 'disk', 'pruebas_1','G:\microsoft sql server espanol\MSSQL$TORMENTA\BACKUP\BACKUP.dat'-- Backup de la base de datosBACKUP DATABASE PRUEBAS TO Pruebas_1

� USE Master. Utilizamos la base de datos “Master” para ejecutar la primera sentenciaporque el procedimiento almacenado que ejecutamos para crear un dispositivo estaalojado en la base de datos “Master”.

� EXEC sp_ addumpdevice. Utilizamos éste procedimiento almacenado de la base dedatos “Master” para crear un dispositivo de copia de seguridad. Parámetros que recibe:

– disk, especifica que el archivo de seguridad será un archivo de disco.

– pruebas_1, nombre lógico que le damos al dispositivo de copia y es el que se verá desde eladministrador de copias.

– ruta, ruta física donde se alojará el fichero en disco, ruta y nombre del fichero.

� BACKUP , a continuación hacemos un Backup (copia de seguridad) de la base de datos PRUEBAS al dispositivo Pruebas_1.

Page 104: SQL

Copia de Seguridad

Lo explicado hasta el momento sobre lascopias de seguridad esta muy bien y es muyútil, pero, muy pesado si cada día tenemosque entrar en el administrador corporativopara hacer una copia de seguridad, y muypeligroso si nos olvidamos, por eso hay loque se llama “programación de copias deseguridad”, con esta utilidad programamos latarea de copias de seguridad para que serealicen solas en una determinada fecha.

Page 105: SQL

Copia de SeguridadPara programar el día y hora que serealizarán las copias realizamos lasmisma operaciones que para crearuna copia de seguridad pero tenemosque habilitar la opción “programar”, enla imagen de la pantalla anteriorpodemos ver esa opción al final de lapantalla, pulsando el botón podremosseleccionar día y hora para que lacopia de seguridad se ejecute sola.

Esta tarea queda guardad en la opcióndel Agente de SQL Server “trabajos”.

Page 106: SQL

Restaurar copias de seguridad

Si se pueden hacer copias deseguridad lo lógico es que estascopias se puedan restaurar. Pararestaurar una copia de seguridadtenemos que seleccionar la base dedatos deseada y con el botónderecho pulsamos en la opción Todas

las tareas -> Restaurar base de datos.

Page 107: SQL

Restaurar copias de seguridadEn esta pantalla, si restauramos la base de datos desde un fichero, seleccionamos “desdedispositivo”, pulsamos el botón “dispositivo” y en la siguiente pantalla pulsamos “agregar” yseleccionamos el fichero de copias de seguridad que queremos restaurar. Las opciones derestauración son las mismas que las de copias, podemos restaurar la base de datos:

� Completa.� Diferencial.� Registro deTransacciones.

En la siguiente ficha de esta pantalla “opciones”, seleccionamos las opciones derestauración de la copia:

� Forzar restauración sobre la base de datos existente, forzamos a que se restaure lacopia sobrescribiendo el fichero existente.

� Restaurar archivos de base de datos como, especifica el nombre del archivo físico y lógicode la restauración.

Page 108: SQL

Restaurar copias de seguridad

Del mismo modo que podemos hacer copias de seguridad desde código transact-SQL oSQL-DMO, podemos restaurar bases de datos. La instrucción a utilizar es “Restoredatabase” , éste al igual que el “Backup” son amplios en parámetros y modos de uso porese motivo lo más recomendable es mirar la ayuda de SQL Server (libros en pantalla)donde se puede encontrar un apartado completo dedicado al transact-SQL (Referencia deTransact-SQL)

Page 109: SQL

CREATE TABLE• Las tablas las suele crear el ADB (Administrador de la Base de Datos),

aunque un usuario también puede crearlas, si tiene permiso (tablas particulares)

• Normalmente las tablas SQL se usan en sistemas multiusuario, por varios usuarios a la vez, por lo que normalmente serán definidas por el ABD• Las pondrá a disposición de quien las necesite• El usuario tiene que tener autorización para ello

• Para crear nuevos objetos se utiliza el lenguaje DDL: Lenguaje de Definición de Datos

• Entre los objetos que se pueden crear están: Tablas, Vistas, Índices, Sinónimos, Condiciones de integridad referencial, Bases de datos, usuarios, trigger, función, procedimiento almacenado, etc.

• Cuando se crea un objeto, se almacena en el catálogo la definición del objeto y sus características, para poder ser usado, y una vez no es necesario, se borra el objeto del catálogo

Page 110: SQL

CREATE TABLE• IDENTIFICADOR

• Es el nombre que se utiliza para designar un campo, tabla, vista, índice, etc. (un objeto del SGBD)

• Máximo de 10 caracteres (depende del sistema)

• Debe empezar por una letra mayúscula

• Si se escribe entre comillas se puede usar tanto letras mayúsculas como minúsculas (se especifica tal y como se pone)

Page 111: SQL

CREATE TABLE• NOMBRE DE TABLA

• Como ya se indicó consta de tres partes si el sistema es distribuido, y sólo de dos si el sistema no es distribuido.

• Propietario.Tabla.Campo

• Propietario• Identificador que define al usuario propietario de la tabla

• Cuando un usuario se conecta al SGBD para trabajar con él tiene un identificador, de uso personal, asignado por el Administrador del Sistema

• El propietario de una tabla puede acceder y modificar datos y puede autorizar a otros usuarios a consultar y modificar datos de las tablas de su propiedad (mediante GRANT).

• El creador y propietario de una tabla es quien la define (CREATE)

• Tabla:• Es el identificador que se pone como nombre a la tabla

• Pueden haber dos o más tablas con el mismo nombre si son de propietarios distintos

• Cuando se escribe una sentencia SQL de manipulación de datos, se puede o no poner el identificador propietario para referirse a una tabla. Si no se pone, el sistema ejecuta la sentencia como si el propietario de la tabla es el usuario que la manda a ejecutar (utilizando el identificador personal del usuario)

• Campo• Columna de la tabla

• No debe existir ambigüedad al referirse a un campo ( si un campo está repetido en más de una tabla, hay que poner el nombre de la tabla, y si existen varias tablas con el mismo nombre, el nombre del propietario)

Page 112: SQL

CREATE TABLE

• Sirve para definir tablas en un SGBD• Antes de referirse a una tabla, ésta debe estar definida en el catálogo

• Tabla• Nombre asignado a la tabla que se va a crear• Si no se pone lo contrario, el propietario es el usuario que está

ejecutando la orden• Col1, Col2, ...:

• Nombres asignados a los campos.• Tipo1, Tipo2, ...:

• Tipo de datos del campo

CREATE TABLE Tabla [Col1 Tipo1 [NOT NULL] [CHECK restricciones de columna]] [, Col2 Tipo2 [NOT NULL] [CHECK restricciones de columna]] …

Page 113: SQL

CREATE TABLE• Tipos de datos

• INTEGER, INT: Entero largo.• SMALLINT: Entero corto.• FLOAT, REAL: Punto flotante.• DECIMAL(p,s): Decimal con precisión p, escala s.• CHARACTER(n), CHAR(n): Alfanumérico de

longitud fija.• VARCHAR(n): Alfanumérico de longitud variable.• DATE: Fecha.• TIME: Hora.• TIMESTAMP: Instante.

Page 114: SQL

CREATE TABLE

NOT NULLNo se admite el valor nulo como dato en ese campo (hay que poner algo)

CREATE TABLE Tabla [Col1 Tipo1 [NOT NULL] [CHECK restricciones de columna]] [, Col2 Tipo2 [NOT NULL] [CHECK restricciones de columna]] …

Page 115: SQL

CREATE TABLE• CREATE TABLE Prueba

(Código NUMBER (3) CHECK (Código BETWEEN 1 AND 5))

• CREATE TABLE Empleado• (idemp CHAR(4) PRIMARY KEY,• nombre CHAR(40) NOT NULL,• salario NUMBER(10) NOT NULL,• iddep CHAR(2) NOT NULL,• FOREIGN KEY (iddep) REFERENCES departamento)

• La instrucción CREATE TABLE crea la tabla y no su contenido (está vacía). Para incluir registros en ella se usa la instrucción INSERT

• Un usuario no puede definir tablas sino ha sido autorizado para ello

Page 116: SQL

CONSTRAINTS• Permiten definir la manera en que Database Engine

(Motor de base de datos) exigirá automáticamente la integridad de una BD

• Las restricciones definen reglas relativas a los valores permitidos en las columnas y constituyen el mecanismo estándar para exigir la integridad

Page 117: SQL

CONSTRAINTS[ CONSTRAINT constraint_name ]

{ { PRIMARY KEY | UNIQUE } [ CLUSTERED | NONCLUSTERED ] [ WITH FILLFACTOR =

fillfactor | WITH ( < index_option > [ , ...n ] ) ] [ ON { partition_scheme_name ( partition_column_name ) | filegroup | "default" } ] | [ FOREIGN KEY ] REFERENCES [ schema_name . ] referenced_table_name [ ( ref_column ) ]

[ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]

[ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ] [ NOT FOR REPLICATION ] |

CHECK [ NOT FOR REPLICATION ] ( logical_expression ) }

Page 118: SQL

CONSTRAINTS• Tipos de constraints

• NULL/NOT NULL• La columna no acepta valores nulos

• CHECK• Limitación de los valores que se pueden asignar a una

columna• UNIQUE

• Exigen la unicidad de los valores de un conjunto de columnas

• En una restricción UNIQUE, dos filas de la tabla no pueden tener el mismo valor en las columnas

• Las claves principales también exigen exclusividad, pero no aceptan NULL como uno de los valores exclusivos

Page 119: SQL

CONSTRAINTS• Tipos de constraints

• PRIMARY KEY• Identifican la columna o el conjunto de columnas

cuyos valores identifican de forma exclusiva cada una de las filas de una tabla

• Dos filas de la tabla no pueden tener el mismo valor de clave principal

• No se pueden asignar valores NULL a ninguna de las columnas de una clave principal

• Se recomienda utilizar una columna pequeña de tipo entero como clave principal

• Todas las tablas tienen que tener una clave principal

Page 120: SQL

CONSTRAINTS• Tipos de constraints

• FOREIGN KEY• identifican y exigen las relaciones entre las tablas• Una clave externa de una tabla apunta a una clave candidata de otra tabla• No se puede insertar una fila que tenga un valor de clave externa, excepto

NULL, si no hay una clave candidata con dicho valor• ON DELETE controla las acciones que se llevarán a cabo si intenta eliminar

una fila a la que apuntan las claves externas existentes• NO ACTION especifica que la eliminación produce un error• CASCADE especifica que también se eliminan todas las filas con claves externas que

apuntan a la fila eliminada• SET NULL especifica que todas las filas con claves externas que apuntan a la fila

eliminada se establecen en NULL• SET DEFAULT especifica que todas las filas con claves externas que apuntan a la fila

eliminada se establecen en sus valores predeterminados

• ON UPDATE define las acciones que se llevarán a cabo si intenta actualizar un valor de clave candidata a la que apuntan las claves externas existentes

• Opciones NO ACTION, CASCADE, SET NULL y SET DEFAULT

Page 121: SQL

CONSTRAINTS• Tipos de constraints

• CLUSTERED/NOT CLUSTERED• Indica que se ha creado un índice agrupado o no agrupado para la restricción

PRIMARY KEY o UNIQUE• De forma predeterminada, el valor de las restricciones PRIMARY KEY es

CLUSTERED, y el de las restricciones UNIQUE es NONCLUSTERED• En una instrucción CREATE TABLE, se puede especificar CLUSTERED tan

sólo para una restricción. Si especifica CLUSTERED para una restricción UNIQUE y especifica también una restricción PRIMARY KEY, el valor predeterminado de PRIMARY KEY es NONCLUSTERED.

• DEFAULT• Especifica el valor suministrado para la columna cuando no se ha especificado

explícitamente un valor durante la inserción• Las definiciones DEFAULT se pueden aplicar a cualquier columna excepto a

las definidas como timestamp o a aquellas que tengan la propiedad IDENTITY

Page 122: SQL

CONSTRAINTS• Tipos de constraints

• IDENTITY • Indica que la nueva columna es una columna de identidad• Cuando se agrega una nueva fila a la tabla, el Database Engine (Motor de base

de datos) proporciona un valor incremental único para la columna• Las columnas de identidad se utilizan normalmente con las restricciones

PRIMARY KEY como identificadores de fila únicos de la tabla• La propiedad IDENTITY se puede asignar a las columnas tinyint, smallint, int, bigint, decimal(p,0) o numeric(p,0)

• Sólo se puede crear una columna de identidad para cada tabla• Las restricciones DEFAULT y los valores predeterminados enlazados no se

pueden utilizar en las columnas de identidad• En este caso, deben especificarse el valor de inicialización y el incremento, o

ninguno de esto valores. Si no se especifica ninguno, el valor predeterminado es (1,1).

• seed Es el valor que se utiliza para la primera fila cargada en la tabla.• increment Es el valor incremental que se agrega al valor de identidad de la

fila cargada anterior.

Page 123: SQL

CONSTRAINTS: Ejemplos• CREATE TABLE cust_sample ( cust_id int PRIMARY

KEY, cust_name char(50), cust_address char(50), cust_credit_limit money, CONSTRAINT chk_idCHECK (cust_id BETWEEN 0 and 10000 ));

• CREATE TABLE part_sample (part_nmbr int PRIMARY KEY, part_name char(30), part_weight decimal(6,2), part_color char(15) );

Page 124: SQL

CONSTRAINTS: Ejemplos• CREATE TABLE order_part (order_nmbr int,

part_nmbr int FOREIGN KEY REFERENCES part_sample(part_nmbr) ON DELETE NO ACTION, qty_ordered int);

Page 125: SQL

ALTER TABLE• Se utiliza para modificar la estructura de la tabla• Los motivos por los que se modifica la estructura de una tabla pueden ser:

• Borrar alguna columna• Cambiar el tipo de alguna columna• Cambiar la longitud de algún atributo• Modificar el orden de las columnas• Añadir nuevas columnas

• ALTER TABLE Tabla • [ADD (Col1 Tipo1 [NOT NULL] [CHECK restricciones de columna]]• [ADD (Col1 Tipo1 [NOT NULL] [CHECK restricciones de columna]] ...• [MODIFY (Col1 Tipo1 [NOT NULL] [CHECK restricciones de columna]]• [MODIFY (Col1 Tipo1 [NOT NULL] [CHECK restricciones de columna]] ...• [DROP (Col1)]…

• ALTER TABLE asignatura• ADD (FOREIGN KEY (idprofesor) REFERENCES profesor)

Page 126: SQL

ALTER TABLEALTER en SQL SERVER 2008

• ALTER TABLE tabla

• DROP COLUMN col1 (Borrar columna)

• ALTER COLUMN col1 (Modificar columna)

• ADD col2 tipo (Añadir columna)

Page 127: SQL

DROP TABLE• Instrucción que se utiliza para borrar una tabla• Borra su contenido y su estructura• Si hay claves ajenas no se puede borrar (primero hay que

borrar la otra tabla)• Borra del catálogo la descripción de la tabla• Se pierden los datos que contiene la tabla• Si hay alguna vista basada en la tabla también se pierde• Se pierden los objetos basados en esta tabla (vistas, índices,

sinónimos, etc.). Borrado en cascada.

• DROP TABLE Tabla

Page 128: SQL

CREATE VIEW• Se utiliza para definir una vista

• CREATE VIEW Vista [(Col1 [, Col2] ...] AS Subselect [WITH CHECK OPTION] [READ ONLY]

• Subselect: Sentencia SELECT sobre la que se va a realizar la vista (la que se va a grabar en el catálogo

• Vista: Nombre que se le va asignar a la vista

• La SUBSELECT puede tener: SELECT, FROM, WHERE, GROUP BY, HAVING

• La SUBSELECT no puede tener: UNION, INTERSECT, MINUS, ORDER BY

• El nombre de la vista se especifica de forma similar a una tabla

• Si no se pone el nombre del usuario el sistema lo pone automáticamente

• Propietario.Vista

• Col1, Col2, ...:

• Indica que las columnas que se van a evaluar en la Subselect se les va a dar ese nombre (es decir, que tiene distinto nombre en la vista que en la tabla desde donde se crean)

• Es opcional, si no se ponen se mantienen los mismos nombres

• Es obligatorio poner nombres en las columnas si los campos de la Subselect son calculados

• Si se especifica nombre en la columna debe tener el mismo número de columnas que la Subselect

• También se puede cambiar en las vistas el orden de las columnas (especificándolos en la SELECT con el nuevo orden).

• WITH CHECK OPTION:

• El dato a insertar cumple las restricciones puestas sobre las vista

• Indica que las operaciones de modificación (INSERT, UPDATE) realizadas sobre la vista, deben comprobar la condición de creación de la vista (el WHERE de la SELECT de la vista)

• READ ONLY: Si se pone esta opción no se puede escribir sobre la vista (sólo consultar)

Page 129: SQL

CREATE VIEWUSE AdventureWorks ; GO IF OBJECT_ID ('hiredate_view', 'V') IS NOT NULL DROP VIEW hiredate_view ; GO CREATE VIEW hiredate_view

AS SELECT c.FirstName, c.LastName, e.EmployeeID,

e.HireDateFROM HumanResources.Employee e JOIN

Person.Contact c on e.ContactID = c.ContactID ; GO

Page 130: SQL

CREATE VIEW• WITH ENCRYPTION (SQL SERVER)• Se muestran columnas calculadas, columnas con el nombre cambiado y varias

columnasUSE AdventureWorks ; GO IF OBJECT_ID ('Purchasing.PurchaseOrderReject', 'V') IS NOT NULL DROP

VIEW Purchasing.PurchaseOrderReject ;GO CREATE VIEW Purchasing.PurchaseOrderReject WITH ENCRYPTION

AS SELECT PurchaseOrderID, ReceivedQty, RejectedQty, RejectedQty / ReceivedQty AS RejectRatio, DueDateFROM Purchasing.PurchaseOrderDetailWHERE RejectedQty / ReceivedQty > 0 AND DueDate > CONVERT(DATETIME,'20010630',101) ; GO

Page 131: SQL

CREATE VIEW• WITH CHECK OPTION (SQL SERVER)• Vista que hace referencia a cinco tablas y permite modificar datos

aplicados únicamente a los empleados que viven en Seattle.USE AdventureWorks ; GO IF OBJECT_ID ('dbo.SeattleOnly', 'V') IS NOT NULL DROP VIEW dbo.SeattleOnly ;GO

CREATE VIEW dbo.SeattleOnly AS SELECT c.LastName, c.FirstName, a.City, s.StateProvinceCodeFROM Person.Contact AS c JOIN HumanResources.Employee AS e ON c.ContactID = e.ContactID JOIN HumanResources.EmployeeAddress AS ea ON e.EmployeeID = ea.EmployeeID JOIN Person.Address AS a ON ea.AddressID = a.AddressID JOIN Person.StateProvince AS s ON a.StateProvinceID = s.StateProvinceID WHERE a.City = 'Seattle' WITH CHECK OPTION ; GO

Page 132: SQL

CONSULTAR Y ACTUALIZAR VISTA• Una vista puede consultarse como una tabla más y para el usuario es como una tabla

SELECT Col1 [, Col2] ... FROM Vista• Si se hace una actualización sobre una vista (INSERT, UPDATE, DELETE), éstas deben ser repercutidas en las

tablas de base por el SGBD

• No siempre es posible:

• Si hay campos calculados• Si contiene una Yunción (JOIN: SELECT sobre varias tablas)• Tienen filas no repetidas (DISTINCT en la SELECT)• Tienen funciones colectivas• Tienen agrupamiento (GROUP BY, HAVING)• Tienen sentencias subordinadas que hacen referencia a la misma tabla• Se basa en otra vista que no es actualizable.• Tienen campos que provienen de cálculos, funciones, etc.

• SELECT * FROM VISTA1• DELETE FROM Vista1 WHERE condición ...• INSERT INTO Vista 1 Col1, Col2, ... VALUES Val1, Val2, ...• UPDATE Vista1 SET Col1=expresión1 [,Col2=expresión2] ...

[WHERE condición]

Page 133: SQL

DROP VIEW• DROP VIEW

• Se utiliza para destruir una vista, y borrarla del catálogo

DROP VIEW Vista

• Vista: Nombre de la vista a destruir• Se borra del catálogo la vista (ya no se admiten referencias a

ella)• Al destruir una vista se pierde también las vistas que se

basen en ella, si las hay (se puede producir una destrucción en cadena)

Page 134: SQL

VISTAS• UTILIDAD DE LAS VISTAS

• Prohibir el acceso a datos confidenciales. Se pueden hacer vistas sobre tablas privadas y hacer públicos parte de los datos (Vistas)

• Si una tabla contiene datos que no deben ser accesibles a algunos usuarios, se puede crear una vista en la que estos datos no aparezcan y autorizar a estos usuarios a trabajar con la vista y no con la tabla (datos protegidos). Se pueden esconder campos o registros que cumplan ciertas condiciones

• Permiten a distintos usuarios ver los mismos datos de diferentes formas (todos trabajan con la misma base de datos pero con distinta visión)

• Simplificar la percepción del usuario. La vista permite al usuario concentrarse sólo en los datos de su interés personal, y hacer caso omiso de los otros datos

• Simplificar la formulación de consultas complejas o repetitivas. Si una consulta es complicada y debe ser usada por usuarios sin mucha experiencia, se crea una vista y se deja hecha para su uso, a través de SELECTS sencillas. También se puede ahorrar tiempo (aunque el usuario no sea novato) si es una consulta larga o repetitiva, haciendo una vista, y trabajar con ella en lugar de con las tablas

• Aumentar la independencia de los programas con respecto a los datos (independencia lógica de los datos). Un SGBD tiene independencia física de los datos porque los usuarios no tienen nada que ver en la estructura física de los datos almacenados (no saben como se guardan los datos en disco). Y tiene independencia lógica de los datos porque los usuarios y los programas son independientes de la estructura lógica de la base de datos (reestructuración y crecimiento (incluir campos nuevos)). Si se cambian nombres a tablas (por cualquier razón), o se desglosa una tabla en dos, las sentencias SQL incluidas en los programas que se refieren a estas tablas, deben ser revisadas y cambiadas. Si se define una vista sobre la nueva estructura dejando en la vista los mismos nombres de las tablas viejas, el programa sigue valiendo

Page 135: SQL

COMPOSICIÓN DE CONSULTAS

• Una composición de consultas es la unión del resultado de varias consultas formando una tabla única

• Consulta compuesta

• Es una consulta que resulta de unir otras dos (que también pueden ser compuestas)

• Para poderse realizar, las dos SELECTS deben tener el mismo número de columnas y del mismo tipo en cada posición relativa, obteniendo una tabla con las mismas columnas y tipos

• TIPOS: Union, Intersección, Minus

Page 136: SQL

COMPOSICIÓN DE CONSULTAS• UNION

SELECT __________ UNION SELECT __________

• Se produce una tabla que contiene todas las filas resultantes del primer SELECT más todas las filas resultantes del segundo SELECT

• Si hay filas iguales se eliminan para que no hayan repeticiones• Dos filas son iguales si todos sus valores son iguales• Similar al operador OR

• UNION ALL.SELECT __________ UNION ALL SELECT __________

• Tabla que contiene todas la filas resultantes del primer SELECT más todas las resultantes del segundo SELECT, incluidas las que sean iguales

Page 137: SQL

COMPOSICIÓN DE CONSULTAS

• INTERSECT

SELECT __________ INTERSECT

SELECT __________

• Halla los registros comunes a dos tablas

• Similar al operador AND

Page 138: SQL

COMPOSICIÓN DE CONSULTAS• MINUS o EXCEPT

SELECT __________ EXCEPT SELECT ________SELECT __________ MINUS SELECT _________

• Halla los elementos que pertenecen al primer SELECT y que no pertenecen al segundo

• Toma todos los resultados de la primera instrucción SQL, y luego sustrae aquellos que se encuentran presentes en la segunda instrucción SQL para obtener una respuesta final

• Si la segunda instrucción SQL incluye resultados que no están presentes en la primera instrucción SQL, dichos resultados se ignoran

Page 139: SQL

ÍNDICES• Tablas de gran tamaño, el proceso de recuperación de datos puede

ser lento• Por ejemplo

• Para un pedido hay que recorrer la tabla de líneas de pedido completa, de principio a fin

• Mecanismo para acelerar las búsquedas• Índice

• Lista de claves con una estructura tal que el servidor puede realizar búsquedas de forma muy rápida

• También puede establecer el orden en que se almacenan las filas en una tabla

• Cada vez que se inserta, modifica o elimina de una tabla de la cual depende uno o varios índices, el servidor tiene que actualizar la tabla de datos y todos los índices que existan (consistencia información)

Page 140: SQL

ÍNDICES• El diseño físico es muy dependiente del SGBD que se use. En él se describen las distintas

formas de almacenar los datos, índices a utilizar, rutinas de compresión, parámetros físicos de la base de datos, etc

• En una sentencia SELECT se seleccionan ciertos registros en función de unas condiciones• Para recuperar los registros pedidos se puede hacer leyendo completamente la tabla o tablas

participantes (búsqueda secuencial)

• Si la tabla tiene muchos registros esto es muy lento• Los índices son ficheros auxiliares que se utilizan para leer directamente el registro necesario

(sin pasar por los registros previos), lo que se traduce en más rapidez• Un índice es una estructura de datos que permite acceder a las filas de una tabla siguiendo el

orden de los valores de alguna o algunas de sus columnas• El SGBD trabaja con bloques (unidad de transferencia de datos entre el disco y la memoria

en las operaciones de Lectura/Escritura), generalmente 4096 Bytes. Para obtener un registro por lo menos se ha de ver un bloque

• Un índice transforma el contenido de uno o más campos en una dirección. Si se da el valor de un campo (o varios), la dirección indica donde está (acceso directo a los datos)

• El índice suele guardarse en un fichero auxiliar donde se guardan todos los valores de los campos indexados ordenados y su dirección de bloque

Page 141: SQL

ÍNDICES• El SGBD se encarga de mantener estos índices• Cada vez que se inserte o borre una fila hay que actualizar

los índices, lo que supone más tiempo• En una tabla se pueden definir uno o varios índices o

ninguno, sobre uno o varios campos• Se pueden crear los índices antes de que la tablas tenga

datos• Se pueden crear índices en tablas o vistas• Conclusión:

• Los índices aceleran las búsquedas• Los índices ralentizan las actualizaciones• Hay que pensar bien donde poner los índices

Page 142: SQL

ÍNDICES• Un índice debe crearse sobre una tabla o vista• Índices: Agrupados y no agrupados• Agrupados (CLUSTERED)

• Sólo puede haber un índice agrupado por tabla• Establece el orden de las filas en la tabla a la que pertenece• Si no se pone índice agrupado las filas se almacenan en el

orden en que se introducen• Hace más fáciles las búsquedas en las tablas pero las

operaciones no son añadir fila y ya está (hay que insertarlas y cambiar su orden)

• Por defecto el índice agrupado es el índice agrupado a la clave principal, si hay

• Los índices no agrupados hacen referencia a las filas de datos correspondientes, basándose en el índice agrupado

Page 143: SQL

ÍNDICES: CREATE INDEX• Generalmente el ABD es el que crea y destruye los índices, teniendo en

cuenta cuales pueden ser los más usados• El SGBD se encargará de usarlos si existen• Para crear un índice hay que especificar principalmente la tabla sobre la que

se va a crear y la columna o columnas que se van a utilizar para establecer el orden.

CREATE [UNIQUE] INDEX índice ON tabla (Col1 [ASC / DESC] [, Col2 [ASC/DESC] ] ...) [CLUSTERED] [WITH CHECK OPTION]

• Índice: Nombre que se le asigna al índice• Tabla: Tabla sobre la que se define el índice• DESC: Si se especifica, el orden del índice es de mayor a menor, si no se

pone es ASC por defecto• UNIQUE: Indica que los valores indexados no pueden repetirse (si se

intenta insertar o actualizar un valor repetido da un error). El índice no puede contener duplicados. Puede haber sólo un registro con campo nulo

Page 144: SQL

ÍNDICES: CREATE INDEXCREATE [UNIQUE] INDEX índice ON tabla (Col1 [ASC / DESC] [, Col2 [ASC/DESC] ] ...) [CLUSTERED] [WITH CHECK OPTION]

• CLUSTER

• El índice CLUSTER (sólo puede haber uno por tabla) indica que las filas de la tabla correspondiente deben estar almacenadas físicamente según el orden de las columnas que impone el índice. En la inserción CLUSTER se almacena el registro físicamente tan próximo como sea posible a su posición de orden)

• Puede tener ventajas en ciertas operaciones• Crea un índice en el que el orden lógico de los valores de clave determina el orden físico de las

filas correspondientes de la tabla• Cree el índice agrupado antes de crear los índices no agrupados. Los índices no agrupados

existentes en las tablas se vuelven a generar al crear un índice agrupado.• WITH CHECK OPTION

• Exige que todas las instrucciones de modificación de datos ejecutadas en la vista (INSERT, UPDATE, DELETE) sigan los criterios establecidos en la SELECT de la vista.

• Cuando una fila se modifica mediante una vista, WITH CHECK OPTION garantiza que los datos permanezcan visibles en toda la vista después de confirmar la modificación

• Una vista se crea con una condición (vuelo de iberia), se inserta un registro en la vista (vuelo de binter). El vuelo se crea en la tabla, pero si se seleccioina la vista no está (no cumple la condición). Con CHECK OPTION no permitiría el INSERT sobre la vista

Page 145: SQL

ÍNDICES: CREATE INDEXEjemplo:

CREATE TABLE t1 (a int, b int, c AS a/b);

CREATE UNIQUE CLUSTERED INDEX Idx1 ON t1(c);

INSERT INTO t1 VALUES (1, 0);

Page 146: SQL

ÍNDICES: CREATE INDEXEjemplo: Crear un índice no agrupado sencillo

CREATE INDEX IX_ProductVendor_VendorID ON Purchasing.ProductVendor (VendorID);

Page 147: SQL

ÍNDICES: CREATE INDEXEjemplo: Crear un índice compuesto no agrupado

CREATE NONCLUSTERED INDEX IX_SalesPerson_SalesQuota_SalesYTD

ON Sales.SalesPerson (SalesQuota, SalesYTD);

Page 148: SQL

ÍNDICES: CREATE INDEXEjemplo: Crear un índice no agrupado único

CREATE UNIQUE INDEX AK_UnitMeasure_Name ON Production.UnitMeasure(Name);

Page 149: SQL

ÍNDICES: DROP INDEX

• Sentencia que se utiliza para destruir un índice (borrarlo del catálogo)

DROP INDEX índice

• Si se destruye una tabla sobre la que hay índices definidos, también se destruyen éstos automáticamente

Page 150: SQL

ÍNDICES• CUANDO USAR UN ÍNDICE

• Definir un índice en el campo clave, para asegurar que éste es único, además de ser un campo de acceso frecuente

• Usar en campos claves alternativas (DNI, Número de la Seguridad Social, número de cuenta corriente, etc.)

• Usar un índice para cada clave ajena, puesto que éstas son utilizadas en las yunciones (relaciones entre tablas)

• En campos que se usan frecuentemente en SELECTS• En campos que se necesiten tener ordenados• Si las tablas tienen pocas filas no es muy conveniente los

índices• Más índices de los debidos supone espacio y tiempo perdido• Menos índices de los debidos suponen lentitud

Page 151: SQL

ÍNDICES� INTEGRIDAD REFERENCIAL

◦ Consiste en garantizar que cualquier clave ajena se corresponde con una clave primaria o es nula (por ejemplo, no hay empleados que pertenezcan a algún departamento inexistente)

◦ Esto es misión del SGBD (no del usuario, que si está haciendo una consulta interactiva no sabe como están los datos)

◦ Utilizando la integridad referencial se aumenta la calidad de los datos y se evitan errores

◦ Cuando se da de alta a un empleado, por ejemplo, es el SGBD el que verifica que existe el departamento, o cualquier clave ajena (y no el programador)

◦ También se comprueba, si se intenta borrar un departamento y tiene asignados empleados

◦ Rechazar operación si tiene empleados asignados: Restringir.

◦ Suprimir el departamento y los empleados: Propagar en cascada.

◦ Suprimir el departamento y poner a nulo el campo departamento en empleados: Hacer nula la clave ajena

◦ Es misión del ABD decidir si la integridad la realiza el SGBD o el programa del usuario (es mejor que la controle el Gestor por facilidad y por calidad de los datos)

Page 152: SQL

SINÓNIMOS

� Los sinónimos se utilizan para poder identificar a las tablas con un nombre diferente al que se les dio en su creación (por ejemplo para simplificar su nombre original)

� Son alias que se le asigna a una tabla� Los sinónimos sólo son utilizables por el usuario que los ha creado

� Si un usuario quiere referirse a una tabla original con un sinónimo debe crearlo

� Se pueden crear diferentes sinónimos para una misma tabla� No se puede crear un sinónimo sobre una tabla con un nombre de sinónimo ya existente (aunque sea otra tabla)

Page 153: SQL

SINÓNIMOS: CREATE SYNONYM

� Con esta orden se crea un sinónimo de una tabla

CREATE SYNONYM nombre_sinónimo FOR Tabla

� A partir del momento de la creación del sinónimo en cualquier sentencia SQL se puede usar indistintamente el nombre de la tabla o el nombre del sinónimo

� Se pueden crear sinónimos también para: Vistas, procedimientos almacenados, funciones,…

Page 154: SQL

SINÓNIMOS: DROP SYNONYM

� Esta instrucción se usa para borrar un sinónimo de una tabla del catálogo de la base de datos

DROP SYNONYM nombre_sinónimo

Page 155: SQL

Transact SQL

� Los SGBD permiten almacenar datos, recuperarlos y manipularlos

� Pueden almacenar y ejecutar la lógica necesaria para el tratamiento de esa información

� Utilización de un lenguaje basado en SQL

� Transact SQL: Lenguaje SQL de SQL Server

Page 156: SQL

Transact SQL: Aplicaciones

� Utilización de tipos de datos

� Utilización de variables

� Estructuras de control del flujo de ejecución

� Funciones predefinidas

� No son aplicaciones ejecutables independientes, sino elementos que el servidor de datos puede ejecutar

Page 157: SQL

Transact SQL: Aplicaciones

� Procedimientos almacenados

� Desencadenadores

� Funciones de usuario

� Ejecutar un proceso

� Desde un cliente hacer llamadas al servidor de base de datos

� NO se puede hacer◦ Diseñar una interfaz de usuario

◦ Solicitar de forma directa información al usuario

Page 158: SQL

Transact SQL: Aplicaciones

� Procedimientos almacenados◦ Programa que se ejecuta bajo demanda

� Desencadenadores, disparadores o Triggers◦ El código se ejecuta automáticamente en el momento que se produce un cierto evento

� Funciones◦ Programa que realiza una tarea determinada bajo demanda

Page 159: SQL

Transact SQL: Tipos de datos

� No sólo se puede trabajar con información alojada en columnas de tablas o vistas

� Datos almacenados temporalmente en variables

Page 160: SQL

Transact SQL: Tipos de datos

� Tinyint (entero 0, 255)� Smallint (entero -32768, 32767)� Int (entero positivos y negativos grandes)� Bigint (entero positivos y negativos muy grandes)� Smallmoney (decimal -214758,3648; 214748,3647)

� Money (decimal grandes)� Real (decimal -3,4E+38; 3,4E+38)� Float (decimal -1,79E+308; 1,79E+308)� Bit (0, 1)

Page 161: SQL

Transact SQL: Tipos de datos

� Decimal (decimales)� Char (longitud fija)� Varchar (longitud variable con un máximo)� Text (longitud variable sin máximo)� Binary � Varbinary� Image� Smalldatetime (fecha y hora 1/1/1900; 6/6/2079)� Datetime (fecha y hora 1/1/1753; 31/12/9999)

Page 162: SQL

Transact SQL: Tipos de datos

� Nuevos sql server 2008◦ Date (fecha sin hora)◦ Time (hora sin fecha)◦ Datetime2 (igual a datetime pero con más fechas)◦ Datetimeoffset (fecha, hora y zona horaria)◦ Hierarchyid (relaciones entre filas de una tabla)◦ Geometry (coordenadas espaciales sobre un plano)◦ Gegraphy (coordenadas espaciales sobre una superficie elipsoidal)

Page 163: SQL

Transact SQL: Tipos de datos

� No se pueden usar en columnas de una tabla pero sí en variables◦ Cursor� Almacena un cursor de datos asociado a una consulta o una vista

� Permite acceso a los datos fila a fila◦ Table� Almacenar en una variable una tabla completa� Se puede realizar sobre la variable cualquier operación válida en una tabla

� P.e.: crear una tabla virtual, temporal con el fin de devolver unos resultados elaborados a partir de los datos de la base

Page 164: SQL

Transact SQL: Variables

� SQL: ◦ Los datos se almacenan en una tabla de la bd◦ Permanecen allí hasta que se recuperan

� Transact SQL (para lógica de proceso)◦ Se puede necesitar trabajar con datos temporales (variable)◦ No se almacenan en la bd◦ Variable: Identificador, nombre asociado a una posición de memoria◦ Almacenar valor (asignación), recuperarlo (lectura)

Page 165: SQL

Transact SQL: Variables

� Antes de utilizar � Declarar◦ DECLARE @nombre tipo◦ @variable: @ para declaración, asignación, lectura◦ DECLARE @Suma int

� Asignación◦ SELECT @nombre = valor◦ SELECT @Suma = 12◦ SELECT @Suma = Count(numem) FROM temple

� El valor de una variable◦ Puede almacenarse en una tabla◦ Asignarlo a otra variable◦ Ser devuelto como resultado de una función o sp

Page 166: SQL

Transact SQL: Variables

� Programa 1USE temple

DECLARE @suma int

SELECT @suma = COUNT(numem) FROM temple

PRINT @suma

Page 167: SQL

Transact SQL: Variables

� Expresiones◦ Variables, constantes, resultado de funciones pueden ser operandos formando parte de expresiones

◦ Expresión: Operandos + operadores � Resultado

◦ Aritméticas (cálculos, con resultado) y Lógicas (relaciones � v, f t,f)

◦ Aritméticas (+ - * / %)

◦ Lógicas (= <> < <= > >= !< !>)

Page 168: SQL

Transact SQL: Variables

� Programa 2USE temple

DECLARE @suma int

DECLARE @resultado int

SELECT @suma = COUNT(numem) FROM temple

SELECT @resultado = @suma * AVG(salar)

PRINT @resultado

Page 169: SQL

Transact SQL: Variables

� Programa 3USE temple

IF (SELECT COUNT(numem) FROM temple) >10

PRINT ‘Hay muchos empleados’

ELSE

PRINT ‘La empresa es pequeña’

Page 170: SQL

Transact SQL: Control de flujo

� SQL◦ Consulta o manipulación de datos sobre una tabla, vista, varias tablas, algunas filas

◦ Se ejecuta en un solo paso de manera incondicional

◦ No se controla la operación fila a fila

◦ La sentencia se ejecuta en el momento que se envía al servidor

Page 171: SQL

Transact SQL: Control de flujo

� Transact SQL◦ Se puede desviar el flujo secuencial de ejecución según queramos◦ Alterar el flujo de ejecución basándonos en una expresión lógica (condicional) IF/ELSE◦ Que el flujo recorra varias veces las mismas sentencias (bucle) WHILE, WAITFOR◦ Desviar el flujo de ejecución a otro punto (salto) GOTO, BREAK, CONTINUE◦ Cuando la sentencia de control afecta no solo a la siguiente sentencia, sino a un grupo: BEGIN/END

Page 172: SQL

Transact SQL: Variables

� Programa 4USE temple

DECLARE @contador smallintSELECT @contador = 1WHILE @contador !>10

� mientras contador no sea mayor que 10

BEGINPRINT @contadorSELECT @contador = @contador + 1

END

Page 173: SQL

Transact SQL: Variables

� DECLARE @total int, @hoy datetime

� DECLARE @cp char(5) @ciudad varchar(30)

� Declarar una variable de tipo tabla (3 campos)

DECLARE @tablaempleados table

(numem char(5) PRIMARY KEY,

salar money,

nomem varchar(30))

Page 174: SQL

Transact SQL: Variables

� Variable recién creada no tiene valor �asignación

� Asignación de valores simples◦ SELECT @suma = 10◦ SET @suma = 10

� Otras asignaciones◦ SELECT @suma = AVG(salar) FROM temple◦ Consulta de la cual se obtiene el resultado a asignar a la variable◦ SET no se puede utilizar

Page 175: SQL

Transact SQL: Variables

� Variables predefinidas◦ Aparte de las variables que podamos declarar, podremos utilizar otras ya predefinidas

◦ Globales: Disponibles siempre (no hay que definirlas ni asignarles valor)

◦ @@nombre

Page 176: SQL

Transact SQL: Variables� Variables predefinidas: Algunas◦ @@CONNECTIONS

� Nº de conexiones efectuadas desde que se inició SQL Server

◦ @@CURSOR_ROWS� Nº de filas del último cursor abierto

◦ @@FETCH_STATURS� Estado tras la última recuperación de fila a través de un cursor

◦ @@IDENTITY� Valor asignado a la última columna de identidad que se haya insertado

◦ @@ ROWCOUNT� Nº de filas afectadas por la última sentencia que se haya ejecutado

◦ @@SERVERNAME� Nombre del servidor

◦ @@SERVICENAME� Nombre del servicio

◦ @@VERSION� Información de versión del servidor

Page 177: SQL

Transact SQL: Variables

� El valor de las variables predefinidas se obtiene con SELECT◦ SELECT @@SERVERNAME

◦ PRINT @@SERVERNAME

◦ SELECT @@SERVERVERSION AS ‘Versión de SQL Server’, @@SERVERNAME AS ‘Servidor’

Page 178: SQL

Transact SQL: Variables

� Cursores◦ No utilizar si no es totalmente necesario◦ Ralentizan muchísimo el rendimiento de la aplicación◦ Intentar utilizar SQL complejas en lugar de cursores◦ Obtener un cursor para manipular un conjunto de datos◦ Se puede trabajar con un conjunto de datos fila a fila, en lugar de hacerlo con todos los datos� Definir el conjunto de datos: DECLARE� Abrir el cursor: OPEN� Recuperar los datos de una fila en variables: FETCH� Procesar� Liberar el cursor: DEALLOCATE

Page 179: SQL

Transact SQL: Variables

� Cursores: Definir cursor1. Como variable global, luego se le asigna un valor2. Como objeto cursor1. DECLARE CursorNumem CURSOR FOR

SELECT numem, salar FROM temple � No se le pone @ a CursorNumem (no es una variable local).� Se le asigna un nombre a un objeto del tipo CURSOR� Cursor asociado a un conjunto de datos

2. DECLARE @CursorNumem cursorSET @CursorNumem = CURSOR FORSELECT numem, salar FROM temple

� La variable local podría utilizarse como cursor para distintos conjuntos de datos (cambiando la asignación)

Page 180: SQL

Transact SQL: Variables

� Cursores: Abrir cursor◦ Después de definir el cursor: Abrirlo antes de poder acceder a las filas del conjunto de datos

◦ Desplazamiento secuencial (de la primera a la última)� DECLARE CursorNumem CURSOR FOR SELECT …

◦ Desplazamiento libre (a cualquier fila)� DECLARE CursorNumem SCROLL CURSOR FOR SELECT …

◦ Abrir el cursor� OPEN cursor (nombre del cursor o variable)

Page 181: SQL

Transact SQL: Variables

� Cursores: Recuperar filas del conjunto◦ FETCH fila FROM cursor INTO variables

◦ fila� NEXT: Siguiente al actual o 1ª si se acaba de abrir

� PRIOR: Anterior

� FIRST: Primera

� LAST: Última

� ABSOLUTE nº: fila a recuperar

� RELATIVE +- nº: nº de filas a moverse adelante o atrás

◦ @@FETCHSTATUS� Determinar si la operación FETCH ha tenido éxito (devuelve 0)

Page 182: SQL

Transact SQL: Variables

� Cursores: Liberar cursor◦ Después de usar el cursor, liberar los recursos utilizados� DEALLOCATE

Page 183: SQL

Transact SQL: Variables

� Table◦ Tabla temporal en memoria

◦ Las sentencias SQL actúan sobre conjunto de datos

◦ Se pueden crear tablas virtuales o temporales (no se almacenan en la bd)� Definir variable table

� Usarla como una tabla: insertando filas, modificándolas, seleccionando datos, etc.

Page 184: SQL

Transact SQL: Variables� Programa 5

USE temple

-- Variable que funciona como tabla

DECLARE @TbEmpleados table

(numem char(3) PRIMARY KEY,

salar money, fecin datetime)

-- Variables para ir recuperando los valores

DECLARE @varnumem char(3)

DECLARE @varsalar money

-- Cursor del que se recuperan los valores

DECLARE @CursorNumem

SET @CursorNumem = CURSOR FOR SELECT numem, salar FROM temple

-- Abrir el cursor y recuperar 1ª fila

OPEN @CursorNumem

FETCH NEXT FROM @CursorNumem INTO @varnumem, @varsalar

-- Recorrer la tabla mientras hayan filas

WHILE @@FETCHSTATUS=0

BEGIN

--Las insertamos en la variable table, junto con la fecha y la hora

INSERT INTO @TbEmpleados VALUES (@varnumem, @varsalar, GETDATE())

--Siguiente fila

FETCH NEXT FROM @CursorNumem INTO @varnumem, @varsalar

END

--Liberar el cursor

DEALLOCATE @CursorNumem

SELECT * FROM @TbEmpleados

Page 185: SQL

Transact SQL: Funciones

� Realizan tareas concretas (no hay que programarlas)

� Código con un nombre, que para ejecutarlo hay que llamarlo y pasarle los parámetros si son necesarios

� Existen funciones predefinidas y globales

� Se pueden crear otras nuevas: funciones de usuario

Page 186: SQL

Transact SQL: Funciones

� Algunas es necesario pasarles parámetros

� Algunas devuelven un valor o un objeto

� Tipos◦ Matemáticas

◦ De fecha

◦ De cadena

◦ Colectivas

◦ Estadísticas

Page 187: SQL

Transact SQL: Funciones

� Funciones estadísticas◦ Operan sobre un conjunto de datos con el fin de obtener datos estadísticos� Máximo, mínimo, suma, media, número de valores, varianza, desviación típica

� max, min, sum, avg, count, var, stdev

� SELECT FUNCION(campo) FROM tabla / vista

Page 188: SQL

Transact SQL: Funciones

� Programa 6USE temple

SELECT COUNT(numem), MAX(salar), MIN(salar) FROM temple

DECLARE @salariomaximo money

SELECT @salariomaximo = MAX(salar) FROM temple

SELECT numem, nomem, salar FROM temple WHERE salar=@salariomaximo

Page 189: SQL

Transact SQL: Funciones

� Funciones matemáticas◦ Operadores aritméticos � Funciones básicas

◦ coseno, seno, tangente, raíz cuadrada, potencia, logaritmo, redondear números, …

◦ abs, acos, asin atan, atn2, ceiling, cos, cot, degrees, exp floor, log, log10, pi, power, radians, rand, round, sign, sin, sqrt, square, tan

◦ cast y convert: convertir datos numéricos en cadena de caracteres

Page 190: SQL

Transact SQL: Funciones

� Programa 7DECLARE @exponente smallintSELECT @exponente = 0WHILE @exponente !> 8 BEGIN

PRINT ‘2 elevado a ‘ + CAST(@exponente AS CHAR) + ‘= ‘ +

CAST(POWER(2, @exponente) AS CHAR)

SELECT @exponente = @exponente + 1END

Page 191: SQL

Transact SQL: Funciones

� Funciones de cadena◦ Cadena: secuencia de caracteres◦ Obtener nº caracteres, eliminar espacios sobrantes, invertir la secuencia, convertir a mayúsculas y minúsculas, extraer caracteres o subcadenas, reemplazar caracteres◦ ascii, char, charindex, difference, left, len, lower, ltrim, nchar, patindex, quotename, replace, replicate, reverse, right, rtrim, soundex, space, str, stuff, substring, unicode upper

Page 192: SQL

Transact SQL: Funciones

� Programa 8USE temple

SELECT numem, SUBSTR(nomem, PATINDEX (‘% %’, nomem) + 1, LEN (nomem) AS ‘Apellidos empleado’

Obtiene los apellidos del empleados:

juan garcía garcía � garcía garcía

Page 193: SQL

Transact SQL: Funciones

� Otras funciones:◦ De fecha:� http://msdn.microsoft.com/es-es/library/ms186724.aspx

◦ De conjunto de filas:� containstable, freetexttable, opendatasource, openquery, openrowset, openxml

◦ De seguridad:� http://msdn.microsoft.com/es-es/library/ms186236.aspx

Page 194: SQL

Transact SQL: Funciones

� Funciones definidas por el usuario◦ Existen funciones de carácter general

◦ El usuario puede crear otras funciones más específicas

◦ Grupo de sentencias Transact SQL con un identificador (nombre función)

◦ Se ejecutan llamando al identificador

Page 195: SQL

TRIGGERS

� También llamados disparadores o desencadenadores

� Son procedimientos almacenados que se ejecutan automáticamente, en lugar de ser invocados de manera explícita, en el momento en que se desencadena cierto suceso o evento

Page 196: SQL

TRIGGERS

� Un trigger es un SP que se ejecuta automáticamente cada vez quetiene lugar la acción para la que se ha definido

� No se pueden invocar directamente, se puede ejecutar la acciónque activa el trigger

� No admite parámetros y no puede usar la instrucción RETURN� Puede devolver resultados (no se recomienda)� Se ejecutan en segundo plano y no deberían devolver más que

mensajes de error, cuando sea necesario� Dentro del Trigger se puede hacer referencia a objetos de otras

bases de datos (integridad referencial entre objetos de distintasBD)

Beneficios

Page 197: SQL

TRIGGERS

� Se pueden definir varios trigger para cada acción INSERT,UPDATE o DELETE

� No representan una gran sobrecarga de trabajo para SQLServer

� No es recomendable complicar la lógica interna de losdesencadenadores

� Están asociados a una tabla o vista concreta

Beneficios

Page 198: SQL

TRIGGERS

Tablas INSERTED y DELETED

� La tabla INSERTED◦ Las nuevas filas que se han insertado mediante la instrucciónINSERT◦ Los nuevos valores para las filas que se han modificado mediantela instrucción UPDATE

� La tabla DELETED◦ Las filas eliminadas por una instrucción DELETE◦ Los valores viejos de las filas modificadas por una instrucciónUPDATE

Si la acción original modificó varias filas a la vez, el trigger se activará una sola vezy las tablas INSERTED y DELETED contendrán varias filas con las modificaciones

Page 199: SQL

TRIGGERS

Tablas INSERTED y DELETED

� INSERT◦ Los datos insertados se guardan en la tabla inserted◦ INSERT INTO hist …. FROM inserted

� DELETE◦ Los datos borrados se guardan en la tabla deleted◦ INSERT INTO hist …. FROM deleted

� UPDATE◦ Los valores nuevos del registro se guardan en inserted◦ Deleted guarda el registro modificado sin los cambios que se acabande hacer◦ INSERT INTO hist …. FROM inserted o deleted◦ Si no hay cambios:

� Si c1<>deleted.c1 or c2<>deleted.c2 … update� Else no grabar

Page 200: SQL

TRIGGERS

Tablas INSERTED y DELETED

Liceo 2000 – SQL Server 2000 Mónica Frey Grimm

� Las tablas inserted y deleted son creadas automáticamente al entrar en un desencadenador

� Se puede recuperar datos de dichas tablas, pero no añadir� Los nombres de las columnas de estas tablas serán los

mismos que tengan las columnas originales en sus respectivas tablas o vistas

Page 201: SQL

TRIGGERS

Tipos de trigger según el momento de su ejecución

� Desencadenadores INSTEAD OF. Se activan en lugar dela acción original, antes de que tenga lugar la modificación delobjeto base

� Desencadenadores AFTER. Se activan inmediatamentedespués de la modificación de los datos de la tabla base

Una tabla puede tener un número ilimitado de desencadenadores AFTER paracada acción, pero solamente un desencadenador INSTEAD OF por acción.

Las vistas sólo pueden tener desencadenadores INSTEAD OF.

Page 202: SQL

TRIGGERS

Desencadenadores INSTEAD OF

� Se evita que la acción desencadenante sea ejecutada� Se activan automáticamente cuando se ejecuta la instrucción definida� Se activa antes de la ejecución de la acción. La tabla base aún no ha sufrido

modificaciones� Se puede acceder a las tablas Inserted y Deleted� Se pueden usar para controlar los datos antes de que tenga lugar la

modificación, en forma más compleja de la permitida por las restriccionesCHECK

� Dependiendo de las condiciones evaluadas podemos decidir entre hacerefectivos los cambios solicitados o dejarlos totalmente sin efecto

� En una tabla que tenga definida una restricción FOREIGN KEY conoperaciones CASCADE no se puede crear un trigger INSTEAD OF

Page 203: SQL

TRIGGERS

Desencadenadores INSTEAD OF

� INSTEAD OF INSERT

◦ Permite cancelar en forma parcial o total, una operación INSERT� INSTEAD OF UPDATE

◦ Brinda la posibilidad de controlar los cambios antes de que seapliquen a los datos y decidir por último cuales aplicar

� INSTEAD OF DELETE

◦ Permite evitar la eliminación de filas específicas sin necesidad decancelar transacciones

Para cada tabla o vista se puede definir un solo desencadenador INSTEAD OFpor acción activadora (INSERT, UPDATE y DELETE):

Page 204: SQL

TRIGGERS

Desencadenadores AFTERDespués del INSERT, UPDATE, DELETE

Se ejecutan una vez modificados los datos. Sin embargo, como latransacción todavía sigue en curso, podemos decidir la cancelación de laacción

A diferencia de los desencadenadores INSTEAD OF, para confirmar latransacción no hace falta hacer nada especial; ésta se completaráautomáticamente a menos que decidamos descartarla

Se puede definir un número indefinido de desencadenadores AFTER paracada tabla y acción (se ejecutarán uno tras otro en el orden en que sehan definido)

Verificar validez de la operación realizada, actuar sobre otras tablas

Page 205: SQL

TRIGGERS

� Sólo pueden crearse escribiendo código◦ Desde el Management Studio con una consulta SQL

◦ Desde una tabla o vista / Nuevo desencadenador

◦ Desde el Analizador de consultas

Creación y eliminación de Triggers

Page 206: SQL

TRIGGERS

Creación y eliminación de TriggersCREATE TRIGGER NombreTrigger

ON {NombreTabla/NombreVista}

[WITH ENCRYPTION]

{FOR/AFTER/INSTEAD OF} {[INSERT][,][UPDATE][,][DELETE]}

AS

BEGIN

<Cuerpo de la trigger>

END

CREATE TRIGGER tr_CustomersON CustomersAFTER INSERT, UPDATE, DELETEAS-- Inserte sus instrucciones aquí

CREATE TRIGGER tr_CustomersON CustomersFOR INSERT, UPDATE, DELETEAS-- Inserte sus instrucciones aquí

Page 207: SQL

TRIGGERS

Creación y eliminación de Triggers

CREATE TRIGGER tr_Customers ON CustomersAFTER INSERT, UPDATE, DELETEAS-- Inserte sus instrucciones aquí

CREATE TRIGGER tr_Customers ON CustomersFOR INSERT, UPDATE, DELETEAS-- Inserte sus instrucciones aquí

CREATE TRIGGER isr_Customers ON CustomersAFTER INSERTAS-- Inserte sus instrucciones aquí

CREATE TRIGGER tr_Customers ON CustomersWITH ENCRYPTIONFOR INSERT, UPDATE, DELETEAS-- Inserte sus instrucciones aquí

CREATE TRIGGER isr_Customers ON CustomersINSTEAD OF INSERTAS-- Inserte sus instrucciones aquí

CREATE TRIGGER tr_Customers ON CustomersINSTEAD OF INSERT, UPDATE, DELETEAS-- Inserte sus instrucciones aquí

Page 208: SQL

TRIGGERS

� Integridad referencial

� Actualización de una vista en la que participan múltiples tablas

� Realización de un registro o histórico de los cambios realizados en una tabla

Utilidad desencadenadores

Page 209: SQL

TRIGGERS

� Utilidad principal triggers, mantener integridad de los datos◦ Verificando que los datos insertados o modificados son válidos: Validar información◦ Al eliminar una fila no se rompen relaciones entre datos◦ Esto se puede realizar también mediante restricciones CHECK, claves UNIQUE, referenciad de integridad entre tablas◦ En otros caso utilizar Triggers◦ Se lanza antes de hacer la grabación y en el propio triggerse puede hacer que no se grabe

Integridad referencial

Page 210: SQL

TRIGGERS

� Facilita la actualización de una vista en la que participan múltiples tablas

Actualización vistas

Page 211: SQL

TRIGGERS

Histórico� Realización de un registro de los cambios que se efectúanen una tabla� Cada vez que se efectúa un cambio, guardar el registro, indicar quien lo

cambió, cuando, que cambió, tipo de cambio� Se puede controlar desde el VB si se accede a una BD (por software)

� Con trigger funciona siempre independientemente desde donde se haga el acceso� Visual basic, php, asp� Administrador corporativo� Analizador de consultas� Conexiones desde access, …

� Insert � Insert tabla física, Insert tabla histórico� Delete � Delete tabla física, Insert tabla histórico� Update � Update tabla física, Insert tabla histórico

Page 212: SQL

TRIGGERSEjemplo

--Hay varias personas que pueden registrar nuevos libros (quién y cuando resgistró libros)--Operación INSERT sobre la tabla Libros ���� Guardar algunos datos en otra tabla por cada inserción--Tabla HistLibros, campos: ISBN, quien, cuando--¿Cada empleado cada vez que inserta un libro lo escribe en la otra tabla?CREATE TRIGGER tr_NuevoLibroON LibrosFOR INSERT -- Es equivalente a AFTER INSERTASBEGIN

INSERT INTO HistLibros SELECT ISBN, SUSER_SNAME(), GETDATE()) FROM insertedEND

--Cada vez que se inserten filas en la tabla Libros se producirá automáticamente un registro en la --tabla HistLibros

Page 213: SQL

TRIGGERSEjemplo

--Construir una vista con datos obtenidos de dos tablas relacionadas--Podemos hacer inserción de registro sobre esta vista con un trigger (no se puede hacer--inserciones en vistas compuestas de varias tablas directamente)--Se quiere añadir un empleado nuevo que está en un departamento que no existe en un edificio -------nuevoCREATE TRIGGERONINSTEAD OF INSERTASBEGIN

SET NOCOUNT ON --No devolver número de filas afectadas….

END

Page 214: SQL

TRIGGERS

Determinación del orden de ejecución

Es imposible determinar un orden de ejecución específico para losdesencadenadores definidos para una misma acción

Se puede seleccionar que desencadenador se ejecutará en primer lugar ycuál lo hará al final

Se utiliza el procedimiento almacenado de sistema sp_settriggerorder

CREATE TRIGGER tr1_Customers ON CustomersAFTER UPDATEASPRINT 'Este es el desencadenador tr1'

CREATE TRIGGER tr2_Customers ON CustomersAFTER UPDATEASPRINT 'Este es el desencadenador tr2'

Creamos tres trigger de prueba para modificar su orden de ejecución

Page 215: SQL

TRIGGERS

Determinación del orden de ejecución

CREATE TRIGGER tr3_Customers ON CustomersAFTER UPDATEASPRINT 'Este es el desencadenador tr3'

UPDATE CustomersSET ContactName = ContactName

Probamos el orden de salida con unaoperación simulada

-- Indica que el desencadenador tr3 será el primero en ejecutarseEXEC sp_settriggerorder 'tr3_Customers', 'FIRST', 'UPDATE'

-- Indica que el desencadenador tr2 será el primero en ejecutarseEXEC sp_settriggerorder 'tr2_Customers', 'LAST', 'UPDATE'

Indicamos cuál será el primer trigger y el último en ejecutarse

Probamos el orden de salida con la operación simulada ¿Qué ocurre?UPDATE Customers SET ContactName = ContactName

Page 216: SQL

TRIGGERS

Controlar la modificación de columnas específicas

Dentro de un desencadenador podemos saber si unacolumna ha sufrido modificaciones.

Función UPDATE(). El valor de esta función es TRUE cuandola columna fue modificada.

COLUMNS_UPDATED(). Devuelve un patrón de bitsvarbinary que indica qué columnas de la tabla se insertaron ose actualizaron. Cada bit es 1 si la columna sufrió cambios y0 en caso contrario.

Page 217: SQL

TRIGGERS

Controlar la modificación de columnas específicas

La función COLUMNS_UPDATED devuelve los bits en orden deizquierda a derecha, siendo el bit menos significativo el primero de laizquierda. El primer bit de la izquierda representa la primera columna dela tabla, el siguiente representa la segunda columna, etc.

COLUMNS_UPDATED devuelve varios bytes si la tabla en que se hacreado el desencadenador contiene más de 8 columnas, siendo el menossignificativo el primero de la izquierda. COLUMNS_UPDATED devolveráel valor TRUE en todas las columnas de las acciones INSERT porque enlas columnas se insertaron valores explícitos o implícitos (NULL).

Page 218: SQL

TRIGGERS

Controlar la modificación de columnas específicas

CREATE TRIGGER tr_OrderDetailsON [Order Details]AFTER UPDATEAS--Verificamos si hubo cambios en la clave principalIF UPDATE(OrderID)BEGINPRINT 'No se permiten cambios a la clave principal'ROLLBACK TRANEND--Verificamos si hubo cambios en las columnas 2ª, 3ª y 5ªIF ((COLUMNS_UPDATED() & (22)) > 0)BEGINIF ((COLUMNS_UPDATED() & 2) = 2) PRINT 'Se modificó la columna ProductID'IF ((COLUMNS_UPDATED() & 4) = 4) PRINT 'Se modificó la columna UnitPrice'IF ((COLUMNS_UPDATED() & 16) = 16) PRINT 'Se modificó la columna Quantity'END

Page 219: SQL

TRIGGERS

Controlar la modificación de columnas específicas

PRINT CHAR(10) + 'Modificamos las columnas ProductID y UnitPrice'

UPDATE [Order Details] SET ProductID = ProductID, UnitPrice = UnitPrice

PRINT CHAR(10) + 'Modificamos solamente la columna Quantity'

UPDATE [Order Details] SET Quantity = Quantity

PRINT CHAR(10) + 'Modificamos OrderID'

UPDATE [Order Details] SET OrderID = OrderID

Crea el siguiente grupo de sentencias SQL y ejecútalas

Page 220: SQL

TRIGGERS

Controlar la modificación de columnas específicas

Modificamos las columnas ProductID y UnitPriceSe modificó la columna ProductIDSe modificó la columna UnitPrice

(2155 filas afectadas)

Modificamos solamente la columna QuantitySe modificó la columna Quantity

(2155 filas afectadas)

Modificamos OrderIDNo se permiten cambios a la clave principal

Debe dar el resultado siguiente:

Page 221: SQL

TRIGGERS

Controlar la modificación de columnas específicas

Si tiene que probar actualizaciones que afectan a otras columnas que no sean las8 primeras de una tabla, debe utilizar la función SUBSTRING para probar siCOLUMNS_UPDATED devuelve el bit correcto.

CREATE TRIGGER tr1 ON Customers FOR UPDATE AS IF ( (SUBSTRING(COLUMNS_UPDATED(),1,1)=20 AND

(SUBSTRING(COLUMNS_UPDATED(),2,1)=1 ) PRINT 'Las columnas 3, 5 y 9 han sido actualizadas'

GO

UPDATE Customers SET ContactName=ContactName, Address=Address, Country=Country GO

Page 222: SQL

TRIGGERS

Controlar la modificación de columnas específicas

La función POWER Devuelve el valor de la expresión indicada elevada a lapotencia especificada.

Sintaxis

POWER ( numeric_expression , y )

IF (SUBSTRING(COLUMNS_UPDATED(),4,1) & 28) > 0

-- Estas dos líneas hacen exactamente lo mismo

IF (SUBSTRING(COLUMNS_UPDATED(),4,1) &

(POWER(2, (3-1)) + POWER(2, (4-1)) + POWER(2, (5-1))) > 0

Page 223: SQL

TRIGGERS

Modificación de Triggers

Para modificar un Trigger existente se utiliza la instrucción ALTER TRIGGER.

Las sintaxis de ALTER TRIGGER es idéntica a la de CREATE TRIGGER.

Como los desencadenadores son objetos independientes, ningún objeto depende de ellos.

Podemos eliminarlos y volver a crearlos cada vez que sea necesario.

DROP TRIGGER se utiliza para borrar un desencadenador.

Page 224: SQL

TRIGGERS

Deshabilitar los desencadenadores

Para acelerar algunos procesos se puede deshabilitar temporalmente un desencadenador. El histórico puede hacerse enorme

Para deshabilitar un Trigger se utiliza la instrucción ALTER TABLE con la opción DISABLE TRIGGER

Para volver a activar el Trigger se utiliza la instrucción ALTER TABLE con la opción ENABLE TRIGGER

ALTER TABLE [Order Details]DISABLE TRIGGER tr_OrderDetails

ALTER TABLE [Order Details]ENABLE TRIGGER tr_OrderDetails

ALTER TABLE EmployeesDISABLE TRIGGER tr_Employees, isr_Employees, udt_Employees

Page 225: SQL

PROCEDIMIENTOS ALMACENADOS

� SQL Server no sólo manipula información gestionando tablas e índices procesando consultas, etc.

� Hasta ahora sólo hemos visto consultas interactivas con el SGBD◦ Se ejecuta y se ve el resultado de forma inmedianta

� Es capaz de ejecutar procedimientos almacenados◦ Procedimientos escritos en Transact-SQL y almacenados en la propia BD◦ Mejoran la seguridad y la integridad de los datos

� Se puede crear la estructura de la BD con que trabajarán las aplicaciones y la lógica para la manipulación de esos datos

Page 226: SQL

PROCEDIMIENTOS ALMACENADOS

� Características◦ Se ejecuta bajo demanda◦ Puede recibir y devolver parámetros◦ Facilitar la acción de futuros usuarios y aplicaciones� Con las vistas: Simplificar consultas, simplificar inserciónde datos en múltiples tablas.

� Queremos saber las ventas de un día, un mes, una semanao entre 2 fechas: Podría utilizarse una consulta SQL, peroel usuario debe saber SQL

� Procedimientos almacenados, simplifican esta labor

Page 227: SQL

PROCEDIMIENTOS ALMACENADOS: BENEFICIOS

� Instrucciones precompiladas◦ La primera vez que se ejecuta el SP, SQL Servercrea y almacena en memoria un plan de ejecuciónque volverá a usar cada vez que se ejecute el SP◦ Se ejecutan mucho más rápidos que unainstrucción SQL (se almacenan ya compilados)◦ SQL Server no tiene más que ejecutar el código,sin necesidad de efectuar un análisis sintáctico yuna compilación previa

Page 228: SQL

PROCEDIMIENTOS ALMACENADOS: BENEFICIOS

� Optimizan el tráfico en la red◦ Cuando ejecutamos un SP que contiene muchasinstrucciones SQL hacemos una única llamada alSQL Server indicando el nombre delprocedimiento, no cada instrucción por separado

� Mecanismo de seguridad◦ Si no queremos dar permisos a los usuarios sobreciertos objetos podemos crear SP que seencarguen de manipular dichos objetos y darpermisos a los usuarios para ejecutar estos SP

Page 229: SQL

PROCEDIMIENTOS ALMACENADOS: BENEFICIOS

� Programación modular◦ Todas las instrucciones que conforman el SP se ejecutarán en el servidor como un todo◦ Se puede incluir lógica condicional, mediante las instrucciones de control de flujo (IF..ELSE, WHILE) disponibles en Transact-SQL

� Pueden usar parámetros◦ Tanto para recibir datos como para devolverlos a la aplicación que los llama◦ Un usuario puede no tener muchos conocimientos de SQL y se le puede facilitar el trabajo mediante SP (no tener que poner siempre la instrucción SQL)

� Ejecución automática◦ Se ejecutan a petición del usuario o las aplicaciones, aunque podemos configurarlos para que se ejecuten automáticamente al iniciarse SQL Server

Page 230: SQL

PROCEDIMIENTOS ALMACENADOS: TIPOS� Procedimientos almacenados del sistema

� Procedimientos almacenados definidos por el usuario

� Procedimientos almacenados temporales

� Procedimientos almacenados extendidos

Page 231: SQL

PROCEDIMIENTOS ALMACENADOS: TIPOS

� Procedimientos almacenados del sistema◦ Se crean automáticamente en las bases de datosdel sistema durante la instalación◦ Son una forma de interactuar con las tablas delsistema◦ Para casi todas las tareas administrativas que serealizan en el SQL Server hay un SP◦ El nombre de todos los SP de sistema globalestiene el prefijo sp_◦ Se pueden ejecutar desde cualquier BD

Page 232: SQL

PROCEDIMIENTOS ALMACENADOS: TIPOS

� Procedimientos almacenados del sistema

USE Northwind

GO

sp_helpdb

Page 233: SQL

PROCEDIMIENTOS ALMACENADOS: TIPOS

� Procedimientos almacenados definidos por el usuario◦ Para implementar la lógica de negocio◦ Puede involucrar múltiples instrucciones y condiciones◦ La aplicación solo llamaría al SP y no tendría que ejecutar elconjunto de resultados por separado◦ Se crean con la instrucción

CREATE PROCEDUREy se almacena en la base de datos actual◦ Los nombres deben ser únicos◦ Si creamos un procedimiento en la tabla master con elprefjo sp_, este SP será accesible desde cualquier base dedatos◦ Si creamos un SP con el prefijo sp_ en nuestra base de datos y

existe uno igual en la master, se ejecutará el de la base dedatos y solo en caso que no existiera ejecutaría el de la master

Page 234: SQL

PROCEDIMIENTOS ALMACENADOS: TIPOS

� Procedimientos almacenados definidos por el usuario

USE Northwind

CREATE PROCEDURE sp_MostrarBaseDeDatos

AS

SELECT ‘Northwind’

USE master

CREATE PROCEDURE sp_MostrarBaseDeDatos

AS

SELECT ‘Master’

USE Northwind

EXEC sp_MostrarBaseDeDatos

USE Master

EXEC sp_MostrarBaseDeDatos

Page 235: SQL

PROCEDIMIENTOS ALMACENADOS: TIPOS

� Procedimientos almacenados temporales◦ Son creados por los usuarios◦ Se almacenan en la tempdb◦ SQL Server los elimina automáticamente al desconectar la sesión en la que han sido creados◦ Usan el prefijo # para los locales y el prefijo ##para los globales

Page 236: SQL

PROCEDIMIENTOS ALMACENADOS: TIPOS

� Procedimientos almacenados temporales

USE Northwind

CREATE PROCEDURE #leerNombreBaseDeDatos

AS

SELECT db_name() AS nombre_bdEjecute este código y expanda la carpeta“Procedimientos Almacenados” de la tabla“tempdb” y estará nuestro SP.

Cierre la ventana del Analizador deConsultas donde creó el SP y vuelve a lacarpeta de la tempdb.

Page 237: SQL

PROCEDIMIENTOS ALMACENADOS: TIPOS

� Procedimientos almacenados extendidos◦ Programas DLL escritos en C++◦ Extienden capacidades de SQL Server◦ Están en la base de datos master◦ Su nombre empieza por xp_◦ Se utilizan para fines administrativos◦ El usuario puede crear SP de este tipo,programándolo en C++ y luego añadiéndolo a SQLServer utilizando el SP del sistemasp_addextendedproc

Page 238: SQL

PROCEDIMIENTOS ALMACENADOS

� Crear procedimiento almacenado◦ Se puede crear desde el Managament Studio o desde una consulta SQL◦ Managament Studio� En la BD donde se va a crear� Crear Procedimiento almacenado (carpeta programación

� Escribir el contenido� Comprobar sintaxis� Asignar permisos� Guardar como plantilla

CREATE PROCEDURE HoraActual

AS

SELECT CURRENT_TIMESTAMP

Page 239: SQL

PROCEDIMIENTOS ALMACENADOS

� Crear procedimiento almacenado

CREATE PROCEDURE NombreSP

[

@Param1 tipodatos [=valorPredeterminado] [OUTPUT],

@Param1 tipodatos [=valorPredeterminado] [OUTPUT],...

]

AS

... Cuerpo del SP ...

Page 240: SQL

PROCEDIMIENTOS ALMACENADOS

� Crear procedimiento almacenado: recepción y devolución de parámetros◦ Mayor utilidad cuanto más flexible sea◦ En el ejemplo siguiente:� Buscar los apellidos que empiezan por a� Buscar los apellidos que empiezan por cualquier letra que se le pasa

◦ También sería útil que se le pudiera pasar un resultado al usuario o aplicación que lo solicita, en lugar de quedarse almacenado en la tabla del que deberá ser recuperado

Page 241: SQL

PROCEDIMIENTOS ALMACENADOS

� Crear procedimiento almacenado: recepción y devolución de parámetros◦ Cualquier sp puede recibir parámetros si los necesita ◦ Irán detrás del nombre, especificando la variable y su tipo◦ Si se ejecuta el sp sin parámetros ���� error◦ El error se evita poniéndole al parámetro un valor por defecto � Usado si se llama al sp sin parámetro alguno◦ Devolver resultados desde el sp1. Código de retorno del sp ���� RETURN(valor)

valor: constante, consulta SQL, expresión2. Usar parámetros de salida (el sp devuelve un dato

���� OUTPUT

Page 242: SQL

PROCEDIMIENTOS ALMACENADOS

� Crear procedimiento almacenado: recepción y devolución de parámetros

CREATE PROCEDURETotaliza

@ISBN char(13)

AS

... Cuerpo del SP ...

CREATE PROCEDURE NombreSP

[

@Param1 tipodatos [=valorPredeterminado] [OUTPUT],

@Param1 tipodatos [=valorPredeterminado] [OUTPUT],...

]

AS

... Cuerpo del SP ...

Page 243: SQL

PROCEDIMIENTOS ALMACENADOS

� Crear procedimiento almacenado: Ejemplos

CREATE PROCEDURE buscarEmpleadosPorApellido

@apellidoEmp varchar(40)

AS

SELECT * FROM Employees

WHERE lastname LIKE ‘%’ + @apellidoEmp + ‘%’

CREATE PROCEDURE buscarEmpleadosPorApellido

@apellidoEmp varchar(40) = ‘a’

AS

SELECT * FROM Employees

WHERE lastname LIKE ‘%’ + @apellidoEmp + ‘%’

Exec buscarEmpleadosPorApellido ‘a’

Exec buscarEmpleadosPorApellido

Page 244: SQL

PROCEDIMIENTOS ALMACENADOS

� Ejecutar el procedimiento almacenado◦ EXECUTE o EXEC nombre_procedimiento

CREATE PROCEDURE buscarEmpleadosPorApellido

@apellidoEmp varchar(40)

AS

SELECT * FROM Employees

WHERE lastname LIKE ‘%’ + @apellidoEmp + ‘%’

CREATE PROCEDURE buscarEmpleadosPorApellido

@apellidoEmp varchar(40) = ‘a’

AS

SELECT * FROM Employees

WHERE lastname LIKE ‘%’ + @apellidoEmp + ‘%’

Exec buscarEmpleadosPorApellido ‘a’

Exec buscarEmpleadosPorApellido

Page 245: SQL

PROCEDIMIENTOS ALMACENADOS

� Crear procedimiento almacenado: Instrucción RETURN◦ Se usa para salir sin condiciones de un SP (desdecualquier punto del SP)◦ Tiene un valor de retorno de tipo entero◦ El valor de retorno predeterminado es 0◦ Se puede utilizar RETURN para devolver un códigode error

Page 246: SQL

PROCEDIMIENTOS ALMACENADOS

� Crear procedimiento almacenado: Instrucción RETURN

CREATE PROCEDURE ObtenerEmpleado

@idEmpleado int

AS

IF NOT EXISTS(SELECT * FROM EmployeesWHERE employeeid=@idEmpleado)

RETURN –1

ELSE

SELECT * FROM EmployeesWHERE employeedid=@idEmpleado

RETURN

Page 247: SQL

PROCEDIMIENTOS ALMACENADOS

CREATE PROCEDURETotaliza

@ISBN char(13)= NULL --El parámetro es NULL por defecto

AS

BEGIN

IF @ISBN IS NULL --Si no se pasa parámetro

INSERT INTO Totales

SELECT (GETDATE(), NULL, SUM(importe) FROM Ventas

ELSE -- si se pasa parámetro

INSERT INTO Totales

SELECT (GETDATE(), @ISBN, SUM(importe) FROM Ventas WHERE ISBN=@ISBN

END

-- Si no se pasa parámetro, valor por defecto NULL y se totalizan todas las ventas

-- si se pasa el parámetro, se suman las filas correspondientes a ese libro

Page 248: SQL

PROCEDIMIENTOS ALMACENADOS

CREATE PROCEDURETotaliza

@ISBN char(13)= NULL --El parámetro es NULL por defecto

AS

BEGIN

IF @ISBN IS NULL --Si no se pasa parámetro

-- Devolvemos directamente el RETURN

RETURN(SELECT SUM(importe) FROM Ventas)

ELSE -- si se pasa parámetro

RETURN(SELECT (SUM(importe) FROM Ventas WHERE ISBN=@ISBN)

END

-- En lugar de realizar una inserción en una tabla, se devuelve directamente el resultado

Page 249: SQL

PROCEDIMIENTOS ALMACENADOS

� Crear procedimiento almacenado: Ejemplo con parámetro de salida (OUTPUT)

CREATE PROCEDURE ObtenerDireccionEmpleado

@idEmpleado int,

@Direccion varchar(100) OUTPUT

AS

SELECT @Direccion= address + ‘ . ’ + city + ‘ . ‘ +

region + ‘ . ‘ + postalcode + ‘ . ‘ + country

FROM Employees

WHERE employeeid = @idEmpleado

DECLARE @DireccionSP varchar(100)

EXEC ObtenerDireccionEmpleado 12, @Direccion=@DireccionSP OUTPUT

PRINT @DireccionSP

Page 250: SQL

PROCEDIMIENTOS ALMACENADOS

CREATE PROCEDURETotaliza

@ISBN char(13)= NULL --El parámetro es NULL por defecto

@Total money OUTPUT -- Parámetro de salida

AS

BEGIN

IF @ISBN IS NULL --Si no se pasa parámetro

-- Devolvemos el resultado en

SELECT @Total=SUM(importe) FROM Ventas)

ELSE -- si se pasa parámetro

SELECT @Total=SUM(importe) FROM VentasWHERE ISBN=@ISBN)

END

-- En lugar de realizar una inserción en una tabla, se devuelve directamente el resultado

Page 251: SQL

PROCEDIMIENTOS ALMACENADOS

� Crear procedimiento almacenado: Devolución de conjunto de datos◦ Además de para actuar sobre tablas, insertando datos o extrayendo información procesada, un sp puede devolver un conjunto de datos procedentes de tablas físicas de la BD o contenidos en una variable table

◦ Simplifican la obtención de datos de múltiples tablas� Similar a las vistas, pero con parámetros

Page 252: SQL

PROCEDIMIENTOS ALMACENADOS

� Crear procedimiento almacenado: Manejo de errores◦ La función del sistema @@ERROR devuelve elcódigo de error de la última instrucción ejecutada◦ Este valor cambia cada vez que se ejecuta unainstrucción, por lo tanto hay que controlar el errorinmediatamente después de ejecutar la instrucción◦ RAISERROR� Se usar para generar explícitamente un error

RAISERROR (id_mensaje | texto_mensaje, gravedad, estado) WITH opción

Page 253: SQL

PROCEDIMIENTOS ALMACENADOS

� Crear procedimiento almacenado: Manejo de errores

sp_addmessage 50001, 11, 'There was an error', 'us_english'

sp_addmessage 50001, 11, 'Ha ocurrido un error', 'spanish‘

CREATE PROCEDURE GenerarError

AS

RAISERROR (50001, 11, 1) WITH LOG

SELECT @@ERROR

Page 254: SQL

PROCEDIMIENTOS ALMACENADOSUSE empleados

GO

CREATE PROCEDURE CrearBD

--@variable char(13)= NULL NO es necesario

AS

BEGIN

DECLARE @ERROR int

BEGIN TRANSACTION

CREATE TABLE temple (………..)

SET @ERROR = @@ERROR --@@ERROR a partir de aquí ya tiene otro valor

IF @ERROR = -1

BEGIN

ROLLBACK TRANSACTION

RETURN @ERROR

END

INSERT INTO temple ……

COMMIT TRANSACTION

RETURN 0

END

Page 255: SQL

PROCEDIMIENTOS ALMACENADOS

USE empleados

GO

CREATE PROCEDURE sp_Actualiza_temple

@empleado int

AS

BEGIN

DECLARE @ERROR int

BEGIN TRANSACTION

UPDATE temple (………..) SET C1=@C1, C2=@C2, … WHERE numem=@empleado

SET @ERROR = @@ERROR --@@ERROR a partir de aquí ya tiene otro valor

IF @ERROR = -1

BEGIN

ROLLBACK TRANSACTION

RETURN @ERROR

END

COMMIT TRANSACTION

RETURN 0

END

Page 256: SQL

FUNCIONES DE USUARIO

� Su definición puede incluir más de una instrucción y tenerparámetros

� Se pueden invocar igual que los Procedimientos Almacenados� Una función escalar definida por el usuario se puede usar en

cualquier lugar de una expresión Transact-SQL en el que seaválido el uso de una expresión

� Una función de usuario que devuelva una tabla se puede usaren la cláusula FROM de cualquier instrucción del lenguaje demanipulación de datos◦ Esto no es posible con los sp◦ SELECT numem, salar, comis FROM Empleados (Siendo sp_Empleados un sp da

un error)◦ El mismo código del sp puesto en una función si se puede ejecutar

Beneficios

Page 257: SQL

FUNCIONES DE USUARIO

� Usarla como subconsulta en la cláusulaWHERE� Combinar resultados de dos funciones sin necesidad de usar

tablas temporales para almacenar datos intermedios� Usar el resultado como argumento del operador IN� Crear una vista que no podría ser resuelta por una única

sentencia SELECT� Crear una vista con parámetros� Ampliar la lista de funciones predefinidas con funciones

financieras de todo tipo� Crear nuevas funciones matemáticas

Beneficios

Page 258: SQL

FUNCIONES DE USUARIO

� Distinta sintaxis� Contexto en que puede ser utilizada� Un sp que efectúa un cálculo que devuelve un nº, no puede

ser utilizado en la definición de una tabla para crear unacolumna calculada, una función sí

� Un sp que devuelve un conjunto de datos no puede serutilizado en una consulta, una función sí

� Una función de usuario se puede utilizar donde se puedeutilizar una función de SQL Server

Diferencias entre Función y Procedimiento Almacenado

Page 259: SQL

FUNCIONES DE USUARIO

� Funciones escalares: Devuelven un único valor escalar� Funciones tabulares: Devuelven un conjunto de resultados

completo (similar a una tabla)� Funciones en línea: Son un caso especial de las tabulares, pero

constan de una única instrucción SELECT

Tipos de funciones definidas por el usuario

Una función definida por el usuario puede constar de una únicainstrucción o de varias. Según su valor de retorno, las funcionesdefinidas por el usuario se pueden dividir en tres grupos:

Page 260: SQL

FUNCIONES DE USUARIO

� En la cláusula SELECT de una instrucción SELECT, comoparte de una expresión o como una columna individual

� En la cláusula SET de una instrucción UPDATE, como valorpara insertar en el campo de la tabla a modificar

� En la cláusula ORDER BY como criterio de ordenación� Como valor DEFAULT para una columna� Dentro de la definición de una restricción CHECK� Dentro de una expresión CASE� Dentro de una instrucción PRINT

Funciones Escalares

Devuelven un único valor y se pueden usar en cualquier lugardonde se admita una expresión, por ejemplo:

Page 261: SQL

FUNCIONES DE USUARIO

� Como parte de la condición en instrucciones IF oWHILE� Como parámetro, al llamar a un SP u otra función definida

por el usuario� Como valor de retorno de un procedimiento almacenado, si

la función devuelve un valor entero� Como valor de otra función escalar definida por el usuario

Funciones Escalares

Se pueden combinar con otras funciones en una expresión, siempreque los tipos de datos sean compatibles con la operación

Page 262: SQL

FUNCIONES DE USUARIO

Creación de Funciones Escalares

CREATE FUNCTION [Propietario.]NombreFunción

( @Param1 tipodatos [=default], … @ParamN tipodatos [=default])

RETURNSTipoDatosDeRetorno

AS

BEGIN

<Cuerpo de la función>

RETURNValorDeRetorno

END

SELECT [Propietario.]dbo.NombreFunción(ValorParam1, ValorParam2)

Ejemplos de ejecución

SELECT @Variable = [Propietario.]dbo.NombreFunción(ValorParam1, ValorParam2)

Page 263: SQL

FUNCIONES DE USUARIO

Creación de Funciones Escalares

CREATE FUNCTION [Propietario.]NombreFunción

( @Param1 tipodatos [=default], … @ParamN tipodatos [=default])

RETURNSTipoDatosDeRetorno

AS

BEGIN

<Cuerpo de la función>

RETURNValorDeRetorno

END

Principal diferencia de sintaxis entre la función y el procedimiento almacenado� En la cabecera: Compuesta por la lista de parámetros y el tipo entre

paréntesis y el tipo de valor devuelto� Se puede retornar un valor simple (int, money, …) o una variable table o

una consulta

Page 264: SQL

FUNCIONES DE USUARIO

Creación de Funciones Escalares

CREATE FUNCTION dbo.Cubo( @fNumero float)RETURNS floatASBEGINRETURN(@fNumero * @fNumero * @fNumero)END

USE CURSO_SQL

SELECT dbo.Cubo(5)

Una función sencilla para obtener un número elevado al cubo

Ejecutamos la función para calcular el cubo de 5.

Utilizamos la base de datos CURSO_SQL

Page 265: SQL

FUNCIONES DE USUARIO

Creación de Funciones Escalares

CREATE FUNCTION dbo.Factorial ( @Numero int )RETURNS INTASBEGIN

DECLARE @i int

IF @Numero <= 1SET @i = 1

ELSESET @i = @Numero * dbo.Factorial( @Numero - 1 )

-- Devuelve el valor calculadoRETURN (@i)

END

Otra característicainteresante es que lasfunciones de usuariosoportan llamadasrecursivas, como semuestra en el siguienteejemplo, que calcula elfactorial de unnúmero

Page 266: SQL

FUNCIONES DE USUARIO

Creación de Funciones Escalares

CREATE FUNCTION dbo.QuienFue()RETURNS varchar(100)ASBEGIN

RETURN SYSTEM_USER + ' DESDE ' +APP_NAME()END

Devuelve el nombre dela persona que ejecutóla función y desde queaplicación lo hizo.

PRINT dbo.QuienFue()

MEGA865\Mónica DESDE Analizador de consultas SQL

Ejecución

Salida

Page 267: SQL

FUNCIONES DE USUARIO

CREATE FUNCTION fn_Edad (@NumEmpleado int)

RETURNS smallint

AS

BEGIN

DECLARE @FechaNacimiento datetime, @Edad smallint

SELECT @FechaNacimiento=fecna FROM temple WHERE numem=@NumEmpleado

--Calcular la edad

RETURNS @Edad

END

--

Page 268: SQL

FUNCIONES DE USUARIO

Funciones de tabla en línea

� En la cláusula SELECT de una instrucción SELECT, como parte de una subconsulta que devuelva un único valor (un conjunto de resultados con una sola fila y una sola columna).

� En la cláusula SET de una instrucción UPDATE como una subconsulta que provea un único valor para un campo de una tabla que queremos modificar.

� En la cláusula FROM de cualquier instrucción DML.

Es algo parecido a una vista con parámetros. Contiene una únicainstrucción SELECT pero puede usar varios parámetros para restringir laconsulta.

Pueden usarse en cualquier lugar en el que se admitiría una tabla:

Page 269: SQL

FUNCIONES DE USUARIO

Funciones de tabla en línea

� En las cláusulas WHERE o HAVING de cualquier instrucción DML como parte de una subconsulta que devuelva un único valor para compararlo con un campo o variable.

� En la cláusula WHERE de cualquier instrucción DML, como parte de una subconsulta que empiece con EXISTS o con NOT EXISTS.

� En las cláusulas WHERE o HAVING de cualquier instrucción DML, como parte de una subconsulta con los operadores IN o NOT IN, siempre que la subconsulta devuelva una sola columna.

Page 270: SQL

FUNCIONES DE USUARIO

Creación de funciones de tabla en línea

CREATE FUNCTION [Propietario.]NombreFunción

( @Param1 tipodatos [=default], … @ParamN tipodatos)

RETURNSTABLE

AS

RETURN ( Sentencia SELECT)

SELECT * FROM [Propietario.]dbo.NombreFunción(ValorParam1, ValorParam2)

Ejemplo de ejecución

Sintaxis

Page 271: SQL

FUNCIONES DE USUARIO

Creación de funciones de tabla en línea

USE Northwind

SELECT * FROM dbo.ClientesDelPais('Spain')

Una función que devuelve los clientes de una país determinado

Ejecutamos la función para ver los clientes de España

Utilizamos la base de datos Northwind

CREATE FUNCTION dbo.ClientesDelPais (@pais varchar(15))RETURNS TABLEASRETURN ( SELECT * FROM Customers WHERE Country = @pais )

Page 272: SQL

FUNCIONES DE USUARIO

Creación de funciones de tabla en línea

CREATE FUNCTION dbo.PedidosDelDia(@Fecha datetime)RETURNS TABLEASRETURN (

SELECT * FROM Orders WHERE DATEDIFF(day, OrderDate, @fecha) =0 )

SELECT OrderID, CustomerID, EmployeeID, CONVERT(varchar(10), OrderDate, 103) FROM dbo.PedidosDelDia(’06/05/1998')ORDER BY CustomerID

Una función que devuelve los pedidos de una fecha determinada

Ejecutamos la función para ver los pedidos del 06/05/1998. Solo mostramos los campos OrderID, CustomerID, EmployeeID, OrderDate y ordenamos la salida por el campo CustomerID. Formateamos el campo OrderDate para mostrar la fecha con el formato dia/mes/año

Page 273: SQL

FUNCIONES DE USUARIOCREATE FUNCTION LibrosDistribuidora (

@IDDistribuidora smallint)

RETURNS @Tabla table

(Distribuidora varchar(50),

Editorial varchar(50),

Titulo varchar(50))

AS

BEGIN

INSERT INTO @Tabla SELECT Distribuidora.NombreAS Distribuidora, Editoriales.NombreAS Editorial, Libros.Titulo FROM Libros

INNER JOIN Editoriales ON Libros.Editorial=Editoriales.IDEditorial

INNER JOIN DistribucionEditorial ON Editoriales.IDEditorial= DibribucionEditorial.IDEditorial

INNER JOIN Distribuidoras ON DistribuicionEditorial.IDDistribuidora=Distribuidoras.IDDistribuidora

WHERE Distribuidoras.IDDistribuidora=@

RETURN

END

-- Función para obtener los libros de una distribuidora.

--Al ser una función la podemos utilizar directamente en una SELECT

--USE Librerias

--SELECT Editorial, Titulo FROM LibrosDistribuidora(1)

Page 274: SQL

FUNCIONES DE USUARIO

Funciones tabulares

Las funciones tabulares de varias instrucciones se parecen a las funcionesen línea. De echo se pueden usar en las mismas situaciones pero noestamos restringidos a definirlas con una única instrucción SELECT.

Devuelve un único conjunto de resultados: el contenido de una variable detabla con un formato predefinido indicado en la declaración de la función.

Estas funciones se parecen a los procedimientos almacenados, perodevuelven un único conjunto de resultados.

Se pueden definir parámetros de entrada pero no se pueden definirparámetros de salida.

Page 275: SQL

FUNCIONES DE USUARIO

Creación de funciones tabulares

CREATE FUNCTION [Propietario.]NombreFunción

( @Param1 tipodatos [=default], … @ParamN tipodatos)

RETURNS @NombreTabla TABLE (Columna1 tipodatos, … ColumnaN tiposdatos)

AS

BEGIN

<cuerpo de la función>

RETURN

END

Sintaxis

Page 276: SQL

FUNCIONES DE USUARIO

Creación de funciones tabulares

CREATE FUNCTION dbo.ClientesDelPais (@pais varchar(15))RETURNS @Lista TABLE(CustomerID nchar(5), CompanyName nvarchar(40), Country nvarchar(15))

ASBEGIN

INSERT INTO @Lista SELECT CustomerID, CompanyName, CountryFROM CustomersWHERE Country = @pais

RETURNEND

Page 277: SQL

Cursores

Page 278: SQL

Administración

� Herramientas de administración◦ DBA� Administrador de la base de datos

� Administra el servidor

◦ SQL Server Configuration Manager� Configurar los distintos servicios de SQL Server

◦ SQL Managament Studio� Configuración de servicios y muchas otras tareas

Page 279: SQL

Administración: SQL Server Configuration Manager� SQL Server se ejecuta como un servicio� Se pondrá en marca automáticamente (al iniciar el sistema) o

manualmente� Inicio servicio: automáticamente, manualmente, deshabilitado (no se

pondrá en marcha ni automática, ni manualmente)� Servicio: MSSQLServer◦ Instancias del servidor: Nombre_Servidor + Nombre_Instancia

� Otros servicios◦ Coordinador de transacciones distribuidas: MSDTC◦ Agente de SQL Server: SQLServerAgent◦ Elegidos en la instalación:

� Servicio de Informes (Reporting services)� Servicio de Integración� Servicio de análisis� Full-text Filter� Server Browser

Page 280: SQL

Administración: SQL Server Configuration Manager

� Inicio / Todos los programas / SQL Server 2008 / Herramientas de configuración / SQL Server Configuration Manager

� Se verán:◦ Servicios instalados ◦ Estado: Ejecución / Detenido / Pausado (Flecha verde / Cuadrado rojo / Dos rayas rojas)◦ Modo de inicio◦ Otras propiedades

Page 281: SQL

Administración: SQL Server Configuration Manager� Servicios◦ MSSQLServer (instancia por defecto)◦ MSSQLServer Expres (Otra instancia instalada)

� Estados de los servicios◦ Iniciado: Servicio en funcionamiento (acceso de los clientes a las bd)◦ Pausado: Servicio detenido temporalmente, se puede reanudar, conservando el estado anterior◦ Detenido: Se desaloja de memoria, al volver a iniciarlo toma sus valores por defecto◦ Botones: Iniciar, Detener, Pausar, Reunudar, Reiniciar

Page 282: SQL

Administración: SQL Server Configuration Manager� Modo de inicio: Automáticamente, manualmente, deshabilitado◦ Botón derecho / Propiedades / Servicio / Modo de inicio

� Servicio Agente de SQL Server◦ Se encarga de supervisar, cuando está en marcha, el funcionamiento del motor de SQL Server (servidor de bases de datos)◦ Detecta cualquier fallo que pueda afectar al SQL Server y volverlo a poner en marcha◦ Permite automatizar tareas

� Realizar copias de seguridad a una hora dada� Realizar trabajos de forma periódica

Page 283: SQL

Administración: SQL Server Configuration Manager� Modo de inicio: Automáticamente, manualmente, deshabilitado◦ Botón derecho / Propiedades / Servicio / Modo de inicio

� Servicio Agente de SQL Server◦ Se encarga de supervisar, cuando está en marcha, el funcionamiento del motor de SQL Server (servidor de bases de datos)◦ Detecta cualquier fallo que pueda afectar al SQL Server y volverlo a poner en marcha◦ Permite automatizar tareas

� Realizar copias de seguridad a una hora dada� Realizar trabajos de forma periódica

Page 284: SQL

Administración: SQL Server Managament Studio

� Herramienta de administración de SQL Server◦ Completa

◦ Inicio / Todos los programas / Microsoft SQL Server 2008 / SQL Server Managament Studio

◦ Conectar con el servidor:� Nombre del servidor / Autentificación de windows o mixta

Page 285: SQL

Administración: SQL Server Managament Studio

� Creación de grupos◦ Podemos administrar varias instancias de SQL Server

◦ Pueden ser:� Servidor con el que se ha iniciado sesión

� Servidores virtuales en una misma máquina

� Servidores remotos

� Servidores registrados (Ver / Servidores registrados), con los que se ha establecido conexión

Page 286: SQL

Administración: SQL Server Managament Studio

� Creación de grupos◦ Servidores registrados� Los servidores con los cuáles se ha establecido conexión se pueden clasificar en grupos funcionales

� Al principio no existen grupos (los creamos)

� En cada grupo aparecen los nombres de los servidores

� Dependiendo del tamaño de la empresa y número de servidores � crear subgrupos por país, sucursal, …� América, Europa (España, Alemania, ..) , Asia …

Page 287: SQL

Administración: SQL Server Managament Studio

� Creación de grupos◦ Carpetas de un servidor

� Cada grupo contiene servidores� Cada servidor aloja elementos clasificados en carpetas

� Bases de datos, Seguridad, Objetos de servidor, Replicación, Administración, Agente de SQL Server

� Al elegir una carpeta aparece su contenido

� Asistentes◦ Herramientas gráficas de administración◦ Simplifican tareas (creación de una bd, índice, vista, …, copia de seguridad, …)

� Asistentes o plantillas◦ Ver / Explorador de plantillas

Page 288: SQL

Administración: SQL Server Managament Studio

� Asistentes◦ Herramientas gráficas de administración

◦ Simplifican tareas (creación de una bd, índice, vista, …, copia de seguridad, …)

� Asistentes o plantillas◦ Ver / Explorador de plantillas

Page 289: SQL

Administración

� Creación de una estructura de grupos◦ Si sólo se va a trabajar con un servidor no hace falta crear grupos◦ Gran empresa con múltiples servidores � Grupos◦ Ver / Servidores registrados◦ Elegir: Local Server groups / Botón derecho / Nuevo grupo de servidores / Nombre y descripción� América ( méxico, argentina, usa), Europa (españa, alemania, italia)

Page 290: SQL

Administración

� Registro de servidores◦ Grupos

� No tienen utilidad práctica� Alojan enlaces con servidores

◦ Conexiones: Instancia local de SQL Server (por defecto), otras instancias de SQL Server, servidores remotos◦ Los servidores hay que registrarlos para poder acceder a ellos◦ Registrar servidor

� Seleccionar grupo / Botón derecho / Nuevo registro de servidor: nombre del servidor o ip (o buscar servidores), método de autentificación (windows, mixto), nombre alternativo del servidor (adecuado en lugar de la ip), Probar

Page 291: SQL

Administración

� Registro de servidores◦ Grupos

� No tienen utilidad práctica� Alojan enlaces con servidores

◦ Conexiones: Instancia local de SQL Server (por defecto), otras instancias de SQL Server, servidores remotos

◦ Los servidores hay que registrarlos para poder acceder a ellos

◦ Registrar servidor� Seleccionar grupo / Botón derecho / Nuevo registro de servidor:

nombre del servidor o ip (o buscar servidores), método de autentificación (windows, mixto), nombre alternativo del servidor (adecuado en lugar de la ip), Probar

� Ver / Servidores registrados / Botón derecho / Añadir al explorador de objetos

� Otra opción: Conectar / motor de base de datos

Page 292: SQL

Administración

� Actuar sobre un servidor

◦ Managament Studio más completo que Configuratio Manager

◦ Seleccionar servidor / Botón derecho

� Puede ser local o remoto

� Iniciar, pausar, reanudar, detener, reiniciar

� Conectar / Desconectar (cerrar conexión, liberando el canal y recursos o restablecerla)

Page 293: SQL

Administración

� Seguridad◦ Limitar el acceso indiscriminado a información

(importante)◦ Qué personas pueden trabajar y qué pueden hacer◦ Autentificación: Windows, mixta� Autentificación, comprobar si tiene acceso sobre la bd,

conocer operaciones que le están permitidas

◦ El proceso de autorización necesita saber� Funciones que puede realizar el usuario autentificado� Derechos que tiene sobre cada bd

◦ Usuarios y grupos de Windows + Funciones del servidor de SQL Server

Page 294: SQL

Administración

� Seguridad: Usuarios y grupos de Windows◦ El servidor dispone de una bd con información de todas las

cuentas de usuarios

◦ Cada usuario tiene una configuración

◦ Forma parte de grupos

◦ Grupos: Permitir que múltiples usuarios compartan atributos sin necesidad de definirlos individualmente

◦ Crear usuarios y grupos� Herramienta Administración de Equipos (Windows) / / Herramientas

del sistema / Usuarios y grupos Locales

� Herramienta Usuarios y Equipos de Active Directory (Windows)

� Asociar usuarios a grupos

Page 295: SQL

Administración

� Seguridad: Inicios de sesión en SQL Server◦ Crear en la carpeta Seguridad de SQL Server los

inicios de sesión correspondientes a los usuarios y grupos a los que permitiremos acceder al servidor de datos◦ No todos los usuarios de Windows podrán acceder al

SQL Server� Sólo los que tienen definido un inicio de sesión en SQL Server� Managament Studio / Seguridad / Inicios de sesión:

� Predefinidos: Administradores de Windows, sa� Botón derecho / Nuevo inicio de sesión / Autentificación de Windows

/ Elegir un grupo de usuarios de Windows / Elegir una bdpredeterminada

� Grupos: administradores, comerciales, contables, jefes, informáticos, …

Page 296: SQL

Administración

� Seguridad: Funciones de servidor◦ El grupo elegido ya puede iniciar sesión en SQL Server

◦ No tiene privilegios (no puede operar sobre bases de datos, ni realizar otras tareas)

◦ Cada bd mantiene una lista de los inicios de sesión que pueden actuar sobre ella� Seleccionar inicios de sesión / grupo creado / botón derecho /

Propiedades / Asignación de usuarios

� Aparecen dos listas� Superior: Bases de datos

� Inferior: Funciones definidas para ellas en caso de que éste inicio de sesión pueda utilizarlas

� Marcar la bd y la funciones que se desea para ese usuario o grupo

Page 297: SQL

Administración

� Seguridad: Funciones de servidor◦ El grupo elegido ya puede iniciar sesión en SQL Server◦ No tiene privilegios (no puede operar sobre bases de datos,

ni realizar otras tareas)◦ Cada bd mantiene una lista de los inicios de sesión que

pueden actuar sobre ella� Seleccionar inicios de sesión / grupo creado / botón derecho /

Propiedades / Asignación de usuarios� Aparecen dos listas

� Superior: Bases de datos� Inferior: Funciones definidas para ellas en caso de que éste inicio de sesión

pueda utilizarlas

� Marcar la bd y la funciones de bd que se desea para ese usuario o grupo

Page 298: SQL

Administración

� Seguridad: Funciones de servidor◦ Funciones de bd� Marcar la bd y lo que el usuario puede realizar sobre ella

(funciones permitidas a los usuarios)� Estándar y definidas por el usuario

◦ Funciones de servidor� Funciones globales: Se aplican a todas las operaciones sobre el

servidor en su conjunto y no a una bd concreta� Están predefinidas y son fijas (no se pueden modificar)� Se pueden añadir cuentas o inicios de sesión (usuarios o

grupos) a la función que queramos� Administrador del sistema: Función sysadmin (cualquier

operación sobre el servidor y cualquier bd)

Page 299: SQL

Administración

� Seguridad: Funciones de servidor

Función Acciones permitidas

bulkadmin Inserción masiva de datos

dbcreator Creación y modificación de bases de datos

diskadmin Administración de los archivos en disco

processadmin Gestión de los procesos asociados a SQL Server

securityadmin Definición de cuentas de inicio de sesión

serveradmin Configuración de opciones para el RDBMS

setupadmin Configuración de registro de servidores

sysadmin Administrador del sistema. Puede efectuar cualquier función

Page 300: SQL

Administración

� Seguridad: Definir usuarios◦ Cuando se crea una bd hereda propiedades de las bd master y

model

◦ Luego se pueden modificar

◦ La bd cuenta ya con un conjunto de tablas, vistas, sp, un usuario dbo, …

◦ dbo: tiene permisos completos sobre la bd creada

◦ Se deben crear otros usuarios que requieran acceso a la bd (leer, escribir, etc.)

◦ Carpeta usuarios: Nombre_BD / Seguridad / Usuarios

◦ Carpeta: Bases de datos / Seguridad / Inicios de sesión (es otra, a nivel del servidor y no de la BD)

◦ Carpeta usuarios: Pueden ser usuarios de Windows, grupos de Windows, inicios de sesión de SQL Server

Page 301: SQL

Administración

� Seguridad: Definir usuarios◦ Nuevo usuario: Nombre_BD / Seguridad / Usuarios /

Botón derecho / Nuevo usuario� Nombre_servidor\Nombre_usuario� Nombre_servidor\Nombre_grupo� Nombre_servidor\Nombre_inicio_sesión

◦ Aparece lista con las funciones de bd existentes (estándar y definidas por el usuario)� Establecen privilegios que el nuevo usuario tendrá sobre la bd� public: aparece por defecto� db_datareader, db_datawriter: Leer y escribir información en

la bd

Page 302: SQL

Administración

� Seguridad: Definir usuarios (funciones bd)

Función Acciones permitidas

public Cualquier usuario de la bd tendrá los mismos privilegios que si ha accedido de forma pública

db_datareader Leer información de la bd

db_datawriter Escribir información de la bd

db_denydatareader

db_denydatawriter

db_accessadmin

db_backupoperator

db_ddladmin

Page 303: SQL

Administración

� Seguridad: Funciones definidas por el usuario◦ Las funciones estándar de la bd no siempre se ajustan a las

necesidades de todas las bd◦ Se pueden crear funciones de seguridad definidas por el

usuario◦ Nombre_BD / Seguridad / Funciones / Botón derecho /

Nueva función de bd� Nombre de la función, integrantes (usuarios o grupos) de la función,

Elementos que pueden protegerse � Añadir todos los objetos existentes en la bd (tablas, vistas, sp, índices, triggers,

funciones, …) sobre los que queramos establecer algún tipo de permiso� Limitamos con un gran control, las operaciones que un usuario o grupo pueden

efectuar� Seleccionar objeto, permitir o denegar tarea� Conceder o denegar, select, inserción, modificación sobre elementos concretos

Page 304: SQL

Administración

� Permisos de las tablas

◦ Seleccionar tabla / Botón derecho / Propiedades

◦ Permisos

� Limitar para cada tabla las acciones que pueden efectuar los usuarios o los inicios de sesión

Page 305: SQL

Administración

� GRANT◦ GRANT { ALL [ PRIVILEGES ] } | permission [ ( column [

,...n ] ) ] [ ,...n ] [ ON [ class :: ] securable ] TO principal [ ,...n ] [ WITH GRANT OPTION ] [ AS principal ] � ALL: Casi todos los permisos� permission: Nombre de un permiso� column: Nombre de una columna de la tabla a la que se le va a

conceder permiso� class: Especifica la clase del elemento que puede protegerse en el

que se va a conceder el permiso� securable: Especifica el elemento que puede protegerse en el que se

va a conceder el permiso� WITH GRANT OPTION: Indica que el receptor también podrá

conceder el permiso especificado a otras entidades de seguridad

Page 306: SQL

Administración

� Permisos

http://msdn.microsoft.com/es-es/library/ms187965.aspx

Page 307: SQL

Administración

� REVOKE◦ REVOKE [ GRANT OPTION FOR ] { [ ALL [ PRIVILEGES ] ] |

permission [ ( column [ ,...n ] ) ] [ ,...n ] } [ ON [ class :: ] securable ] { TO | FROM } principal [ ,...n ] [ CASCADE] [ AS principal ]� GRANT OPTION FOR: se revocará la capacidad de conceder el permiso

especificado� ALL: Casi todos los permisos� permission: Nombre de un permiso� column: Nombre de una columna de la tabla a la que se le va a conceder

permiso� class: Especifica la clase del elemento que puede protegerse en el que se va a

conceder el permiso� securable: Especifica el elemento que puede protegerse en el que se va a

conceder el permiso� CASCADE: el permiso que se va a revocar también se revocará de otras

entidades de seguridad a las que se han concedido permisos por esta entidad de seguridad

Page 308: SQL

Administración

� DENY◦ DENY { ALL [ PRIVILEGES ] } | permission [ ( column [ ,...n

] ) ] [ ,...n ] [ ON [ class :: ] securable ] TO principal [ ,...n ] [ CASCADE] [ AS principal ] � ALL: Casi todos los permisos� permission: Nombre de un permiso� column: Nombre de una columna de la tabla a la que se le va a

conceder permiso� class: Especifica la clase del elemento que puede protegerse en el

que se va a conceder el permiso� securable: Especifica el elemento que puede protegerse en el que se

va a conceder el permiso� CASCADE: el permiso que se va a revocar también se revocará de

otras entidades de seguridad a las que se han concedido permisos por esta entidad de seguridad

Page 309: SQL

Administración

� Mantenimiento◦ Después de diseñar y crear la bd:

� Poner en explotación� Plan de mantenimiento� Copias de seguridad

◦ Diseño e implementación� Se efectúa en un entorno de desarrollo (no en el entorno de

explotación habitual de la empresa)

◦ Puesta en explotación� Trasladar toda la bd al servidor definitivo con el que se conectarán

clientes que puedan existir (usuarios y aplicaciones)� Se se copian los archivos � Hay que definir los inicios de sesión y

permisos de nuevo� Mejor hacer copia de seguridad

Page 310: SQL

Administración

� Asistente para copias de bases de datos◦ Seleccionar BD / Botón derecho / Tareas / Copiar Base de Datos

� Seleccionar servidor de origen (donde está la bd)� Seleccionar el modo de autentificación� Seleccionar servidor de destino

◦ Transferencia de datos (2 métodos)

1. Método de separar y adjuntar� Rápido, eficiente� La bd debe estar sin conexión

2. Método de objeto de administración de SQL� Más lento� Permite mantener la bd de origen en funcionamiento (sin dejar de dar

servicio en ningún momento)

Page 311: SQL

Administración

� Asistente para copias de bases de datos◦ Seleccionar una o varias bd a mover� Una marca nos indicará si existe algún conflicto (espacio insuficiente en destino, etc.)

◦ La transferencia:

1. Se detendrá si encuentra en el destino los mismos archivos

2. O se reescribirá en ellos la nueva información

◦ Una bd no sólo está compuesta por los ficheros de datos y transacciones

◦ Puede tener dependencias de otros objetos del servidor de origen� Inicios de sesión� Procedimientos almacenados compartidos por varias bd (almacenados en master)� Mensajes de error definidos por el usuario, …� Seleccionar los objetos adicionales a transferir� Algunos de estos objetos deben tener dependencias en el destino

� Inicios de sesión hacen referencia a usuarios o grupos que deben estar en el servidor de destino

Page 312: SQL

Administración

� Asistente para copias de bases de datos◦ En cada elemento seleccionado: inicios de sesión,

procedimientos almacenados, etc. se puede elegir pasarlos todos al destino o elegirlos individualmente◦ Dar nombre al trabajo que se está realizando◦ Programar la operación� Ejecutar una sola vez, de manera inmediata� Programarse para ejecutarse en un momento dado� Programación periódica (si se tienen dos servidores paralelos

con la misma bd, de tal manera que ante un fallo del primario se pasase el control al secundario)

◦ Resumen del proceso

Page 313: SQL

Administración

� Agente de SQL Server◦ Programación para la ejecución periódica de trabajos

◦ Almacena trabajos en: � Agente de SQL Server / Trabajos

◦ Los trabajos se pueden poner en marcha, detenerlo, obtener un historial de uso, ver propiedades

◦ Se pueden generar desde asistentes � Copia de bases de datos

◦ Se pueden crear nuevos trabajos� Agente de SQL Server / Trabajos / Botón derecho / Nuevo trabajo

� Ejecución de una serie de instrucciones Transact-SQL

� Hacer una réplica de la bd

Page 314: SQL

Administración

� Agente de SQL Server: Programación de un trabajo

◦ Agente de SQL Server / Trabajos / Seleccionar trabajo / Botón derecho / Propiedades / Programación

◦ Lista de ejecuciones programadas

� Periodicidad, la hora, la duración del proceso

◦ El Agente de SQL debe estar activo

Page 315: SQL

Administración

� Copias de seguridad◦ Preservar la seguridad de la información frente a

problemas◦ Se puede hacer con la bd en funcionamiento� Baja el rendimiento

◦ Dispositivos de copia� Donde se van a almacenar las copias de seguridad� Fichero en disco (otro disco), cinta (muy habitual), DVD, CD,

…� Unidad de red (provoca mucha carga)� NAS: Network Attached Storage (hardware de

almacenamiento en red)

Page 316: SQL

Administración

� Copias de seguridad

◦ Dispositivos de copia

� Objetos de servidor / Dispositivos de copia de seguridad / Botón derecho / Nuevo dispositivo

� Nombre del dispositivo, cinta o directorio

Page 317: SQL

Administración

� Copias de seguridad: Crear◦ Determinar frecuencia y método (acorde al

volumen de datos y la importancia

◦ La bd sigue activa, pero rendimiento baja

◦ Poca información y poca actualizaciones: 1 semana

◦ Muchas actualizaciones y volumen: copia semanal y copia diferencial diaria, y copia de registro de transacciones

◦ Objetos de servidor / Dispositivos de copia de seguridad / Dispositivo de copia creado

Page 318: SQL

Administración

� Copias de seguridad: Crear◦ Copia completa� Primera vez

� Con soporte nuevo (nuevo directorio o DVD, …)

� General:� Seleccionar bd, poner un nombre y un descripción

� El conjunto de copia de seguridad expira: Tiempo hasta la nueva copia de seguridad

� Opciones: � Sobrescribir todos los conjuntos de copia de seguridad existentes

� Comprobar copia de seguridad al concluir

Page 319: SQL

Administración

� Copias de seguridad: Crear◦ Copia diferencial� Base de datos grande, pero pocos movimientos dia� Se copian los datos nuevos y las modificaciones de la bd� Menor tiempo� General:

� Tipo: Diferencial� Si es el mismo soporte: Anexar al conjunto de copia de seguridad

existente� Soporte nuevo: Sobrescribir todos los conjuntos de copia de

seguridad existentes

� Opciones:� Comprobar copia de seguridad al finalizar

Page 320: SQL

Administración

� Copias de seguridad: Crear◦ Copia registro transacciones

� BD: Fichero de datos + Fichero de transacciones� Cada vez que se realiza una copia de seguridad completa o diferencia,

el registro de transacciones se inicializa� A partir de ese momento se inicia un nuevo registro de las

operaciones que vayan realizándose sobre la bd� Registro de transacciones: Fichero independiente de los datos.� Si se estropea el fichero de datos, se puede recuperar la información

con las copias de seguridad y el archivo de registro de transacciones� Si el registro de transacciones estuviera en una unidad separada, más

seguridad� Se puede realizar copias de registro de transacciones con más

frecuencia (tamaño menor)

Page 321: SQL

Administración

� Copias de seguridad: Recuperar

◦ Si tenemos copias completa de bd, sólo podemos recuperar la última de esas copias (la más reciente)

◦ Servidor / Botón derecho / Tareas / Restaurar / Base de datos

� Seleccionar la bd desde donde se recuperará la copia

� Se le puede poner un nuevo nombre

� La recuperación no afecte al estado actual de las bd existentes en el servidor

� Fecha a que se desea efectuar la recuperación: la más reciente posible u otra (dejamos la bd como estaba en ese momento)

Page 322: SQL

Administración

� Copias de seguridad: Recuperar◦ La recuperación se realizará automáticamente� Primero copia completa, luego diferencial y luego transacciones

(si existen en la copia)� Dependiendo de lo que tengamos recuperaremos toda la

información o parte� Tras la restauración el estado de la bd será el que tenía en

algún momento anterior al fallo, pero no el que tenía en el instante del fallo (si no tenemos las transacciones)

� Si hay un fallo, primero hacer copia del registro de transacciones y luego recuperarlo todo

� Con esto se devolverá la bd al estado que tenía cuando se produjo el fallo, si bien las transacciones sin confirmar serán descartadas

Page 323: SQL

Administración

� Mantenimiento de las bases de datos

◦ A medida que se trabaja con una bd, va creciendo

◦ La organización de datos e índices puede no ser la más optima (espacio inutilizado) � Hacer compactación

◦ Mantenimiento � Crear plan de mantenimiento

� Copias de seguridad

� Compactación

� Comprobar integridad

Page 324: SQL

Administración

� Mantenimiento de las bases de datos

◦ Servidor / Administración / Planes de mantenimiento / Botón derecho / Nuevo plan

◦ Asistente para planes de mantenimiento para la bdelegida

� Asignar un nombre al plan, indicar si se utilizará una programación independiente para cada tarea o una global para todas ellas, lista de tareas de mantenimiento

Page 325: SQL

Administración

� Mantenimiento de las bases de datos

◦ Reducir ocupación de la bd y mejorar el rendimiento

� Reducción del tamaño de la bd

� Reorganización de índices

� Limpieza del historial

◦ Orden en que se ejecutarán las tareas elegidas

◦ Programación a utilizar y propiedades de cada tarea

Page 326: SQL

Administración

� Mantenimiento de las bases de datos

◦ Modificar plan de mantenimiento

� Servidor / Administración / Planes de mantenimiento / Seleccionar plan / Botón derecho / Propiedades

Page 327: SQL

Administración

� Trabajos del agente SQL Server◦ Al definir un plan de mantenimiento � Se definen uno o varios

trabajos que el Agente SQL tendrá que poner en marcha

◦ Agente SQL� Habilita las tareas programadas� Aparecerán las copias de seguridad programadas, los planes de

mantenimiento programados� Servidor / Agente SQL Server / Seleccionar trabajo / Botón derecho /

Propiedades� Iniciar, detener, deshabilitar (para que no se vuelva a ejecutar), eliminar

trabajo� Los trabajos se pueden crear desde aquí, pero es más fácil crearlos con

planes de mantenimiento� Una vez creado, es más fácil modificarlos desde el agente SQL


Recommended