69820862 Introduccion a SQL

66
V 1.0 Manual SQL Introducción al lenguaje SQL Julio Cesar Avellaneda Sua

Transcript of 69820862 Introduccion a SQL

Page 1: 69820862 Introduccion a SQL

V 1.0

Manual SQL Introducción al lenguaje SQL Julio Cesar Avellaneda Sua

Page 2: 69820862 Introduccion a SQL

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

Page 3: 69820862 Introduccion a SQL

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

Page 4: 69820862 Introduccion a SQL

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

Page 5: 69820862 Introduccion a SQL

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 (

Page 6: 69820862 Introduccion a SQL

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

Page 7: 69820862 Introduccion a SQL

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.

Page 8: 69820862 Introduccion a SQL

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:

Page 9: 69820862 Introduccion a SQL

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

Page 10: 69820862 Introduccion a SQL

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

Page 11: 69820862 Introduccion a SQL

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 (

Page 12: 69820862 Introduccion a SQL

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,

)

Page 13: 69820862 Introduccion a SQL

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

Page 14: 69820862 Introduccion a SQL

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”.

Page 15: 69820862 Introduccion a SQL

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

Page 16: 69820862 Introduccion a SQL

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.

Page 17: 69820862 Introduccion a SQL

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

Page 18: 69820862 Introduccion a SQL

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:

Page 19: 69820862 Introduccion a SQL

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

Page 20: 69820862 Introduccion a SQL

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

Page 21: 69820862 Introduccion a SQL

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)

Page 22: 69820862 Introduccion a SQL

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.

Page 23: 69820862 Introduccion a SQL

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’)

Page 24: 69820862 Introduccion a SQL

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

Page 25: 69820862 Introduccion a SQL

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(*)

Page 26: 69820862 Introduccion a SQL

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)

Page 27: 69820862 Introduccion a SQL

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.

Page 28: 69820862 Introduccion a SQL

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

Page 29: 69820862 Introduccion a SQL

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.

Page 30: 69820862 Introduccion a SQL

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.

Page 31: 69820862 Introduccion a SQL

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.

Page 32: 69820862 Introduccion a SQL

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:

Page 33: 69820862 Introduccion a SQL

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

Page 34: 69820862 Introduccion a SQL

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’

Page 35: 69820862 Introduccion a SQL

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

Page 36: 69820862 Introduccion a SQL

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’

Page 37: 69820862 Introduccion a SQL

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.

Page 38: 69820862 Introduccion a SQL

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”.

Page 39: 69820862 Introduccion a SQL

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:

Page 40: 69820862 Introduccion a SQL

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.

Page 41: 69820862 Introduccion a SQL

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

Page 42: 69820862 Introduccion a SQL

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

Page 43: 69820862 Introduccion a SQL

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

Page 44: 69820862 Introduccion a SQL

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)

Page 45: 69820862 Introduccion a SQL

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

Page 46: 69820862 Introduccion a SQL

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,

Page 47: 69820862 Introduccion a SQL

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

Page 48: 69820862 Introduccion a SQL

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:

Page 49: 69820862 Introduccion a SQL

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.

Page 50: 69820862 Introduccion a SQL

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).

Page 51: 69820862 Introduccion a SQL

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”)

Page 52: 69820862 Introduccion a SQL

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

Page 53: 69820862 Introduccion a SQL

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

Page 54: 69820862 Introduccion a SQL

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:

Page 55: 69820862 Introduccion a SQL

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

Page 56: 69820862 Introduccion a SQL

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:

Page 57: 69820862 Introduccion a SQL

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:

Page 58: 69820862 Introduccion a SQL

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 =

Page 59: 69820862 Introduccion a SQL

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.

Page 60: 69820862 Introduccion a SQL

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

Page 61: 69820862 Introduccion a SQL

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.

Page 62: 69820862 Introduccion a SQL

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

Page 63: 69820862 Introduccion a SQL

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

Page 64: 69820862 Introduccion a SQL

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

Page 65: 69820862 Introduccion a SQL

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.

Page 66: 69820862 Introduccion a SQL

Julio Cesar Avellaneda Sua Analista y Desarrollador

Microsoft Certified Professional

DCE 5 Estrellas Platino

http://julitogtu.wordpress.com

65

Manual SQL V 1.0