Sei sulla pagina 1di 66

Manual SQL

Introduccin al lenguaje SQL


Julio Cesar Avellaneda Sua

V 1.0

Manual SQL

V 1.0

Tabla de Contenido
Lenguaje SQL .........................................................................................................................................................................................4 1. Crear y eliminar una base de datos......................................................................................................................................4 2. Almacenamiento ..........................................................................................................................................................................4 3. Crear y eliminar una tabla .......................................................................................................................................................4 4. Tipos de datos ..............................................................................................................................................................................5 5. Comentarios ..................................................................................................................................................................................5 6. Insertar datos ...............................................................................................................................................................................6 7. Consultas bsicas ........................................................................................................................................................................7 8. Consultas con condicin (where) ...........................................................................................................................................7 9. Funcin order by ..........................................................................................................................................................................7 9. Operadores lgicos (and or not) ....................................................................................................................................8 9. Alias a una tabla ..........................................................................................................................................................................8 10. Consultas multitabla ................................................................................................................................................................9 11. Valores null y not null..............................................................................................................................................................9 12. Clave primaria ..........................................................................................................................................................................10 15. Caractersticas identity .........................................................................................................................................................11 16. Borrado con truncate table..................................................................................................................................................12 17. Borrado con delete .................................................................................................................................................................13 18. Tipo de dato fecha ..................................................................................................................................................................13 19. Valores por defecto (default)..............................................................................................................................................13 20. Alias a una columna ...............................................................................................................................................................14 20. Operador relacional (is null) ...............................................................................................................................................15 20. Operador relacional (between) ..........................................................................................................................................15 20. Operador relacional (in) .......................................................................................................................................................16 20. Operador patronal (like) .......................................................................................................................................................16 20. Operador (count) ....................................................................................................................................................................18 25. Funciones ...................................................................................................................................................................................18 26. Funciones de agregacin ......................................................................................................................................................18 26. Agrupar registros (group by)..............................................................................................................................................19 27. Funciones para el manejo de cadenas ............................................................................................................................20 28. Funciones matemticas ........................................................................................................................................................21 29. Funciones para el manejo de fechas................................................................................................................................22 29. Seleccionar grupos (having) ...............................................................................................................................................23 29. Modificador del group by (rollup)......................................................................................................................................23 29. Modificador del group by (cube) .......................................................................................................................................24 29. Clusula compute....................................................................................................................................................................25 29. Registros duplicados (distinct) ...........................................................................................................................................25 29. Clusula top ..............................................................................................................................................................................26

Julio Cesar Avellaneda Sua


Analista y Desarrollador Microsoft Certified Professional DCE 5 Estrellas Platino http://julitogtu.wordpress.com

Manual SQL

V 1.0

29. Clave primaria compuesta ...................................................................................................................................................26 29. Integridad de datos ................................................................................................................................................................27 29. Restriccin default ..................................................................................................................................................................27 29. Restriccin check.....................................................................................................................................................................28 29. Deshabilitar restricciones (check).....................................................................................................................................29 29. Restriccin primary key ........................................................................................................................................................30 29. Restriccin unique ..................................................................................................................................................................30 29. Procedimiento almacenado sp_helpconstraint .............................................................................................................31 29. Eliminar restricciones ............................................................................................................................................................31 29. Crear y asociar reglas (create rule sp_bindrule).....................................................................................................32 29. Restriccin check y reglas ...................................................................................................................................................33 29. Eliminar y desasociar reglas (sp_unbindrole y drop rule) .......................................................................................33 29. Informacin de reglas ...........................................................................................................................................................34 29. Valores predeterminados (default)...................................................................................................................................34 29. Desasociar y eliminar valores predeterminados..........................................................................................................35 29. Informacin de valores predeterminados ......................................................................................................................36 29. ndices.........................................................................................................................................................................................36 29. Clases de ndices .....................................................................................................................................................................37 29. Creacin de ndices ................................................................................................................................................................37 29. Eliminar ndices ........................................................................................................................................................................38 21. Combinacin interna (inner join) ......................................................................................................................................39 22. Combinacin externa izquierda (left join) .....................................................................................................................40 23. Combinacin externa derecha (right join) .....................................................................................................................41 24. Combinacin externa completa (full join)......................................................................................................................42 24. Combinaciones cruzadas (cross join) ..............................................................................................................................42 24. Foreign Key ...............................................................................................................................................................................43 24. Restriccin foreign Key .........................................................................................................................................................43 24. Acciones restriccin foreign Key ........................................................................................................................................44 24. Deshabilitar y eliminar restriccin foreign Key ............................................................................................................45 24. Restricciones al crear una tabla.........................................................................................................................................45 24. Operador unin ........................................................................................................................................................................46 24. Agregar y eliminar campos .................................................................................................................................................47 24. Modificar campos ....................................................................................................................................................................47 24. Agregar campos y restricciones.........................................................................................................................................48 24. Campos calculados .................................................................................................................................................................48 24. Subconsultas.............................................................................................................................................................................49 25. Subconsultas como expresin ............................................................................................................................................49 26. Subconsultas con in ..............................................................................................................................................................50 26. Subconsultas con any some - all .................................................................................................................................51

Julio Cesar Avellaneda Sua


Analista y Desarrollador Microsoft Certified Professional DCE 5 Estrellas Platino http://julitogtu.wordpress.com

Manual SQL

V 1.0

26. Subconsultas correlacionadas ............................................................................................................................................51 26. Exists y no exists ....................................................................................................................................................................52 27. Subconsultas en update y delete ......................................................................................................................................53 28. Subconsultas insert ................................................................................................................................................................53 29. Crear una tabla a partir de otra ........................................................................................................................................54 29. Comando Go .............................................................................................................................................................................54 29. Vistas ...........................................................................................................................................................................................54 30.Vistas informacin ....................................................................................................................................................................55 31. Vistas encriptar ........................................................................................................................................................................56 31. Vistas eliminar..........................................................................................................................................................................56 32. Vistas (modificar datos de una tabla) .............................................................................................................................56 32. Vistas modificar .......................................................................................................................................................................57 32. Case (control de flujo) ..........................................................................................................................................................57 32. If (control de flujo) .................................................................................................................................................................58 33. Variables de usuario...............................................................................................................................................................59 33. Tipo de dato text, ntext e image.......................................................................................................................................60 33. Procedimientos almacenados .............................................................................................................................................61 33. Procedimientos almacenados crear ..................................................................................................................................61 33. Procedimientos almacenados eliminar ............................................................................................................................63 33. Procedimientos almacenados y parmetros de entrada ...........................................................................................63 33. Procedimientos almacenados y parmetros de salida...............................................................................................63

Julio Cesar Avellaneda Sua


Analista y Desarrollador Microsoft Certified Professional DCE 5 Estrellas Platino http://julitogtu.wordpress.com

Manual SQL

V 1.0

lenguaje Introduccin al lenguaje SQL


1. Crear y eliminar una base de datos Para crear una base de datos, solo es necesario una lnea de cdigo, cuando se compila esta lnea, nos es posible crear tablas y dems objetos que necesitemos.

Sintaxis: Create database nombre_base_de_datos Ejemplo: Create database supermercado

La sintaxis para eliminar una base de datos solo es necesario compilar lo siguiente:

Sintaxis: Drop database nombre_base_de_datos Ejemplo: Drop database supermercado

2. Almacenamiento Una base de datos, almacena la informacin en tablas, estructurados los datos en filas y en columnas, siendo as que cada columna es un campo y cada fila es un registro.

Un campo es un espacio en el cual se puede almacenar un nico registro, en relacin al tipo de dato que pueda contener el campo.

Un registro es el dato o valor que tiene un campo, este valor debe coincidir con el tipo de dato del campo.

3. Crear y eliminar una tabla En una tabla se pueden incluir muchos campos, y cada campo puede tener un tipo da dato diferente.

Sintaxis bsica: Create table nombre_tabla ( Julio Cesar Avellaneda Sua


Analista y Desarrollador Microsoft Certified Professional DCE 5 Estrellas Platino http://julitogtu.wordpress.com

Manual SQL

V 1.0

Campo_1 tipo_de_dato, Campo_2 tipo_de_dato, Campo_n tipo_de_dato, )

Ejemplo: Create table empleados ( Nombre_empleado varchar (20), Edad_empleado int, )

Tambin es posible eliminar una tabla que ya se ha creado, es importante tener en cuenta que al eliminar la tabla con ella se eliminar toa la informacin que contiene.

Sintaxis: Drop table nombre_tabla Ejemplo: Drop table empleados

4. Tipos de datos 5. Comentarios Un comentario es una lnea de cdigo que no se compila al ejecutar el script, los comentarios son tiles cuando se quiere aclarar instrucciones o segmentar el cdigo de manera que sea ms fcil su lectura.

Existen dos clases de comentarios, la primer clase es un comentario que ocupa una sola lnea.

Sintaxis: --- comentario -- La segunda clase es un cometario que puede ocupar una o varias lneas.

Sintaxis: /* este es un ejemplo de un Julio Cesar Avellaneda Sua


Analista y Desarrollador Microsoft Certified Professional DCE 5 Estrellas Platino http://julitogtu.wordpress.com

Manual SQL

V 1.0

comentario */

6. Insertar datos Cuando se insertan datos en una tabla, es necesario que el tipo de dato ingresado concuerde con el tipo de dato de el campo, de no ser as, ocurrir un error en la compilacin.

Existen dos formas para ingresar datos, la primera es:

Sintaxis: Insert into nombre_tabla (campo1,campo2,,campon) Values (valorcampo1,valorcampo2,,valorcampon) Ejemplo: Insert into empleados (nombre_empleado,edad_empleado) Values (Juan Carlos,25)

En la primera lnea de cdigo, se especifica la tabla y el/los campo(s) que vamos a ingresar, en la segunda lnea, ingresamos los valores correspondientes en el mismo orden que en la anterior lnea. Si el valor en un entero no es necesario usar la comilla, de lo contrario el valor siempre debe ir encerrado por comillas simples.

La segunda manera es similar:

Sintaxis: Insert into nombre_tabla Values (valorcampo1,valorcampo2,,valorcampon) Ejemplo: Insert into empleados Values (Juan Carlos,25)

De esta manera, no se especifica los campos a los cuales les vamos a ingresar valor, por lo cual, se debe ingresar valor a todos los campos de la tabla en el orden que fueron escritos cuando se creo la tabla.

Julio Cesar Avellaneda Sua


Analista y Desarrollador Microsoft Certified Professional DCE 5 Estrellas Platino http://julitogtu.wordpress.com

Manual SQL

V 1.0

7. Consultas bsicas Una consulta es un procedimiento por el cual se recuperan registros(valores) de una o varias tablas. La primera consulta, recupera todos los datos de una tabla.

Sintaxis: Select * From nombre_tabla1 Ejemplo: Select * From empleados

En la primera lnea, la funcin select sirve para indicar los campos que se quiere ver, el * indica que se deben mostrar todos los campos de la tabla; en la segunda lnea, con el from se hace referencia a la tabla.

