Sql basico parte_ii_

45
Base de Datos Profesor: MSC Luis Serna Jherry

Transcript of Sql basico parte_ii_

Page 1: Sql basico parte_ii_

Base de Datos

Profesor:

MSC Luis Serna Jherry

Page 2: Sql basico parte_ii_

Lenguaje SQL – Parte II

Principales funciones usadas en Transact - SQL (SQL Server)

Sentencias DDL para Índices

Page 3: Sql basico parte_ii_

TRANSACT SQL(SQL Server)

Page 4: Sql basico parte_ii_

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

Page 5: Sql basico parte_ii_

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

Page 6: Sql basico parte_ii_

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

Page 7: Sql basico parte_ii_

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

Page 8: Sql basico parte_ii_

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

Page 9: Sql basico parte_ii_

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

Page 10: Sql basico parte_ii_

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

Page 11: Sql basico parte_ii_

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

Page 12: Sql basico parte_ii_

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

Page 13: Sql basico parte_ii_

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

Page 14: Sql basico parte_ii_

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

Page 15: Sql basico parte_ii_

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

Page 16: Sql basico parte_ii_

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

Page 17: Sql basico parte_ii_

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

Page 18: Sql basico parte_ii_

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

Page 19: Sql basico parte_ii_

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

Page 20: Sql basico parte_ii_

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

Page 21: Sql basico parte_ii_

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

Page 22: Sql basico parte_ii_

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

Page 23: Sql basico parte_ii_

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

Page 24: Sql basico parte_ii_

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

Page 25: Sql basico parte_ii_

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

Page 26: Sql basico parte_ii_

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

Page 27: Sql basico parte_ii_

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

Page 28: Sql basico parte_ii_

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

Page 29: Sql basico parte_ii_

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

Page 30: Sql basico parte_ii_

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

Page 31: Sql basico parte_ii_

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

Page 32: Sql basico parte_ii_

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

Page 33: Sql basico parte_ii_

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

Page 34: Sql basico parte_ii_

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

Page 35: Sql basico parte_ii_

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

Page 36: Sql basico parte_ii_

SENTENCIAS DDL

Page 37: Sql basico parte_ii_

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.

Page 38: Sql basico parte_ii_

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.

Page 39: Sql basico parte_ii_

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.

Page 40: Sql basico parte_ii_

SENTENCIAS DDL

CREATE INDEX(sintaxis general)

CREATE [ UNIQUE ] INDEX índiceON tabla(campo [ASC|DESC][, campo

[ASC|DESC], ...])[WITH { PRIMARY}]

Page 41: Sql basico parte_ii_

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.

Page 42: Sql basico parte_ii_

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.

Page 43: Sql basico parte_ii_

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.

Page 44: Sql basico parte_ii_

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);

Page 45: Sql basico parte_ii_

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;