Capitulo II Parte II Base de Datos II
Capitulo II Parte II Base de Datos II
Cuando definimos una tabla, variable o constante debemos asignar un tipo de dato que indica
los posibles valores. El tipo de datos define el formato de almacenamiento, espacio que de disco-
memoria que va a ocupar un campo o variable, restricciones y rango de valores válidos.
Transact SQL proporciona una variedad predefinida de tipos de datos. Casi todos los tipos de
datos manejados por Transact SQL son similares a los soportados por SQL.
SQL Server dispone de varios tipos de datos numéricos. Cuanto mayor sea el número que
puedan almacenar mayor será en consecuencia el espacio utilizado para almacenarlo. Como regla
general se recomienda usar el tipo de dato mínimo posible. Todos los datos numéricos admiten el
valor NULL.
Bit. Una columna o variable de tipo bit puede almacenar el rango de valores de 1 a 0.
Int. Una columna o variable de tipo int puede almacenar el rango de valores -231 a 231-1 .
BigInt. Una columna o variable de tipo bigint puede almacenar el rango de valores -263 a 263-1 .
Decimal (p,s). Una columna de tipo decimal puede almacenar datos numéricos decimales sin
redondear. Donde p es la precisión (número total del dígitos) y s la escala (número de valores
decimales)
Money. Almacena valores numéricos monetarios de -263 a 263-1, con una precisión de hasta diez
milésimas de la unidad monetaria.
Todos los tipos de datos enteros pueden marcarse con la propiedad identity para hacerlos auto
numéricos.
Char(n). Almacena n caracteres en formato ASCII, un byte por cada letra. Cuando almacenamos
datos en el tipo char, siempre se utilizan los n caracteres indicados, incluso si la entrada de datos
es inferior. Por ejemplo, si en un char(5), guardamos el valor 'A', se almacena 'A ', ocupando los
cinco bytes.
Varchar(n).Almacena n caracteres en formato ASCII, un byte por cada letra. Cuando almacenamos
datos en el tipo varchar, únicamente se utilizan los caracteres necesarios. Por ejemplo, si en un
varchar(255), guardamos el valor 'A', se almacena 'A', ocupando solo un byte.
Varchar(max). Igual que varchar, pero al declararse como max puede almacenar 231-1 bytes.
• Utilice char cuando los tamaños de las entradas de datos de columna sean coherentes.
• Use varchar cuando los tamaños de las entradas de datos de columna varíen
considerablemente.
• Utilice varchar(max) cuando los tamaños de las entradas de datos de columna varíen de
forma considerable y se pudieran superar los 8000 bytes.
Nchar(n).Almacena n caracteres en formato UNICODE, dos bytes por cada letra. Es recomendable
utilizar este tipo de datos cuando los valores que vayamos a almacenar puedan pertenecer a
diferentes idiomas.
Nvarchar(max).Igual que varchar, pero al declararse como max puede almacenar 231-1 bytes.
DATE
El tipo de dato DATE sirve para almacenar una fecha con el formato YYYY-MM-DD (4 dígitos para el
año, guión, 2 dígitos para el mes, guión, 2 dígitos para el día).
Datetime. Almacena fechas con una precisión de milisegundo. Debe usarse para fechas muy
específicas, con el formato YYYY-MM-DD HH:MM:SS
SmallDatetime. Almacena fechas con una precisión de minuto, por lo que ocupa la mitad de
espacio de que el tipo datetime, para tablas que puedan llegar a tener muchos datos es un factor a
tener muy en cuenta.
Varbinary. Se utiliza para almacenar datos binarios de longitud variable, con una longitud máxima
de 8000 bytes. Es muy similar a binary, salvo que varbinary utiliza menos espacio en disco.
2.2 Funciones
Las funciones en SQL permiten realizar operaciones o cambios en los datos de la base.
2.2.1 Introducción
Las funciones integradas de SQL Server son deterministas o no deterministas. Las funciones son
deterministas cuando devuelven siempre el mismo resultado cada vez que se llaman con un
conjunto específico de valores de entrada. Las funciones son no deterministas cuando es posible
que devuelvan distintos resultados cada vez que se llaman con un mismo conjunto específico de
valores de entrada.
Las funciones deterministas devuelven siempre el mismo resultado cada vez que se invocan con
un conjunto específico de valores de entrada y cuando el estado de la base de datos es el
mismo. Las funciones no deterministas pueden devolver resultados diferentes cada vez que se
llaman con un conjunto específico de valores de entrada aunque el estado de la base de datos a la
que tienen acceso permanezca sin cambios. Por ejemplo, la función AVG siempre devuelve el
mismo resultado dadas las condiciones indicadas anteriormente pero la función GETDATE, que
devuelve el valor datetime actual, siempre devuelve un resultado diferente.
En las funciones que mostramos a continuación los datos de las columnas que manejamos
deben ser numéricos (tipo de datos int, float, etc.).
Funciones Numéricas
• ROUND (columna | expresión, n)
Ejemplos:
SELECT ROUND(45.923, 2), ROUND(45.923, 0), ROUND(45.923, -1)
FROM SYS.DUAL;
• Resultado: 45.92 46 50
Hay muchas funciones de fecha, solo se colocan las más comunes y usadas.
Una función de agregado realiza un cálculo sobre un conjunto de valores y devuelve un solo valor.
Las funciones de agregado se suelen usar con la cláusula GROUP BY de la instrucción SELECT.
Todas las funciones de agregado son deterministas. En otras palabras, las funciones de agregado
devuelven el mismo valor cada vez que se las llama con un conjunto específico de valores de
entrada.
Las funciones de agregado solo se pueden usar como expresiones en las situaciones siguientes:
• La lista de selección de una instrucción SELECT (una sub-consulta o una consulta externa).
• Cláusula HAVING.
1. AVG
Avg(expr)
En donde expr representa el campo que contiene los datos numéricos para los que se desea
calcular la media o una expresión que realiza un cálculo utilizando los datos de dicho campo. La
media calculada por Avg es la media aritmética (la suma de los valores dividido por el número de
valores). La función Avg no incluye ningún campo Null en el cálculo.
2. Count
En donde expr contiene el nombre del campo que desea contar. Los operandos de expr pueden
incluir el nombre de un campo de una tabla, una constante o una función (la cual puede ser
intrínseca o definida por el usuario pero no otras de las funciones agregadas de SQL). Puede
contar cualquier tipo de datos incluso texto.
Aunque expr puede realizar un cálculo sobre un campo, Count simplemente cuenta el número de
registros sin tener en cuenta qué valores se almacenan en los registros. La función Count no
cuenta los registros que tienen campos null a menos que expr sea el carácter comodín asterisco
(*). Si utiliza un asterisco, Count calcula el número total de registros, incluyendo aquellos que
contienen campos null. Count(*) es considerablemente más rápida que Count(Campo). No se debe
poner el asterisco entre dobles comillas ('*').
Si expr identifica a múltiples campos, la función Count cuenta un registro sólo si al menos uno de
los campos no es Null. Si todos los campos especificados son Null, no se cuenta el registro. Hay
que separar los nombres de los campos con ampersand (&).
Max, Min
Devuelven el mínimo o el máximo de un conjunto de valores contenidos en un campo especifico
de una consulta. Su sintaxis es:
Min(expr)
Max(expr)
En donde expr es el campo sobre el que se desea realizar el cálculo. Expr pueden incluir el nombre
de un campo de una tabla, una constante o una función (la cual puede ser intrínseca o definida por
el usuario pero no otras de las funciones agregadas de SQL).