8. Consultas con condicin (where) Es posible realizar una consulta y recuperar solo algunos registros de acuerdo a una condicin o necesidad.

Sintaxis: Select campo_1,campo_2 From nombre_tabla1 Where condicin Ejemplo: Select nombre,edad From empleados Where edad = 25

La consulta anterior, muestra el nombre y la edad de todos los empleados que tengan una edad de 25 aos.

9. Funcin order by Las funcin order by permite mostrar los registros organizados por algn campo.

Sintaxis: Julio Cesar Avellaneda Sua


Analista y Desarrollador Microsoft Certified Professional DCE 5 Estrellas Platino http://julitogtu.wordpress.com

Manual SQL

V 1.0

Select nombrecampo From nombre_tabla Order by campo

Ejemplo: Select * From empleados Order by sueldo desc

Tambin es posible ordenar por varios campos, as como de manera ascendiente (asc) o descendiente (Desc).

9. Operadores lgicos (and or not) Un operador lgico permite establecer ms de una condicin es una consulta, es decir combinan condiciones, estos operadores deben ir en la clusula where. El operador and significa (y), el operador or significa (o) y el operador not significa (no).

Sintaxis: Select nombrecampo From nombre_tabla Where condicion1 and/or/not condicion

Ejemplo: Select * From empleados Where edad = 25 and/or/not cdigo = 2

9. Alias a una tabla Algunas veces, se hace necesario escribir el nombre de una tabla varias veces en una consulta, sin embargo, este proceso es un demorado si en la consulta contamos con varias tablas, por esta razn, usamos un alias para cada tabla en nuestra consulta.

Sintaxis: Select campo_1,campo_2 Julio Cesar Avellaneda Sua


Analista y Desarrollador Microsoft Certified Professional DCE 5 Estrellas Platino http://julitogtu.wordpress.com

Manual SQL

V 1.0

From nombre_tabla1 alias

La segunda clase es un cometario que puede ocupar una o varias lneas.

Ejemplo: Select nombre,edad From empleados e

En la segunda lnea, se llama a la tabla empleados y se le asigna un alias con la letra e, as cuando se necesite de nuevo la tabla solo es necesario usar la letra e correspondiente a su alias asignado.

10. Consultas multitabla Generalmente, es necesario usar ms de una tabla para una consulta, y es aqu donde los alias nos sern de gran utilidad.

Sintaxis: Select alias1.campo_1,alias2.campo_2,aliasn.campo_n From nombre_tabla1 alias1, nombre_tablan aliasn

Ejemplo: Select e.nombre,d.nombre From empleados e, departamentos d

En la consulta anterior, se llama dos tablas cada una con un alias diferente, el cual es usado en el select para saber a que tabla y campo se hace referencia. Se desea mostrar el nombre del empleado y el departamento en el cual trabaja, para ello se agrega una condicin, por lo cual la consulta quedara:

Ejemplo: Select e.nombre,d.nombre From empleados e, departamentos d Where e.codigodepartamento = d.codigodepartamento

11. Valores null y not null Julio Cesar Avellaneda Sua


Analista y Desarrollador Microsoft Certified Professional DCE 5 Estrellas Platino http://julitogtu.wordpress.com

Manual SQL

V 1.0

Anteriormente vimos como crear campos, aqu se explicar como agregar una caracterstica importante a un campo.

La palabra null hace referencia a un valor inexistente o desconocido, no se debe confundir con un valor 0, al contrario, si una variable es not null, significa que debe tener una valor real y conocido en relacin a su tipo de dato. Cuando se declara una variable y no se especifica si el null o not null, esta por defecto es null.

Sintaxis bsica: Create table nombre_tabla ( Campo_1 tipo_de_dato not null, Campo_2 tipo_de_dato, )

A continuacin se muestran dos ejemplos para explicar como es el funcionamiento del null y el not null.

Ejemplo: Create table empleados ( Nombre_empleado varchar (20) not null, Edad_empleado int, )

El primer campo creado ha sido declarado not null, es decir al ingresar valores en la tabla, es obligatorio ingresar un valor para este campo (en este caso un nombre); en el segundo campo creado, no se le ha declarado nada, quiere decir que es de tipo null, por consiguiente cuando ingresemos valores en la tabla no ser necesario ingresar un valor para este campo (una edad en este caso).

12. Clave primaria Una clave primaria es un campo que identifica un registro, este valor no se repite, es nico en la tabla. Este campo ser utilizado para crear vnculos en las tablas.

Sintaxis: Create table nombre_tabla ( Julio Cesar Avellaneda Sua


Analista y Desarrollador Microsoft Certified Professional DCE 5 Estrellas Platino http://julitogtu.wordpress.com

10

Manual SQL

V 1.0

Campo_1 tipo_de_dato not null, Campo_2 tipo_de_dato, Primary key (nombrecampo), )

Ejemplo: Create table empleados ( Codigo_empleado int not null, Nombre_empleado varchar (20) not null, Edad_empleado int, Primary key (codigo_empleado) )

En la tabla anterior, se ha referenciado el campo codigo_empleado como llave primaria, quiere decir, que se puede encontrar dos o ms empleados con el mismo nombre y la misma edad, pero nunca con el mismo codigo.

15. Caractersticas identity Un campo con un atributo identity, se incrementa automticamente, sin embargo, se le puede dar un valor inicial de la secuencia y el margen de incremento.

Sintaxis: Create table nombre_tabla ( Campo_1 tipo_de_dato identity (x,y) not null, Campo_2 tipo_de_dato, )

Ejemplo: Create table empleados ( Codigo_empleado int identity (50,5) not null, Nombre_empleado varchar (20) not null, Edad_empleado int, )

Julio Cesar Avellaneda Sua


Analista y Desarrollador Microsoft Certified Professional DCE 5 Estrellas Platino http://julitogtu.wordpress.com

11

Manual SQL

V 1.0

Al declarar el atributo identity entre parntesis le indicamos el valor inicial (x) y el incremento (y). En el ejemplo, el campo codigo_empleado comienza en 50 y se incrementa de 5 en 5, quiere decir que los valores sern 55, 60,

Se puede ver el valor inicial de un campo y el incremento de la siguiente forma:

Sintaxis: Select ident_seed (nombrecampo)

Sintaxis: Select ident_incr (nombrecampo)

Se ha dicho que no se puede ingresar un valor a un campo, sin embargo, es posible al activar esa opcin identity_insert.

Sintaxis: Set identity_insert nombrecampo on;

Para desactivar la opcin de ingresar valores en un campo identity, se necesita compilar lo siguiente:

Sintaxis: Set identity_insert nombrecampo off;

16. Borrado con truncate table La funcin truncate, permite borrar todos los registros de una tabla y conserva su estructura original. Una ventaja de borrar con truncate table es su velocidad, si se desea borrar una tabla con muchos registros, el tiempo de ejecucin con truncate table es mucho menor que con otras funciones tales como delete.

Sintaxis: Truncate table nombre_tabla Ejemplo: Truncate table empleados

Julio Cesar Avellaneda Sua


Analista y Desarrollador Microsoft Certified Professional DCE 5 Estrellas Platino http://julitogtu.wordpress.com

12

Manual SQL

V 1.0

Otra de las ventajas de hacer un borrado con truncate table, es que si en la tabla existe un campo con un atributo identity, la secuencia se inicia de nuevo, mientras que si se hace un borrado con delete, la secuencia no se inicia de nuevo.

17. Borrado con delete La funcin delete, permite borrar un registro especifico o bien toda la tabla, sin embargo, si se desea borrar todos los registros de una tabla es ms rpido hacerlo mediante un truncate table.

Sintaxis: Delete From nombre_tabla Where condicin Ejemplo: Delete From empleados Where empleado = juan

Si al realizar el borrado, no usamos ninguna condicin, se eliminarn todos los registros de la tabla, sin embargo, sin existe algn campo identity, la secuencia continua teniendo en cuenta el mayor valor que haba guardado.

18. Tipo de dato fecha El tipo de dato fecha permite varias formas de ingreso, sin embargo, es conveniente definir que formato se va a utilizar. Para definir el tipo de ingreso de fecha de usa lo siguiente.

Set dateformat dmy (dia-mes-ao)

19. Valores por defecto (default) Un valor por defecto se inserta cuando no est presente al ingresar un registro, un valor por defecto puede ser asignado a campos null o not null pero no a campos identity.

Julio Cesar Avellaneda Sua


Analista y Desarrollador Microsoft Certified Professional DCE 5 Estrellas Platino http://julitogtu.wordpress.com

13

Manual SQL

V 1.0

El valor por defecto se declara cuando se crea la tabla y es un atributo de uno o varios campos, si el valor por defecto es de tipo de dato numrico no es necesario usar comillas, de lo contrario si.

Sintaxis: Create table nombre_tabla ( Campo_1 tipo_de_dato default valor, Campo_2 tipo_de_dato, )

Ejemplo: Create table empleados ( Nombre_empleado varchar (20) not null, Edad_empleado int default 0, )

En ejemplo anterior, cuando se ingresan valores para la tabla empleados si omitimos el campo edad, SQL insertar por defecto el valor 0.

20. Alias a una columna Cuando se realiza una consulta, muchas veces se quiere que el encabezado del resultado tenga un nombre especfico para mayor comprensin, tambin cuando en la consulta se realizan operaciones con varios campos, el encabezado de la columna resultante no tendr nombre, sin embargo es posible asignarle uno. Para tal efecto es necesario usar la palabra as.

Sintaxis: Select nombrecampo as nuevo nombre From nombre_tabla

Ejemplo: Select nombre as usuario From empleados

Julio Cesar Avellaneda Sua


Analista y Desarrollador Microsoft Certified Professional DCE 5 Estrellas Platino http://julitogtu.wordpress.com

14

Manual SQL

V 1.0

En ejemplo anterior, cuando la consulta arroja el resultado, en el encabezado de la columna no tendr como ttulo nombre sino usuario.

20. Operador relacional (is null) El operador relacional is null, se utiliza cuando se necesita recuperar los campos cuyos registros son nulos.

Sintaxis: Select nombrecampo From nombre_tabla Where campo is null

Ejemplo: Select nombre From empleados Where e_mail is null

20. Operador relacional (between) El operador relacional between, permite trabajar con intervalos de valores, este operador permite trabajar con campos de tipo numricos, de fecha y Money. Between significa entre.

Sintaxis: Select nombrecampo From nombre_tabla Where campo between valor1 and valor 2

Ejemplo: Select nombre From empleados Where edad between 18 and 35

Es posible usar el operador not antes del between, lo cual dara como resultado los registros que estn fuera del rango especificado.

Julio Cesar Avellaneda Sua


Analista y Desarrollador Microsoft Certified Professional DCE 5 Estrellas Platino http://julitogtu.wordpress.com

15

Manual SQL

V 1.0

