Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
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
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
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
Manual SQL
V 1.0
La sintaxis para eliminar una base de datos solo es necesario compilar lo siguiente:
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.
Manual SQL
V 1.0
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.
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.
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.
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.
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.
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.
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.
Manual SQL
V 1.0
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).
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.
Manual SQL
V 1.0
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.
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:
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.
10
Manual SQL
V 1.0
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, )
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 ha dicho que no se puede ingresar un valor a un campo, sin embargo, es posible al activar esa opcin identity_insert.
Para desactivar la opcin de ingresar valores en un campo identity, se necesita compilar lo siguiente:
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.
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.
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.
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.
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.
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
Es posible usar el operador not antes del between, lo cual dara como resultado los registros que estn fuera del rango especificado.
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.
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
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
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]%
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]%
17
Manual SQL
V 1.0
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.
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.
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.
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.
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.
sum(nombre_campo) as total_sueldo
19
Manual SQL
V 1.0
From Grupo by
nombre_tabla campo
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.
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.
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.
21
Manual SQL
V 1.0
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 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
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.
22
Manual SQL
V 1.0
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
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
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
24
Manual SQL
V 1.0
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)
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)
25
Manual SQL
V 1.0
Con la clusula distinct, se especifica que los registros con ciertos datos duplicados sean obviados en el resultado.
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.
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.
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
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.
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.
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.
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.
29
Manual SQL
V 1.0
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.
30
Manual SQL
V 1.0
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
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.
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:
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:
33
Manual SQL
V 1.0
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.
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.
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.
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.
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:
35
Manual SQL
V 1.0
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:
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.
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.
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.
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.
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:
37
Manual SQL
V 1.0
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).
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:
38
Manual SQL
V 1.0
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.
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.
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
e.nombre,d.nombre empleados e
40
Manual SQL
V 1.0
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.
41
Manual SQL
V 1.0
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.
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)
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.
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:
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.
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:
47
Manual SQL
V 1.0
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.
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), )
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
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)
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
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)
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:
Ejemplo: Update productos set precio = precio+100 where productos = (select cdigo From proveedores Where cdigo = 1)
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:
53
Manual SQL
V 1.0
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:
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.
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.
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:
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:
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:
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.
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.
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:
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
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:
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.
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
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:
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.
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.
64
Manual SQL
V 1.0
65