Sei sulla pagina 1di 16

DECLARACIN DE CAMPOS AUTOINCREMENTABLES.

CAMPOS AUTOINCREMENTABLES:

Un campo autoincrementable es aquel que de manera automtica


incrementar su valor al momento en que se realiza una insercin a la tabla,
la definicin de dicho campo puede realizarse a nivel de columna al
momento de crear la tabla o posteriormente alterando la estructura de esta.
Es posible definir un valor inicial a partir del cual se quieren realizar los
incrementos, tambin, puede decidir en que intervalos se realizar ese
incremento. Por default los incrementos son de 1 en 1.
En Sql Server la palabra reservada a utilizar para definir los
autoincrementos es identity, la cual puede variar en otros sistemas gestores
de bases de datos.
Ejemplo:
Piense en un listado de estudiantes que se anotarn para desarrollar una
actividad navidea, en donde slo nos interesa almacenar su nmero de
carnet, nombres y gnero. Crearemos una base de datos para ir
almacenando cada uno de ellos, por cada uno que se almacene se generar
de manera automtica un correlativo.
Para elllo se crear la base de datos, se definir una columna definida
como identity llamada correlativo, luego se insertarn algunos registros
para mostrar como funcionan los campos definidos como
autoincrementables.

Vea que se defini que los incrementos se realicen a partir de 100 y que los
intervalos sean de 2 en 2.
Lo que acabamos de ver podramos decir que son ventajas de los campos
definidos como autoincrementables (identity), sin embargo debemos saber
en que contexto utilizarlos, pues las cosas comienzan verse de una manera
distinta cuando hacemos eliminacin a los registros de una tabla que tiene
columnas con valores autoincrementables. La secuencia de valores de un
campo "identity" se genera tomando como referencia el ltimo valor
ingresado; si se elimina un registro ingresado y luego se inserta otro
registro, SQL Server seguir la secuencia, es precisamente eso lo que puede
llegar a generar graves desrdenes en los registros de almacenados en una
tabla.
Veamos un ejemplo eliminando datos.

En esta imagen se muestra lo que ocurre con los datos autoincrementables, en el proceso
1 hemos ejecutado una consulta para mostrar todos los registros de la tabla; en el proceso
2 se muestra una consulta luego de haber ejecutado la eliminacin de los registros con
correlativo 102 y 106, note como quedan vacos los espacios 102 y 106; en el proceso 3 se
han insertado 3 registros y se hace la consulta, como habr notado, de acuerdo a la
secuencia de correlativos insertados el siguiente en insertarse era el 110, la insercin se
realiz sin problema, pero ese correlativo tom la posicin que anteriormente correspndi
al espacio 102. Inconvenientes como esos son los que se generan con los tipos de
datos identity.

APLICAR RESTRICCIONES A LAS COLUMNAS DE LAS TABLAS DE LA


BASE DE DATOS.
RESTRICCIONES:

Las restricciones (constraints) nos permiten mantener la integridad de los


datos, por medio de ellas aseguramos que los valores ingresados en las tablas
sean vlidos y que las relaciones entre ellas se mantenga. Los constraints se
establecen a los campos y las tablas.
Pueden definirse al crear la tabla ("create table") o agregarse a una tabla
existente (empleando "alter table") y se pueden aplicar a un campo o a varios.
Se aconseja crear las tablas y luego agregar las restricciones.
Se pueden crear, modificar y eliminar las restricciones sin eliminar la tabla y
volver a crearla.
Hasta el momento, hemos controlado y restringido la entrada de valores a un
campo mediante el tipo de dato que le definimos (cadena, numricos, etc.), la
aceptacin o no de valores nulos, el valor por defecto. Tambin hemos
asegurado que cada registro de una tabla sea nico definiendo una clave
primaria y empleando la propiedad identity.
SQL Server ofrece ms alternativas, adems de las aprendidas, para restringir y
validar los datos, las veremos ordenadamente y al finalizar haremos un
resumen de las mismas.
Cuando se agrega una restriccin a una tabla, SQL Server comprueba los datos
existentes.
RESTRICCIN CHECK.
La restriccin "check" especifica los valores que acepta un campo, evitando que
se ingresen valores inapropiados.
No se puede aplicar esta restriccin junto con la propiedad "identity".
RESTRICCIN PRIMARY KEY.
Para establecer una llave primaria tenemos diferentes opciones, hacerlo a nivel
de tabla o a nivel de columna, hemos trabajado de ambas formas.
A nivel de columna:
Ejemplo1:
create table libros(
codigo int not null,
titulo varchar(30),
autor varchar(30),
editorial varchar(20),
primary key(codigo)
);
Ejemplo2:
create table libros(
codigo int not null primary key,
titulo varchar(30),
autor varchar(30),
editorial varchar(20),
);
A nivel de tabla:
Cuando se crea una llave primaria a nivel de tabla es importante mencionar
que la tabla ya debe existir, de lo contario no es posible crear la llave:
Ejemplo1: haciendo una modificacin a la tabla ya creada y agregando una
llave primaria sin definir una restriccin.
create table libros(
codigo int not null,
titulo varchar(30),
autor varchar(30),
editorial varchar(20),
);