20. Operador relacional (in) El operador relacional in, se utiliza para saber si el valor de un campo est incluido en una lista de valore especificada.

Sintaxis: Select nombrecampo From nombre_tabla Where campo in (valor)

Ejemplo: Select nombre From empleados Where cargo in (operario)

Al igual que con el operador between, tambin es posible anteponer el operador not al usar el in, lo cual dar como resultado los registros que no estn incluidos en el valor especificado.

20. Operador patronal (like) El operador patronal like, realiza comparaciones de cadenas. Al usar este operador, es posible que la comparacin de la cadena sea total o parcial, lo cual permite mejorar la condicin de bsqueda. Sintaxis: Select nombrecampo From nombre_tabla Where nombre like valor

Ejemplo: Select nombre From empleados Where nombre like juan

El % es un comodn que permite comparar solo una parte de la cadena, es decir, es % reemplaza cualquier cantidad de caracteres, por lo tanto, la bsqueda se realizar sin

Julio Cesar Avellaneda Sua


Analista y Desarrollador Microsoft Certified Professional DCE 5 Estrellas Platino http://julitogtu.wordpress.com

16

Manual SQL

V 1.0

importar los caracteres existentes a la derecha o izquierda dependiendo del lugar en el cual este el comodn.

Sintaxis: Select nombrecampo From nombre_tabla Where nombre like %valor / valor% / %valor%

Ejemplo: Select nombre From empleados Where nombre like %ju / ju% / %j%

Otro operador comodn es [], este reemplaza cualquier carcter contenido en el conjunto especificada en los corchetes.

Sintaxis: Select nombrecampo From nombre_tabla Where nombre like [valor1 valor2]%

Ejemplo: Select nombre From empleados Where nombre like [A-G]%

Otro operador comodn es ^, este reemplaza cualquier carcter no contenido en el conjunto especificada en los corchetes.

Sintaxis: Select nombrecampo From nombre_tabla Where nombre like ^[valor1 valor2]%

Ejemplo: Julio Cesar Avellaneda Sua


Analista y Desarrollador Microsoft Certified Professional DCE 5 Estrellas Platino http://julitogtu.wordpress.com

17

Manual SQL

V 1.0

Select nombre From empleados Where nombre like ^[A-G]%

20. Operador (count) El operador count, cuenta la cantidad de registros de una tabla, incluyendo aquellos que tengan calor nulo, si especificamos un campo en el count, contara todos los registros sin tener en cuenta los que sean nulos en el campo especificado.

Sintaxis: Select count (nombrecampo / *) From nombre_tabla

Ejemplo: Select count (nombre / *) From empleados

25. Funciones Una funcin es un conjunto de sentencias que actan como unidad lgica. Una funcin tiene un nombre, retorna una salida y opcionalmente acepta argumentos de entrada.

26. Funciones de agregacin Una funcin de agregacin es una operacin que combina varios valores y solo retorna un valor. Las funciones de agregacin son:

Funcin sum: Realiza la suma de los campos especificados. En el ejemplo se sumar el sueldo de todos los empleados.

Sintaxis bsica: Select From sum(nombre_campo) as total_sueldo nombre_tabla

Ejemplo: Select Julio Cesar Avellaneda Sua


Analista y Desarrollador Microsoft Certified Professional DCE 5 Estrellas Platino http://julitogtu.wordpress.com

sum(sueldo) as total_sueldo

18

Manual SQL

V 1.0

From

empleados

Funcin min y max: Una funcin min o max compara todos los valores del campo especificado y retorna el menor (min) o el mayor (max) valor dependiendo de que funcin se utilice. La siguiente consulta retorna el empleado ms joven o bien el ms viejo.

Sintaxis bsica: Select From min/max(nombre_campo) nombre_tabla

Ejemplo: Select From min/max(edad) as ms_joven/ms viejo empleados

Funcin avg: La funcin avg se utiliza para calcular el promedio de los valores de los registros especificados. El siguiente ejemplo muestra el promedio de edad de todos los empleados.

Sintaxis bsica: Select From avg (nombre_campo) nombre_tabla

Ejemplo: Select From avg (edad) as promedio_edad empleados

26. Agrupar registros (group by) La funcin group by combinada con una funcin de agregacin genera valores de resumen para un solo campo. Si en la sentencia del select, existe un campo con funcin de agregacin, es necesario usar un group by especificando los campos que no tienen asociados una funcin de agregacin.

Sintaxis bsica: Select Julio Cesar Avellaneda Sua


Analista y Desarrollador Microsoft Certified Professional DCE 5 Estrellas Platino http://julitogtu.wordpress.com

sum(nombre_campo) as total_sueldo

19

Manual SQL

V 1.0

From Grupo by

nombre_tabla campo

Ejemplo: Select From Grupo by sum(sueldo) as total_sueldo,nombre empleados nombre

27. Funciones para el manejo de cadenas Funcin substring: La funcin substring devuelve una parte de la cadena especificada como primer argumento, empezando desde la posicin especificada en el segundo argumento y de tantos caracteres de longitud como lo indica el tercer argumento.

Sintaxis bsica: Select substring (cadena, inicio, longitud)

Ejemplo: Select substring (Buenas tardes,8,6)

Retorna tardes

Funcin str: La funcin str convierte nmeros a caracteres; el primer parmetro indica el valor numrico a convertir, el segundo indica la longitud del resultado (debe ser mayor o igual a la parte entera del nmero ms el signo si lo tuviese), y el tercer argumento, la cantidad de decimales. El segundo y tercer argumento son opcionales y positivos.

Sintaxis bsica: Select str (nmero, longitud, decimales)

Ejemplo: Select Julio Cesar Avellaneda Sua


Analista y Desarrollador Microsoft Certified Professional DCE 5 Estrellas Platino http://julitogtu.wordpress.com

str (123.456,5,3)

20

Manual SQL

V 1.0

Retorna 123.5

28. Funciones matemticas Las funciones matemticas realizan operaciones con expresiones numricas y retornan un resultado. Tambin es posible enviar como argumento un campo de alguna tabla, as como realizar la consulta utilizando parmetros de seleccin mediante la clusula where.

Funcin abs(x): La funcin abs retorna el valor absoluto del argumento.

Ejemplo: Select abs (-5)

Funcin ceiling(x): La funcin ceiling redondea hacia arriba el argumento.

Ejemplo: Select ceiling (123.45)

Funcin floor(x): La funcin floor redondea hacia abajo el argumento.

Ejemplo: Select floor (123.45)

Funcin %: La funcin % devuelve el resto de la divisin

Ejemplo: Select 22%5

Funcin power(x,y): La funcin power eleva el valor de x a la potencia y.

Ejemplo: Select power (2,5)

Funcin square(x): La funcin square retorna el cuadrado del argumento.

Julio Cesar Avellaneda Sua


Analista y Desarrollador Microsoft Certified Professional DCE 5 Estrellas Platino http://julitogtu.wordpress.com

21

Manual SQL

V 1.0

Ejemplo: Select square (5)

29. Funciones para el manejo de fechas Las funciones para el manejo de fechas que proporciona SQL, permiten trabajan enviando como argumento el nombre de un campo de tipo datetime o smalldatetime.

Funcin getdate(): Retorna la fecha y hora actual.

Ejemplo: Select getdate()

Funcin datepart (partedefecha, fecha): La funcin datepart retorna la parte especfica de una fecha (ao, da, hora). Los valores para partedefecha pueden ser year (ao), quarter (cuarto), month (mes), day (da), week (semana), hour (hora), minute

(minuto), second (segundo), millisecond (milisegundo).

Ejemplo: Select datepart(year,getdate())

Funcin datename (partedefecha, fecha): La funcin datename retorna el nombre de una parte especfica de una fecha. Los valores para partedefecha son los mismos que para la funcin datepart.

Ejemplo: Select datename(month,getdate()) Funcin datediff (partedefecha, fecha1, fecha2): Calcula el intervalo de tiempo (segn partedefecha) entre las dos fechas. El resultado es un nmero entero que hace referencia a fecha2 fecha1. Los valores para partedefecha son los mismos que para datepart.

Ejemplo: Select datediff(week,01/01/2006,01/01/2008)

Julio Cesar Avellaneda Sua


Analista y Desarrollador Microsoft Certified Professional DCE 5 Estrellas Platino http://julitogtu.wordpress.com

22

Manual SQL

V 1.0

Funcin day (fecha): Retorna el da de la fecha especificada.

Funcin month (fecha): Retorna el mes de la fecha especificada.

Funcin year (fecha): Retorna el ao de la fecha especificada.

29. Seleccionar grupos (having) As como la clusula where permite seleccionar registros individuales, la clusula having, permite seleccionar un grupo de registros. Si se desea establecer una o ms condiciones de salida en una funcin de agregacin, se debe utilizar la clusula having, esta debe ir despus del group by y antes del order by.

Sintaxis bsica: Select From Group by Having campo1, funcin_de_agregacin (campo2) tabla_1 campo1 condicin (funcin_de_agregacin (campo2))

Ejemplo: Select From Group by Having nombre, sum(cantidad) productos nombre sum(cantidad) > 10

29. Modificador del group by (rollup) Con la clusula rollup, se puede combinar con el group by para generar valores de resumen de salida, el operador rollup resume valores de grupos. Al usar este operador, se combinan dos consultas.

Sintaxis bsica: Select From Group by With rollup Julio Cesar Avellaneda Sua
Analista y Desarrollador Microsoft Certified Professional DCE 5 Estrellas Platino http://julitogtu.wordpress.com

campo1, funcin_de_agregacin (campo2) tabla_1 campo1

23

Manual SQL

V 1.0

Ejemplo: Select From Group by With rollup ciudad, count (*) as total empleados ciudad

La consulta anterior, muestra la cantidad de empleados por ciudad, adems incluye una fila (ltima) en la que muestra el total de empleados. Es decir, se combinan las siguientes consultas:

Ejemplo: Select From Group by ciudad, count (*) as cantidad empleados ciudad

Ejemplo: Select From ciudad, count (*) as total empleados

29. Modificador del group by (cube) El cube cumple la misma funcin que el operador rollup, a diferencia que este genere filas de resumen para todas las combinaciones posibles de los valores de los campos por los cuales se agrupa. Es muy importante el order en que se escriben los campos en el group by, puesto que la agrupacin final la hace en base al ltimo campo escrito.

Sintaxis bsica: Select From Group by With cube campo1, campo2, funcin_de_agregacin (campo3) tabla_1 campo1, campo2

Ejemplo: Select Julio Cesar Avellaneda Sua


Analista y Desarrollador Microsoft Certified Professional DCE 5 Estrellas Platino http://julitogtu.wordpress.com

id_departamento, ciudad, count(*)

24

Manual SQL

V 1.0

From Group by With cube

empleados id_departamento, ciudad

La consulta anterior, muestra la cantidad de empleados por ciudad y por departamento, luego muestra la cantidad total de empleados (hasta aqu igual que con rollup), sin embargo, tambin muestra la cantidad de empleados por ciudad sin importar el departamento.

