Base de Datos
Profesor:
MSC Luis Serna Jherry
Lenguaje SQL – Parte II
Principales funciones usadas en Transact - SQL (SQL Server)
Sentencias DDL para Índices
TRANSACT SQL(SQL Server)
Tipo de Dato DescripciónEnteros:Bit Entero con valor cero (0) o uno (1)Int entero entre (2 31) y –2 31 (-1)smallint entero entre 2 15 (32,768) y –2 15 (-1)Tinyint entero entre 0 y 255Binary(n) Binario
Decimales y numéricos de precisión fija:decimal Precisión fija, de –10 38 (-1) a 10 38 (-1)Numeric sinónimo de decimal
Moneda: Money valores monetarios. Desde -2 63 a 2 63
Smallmoney desde -214,748.3648 hasta +214,748.3647
Tipos De Datos TRANSACT – SQL
Tipo de Dato Descripción
Numéricos aproximados:float Punto flotante, desde -1.79 E308 a 1.79 E308 real Punto flotante, desde –3.40 E38 a 3.40 E38
Int entero entre (2 31) y –2 31 (-1)
Caracteres: Char longitud fija de hasta 8,000 caracteresvarchar longitud variable de hasta 8,000 caracteresText longitud variable de hasta 231 -1 caracteres (2,147,483,647)
TRANSACT – SQLTipos De Datos
Tipo de Dato Descripción
Binarios:binary data binaria de longitud fija de hasta 8,000 bytesvarbinary data binaria de longitud variable de hasta 8,000 bytesImage longitud variable de hasta 231 - 1 bytes
(2,147,483,647).
Fecha y hora:datetime desde 01/01/1753 al 31/12/9999. Smalldatetime desde 01/01/1900 al 31/12/2079.
TRANSACT – SQLTipos De Datos
Función de agregación Resultado
SUM([ALL | DISTINCT] expresión) Total de los valores en la expresión numérica
AVG([ALL | DISTINCT] expresión) Promedio de valores en la expresión numérica
COUNT([ALL | DISTINCT] expresión) Cantidad de valores en la expresión
COUNT(*) Cantidad de filas seleccionadasMAX(expresión) El valor máximo en la
expresiónMIN(expresión) El valor mínimo en la expresión
COUNT(*) es el único que NO ignora los valores nulos
Funciones de AgregaciónTRANSACT – SQL
Genera totales que se muestran al final de un grupo de filas resultantes.
Cuando se emplea con BY genera subtotales por quiebre del valor del grupoSELECT expresión_A, expresión_B, ....., expresión_N
............................. .............................
[ORDER BY expresión_N] COMPUTE
{ { AVG | COUNT | MAX | MIN | SUM } (expression_i) } [ BY expression_N ]
Funciones de AgregaciónTRANSACT – SQL
Cláusulas COMPUTE y COMPUTE BY
titleid price type BU1032 19.9900 business BU1111 11.9500 business BU2075 2.9900 business BU7832 19.9900 business sum
54.9200MC2222 19.9900 mod_cook MC3021 2.9900 mod_cook
sum 22.9800
Funciones de AgregaciónTRANSACT – SQL
SELECT title_id, price, typeFROM titlesORDER BY type COMPUTE SUM(price) BY type
COMPUTE BY - Ejemplo
Realizan operaciones sobre valores de fecha y hora, retornando un valor string, numérico o de fecha y hora.
Uso de FuncionesTRANSACT – SQL
DATEADD DAY
DATEDIFF GETDATE
DATENAME MONTH
DATEPART YEAR
Funciones de Fecha y Hora
SQL Server reconoce los datos de fecha y hora encerrados entre apóstrofes, en los siguientes formatos:
Formatos de fecha alfabéticos (‘April 15, 1998’) Formatos de fecha numéricos (‘4/15/1998’,
‘April 15, 1998’) Cadenas de caracteres (‘19981207’, ‘December
12, 1998’)
Funciones de Fecha y Hora
TRANSACT – SQL
Funciones de Fecha y Hora
Elemento de fecha Datepart Abreviatura Valores
Año year yy, yyyy 1753-9999
Trimestre quarter qq, q 1-4
Mes month mm, m 1-12
Día del año dayofyear dy, y 1-366
Día day dd, d 1-31
Semana del año week wk, ww 1-53
Día de la semana weekday dw 1-7 (dom-sab)
Hora hour hh 1-23
Minuto minute mi, n 0-59
Segundo second ss, s 0-59
Devuelve un nuevo valor de tipo datetime agregando un intervalo a la fecha especificada.
DATEADD(datepart, numero, fecha)DondeDatepart es el parámetro que especifica en qué
unidad se expresa al valor a adicionar.numero es el incrementofecha es una expresión de tipo datetime, o un
string en formato de fecha, a la que se aplicará el incremento
Funciones de Fecha y HoraTRANSACT – SQL
DATEADD
Ejemplo:Sumar 21 días a la fecha de publicación
(pubdate) y mostrarlo con el encabezado plazoUSE pubsGOSELECT DATEADD(day, 21, pubdate) AS plazoFROM titlesGO
Funciones de Fecha y HoraTRANSACT – SQL
DATEADD
Devuelve el período comprendido entre dos fechas específicas.
DATEDIFF(datepart, fechainicial, fechafinal)DondeDatepart es el parámetro que especifica en qué
unidad se expresará la diferencia entre las fechas
fechainicial fecha inicial de la comparaciónfechafinal fecha final contra la cual se compara
Funciones de Fecha y HoraTRANSACT – SQL
DATEDIFF
Ejemplo:Determinar la diferencia en días entre la fecha
actual y la fecha de publicación (pubdate).USE pubsGOSELECT DATEDIFF(day, pubdate, getdate()) AS
cantidad_de_diasFROM titlesGO
Funciones de Fecha y HoraTRANSACT – SQL
DATEDIFF
Devuelve una cadena de caracteres que representa la parte especificada de la fecha dada.
DATENAME(datepart, fecha)DondeDatepart es el parámetro que especifica a qué
parte de la fecha se aplicará la función.
Funciones de Fecha y HoraTRANSACT – SQL
DATENAME
Ejemplo:Extrae el nombre del mes desde la fecha
del sistema (el valor de retorno de GETDATE).
SELECT DATENAME(month, getdate()) AS ‘Nombre_de_mes'
Funciones de Fecha y HoraTRANSACT – SQL
DATENAME
Devuelve un valor entero que representa la parte especificada de la fecha dada.
DATEPART(datepart, fecha)
La función GETDATE devuelve la fecha y hora del sistemaSELECT GETDATE() AS ‘Fecha_Actual'
Devuelve 2005-01-06 13:05:13.877SELECT DATEPART(month, GETDATE()) AS ‘Mes'Devuelve 1
Funciones de Fecha y HoraTRANSACT – SQL
DATEPART
DAY, YEAR, MONTHDevuelve un valor entero que representa la parte
especificada de la fecha dada. DAY( fecha)YEAR(fecha)
MONTH(fecha)
SELECT DAY(‘06/01/2005') AS ‘Numero de Día'SELECT “Numero de Año" = YEAR(‘06/01/2005')SELECT “Número de Mes" = MONTH(‘06/01/2005')
Funciones de Fecha y HoraTRANSACT – SQL
Funciones MatemáticasRealizan operaciones trigonométricas,
geométricas, y otras, retornando un valor numérico.
Ejemplos: ABS, ACOS, ASIN, ATAN, SQUARE, POWER, SIN, DEGREES.
Uso de FuncionesTRANSACT – SQL
Funciones de MetadataDevuelven información de la base de datos y
sus objetos.Ejemplos: COL_NAME, DB_NAME, COL_LENGH
Funciones de seguridad Devuelven información relativa a los usuarios y
los roles.Ejemplos: IS_MEMBER, SUSER_NAME, USER_ID
Uso de FuncionesTRANSACT – SQL
Funciones del SistemaDevuelven información relativa a los valores,
objetos y configuración de SQL ServerEjemplos: CURRENT_USER, ISDATE, ISNULL.
Funciones de cadenas de caracteres Operan sobre cadenas de caracteres y
devuelven una cadena o un número. Ejemplos: LEFT, LEN, LOWER, REPLACE, RTRIM, LTRIM.
Uso de FuncionesTRANSACT – SQL
Las comparaciones de cadena de caracteres no hacen distinción entre mayúsculas y minúsculas.
Para comprobar la existencia de los caracteres comodín, se deberá definir un caracter de escape
TRANSACT – SQLFunciones de Cadenas de Caracteres
Caracter comodín Significado_ Un único caracter cualquiera% Cero o más caracteres cualquiera
[A-Z] Un rango de caracteres[A,B,C] Un carácter de la lista
^ Negación
Recuperar una porción de una cadena:
SUBSTRING(expresión, inicio, longitud)LEFT(expresión, valor entero)RIGHT(expresión, valor entero)LTRIM (expresión) – elimina espacios a la izquierdaRTRIM (expresión) – elimina espacios a la derecha
Funciones de Cadenas de Caracteres
TRANSACT – SQL
Encontrar la posición inicial de una cadena dentro de una columna o expresión:
CHARINDEX(expresión1, expresión2 [, posicion inicial])
expresión1 es la expresión a buscar
expresión2 es la columna o expresión en la cual se busca
posición inicial es la posición a partir de la cual se inicia la búsqueda.
Funciones de Cadenas de Caracteres
TRANSACT – SQL
Concatenar o combinar cadenas en una sola, empleando el operador de concatenación (+)
expresión + expresiónexpresión es cualquier expresión de tipo carácter o binario, con excepción de los tipos text o image
SELECT (au_lname + ', ' + au_fname) AS NombreFROM authors
Funciones de Cadenas de Caracteres
TRANSACT – SQL
Insertar una cadena dentro de otra existente, sustituyendo una parte de ésta.
STUFF(expresión de caracteres, inicio, longitud, expresión de caracteres)
Este ejemplo devuelve una cadena resultado de eliminar tres caracteres de la primera cadena (abcdef) a partir
de la posición 2 (desde b) e insertar la segunda cadena desde dicha posición
SELECT STUFF('abcdef', 2, 3, 'ijklmn')
Resultado: aijklmnef
Funciones de Cadenas de Caracteres
TRANSACT – SQL
Reemplazar todas las ocurrencias de una cadena dentro de otra existente, con una tercera cadena.
REPLACE(cadena1, cadena2, cadena3)
Este ejemplo reemplaza la cadena cde en abcdefgicde con la cadena xxx.
SELECT REPLACE('abcdefghicde','cde','xxx')Resultado: abxxxfghixxx
Funciones de Cadenas de Caracteres
TRANSACT – SQL
Manejo de valores nulos Un valor nulo es un valor no
disponible, sin signo, no conocido, inaplicable.
No es lo mismo que cero ni blanco. Un valor nulo no puede ser igual a
ningún otro valor, ni siquiera a otro nulo.
TRANSACT – SQL
Algunas funciones relativas al manejo de nulos: NULLIF(expresión1, expresión2) Retorna un valor nulo si ambas expresiones
son equivalentes. expresión IS [NOT] NULL Retorna un valor booleano TRUE o FALSE
como resultado de evaluar la expresión. NOTA: Si se emplean los operadores de comparación
= o != el resultado será UNKNOWN
Manejo de Valores NulosTRANSACT – SQL
Para manipular los valores nulos se debe usar la función: ISNULL(expresión, valor de reemplazo)
DondeExpresión es la expresión que se comprobará
como nulo. Puede ser de cualquier tipo.Valor de reemplazo es el valor de retorno si
la expresión es nula. Debe ser del mismo tipo que expresión.
Manejo de Valores NulosTRANSACT – SQL
Ejemplo: Encontrar el precio promedio de todos los
libros en existencia, asumiendo el valor de $10.00 en los casos en que el campo PRECIO sea null
SELECT AVG(ISNULL(price, $10.00))FROM titles
Manejo de Valores NulosTRANSACT – SQL
Ejemplo: Mostrar el título, el tipo y el precio de todos los
libros de la tabla TITLES. SELECT Title, type AS Tipo, price
FROM titles
Manejo de Valores NulosTRANSACT – SQL
Title Tipo Price The Busy Executive's business 19.9900Cooking with Compute business 11.9500 The Gourmet Microwave mod_cook 2.9900The Psychology of Compute UNDECIDED NULL
Ejemplo: Mostrar el título, el tipo y el precio de todos los
libros de la tabla TITLES. En los casos en que el precio sea NULL, mostrar el valor 0.00SELECT title, type, ISNULL(price, 0.00) AS PrecioFROM titles
Manejo de Valores NulosTRANSACT – SQL
Title Type Precio The Busy Executive's business 19.9900Cooking with Compute business 11.9500 The Gourmet Microwave mod_cook 2.9900The Psychology of Compute UNDECIDED 0.0000
SENTENCIAS DDL
SENTENCIAS DDL
Indices El diseño y creación de índices (indexes) es
muy importante cuando se quiere mejorar la performance del Servidor de Base de datos.
Los índices no son considerados como parte del diseño lógico de la base de datos,por eso, pueden se adicionados, removidos y cambiado sin afectar el esquema de la BD.
SENTENCIAS DDL
Indices - Tipos de: Indice Clustered Es un índice en el cual el orden físico
de las filas corresponde al orden de las filas en el índice.Sólo se puede tener un índice clustered por tabla. Las operaciones de UPDATE y DELETE son mas rápidas con el uso de estos índices.
SENTENCIAS DDL
Indices - Tipos de: Indices Non-Clustered En este índice, se especifica el orden
lógico de una tabla para poder acceder a los datos de forma eficiente. El orden físico de una tabla no corresponde al orden de estos índices. Se puede definir múltiples nonclustered indexes por tabla.
SENTENCIAS DDL
CREATE INDEX(sintaxis general)
CREATE [ UNIQUE ] INDEX índiceON tabla(campo [ASC|DESC][, campo
[ASC|DESC], ...])[WITH { PRIMARY}]
SENTENCIAS DDL
CREATE INDEX Indice: Es el nombre del índice que se
va a crear. Tabla: Es el nombre de la tabla
existente que contendrá el índice. Campo: Es el nombre del campo o de
los campos que se van a indexar.
SENTENCIAS DDL
CREATE INDEX Para crear un índice de único campo, escriba
el nombre del campo entre paréntesis a continuación del nombre de la tabla.
Para crear un índice de múltiples campos, enumere el nombre de cada campo que se va a incluir en el índice.
Para crear índices descendentes, utilice la palabra reservada DESC; de lo contrario, se supone que los índices son ascendentes.
SENTENCIAS DDL
CREATE INDEX Para no permitir valores duplicados en el
campo o campos de índice de diferentes registros, utilice la palabra reservada UNIQUE.
Designar el campo o los campos de índice como la clave principal utilizando la palabra reservada PRIMARY. Esto significa que la clave es única, por lo que puede omitir la palabra reservada UNIQUE.
SENTENCIAS DDL
Ejemplos: CREATE INDEX En el ejemplo siguiente se crea un índice,
que consta de los campos TeléfonoParticular y Extensión, en la tabla Empleados:
CREATE INDEX ÍndiceNuevo ON Empleados (TelDomicilio, Extensión);
SENTENCIAS DDL
Ejemplos: CREATE INDEX En el ejemplo siguiente se crea un índice
en la tabla Clientes con el campo IdCliente. Dos registros no pueden tener los mismos datos en el campo IdCliente y no se permiten los valores Nulos.
CREATE UNIQUE INDEX IdClien ON Clientes (IdCliente) WITH DISALLOW NULL;