0% encontró este documento útil (0 votos)
141 vistas86 páginas

SQL Server mARCODELCID PDF

El documento explica cómo usar la cláusula WHERE en SQL para seleccionar registros específicos de una tabla basados en condiciones. Proporciona ejemplos de cómo usar los operadores de comparación (=, <>, >, <, >=, <=) en condiciones WHERE para recuperar registros que cumplan con ciertos criterios. También crea tablas de ejemplo y realiza consultas SELECT con diferentes condiciones WHERE para ilustrar su uso.

Cargado por

MarcoReynoso
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
141 vistas86 páginas

SQL Server mARCODELCID PDF

El documento explica cómo usar la cláusula WHERE en SQL para seleccionar registros específicos de una tabla basados en condiciones. Proporciona ejemplos de cómo usar los operadores de comparación (=, <>, >, <, >=, <=) en condiciones WHERE para recuperar registros que cumplan con ciertos criterios. También crea tablas de ejemplo y realiza consultas SELECT con diferentes condiciones WHERE para ilustrar su uso.

Cargado por

MarcoReynoso
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Catedrtico: Marco del Cid SQL Server

Sentencia Where para recuperar algunos registros


Hemos aprendido a seleccionar algunos campos de una tabla.

Tambin es posible recuperar algunos registros. Existe una clusula, "where" con la cual podemos
especificar condiciones para una consulta "select". Es decir, podemos recuperar algunos registros,
slo los que cumplan con ciertas condiciones indicadas con la clusula "where". Por ejemplo,
queremos ver el usuario cuyo nombre es "Marcelo", para ello utilizamos "where" y luego de ella, la
condicin:
select nombre, clave
from usuarios
where nombre='Marcelo';

La sintaxis bsica y general es la siguiente:

select NOMBRECAMPO1, ..., NOMBRECAMPOn


from NOMBRETABLA
where CONDICION;

Para las condiciones se utilizan operadores relacionales (tema que trataremos ms adelante en
detalle). El signo igual(=) es un operador relacional.

Para la siguiente seleccin de registros especificamos una condicin que solicita los usuarios cuya
clave es igual a "Municipal":
select nombre,clave
from usuarios
where clave='Municipal';

Si ningn registro cumple la condicin establecida con el "where", no aparecer ningn registro.

Entonces, con "where" establecemos condiciones para recuperar algunos registros.

Para recuperar algunos campos de algunos registros combinamos en la consulta la lista de campos
y la clusula "where":
select nombre
from usuarios
where clave='Municipal';

1
Catedrtico: Marco del Cid SQL Server

En la consulta anterior solicitamos el nombre de todos los usuarios cuya clave sea igual a
"Municipal".

Ejemplo:

Trabajamos con la tabla "usuarios" que consta de 2 campos: nombre y clave.

Eliminamos la tabla, si existe:


if object_id('usuarios') is not null
drop table usuarios;

Creamos la tabla:
create table usuarios (
nombre varchar(30),
clave varchar(10)
);

Vemos la estructura de la tabla:


sp_columns usuarios;

Ingresamos algunos registros:


insert into usuarios values ('Marcelo','Comunicaciones');
insert into usuarios values ('Juan Perez','Juancito');
insert into usuarios values ('Susana','Municipal');
insert into usuarios values ('Luis','Municipal');

Realizamos una consulta especificando una condicin, queremos ver el usuario cuyo nombre es
"Leonardo":
select *from usuarios
where nombre='Juan Perez';

Queremos ver el nombre de los usuarios cuya clave es "Municipal":

select nombre from usuarios


where clave='Municipal';

2
Catedrtico: Marco del Cid SQL Server

Realizamos un "select" de los nombres de los usuarios cuya clave es "Santizo":


select nombre from usuarios
where clave='Santizo';

No se muestra ningn registro ya que ninguno cumple la condicin.

Ejercicio

Cree la tabla "agenda" en la que registra los datos de sus amigos.

1- Elimine "agenda", si existe:


if object_id('agenda') is not null
drop table agenda;

2- Cree la tabla, con los siguientes campos:

Apellido (cadena de 30), nombre (cadena de 20), domicilio (cadena de 30) y telefono (cadena de
11).

3- Visualice la estructura de la tabla "agenda".

4- Ingrese los siguientes registros:


Del Cid, Marco Antonio, zona 1, 4234567;
Bustamante, Bertha, zona 18, 4458787;
Lpez, Hctor, zona 21, 4887788;
Lpez, Luis, zona 10, 4545454;
Lpez, Marisa, zona 10 333, 4545454.

5- Seleccione todos los registros de la tabla

6- Seleccione el registro cuyo nombre sea "Marisa" (1 registro)

7- Seleccione los nombres y domicilios de quienes tengan apellido igual a "Lpez" (3 registros)

8- Muestre el nombre de quienes tengan el telfono "4545454" (2 registros)

3
Catedrtico: Marco del Cid SQL Server

Operadores relacionales
Los operadores son smbolos que permiten realizar operaciones matemticas, concatenar
cadenas, hacer comparaciones.

SQL Server tiene 4 tipos de operadores:

relacionales (o de comparacin)
aritmticos
de concatenacin
lgicos.

A continuacin se vern solamente los primeros.

Los operadores relacionales (o de comparacin) nos permiten comparar dos expresiones, que
pueden ser variables, valores de campos, etc.

Se ha aprendido a especificar condiciones de igualdad para seleccionar registros de una tabla; por
ejemplo:
select *from libros
where autor='Miguel ngel Asturias';

Utilizamos el operador relacional de igualdad.

Los operadores relacionales vinculan un campo con un valor para que SQL Server compare cada
registro (el campo especificado) con el valor dado.

Los operadores relacionales son los siguientes:

= igual a

<> Distinto a

> Mayor que

< Menor que

>= mayor o igual que

<= menor o igual que

Podemos seleccionar los registros cuyo autor sea diferente de "Miguel ngel Asturias", para ello
usamos la condicin:

4
Catedrtico: Marco del Cid SQL Server

select * from libros


where autor<>' Miguel ngel Asturias ';

Podemos comparar valores numricos. Por ejemplo, queremos mostrar los ttulos y precios de los
libros cuyo precio sea mayor a 20 quetzales:

select titulo, precio


from libros
where precio>20;

Queremos seleccionar los libros cuyo precio sea menor o igual a 30:

select *from libros


where precio<=30;

Los operadores relacionales comparan valores del mismo tipo. Se emplean para comprobar si un
campo cumple con una condicin.

Ejemplo

Creamos la tabla "libros.

Eliminamos la tabla "libros", si existe:


if object_id('libros') is not null
drop table libros;

5
Catedrtico: Marco del Cid SQL Server

La creamos con la siguiente estructura:


create table libros(
titulo varchar(30),
autor varchar(30),
editorial varchar(15),
precio float
);

Agregamos registros a la tabla:

insert into libros values ('El Seor Presidente','Miguel ngel


Asturias','Emece',24.50);
insert into libros values ('Martin Fierro','Jose
Hernandez','Emece',16.00);
insert into libros ('Aprenda PHP','Mario Molina','Emece',35.40);
insert into libros values ('Hombres de maz','Miguel ngel
Asturias','Paidos',50.90);

Seleccionamos los registros cuyo autor sea diferente de 'Miguel ngel Asturias':
select *from libros
where autor<>'Miguel ngel Asturias';

Seleccionamos los registros cuyo precio supere los 20 pesos, slo el ttulo y precio:
select titulo,precio
from libros
where precio>20;

Note que el valor con el cual comparamos el campo "precio", como es numrico (float), no se
coloca entre comillas. Los libros cuyo precio es menor o igual a 20 quetzales no aparecen en la
seleccin.

Recuperamos aquellos libros cuyo precio es menor o igual a 30:

6
Catedrtico: Marco del Cid SQL Server

select *from libros


where precio<=30;

Ejercicios

Problema 1:

Un comercio que vende artculos de computacin registra los datos de sus artculos en una tabla
con ese nombre.

1- Elimine "articulos", si existe:


if object_id('articulos') is not null
drop table articulos;

2- Cree la tabla, con la siguiente estructura:


create table articulos(
codigo integer,
nombre varchar(20),
descripcion varchar(30),
precio float,
cantidad integer
);

3- Vea la estructura de la tabla


(sp_columns)

4- Ingrese algunos registros:


insert into articulos values (1,'impresora','Epson
C45',400.80,20);
insert into articulos values (2,'impresora','Epson Stylus
C85',500,30);
insert into articulos values (3,'monitor','Samsung 14',800,10);

7
Catedrtico: Marco del Cid SQL Server

insert into articulos values (4,'teclado','ingles


Biswal',100,50);
insert into articulos values (5,'teclado','espaol
Comtech',90,50);

5- Seleccione los datos de las impresoras (2 registros)

6- Seleccione los artculos cuyo precio sea mayor o igual a 400 (3 registros)

7- Seleccione el cdigo y nombre de los artculos cuya cantidad sea menor a 30 (2 registros)

8- Selecciones el nombre y descripcin de los artculos que NO cuesten Q100 (4 registros)

Problema 2:

Un video club que alquila pelculas en video almacena la informacin de sus pelculas en alquiler
en una tabla denominada "peliculas".

1- Elimine la tabla, si existe.

2- Cree la tabla eligiendo el tipo de dato adecuado para cada campo:


create table peliculas(
titulo varchar(20),
actor varchar(20),
duracion integer,
cantidad integer
);

3- Ingrese los siguientes registros:


insert into peliculas values ('Mision imposible','Tom
Cruise',120,3);
insert into peliculas values ('Mision imposible 2','Tom
Cruise',180,4);
insert into peliculas values ('Mujer bonita','Julia R.',90,1);
insert into peliculas ('Elsa y Fred','China Zorrilla',80,2);

8
Catedrtico: Marco del Cid SQL Server

4- Seleccione las pelculas cuya duracin no supere los 90 minutos (2 registros)

5- Seleccione el ttulo de todas las pelculas en las que el actor NO sea "Tom Cruise" (2 registros)

6- Muestre todos los campos, excepto "duracion", de todas las pelculas de las que haya ms de 2
copias (2 registros).

Delete para Borrar registros


Para eliminar todos los registros de una tabla usamos el comando "delete":
delete from nombreTabla;

Muestra un mensaje indicando la cantidad de registros que ha eliminado.

Si no queremos eliminar todos los registros, sino solamente algunos, debemos indicar cul o cules,
para ello utilizamos el comando "delete" junto con la clusula "where" con la cual establecemos la
condicin que deben cumplir los registros a borrar.

Por ejemplo, queremos eliminar aquel registro cuyo nombre de usuario es "Marcelo":
delete from usuarios
where nombre='Marcelo';

Si solicitamos el borrado de un registro que no existe, es decir, ningn registro cumple con la
condicin especificada, ningn registro ser eliminado.

Tenga en cuenta que si no se coloca una condicin, se eliminan todos los registros de la tabla
nombrada.

Ejemplo

1. Trabajamos con la tabla "usuarios".


2. Eliminamos la tabla "usuarios", si existe:
if object_id('usuarios') is not null
drop table usuarios;
La creamos con la siguiente estructura:
create table usuarios(
nombre varchar(30),
clave varchar(10)
);

9
Catedrtico: Marco del Cid SQL Server

Agregamos registros a la tabla:

insert into usuarios values ('Marcelo','Municipal');


insert into usuarios values ('Susana','chapita');
insert into usuarios values ('CarlosFuentes','Comunicaciones');
insert into usuarios values ('FedericoLopez','Comunicaciones');

Seleccionamos todos los registros:


select *from usuarios;

Vamos a eliminar el registro cuyo nombre de usuario es "Marcelo":


delete from usuarios
where nombre='Marcelo';

Veamos el contenido de la tabla:


select * from usuarios;

Intentamos eliminarlo nuevamente:

delete from usuarios


where nombre='Marcelo';

Veamos el contenido de la tabla:


select * from usuarios;

Como ningn registro cumple con la condicin no se borran registros.

Eliminamos todos los registros cuya clave es 'Comunicaciones':


delete from usuarios
where clave='Comunicaciones';

Veamos el contenido de la tabla:


select * from usuarios;

Eliminemos todos los registros:


delete from usuarios;

10
Catedrtico: Marco del Cid SQL Server

Veamos el contenido de la tabla:


select * from usuarios;

Ejercicios

Problema 1:

Trabaje con la tabla "agenda" que registra la informacin referente a sus amigos.

1- Elimine la tabla si existe:


if object_id('agenda') is not null
drop table agenda;

2- Cree la tabla con los siguientes campos:


create table agenda(
apellido varchar(30),
nombre varchar(20),
domicilio varchar(30),
telefono varchar(11)
);

3- Ingrese los siguientes registros (insert into):

Alvarez,Alberto, zona 7, 4234567,

Juarez,Juan, zona 1 ,4458787,

Lopez,Maria, zona 6, 4545454,

Lopez,Jose, zona 4 ,4545454,

Salas,Susana, zona 14,4123456.

4- Elimine el registro cuyo nombre sea "Juan" (1 registro afectado)

5- Elimine los registros cuyo nmero telefnico sea igual a "4545454" (2 registros afectados):

11
Catedrtico: Marco del Cid SQL Server

6- Muestre la tabla.

7- Elimine todos los registros (2 registros afectados):

8- Muestre la tabla.

Problema 2:

Un comercio que vende artculos de computacin registra los datos de sus artculos en una tabla
con ese nombre.

1- Elimine "articulos", si existe:


if object_id('articulos') is not null
drop table articulos;

2- Cree la tabla, con la siguiente estructura:


create table articulos(
codigo integer,
nombre varchar(20),
descripcion varchar(30),
precio float,
cantidad integer
);

3- Vea la estructura de la tabla.

4- Ingrese algunos registros:


insert into articulos values (1,'impresora','Epson Stylus
C45',400.80,20);
insert into articulos values (2,'impresora','Epson Stylus
C85',500,30);
insert into articulos values (3,'monitor','Samsung 14',800,10);
insert into articulos values (4,'teclado','ingles
Biswal',100,50);

12
Catedrtico: Marco del Cid SQL Server

insert into articulos values (5,'teclado','espaol


Biswal',90,50);

5- Elimine los artculos cuyo precio sea mayor o igual a 500 (2 registros)
delete from articulos
where precio>=500;

7- Elimine todas las impresoras (1 registro)


delete from articulos
where nombre='impresora';

8- Elimine todos los artculos cuyo cdigo sea diferente a 4 (1 registro)


delete from articulos
where codigo<>4;

9- Mostrar la tabla despus que borra cada registro.

Update para actualizar registros


Decimos que actualizamos un registro cuando modificamos alguno de sus valores.

Para modificar uno o varios datos de uno o varios registros utilizamos "update" (actualizar).

Por ejemplo, en nuestra tabla "usuarios", queremos cambiar los valores de todas las claves, por
"RealMadrid":
update usuarios set clave='RealMadrid';

Utilizamos "update" junto al nombre de la tabla y "set" junto con el campo a modificar y su nuevo
valor.

El cambio afectar a todos los registros.

Podemos modificar algunos registros, para ello debemos establecer condiciones de seleccin con
"where".

13
Catedrtico: Marco del Cid SQL Server

Por ejemplo, queremos cambiar el valor correspondiente a la clave de nuestro usuario llamado
"Federicolopez", queremos como nueva clave "Atitlan", necesitamos una condicin "where" que
afecte solamente a este registro:
update usuarios set clave='Atitlan'
where nombre='Federicolopez';

Si Microsoft SQL Server no encuentra registros que cumplan con la condicin del "where",
no se modifica ninguno.
Las condiciones no son obligatorias, pero si omitimos la clusula "where", la actualizacin
afectar a todos los registros.

Actualizacin de varios campos


Tambin podemos actualizar varios campos en una sola instruccin:
update usuarios set nombre='Marceloduarte', clave='Marce'
where nombre='Marcelo';

Para ello colocamos "update", el nombre de la tabla, "set" junto al nombre del campo y el nuevo
valor y separado por coma, el otro nombre del campo con su nuevo valor.

Ejemplo

1. Trabajamos con la tabla "usuarios".


2. Eliminamos la tabla si existe:
if object_id('usuarios') is not null
drop table usuarios;

3. Creamos la tabla:
create table usuarios(
nombre varchar(20),
clave varchar(10)
);

4. Ingresamos algunos registros:

14
Catedrtico: Marco del Cid SQL Server

insert into usuarios values ('Marcelo','Municipal');


insert into usuarios values ('Susana','chapita');
insert into usuarios values ('Carlosfuentes','Comunicaciones');
insert into usuarios values ('Federicolopez','Comunicaciones');

5. Cambiaremos los valores de todas las claves, por la cadena "RealMadrid":


update usuarios set clave='RealMadrid';

6. El cambio afect a todos los registros, vemoslo:


select *from usuarios;

7. Necesitamos cambiar el valor de la clave del usuario llamado "Federicolopez" por


"Comunicaciones":
update usuarios set clave='Comunicaciones'
where nombre='Federicolopez';

Verifiquemos que la actualizacin se realiz:


select *from usuarios;

Vimos que si Microsoft SQL Server no encuentra registros que cumplan con la condicin no se
modifican registros:

update usuarios set clave='payaso'


where nombre='JuanaJuarez';

Si vemos la tabla veremos que no ha cambiado:

select *from usuarios;

Para actualizar varios campos en una sola instruccin empleamos:


update usuarios set nombre='Marceloduarte', clave='Marce'
where nombre='Marcelo';

15
Catedrtico: Marco del Cid SQL Server

Ejercicios

Problema 1:

Trabaje con la tabla "agenda" que registra la informacin referente a sus amigos.

1- Elimine la tabla si existe:


if object_id('agenda') is not null
drop table agenda;

2- Cree la tabla con los siguientes campos: apellido (cadena de 30), nombre (cadena de 20),

domicilio (cadena de 30) y telefono (cadena de 11):


create table agenda(
apellido varchar(30),
nombre varchar(20),
domicilio varchar(30),
telefono varchar(11)
);

3- Ingrese los siguientes registros (insert into):

Alvarez,Alberto, zona 11 ,4234567,

Juarez,Juan, zona 8,4458787,

Lopez,Maria, zona 6, 4545454,

Lopez,Jose, zona 6, 4545454,

Salas,Susana, zona 18,4123456.

4- Elimine el registro cuyo nombre sea "Juan" (1 registro afectado)

5- Elimine los registros cuyo nmero telefnico sea igual a "4545454" (2 registros afectados):

6- Muestre la tabla.

16
Catedrtico: Marco del Cid SQL Server

7- Elimine todos los registros (2 registros afectados):

8- Muestre la tabla.

Problema 2:

Un comercio que vende artculos de computacin registra los datos de sus artculos en una tabla
con

ese nombre.

1- Elimine "articulos", si existe:


if object_id('articulos') is not null
drop table articulos;

2- Cree la tabla, con la siguiente estructura:


create table articulos(
codigo integer,
nombre varchar(20),
descripcion varchar(30),
precio float,
cantidad integer
);

3- Vea la estructura de la tabla.

4- Ingrese algunos registros:


insert into articulos values (1,'impresora','Epson Stylus
C45',400.80,20);
insert into articulos values (2,'impresora','Epson Stylus
C85',500,30);
insert into articulos values (3,'monitor','Samsung 14',800,10);
insert into articulos values (4,'teclado','ingles
Biswal',100,50);

17
Catedrtico: Marco del Cid SQL Server

insert into articulos values (5,'teclado','espaol


Biswal',90,50);

5- Elimine los artculos cuyo precio sea mayor o igual a 500 (2 registros)
delete from articulos
where precio>=500;

7- Elimine todas las impresoras (1 registro)


delete from articulos
where nombre='impresora';

8- Elimine todos los artculos cuyo cdigo sea diferente a 4 (1 registro)


delete from articulos
where codigo<>4;

9- Mostrar los registros de la tabla.

Comentarios
Para aclarar algunas instrucciones, en ocasiones, necesitamos agregar comentarios.

Es posible ingresar comentarios en la lnea de comandos, es decir, un texto que no se ejecuta; para
ello se emplean dos guiones (--) al comienzo de la lnea:
select * from libros --mostramos los registros de libros;

En la lnea anterior, todo lo que est luego de los guiones (hacia la derecha) no se ejecuta.

Para agregar varias lneas de comentarios, se coloca una barra seguida de un asterisco (/*) al
comienzo del bloque de comentario y al finalizarlo, un asterisco seguido de una barra (*/).

select titulo, autor


/*mostramos ttulos y
nombres de los autores*/

18
Catedrtico: Marco del Cid SQL Server

from libros;

Todo lo que est entre los smbolos "/*" y "*/" no se ejecuta.

Valores null (is null)


"null" significa "dato desconocido" o "valor inexistente". No es lo mismo que un valor "0", una
cadena vaca o una cadena literal "null".

A veces, puede desconocerse o no existir el dato correspondiente a algn campo de un registro. En


estos casos decimos que el campo puede contener valores nulos.

Por ejemplo, en nuestra tabla de libros, podemos tener valores nulos en el campo "precio" porque
es posible que para algunos libros no le hayamos establecido el precio para la venta.

En contraposicin, tenemos campos que no pueden estar vacos jams.

Veamos un ejemplo. Tenemos nuestra tabla "libros". El campo "titulo" no debera estar vaco
nunca, igualmente el campo "autor". Para ello, al crear la tabla, debemos especificar que dichos
campos no admitan valores nulos:
create table libros(
titulo varchar(30) not null,
autor varchar(20) not null,
editorial varchar(15) null,
precio float
);

Para especificar que un campo no admita valores nulos, debemos colocar "not null" luego de la
definicin del campo.

En el ejemplo anterior, los campos "editorial" y "precio" si admiten valores nulos.

Cuando colocamos "null" estamos diciendo que admite valores nulos (caso del campo "editorial");
por defecto, es decir, si no lo aclaramos, los campos permiten valores nulos (caso del campo
"precio").

Si ingresamos los datos de un libro, para el cual an no hemos definido el precio podemos colocar
"null" para mostrar que no tiene precio:

19
Catedrtico: Marco del Cid SQL Server

insert into libros values('El hacedor','Borges','Emece',null);

Note que el valor "null" no es una cadena de caracteres, no se coloca entre comillas.

Entonces, si un campo acepta valores nulos, podemos ingresar "null" cuando no conocemos el
valor.

Tambin podemos colocar "null" en el campo "editorial" si desconocemos el nombre de la


editorial a la cual pertenece el libro que vamos a ingresar:

insert into libros values('Alicia en el pais','Lewis


Carroll',null,25);

Si intentamos ingresar el valor "null" en campos que no admiten valores nulos (como "titulo" o
"autor"), SQL Server no lo permite, muestra un mensaje y la insercin no se realiza; por ejemplo:
insert into libros values(null,'Borges','Siglo XXI',25);

Para ver cules campos admiten valores nulos y cules no, podemos emplear el procedimiento
almacenado "sp_columns" junto al nombre de la tabla. Nos muestra mucha informacin, en la
columna "IS_NULLABLE" vemos que muestra "NO" en los campos que no permiten valores nulos y
"YES" en los campos que si los permiten.

Para recuperar los registros que contengan el valor "null" en algn campo, no podemos utilizar los
operadores relacionales vistos anteriormente: = (igual) y <> (distinto); debemos utilizar los
operadores "is null" (es igual a null) y "is not null" (no es null):

select * from libros


where precio is null;

La sentencia anterior tendr una salida diferente a la siguiente:

select * from libros


where precio=0;

Con la primera sentencia veremos los libros cuyo precio es igual a "null" (desconocido); con la
segunda, los libros cuyo precio es 0.

Igualmente para campos de tipo cadena, las siguientes sentencias "select" no retornan los mismos
registros:

20
Catedrtico: Marco del Cid SQL Server

select * from libros where editorial is null;


select * from libros where editorial='';

Con la primera sentencia veremos los libros cuya editorial es igual a "null", con la segunda, los
libros cuya editorial guarda una cadena vaca.

Entonces, para que un campo no permita valores nulos debemos especificarlo luego de definir el
campo, agregando "not null". Por defecto, los campos permiten valores nulos, pero podemos
especificarlo igualmente agregando "null".

Estableciendo una Clave primaria


Una clave primaria es un campo (o varios) que identifica un solo registro (fila) en una tabla.

Para un valor del campo clave existe solamente un registro.

Veamos un ejemplo, si tenemos una tabla con datos de personas, el nmero de documento puede
establecerse como clave primaria, es un valor que no se repite; puede haber personas con igual
apellido y nombre, incluso el mismo domicilio (padre e hijo por ejemplo), pero su documento ser
siempre distinto.

Si tenemos la tabla "usuarios", el nombre de cada usuario puede establecerse como clave primaria,
es un valor que no se repite; puede haber usuarios con igual clave, pero su nombre de usuario ser
siempre diferente.

Podemos establecer que un campo sea clave primaria al momento de crear la tabla o luego que ha
sido creada. Vamos a aprender a establecerla al crear la tabla. Hay 2 maneras de hacerlo, por
ahora veremos la sintaxis ms sencilla.

Tenemos nuestra tabla "usuarios" definida con 2 campos ("nombre" y "clave").

La sintaxis bsica y general es la siguiente:

create table NOMBRETABLA(


CAMPO TIPO,
...
primary key (NOMBRECAMPO)
);

21
Catedrtico: Marco del Cid SQL Server

En el siguiente ejemplo definimos una clave primaria, para nuestra tabla "usuarios" para
asegurarnos que cada usuario tendr un nombre diferente y nico:

create table usuarios(


nombre varchar(20),
clave varchar(10),
primary key(nombre)
);

Lo que hacemos agregar luego de la definicin de cada campo, "primary key" y entre parntesis, el
nombre del campo que ser clave primaria.

Una tabla slo puede tener una clave primaria. Cualquier campo (de cualquier tipo) puede ser clave
primaria, debe cumplir como requisito, que sus valores no se repitan ni sean nulos. Por ello, al definir
un campo como clave primaria, automticamente SQL Server lo convierte a "not null".

Luego de haber establecido un campo como clave primaria, al ingresar los registros, SQL Server
controla que los valores para el campo establecido como clave primaria no estn repetidos en la
tabla; si estuviesen repetidos, muestra un mensaje y la insercin no se realiza. Es decir, si en nuestra
tabla "usuarios" ya existe un usuario con nombre "juanperez" e intentamos ingresar un nuevo
usuario con nombre "juanperez", aparece un mensaje y la instruccin "insert" no se ejecuta.

Igualmente, si realizamos una actualizacin, SQL Server controla que los valores para el campo
establecido como clave primaria no estn repetidos en la tabla, si lo estuviese, aparece un mensaje
indicando que se viola la clave primaria y la actualizacin no se realiza.

Ejemplo:

1. Trabajamos con la tabla "usuarios".


2. Eliminamos la tabla, si existe:
if object_id('usuarios') is not null
drop table usuarios;

22
Catedrtico: Marco del Cid SQL Server

3. Creamos la tabla definiendo el campo "nombre" como clave primaria:


create table usuarios(
nombre varchar(20),
clave varchar(10),
primary key(nombre)
);

Al campo "nombre" no lo definimos "not null", pero al establecerse como clave primaria, SQL Server
lo convierte en "not null", veamos que en la columna "IS_NULLABLE" aparece "NO":

sp_columns usuarios;

4. Ingresamos algunos registros:


insert into usuarios values ('juanperez','Comunicaciones');
insert into usuarios values ('raulgarcia','Municipal');

Recordemos que cuando un campo es clave primaria, sus valores no se repiten. Intentamos ingresar
un valor de clave primaria existente:
insert into usuarios (nombre, clave)
values ('juanperez','payaso');

Se muestra un mensaje de error y la sentencia no se ejecuta.

Cuando un campo es clave primaria, sus valores no pueden ser nulos. Intentamos ingresar el valor
"null" en el campo clave primaria:

insert into usuarios (nombre, clave)


values (null,'payaso');

Aparece un mensaje de error y la sentencia no se ejecuta.

Si realizamos alguna actualizacin, SQL Server controla que los valores para el campo establecido
como clave primaria no estn repetidos en la tabla. Intentemos actualizar el nombre de un usuario
colocando un nombre existente:

23
Catedrtico: Marco del Cid SQL Server

update usuarios set nombre='juanperez'


where nombre='raulgarcia';

Se muestra un mensaje indicando que se viola la clave primaria y la actualizacin no se realiza.

Ejercicios

Problema 1:

Trabaje con la tabla "libros" de una librera.

1- Elimine la tabla si existe:


if object_id('libros') is not null
drop table libros;

2- Crela con los siguientes campos, estableciendo como clave primaria el campo "codigo":
create table libros(
codigo int not null,
titulo varchar(40) not null,
autor varchar(20),
editorial varchar(15),
primary key(codigo)
);

3- Ingrese los siguientes registros:


insert into libros values (1,'El aleph','Borges','Emece');
insert into libros values (2,'Martin Fierro','Jose
Hernandez','Planeta');
insert into libros values (3,'Aprenda PHP','Mario Molina','Nuevo
Siglo');

4- Ingrese un registro con cdigo repetido (aparece un mensaje de error)

24
Catedrtico: Marco del Cid SQL Server

5- Intente ingresar el valor "null" en el campo "codigo"

6- Intente actualizar el cdigo del libro "Martin Fierro" a "1" (mensaje de error)

Problema 2:

Un instituto de enseanza almacena los datos de sus estudiantes en una tabla llamada "alumnos".

1- Elimine la tabla "alumnos" si existe:


if object_id('alumnos') is not null
drop table alumnos;

2- Cree la tabla con la siguiente estructura intentando establecer 2 campos como clave primaria, el

campo "documento" y "legajo" (no lo permite):


create table alumnos(
legajo varchar(4) not null,
documento varchar(8),
nombre varchar(30),
domicilio varchar(30),
primary key(documento),
primary key(legajo)
);

3- Cree la tabla estableciendo como clave primaria el campo "documento":


create table alumnos(
legajo varchar(4) not null,
documento varchar(8),
nombre varchar(30),
domicilio varchar(30),
primary key(documento)
);

25
Catedrtico: Marco del Cid SQL Server

4- Verifique que el campo "documento" no admite valores nulos:


sp_columns alumnos;

5- Ingrese los siguientes registros:


insert into alumnos values('A233','22345345','Perez
Mariana','zona 4');
insert into alumnos values('A567','23545345','Morales
Marcos','zona 8');

6- Intente ingresar un alumno con nmero de documento existente (no lo permite)

7- Intente ingresar un alumno con documento nulo (no lo permite)

26
Catedrtico: Marco del Cid SQL Server

El atributo Identity
Un campo numrico puede tener un atributo extra "identity". Los valores de un campo con este
atributo generan valores secuenciales que se inician en 1 y se incrementan en 1 automticamente.

Se utiliza generalmente en campos correspondientes a cdigos de identificacin para generar


valores nicos para cada nuevo registro que se inserta.

Slo puede haber un campo "identity" por tabla.

Para que un campo pueda establecerse como "identity", ste debe ser entero (tambin puede ser
de un subtipo de entero o decimal con escala 0, tipos que estudiaremos posteriormente).

Para que un campo genere sus valores automticamente, debemos agregar el atributo "identity"
luego de su definicin al crear la tabla:

create table libros(


codigo int identity,
titulo varchar(40) not null,
autor varchar(30),
editorial varchar(15),
precio float
);

Cuando un campo tiene el atributo "identity" no se puede ingresar valor para l, porque se inserta
automticamente tomando el ltimo valor como referencia, o 1 si es el primero.

Para ingresar registros omitimos el campo definido como "identity", por ejemplo:

insert into libros (titulo,autor,editorial,precio)


values('El hacedor','Borges','Emece',23);

Este primer registro ingresado guardar el valor 1 en el campo correspondiente al cdigo.

Si continuamos ingresando registros, el cdigo (dato que no ingresamos) se cargar


automticamente siguiendo la secuencia de autoincremento.

27
Catedrtico: Marco del Cid SQL Server

No est permitido ingresar el valor correspondiente al campo "identity", por ejemplo:

insert into libros (codigo,titulo,autor,editorial,precio)


values(5,'Martin Fierro','Jose Hernandez','Paidos',25);

Generar un mensaje de error.

"identity" permite indicar el valor de inicio de la secuencia y el incremento, pero lo


veremos posteriormente.

Un campo definido como "identity" generalmente se establece como clave primaria.

Un campo "identity" no es editable, es decir, no se puede ingresar un valor ni actualizarlo.

Un campo de identidad no permite valores nulos, aunque no se indique especficamente. Si


ejecutamos el procedimiento "sp_columns()" veremos que en el campo "codigo" en la
columna "TYPE_NAME" aparece "int identity" y en la columna "IS_NULLABLE" aparece
"NO".

Los valores secuenciales de un campo "identity" se generan tomando como referencia el


ltimo valor ingresado; si se elimina el ltimo registro ingresado (por ejemplo 3) y luego se
inserta otro registro, SQL Server seguir la secuencia, es decir, colocar el valor "4".

Ejemplo

1. Trabajamos con la tabla "libros" de una librera.


2. Eliminamos la tabla "libros", si existe:
if object_id('libros') is not null
drop table libros;

Creamos la tabla especificando que el campos "codigo" genere valores secuenciales comenzando
en 1 e incrementndose en 1 automticamente:

28
Catedrtico: Marco del Cid SQL Server

create table libros(


codigo int identity,
titulo varchar(40) not null,
autor varchar(30),
editorial varchar(15),
precio float
);

Ingresamos algunos registros, recordando que si un campo tiene el atributo "identity" debemos
omitirlo en la insercin:

insert into libros (titulo,autor,editorial,precio)


values('El aleph','Borges','Emece',23);

Veamos cmo se almacen:

select *from libros;

Este primer registro ingresado guarda el valor 1 en el campo correspondiente al cdigo.

Continuemos ingresando registros:


insert into values('Uno','Richard Bach','Planeta',18);
insert into libros values('Aprenda PHP','Mario Molina','Siglo
XXI',45.60);
insert into libros values('Alicia en el pais de maravillas','Lewis
Carroll','Paidos',15.50);

Veamos cmo se almacenaron:

select *from libros;

El cdigo (dato que no ingresamos) se carg automticamente siguiendo la secuencia de


autoincremento.

Intentemos ingresar un valor para el campo "codigo":


insert into libros values(5,'Martin Fierro','Jose
Hernandez','Paidos',25);

Generar un mensaje de error.

29
Catedrtico: Marco del Cid SQL Server

Un campo "identity" tampoco puede ser actualizado. Intentemos cambiar el valor de cdigo de un
registro:

update libros set codigo=9


where titulo='Uno';

Aparece un mensaje de error.

Vamos a ver la estructura de la tabla ejecutando el siguiente procedimiento almacenado:

sp_columns libros;

Note que en el campo "codigo", en la columna "TYPE_NAME" aparece "int identity" y en la columna
IS_NULLABLE" aparece "NO", porque un campo "identity" automticamente se convierte en "not
null". En el campo "titulo", en la columna "IS_NULLABLE" aparece "NO" porque explcitamente
indicamos que el campo fuera "not null".

Eliminemos el ltimo registro:

delete from libros


where autor='Lewis Carroll';

Ingresamos un quinto registro y luego vemos que en el campo cdigo se guard el valor secuencial
sin considerar que el valor "4" ya no existe:
insert into libros values('Martin Fierro','Jose
Hernandez','Paidos',25);
select *from libros;

30
Catedrtico: Marco del Cid SQL Server

Ejercicios

Problema 1:

Una farmacia guarda informacin referente a sus medicamentos en una tabla llamada
"medicamentos".

1- Elimine la tabla,si existe:


if object_id('medicamentos') is not null
drop table medicamentos;

2- Cree la tabla con un campo "codigo" que genere valores secuenciales automticamente:
create table medicamentos(
codigo int identity,
nombre varchar(20) not null,
laboratorio varchar(20),
precio float,
cantidad integer
);

3- Visualice la estructura de la tabla "medicamentos":


sp_columns medicamentos;

4- Ingrese los siguientes registros:


insert into medicamentos values('Sertal','Roche',5.2,100);
insert into medicamentos values('Buscapina','Roche',4.10,200);
insert into medicamentos values('Amoxidal
500','Bayer',15.60,100);

5- Verifique que SQL Server gener valores para el campo "cdigo" de modo automtico:
select *from medicamentos;

6- Intente ingresar un registro con un valor para el campo "codigo"

31
Catedrtico: Marco del Cid SQL Server

7- Intente actualizar un valor de cdigo (aparece un mensaje de error)

8- Elimine el registro con codigo "3" (1 registro eliminado)

9- Ingrese un nuevo registro:


insert into medicamentos values('Amoxilina
500','Bayer',15.60,100);

10- Seleccione todos los registros para ver qu valor guard SQL Server en el campo cdigo:
select *from medicamentos;

Problema 2:

Un videoclub almacena informacin sobre sus pelculas en una tabla llamada "peliculas".

1- Elimine la tabla si existe:


if object_id('peliculas') is not null
drop table peliculas;

2- Crela definiendo un campo "codigo" autoincrementable y como clave primaria:


create table peliculas(
codigo int identity,
titulo varchar(40),
actor varchar(20),
duracion int,
primary key(codigo)
);

3- Ejecute el procedimiento almacenado para visualizar la estructura de la tabla:


sp_columns peliculas;

32
Catedrtico: Marco del Cid SQL Server

4- Ingrese los siguientes registros:


insert into peliculas values('Mision imposible','Tom
Cruise',120);
insert into peliculas values('Harry Potter y la piedra
filosofal','Daniel R.',180);
insert into peliculas values('Harry Potter y la camara
secreta','Daniel R.',190);
insert into peliculas values('Mision imposible 2','Tom
Cruise',120);
insert into peliculas values('La vida es bella','zzz',220);

5- Seleccione todos los registros y verifique la carga automtica de los cdigos:


select *from peliculas;

6- Intente actualizar el codigo de una pelcula (aparece un mensaje de error)

7- Elimine la pelcula "La vida es bella".

8- Ingrese un nuevo registro.

9- Visualice los registros para ver el valor almacenado en codigo (valor 7):
select *from peliculas;

Otras caractersticas del atributo Identity

El atributo "identity" permite indicar el valor de inicio de la secuencia y el incremento, para ello
usamos la siguiente sintaxis:

create table libros(


codigo int identity(100,2),
titulo varchar(20),

33
Catedrtico: Marco del Cid SQL Server

autor varchar(30),
precio float
);

Los valores comenzarn en "100" y se incrementarn de 2 en 2; es decir, el primer registro


ingresado tendr el valor "100", los siguientes "102", "104", "106", etc.

La funcin ident_seed()

Retorna el valor de inicio del campo "identity" de la tabla que nombramos:

select ident_seed('libros');

La funcin ident_incr()

Retorna el valor de incremento del campo "identity" de la tabla nombrada:

select ident_incr('libros');

Hemos visto que en un campo declarado "identity" no puede ingresarse explcitamente un valor.

La opci{on identity_insert

Para permitir ingresar un valor en un campo de identidad se debe activar la opcin


"identity_insert":

set identity_insert libros on;

Es decir, podemos ingresar valor en un campo "identity" seteando la opcin "identity_insert" en


"on".

Cuando "identity_insert" est en ON, las instrucciones "insert" deben explicitar un valor:

insert into libros values (5,'Alicia en el pais de las


maravillas');

Si no se coloca un valor para el campo de identidad, la sentencia no se ejecuta y aparece un


mensaje de error:

34
Catedrtico: Marco del Cid SQL Server

insert into libros values ('Matematica estas


ahi','Paenza','Paidos');

El atributo "identity" no implica unicidad, es decir, permite repeticin de valores; por ello hay que
tener cuidado al explicitar un valor porque se puede ingresar un valor repetido.

Para desactivar la opcin "identity_insert" tipeamos:


set identity_insert libros off;

Ejemplo:

Trabajamos con la tabla "libros" de una librera.

Eliminamos la tabla "libros", si existe:


if object_id('libros') is not null
drop table libros;

Creamos la tabla especificando que el campo "codigo" genere valores secuenciales comenzando
en 100 e incrementndose en 2 automticamente:

create table libros(


codigo int identity(100,2),
titulo varchar(20),
autor varchar(30),
precio float
);

Ingresamos algunos registros, recordando que si un campo tiene el atributo "identity" debemos
omitirlo en la insercin:

insert into libros (titulo,autor,precio)


values('El aleph','Borges',23);
insert into libros (titulo,autor,precio)
values('Uno','Richard Bach',18);

35
Catedrtico: Marco del Cid SQL Server

insert into libros (titulo,autor,precio)


values('Aprenda PHP','Mario Molina',45.60);

Veamos cmo se almacenaron:

select *from libros;

El cdigo (dato que no ingresamos) se carg automticamente, inicindose en 100 y siguiendo la


secuencia de autoincremento (2).

Para saber cul es el valor de inicio del campo "identity" de la tabla "libros" tipeamos:

select ident_seed('libros');

Retorna "2".

Si intentamos ingresar un valor para el campo "codigo":


insert into libros values(106,'Martin Fierro','Jose
Hernandez',25);

Generar un mensaje de error.

Para permitir ingresar un valor en un campo de identidad activamos la opcin "identity_insert":


set identity_insert libros on;

Recordemos que si "identity_insert" est en ON, la instruccin "insert" DEBE explicitar un valor:
insert into libros (codigo,titulo,autor)
values (100,'Matematica estas ahi','Paenza');

Note que ingresamos un valor de cdigo que ya existe; esto est permitido porque el atributo
"identity" no implica unicidad.

36
Catedrtico: Marco del Cid SQL Server

Ingresamos otro registro:


insert into libros (codigo,titulo,autor)
values (1,'Ilusiones','Richard Bach');

Note que ingresamos un valor de cdigo menor al valor de inicio de la secuencia, est permitido.

Si no se coloca un valor para el campo de identidad, la sentencia no se ejecuta y aparece un


mensaje de error:

insert into libros (titulo,autor)


values ('Uno','Richard Bach');

Para desactivar la opcin "identity_insert" tipeamos:

set identity_insert libros off;

Intentemos ingresar un valor para el campo "codigo":


insert into libros values (300,'Uno','Richard Bach');

Aparece un mensaje de error.

Ejercicios

Problema 1:

Una farmacia guarda informacin referente a sus medicamentos en una tabla llamada
"medicamentos".

1- Elimine la tabla,si existe:


if object_id('medicamentos') is not null
drop table medicamentos;

37
Catedrtico: Marco del Cid SQL Server

2- Cree la tabla con un campo "codigo" que genere valores secuenciales automticamente
comenzando en 10 e incrementndose en 1:
create table medicamentos(
codigo integer identity(10,1),
nombre varchar(20) not null,
laboratorio varchar(20),
precio float,
cantidad integer
);

3- Ingrese los siguientes registros:


insert into medicamentos values('Sertal','Roche',5.2,100);
insert into medicamentos values('Buscapina','Roche',4.10,200);
insert into medicamentos values('Amoxidal
500','Bayer',15.60,100);

4- Verifique que SQL Server gener valores para el campo "cdigo" de modo automtico:
select *from medicamentos;

5- Intente ingresar un registro con un valor para el campo "codigo".

6- Setee la opcin "identity_insert" en "on"

7- Ingrese un nuevo registro sin valor para el campo "codigo" (no lo permite):
insert into medicamentos (nombre, laboratorio,precio,cantidad)
values('Amoxilina 500','Bayer',15.60,100);

8- Ingrese un nuevo registro con valor para el campo "codigo" repetido.

9- Use la funcin "ident_seed()" para averiguar el valor de inicio del campo "identity" de la tabla

"medicamentos"

38
Catedrtico: Marco del Cid SQL Server

10- Emplee la funcin "ident_incr()" para saber cul es el valor de incremento del campo "identity"
de "medicamentos"

Problema 2:

Un videoclub almacena informacin sobre sus pelculas en una tabla llamada "peliculas".

1- Elimine la tabla si existe:


if object_id('peliculas') is not null
drop table peliculas;

2- Crela definiendo un campo "codigo" autoincrementable que comience en 50 y se incremente


en 3:
create table peliculas(
codigo int identity (50,3),
titulo varchar(40),
actor varchar(20),
duracion int
);

3- Ingrese los siguientes registros:


insert into peliculas values('Mision imposible','Tom
Cruise',120);
insert into peliculas values('Harry Potter y la piedra
filosofal','Daniel R.',180);
insert into peliculas values('Harry Potter y la camara
secreta','Daniel R.',190);

4- Seleccione todos los registros y verifique la carga automtica de los cdigos:


select *from peliculas;

5- Active la opcin "identity_insert" en "on"

39
Catedrtico: Marco del Cid SQL Server

6- Ingrese un registro con valor de cdigo menor a 50.

7- Ingrese un registro con valor de cdigo mayor al ltimo generado.

8- Averigue el valor de inicio del campo "identity" de la tabla "peliculas".

9- Averigue el valor de incremento del campo "identity" de "peliculas".

10- Intente ingresar un registro sin valor para el campo cdigo.

11- Desactive la opcin se insercin para el campo de identidad.

12- Ingrese un nuevo registro y muestre todos los registros para ver cmo SQL Server sigui la
secuencia tomando el ltimo valor del campo como referencia.

40
Catedrtico: Marco del Cid SQL Server

Eliminacin de registros con Truncate table

Aprendimos que para borrar todos los registros de una tabla se usa "delete" sin condicin
"where".

Tambin podemos eliminar todos los registros de una tabla con "truncate table".

Por ejemplo, queremos vaciar la tabla "libros", usamos:

truncate table libros;

La sentencia "truncate table" vaca la tabla (elimina todos los registros) y conserva la estructura de
la tabla.

La diferencia con "drop table" es que esta sentencia borra la tabla, "truncate table" la vaca.

La diferencia con "delete" es la velocidad, es ms rpido "truncate table" que "delete" (se nota
cuando la cantidad de registros es muy grande) ya que ste borra los registros uno a uno.

Otra diferencia es la siguiente: cuando la tabla tiene un campo "identity", si borramos todos los
registros con "delete" y luego ingresamos un registro, al cargarse el valor en el campo de identidad,
contina con la secuencia teniendo en cuenta el valor mayor que se haba guardado; si usamos
"truncate table" para borrar todos los registros, al ingresar otra vez un registro, la secuencia del
campo de identidad vuelve a iniciarse en 1.

Por ejemplo, tenemos la tabla "libros" con el campo "codigo" definido "identity", y el valor ms alto
de ese campo es "2", si borramos todos los registros con "delete" y luego ingresamos un registro,
ste guardar el valor de cdigo "3"; si en cambio, vaciamos la tabla con "truncate table", al ingresar
un nuevo registro el valor del cdigo se iniciar en 1 nuevamente.

41
Catedrtico: Marco del Cid SQL Server

Ejemplo

Trabajamos con la tabla "libros" que almacena los datos de los libros de una librera.

Eliminamos la tabla, si existe:


if object_id('libros') is not null
drop table libros;

Creamos la tabla:
create table libros(
codigo int identity,
titulo varchar(30),
autor varchar(20),
editorial varchar(15),
precio float
);

Agregamos algunos registros:

insert into libros values ('El aleph','Borges','Emece',25.60);


insert into libros values ('Uno','Richard Bach','Planeta',18);

Seleccionamos todos los registros:

select *from libros;

Truncamos la tabla:
truncate table libros;

Ingresamos nuevamente algunos registros:


insert into libros values ('El aleph','Borges','Emece',25.60);
insert into libros values ('Uno','Richard Bach','Planeta',18);

Si seleccionamos todos los registros vemos que la secuencia se reinici en 1:


select *from libros;

Eliminemos todos los registros con "delete":

42
Catedrtico: Marco del Cid SQL Server

delete from libros;

Ingresamos nuevamente algunos registros:

insert into libros values ('El aleph','Borges','Emece',25.60);


insert into libros values ('Uno','Richard Bach','Planeta',18);

Seleccionamos todos los registros y vemos que la secuencia continu:

select *from libros;

Ejercicios

Problema 1:

Un instituto de enseanza almacena los datos de sus estudiantes en una tabla llamada "alumnos".

1- Elimine la tabla "alumnos" si existe:


if object_id('alumnos') is not null
drop table alumnos;

2- Cree la tabla con la siguiente estructura:


create table alumnos(
legajo int identity,
documento varchar(8),
nombre varchar(30),
domicilio varchar(30)
);

3- Ingrese los siguientes registros y mustrelos para ver la secuencia de cdigos:


insert into alumnos values('22345345','Perez Mariana','Colon
234');
insert into alumnos values('23545345','Morales
Marcos','Avellaneda 348');

43
Catedrtico: Marco del Cid SQL Server

insert into alumnos values('24356345','Gonzalez Analia','Caseros


444');
insert into alumnos values('25666777','Torres Ramiro','Dinamarca
209');

4- Elimine todos los registros con "delete".

5- Ingrese los siguientes registros y seleccinelos para ver cmo SQL Server gener los cdigos:
insert into alumnos values ('22345345','Perez Mariana','zona
4');
insert into alumnos values ('23545345','Morales Marcos','zona
3');
insert into alumnos values ('24356345','Gonzalez Analia','zona
11');
insert into alumnos values ('25666777','Torres Ramiro','zona
9');
select *from alumnos;

6- Elimine todos los registros con "truncate table".

7- Ingrese los siguientes registros y muestre todos los registros para ver que SQL Server reinici la
secuencia del campo "identity":
insert into alumnos values('22345345','Perez Mariana','zona
14');
insert into alumnos values('23545345','Morales Marcos','zona
12');
select *from alumnos;

44
Catedrtico: Marco del Cid SQL Server

Problema 2:

Un comercio que vende artculos de computacin registra los datos de sus artculos en una tabla
con ese nombre.

1- Elimine "articulos", si existe:


if object_id('articulos') is not null
drop table articulos;

2- Cree la tabla, con la siguiente estructura:


create table articulos(
codigo integer identity,
nombre varchar(20),
descripcion varchar(30),
precio float
);

3- Ingrese algunos registros:


insert into articulos (nombre, descripcion, precio)
values ('impresora','Epson Stylus C45',400.80);
insert into articulos (nombre, descripcion, precio)
values ('impresora','Epson Stylus C85',500);

4- Elimine todos los registros con "truncate table".

5- Ingrese algunos registros y mustrelos para ver que la secuencia de cdigos se reinicia:
insert into articulos values ('monitor','Samsung 14',800);
insert into articulos values ('teclado','ingles Manhatan',100);
insert into articulos values ('teclado','espaol Comtech',90);
select *from articulos;

6- Elimine todos los registros con "delete".

45
Catedrtico: Marco del Cid SQL Server

7- Ingrese algunos registros y mustrelos para ver que la secuencia de cdigos contina:
insert into articulos values ('monitor','Samsung 14',800);
insert into articulos values ('teclado','ingles Dell',100);
select *from articulos;

46
Catedrtico: Marco del Cid SQL Server

Otros tipos de datos en SQL Server


Ya explicamos que al crear una tabla debemos elegir la estructura adecuada, esto es, definir los
campos y sus tipos ms precisos, segn el caso.

El tipo de dato especificado en la definicin de cada campo indica los valores permitidos para cada
uno de ellos.

Hasta ahora hemos visto 3 tipos de datos: varchar, integer y float. Hay ms tipos, incluso, subtipos.

Los valores que podemos guardar son:

TEXTO: Para almacenar texto usamos cadenas de caracteres.

Las cadenas se colocan entre comillas simples. Podemos almacenar letras, smbolos y dgitos con
los que no se realizan operaciones matemticas, por ejemplo, cdigos de identificacin, nmeros
de documentos, nmeros telefnicos.

SQL Server ofrece los siguientes tipos: char, nchar, varchar, nvarchar, text y ntext.

NUMEROS: Existe variedad de tipos numricos para representar enteros, decimales,


monedas.

Para almacenar valores enteros, por ejemplo, en campos que hacen referencia a cantidades,
precios, etc., usamos el tipo integer (y sus subtipos: tinyint, smallint y bigint).

Para almacenar valores con decimales exactos, utilizamos: numeric o decimal (son equivalentes).

Para guardar valores decimales aproximados: float y real. Para almacenar valores monetarios:
money y smallmoney.

FECHAS y HORAS: para guardar fechas y horas SQL Server dispone de 2 tipos: datetime y
smalldatetime.

Tipo de dato (texto)

Al crear una tabla se debe elegir la estructura adecuada, esto es, definir los campos y sus tipos ms
precisos, segn el caso.

Para almacenar TEXTO usamos cadenas de caracteres.

Las cadenas se colocan entre comillas simples.

Podemos almacenar letras, smbolos y dgitos con los que no se realizan operaciones matemticas,
por ejemplo, cdigos de identificacin, nmeros de documentos, nmeros telefnicos.

47
Catedrtico: Marco del Cid SQL Server

Tenemos los siguientes tipos:

varchar(x): define una cadena de caracteres de longitud variable en la cual determinamos el


mximo de caracteres con el argumento "x" que va entre parntesis.

Si se omite el argumento coloca 1 por defecto. Su rango va de 1 a 8000 caracteres.

char(x): define una cadena de longitud fija determinada por el argumento "x". Si se omite el
argumento coloca 1 por defecto. Su rango es de 1 a 8000 caracteres.

Si la longitud es invariable, es conveniente utilizar el tipo char; caso contrario, el tipo varchar.

Ocupa tantos bytes como se definen con el argumento "x".

"char" viene de character, que significa caracter en ingls.

text: guarda datos binarios de longitud variable, puede contener hasta 2000000000 caracteres. No
admite argumento para especificar su longitud.

nvarchar(x): es similar a "varchar", excepto que permite almacenar caracteres Unicode, su rango
va de 0 a 4000 caracteres porque se emplean 2 bytes por cada caracter.

nchar(x): es similar a "char" excpeto que acepta caracteres Unicode, su rango va de 0 a 4000
caracteres porque se emplean 2 bytes por cada caracter.

ntext: es similar a "text" excepto que permite almacenar caracteres Unicode, puede contener hasta
1000000000 caracteres. No admite argumento para especificar su longitud.

En general se usarn los 3 primeros.

Si intentamos almacenar en un campo una cadena de caracteres de mayor longitud que la definida,
aparece un mensaje indicando tal situacin y la sentencia no se ejecuta.

Por ejemplo, si definimos un campo de tipo varchar(10) y le asignamos la cadena 'Aprenda PHP'
(11 caracteres), aparece un mensaje y la sentencia no se ejecuta.

Si ingresamos un valor numrico (omitiendo las comillas), lo convierte a cadena y lo ingresa como
tal.

Por ejemplo, si en un campo definido como varchar(5) ingresamos el valor 12345, lo toma como si
hubisemos tipeado '12345', igualmente, si ingresamos el valor 23.56, lo convierte a '23.56'. Si el
valor numrico, al ser convertido a cadena supera la longitud definida, aparece un mensaje de error
y la sentencia no se ejecuta.

48
Catedrtico: Marco del Cid SQL Server

Es importante elegir el tipo de dato adecuado segn el caso, el ms preciso.

Para almacenar cadenas que varan en su longitud, es decir, no todos los registros tendrn la
misma longitud en un campo determinado, se emplea "varchar" en lugar de "char".

Por ejemplo, en campos que guardamos nombres y apellidos, no todos los nombres y apellidos
tienen la misma longitud.

Para almacenar cadenas que no varan en su longitud, es decir, todos los registros tendrn la
misma longitud en un campo determinado, se emplea "char".

Por ejemplo, definimos un campo "codigo" que constar de 5 caracteres, todos los registros
tendrn un cdigo de 5 caracteres, ni ms ni menos.

Para almacenar valores superiores a 8000 caracteres se debe emplear "text".

Tipo Bytes de almacenamiento

_________________________________

varchar(x) 0 a 8K

char(x) 0 a 8K

text 0 a 2GB

nvarchar(x) 0 a 8K

nchar(x) 0 a 8K

ntext 0 a 2GB

49
Catedrtico: Marco del Cid SQL Server

Ejemplo

Un comercio que tiene un stand en una feria registra en una tabla llamada "visitantes" algunos
datos de las personas que visitan o compran en su stand para luego enviarle publicidad de sus
productos.

Eliminamos la tabla "visitantes", si existe:

if object_id('visitantes') is not null


drop table visitantes;

Creamos con la siguiente estructura:


create table visitantes(
nombre varchar(30),
edad integer,
sexo char(1),
domicilio varchar(30),
ciudad varchar(20),
telefono varchar(11)
);

Los campos "nombre", "domicilio" y "ciudad" almacenarn valores cuya longitud vara, por ello
elegimos el tipo "varchar" y le damos a cada uno una longitud mxima estimando su tamao. El
campo "sexo" se define de tipo "char", porque necesitamos solamente 1 caracter "f" o "m", que
siempre ser fijo. El campo "telefono" tambin se define como varchar porque no todos los nmeros
telefnicos tienen la misma longitud.

Intentamos ingresar una cadena de mayor longitud que la definida (el campo sexo):
insert into visitantes values ('Juan
Juarez',32,'masculino','zona 5','Guatemala','4234567');

Aparece un mensaje de error y la sentencia no se ejecuta

Ingresamos un nmero telefnico olvidando las comillas, es decir, como un valor numrico:

50
Catedrtico: Marco del Cid SQL Server

insert into visitantes values ('Marcela Morales',43,'f','Colon


456','Cordoba',4567890);

Lo convierte a cadena, vemoslo:


select *from visitantes;

Ejercicios

Problema :

Una concesionaria de autos vende autos usados y almacena los datos de los autos en una tabla
llamada "autos".

1- Elimine la tabla "autos" si existe:


if object_id('autos') is not null
drop table autos;

2- Cree la tabla eligiendo el tipo de dato adecuado para cada campo, estableciendo el campo

"patente" como clave primaria:


create table autos(
patente char(6),
marca varchar(20),
modelo char(4),
precio float,
primary key (patente)
);

Hemos definido el campo "patente" de tipo "char" y no "varchar" porque la cadena de caracteres
siempre tendr la misma longitud (6 caracteres). Lo mismo sucede con el campo "modelo", en el
cual almacenaremos el ao, necesitamos 4 caracteres fijos.

51
Catedrtico: Marco del Cid SQL Server

3- Ingrese los siguientes registros:


insert into autos
values('ACD123','Fiat 128','1970',15000);
insert into autos
values('ACG234','Renault 11','1990',40000);
insert into autos
values('BCD333','Peugeot 505','1990',80000);
insert into autos
values('GCD123','Renault Clio','1990',70000);
insert into autos
values('BCC333','Renault Megane','1998',95000);
insert into autos
values('BVF543','Fiat 128','1975',20000);

4- Seleccione todos los autos del ao 1990:


select *from autos
where modelo='1990';

Tipo de dato numrico

Para almacenar valores NUMERICOS SQL Server dispone de varios tipos.

Para almacenar valores ENTEROS, por ejemplo, en campos que hacen referencia a cantidades,
usamos:

1) integer o int: su rango es de -2000000000 a 2000000000 aprox. El tipo "integer" tiene subtipos:

- smallint: Puede contener hasta 5 digitos. Su rango va desde ?32000 hasta 32000 aprox.

- tinyint: Puede almacenar valores entre 0 y 255.

- bigint: De ?9000000000000000000 hasta 9000000000000000000 aprox.

52
Catedrtico: Marco del Cid SQL Server

Para almacenar valores numricos EXACTOS con decimales, especificando la cantidad de cifras a la
izquierda y derecha del separador decimal, utilizamos:

2) decimal o numeric (t,d): Pueden tener hasta 38 digitos, guarda un valor exacto. El primer
argumento indica el total de dgitos y el segundo, la cantidad de decimales.

Por ejemplo, si queremos almacenar valores entre -99.99 y 99.99 debemos definir el campo como
tipo "decimal(4,2)". Si no se indica el valor del segundo argumento, por defecto es "0". Por
ejemplo, si definimos "decimal(4)" se pueden guardar valores entre -9999 y 9999.

El rango depende de los argumentos, tambin los bytes que ocupa.

Se utiliza el punto como separador de decimales.

Si ingresamos un valor con ms decimales que los permitidos, redondea al ms cercano; por
ejemplo, si definimos "decimal(4,2)" e ingresamos el valor "12.686", guardar "12.69",
redondeando hacia arriba; si ingresamos el valor "12.682", guardar "12.67", redondeando hacia
abajo.

Para almacenar valores numricos APROXIMADOS con decimales utilizamos:

3) float y real: De 1.79E+308 hasta 1.79E+38. Guarda valores aproximados.

4) real: Desde 3.40E+308 hasta 3.40E+38. Guarda valores aproximados.

Para almacenar valores MONETARIOS empleamos:

5) money: Puede tener hasta 19 digitos y slo 4 de ellos puede ir luego del separador decimal;
entre ?900000000000000.5808 aprox y 900000000000000.5807.

6) smallmoney: Entre ?200000.3648 y 200000.3647 aprox.

Para todos los tipos numricos:

- si intentamos ingresar un valor fuera de rango, no lo permite.

- si ingresamos una cadena, SQL Server intenta convertirla a valor numrico, si dicha cadena
consta solamente de dgitos, la conversin se realiza, luego verifica si est dentro del rango, si es

53
Catedrtico: Marco del Cid SQL Server

as, la ingresa, sino, muestra un mensaje de error y no ejecuta la sentencia. Si la cadena contiene
caracteres que SQL Server no puede convertir a valor numrico, muestra un mensaje de error y la
sentencia no se ejecuta.

Por ejemplo, definimos un campo de tipo decimal(5,2), si ingresamos la cadena '12.22', la


convierte al valor numrico 12.22 y la ingresa; si intentamos ingresar la cadena '1234.56', la
convierte al valor numrico 1234.56, pero como el mximo valor permitido es 999.99, muestra un
mensaje indicando que est fuera de rango. Si intentamos ingresar el valor '12y.25', SQL Server no
puede realizar la conversin y muestra un mensaje de error.

Es importante elegir el tipo de dato adecuado segn el caso, el ms preciso. Por ejemplo, si un
campo numrico almacenar valores positivos menores a 255, el tipo "int" no es el ms adecuado,
conviene el tipo "tinyint", de esta manera usamos el menor espacio de almacenamiento posible.

Si vamos a guardar valores monetarios menores a 200000 conviene emplear "smallmoney" en


lugar de "money".

Tipo Bytes de almacenamiento

_______________________________________

int 4

smallint 2

tinyint 1

bigint 8

decimal 2 a 17

float 4u8

real 4u8

money 8

smallmoney 4

54
Catedrtico: Marco del Cid SQL Server

Ejemplo

Trabajamos con la tabla "libros" de una librera.

Eliminamos la tabla, si existe:

if object_id('libros') is not null


drop table libros;

Creamos la tabla con la siguiente estructura:

create table libros(


codigo smallint identity,
titulo varchar(40) not null,
autor varchar(30),
editorial varchar(15),
precio smallmoney,
cantidad tinyint
);

Note que definimos el campo "codigo" de tipo "smallint", esto es porque estimamos que no
tendremos ms de 30000 libros. Si necesitramos un rango mayor podemos emplear "int".

Como en el campo "precio" no almacenaremos valores mayores a 200000, definimos el campo de


tipo "smallmoney".

Tambin podemos definirlo de tipo "decimal(5,2)" porque el mximo precio no superar los
999.99.

El tipo "float" no es el ms adecuado para representar precios porque no es exacto y muestra


muchos decimales innecesarios.

Como los valores para el campo "cantidad" no superarn los 255, definimos el campo de tipo
"tinyint". Si estimamos que tendremos ms cantidad de libros podemos emplear "smallint" que

55
Catedrtico: Marco del Cid SQL Server

tiene un rango mayor; no es adecuado usar int (cuyo rango llega hasta 4000 millones aprox.),
porque ocuparamos ms espacio (4 bytes).

Analicemos la insercin de datos numricos.

Intentemos ingresar un valor fuera del rango definido, una cantidad que supera el rango del tipo
"tinyint", el valor 260:

insert into libros (titulo,autor,editorial,precio,cantidad)


values('El aleph','Borges','Emece',25.60,260);

Aparece un mensaje de error y la insercin no se ejecuta.

Intentamos ingresar un precio que supera el rango del tipo "smallmoney", el valor 250000:

insert into libros values('El


aleph','Borges','Emece',250000,100);

Aparece un mensaje de error y la instruccin no se ejecuta.

Intentamos ingresar una cadena que SQL Server no pueda convertir a valor numrico en el campo
"precio" (error):

insert into libros (titulo,autor,editorial,precio,cantidad)

values('Uno','Richard Bach','Planeta','a50.30',100);

Ingresamos una cadena en el campo "cantidad":

insert into libros (titulo,autor,editorial,precio,cantidad)

values('Uno','Richard Bach','Planeta',50.30,'100');

lo convierte a valor numrico.

56
Catedrtico: Marco del Cid SQL Server

Ejercicio

Un banco tiene registrados las cuentas corrientes de sus clientes en una tabla llamada "cuentas".

La tabla contiene estos datos:

Nmero de Cuenta Documento Nombre Saldo

______________________________________________________________

1234 25666777 Pedro Perez 500000.60

2234 27888999 Juan Lopez -250000

3344 27888999 Juan Lopez 4000.50

3346 32111222 Susana Molina 1000

1- Elimine la tabla "cuentas" si existe:


if object_id('cuentas') is not null
drop table cuentas;

2- Cree la tabla eligiendo el tipo de dato adecuado para almacenar los datos descriptos arriba:

- Nmero de cuenta: entero, no nulo, no puede haber valores repetidos, clave primaria;

- Documento del propietario de la cuenta: cadena de caracteres de 8 de longitud (siempre 8), no


nulo;

- Nombre del propietario de la cuenta: cadena de caracteres de 30 de longitud,

- Saldo de la cuenta: valores altos con decimales.

3- Ingrese los siguientes registros:


insert into cuentas values('1234','25666777','Pedro
Perez',500000.60);
insert into cuentas values('2234','27888999','Juan Lopez',-
250000);
insert into cuentas values('3344','27888999','Juan
Lopez',4000.50);

57
Catedrtico: Marco del Cid SQL Server

insert into cuentas values('3346','32111222','Susana


Molina',1000);

Note que hay dos cuentas, con distinto nmero de cuenta, de la misma persona.

4- Seleccione todos los registros cuyo saldo sea mayor a "4000" (2 registros)

5- Muestre el nmero de cuenta y saldo de todas las cuentas cuyo propietario sea "Juan Lopez" (2
registros)

6- Muestre las cuentas con saldo negativo (1 registro)

7- Muestre todas las cuentas cuyo nmero es igual o mayor a "3000" (2 registros):
select *from cuentas
where numero>=3000;

Tipo de dato fecha y hora

Para almacenar valores de tipo FECHA Y HORA SQL Server dispone de dos tipos:

1) datetime: puede almacenar valores desde 01 de enero de 1753 hasta 31 de diciembre de 9999.

2) smalldatetime: el rango va de 01 de enero de 1900 hasta 06 de junio de 2079.

Las fechas se ingresan entre comillas simples.

Para almacenar valores de tipo fecha se permiten como separadores "/", "-" y ".".

SQL Server reconoce varios formatos de entrada de datos de tipo fecha. Para establecer el orden
de las partes de una fecha (dia, mes y ao) empleamos "set dateformat". Estos son los formatos:

-mdy: 4/15/96 (mes y da con 1 2 dgitos y ao con 2 4 dgitos),

-myd: 4/96/15,

58
Catedrtico: Marco del Cid SQL Server

-dmy: 15/4/1996

-dym: 15/96/4,

-ydm: 96/15/4,

-ydm: 1996/15/4,

Para ingresar una fecha con formato "da-mes-ao", tipeamos:

set dateformat dmy;

El formato por defecto es "mdy".

Todos los valores de tipo "datetime" se muestran en formato "ao-mes-da hora:minuto:segundo


.milisegundos", independientemente del formato de ingreso que hayamos seteado.

Podemos ingresar una fecha, sin hora, en tal caso la hora se guarda como "[Link]". Por ejemplo,
si ingresamos '25-12-01' (ao de 2 dgitos), lo mostrar as: '2001-12-25 [Link].000'.

Podemos ingresar una hora sin fecha, en tal caso, coloca la fecha "1900-01-01". Por ejemplo, si
ingresamos '10:15', mostrar '1900-01-01 10:15.000'.

Podemos emplear los operadores relacionales vistos para comparar fechas.

Tipo Bytes de almacenamiento

_______________________________________

datetime 8

smalldatetime 4

59
Catedrtico: Marco del Cid SQL Server

Ejemplo

Una empresa almacena los datos de sus empleados en una tabla "empleados".

Eliminamos la tabla, si existe:


if object_id('empleados') is not null
drop table empleados;

Creamos la tabla eligiendo el tipo de dato adecuado para cada campo:


create table empleados(
nombre varchar(20),
documento char(8),
fechaingreso datetime
);

Configuramos el formato de la fecha para que guarde da, mes y ao:


set dateformat dmy;

Ingresamos algunos registros:

insert into empleados values('Ana Gomez','22222222','12-01-


1980');
insert into empleados values('Bernardo Huerta','23333333','15-03-
81');
insert into empleados values('Carla
Juarez','24444444','20/05/1983');
insert into empleados values('Daniel
Lopez','25555555','2.5.1990');

El segundo registro ingresado tiene 2 dgitos correspondientes al ao; en el tercero empleamos la


barra ('/') como separador y en el cuarto empleamos como separador el punto ('.') y colocamos un
slo dgito en la part del da y el mes.

Recuperamos los registros:


select *from empleados;

Note que el formato de visualizacin es "y-m-d".

60
Catedrtico: Marco del Cid SQL Server

Mostramos los datos de los empleados cuya fecha de ingreso es anterior a '01-01-1985':
select *from empleados where fechaingreso<'01-01-1985';

Actualizamos el nombre a "Maria Carla Juarez' del empleado cuya fecha de ingreso es igual a
'20/05/1983':

update empleados set nombre='Maria Carla Juarez' where


fechaingreso='20.5.83';

Veamos si se actualiz:

select *from empleados;

Borramos los empleados cuya fecha de ingreso es distinta a '20.5.83':

delete from empleados where fechaingreso<>'20/05/1983';

Veamos si se eliminaron:
select *from empleados;

Ejercicio

Una facultad almacena los datos de sus alumnos en una tabla denominada "alumnos".

1- Elimine la tabla, si existe:


if object_id('alumnos') is not null
drop table alumnos;

2- Cree la tabla eligiendo el tipo de dato adecuado para cada campo:


create table alumnos(
apellido varchar(30),
nombre varchar(30),
documento char(8),
domicilio varchar(30),
fechaingreso datetime,
fechanacimiento datetime
);

61
Catedrtico: Marco del Cid SQL Server

3- Setee el formato para entrada de datos de tipo fecha para que acepte valores "da-mes-ao":
set dateformat 'dmy';

4- Ingrese un alumno empleando distintos separadores para las fechas:


insert into alumnos values('Gonzalez','Ana','22222222','zona
3','10-08-1990','15/02/1972');

5- Ingrese otro alumno empleando solamente un dgito para da y mes y 2 para el ao:
insert into alumnos values('Juarez','Bernardo','25555555','zona
6','03-03-1991','15/02/1972');

6- Ingrese un alumnos empleando 2 dgitos para el ao de la fecha de ingreso y "null" en

"fechanacimiento":
insert into alumnos values('Perez','Laura','26666666','zona
5','03-03-91',null);

7- Intente ingresar un alumno con fecha de ingreso correspondiente a "15 de marzo de 1990" pero
en orden incorrecto "03-15-90":
insert into alumnos values('Lopez','Carlos','27777777','zona
8','03-15-1990',null);

aparece un mensaje de error porque lo lee con el formato da, mes y ao y no reconoce el mes 15.

8- Muestre todos los alumnos que ingresaron antes del '1-1-91' (1 registro).

9- Muestre todos los alumnos que tienen "null" en "fechanacimiento":


select *from alumnos where fechanacimiento is null;

1 registro.

10- Intente ingresar una fecha de ingreso omitiendo los separadores:

62
Catedrtico: Marco del Cid SQL Server

insert into alumnos


values('Rosas','Romina','28888888','Avellaneda
487','03151990',null);

No lo acepta.

11- Configure el formato de entrada de fechas para que acepte valores "mes-dia-ao".

12- Ingrese el registro del punto 7.

63
Catedrtico: Marco del Cid SQL Server

Default para Valores por defecto


Se ha visto que si al insertar registros no se especifica un valor para un campo que admite valores
nulos, se ingresa automaticamente "null" y si el campo est declarado "identity", se inserta el
siguiente de la secuencia. A estos valores se les denomina valores por defecto o predeterminados.

Un valor por defecto se inserta cuando no est presente al ingresar un registro y en algunos casos
en que el dato ingresado es invlido.

Para campos de cualquier tipo no declarados "not null", es decir, que admiten valores nulos, el
valor por defecto es "null". Para campos declarados "not null", no existe valor por defecto, a
menos que se declare explcitamente con la clusula "default".

Para todos los tipos, excepto los declarados "identity", se pueden explicitar valores por defecto
con la clusula "default".

Podemos establecer valores por defecto para los campos cuando creamos la tabla. Para ello
utilizamos "default" al definir el campo. Por ejemplo, queremos que el valor por defecto del
campo "autor" de la tabla "libros" sea "Desconocido" y el valor por defecto del campo "cantidad"
sea "0":
create table libros(
codigo int identity,
titulo varchar(40),
autor varchar(30) not null default 'Desconocido',
editorial varchar(20),
precio decimal(5,2),
cantidad tinyint default 0
);

Si al ingresar un nuevo registro omitimos los valores para el campo "autor" y "cantidad", Sql Server
insertar los valores por defecto; el siguiente valor de la secuencia en "codigo", en "autor"
colocar "Desconocido" y en cantidad "0".

Entonces, si al definir el campo explicitamos un valor mediante la clusula "default", se ser el


valor por defecto.

Ahora, al visualizar la estructura de la tabla con "sp_columns" podemos entender lo que informa la
columna "COLUMN_DEF", muestra el valor por defecto del campo.

64
Catedrtico: Marco del Cid SQL Server

Tambin se puede utilizar "default" para dar el valor por defecto a los campos en sentencias
"insert", por ejemplo:

insert into libros (titulo,autor,precio,cantidad)


values ('El gato con botas',default,default,100);

Si todos los campos de una tabla tienen valores predeterminados (ya sea por ser "identity",
permitir valores nulos o tener un valor por defecto), se puede ingresar un registro de la siguiente
manera:

insert into libros default values;

La sentencia anterior almacenar un registro con los valores predetermiandos para cada uno de
sus campos.

Entonces, la clusula "default" permite especificar el valor por defecto de un campo. Si no se


explicita, el valor por defecto es "null", siempre que el campo no haya sido declarado "not null".

Los campos para los cuales no se ingresan valores en un "insert" tomarn los valores por defecto:

- si tiene el atributo "identity": el valor de inicio de la secuencia si es el primero o el siguiente valor


de la secuencia, no admite clusula "default";

- si permite valores nulos y no tiene clusula "default", almacenar "null";

- si est declarado explcitamente "not null", no tiene valor "default" y no tiene el atributo
"identity", no hay valor por defecto, as que causar un error y el "insert" no se ejecutar.

- si tiene clusula "default" (admita o no valores nulos), el valor definido como predeterminado;

- para campos de tipo fecha y hora, si omitimos la parte de la fecha, el valor predeterminado para
la fecha es "1900-01-01" y si omitimos la parte de la hora, "[Link]".

Un campo slo puede tener un valor por defecto. Una tabla puede tener todos sus campos con
valores por defecto. Que un campo tenga valor por defecto no significa que no admita valores
nulos, puede o no admitirlos.

65
Catedrtico: Marco del Cid SQL Server

Ejemplo

Cree la tabla "libros".

Eliminamos la tabla, si existe:


if object_id('libros') is not null
drop table libros;

Creamos la tabla definiendo un valor por defecto para el campo "autor" y otro para el campo
"cantidad":
create table libros(
codigo int identity,
titulo varchar(40),
autor varchar(30) not null default 'Desconocido',
editorial varchar(20),
precio decimal(5,2),
cantidad tinyint default 0
);

Ingresamos un registro omitiendo los valores para el campo "autor" y "cantidad":

insert into libros (titulo,editorial,precio)


values('Java en 10 minutos','Paidos',50.40);

SQL Server ingresar el registro con el siguiente valor de la secuencia en "codigo", con el ttulo,
editorial y precio ingresados, en "autor" colocar "Desconocido" y en cantidad "0":
select *from libros;

Si ingresamos un registro sin valor para el campo "precio", que admite valores nulos, se ingresar
"null" en ese campo:

insert into libros (titulo,editorial)


values('Aprenda PHP','Siglo XXI');
select *from libros;

Visualicemos la estructura de la tabla:


sp_columns libros;

La columna "COLUMN_DEF", muestra el valor por defecto de cada campo.

66
Catedrtico: Marco del Cid SQL Server

Podemos emplear "default" para dar el valor por defecto a algunos campos:

insert into libros (titulo,autor,precio,cantidad)


values ('El gato con botas',default,default,100);
select *from libros;

Como todos los campos de "libros" tienen valores predeterminados, podemos tipear:

insert into libros default values;


select *from libros;

La sentencia anterior almacenar un registro con los valores predetermiandos para cada uno de
sus campos.

Que un campo tenga valor por defecto no significa que no admita valores nulos, puede o no
admitirlos. Podemos ingresar el valor "null" en el campo "cantidad":

insert into libros (titulo,autor,cantidad)


values ('Alicia en el pais de las maravillas','Lewis
Carroll',null);

Ejercicio

Una pequea biblioteca de barrio registra los prstamos de sus libros en una tabla llamada

"prestamos". En ella almacena la siguiente informacin: ttulo del libro, documento de identidad
del socio a quien se le presta el libro, fecha de prstamo, fecha en que tiene que devolver el libro y
si el libro ha sido o no devuelto.

1- Elimine la tabla "prestamos" si existe:


if object_id('prestamos') is not null
drop table prestamos;

67
Catedrtico: Marco del Cid SQL Server

2- Cree la tabla:
create table prestamos(
titulo varchar(40) not null,
documento char(8) not null,
fechaprestamo datetime not null,
fechadevolucion datetime,
devuelto char(1) default 'n'
);

3- Ingrese algunos registros omitiendo el valor para los campos que lo admiten:
insert into prestamos
(titulo,documento,fechaprestamo,fechadevolucion)
values ('Manual de 1 grado','23456789','2006-12-15','2006-12-
18');
insert into prestamos (titulo,documento,fechaprestamo)
values ('Alicia en el pais de las maravillas','23456789','2006-
12-16');
insert into prestamos
(titulo,documento,fechaprestamo,fechadevolucion)
values ('El aleph','22543987','2006-12-16','2006-08-19');
insert into prestamos (titulo,documento,fechaprestamo,devuelto)
values ('Manual de geografia 5 grado','25555666','2006-12-
18','s');

4- Seleccione todos los registros:


select *from prestamos;

5- Ingrese un registro colocando "default" en los campos que lo admiten y vea cmo se almacen.

6- Intente ingresar un registro con "default values" y analice el mensaje de error (no se puede)

68
Catedrtico: Marco del Cid SQL Server

Campos calculados

Aprendimos que los operadores son smbolos que permiten realizar distintos tipos de operaciones.

Dijimos que SQL Server tiene 4 tipos de operadores:

relacionales o de comparacin
lgicos
aritmticos
de concatenacin.

Los operadores aritmticos permiten realizar clculos con valores numricos.

Son:

multiplicacin (*)
divisin (/)
mdulo (%) (el residuo de dividir nmeros enteros)
suma (+)
resta (-).

Es posible obtener salidas en las cuales una columna sea el resultado de un clculo y no un campo
de una tabla.

Si queremos ver los ttulos, precio y cantidad de cada libro escribimos la siguiente sentencia:
select titulo,precio,cantidad
from libros;

Si queremos saber el monto total en dinero de un ttulo podemos multiplicar el precio por la
cantidad por cada ttulo, pero tambin podemos hacer que SQL Server realice el clculo y lo
incluya en una columna extra en la salida:
select titulo, precio,cantidad,
precio*cantidad
from libros;

69
Catedrtico: Marco del Cid SQL Server

Si queremos saber el precio de cada libro con un 10% de descuento podemos incluir en la
sentencia los siguientes clculos:
select titulo,precio,
precio-(precio*0.1)
from libros;

Tambin podemos actualizar los datos empleando operadores aritmticos:

update libros set precio=precio-(precio*0.1);

Todas las operaciones matemticas retornan "null" en caso de error. Ejemplo:


select 5/0;

Los operadores de concatenacin: permite concatenar cadenas, el ms (+).

Para concatenar el ttulo, el autor y la editorial de cada libro usamos el operador de concatenacin
("+"):

select titulo+'-'+autor+'-'+editorial
from libros;

Note que concatenamos adems unos guiones para separar los campos.

Ejemplo

Crear la tabla "libros".

Eliminamos la tabla si existe:


if object_id ('libros') is not null
drop table libros;

Creamos la tabla:
create table libros(
codigo int identity,
titulo varchar(40) not null,
autor varchar(20) default 'Desconocido',
editorial varchar(20),

70
Catedrtico: Marco del Cid SQL Server

precio decimal(6,2),
cantidad tinyint default 0,
primary key (codigo)
);

Ingresamos algunos registros:

insert into libros (titulo,autor,editorial,precio)


values('El aleph','Borges','Emece',25);
insert into libros
values('Java en 10 minutos','Mario Molina','Siglo
XXI',50.40,100);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Alicia en el pais de las maravillas','Lewis
Carroll','Emece',15,50);

Queremos saber el monto total en dinero de cada libro:

select titulo, precio,cantidad,


precio*cantidad
from libros;

Queremos saber el precio de cada libro con un 10% de descuento:

select titulo,precio,
precio-(precio*0.1)
from libros;

Actualizamos los precios con un 10% de descuento y vemos el resultado:

update libros set precio=precio-(precio*0.1);


select *from libros;

Queremos una columna con el ttulo, el autor y la editorial de cada libro:

71
Catedrtico: Marco del Cid SQL Server

select titulo+'-'+autor+'-'+editorial
from libros;

Ejercicio

Un comercio que vende artculos de computacin registra los datos de sus artculos en una tabla
con ese nombre.

1- Elimine la tabla si existe:


if object_id ('articulos') is not null
drop table articulos;

2- Cree la tabla:
create table articulos(
codigo int identity,
nombre varchar(20),
descripcion varchar(30),
precio smallmoney,
cantidad tinyint default 0,
primary key (codigo)
);

3- Ingrese algunos registros:


insert into articulos values ('impresora','Epson Stylus
C45',400.80,20);
insert into articulos values ('impresora','Epson Stylus
C85',500);
insert into articulos values ('monitor','Samsung 14',800);
insert into articulos values ('teclado','ingles Biswal',100,50);

4- El comercio quiere aumentar los precios de todos sus artculos en un 15%. Actualice todos los
precios empleando operadores aritmticos.

72
Catedrtico: Marco del Cid SQL Server

5- Vea el resultado:
select *from articulos;

6- Muestre todos los artculos, concatenando el nombre y la descripcin de cada uno de ellos
separados por coma.

7- Reste a la cantidad de todos los teclados, el valor 5, empleando el operador aritmtico menos
("-")

Los Alias, la palabra clave AS


Una manera de hacer ms comprensible el resultado de una consulta consiste en cambiar los
encabezados de las columnas.

Por ejemplo, tenemos la tabla "agenda" con un campo "nombre" (entre otros) en el cual se
almacena el nombre y apellido de nuestros amigos; queremos que al mostrar la informacin de
dicha tabla aparezca como encabezado del campo "nombre" el texto "nombre y apellido", para ello
colocamos un alias de la siguiente manera:

select nombre as NombreYApellido,


domicilio,telefono
from agenda;

Para reemplazar el nombre de un campo por otro, se coloca la palabra clave "as" seguido del texto
del encabezado.

Si el alias consta de una sola cadena las comillas no son necesarias, pero si contiene ms de una
palabra, es necesario colocarla entre comillas simples:

select nombre as 'Nombre y apellido',


domicilio,telefono
from agenda;

Un alias puede contener hasta 128 caracteres.

Tambin se puede crear un alias para columnas calculadas.

La palabra clave "as" es opcional en algunos casos, pero es conveniente usarla.

73
Catedrtico: Marco del Cid SQL Server

Entonces, un "alias" se usa como nombre de un campo o de una expresin. En estos casos, son
opcionales, sirven para hacer ms comprensible el resultado; en otros casos, que veremos ms
adelante, son obligatorios.

Ejemplo

Trabajamos con nuestra tabla "agenda".

Eliminamos la tabla si existe:


if object_id('agenda') is not null
drop table agenda;

Creamos la tabla:
create table agenda(
nombre varchar(30),
domicilio varchar(30),
telefono varchar(11)
);

Ingresamos algunos registros:

insert into agenda


values('Juan Perez','Avellaneda 908','4252525');
insert into agenda
values('Marta Lopez','Sucre 34','4556688');
insert into agenda
values('Carlos Garcia','Sarmiento 1258',null);

Mostramos la informacin con el encabezado "NombreYApellido" para el campo "nombre":


select nombre as NombreYApellido,
domicilio,telefono
from agenda;

Mostramos la informacin con el encabezado "Nombre y apellido" para el campo "nombre",


necesitamos emplear comillas:

74
Catedrtico: Marco del Cid SQL Server

select nombre as 'Nombre y apellido',


domicilio,telefono
from agenda;

La palabra clave "as" es opcional, podemos obviarla:


select nombre 'Nombre y apellido',
domicilio,telefono
from agenda;

Ejercicio

Primer problema:

Trabaje con la tabla "libros" de una librera.

1- Elimine la tabla si existe:


if object_id ('libros') is not null
drop table libros;

2- Cree la tabla:
create table libros(
codigo int identity,
titulo varchar(40) not null,
autor varchar(20) default 'Desconocido',
editorial varchar(20),
precio decimal(6,2),
cantidad tinyint default 0,
primary key (codigo)
);

75
Catedrtico: Marco del Cid SQL Server

3- Ingrese algunos registros:


insert into libros (titulo,autor,editorial,precio)
values('El aleph','Borges','Emece',25);
insert into libros
values('Java en 10 minutos','Mario Molina','Siglo
XXI',50.40,100);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Alicia en el pais de las maravillas','Lewis
Carroll','Emece',15,50);

4- Muestre todos los campos de los libros y un campo extra, con el encabezado "monto total" en
la que calcule el monto total en dinero de cada libro (precio por cantidad)

5- Muestre el ttulo, autor y precio de todos los libros de editorial "Emece" y agregue dos
columnas extra en las cuales muestre el descuento de cada libro, con el encabezado "descuento" y
el precio con un 10% de descuento con el encabezado "precio final".

6- Muestre una columna con el ttulo y el autor concatenados con el encabezado "Ttulo y autor"

76
Catedrtico: Marco del Cid SQL Server

Funciones
Una funcin es un conjunto de sentencias que operan como una unidad lgica.

Una funcin tiene un nombre, retorna un parmetro de salida y opcionalmente acepta parmetros
de entrada. Las funciones de SQL Server no pueden ser modificadas, las funciones definidas por el
usuario si.

SQL Server ofrece varios tipos de funciones para realizar distintas operaciones. Se pueden
clasificar de la siguiente manera:

1) de agregado: realizan operaciones que combinan varios valores y retornan un nico valor. Son
"count", "sum", "min" y "max".

2) escalares: toman un solo valor y retornan un nico valor. Pueden agruparse de la siguiente
manera:

- de configuracin: retornan informacin referida a la configuracin.

Ejemplo:
select @@version;

retorna la fecha, versin y tipo de procesador de SQL Server.

- de cursores: retornan informacin sobre el estado de un cursor.

- de fecha y hora: operan con valores "datetime" y "smalldatetime". Reciben un parmetro de tipo
fecha y hora y retornan un valor de cadena, numrico o de fecha y hora.

- matemticas: realizan operaciones numricas, geomtricas y trigonomtricas.

- de metadatos: informan sobre las bases de datos y los objetos.

- de seguridad: devuelven informacin referente a usuarios y funciones.

- de cadena: operan con valores "char", "varchar", "nchar", "nvarchar", "binary" y "varbinary" y
devuelven un valor de cadena o numrico.

77
Catedrtico: Marco del Cid SQL Server

- del sistema: informan sobre opciones, objetos y configuraciones del sistema. Ejemplo:

select user_name();

- estadsticas del sistema: retornan informacin referente al rendimiento del sistema.

- texto e imagen: realizan operaciones con valor de entrada de tipo text o image y retornan
informacin referente al mismo.

3) de conjuntos de filas: retornan conjuntos de registros.

Se pueden emplear las funciones del sistema en cualquier lugar en el que se permita una
expresin en una sentencia "select".

Funciones para la manipulacin de cadenas


Microsoft SQL Server tiene algunas funciones para trabajar con cadenas de caracteres. Estas son
algunas:

substring(cadena,inicio,longitud): devuelve una parte de la cadena especificada como primer


argumento, empezando desde la posicin especificada por el segundo argumento y de tantos
caracteres de longitud como indica el tercer argumento. Ejemplo:
select substring('Buenas tardes',8,6);

Retorna "tardes".

str(numero,longitud,cantidaddecimales): convierte nmeros a caracteres; el primer parmetro


indica el valor numrico a convertir, el segundo la longitud del resultado (debe ser mayor o igual a
la parte entera del nmero ms el signo si lo tuviese) y el tercero, la cantidad de decimales. El
segundo y tercer argumento son opcionales y deben ser positivos. String significa cadena en ingls.

Ejemplo: se convierte el valor numrico "123.456" a cadena, especificando 7 de longitud y 3


decimales:

select str(123.456,7,3);

Retorna '123.46';

78
Catedrtico: Marco del Cid SQL Server

Si no se colocan el segundo y tercer argumeno, la longitud predeterminada es 10 y la cantidad de


decimales 0 y se redondea a entero. Ejemplo: se convierte el valor numrico "123.456" a cadena:

select str(123.456);

retorna '123';

select str(123.456,3);

retorna '123';

Si el segundo parmetro es menor a la parte entera del nmero, devuelve asteriscos (*). Ejemplo:

select str(123.456,2,3);

retorna "**".

stuff(cadena1,inicio,cantidad,cadena2): inserta la cadena enviada como cuarto argumento, en la


posicin indicada en el segundo argumento, reemplazando la cantidad de caracteres indicada por
el tercer argumento en la cadena que es primer parmetro. Stuff significa rellenar en ingls.
Ejemplo:

select stuff('abcde',3,2,'opqrs');

Retorna "abopqrse". Es decir, coloca en la posicin 2 la cadena "opqrs" y reemplaza 2 caracteres


de la primera cadena.

Los argumentos numricos deben ser positivos y menor o igual a la longitud de la primera cadena,
caso contrario, retorna "null".

Si el tercer argumento es mayor que la primera cadena, se elimina hasta el primer carcter.

len(cadena): retorna la longitud de la cadena enviada como argumento. "len" viene de length,
que significa longitud en ingls. Ejemplo:

select len('Hola');

Devuelve 4.

79
Catedrtico: Marco del Cid SQL Server

char(x): retorna un caracter en cdigo ASCII del entero enviado como argumento. Ejemplo:
select char(65);

retorna "A".

left(cadena,longitud): retorna la cantidad (longitud) de caracteres de la cadena comenzando


desde la izquierda, primer caracter. Ejemplo:

select left('buenos dias',8);

Retorna "buenos d".

right(cadena,longitud): retorna la cantidad (longitud) de caracteres de la cadena comenzando


desde la derecha, ltimo caracter. Ejemplo:

select right('buenos dias',8);

Retorna "nos dias".

lower(cadena): retornan la cadena con todos los caracteres en minsculas. lower significa reducir
en ingls. Ejemplo:

select lower('HOLA ESTUDIAnte');

Retorna "hola estudiante".

upper(cadena): retornan la cadena con todos los caracteres en maysculas. Ejemplo:

select upper('HOLA ESTUDIAnte');

ltrim(cadena): retorna la cadena con los espacios de la izquierda eliminados. Trim significa
recortar. Ejemplo:
select ltrim(' Hola ');

Retorna "Hola ".

80
Catedrtico: Marco del Cid SQL Server

rtrim(cadena): retorna la cadena con los espacios de la derecha eliminados. Ejemplo:

select rtrim(' Hola ');

Retorna " Hola".

replace(cadena,cadenareemplazo,cadenareemplazar): retorna la cadena con todas las


ocurrencias de la subcadena reemplazo por la subcadena a reemplazar. Ejemplo:

select replace('[Link]','x','w');

Retorna "[Link]'.

reverse(cadena): devuelve la cadena invirtiendo el order de los caracteres. Ejemplo:

select reverse('Hola');

retorna "aloH".

patindex(patron,cadena): devuelve la posicin de comienzo (de la primera ocurrencia) del patrn


especificado en la cadena enviada como segundo argumento. Si no la encuentra retorna 0.
Ejemplos:

select patindex('%Luis%', 'Jorge Luis Borges');

Retorna 7.

select patindex('%or%', 'Jorge Luis Borges');

Retorna 2.

select patindex('%ar%', 'Jorge Luis Borges');

Retorna 0.

81
Catedrtico: Marco del Cid SQL Server

charindex(subcadena,cadena,inicio): devuelve la posicin donde comienza la subcadena en la


cadena, comenzando la bsqueda desde la posicin indicada por "inicio". Si el tercer argumento
no se coloca, la bsqueda se inicia desde 0. Si no la encuentra, retorna 0. Ejemplos:

select charindex('or','Jorge Luis Borges',5);

Retorna 13.

select charindex('or','Jorge Luis Borges');

Retorna 2.

select charindex('or','Jorge Luis Borges',14);

Retorna 0.

select charindex('or', 'Jorge Luis Borges');

Retorna 0.

replicate(cadena,cantidad): repite una cadena la cantidad de veces especificada. Ejemplo:

select replicate ('Hola',3);

Retorna "HolaHolaHola";

space(cantidad): retorna una cadena de espacios de longitud indicada por "cantidad", que debe
ser un valor positivo. Ejemplo:

select 'Hola'+space(1)+'que tal';

Retorna "Hola que tal".

Se pueden emplear estas funciones enviando como argumento el nombre de un campo de tipo
caracter.

82
Catedrtico: Marco del Cid SQL Server

Ejemplo

Crear la tabla "libros.

Eliminamos la tabla si existe:

if object_id ('libros') is not null


drop table libros;

Creamos la tabla:
create table libros(
codigo int identity,
titulo varchar(40) not null,
autor varchar(20) default 'Desconocido',
editorial varchar(20),
precio decimal(6,2),
cantidad tinyint default 0,
primary key (codigo)
);

Ingresamos algunos registros:

insert into libros values('El aleph','Borges','Emece',25);


insert into libros values('Java en 10 minutos','Mario
Molina','Siglo XXI',50.40,100);
insert into libros values('Alicia en el pais de las
maravillas','Lewis Carroll','Emece',15,50);

Mostramos slo los 12 primeros caracteres de los ttulos de los libros y sus autores, empleando la
funcin "substring()":
select substring(titulo,1,12) as titulo
from libros;

Mostramos slo los 12 primeros caracteres de los ttulos de los libros y sus autores, ahora
empleando la funcin "left()":
select left(titulo,12) as titulo
from libros;

83
Catedrtico: Marco del Cid SQL Server

Mostramos los ttulos de los libros y sus precios convirtiendo este ltimo a cadena de caracteres
con un solo decimal, empleando la funcin "str":

select titulo,
str(precio,6,1)
from libros;

Mostramos los ttulos de los libros y sus precios convirtiendo este ltimo a cadena de caracteres
especificando un solo argumento:

select titulo,
str(precio)
from libros;

Se redondea a entero.

Mostramos los ttulos, autores y editoriales de todos libros, al ltimo campo lo queremos en
maysculas:

select titulo, autor, upper(editorial)


from libros;

Funciones matemticas
Las funciones matemticas realizan operaciones con expresiones numricas y retornan un
resultado, operan con tipos de datos numricos.

Microsoft SQL Server tiene algunas funciones para trabajar con nmeros. Aqu presentamos
algunas.

abs(x): retorna el valor absoluto del argumento "x". Ejemplo:

select abs(-20);

Retorna 20.

84
Catedrtico: Marco del Cid SQL Server

ceiling(x): redondea hacia arriba el argumento "x". Ejemplo:


select ceiling(12.34);

Retorna 13.

floor(x): redondea hacia abajo el argumento "x". Ejemplo:


select floor(12.34);

Retorna 12.

%: devuelve el resto de una divisin. Ejemplos:

select 10%3;

Retorna 1.

select 10%2;

Retorna 0.

power(x,y): retorna el valor de "x" elevado a la "y" potencia. Ejemplo:

select power(2,3);

Retorna 8.

round(numero,longitud): retorna un nmero redondeado a la longitud especificada. "longitud"


debe ser tinyint, smallint o int. Si "longitud" es positivo, el nmero de decimales es redondeado
segn "longitud"; si es negativo, el nmero es redondeado desde la parte entera segn el valor de
"longitud". Ejemplos:
select round(123.456,1);

Retorna "123.400", es decir, redondea desde el primer decimal.


select round(123.456,2);

Retorna "123.460", es decir, redondea desde el segundo decimal.

85
Catedrtico: Marco del Cid SQL Server

select round(123.456,-1);

Retorna "120.000", es decir, redondea desde el primer valor entero (hacia la izquierda).

select round(123.456,-2);

Retorna "100.000", es decir, redondea desde el segundo valor entero (hacia la izquierda).

sign(x): si el argumento es un valor positivo devuelve 1;-1 si es negativo y si es 0, 0.

square(x): retorna el cuadrado del argumento. Ejemplo:

select square(3)

Retorna 9.

srqt(x): devuelve la raiz cuadrada del valor enviado como argumento.

SQL Server dispone de funciones trigonomtricas que retornan radianes.

Se pueden emplear estas funciones enviando como argumento el nombre de un campo de tipo
numrico.

86

También podría gustarte