29. Clusula compute Esta clusula genera totales que aparecen en columnas extras al final del resultado, se usan con funciones de agrupacin. El campo utilizado en el compute, debe estar incluido en la lista de campos del select. En una misma consulta se pueden utilizar varias funciones compute.

Sintaxis bsica: Select From Compute campo1, campo2, funcin_de_agregacin (campo3) tabla_1 function_de_agregacin(campo1)

Ejemplo: Select From Compute nombre, sueldo empleados avg(sueldo)

La consulta anterior, muestra el sueldo de cada empleado, adicionalmente el promedio de los sueldos. La siguiente consulta, muestra el promedio del precio de venta de los productos y la cantidad total de todos los productos.

Ejemplo: Select From Compute nombre, precio_venta, cantidad productos avg(precio_venta), sum(cantidad)

29. Registros duplicados (distinct) Julio Cesar Avellaneda Sua


Analista y Desarrollador Microsoft Certified Professional DCE 5 Estrellas Platino http://julitogtu.wordpress.com

25

Manual SQL

V 1.0

Con la clusula distinct, se especifica que los registros con ciertos datos duplicados sean obviados en el resultado.

Sintaxis bsica: Select From distinct campo tabla

Ejemplo: Select From distinct id_proveedor empleados

La consulta anterior, muestra el id (cdigo) de cada proveedor, sino se usara el distinct, se imprimira el id del proveedor tantas veces como productos tenga relacionados. Si es necesario, se puede incluir la clusula where en la consulta.

29. Clusula top La palabra clave top se emplea para obtener solo una cantidad limitada de registros. N hace referencia al nmero de registros que se desean obtener. La siguiente consulta muestra los 5 primeros empleados, es posible optimizar la consulta mediante el uso de la clusula where.

Sintaxis bsica: Select From top n campo tabla

Ejemplo: Select From top 5 * empleados

29. Clave primaria compuesta Se vio anteriormente, que uno de los atributos que puede tener un campo es ser primario, quiere decir que el valor de este campo ser nico e irrepetible. Una clave primaria compuesta, se utiliza cuando ningn campo por si solo cumple las condiciones para ser clave.

Julio Cesar Avellaneda Sua


Analista y Desarrollador Microsoft Certified Professional DCE 5 Estrellas Platino http://julitogtu.wordpress.com

26

Manual SQL

V 1.0

Sintaxis: Create table nombre_tabla ( Campo_1 tipo_de_dato not null, Campo_2 tipo_de_dato, Primary key (campo1,campo2), )

Ejemplo: Create table empleados ( Codigo_empleado int not null, Cdula_empleado varchar (12) not null, Nombre_empleado varchar (20) not null, Edad_empleado int, Primary key (codigo_empleado,cdula_empleado) )

29. Integridad de datos Al diseare una base de datos, es muy importante tener en cuenta la integridad de los datos, lo cual significa que la informacin almacenada debe ser vlida, coherente y exacta. SQL ofrece alternativas para controlar, restringir y validar los datos (por ejemplo la clave primaria).

Las restricciones (constraints) son un mtodo para mantener la integridad de los datos, asegurando que los valores ingresados sean vlidos y que las relaciones entre tablas se mantenga. El procedimiento almacenado sp_helpconstraint nombre_tabla, muestra la informacin acerca de las restricciones de la tabla.

29. Restriccin default La restriccin default, especfica un valor por defecto para un campo cuando no se inserta explcitamente. En el captulo 19, se vio el uso del default al crear la tabla. Sin embargo, es posible agregar est restriccin a una tabla ya creada.

Sintaxis: Alter table nombre_tabla Add constraint nombre_constraint Julio Cesar Avellaneda Sua
Analista y Desarrollador Microsoft Certified Professional DCE 5 Estrellas Platino http://julitogtu.wordpress.com

27

Manual SQL

V 1.0

Default valor_por_defecto For campo

Ejemplo: Alter table empleados Add constraint DF_empleados_telefono Default no tiene For telefono

Por convencin, cuando se da el nombre a las restricciones default, se emplea el siguiente formato: DF_nombretabla_nombrecampo.

Solo es posible agregar un default a un campo y no se puede emplear con la propiedad identity. Es posible en el valor por defecto, asignar una funcin del sistema (ej: getdate()).

29. Restriccin check La restriccin check especfica los valores que acepta un campo, evitando que se ingresen valores inapropiados. Un claro ejemplo, es no permitir la entrada de valores negativos en el precio de un artculo.

Sintaxis: Alter table nombre_tabla Add constraint nombre_constraint Check condicin

Ejemplo: Alter table productos Add constraint CK_productos_preciopositivo Check (precio_compra>=0 and precio_venta>=0)

Por convencin, cuando se da el nombre a las restricciones check, se emplea el siguiente formato: CK_nombretabla_nombrecampo.

Julio Cesar Avellaneda Sua


Analista y Desarrollador Microsoft Certified Professional DCE 5 Estrellas Platino http://julitogtu.wordpress.com

28

Manual SQL

V 1.0

Si en la tabla ya existen registros que no cumplen con la restriccin, esta no podr ser creada hasta que todos registros cumplan con dicha restriccin. Adems, la condicin puede hacer referencia a otros campos de la misma tabla.

29. Deshabilitar restricciones (check) Es posible agregar una restriccin a una tabla cuyos valores almacenados no cumplan con la condicin, pero los valores que se ingresen luego de ser creada dicha restriccin si la deben cumplir.

Sintaxis: Alter table nombre_tabla With nocheck Add constraint nombre_constraint Check condicin

Ejemplo: Alter table productos With nocheck Add constraint CK_productos_preciopositivo Check (precio_compra>=0 and precio_venta>=0)

Tambin es posible deshabilitar la restriccin por completo para agregar datos o actualizar sin comprobarla.

Sintaxis: Alter table nombre_tabla Nocheck constraint nombre_constraint

Ejemplo: Alter table productos Nocheck constraint CK_productos_preciopositivo

Para habilitar una restriccin deshabilitada se ejecuta la misma instruccin pero con la clusula check o check all. Si se emplea check constraint all se habilitan todas las restricciones que tenga la tabla.

Julio Cesar Avellaneda Sua


Analista y Desarrollador Microsoft Certified Professional DCE 5 Estrellas Platino http://julitogtu.wordpress.com

29

Manual SQL

V 1.0

Sintaxis: Alter table nombre_tabla check constraint nombre_constraint

Ejemplo: Alter table productos check constraint CK_productos_preciopositivo

Para saber si una restriccin esta habilitada o no, se usa el procedimiento almacenado sp_helpconstraint y se mira el estado en la columna status_enable.

29. Restriccin primary key Si al crear una tabla, no se especfica una clave primaria, es posible hacer la asignacin de una a la tabla.

Sintaxis: Alter table nombre_tabla Add constraint nombre_constraint Primary key (campos,)

Ejemplo: Alter table productos Add constraint PK_productos_codigo Primary key (codigo)

Por convencin, cuando se da el nombre a las restricciones primary key, se emplea el siguiente formato: PK_nombretabla_nombrecampo.

29. Restriccin unique La restriccin unique impide la duplicacin de claves alternas (no primarias), es decir, especfica que dos registros no puedan tener el mismo valor en un campo, se permiten valores nulos as como varias restricciones unique en una misma tabla.

Julio Cesar Avellaneda Sua


Analista y Desarrollador Microsoft Certified Professional DCE 5 Estrellas Platino http://julitogtu.wordpress.com

30

Manual SQL

V 1.0

Sintaxis: Alter table nombre_tabla Add constraint nombre_constraint Unique (campo)

Ejemplo: Alter table empleados Add constraint UQ_empleados_celular Unique (celular)

29. Procedimiento almacenado sp_helpconstraint El procedimiento almacenado sp_helpconstraint nombre_tabla, muestra la

informacin referente a todas las restricciones de la tabla, y devuelve la siguiente informacin:

Constraint_type: Es el tipo de restriccin.

Constraint_name: Es el nombre de la restriccin.

Delete_action: Solo es aplicable a las restricciones foreing key.

Update_action: Solo es aplicable a las restricciones foreing key.

Status_enable: Indica si la restriccin esta habilitada o no.

Status_for_replication: Solo es aplicable para las restricciones check y foreing key, indica n/a en cualquier otra que no se aplique.

Constraint_keys: Si es una restriccin check muestra la condicin, si es una default muestra el valor por defecto y si es una primary key o unique muestra el/los campos a los que aplica.

29. Eliminar restricciones As como es posible definir restricciones a una tabla tambin es posible eliminarlas, la sintaxis es la siguiente: Julio Cesar Avellaneda Sua
Analista y Desarrollador Microsoft Certified Professional DCE 5 Estrellas Platino http://julitogtu.wordpress.com

31

Manual SQL

V 1.0

Sintaxis: Alter table nombre_tabla Drop nombre_restriccin

Ejemplo: Alter table empleados Drop UQ_empleados_celular

Es posible eliminar varias restricciones separndolas por una coma, y en el caso de borrar una tabla se borrarn todas las restricciones referentes a esa tabla.

29. Crear y asociar reglas (create rule sp_bindrule) Anteriormente se vio que SQL ofrece varios tipos de restricciones para asegurar la integridad de los datos, sin embargo, adems de las restricciones, existen reglas, las cuales especifican los valores que se pueden ingresar en un campo, asegurando que los datos se encuentren en un intervalo de valores especficos, los cuales coincidan con una lista de valores o sigan un patrn.

Una regla se asocia a un campo de una tabla, un campo solo puede tener una regla asociada a l.

Sintaxis: Create rule nombre_regla As @variable condicin

Por convencin, el nombre de la regla se nombre comenzando por RG, el nombre del campo al cual se asocia y una palabra clave que hace referencia a la condicin. La condicin se refiere a los valores permitidos para inserciones y actualizaciones y puede contener cualquier expresin vlida para una clusula where, pero no puede hacer referencia a los campos de una tabla.

Ejemplo: Create rule RG_edad_intervalo As @edad between 18 and 80 Julio Cesar Avellaneda Sua
Analista y Desarrollador Microsoft Certified Professional DCE 5 Estrellas Platino http://julitogtu.wordpress.com

32

Manual SQL

V 1.0

Luego de crear la regla, se debe asociar al campo y tabla ejecutando el siguiente procedimiento almacenado:

Sintaxis: Exec sp_bindrule nombre_regla, tabla.campo

Ejemplo: Exec sp_bindrule RG_edad_intervalo, empleados.edad

A diferencia de las restricciones, las reglas actan sobre inserciones o actualizaciones, pero no en los registros ya almacenados. Las reglas no se pueden aplicar en campos de tipo text, image o timestamp.

29. Restriccin check y reglas La funcin que cumple una regla es muy similar a la de una restriccin check, las siguientes caractersticas explican sus diferencias:

Una restriccin check se asocia a una tabla, si se elimina la tabla la restriccin se elimina, en el caso de una regla, esta deja de hacer referencia a la tabla pero la regla sigue existiendo en la base de datos.