Alter table libros add primary key (codigo);


Ejemplo2: haciendo una modificacin a la tabla ya creada agregando una
restriccin .
create table libros(
codigo int not null,
titulo varchar(30),
autor varchar(30),
editorial varchar(20),
);
Alter table libros add constraint PK_Codigo primary key (codigo);
Ejemplo con dos restricciones:

Vea la lnea sombreada genera error al intentar ejecutarla, pues se viola la restriccin, la
cual slo permite la insercin de 'm' o 'f.
NOTA:
el error mostrado tambin se debe dos factores ms:
- al intento de insercin de un valor repetido en una llave primaria y
- el intento de insercin de un valor de dos caracteres al campo genero_autor, ese campo
slo soporta un caracter.

INSERTAR DATOS A LAS TABLAS DE UNA BASE DE DATOS USANDO


SINTAXIS DML.
INSERCIONES:
Para insertar datos en una tabla utilizamos la siguiente estructura:
insert into NOMBRE_TABLA (CAMPO1,CAMPO2,ETC.)
values(VALOR1,VALOR2,ETC.);

Tambin es habitual insertar datos utilizando la siguiente estructura:


insert into values(VALOR1,VALOR2,ETC.);
NOTA: al momento que insertamos datos, si estamos seguros que no dejaremos
ningn campo en blanco entonces es ms facil el uso de esta sintaxis.
Al momento de realizar las inserciones debe tener en cuenta los tipos de datos
de los campos, es decir insertar lo que le corresponde, si un campo
es int entonces debe insertar un valor entero, si es char debe insertar caracteres,
etc. La insercin de valores a campos que almacenan cadenas de caracteres
(char, text, etc.) debe realizarse entre comillas, sin embargo los campos
numricos no van dentro comillas.
Como recomendacin le solicito leer los tipos de datos de Sql y en particular
como utilizarlos en el sistema Sql Server, ya que es con el cual estaremos
trabajando.
Ejemplo: insertando datos a la tabla de una base de datos, se muestra la tabla
con sus columnas y tipos de datos.

Vea que debe utilizarse las palabras reservadas insert, into y values. Con insert
into indicamos la tabla con los campos a los que se les insertar valores y con la
palabravalues indicamos que valores insertar. Tambin pueden realizarse
inserciones de la siguiente forma:

Cntrese en las lneas sombreadas en amarillo, vea la forma de insertar datos


en esas lneas, el efecto es el mismo, sin embargo para insertar datos de esa
manera debemos asegurarnos que se insertar la informacin a cada columna y
en el orden que estas se han definido en la estructura de la tabla.

ACTUALIZAR DATOS A LAS TABLAS DE LA BASE DE DATOS USANDO SINTAXIS


DML.
Para actualizar datos a una tabla utilizaremos la siguiente sintaxis:
Update nombre_tabla Set campo1 = valor1, campo2 = valor2,
campo_n=valor_n Where condicion
o
o
o

La palabra reservada update permite seleccionar la tabla en la cual se


encuentran la columnas a actualizar.
Con set indicamos cuales sern los campos que se actualizarn asignndoles el
nuevo valor.
Where es sper importante, pues al no designar una condicin la actualizacin
se realizar en todas las filas de la tabla en las columnas sealadas en el set.

