69820862 Introduccion a SQL
Transcript of 69820862 Introduccion a SQL
V 1.0
Manual SQL Introducción al lenguaje SQL Julio Cesar Avellaneda Sua
Julio Cesar Avellaneda Sua Analista y Desarrollador
Microsoft Certified Professional
DCE 5 Estrellas Platino
http://julitogtu.wordpress.com
1
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 básicas ........................................................................................................................................................................7
8. Consultas con condición (where) ...........................................................................................................................................7
9. Función order by ..........................................................................................................................................................................7
9. Operadores lógicos (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. Características 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 agregación ...................................................................................................................................................... 18
26. Agrupar registros (group by) .............................................................................................................................................. 19
27. Funciones para el manejo de cadenas ............................................................................................................................ 20
28. Funciones matemáticas ........................................................................................................................................................ 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. Cláusula compute .................................................................................................................................................................... 25
29. Registros duplicados (distinct) ........................................................................................................................................... 25
29. Cláusula top .............................................................................................................................................................................. 26
Julio Cesar Avellaneda Sua Analista y Desarrollador
Microsoft Certified Professional
DCE 5 Estrellas Platino
http://julitogtu.wordpress.com
2
Manual SQL V 1.0
29. Clave primaria compuesta ................................................................................................................................................... 26
29. Integridad de datos ................................................................................................................................................................ 27
29. Restricción default .................................................................................................................................................................. 27
29. Restricción check ..................................................................................................................................................................... 28
29. Deshabilitar restricciones (check) ..................................................................................................................................... 29
29. Restricción primary key ........................................................................................................................................................ 30
29. Restricción unique .................................................................................................................................................................. 30
29. Procedimiento almacenado sp_helpconstraint ............................................................................................................. 31
29. Eliminar restricciones ............................................................................................................................................................ 31
29. Crear y asociar reglas (create rule – sp_bindrule) ..................................................................................................... 32
29. Restricción check y reglas ................................................................................................................................................... 33
29. Eliminar y desasociar reglas (sp_unbindrole y drop rule) ....................................................................................... 33
29. Información de reglas ........................................................................................................................................................... 34
29. Valores predeterminados (default)................................................................................................................................... 34
29. Desasociar y eliminar valores predeterminados .......................................................................................................... 35
29. Información de valores predeterminados ...................................................................................................................... 36
29. Índices ......................................................................................................................................................................................... 36
29. Clases de índices ..................................................................................................................................................................... 37
29. Creación de índices ................................................................................................................................................................ 37
29. Eliminar índices ........................................................................................................................................................................ 38
21. Combinación interna (inner join) ...................................................................................................................................... 39
22. Combinación externa izquierda (left join) ..................................................................................................................... 40
23. Combinación externa derecha (right join) ..................................................................................................................... 41
24. Combinación externa completa (full join) ...................................................................................................................... 42
24. Combinaciones cruzadas (cross join) .............................................................................................................................. 42
24. Foreign Key ............................................................................................................................................................................... 43
24. Restricción foreign Key ......................................................................................................................................................... 43
24. Acciones restricción foreign Key ........................................................................................................................................ 44
24. Deshabilitar y eliminar restricción foreign Key ............................................................................................................ 45
24. Restricciones al crear una tabla......................................................................................................................................... 45
24. Operador unión ........................................................................................................................................................................ 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 expresión ............................................................................................................................................ 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
3
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 información .................................................................................................................................................................... 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 paràmetros de entrada ........................................................................................... 63
33. Procedimientos almacenados y paràmetros de salida............................................................................................... 63
Julio Cesar Avellaneda Sua Analista y Desarrollador
Microsoft Certified Professional
DCE 5 Estrellas Platino
http://julitogtu.wordpress.com
4
Manual SQL V 1.0
Introducción al lIntroducción al lIntroducción al lIntroducción al lenguaje SQLenguaje SQLenguaje SQLenguaje SQL
1. Crear y eliminar una base de datos
• Para crear una base de datos, solo es necesario una línea de código, cuando se compila
esta línea, nos es posible crear tablas y demás 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 información 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 relación 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 básica:
Create table nombre_tabla (
Julio Cesar Avellaneda Sua Analista y Desarrollador
Microsoft Certified Professional
DCE 5 Estrellas Platino
http://julitogtu.wordpress.com
5
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,
)
• También 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 información que contiene.
Sintaxis:
Drop table nombre_tabla
Ejemplo:
Drop table empleados
4. Tipos de datos
5. Comentarios
• Un comentario es una línea de código que no se compila al ejecutar el script, los
comentarios son útiles cuando se quiere aclarar instrucciones o segmentar el código de
manera que sea más fácil su lectura.
• Existen dos clases de comentarios, la primer clase es un comentario que ocupa una sola
línea.
Sintaxis:
--- comentario ---
• La segunda clase es un cometario que puede ocupar una o varias líneas.
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
6
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
compilación.
• 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 línea de código, se especifica la tabla y el/los campo(s) que vamos a
ingresar, en la segunda línea, ingresamos los valores correspondientes en el mismo
orden que en la anterior línea. 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
7
Manual SQL V 1.0
7. Consultas básicas
• 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 línea, la función “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 línea,
con el “from” se hace referencia a la tabla.
8. Consultas con condición (where)
• Es posible realizar una consulta y recuperar solo algunos registros de acuerdo a una
condición o necesidad.
Sintaxis:
Select campo_1,campo_2
From nombre_tabla1
Where condición
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 años.
9. Función order by
• Las función order by permite mostrar los registros organizados por algún campo.
Sintaxis:
Julio Cesar Avellaneda Sua Analista y Desarrollador
Microsoft Certified Professional
DCE 5 Estrellas Platino
http://julitogtu.wordpress.com
8
Manual SQL V 1.0
Select nombrecampo
From nombre_tabla
Order by campo
Ejemplo:
Select *
From empleados
Order by sueldo desc
• También es posible ordenar por varios campos, así como de manera ascendiente (asc)
o descendiente (Desc).
9. Operadores lógicos (and – or – not)
• Un operador lógico permite establecer más de una condición es una consulta, es decir
combinan condiciones, estos operadores deben ir en la cláusula 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 código = 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 razón, 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
9
Manual SQL V 1.0
From nombre_tabla1 alias
• La segunda clase es un cometario que puede ocupar una o varias líneas.
Ejemplo:
Select nombre,edad
From empleados e
En la segunda línea, 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 más de una tabla para una consulta, y es aquí donde
los alias nos serán 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 condición, por lo cual la consulta quedaría:
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
10
Manual SQL V 1.0
• Anteriormente vimos como crear campos, aquí se explicará como agregar una
característica 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 relación 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 básica:
Create table nombre_tabla (
Campo_1 tipo_de_dato not null,
Campo_2 tipo_de_dato,
)
• A continuación 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 vínculos 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
11
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 más empleados con el mismo nombre y la
misma edad, pero nunca con el mismo codigo.
15. Características identity
• Un campo con un atributo identity, se incrementa automáticamente, 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
12
Manual SQL V 1.0
Al declarar el atributo identity entre paréntesis 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 serán 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 opción identity_insert.
Sintaxis:
Set identity_insert nombrecampo on;
• Para desactivar la opción de ingresar valores en un campo identity, se necesita compilar
lo siguiente:
Sintaxis:
Set identity_insert nombrecampo off;
16. Borrado con truncate table
• La función 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 ejecución 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
13
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 función delete, permite borrar un registro especifico o bien toda la tabla, sin
embargo, si se desea borrar todos los registros de una tabla es más rápido hacerlo
mediante un truncate table.
Sintaxis:
Delete
From nombre_tabla
Where condición
Ejemplo:
Delete
From empleados
Where empleado = ‘juan’
• Si al realizar el borrado, no usamos ninguna condición, se eliminarán todos los registros
de la tabla, sin embargo, sin existe algún campo identity, la secuencia continua
teniendo en cuenta el mayor valor que había 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-año)
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
14
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 numérico 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 específico para mayor comprensión, también 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
15
Manual SQL V 1.0
• En ejemplo anterior, cuando la consulta arroja el resultado, en el encabezado de la
columna no tendrá como título 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 numéricos, 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 daría como resultado los
registros que están fuera del rango especificado.
Julio Cesar Avellaneda Sua Analista y Desarrollador
Microsoft Certified Professional
DCE 5 Estrellas Platino
http://julitogtu.wordpress.com
16
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”, también es posible anteponer el operador “not”
al usar el “in”, lo cual dará como resultado los registros que no estén 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 comparación de la cadena sea total o parcial, lo cual permite mejorar la
condición de búsqueda.
Sintaxis:
Select nombrecampo
From nombre_tabla
Where nombre like ‘valor’
Ejemplo:
Select nombre
From empleados
Where nombre like ‘juan’
• El % es un comodín que permite comparar solo una parte de la cadena, es decir, es %
reemplaza cualquier cantidad de caracteres, por lo tanto, la búsqueda se realizará sin
Julio Cesar Avellaneda Sua Analista y Desarrollador
Microsoft Certified Professional
DCE 5 Estrellas Platino
http://julitogtu.wordpress.com
17
Manual SQL V 1.0
importar los caracteres existentes a la derecha o izquierda dependiendo del lugar en el
cual este el comodín.
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 comodín es “[]”, este reemplaza cualquier carácter 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 comodín es “^”, este reemplaza cualquier carácter 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
18
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 función es un conjunto de sentencias que actúan como unidad lógica. Una función
tiene un nombre, retorna una salida y opcionalmente acepta argumentos de entrada.
26. Funciones de agregación
• Una función de agregación es una operación que combina varios valores y solo retorna
un valor. Las funciones de agregación son:
• Función sum: Realiza la suma de los campos especificados. En el ejemplo se sumará el
sueldo de todos los empleados.
Sintaxis básica:
Select sum(nombre_campo) as total_sueldo
From nombre_tabla
Ejemplo:
Select sum(sueldo) as total_sueldo
Julio Cesar Avellaneda Sua Analista y Desarrollador
Microsoft Certified Professional
DCE 5 Estrellas Platino
http://julitogtu.wordpress.com
19
Manual SQL V 1.0
From empleados
• Función min y max: Una función min o max compara todos los valores del campo
especificado y retorna el menor (min) o el mayor (max) valor dependiendo de que
función se utilice. La siguiente consulta retorna el empleado más joven o bien el más
viejo.
Sintaxis básica:
Select min/max(nombre_campo)
From nombre_tabla
Ejemplo:
Select min/max(edad) as más_joven/más viejo
From empleados
• Función avg: La función 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 básica:
Select avg (nombre_campo)
From nombre_tabla
Ejemplo:
Select avg (edad) as promedio_edad
From empleados
26. Agrupar registros (group by)
• La función “group by” combinada con una función de agregación genera valores de
resumen para un solo campo. Si en la sentencia del select, existe un campo con función
de agregación, es necesario usar un “group by” especificando los campos que no tienen
asociados una función de agregación.
Sintaxis básica:
Select sum(nombre_campo) as total_sueldo
Julio Cesar Avellaneda Sua Analista y Desarrollador
Microsoft Certified Professional
DCE 5 Estrellas Platino
http://julitogtu.wordpress.com
20
Manual SQL V 1.0
From nombre_tabla
Grupo by campo
Ejemplo:
Select sum(sueldo) as total_sueldo,nombre
From empleados
Grupo by nombre
27. Funciones para el manejo de cadenas
• Función substring: La función substring devuelve una parte de la cadena especificada
como primer argumento, empezando desde la posición especificada en el segundo
argumento y de tantos caracteres de longitud como lo indica el tercer argumento.
Sintaxis básica:
Select substring (cadena, inicio, longitud)
Ejemplo:
Select substring (‘Buenas tardes’,8,6)
Retorna tardes
• Función str: La función str convierte números a caracteres; el primer parámetro indica
el valor numérico a convertir, el segundo indica la longitud del resultado (debe ser
mayor o igual a la parte entera del número más el signo si lo tuviese), y el tercer
argumento, la cantidad de decimales. El segundo y tercer argumento son opcionales y
positivos.
Sintaxis básica:
Select str (número, longitud, decimales)
Ejemplo:
Select str (123.456,5,3)
Julio Cesar Avellaneda Sua Analista y Desarrollador
Microsoft Certified Professional
DCE 5 Estrellas Platino
http://julitogtu.wordpress.com
21
Manual SQL V 1.0
Retorna 123.5
28. Funciones matemáticas
• Las funciones matemáticas realizan operaciones con expresiones numéricas y retornan
un resultado. También es posible enviar como argumento un campo de alguna tabla, así
como realizar la consulta utilizando parámetros de selección mediante la cláusula
where.
• Función abs(x): La función abs retorna el valor absoluto del argumento.
Ejemplo:
Select abs (-5)
• Función ceiling(x): La función ceiling redondea hacia arriba el argumento.
Ejemplo:
Select ceiling (123.45)
• Función floor(x): La función floor redondea hacia abajo el argumento.
Ejemplo:
Select floor (123.45)
• Función %: La función % devuelve el resto de la división
Ejemplo:
Select 22%5
• Función power(x,y): La función power eleva el valor de x a la potencia y.
Ejemplo:
Select power (2,5)
• Función square(x): La función square retorna el cuadrado del argumento.
Julio Cesar Avellaneda Sua Analista y Desarrollador
Microsoft Certified Professional
DCE 5 Estrellas Platino
http://julitogtu.wordpress.com
22
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.
• Función getdate(): Retorna la fecha y hora actual.
Ejemplo:
Select getdate()
• Función datepart (partedefecha, fecha): La función datepart retorna la parte específica
de una fecha (año, día, hora). Los valores para partedefecha pueden ser year (año),
quarter (cuarto), month (mes), day (día), week (semana), hour (hora), minute
(minuto), second (segundo), millisecond (milisegundo).
Ejemplo:
Select datepart(year,getdate())
• Función datename (partedefecha, fecha): La función datename retorna el nombre de
una parte específica de una fecha. Los valores para partedefecha son los mismos que
para la función datepart.
Ejemplo:
Select datename(month,getdate())
• Función datediff (partedefecha, fecha1, fecha2): Calcula el intervalo de tiempo (según
partedefecha) entre las dos fechas. El resultado es un número 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
23
Manual SQL V 1.0
• Función day (fecha): Retorna el día de la fecha especificada.
• Función month (fecha): Retorna el mes de la fecha especificada.
• Función year (fecha): Retorna el año de la fecha especificada.
29. Seleccionar grupos (having)
• Así como la cláusula “where” permite seleccionar registros individuales, la cláusula
“having”, permite seleccionar un grupo de registros. Si se desea establecer una o más
condiciones de salida en una función de agregación, se debe utilizar la cláusula
“having”, esta debe ir después del “group by” y antes del “order by”.
Sintaxis básica:
Select campo1, función_de_agregación (campo2)
From tabla_1
Group by campo1
Having condición (función_de_agregación (campo2))
Ejemplo:
Select nombre, sum(cantidad)
From productos
Group by nombre
Having sum(cantidad) > 10
29. Modificador del group by (rollup)
• Con la cláusula “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 básica:
Select campo1, función_de_agregación (campo2)
From tabla_1
Group by campo1
With rollup
Julio Cesar Avellaneda Sua Analista y Desarrollador
Microsoft Certified Professional
DCE 5 Estrellas Platino
http://julitogtu.wordpress.com
24
Manual SQL V 1.0
Ejemplo:
Select ciudad, count (*) as total
From empleados
Group by ciudad
With rollup
• La consulta anterior, muestra la cantidad de empleados por ciudad, además incluye una
fila (última) en la que muestra el total de empleados. Es decir, se combinan las
siguientes consultas:
Ejemplo:
Select ciudad, count (*) as cantidad
From empleados
Group by ciudad
Ejemplo:
Select ciudad, count (*) as total
From empleados
29. Modificador del group by (cube)
• El “cube” cumple la misma función 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 agrupación final la hace en base al último
campo escrito.
Sintaxis básica:
Select campo1, campo2, función_de_agregación (campo3)
From tabla_1
Group by campo1, campo2
With cube
Ejemplo:
Select id_departamento, ciudad, count(*)
Julio Cesar Avellaneda Sua Analista y Desarrollador
Microsoft Certified Professional
DCE 5 Estrellas Platino
http://julitogtu.wordpress.com
25
Manual SQL V 1.0
From empleados
Group by id_departamento, ciudad
With cube
• 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, también muestra la cantidad de empleados por ciudad sin importar el
departamento.
29. Cláusula compute
• Esta cláusula genera totales que aparecen en columnas extras al final del resultado, se
usan con funciones de agrupación. 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 básica:
Select campo1, campo2, función_de_agregación (campo3)
From tabla_1
Compute function_de_agregación(campo1)
Ejemplo:
Select nombre, sueldo
From empleados
Compute 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 nombre, precio_venta, cantidad
From productos
Compute 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
26
Manual SQL V 1.0
• Con la cláusula “distinct”, se especifica que los registros con ciertos datos duplicados
sean obviados en el resultado.
Sintaxis básica:
Select distinct campo
From tabla
Ejemplo:
Select distinct id_proveedor
From empleados
• La consulta anterior, muestra el id (código) de cada proveedor, sino se usara el
“distinct”, se imprimiría el id del proveedor tantas veces como productos tenga
relacionados. Si es necesario, se puede incluir la cláusula “where” en la consulta.
29. Cláusula top
• La palabra clave “top” se emplea para obtener solo una cantidad limitada de registros.
N hace referencia al número de registros que se desean obtener. La siguiente consulta
muestra los 5 primeros empleados, es posible optimizar la consulta mediante el uso de
la cláusula “where”.
Sintaxis básica:
Select top n campo
From tabla
Ejemplo:
Select top 5 *
From 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 ningún 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
27
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,
Cédula_empleado varchar (12) not null,
Nombre_empleado varchar (20) not null,
Edad_empleado int,
Primary key (codigo_empleado,cédula_empleado)
)
29. Integridad de datos
• Al diseñare una base de datos, es muy importante tener en cuenta la integridad de los
datos, lo cual significa que la información almacenada debe ser válida, coherente y
exacta. SQL ofrece alternativas para controlar, restringir y validar los datos (por
ejemplo la clave primaria).
• Las restricciones (constraints) son un método para mantener la integridad de los datos,
asegurando que los valores ingresados sean válidos y que las relaciones entre tablas se
mantenga. El procedimiento almacenado “sp_helpconstraint nombre_tabla”, muestra la
información acerca de las restricciones de la tabla.
29. Restricción default
• La restricción “default”, específica un valor por defecto para un campo cuando no se
inserta explícitamente. En el capítulo 19, se vio el uso del “default” al crear la tabla. Sin
embargo, es posible agregar está restricción 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
28
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 convención, 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 función del sistema (ej:
getdate()).
29. Restricción check
• La restricción check específica 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 artículo.
Sintaxis:
Alter table nombre_tabla
Add constraint nombre_constraint
Check condición
Ejemplo:
Alter table productos
Add constraint CK_productos_preciopositivo
Check (precio_compra>=0 and precio_venta>=0)
• Por convención, 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
29
Manual SQL V 1.0
• Si en la tabla ya existen registros que no cumplen con la restricción, esta no podrá ser
creada hasta que todos registros cumplan con dicha restricción. Además, la condición
puede hacer referencia a otros campos de la misma tabla.
29. Deshabilitar restricciones (check)
• Es posible agregar una restricción a una tabla cuyos valores almacenados no cumplan
con la condición, pero los valores que se ingresen luego de ser creada dicha restricción
si la deben cumplir.
Sintaxis:
Alter table nombre_tabla
With nocheck
Add constraint nombre_constraint
Check condición
Ejemplo:
Alter table productos
With nocheck
Add constraint CK_productos_preciopositivo
Check (precio_compra>=0 and precio_venta>=0)
• También es posible deshabilitar la restricción 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 restricción deshabilitada se ejecuta la misma instrucción pero con la
cláusula 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
30
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 restricción esta habilitada o no, se usa el procedimiento almacenado
“sp_helpconstraint” y se mira el estado en la columna “status_enable”.
29. Restricción primary key
• Si al crear una tabla, no se específica una clave primaria, es posible hacer la asignación
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 convención, cuando se da el nombre a las restricciones primary key, se emplea el
siguiente formato: PK_nombretabla_nombrecampo.
29. Restricción unique
• La restricción unique impide la duplicación de claves alternas (no primarias), es decir,
específica 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
31
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
información referente a todas las restricciones de la tabla, y devuelve la siguiente
información:
• Constraint_type: Es el tipo de restricción.
• Constraint_name: Es el nombre de la restricción.
• 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 restricción 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 restricción check muestra la condición, 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 también 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
32
Manual SQL V 1.0
Sintaxis:
Alter table nombre_tabla
Drop nombre_restricción
Ejemplo:
Alter table empleados
Drop UQ_empleados_celular
• Es posible eliminar varias restricciones separándolas por una coma, y en el caso de
borrar una tabla se borrarán 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, además 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 específicos, los cuales coincidan con una
lista de valores o sigan un patrón.
• 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 condición
• Por convención, 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 condición. La
condición se refiere a los valores permitidos para inserciones y actualizaciones y puede
contener cualquier expresión válida para una cláusula 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
33
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 actúan 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. Restricción check y reglas
• La función que cumple una regla es muy similar a la de una restricción check, las
siguientes características explican sus diferencias:
• Una restricción check se asocia a una tabla, si se elimina la tabla la restricción 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 restricción 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 asociación 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
34
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. Información 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 -- tipo regla
name like 'RG%' --búsqueda con comodín
29. Valores predeterminados (default)
• Para mantener la integridad de los datos, es posible crear valores predeterminados para
uno a más 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
35
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 función de un valor predeterminado es básicamente la misma que un valor
predeterminado, sus diferencias y semejanzas son las siguientes:
• Una restricción default se almacena en una tabla, cuando se elimina dicha tabla la
restricción también es eliminada, en cambio el valor predeterminado solo deja de
pertenecer a esa tabla pero sigue existiendo en la base de datos.
• Tanto una restricción default como un valor predeterminado, no se pueden asociar a un
campo identity.
• Un campo solo puede tener un valor predeterminado o una restricción 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 eliminación. 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
36
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. Información 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 obtención de información de una tabla, ya que su función es
similar a la del índice de un libro, el cual permite encontrar datos rápidamente.
• 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
37
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 búsquedas con frecuencia.
29. Clases de índices
• Para SQL existen dos clase de índices:
• Indices agrupados (clustered): es similar a una guía telefónica, 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 búsquedas 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 búsquedas 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. Creación de índices
• La sintaxis básica 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 convención, 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
38
Manual SQL V 1.0
Ejemplo:
Create unique nonclustered I_empleados_codigo
On empleados (id_empleado)
• Es posible crear índices con más 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 – más adelante).
Ejemplo:
Create nonclustered I_empleados_codigo
On empleados (id_empleado,nombre)
• SQL crea automáticamente índices cuando se establece una restricción “primary key” o
“unique”. Si la restricción creada es “primary key”, el índice será de tipo agrupado
(clustered); en cambio, si es una restricción “unique” será no agreupado
(nonclustered).
• Al crear una restricción es posible determinar de que tipo será simplemente
especificando su tipo luego de declara la restricción.
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 básica 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
39
Manual SQL V 1.0
Sintaxis:
Drop index tabla.nombre_índice
Ejemplo:
Drop index empleado.I_empleados_codigo
21. Combinación interna (inner join)
• Qué es un join?
Un join es una operación que relaciona dos o más tablas para obtener un resultado que
incluya datos (campos y registros) de ambas, las tablas se combina según los campos
comunes.
• Combinación interna (inner join o join):
La combinación interna (join) se emplea para obtener la información de dos tablas y
combinar la información en una salida.
Sintaxis:
Select campos
From tabla1
Join tabla2
On condición de combinación
Ejemplo:
Select *
From empleados e
Join departamentos d
On e.id_departamento = d.id_departamento
On: La función “on” hace coincidir registros de ambas tablas, está se basa en las claves
primarias y foráneas 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
40
Manual SQL V 1.0
22. Combinación externa izquierda (left join)
• Las combinaciones externas combinan los registros de dos tablas que cumplen una
condición, más los registros de la segunda tabla que no la cumplen, es decir, muestran
todos los registros de las tablas relacionadas, aún cuando no haya valores coincidentes
entre ellas.
• Se emplea una combinación 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 campos
From tabla_izquierda
Left Join tabla_derecha
On condición de combinación
Ejemplo:
Select e.nombre,d.nombre
From empleados e
Left Join departamentos d
On e.id_departamento = d.id_departamento
• Podemos agregar condiciones a la búsqueda con la función “where” después de la
función “on”.
Sintaxis:
Select campos
From tabla_izquierda
Left Join tabla_derecha
On condición de combinación
Where condición
Ejemplo:
Select e.nombre,d.nombre
From empleados e
Julio Cesar Avellaneda Sua Analista y Desarrollador
Microsoft Certified Professional
DCE 5 Estrellas Platino
http://julitogtu.wordpress.com
41
Manual SQL V 1.0
Left Join departamentos d
On e.id_departamento = d.id_departamento
Where 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. Combinación externa derecha (right join)
• La combinación 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 campos
From tabla_izquierda
Right Join tabla_derecha
On condición de combinación
Ejemplo:
Select e.nombre,d.nombre
From empleados e
Right Join departamentos d
On e.id_departamento = d.id_departamento
• Al igual que en una consulta “left join”, en la “right join” también es posible agregar
más condiciones en la consulta usando la cláusula “where” con la misma sintaxis que en
la anterior.
• Para ver la diferencia entre ambas funciones, a continuación se muestran dos consultas
(una con “left join” y la otra con “right join”), las cuales generan el mismo resultado.
Ejemplo:
Select e.nombre,d.nombre
From empleados e
Right Join departamentos d
Julio Cesar Avellaneda Sua Analista y Desarrollador
Microsoft Certified Professional
DCE 5 Estrellas Platino
http://julitogtu.wordpress.com
42
Manual SQL V 1.0
On e.id_departamento = d.id_departamento
Ejemplo:
Select e.nombre,d.nombre
From departamentos d
Left Join empleados e
On e.id_departamento = d.id_departamento
Nótese que para obtener el mismo resultado, simplemente se hace necesario cambiar el
orden de las tablas.
24. Combinación externa completa (full join)
• Una combinación 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 campos
From tabla_1
Full Join tabla_2
On condición de combinación
Ejemplo:
Select e.nombre,d.nombre
From empleados e
Right Join departamentos d
On e.id_departamento = d.id_departamento
• Para resumir el funcionamiento de una consulta externa completa “full join”, esta
función une las características de un “left join” y un “rigth join”, mostrando un solo
resultado.
24. Combinaciones cruzadas (cross join)
• Una combinación 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 condición 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
43
Manual SQL V 1.0
el número de filas del resultado es igual al número de registros de la primera tabla
multiplicado por el número 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 campos
From tabla_1
Cross Join tabla_2
Ejemplo:
Select e.nombre,d.nombre
From empleados e
Cross Join 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. Restricción foreign Key
• Para mantener la integridad de los datos, vimos que SQL ofrece varios tipos de
restricciones, además de las vistas anteriormente, existe un tipo de restricción
referencial llamado foreign key.
• Con la restricción 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 restricción
“primary key” o “unique”.
Sintaxis:
Alter table tabla1
Add constraint nombre_restricción
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
44
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 restricción “foreign key” para asegurarse
que todo empleado pertenece a un departamento.
• Es posible definir una restricción “foreign key” dentro de la misma tabla.
24. Acciones restricción 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 restricción “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_restricción
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
45
Manual SQL V 1.0
Foreign key (departamento)
References departamentos (codigo)
On update cascade
On delete cascade
24. Deshabilitar y eliminar restricción foreign Key
• Para deshabilitar una restricción “foreign key”, se realiza de la siguiente manera:
Sintaxis:
Alter table tabla
Nocheck constraint nombre_restricción
Ejemplo:
Alter table empleados
Nocheck constraint FK_empleados_codigodepartamento
• Para eliminar una restricción “foreign key”, se realiza de la siguiente manera:
Sintaxis:
Alter table tabla
drop constraint nombre_restricción
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 básica:
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
46
Manual SQL V 1.0
Restricción_1,
Restricción_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 unión
• El operador unión combina el resultado de dos o más 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 selección 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
47
Manual SQL V 1.0
From clientes
• La consulta anterior muestra una sola tabla con el nombre, apellido y teléfono 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 más 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 definición
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, también es posible modificar
un campo de una tabla. La sintaxis básica es la siguiente:
Sintaxis:
Julio Cesar Avellaneda Sua Analista y Desarrollador
Microsoft Certified Professional
DCE 5 Estrellas Platino
http://julitogtu.wordpress.com
48
Manual SQL V 1.0
Alter table nombre_tabla
Alter column campo nueva_definición
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 algún registro no cumpla con la
nueva definición.
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 básica es la siguiente:
Sintaxis:
Alter table nombre_tabla
add nombre_campo definición
constraint nombre_restricción 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 físicamente en la tabla. Un
campo calculado no puede definirse como “not null”, tener restricción “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
49
Manual SQL V 1.0
• En el siguiente ejemplo, se creará un campo calculado denominado totalsueldo el cual
suma el sueldo básico + horas extras* precio extra.
Ejemplo:
create table empleados (
nombre varchar(20),
sueldobasico money,
precioextra smallmoney,
horasextras tinyint,
sueldototal as sueldobasico + (horasextras*precioextra),
)
• También es posible agregar un campo calculado a una tabla ya existente:
Sintaxis:
Alter table nombre_tabla
Add nombre_campo as expresión
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 lógicos y se obtiene el resultado
con una única expresión.
• Una subconsulta se debe incluir entre paréntesis
• Una subconsulta puede contener otra subconsulta, teóricamente pueden existir 32
niveles de anidación.
25. Subconsultas como expresión
• Una subconsulta puede reemplazar una expresión, si es así, dicha subconsulta debe
devolver un valor escalar (o una lista de valores de un campo).
Julio Cesar Avellaneda Sua Analista y Desarrollador
Microsoft Certified Professional
DCE 5 Estrellas Platino
http://julitogtu.wordpress.com
50
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 expresión in (subconsulta)
Ejemplo:
Select nombre
From editoriales
Where codigo in
(select cod_editorial
from libros
where autor = “García Marquez”)
Julio Cesar Avellaneda Sua Analista y Desarrollador
Microsoft Certified Professional
DCE 5 Estrellas Platino
http://julitogtu.wordpress.com
51
Manual SQL V 1.0
26. Subconsultas con any – some - all
• Any y some son sinónimos y chequean si alguna fila de la lista resultado de una
subconsulta se encuentra el valor especificado de la condición.
• La sintaxis es la siguiente:
Select campos
From tabla
Where campo expresión in (subconsulta)
Ejemplo:
Select nombre
From editoriales
Where codigo in
(select cod_editorial
from libros
where autor = “García Marquez”)
Select titulo, precio
Precio – (select max(precio) from libros) as diferencia
From libros
Where titulo = “poemas”
26. Subconsultas correlacionadas
• Un almacén almacena la información de sus ventas en una tabla llamada "facturas" en
la cual guarda el número 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 artículo, el precio (unitario) y la cantidad.
• Se necesita una lista de todas las facturas que incluya el número, la fecha, el cliente, la
cantidad de artículos 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
52
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 número 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 número 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 evalúa 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, específicamente, 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 evaluación.
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 básica 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 expresión 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
53
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í cómo es posible ejecutar una consulta dentro de otra consulta, también se puede
realizar una subconsulta dentro de una clausula update, delete o insert.
• La sintaxis general para una actualización (update) es la siguiente:
Update tabla set campo = nuevo valor
where campo = subconsulta
Ejemplo:
Update productos set precio = precio+100
where productos =
(select código
From proveedores
Where código = 1)
• La sintaxis general para una eliminación (delete) es la siguiente:
Delete from tabla
where campo in subconsulta
Ejemplo:
Delete from productos
where codigo in
(select código
From proveedores
Where código = 1)
28. Subconsultas insert
• La sintaxis general para una inserción 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
54
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 básica es la siguiente:
Select camposnuevatabla
Into nuevatabla
From tabla
Where condición
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 finalización 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 línea 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
55
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 través de la vista no
están 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 características de las vistas son las siguientes:
� Ocultar información: una vista permite el acceso a algunos datos y manteniendo
oculta el resto de la información 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 administración de los permisos de usuario: se pueden dar al usuario
permisos para que solamente pueda acceder a los datos a través 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
información de varias tablas.
� Se pueden crear vistas a partir de otras vistas.
• La sintaxis básica 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 claúsulas 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 información
• Las vistas son objetos, así para obtener información 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
56
Manual SQL V 1.0
� Sp_help: si no se le agrega nungún parámetro 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 parámetro se le envía el nombre de la vista, obtenemos la
fecha de creación, propietario, los campos y demás información.
� 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 línea 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 través 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
57
Manual SQL V 1.0
� No puede afectar a más de una tabla consultada. Pueden modificarse datos de una
vista que combina varias tablas pero la modificación 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
definición 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 línea cuando va a modificar la vista, de lo
contrario será deshabilitada dicha opción.
32. Case (control de flujo)
• La función case compara dos o más 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 algún where
ejecuta el then correspondiente, si no encuentra ningún 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
58
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 comparación 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 ejecución de las sentencias, los bloques de sentencias y procedimientos
almacenados. Tales palabras son: begin…end, 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 condición, se emplea cuando un bloque de sentencias debe ser
ejecutado si una condición se cumple y si no se cumple, se debe ejecutar otro bloque
de sentencias diferente.
• While: ejecuta repetidamente una instrucción siempre que la condición sea verdadera.
• Break y continue: controlan la operación 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
condición 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
59
Manual SQL V 1.0
33. Variables de usuario
• Las variables permiten almacenar una valor y recuperarlo más adelante para
emplearlas en otras sentencias.
• Las variables de usuario son específicas de cada conexión y son liberadas
automáticamente al abandonar la conexión.
• Las variables de usuario comienzan con @ (arroba) seguido del nombre (sin espacios),
dicho nombre puede contener cualquier carácter. 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 más de una variable en una sola línea separándolas 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 ningún 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 condición
Ejemplo:
Select @nombre = nombre
From productos
Where código = 1
Julio Cesar Avellaneda Sua Analista y Desarrollador
Microsoft Certified Professional
DCE 5 Estrellas Platino
http://julitogtu.wordpress.com
60
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 también 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 información.
• Ntext almacena datos Unicode de longitud variable y el máximo es alrededor de
1000000000 caracteres, en bytes es del doble (2G)
• text almacena datos binarios no Unicode de longitud variable, el máximo 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
61
Manual SQL V 1.0
• Image es un tipo de dato de longitud variable que puede almacenar de 0 a
2000000000 aproximadamente y es usado para almacenar gran cantidad de
información o imágenes.
• 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 restricción 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 implementación 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 información 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 están disponibles en la sesión de
un solo usuario y se eliminan al finalizar la sesión, los globales están disponibles en
las sesiones de todos los usuarios.
� Extendidos: se implementan como blibiotecas de vínculos dinámicos (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 sintácticamente. 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
62
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 incluirán 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 básica 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 cómo crear un procedimiento almacenado básico:
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
63
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 paràmetros de entrada
• Los procedimientos almacenados pueden recibir y devolver informaciòn, para lo cual se
emplean paràmetros de entrada y salida respectivamente.
• Los paràmetros de entrada posibilitan pasar informaciòn a un procedimiento, para que
un procedimiento almacenado admita paràmetros de entrada se deben declarar
variables como paràmetros al crearlo. La sntaxis es la siguiente:
Create procedure nombre
@nombreparametro tipo = valor por defecto
As sentencias
• Los paràmetros se definen luego del nombre del procedimiento, comenzando con el
signo arroba(@). Los paràmetros son locales al procedimiento, es decir, existen
solamente dentro del procedimiento.
• Cuando se ejecuta el procedimiento, debe darse valores a cada uno de los paràmetros
(en el orden que fueron definidos), a menos que se haya definido un valor por defecto.
• Luego de definir un paràmetro y su tipo, opcionalmente se puede especificar un valor
por defecto.
33. Procedimientos almacenados y paràmetros de salida
Julio Cesar Avellaneda Sua Analista y Desarrollador
Microsoft Certified Professional
DCE 5 Estrellas Platino
http://julitogtu.wordpress.com
64
Manual SQL V 1.0
• Los procedimientos almacenados pueden devolver informaciòn, para lo cual se emplean
paràmetros de salida. El valor se retorna quièn 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 nùmeros 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 nùmero 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
65
Manual SQL V 1.0