Una restriccin check puede hacer referencias a otros campos de la tabla, una regla no.

29. Eliminar y desasociar reglas (sp_unbindrole y drop rule) Para eliminar una regla primero se debe deshacer la asociacin y luego si borrar la regla, para desasociar una regla se debe ejecutar el siguiente procedimiento almacenado:

Sintaxis: Exec sp_unbindrule nombre_regla, tabla.campo

Ejemplo: Exec sp_unbindrule RG_edad_intervalo, empleados.edad

Julio Cesar Avellaneda Sua


Analista y Desarrollador Microsoft Certified Professional DCE 5 Estrellas Platino http://julitogtu.wordpress.com

33

Manual SQL

V 1.0

Luego de desasociar la regla, se elimina la regla:

Sintaxis: Drop rule nombre_regla

Ejemplo: Drop rule RG_edad_intervalo

29. Informacin de reglas Para ver las reglas y los constraint asociados a unan tabla se usa el procedimiento almacenado sp_helpconstraint nombre_tabla.

Si se desea ver los campos, constraint y reglas de una tabla se usa el procedimiento almacenado sp_help nombre_tabla.

Si se desea ver la regla que ha sido creada, se usa el procedimiento almacenado sp_helptext nombre_regla.

Si se desea ver todas las reglas, se puede ejecutar la siguiente consulta:

select *from sysobjects where xtype='R' and name like 'RG%' -- tipo regla --bsqueda con comodn

29. Valores predeterminados (default) Para mantener la integridad de los datos, es posible crear valores predeterminados para uno a ms campos, esto quiere decir que si no se ingresa un valor para ese campo, este tomar el valor que ha sido predeterminado.

Sintaxis: Create default nombre_valorpredeterminado As valor_predeterminado

Ejemplo: Create default VP_notiene Julio Cesar Avellaneda Sua


Analista y Desarrollador Microsoft Certified Professional DCE 5 Estrellas Platino http://julitogtu.wordpress.com

34

Manual SQL

V 1.0

As notiene

Luego de crear el valor predeterminado, este se debe asociar a un campo de una tabla, lo cual se hace ejecutando el siguiente procedimiento almacenado.

Sintaxis: Exec sp_bindefault nombre, tabla.campo

Ejemplo: Exec sp_bindefault VP_notiene, cliente.telefono

La funcin de un valor predeterminado es bsicamente la misma que un valor predeterminado, sus diferencias y semejanzas son las siguientes:

Una restriccin default se almacena en una tabla, cuando se elimina dicha tabla la restriccin tambin es eliminada, en cambio el valor predeterminado solo deja de pertenecer a esa tabla pero sigue existiendo en la base de datos.

Tanto una restriccin default como un valor predeterminado, no se pueden asociar a un campo identity.

Un campo solo puede tener un valor predeterminado o una restriccin default.

29. Desasociar y eliminar valores predeterminados Al igual que para eliminar una regla, cuando se quiere eliminar un valor

predeterminado, primero se debe desasociar y luego si realizar la eliminacin. Para desasociar un valor predeterminado, se debe ejecutar el siguiente procedimiento almacenado:

Sintaxis: sp_unbindefault tabla.campo

Ejemplo: sp_unbindefault cliente.telefono

Julio Cesar Avellaneda Sua


Analista y Desarrollador Microsoft Certified Professional DCE 5 Estrellas Platino http://julitogtu.wordpress.com

35

Manual SQL

V 1.0

Luego de desasociar el valor predeterminado, este se puede eliminar

Sintaxis: Drop default nombre_valorpredeterminado

Ejemplo: Drop default VP_notiene

29. Informacin de valores predeterminados Para ver los valores predeterminados asociados a una tabla se usa el procedimiento almacenado sp_help nombre_valorpredeterminado.

Si se desea ver la regla que ha sido creada, se usa el procedimiento almacenado sp_helptext nombre_regla.

Si se desea ver todos los valores predeterminados, se puede ejecutar la siguiente consulta:

select *from sysobjects where xtype='D' and name like 'VP%'

29. ndices SQL accede a los datos de dos maneras distintas, la primera es recorriendo las tablas, comenzando por el principio y extrayendo los registros que cumplan las condiciones de la consulta; y la segunda forma es empleando ndices, recorriendo la estructura de rbol del ndice para localizar registros y extraer los que cumplas las condiciones de consulta.

Los ndices facilitan la obtencin de informacin de una tabla, ya que su funcin es similar a la del ndice de un libro, el cual permite encontrar datos rpidamente.

Sin el uso de un ndice, al realizar una consulta, SQL recorre secuencialmente toda la tabla para encontrar un registro.

Julio Cesar Avellaneda Sua


Analista y Desarrollador Microsoft Certified Professional DCE 5 Estrellas Platino http://julitogtu.wordpress.com

36

Manual SQL

V 1.0

Es recomendable, crear ndices sobre campos que contienen valores nicos (claves primarias) y/o por aquellos campos por los cuales se hacen bsquedas con frecuencia.

29. Clases de ndices Para SQL existen dos clase de ndices:

Indices agrupados (clustered): es similar a una gua telefnica, los registros con el mismo valor de campo se agrupan juntos, este determina la secuencia de

almacenamiento de los registros de una tabla. Se utilizan para campos por los que se realizan constantes bsquedas o bien se accede a ellos siguiendo un orden. Una tabla solo puede tener un ndice.

Indices no agrupados (nonclustered): es similar al ndice de un libro,

los datos se

almacenan en un lugar diferente el del ndice, los punteros indican el lugar de almacenamiento de los elementos indizados en la tabla. Un ndice no agrupado se usa cuando se realizan distintos tipos de bsquedas con campos en los que los datos son nicos.

Si al crear el ndice, no se le define un tipo, por defecto ser no agrupado, los campos de tipo text, image y ntext no se pueden indezar.

29. Creacin de ndices La sintaxis bsica para crear un ndice es la siguiente:

Sintaxis: Create tipo_ndice index nombre_ndice On tabla (campo)

El tipo ndice hace referencia a si ser agrupado o no, sino es especificado ser no agrupado. Independiente de su tipo, se puede especificar que sea unique, es decir, que no haya valores repetidos, el atributo unique debe ir antes de declarar el tipo de ndice.

Por

convencin,

para

el

nombre

del

ndice

se

usa

el

siguiente

formato:

I_tabla_campo. Julio Cesar Avellaneda Sua


Analista y Desarrollador Microsoft Certified Professional DCE 5 Estrellas Platino http://julitogtu.wordpress.com

37

Manual SQL

V 1.0

Ejemplo: Create unique nonclustered I_empleados_codigo On empleados (id_empleado)

Es posible crear ndices con ms de un campo como clave, es decir, ndices compuestos. Los campos de un ndice compuesto deben ser de la misma tabla (excepto cuando se crea en una vista ms adelante).

Ejemplo: Create nonclustered I_empleados_codigo On empleados (id_empleado,nombre)

SQL crea automticamente ndices cuando se establece una restriccin primary key o unique. Si la restriccin creada es primary key, el ndice ser de tipo agrupado (clustered); en cambio, si es una restriccin unique ser no agreupado

(nonclustered).

Al crear una restriccin es posible determinar de que tipo ser simplemente especificando su tipo luego de declara la restriccin.

Sintaxis: Alter table nombre_tabla Add constraint nombre_constraint Primary key clustered/nonclustered (campo)

Para

ver

los

ndices

de

una

tabla,

se

ejecuta

el

procedimiento

almacenado

sp_helpindex nombre_tabla. Si se desea ver todos los ndices de la base de datos, se realiza la siguiente consulta:

Select name from sysindexes Where name like 'I_%'

29. Eliminar ndices La sintaxis bsica para eliminar un ndice es la siguiente:

Julio Cesar Avellaneda Sua


Analista y Desarrollador Microsoft Certified Professional DCE 5 Estrellas Platino http://julitogtu.wordpress.com

38

Manual SQL

V 1.0

Sintaxis: Drop index tabla.nombre_ndice

Ejemplo: Drop index empleado.I_empleados_codigo

21. Combinacin interna (inner join) Qu es un join? Un join es una operacin que relaciona dos o ms tablas para obtener un resultado que incluya datos (campos y registros) de ambas, las tablas se combina segn los campos comunes.

Combinacin interna (inner join o join): La combinacin interna (join) se emplea para obtener la informacin de dos tablas y combinar la informacin en una salida.

Sintaxis: Select campos From tabla1 Join On tabla2 condicin de combinacin

Ejemplo: Select * From empleados e Join On departamentos d e.id_departamento = d.id_departamento

On: La funcin on hace coincidir registros de ambas tablas, est se basa en las claves primarias y forneas de cada tabla. Join: En la consulta join se pueden restringir los registros que retorna el resultado usando las funciones where,order by,etc.

Julio Cesar Avellaneda Sua


Analista y Desarrollador Microsoft Certified Professional DCE 5 Estrellas Platino http://julitogtu.wordpress.com

39

Manual SQL

V 1.0

22. Combinacin externa izquierda (left join) Las combinaciones externas combinan los registros de dos tablas que cumplen una condicin, ms los registros de la segunda tabla que no la cumplen, es decir, muestran todos los registros de las tablas relacionadas, an cuando no haya valores coincidentes entre ellas.

Se emplea una combinacin externa izquierda para mostrar todos los registros de la tabla izquierda; si no encuentra coincidencia con la tabla de la derecha, el registro muestra los campos de la segunda tabla como null.

Sintaxis: Select From Left Join On campos tabla_izquierda tabla_derecha condicin de combinacin

Ejemplo: Select From Left Join On e.nombre,d.nombre empleados e departamentos d e.id_departamento = d.id_departamento

Podemos agregar condiciones a la bsqueda con la funcin where despus de la funcin on.

Sintaxis: Select From Left Join On Where campos tabla_izquierda tabla_derecha condicin de combinacin condicin

Ejemplo: Select From Julio Cesar Avellaneda Sua


Analista y Desarrollador Microsoft Certified Professional DCE 5 Estrellas Platino http://julitogtu.wordpress.com

e.nombre,d.nombre empleados e

40

Manual SQL

V 1.0

Left Join On Where

departamentos d e.id_departamento = d.id_departamento d.id_departamento is not null

Es muy importante la forma en la que colocamos las tablas en la consulta, ya que la tabla de la izquierda es la que se usa para localizar registros en la tabla derecha.

23. Combinacin externa derecha (right join) La combinacin externa derecha right join opera de forma similar a la externa izquierda, a diferencia que con esta la tabla de la derecha es la que localiza los registros en la tabla izquierda.

Sintaxis: Select From Right Join On Ejemplo: Select From Right Join On e.nombre,d.nombre empleados e departamentos d e.id_departamento = d.id_departamento campos tabla_izquierda tabla_derecha condicin de combinacin