Al hablar de condicin debemos considerar los operadores, estos nos ayudarn a


establecer las distintas condiciones que estableceremos, ya sea para actualizar, eliminar o
simplemente consultar datos.
Veamos algunos de los operadores ms importantes. Operadores matemticos:

Operadores Logicos

Ejemplo de actualizar datos.

Vea como en el ejercicio 1 se estn actualizando el nombre y la direccin de un cliente de


una vez.
En el ejercicio 2 actualizamos un dato, el dato a actualizar debe cumplir como condicin
que nombres y apellidos sean los planteados.
Cunado se hace una actualiazcin de los datos debe tomarse en cuenta que al no
establecer una condicin se actualizar toda la columna o columnas a las que se les est
indicando que se actualizarn, los valores actuales sern sustitudos por los nuevos en las
columnas que se indique.

ELIMINAR DATOS A LAS TABLAS DE LA BASE DE DATOS USANDO SINTAXIS DML.


ELIMINAR DATOS:
Para eliminar datos mediante sintaxis Sql utilizamos la siguiente sintaxis:

Tanto para actualizar como eliminar se recomienda siempre utilizar una condicin ya que
de lo contrario el resultado de la operacin afectar a toda la tabla.
Ejemplos de eliminacin de datos:

Con la condicin nos aseguramos de eliminar slo la fila o filas que cumplan la condicin,
al no escribir una condicin eliminaramos todo el contenido de la tabla, quedando est
completamente vaca.

CONSULTAS BSICA Y CONSULTAS


CONDICIONALES.
CONSULTAS:
Una consulta Sql maneja la estructura:
Select: permite elegir las columnas de las cuales se extraern los valores a mostrar.
From: permite indicar la tabla de la cual se mostrarn los valores a consultar.
Where: permite establecer un filtro para los valores que se mostarn.
Ejemplos:
En los siguientes ejemplos usamos para las consultas algunas palabras que permiten
refinar la bsqueda o la esttica a la hora de visualizar los datos, por ejmeplo:

o
o
o
o

LIKE-------------------------------> El operador LIKE se utiliza en una clusula


WHERE para buscar un patrn especificado en una columna.
IN----------------------------------> El operador IN permite especificar varios valores
en una clusula WHERE.
BETWEEN------------------------> El operador BETWEEN se utiliza para
seleccionar valores dentro de un rango.
ORDER BY DESC / ASC ------> ORDER BY se utiliza para ordenar el conjunto
de resultados de una o ms columnas. Ordena los registros en orden ascendente
por defecto. Para ordenar los registros en orden descendente, puede utilizar la
palabra clave DESC.

AGRUPAMIENTO Y RESUMEN DE DATOS.


Seguimos con las consultas, a continuacin desarrollaremos los puntos que se
plantean:
o
o
o

Presentacin de los primeros "n" valores.


Uso de funciones de agregado.
Fundamentos de "Group by".

o
o

Generacin de valores de agregado.


Uso de Compute y Compute by.

PRESENTACIN DE LOS PRIMEROS "n" VALORES.


Existe una forma de poder mostrar solo las primeras "n" filas de un conjunto de resultados
dados en la consulta, esto se logra mediante el uso de la clusula TOP, a menudo esta se
combina con las especificaciones de la clusula order by.
Ejemplos
Use Nortwind
select top 10 orderid, productid, quantity
from [order details]
order by quantity desc
obtendriamos el siguiente resultado

Como podemos observar, se retornan nada mas las primeras 10, pudiendo haber
cambiado ese valor por el que nosotros deseamos.
veamos otro ejemplo
SELECT TOP 5 WITH TIES orderid, productid, quantity
FROM [order details]
ORDER BY quantity DESC

Como podemos observar el resultado es un poco distinto, cuando se utiliza la