Al igual que en una consulta left join, en la right join tambin es posible agregar ms condiciones en la consulta usando la clusula where con la misma sintaxis que en la anterior.

Para ver la diferencia entre ambas funciones, a continuacin se muestran dos consultas (una con left join y la otra con right join), las cuales generan el mismo resultado.

Ejemplo: Select From Right Join Julio Cesar Avellaneda Sua


Analista y Desarrollador Microsoft Certified Professional DCE 5 Estrellas Platino http://julitogtu.wordpress.com

e.nombre,d.nombre empleados e departamentos d

41

Manual SQL

V 1.0

On Ejemplo: Select From Left Join On

e.id_departamento = d.id_departamento

e.nombre,d.nombre departamentos d empleados e e.id_departamento = d.id_departamento

Ntese que para obtener el mismo resultado, simplemente se hace necesario cambiar el orden de las tablas.

24. Combinacin externa completa (full join) Una combinacin externa completa full join retorna todos los registros de las dos tablas de la consulta. Si un registro de la tabla izquierda no encuentra coincidencia con alguno de la derecha aparece como null, y si un registro de la tabla derecha no encuentra coincidencia con alguno de la izquierda aparece como null.

Sintaxis: Select From Full Join On Ejemplo: Select From Right Join On e.nombre,d.nombre empleados e departamentos d e.id_departamento = d.id_departamento campos tabla_1 tabla_2 condicin de combinacin

Para resumir el funcionamiento de una consulta externa completa full join, esta funcin une las caractersticas de un left join y un rigth join, mostrando un solo resultado.

24. Combinaciones cruzadas (cross join) Una combinacin cruzada cross join, muestra todas las combinaciones de todos los registros de las tablas combinadas. Para este tipo de join generalmente no se incluye una condicin de enlace. Este tipo de consulta genera el producto cartesiano en el que Julio Cesar Avellaneda Sua
Analista y Desarrollador Microsoft Certified Professional DCE 5 Estrellas Platino http://julitogtu.wordpress.com

42

Manual SQL

V 1.0

el nmero de filas del resultado es igual al nmero de registros de la primera tabla multiplicado por el nmero de registros de la segundo tabla, es decir, si la tabla 1 tiene 8 registros y la tabla 2 tiene 10 registros, el resultado ser de 80 filas.

Sintaxis: Select From Cross Join campos tabla_1 tabla_2

Ejemplo: Select From Cross Join e.nombre,d.nombre empleados e departamentos d

24. Foreign Key Cuando en una tabla, existe un campo que no es clave primaria, este sirve para enlazar sus valores con otra tabla en la cual si es clave primaria.

Para enlazar dos campos, es necesario que juntos sean del mismo tipo, es decir los dos campos deben ser iguales.

24. Restriccin foreign Key Para mantener la integridad de los datos, vimos que SQL ofrece varios tipos de restricciones, adems de las vistas anteriormente, existe un tipo de restriccin referencial llamado foreign key.

Con la restriccin foreign key se define un campo cuyo valor coincide con la clave primaria de otra tabla, es decir, define una referencia a un campo con una restriccin primary key o unique.

Sintaxis: Alter table tabla1 Add constraint nombre_restriccin Foreign key (campo) References tabla2 (campo_primario)

Julio Cesar Avellaneda Sua


Analista y Desarrollador Microsoft Certified Professional DCE 5 Estrellas Platino http://julitogtu.wordpress.com

43

Manual SQL

V 1.0

Ejemplo: Alter table empleados Add constraint FK_empleados_codigodepartamento Foreign key (departamento) References departamentos (codigo)

En el ejemplo anterior, se implemento una restriccin foreign key para asegurarse que todo empleado pertenece a un departamento.

Es posible definir una restriccin foreign key dentro de la misma tabla.

24. Acciones restriccin foreign Key Si se tiene un campo que es clave primaria de la tabla, y al mismo tiempo es referenciado por otra tabla, no es posible eliminarlo ni cambiar su valor. Sin embargo, existen complementos para una restriccin foreign key que permiten cambiar el valor de la clave primaria y cambiar el valor de todos los campos referenciados.

Se especifica on update cascade para que cuando se cambie el valor de la clave primaria se modifiquen todos los registros coincidentes.

Se especifica on delete cascade para que cuando se elimine el valor de la clave primaria se eliminen todos los registros coincidentes.

Sintaxis: Alter table tabla1 Add constraint nombre_restriccin Foreign key (campo) References tabla2 (campo_primario) On update cascade On delete cascade

Ejemplo: Alter table empleados Add constraint FK_empleados_codigodepartamento Julio Cesar Avellaneda Sua
Analista y Desarrollador Microsoft Certified Professional DCE 5 Estrellas Platino http://julitogtu.wordpress.com

44

Manual SQL

V 1.0

Foreign key (departamento) References departamentos (codigo) On update cascade On delete cascade

24. Deshabilitar y eliminar restriccin foreign Key Para deshabilitar una restriccin foreign key, se realiza de la siguiente manera:

Sintaxis: Alter table tabla Nocheck constraint nombre_restriccin

Ejemplo: Alter table empleados Nocheck constraint FK_empleados_codigodepartamento

Para eliminar una restriccin foreign key, se realiza de la siguiente manera:

Sintaxis: Alter table tabla drop constraint nombre_restriccin

Ejemplo: Alter table empleados drop constraint FK_empleados_codigodepartamento

24. Restricciones al crear una tabla Anteriormente se vio como crear restricciones a una tabla existente, sin embargo, es posible declararlas en el momento de crear la tabla.

Sintaxis bsica: Create table nombre_tabla ( Campo_1 tipo_de_dato, Campo_2 tipo_de_dato, Campo_n tipo_de_dato, Julio Cesar Avellaneda Sua
Analista y Desarrollador Microsoft Certified Professional DCE 5 Estrellas Platino http://julitogtu.wordpress.com

45

Manual SQL

V 1.0

Restriccin_1, Restriccin_n, )

Ejemplo: Create table empleados ( Codigo int not null identity (1,1), Nombre_empleado varchar (20), Edad_empleado int, Constraint PK_empleados_codigo Primary key (codigo), Constraint CK_empleados_edad Check (edad between 18 and 100), )

24. Operador unin El operador unin combina el resultado de dos o ms instrucciones select en un nico resultado. Este operador se utiliza cuando los datos que se quieren obtener pertenecen a distintas tablas y no se pueden acceder a ellas mediante a ellos con una sola consulta.

Es necesario que las tablas referenciadas tengan tipos de datos similares, la misma cantidad de campos y el mismo orden en la lista de seleccin de cada consulta.

Sintaxis: Select campo1,campo2,campon From tabla1 union Select campo1,campo2,campon From tabla2

Ejemplo: Select nombre,apellido,telefono From empleados Select nombre,apellido,telefono Julio Cesar Avellaneda Sua
Analista y Desarrollador Microsoft Certified Professional DCE 5 Estrellas Platino http://julitogtu.wordpress.com

46

Manual SQL

V 1.0

From clientes

La consulta anterior muestra una sola tabla con el nombre, apellido y telfono de todos los empleados y clientes de la base de datos en una sola consulta.

24. Agregar y eliminar campos Cuando se tiene una tabla existente, muchas veces es necesario agregarle o eliminarle uno o ms campos, por lo cual alter table permita modificar la estructura de dicha tabla.

Para agregar un campo a una tabla existente se usa la siguiente sintaxis:

Sintaxis: Alter table nombre_tabla Add nombre_campo definicin

Ejemplo: Alter table empleados Add sueldo smallmoney

Para eliminar un campo a una tabla existente se usa la siguiente sintaxis:

Sintaxis: Alter table nombre_tabla drop column nombre_campo

Ejemplo: Alter table empleados Drop column sueldo

24. Modificar campos As como es posible modificar la estructura de una tabla, tambin es posible modificar un campo de una tabla. La sintaxis bsica es la siguiente:

Sintaxis: Julio Cesar Avellaneda Sua


Analista y Desarrollador Microsoft Certified Professional DCE 5 Estrellas Platino http://julitogtu.wordpress.com

47

Manual SQL

V 1.0

Alter table nombre_tabla Alter column campo nueva_definicin

Ejemplo: Alter table empleados Alter column sueldo money not null

SQL no permita modificar campos de tipo text, image y ntext, un campo que sea calculado, y tampoco que al modificar dicho campo algn registro no cumpla con la nueva definicin.

24. Agregar campos y restricciones SQL permite modificar la estructura de una tabla agregando o eliminando campos, y mantener la integridad de los campos creando restricciones, estas dos cosas son posibles realizarlas al mismo tiempo cuando se agrega un nuevo campo a una tabla. La sintaxis bsica es la siguiente:

Sintaxis: Alter table nombre_tabla add nombre_campo definicin constraint nombre_restriccin tipo

Ejemplo: Alter table empleados add sueldo money constraint CK_empleados_money check (money>100)

24. Campos calculados Un campo calculado es un campo que no se almacena fsicamente en la tabla. Un campo calculado no puede definirse como not null, tener restriccin default o foreign key, insertarse o actualizarse. No es posible eliminar los campos de los cuales depende un campo calculado, para tal efecto se debe eliminar primero el campo calculado.

Julio Cesar Avellaneda Sua


Analista y Desarrollador Microsoft Certified Professional DCE 5 Estrellas Platino http://julitogtu.wordpress.com

48

Manual SQL

V 1.0

En el siguiente ejemplo, se crear un campo calculado denominado totalsueldo el cual suma el sueldo bsico + horas extras* precio extra.

Ejemplo: create table empleados ( nombre varchar(20), sueldobasico money, precioextra smallmoney, horasextras tinyint, sueldototal as sueldobasico + (horasextras*precioextra), )

Tambin es posible agregar un campo calculado a una tabla ya existente:

Sintaxis: Alter table nombre_tabla Add nombre_campo as expresin

Ejemplo: Alter table empleados add sueldototal as sueldobasico + (horasextras*precioextra)

24. Subconsultas Una subconsulta es una sentencia select anidada o incluida dentro de otra sentencia select, insert, update o delete. Una subconsulta se emplea cuando una nica consulta es muy compleja, entonces se divide en varios pasos lgicos y se obtiene el resultado con una nica expresin. Una subconsulta se debe incluir entre parntesis Una subconsulta puede contener otra subconsulta, tericamente pueden existir 32 niveles de anidacin.

25. Subconsultas como expresin Una subconsulta puede reemplazar una expresin, si es as, dicha subconsulta devolver un valor escalar (o una lista de valores de un campo). debe

Julio Cesar Avellaneda Sua


Analista y Desarrollador Microsoft Certified Professional DCE 5 Estrellas Platino http://julitogtu.wordpress.com

49

Manual SQL

V 1.0

La sintaxis es la siguiente: Select campos From tabla Where campo operador (subconsulta)

Select campos operador (subconsulta) From tabla Ejemplo: Select titulo, autor, precio From libros Where precio = (select max(precio) from libros)

Select titulo, precio Precio (select max(precio) from libros) as diferencia From libros Where titulo = poemas