clausula With ties, entonces puede devolver ms resultados que los esperados, como en
este caso que solo pediamos 5, pero como los ltimos 5 tienen el mismo valor que el
registro 5 respecto al campo que estamos ordenando.
USO DE FUNCIONES DE AGREGADO.
Las funciones de agregado en el T-SQL realizan clculos sobre un conjunto de valores y
luego de realizar esos calculo retornan un solo valor. Con la excepcin de la funcin
COUNT, todas la demas funciones del T-SQL no toman en cuenta los valores que son
nulos en los campos.
Las funciones se usan en combinacin con la clausula Group by. A continuacin se hace
un listado de todas ellas y veremos ejemplos de las ms utilizadas.
Nombre de la Funcin

Descripcin

AVG

Devuelve el promedio de los valores de una expresin numrica

COUNT

Retorna el nmero de valores en una expresin

COUNT(*)

Nmero de filas seleccionadas

MAX

El valor ms alto en una expresin

MIN

El valor ms bajo dentro de una expresin

SUM

La suma de todos los valores de una expresin

STDEV

Desviacin estadistica de todos los valores

STDEVP

Desviacin estadstica para la poblacin

VAR

Varianza estadstica de todos los valores

VARP

Varianza estadstica de todos los valores para la poblacin

El uso de las funciones de agregado con valores nulos, como ya hemos dicho
anteriormente, la mayoria de las funciones de agregado pasan por alto los valores que son
nulos en el campo. Por lo que COUNT(*) es diseada para contar las filas incluyendo las
que tienen valores nulos.
use northwind
select count(*) from employees

en este caso, se cuentan los empleados con los cuales cuenta la empresa
select count(reportsto) from employees

En este ultimo lo analizamos de la siguiente manera: hay 8 empleados que deben reportar
sus actividades a un superior, por lo que hay 1 que no reporta a nadie.
Ahora veamos la siguiente sentencia
select count( distinct reportsto) from employees
El resultado que obtendriamos ser: 2, lo que significa que en esta empesa hay 2 jefes a
los cuales los empleados les reportan.
Esto se logra por que la sentencia ltima no toma en cuenta los resgistro (en este caso el
campo "reportsto" ) que se repiten
FUNDAMENTOS DE "GROUP BY".
Analicemos las siguientes sentencias
select productid, orderid, quantity from [order details]
Este nos da la informacin del detalle de todas la ordenes que han sido generadas dentro
de la empresa.

Es de tener presente que no son solo 11 registros, si no un total de 2155 (que por
cuestiones de espacio no se pueden apreciar).
Ahora bien
si tenemos la siguiente sentencia, donde debemos ver solamente el total de los productos
que han sido pedidos
select productid, SUM(quantity) from [order details] group by productid

Pero si quiseramos ver, solo para un producto especifico:


select productid, SUM(quantity) from [order details] where productid=23 group by productid
esta sera la sentencia que nos los haria.

ahora bien se puede colocar una condicion a la la clausula group by, para restringir aun
mas los resultado si es que deseamos hacerlo. Observemos la siguiente sentencia
select productid, SUM(quantity) from [order details] group by productidhaving
SUM(quantity)>=1100
nos daria el listado de todos los productos cuya suma de cantidades en las ordenes son
mayores a 1100 unidades, y esto es lo que veriamos

GENERACIN DE VALORES DE AGREGADO.


Uso de la clausula group by en combinacin con el operador rollup, veamos el ejemplo
select productid, orderid, SUM(quantity) from [order details] group by productid,
orderid with

rollup order by productid, orderid

Lo que produce el siguiente resultado

En fila 1 tenemos el total general de todos los productos (51317) en 2 el el total general
para el producto1 (828) y del 3 en adelante el total del producto 1en la orden 10285 y asi
sucesivamente hasta que encontremos el codigo del producto 2, luego el del 3 con el
mismo nivel de detalle.
Analicemos el siguiente ejemplo

select productid, orderid, SUM(quantity) from [order details] group by productid,


orderid with cube order by productid, orderid
Aqui el desagregado es diferente

Donde en la primera fila tenemos el total general de todos los producto que han sido
ordenado, luego, tenemos los totales de productos que han sido ordenados en cada orden,
y si seguimos ms abajo, encontraremos un detalle parecido al de la sentencia anterior.

USO DE COMPUTE Y COMPUTE BY.


uso de compute by
select productid, orderid, quantityfrom [order details] order by productid, orderid compute
sum (quantity) by productid compute sum (quantity)
teniendo como resultado el siguiente reporte