26. Subconsultas con in Una subconsulta con in o not in devuelve como resultado una lista. Luego que la subconsulta retorna los resultados, la consulta exterior los usa. La sintaxis es la siguiente: Select campos From tabla Where campo expresin in (subconsulta)

Ejemplo: Select nombre From editoriales Where codigo in (select cod_editorial from libros where autor = Garca Marquez)

Julio Cesar Avellaneda Sua


Analista y Desarrollador Microsoft Certified Professional DCE 5 Estrellas Platino http://julitogtu.wordpress.com

50

Manual SQL

V 1.0

26. Subconsultas con any some - all Any y some son sinnimos y chequean si alguna fila de la lista resultado de una subconsulta se encuentra el valor especificado de la condicin. La sintaxis es la siguiente: Select campos From tabla Where campo expresin in (subconsulta)

Ejemplo: Select nombre From editoriales Where codigo in (select cod_editorial from libros where autor = Garca Marquez)

Select titulo, precio Precio (select max(precio) from libros) as diferencia From libros Where titulo = poemas

26. Subconsultas correlacionadas Un almacn almacena la informacin de sus ventas en una tabla llamada "facturas" en la cual guarda el nmero de factura, la fecha y el nombre del cliente y una tabla denominada "detalles" en la cual se almacenan los distintos items correspondientes a cada factura: el nombre del artculo, el precio (unitario) y la cantidad. Se necesita una lista de todas las facturas que incluya el nmero, la fecha, el cliente, la cantidad de artculos comprados y el total: select f.*, (select count(d.numeroitem) from Detalles as d where f.numero=d.numerofactura) as cantidad, (select sum(d.preciounitario*cantidad) from Detalles as d Julio Cesar Avellaneda Sua
Analista y Desarrollador Microsoft Certified Professional DCE 5 Estrellas Platino http://julitogtu.wordpress.com

51

Manual SQL

V 1.0

where f.numero=d.numerofactura) as total from facturas as f;

El segundo "select" retorna una lista de valores de una sola columna con la cantidad de items por factura (el nmero de factura lo toma del "select" exterior); el tercer "select" retorna una lista de valores de una sola columna con el total por factura (el nmero de factura lo toma del "select" exterior); el primer "select" (externo) devuelve todos los datos de cada factura.

A este tipo de subconsulta se la denomina consulta correlacionada. La consulta interna se evala tantas veces como registros tiene la consulta externa, se realiza la subconsulta para cada registro de la consulta externa. El campo de la tabla dentro de la subconsulta (f.numero) se compara con el campo de la tabla externa.

En este caso, especficamente, la consulta externa pasa un valor de "numero" a la consulta interna. La consulta interna toma ese valor y determina si existe en "detalles", si existe, la consulta interna devuelve la suma. El proceso se repite para el registro de la consulta externa, la consulta externa pasa otro "numero" a la consulta interna y SQL Server repite la evaluacin.

26. Exists y no exists Los operadores exists y no exists se emplean para determinar si hay o no datos en una lista de valores Estos operadores se pueden emplear con Subconsultas correlacionadas para restringir el resultado de una consulta exterior a los registros que cumplen la subconsulta. Estos operadores retornan true si las consultas retornan registros o false en caso contrario. Cuando se coloca en una subconsulta el operador exists SQL analiza si hay datos que coinciden con la subconsulta. La sintaxis bsica es la siguiente, se hace la consulta principal y en el where incluimos la subconsulta precedida por el operador exists o no exists Where campo expresin in (subconsulta)

Ejemplo: Select nombre From facture f Julio Cesar Avellaneda Sua


Analista y Desarrollador Microsoft Certified Professional DCE 5 Estrellas Platino http://julitogtu.wordpress.com

52

Manual SQL

V 1.0

Where exists (select * from factura_detalles fd where f.id = fd.id and producto like leche)

27. Subconsultas en update y delete As cmo es posible ejecutar una consulta dentro de otra consulta, tambin se puede realizar una subconsulta dentro de una clausula update, delete o insert. La sintaxis general para una actualizacin (update) es la siguiente:

Update tabla set campo = nuevo valor where campo = subconsulta

Ejemplo: Update productos set precio = precio+100 where productos = (select cdigo From proveedores Where cdigo = 1)

La sintaxis general para una eliminacin (delete) es la siguiente:

Delete from tabla where campo in subconsulta

Ejemplo: Delete from productos where codigo in (select cdigo From proveedores Where cdigo = 1)

28. Subconsultas insert La sintaxis general para una insercin es la siguiente (insert) es la siguiente:

Julio Cesar Avellaneda Sua


Analista y Desarrollador Microsoft Certified Professional DCE 5 Estrellas Platino http://julitogtu.wordpress.com

53

Manual SQL

V 1.0

Insert into tablaqueseingresa (campos) Select (campostablaconsultada) From tablaconsultada

Ejemplo: Insert into inventario (nombre, cantidad) Select (nombre, cantidad) From productos

29. Crear una tabla a partir de otra Es posible crear una tabla e insertar datos en ella en una sola sentencia consultando otra tabla (o varias), la sintaxis bsica es la siguiente:

Select camposnuevatabla Into nuevatabla From tabla Where condicin

Ejemplo: Select nombre Into inventario From productos Cuando se crea una nueva tabla, los campos de la nueva tabla tienen el mismo nombre, tipo de dato y valores almacenados que los campos listados de la tabla consultada, si se desea especificar otro nombre se debe usar alias mediante la palabra as y luego el nombre de la columna.

29. Comando Go Go es un signo de finalizacin de sentencias, no es una sentencia, es un comando. El lote de sentencias est compuesto por todas las sentencias antes del go o bien todas las sentencias entre dos go. Las sentencias no pueden estar en la misma lnea en la que est el go.

29. Vistas Julio Cesar Avellaneda Sua


Analista y Desarrollador Microsoft Certified Professional DCE 5 Estrellas Platino http://julitogtu.wordpress.com

54

Manual SQL

V 1.0

Una vista es una alternativa para mostrar datos de varias tablas. Una vista es como una tabla virtual que almacena una consulta, los datos accesibles a travs de la vista no estn almacenados en la base de datos como un objeto.

Una vista almacena una consulta como un objeto para utilizarse posteriormente. Las tablas consultadas en una vista se llaman tablas base y se puede dar cualquier nombre a una consulta y almacenarla como una vista.

Las caractersticas de las vistas son las siguientes: Ocultar informacin: una vista permite el acceso a algunos datos y manteniendo oculta el resto de la informacin que no se incluye en la vista. El usuario opera con los datos de una vista como si se tratara de una tabla, pudiendo modificar dichos datos. Simplificar la administracin de los permisos de usuario: se pueden dar al usuario permisos para que solamente pueda acceder a los datos a travs de vistas, en lugar de concederle permisos para acceder a ciertos campos, as se protegen las tablas base de cambios en su estructura. Mejorar el rendimiento: se puede evitar escribir instrucciones repetidamente almacenando en una vista el resultado de una consulta compleja que incluya informacin de varias tablas. Se pueden crear vistas a partir de otras vistas.

La sintaxis bsica parcial para crear una vista es la siguiente:

Create view nombrevista as Select campos From tabla

Existen algunas restricciones para el uso de las vistas: No se pueden incluir las clasulas compute ni compute in, ni la palabra clave into No se pueden crear vistas temporales ni crear vistas de tablas temporales No se pueden asociar reglas ni valores por defecto a las vistas

30.Vistas informacin Las vistas son objetos, as para obtener informacin de ellas se pueden usar los procedimientos almacenados del sistema:

Julio Cesar Avellaneda Sua


Analista y Desarrollador Microsoft Certified Professional DCE 5 Estrellas Platino http://julitogtu.wordpress.com

55

Manual SQL

V 1.0

Sp_help: si no se le agrega nungn parmetro muestra todos los objetos de la base de datos seleccionada, incluidas las vistas. En la columna object_type aparece view si es una vista. Si como parmetro se le enva el nombre de la vista, obtenemos la fecha de creacin, propietario, los campos y dems informacin. Sp_helptext nombrevista: muestra el texto que la define, excepto si la vista ha sido encriptada. Es decir, muestra la consulta con la cual se cre la vista. Sp_depends: seguido del nombre del objeto se obtiene 2 resultados: Nombre, tipo, campos, etc de los objetos de los cuales depende el objeto mostrado Nombre y tipo de los objetos que dependen del objeto mostrado

31. Vistas encriptar Se puede ver el texto que define una vista ejecutando el procedimiento almacenado sp_helptext nombrevista, sin embargo, es posible ocultar el texto que define una vista empleando la siguiente sintaxis al crearla:

Create view nombrevista With encryption as Select campos From tabla

La segunda lnea with encryption indica al SQL server que codifique las sentencias que definen la vista.

31. Vistas eliminar Para eliminar una vista se emplea drop view y luego el nombre de la vista. Si se elimina una tabla a la que hace referencia una vista, la vista no se elimina.

32. Vistas (modificar datos de una tabla) Si se modifican los datos de una vista, se modifica la tabla base. Se puede insertar, actualizar o eliminar datos de una tabla a travs de una vista, teniendo en cuenta los siguiente, las modificaciones que se realizan a las vistas:

Julio Cesar Avellaneda Sua


Analista y Desarrollador Microsoft Certified Professional DCE 5 Estrellas Platino http://julitogtu.wordpress.com

56

Manual SQL

V 1.0

No puede afectar a ms de una tabla consultada. Pueden modificarse datos de una vista que combina varias tablas pero la modificacin solamente debe afectar a una sola tabla. Para eliminar datos de una vista solamente una tabla puede ser listada en el from.

32. Vistas modificar Para modificar una vista se utiliza la sentencia alter view, con la cual se modifica la definicin de la vista sin afectar los procedimientos almacenados y los permisos. La sintaxis es la siguiente:

alter view nombrevista With encryption --opcional as Select campos From table

Si cuando se cre la vista, utilizo la sentencia with encryption y desea que la vista siga estando encriptada debe agregar dicha lnea cuando va a modificar la vista, de lo contrario ser deshabilitada dicha opcin.

32. Case (control de flujo) La funcin case compara dos o ms valores y devuelve un resultado La sintaxis es la siguiente:

Case valoracomparar When valor1 then resultado 1 When valor2 then resultado2 Else resultado3 End

Por cada valor hay un when y un then, si encuntra un valor coincidente en algn where ejecuta el then correspondiente, si no encuentra ningn valor ejecuta el else.

Ejemplo: Select nombre, apellido, resultado = Julio Cesar Avellaneda Sua


Analista y Desarrollador Microsoft Certified Professional DCE 5 Estrellas Platino http://julitogtu.wordpress.com

57

Manual SQL

V 1.0

Case nota When 0 then perdio When 1 then aprob End From alumnos

En la sentencia when es posible usar operadores de comparacin como mayor, menor, igual, entre otros.

32. If (control de flujo) Existen palabras especiales que pertenecen al lenguaje de control de flujo que controlan la ejecucin de las sentencias, los bloques de sentencias y procedimientos

almacenados. Tales palabras son: beginend, goto, if else, return, waitfor, while, break y continue. Begin end: encierran un bloque de sentencias para que sean tratados como unidad. If else: testena una condicin, se emplea cuando un bloque de sentencias debe ser ejecutado si una condicin se cumple y si no se cumple, se debe ejecutar otro bloque de sentencias diferente. While: ejecuta repetidamente una instruccin siempre que la condicin sea verdadera. Break y continue: controlan la operacin de las instrucciones incluidas en bucle while.

Ejemplo: If exists (select * From clientes Where nombre like julio) (select * From clientes Where nombre like julio) else select 'no existe'

SQL server ejecuta la sentencia ( en este caso una subconsulta) luego del if si la condicin es verdadera; si es falsa, ejecuta la sentencia del else.

Julio Cesar Avellaneda Sua


Analista y Desarrollador Microsoft Certified Professional DCE 5 Estrellas Platino http://julitogtu.wordpress.com

58

Manual SQL

V 1.0

33. Variables de usuario Las variables permiten almacenar una valor y recuperarlo ms adelante para emplearlas en otras sentencias. Las variables de usuario son especficas de cada conexin y son liberadas

automticamente al abandonar la conexin. Las variables de usuario comienzan con @ (arroba) seguido del nombre (sin espacios), dicho nombre puede contener cualquier carcter. Una variable debe ser declarada antes de usarse. Una variable local se declara de la siguiente manera:

Declare @nombrevariable tipo

Ejemplo: Declare @nombre varchar(20)

Es posible declarar ms de una variable en una sola lnea separndolas por una coma. En SQL server no existen variables globales. Una variable declarada existe dentro del entorno en que se declara; se debe declarar y emplear la variable en el mismo lote de sentencias. Cuando a una variable no se le asigna ningn valor por defecto la varibale va a contener null, para asignar un valor a una variable se emplea la palabra clave set de la siguiente manera: Set @nombrevariable = valor

Ejemplo: set @edad = 45

Es posible asignar el resultado de una consulta a una variable de la siguiente manera: Select @nombrevariable = valor From tabla Where condicin

Ejemplo: Select @nombre = nombre From productos Where cdigo = 1 Julio Cesar Avellaneda Sua
Analista y Desarrollador Microsoft Certified Professional DCE 5 Estrellas Platino http://julitogtu.wordpress.com

59

Manual SQL

V 1.0

Para ver el contenido de una variable solo es necesario realizar un select sobre dicha variable de la siguiente manera: Select @nombrevariable

Una variable tambin puede tener comodines, por ejemplo: Ejemplo: Declare @patron varchar(30) Set @patron = B% Select nombre From libros Where nombre like @patron

La principal utilidad de las variables consiste en que almacenan valores para ser utilizados en otras consultas. Un ejemplo claro es el siguiente:

declare @mayorprecio select @mayorprecio= max(precio_venta) from productos

select * from productos where precio_venta =@mayorprecio

33. Tipo de dato text, ntext e image Los tipos de datos text, ntext e image representan tipos de datos de longitud variable y fija en los que se pueden almacenar gran cantidad de informacin. Ntext almacena datos Unicode de longitud variable y el mximo es alrededor de 1000000000 caracteres, en bytes es del doble (2G) text almacena datos binarios no Unicode de longitud variable, el mximo es de 2000000000, sin embargo no se puede emplear en procedimientos almacenados.

Julio Cesar Avellaneda Sua


Analista y Desarrollador Microsoft Certified Professional DCE 5 Estrellas Platino http://julitogtu.wordpress.com

60

Manual SQL

V 1.0

Image es un tipo de dato de longitud variable que puede almacenar de 2000000000 aproximadamente y es usado para almacenar gran cantidad

0 a de

informacin o imgenes. Consideraciones importantes: No se pueden definir variables de estos tipos de datos Los campos de estos tipos no se pueden definir como ndices La nica restriccin que se puede aplicar es un default No se pueden asociar reglas No se pueden alterar campos de estos tipos con alter table 33. Procedimientos almacenados Sql server ofrece dos maneras para asegurar la integridad de los datos: Declarativa: mediante el uso de restricciones, valores prdeterminados y reglas Procedimental; mediante la implementacin de procedimientos almacenados y desencadenadores (triggers). Procedimientos almacenados: un procedimiento almacenado es un conjunto de instrucciones a las que se les da un nombre, que se almacena en el servidor el cual permite encapsular tareas repetitivas. Sql server permite los siguientes tipos de procedimientos almacenados: Sistema: son todos aquellos procedimientos que estan almacenados en la base de datos master y llevan el prefijo sp_;permiten recuperar informacin de las tablas del sistema y pueden ejecutarse en cualquier base de datos. Locales: Son todos aquellos procedimientos que crea el usuario Temporales: pueden ser locales, cuyos nombres comienzan con un signo numeral (#), o globales, cuyos nombres comienzan por dos signos numeral (##). Los procedimientos almacenados temporales locales estn disponibles en la sesin de un solo usuario y se eliminan al finalizar la sesin, los globales estn disponibles en las sesiones de todos los usuarios. Extendidos: se implementan como blibiotecas de vnculos dinmicos (dll, dinamik link librarys), se ejecutan fuera del entorno de SQL server. Generalmente llevan el prefijo xp_. Al crear un procedimiento almacenado, las instrucciones que contiene se analizan para verificar si son correctas sintcticamente. Si no se detectan errores, SQL guarda el nombre del procedimiento almacenado en la tabla del sitema sysobjects y su contenido en la tabla del sistema syscomments en la base de datos activa. 33. Procedimientos almacenados crear Julio Cesar Avellaneda Sua
Analista y Desarrollador Microsoft Certified Professional DCE 5 Estrellas Platino http://julitogtu.wordpress.com

61

Manual SQL

V 1.0

Los procedimientos almacenados se crean en la base de datos seleccionada, menos los procedimientos almacenados que se crean en la base de datos tempdb. Primero se deben escribir las instrucciones que se incluirn en el procedimiento almacenado, luego de verificar que funcionan correctamente se debe crear el procedimiento almacenado.

Los procedimientos almacenados pueden hacer referencia a tablas, vistas, funciones, tablas temporales y otros procedimientos almacenados Un procedimiento no puede incluir las siguientes instrucciones: Create default Create procedure Create rule Create trigger Create rule

Cuando en un procedimiento almacenado se crea una tabla temporal, dicha tabla solo existe dentro del procedimiento almacenado y desaparece cuando este termina. La sintaxis bsica para crear un procedimiento almacenado es la siguiente: Create procedure nombreprocedimiento As instrucciones

Para diferenciar los procedimiento almacenados del sistema, se les debe dar un prefijo diferente a sp_ cuando se les da un nombre El siguiente ejemplo muestra cmo crear un procedimiento almacenado bsico: Create procedure pa_clientes As Select nombre,apellido From clientes

Luego de crear el procedimiento almacenado, para que este pueda ser ejecutado se debe usar la palabra clave exec y luego el nombre del procedimiento almacenado. Cuando se realiza un ejercicio nuevo, siempre se realizan las mismas tareas: Eliminar la tabla si existe Crear la tabla Ingresar registros

Asi pues, es posible crear un procedimiento almacenado con todas las tareas anteriores como en el siguiente ejemplo: Create procedure pa_clientes As

Julio Cesar Avellaneda Sua


Analista y Desarrollador Microsoft Certified Professional DCE 5 Estrellas Platino http://julitogtu.wordpress.com

62

Manual SQL

V 1.0

If object_id(clientes)is not null Drop table clientes; Create table clients ( Codigo int, Nombre nvarchar(20) ); Insert

33. Procedimientos almacenados eliminar Para eliminar un procedimiento almacenado se debe utilizar la palabra drop procedure nombre procedimiento. Sin embargo, si el procedimiento que se quiere eliminar no existe en la base de datos SQL mostrar un mensaje de error, para evitarlo se puede emplear la siguiente sintaxis:

If object id(nombre procedimiento) is not null Drop procedure nombre procedimeinto

33. Procedimientos almacenados y parmetros de entrada Los procedimientos almacenados pueden recibir y devolver informacin, para lo cual se emplean parmetros de entrada y salida respectivamente. Los parmetros de entrada posibilitan pasar informacin a un procedimiento, para que un procedimiento almacenado admita parmetros de entrada se deben declarar variables como parmetros al crearlo. La sntaxis es la siguiente: Create procedure nombre @nombreparametro tipo = valor por defecto As sentencias Los parmetros se definen luego del nombre del procedimiento, comenzando con el signo arroba(@). Los parmetros son locales al procedimiento, es decir, existen solamente dentro del procedimiento. Cuando se ejecuta el procedimiento, debe darse valores a cada uno de los parmetros (en el orden que fueron definidos), a menos que se haya definido un valor por defecto. Luego de definir un parmetro y su tipo, opcionalmente se puede especificar un valor por defecto.

33. Procedimientos almacenados y parmetros de salida Julio Cesar Avellaneda Sua


Analista y Desarrollador Microsoft Certified Professional DCE 5 Estrellas Platino http://julitogtu.wordpress.com

63

Manual SQL

V 1.0

Los procedimientos almacenados pueden devolver informacin, para lo cual se emplean parmetros de salida. El valor se retorna quin realizo la llamada al procedimiento. Para que un procedimiento pueda devolver un valor se debe declarar una variable con la palabra clave output al crear el procedimiento. La sintaxis es la siguiente: Create procedure nombre @nombreparametro entrada = valor por defecto, @nombreparametro salida = valor por defecto output As sentencias Select @parametrosalida = sentencias

Los parametros de salida de un procedimiento almacenado pueden ser de cualquier tipo excepto text, ntext e image. El siguiente ejemplo muestra un procedimiento almacenado al cual se le envian dos nmeros y retorna el promedio: Create procedure pa_suma @n1 int, @n2 int, @resul int output As Select @resul = (@n1 + @n2)

Declare @res int Exec pa_suma 5,5, @res output Select @res

Para ejecutar un procedimiento almacenado que devuelve un valor, se debe declarar una variable para guardar el resultado del procedimiento, asi en el ejemplo anterior de ejecuta el procedimento enviandole dos valores y mostrando el resultado. Para cada parametro de salida de un procedimiento se debe declara igual nmero de variables para guardar el o los resultados del procedimiento almacenado, y por ltimo se deb hacer un select a las variables que guardan los resultados de ejecutar el procedimento almacenado.

Julio Cesar Avellaneda Sua


Analista y Desarrollador Microsoft Certified Professional DCE 5 Estrellas Platino http://julitogtu.wordpress.com

64

Manual SQL

V 1.0

Julio Cesar Avellaneda Sua


Analista y Desarrollador Microsoft Certified Professional DCE 5 Estrellas Platino http://julitogtu.wordpress.com

65

Potrebbero piacerti anche