Sie sind auf Seite 1von 54

Ing.

Carlos Manuel Rodrguez Palomino

TRANSACTION - SQL SERVER

AGENDA

1. TIPOS DE DATOS Y DEFINICIN DE VARIABLES, VALORES NULOS. 2. COLUMNAS CON CONTADOR, MODIFICAR ESTRUCTURA DE LA TABLA. 3. SENTENCIAS Y FUNCIONES BSICAS DE TRANSACT SQL. 4. CREAR Y EJECUTAR SCRIPTS DE CONSULTA. 5. USO DE CRITERIOS Y CLASULAS. IN LIKE, BETWEEN. 6. USO DE DISTINC, TOP , CASE. 7. INSERCIN DE REGISTROS. 8. APLICACIONES Y CASOS PRCTICAS

1. TIPOS DE DATOS, DEFINICIN DE VARIABLES, VALORES NULOS


1.1 TIPOS DE DATOS
TIPOS DE DATOS NMERICOS TIPOS DE DATOS DE CARCTER

TIPOS DE FECHA
TIPOS DE DATOS BINARIOS. TIPOS DE DATOS XML OTROS TIPOS DE DATOS. TIPOS DE DATOS PERSONALIZADOS.
Ing. Carlos Manuel Rodrguez Palomino
TRANSACTION - SQL SERVER

Datos numricos
SQL Server dispone de varios tipos de datos numricos. Cuanto mayor sea el nmero que puedan almacenar mayor ser en consecuencia el espacio utilizado para almacenarlo. Como regla general se recomienda usar el tipo de dato mnimo posible. Todos los datos numricos admiten el valor NULL.

Ing. Carlos Manuel Rodrguez Palomino

TRANSACTION - SQL SERVER

Datos numricos
Todos los tipos de datos enteros pueden marcarse con la propiedad identity para hacerlos auto numricos.

Ing. Carlos Manuel Rodrguez Palomino

TRANSACTION - SQL SERVER

Datos de carcter

Ing. Carlos Manuel Rodrguez Palomino

TRANSACTION - SQL SERVER

Datos de fecha

Formato 24/8/2013 ------------> DD/MM/YYYY August 24,2013 ------> MM/DD/YYYY 2013 AUGUST 24 ----> YYYY/MM/DD

Ing. Carlos Manuel Rodrguez Palomino

TRANSACTION - SQL SERVER

Datos de binarios

Datos de XML
XML. Es una de las herramientas ms tiles mejoras que incorporadas en el SQL Server, el soporte nativo para XML. Como podemos deducir, este tipo de datos se utiliza para almacenar datos XML.

Ing. Carlos Manuel Rodrguez Palomino

TRANSACTION - SQL SERVER

Otros tipos de datos

Tipos de datos personalizados

Ing. Carlos Manuel Rodrguez Palomino

TRANSACTION - SQL SERVER

1. TIPOS DE DATOS, DEFINICIN DE VARIABLES, VALORES NULOS


1.1 DEFINICIN DE VARIABLES EN TRANSACT SQL
DECLARAR VARIABLES ASIGNAR VARIABLES

Ing. Carlos Manuel Rodrguez Palomino

TRANSACTION - SQL SERVER

Declarar variables en Transact SQL


Una variable es un valor identificado por un nombre (identificador) sobre el que podemos realizar modificaciones. En Transact SQL los identificadores de variables deben comenzar por el caracter @, es decir, el nombre de una variable debe comenzar por @. Para declarar variables en Transact SQL debemos utilizar la palabra clave declare, seguido del identificador y tipo de datos de la variable.

Ing. Carlos Manuel Rodrguez Palomino

TRANSACTION - SQL SERVER

Asignar variables en Transact SQL


En Transact SQL podemos asignar valores a una variable de varias formas:
A travs de la Instruccin set.

Ing. Carlos Manuel Rodrguez Palomino

TRANSACTION - SQL SERVER

Asignar variables en Transact SQL


En Transact SQL podemos asignar valores a una variable de varias formas:
Utilizando una Sentencia SELECT.

Un punto a tener en cuenta cuando asignamos variables de este modo, es que si la consulta SELECT devuelve ms de un registro, las variables quedarn asignadas con los valores de la ltima fila devuelta.
Ing. Carlos Manuel Rodrguez Palomino
TRANSACTION - SQL SERVER

Asignar variables en Transact SQL


En Transact SQL podemos asignar valores a una variable de varias formas:
Realizando un FETCH de un cursor.

Ing. Carlos Manuel Rodrguez Palomino

TRANSACTION - SQL SERVER

1. TIPOS DE DATOS, DEFINICIN DE VARIABLES, VALORES NULOS


En algunos casos no se dispone de un valor para asignar a una columna.
Por ejemplo: fecha de emisin del registro

SQL provee un valor especial para estos casos: NULL


create table T1 ( col1 integer, col2 integer, col3 integer) insert into T1(col1, col3) values (9,9)--------> El valor de col2 es NULL insert into T1(col1, col2, col3) values (8,8,8)
Realizar las siguientes consultas: 1. Select * from t1 2. Select * from t1 where col2 IS NULL 3. Select * from t1 where col2 IS NOT NULL
Ing. Carlos Manuel Rodrguez Palomino
TRANSACTION - SQL SERVER

1. TIPOS DE DATOS, DEFINICIN DE VARIABLES, VALORES NULOS


La presencia de Null genera algunas complicaciones

Operador especial para controlar si un valor es nulo (IS NULL o IS NOT NULL). edad > 21 - true o false Cundo la edad es null? Qu pasa con el AND, OR y NOT ? Surge la necesidad de una 3-valued logic (true, false and unknown). Hay que ser cuidadoso con la clausula WHERE. En SQL el WHERE elimina toda fila que NO evalua a TRUE en el WHERE (O sea condiciones que evaluan a False o Unknown no califican.)

Ing. Carlos Manuel Rodrguez Palomino

TRANSACTION - SQL SERVER

2. Columna con contador


En la mayora de los sistemas gestores de bases de datos tenemos un tipo de datos de tipo contador, autonumrico, autoincremental, etc. Este tipo hace que el propio sistema es el encargado de rellenar el campo con un valor que va incrementando conforme se crean ms filas de datos en la tabla.
Las columnas de este tipo se utilizan normalmente para numerar las filas de la tabla, como no habrn dos filas con el mismo valor (el sistema se encarga de incrementar el valor cada vez que se crea una nueva fila), estos campos se suelen utilizar como claves primarias.
Ing. Carlos Manuel Rodrguez Palomino
TRANSACTION - SQL SERVER

2. Modificar la estructura de una tabla


En la mayora de los sistemas gestores de bases de datos tenemos un tipo de datos de tipo contador, autonumrico, autoincremental, etc. Este tipo hace que el propio sistema es el encargado de rellenar el campo con un valor que va incrementando conforme se crean ms filas de datos en la tabla. Las columnas de este tipo se utilizan normalmente para numerar las filas de la tabla, como no habrn dos filas con el mismo valor (el sistema se encarga de incrementar el valor cada vez que se crea una nueva fila), estos campos se suelen utilizar como claves primarias.
ALTER TABLE tCoches alter column marca int not null;
La opcion alter column es propia de SQL Server. Para modificar el tipo de datos de una tabla debemos consultar la ayuda del gestor de bases de datos.

ALTER TABLE tCoches add constraint FK_Coches_Marcas foreign key (marca) references tMarcas (codigo);

Ing. Carlos Manuel Rodrguez Palomino

TRANSACTION - SQL SERVER

3. SENTENCIAS Y FUNCIONES BSICAS DE TRANSACT SQL.

a) SENTENCIAS

Ing. Carlos Manuel Rodrguez Palomino

TRANSACTION - SQL SERVER

Estructuras de Control
Estructura Condicional IF

Ing. Carlos Manuel Rodrguez Palomino

TRANSACTION - SQL SERVER

Estructuras de Control
Estructura Condicional CASE

Ing. Carlos Manuel Rodrguez Palomino

TRANSACTION - SQL SERVER

Estructuras de Case
Estructura Condicional WHILE

Ing. Carlos Manuel Rodrguez Palomino

TRANSACTION - SQL SERVER

Estructuras de Case
Estructura Condicional WHILE - CONTINUE

Ing. Carlos Manuel Rodrguez Palomino

TRANSACTION - SQL SERVER

Estructuras de Case
Estructura Condicional WHILE - BREAK

Ing. Carlos Manuel Rodrguez Palomino

TRANSACTION - SQL SERVER

a) Es

Ing. Carlos Manuel Rodrguez Palomino

TRANSACTION - SQL SERVER

SENTENCIAS

Ing. Carlos Manuel Rodrguez Palomino

TRANSACTION - SQL SERVER

SELECT
Lo que hace una consulta SELECT, es obtener datos de una Tabla determinada, en las que se especifican filas y columnas. La sintaxis bsica de una consulta SELECT es:

En la consulta anterior, el asterisco (*) indica que deben recuperarse todas las columnas de la tabla nombreDeTabla. Ahora para recuperar solo ciertas columnas de una tabla, debemos de reemplazar el asterisco (*), por los nombres de las columnas, separando cada columna con una coma. Por ejemplo, para recuperar solamente las columnas IdAlumno, ApeAlumno, NomAlumno, para todas las filas de la tabla Alumno. Utilizamos la siguiente consulta:

Ing. Carlos Manuel Rodrguez Palomino

TRANSACTION - SQL SERVER

WHERE
En la mayora de casos es necesario localizar, en una base de datos, filas que cumplan con ciertos criterios de seleccin. SQL utiliza la clusula WHERE en una consulta SELECT para especificar los criterios de seleccin para la consulta. La forma bsica de una consulta SELECT con criterios condicin de seleccin es:
Los criterios de la clusula WHERE pueden contener lo siguientes operadores de comparacin: =, >, <, >=, <=, !=, <>, IN, NOT IN, BETWEEN, NOT BETWEEN, LIKE. Adems, se puede construir condiciones mltiples usando los operadores lgicos AND, OR y NOT. Se puede utilizar parntesis si se desea forzar algn orden de evaluacin.

Ing. Carlos Manuel Rodrguez Palomino

TRANSACTION - SQL SERVER

ORDER BY
ER BY.- El resultado de una consulta puede ordenarse en forma ascendente o descendente, mediante el uso de la clusula ODER BY opcional. La forma bsica de una instruccin SELECT con una clusula ORDER BY es:

En donde ASC especifica el orden ascendente (de menor a mayor), DESC especifica el orden descendente (de mayor a menor) y columna1 especifica la columna en la cual se basa el ordenamiento. Por ejemplo, para obtener la lista de cursos en orden ascendente por nombre de curso.

Ing. Carlos Manuel Rodrguez Palomino

TRANSACTION - SQL SERVER

b)CLAUSULAS
GROUP BY: Esta clausula ordena por grupos.

SELECT column_name, aggregate_function(column_name) FROM table_name WHERE column_name operator value GROUP BY column_name;
HAVING: Se utiliza cuando se emplea funciones agregadas.

SELECT column_name, aggregate_function(column_name) FROM table_name WHERE column_name operator value GROUP BY column_name HAVING aggregate_function(column_name) operator value
Ing. Carlos Manuel Rodrguez Palomino
TRANSACTION - SQL SERVER

c) FUNCIONES
AVG(): Devuelve el promedio de una columna de datos.

SELECT AVG(column_name) FROM table_name


COUNT(): Cuenta la cantidad de registros en una columna de datos.

SELECT COUNT(column_name) FROM table_name;


FIRST(): Devuelve el primer valor de una columna de datos:

SELECT FIRST(column_name) FROM table_name;


LAST(): Devuelve la ultimo el primer valor de una columna de datos:

SELECT LAST(column_name) FROM table_name;


MAX(): Devuelve el mximo valor de una columna de datos.

SELECT MAX(column_name) FROM table_name;


Ing. Carlos Manuel Rodrguez Palomino
TRANSACTION - SQL SERVER

MIN(): Devuelve el menor valor de una columna de datos.

SELECT MIN(column_name) FROM table_name


SUM(): Devuelve la suma de todos los registros en una columna de datos.

SELECT SUM(column_name) FROM table_name;


UCASE(): Convierte una cadena a mayusculas de una columna de datos.

SELECT UCASE(column_name) FROM table_name


LCASE(): Convierte una cadena a minusculas de una columna de datos.

SELECT LCASE(column_name) FROM table_name;


MID(): Se utiliza para extraer caracteres de un campo de texto.

SELECT MID(column_name,start[,length]) FROM table_name;


LEN(): Devuelve la longitud del valor en un campo de texto.

SELECT LEN(column_name) FROM table_name;


Ing. Carlos Manuel Rodrguez Palomino
TRANSACTION - SQL SERVER

ROUND(): Se utiliza para redondear un campo numrico.

SELECT ROUND(column_name,decimals) FROM table_name;


NOW(): Devuelve la fecha y ahora actuales.

SELECT NOW() FROM table_name;


FORMATO(): Se utiliza para dar formato a un campo a mostrar.

SELECT FORMAT(column_name,format) FROM table_name;

Ing. Carlos Manuel Rodrguez Palomino

TRANSACTION - SQL SERVER

USO DE CRITERIOS Y CLASULAS. IN LIKE, BETWEEN.

IN
El operador IN permite especificar varios valores en una clusula WHERE.
SELECT column_name(s) FROM table_name WHERE column_name IN (value1,value2,...);

EJEMPLO
SELECT * FROM Customers WHERE City IN ('Paris','London');

Ing. Carlos Manuel Rodrguez Palomino

TRANSACTION - SQL SERVER

LIKE
Existe un operador relacional que se usa para realizar comparaciones exclusivamente de cadenas, "like" y "not like".
SELECT column_name(s) FROM table_name WHERE column_name LIKE pattern;

Entonces el operador LIKE,nos permite comparar trozos de cadenas de caracteres para realizar consultas.
select *from libros where autor like "%Borges%";

El smbolo "%" (porcentaje) reemplaza cualquier cantidad de caracteres (incluyendo ningn carcter). Es un carcter comodn. "like" y "not like" son operadores de comparacin que sealan igualdad o diferencia.
Ing. Carlos Manuel Rodrguez Palomino
TRANSACTION - SQL SERVER

LIKE y LIKE NOT


Para seleccionar todos los libros que comiencen con "M":
select *from libros where titulo like 'M%';

Note que el smbolo "%" ya no est al comienzo, con esto indicamos que el ttulo debe tener como primera letra la "M" y luego, cualquier cantidad de caracteres. Para seleccionar todos los libros que NO comiencen con "M":
select *from libros where titulo not like 'M%';

Ing. Carlos Manuel Rodrguez Palomino

TRANSACTION - SQL SERVER

EJEMPLOS
... like '[a-cf-i]%': busca cadenas que comiencen con a,b,c,f,g,h o i;
... like '[-acfi]%': busca cadenas que comiencen con -,a,c,f o i; ... like 'A[_]9%': busca cadenas que comiencen con 'A_9'; ... like 'A[nm]%': busca cadenas que comiencen con 'An' o 'Am

... like '%[%]%': busca cadenas que contengan el signo '%'; ... like '%[_]%': busca cadenas que contengan el signo '_'; ... like '%[[]%': busca cadenas que contengan el signo '[';

El cuarto caracter comodn es [^] reemplaza cualquier caracter NO presente en el conjunto especificado dentro de los corchetes.
Ing. Carlos Manuel Rodrguez Palomino
TRANSACTION - SQL SERVER

EJEMPLOS
"like" se emplea con tipos de datos char, nchar, varchar, nvarchar o datetime. Si empleamos "like" con tipos de datos que no son caracteres, SQL Server convierte (si es posible) el tipo de dato a carcter.
Por ejemplo, queremos buscar todos los libros cuyo precio se encuentre entre 10.00 y 19.99:
select titulo,precio from libros where precio like '1_.%';

Queremos los libros que no incluyan centavos en sus precios:

select titulo,precio from libros where precio like '%.00';

Ing. Carlos Manuel Rodrguez Palomino

TRANSACTION - SQL SERVER

BETWEEN
Hemos visto los operadores relacionales: = (igual), <> (distinto), > (mayor), < (menor), >= (mayor o igual), <= (menor o igual), is null/is not null (si un valor es NULL o no).
Otro operador relacional es "between", trabajan con intervalos de valores.

Hasta ahora, para recuperar de la tabla "libros" los libros con precio mayor o igual a 20 y menor o igual a 40, usamos 2 condiciones unidas por el operador lgico "and":
SELECT column_name(s) FROM table_name WHERE column_name BETWEEN value1 AND value2;

Ing. Carlos Manuel Rodrguez Palomino

TRANSACTION - SQL SERVER

NOT BETWEEN
Between" significa "entre". Trabaja con intervalo de valores. Este operador se puede emplear con tipos de datos numricos y money (en tales casos incluyen los valores mnimo y mximo) y tipos de datos fecha y hora (incluye slo el valor mnimo).Otro operador relacional es "between", trabajan con intervalos de valores.
Si agregamos el operador "not" antes de "between" el resultado se invierte, es decir, se recuperan los registros que estn fuera del intervalo especificado. Por ejemplo, recuperamos los libros cuyo precio NO se encuentre entre 20 y 35, es decir, los menores a 15 y mayores a 25:
select *from libros where precio not between 20 and 35;

Ing. Carlos Manuel Rodrguez Palomino

TRANSACTION - SQL SERVER

AGENDA
USO DE DISTINC, TOP , CASE.

DISTINC
Con la clusula "distinct" se especifica que los registros con ciertos datos duplicados sean obviadas en el resultado.
SELECT DISTINCT column_name,column_name FROM table_name;

Note que en los tres casos anteriores aparece "null" como un valor para "autor" Si slo queremos la lista de autores conocidos, es decir, no queremos incluir "null" en la lista, podemos utilizar la sentencia siguiente:
select distinct autor from libros where autor is not null;

Ing. Carlos Manuel Rodrguez Palomino

TRANSACTION - SQL SERVER

EJEMPLOS DISTINC
Para contar los distintos autores, sin considerar el valor "null" usamos:
select count(distinct autor) from libros;

Note que si contamos los autores sin "distinct", no incluir los valores "null" pero si los repetidos:
select count(autor) from libros;

Podemos combinarla con "where". Por ejemplo, queremos conocer los distintos autores de la editorial "Planeta":
select distinct autor from libros where editorial='Planeta';

Ing. Carlos Manuel Rodrguez Palomino

TRANSACTION - SQL SERVER

EJEMPLOS DISTINC
Tambin puede utilizarse con "group by" para contar los diferentes autores por editorial:
select editorial, count(distinct autor) from libros group by editorial;

La clusula "distinct" afecta a todos los campos presentados. Para mostrar los ttulos y editoriales de los libros sin repetir ttulos ni editoriales, usamos:
select distinct titulo,editorial from libros order by titulo;

Note que los registros no estn duplicados, aparecen ttulos iguales pero con editorial diferente, cada registro es diferente.La palabra clave "distinct" no est permitida con las clusulas "compute" y "compute by". Entonces, "distinct" elimina registros duplicados.

Ing. Carlos Manuel Rodrguez Palomino

TRANSACTION - SQL SERVER

TOP
La palabra clave "top" se emplea para obtener slo una cantidad limitada de registros, los primeros n registros de una consulta.
SELECT TOP number|percent column_name(s) FROM table_name;

Con la siguiente consulta obtenemos todos los datos de los primeros 2 libros de la tabla:
select top 2 *from libros;

Se puede combinar con "order by":


select top 3 titulo,autor from libros order by autor;

Ing. Carlos Manuel Rodrguez Palomino

TRANSACTION - SQL SERVER

TOP Y ORDER BY
Cuando se combina con "order by" es posible emplear tambin la clusula "with ties". Esta clusula permite incluir en la seleccion, todos los registros que tengan el mismo valor del campo por el que se ordena, que el ltimo registro retornado si el ltimo registro retornado (es decir, el nmero n) tiene un valor repetido en el registro n+1. Es decir, si el valor del campo por el cual se ordena del ltimo registro retornado (el nmero n) est repetido en los siguientes registros (es decir, el n+1 tiene el mismo valor que n, y el n+2, etc.), lo incluye en la seleccin.
select top 3 with ties *from libros order by autor;

Esta consulta solicita el retorno de los primeros 3 registros; en caso que el registro nmero 4 (y los posteriores), tengan el mismo valor en "autor" que el ltimo registro retornado (nmero 3), tambin aparecern en la seleccin. Si colocamos un valor para "top" que supera la cantidad de registros de la tabla, SQL Server muestra todos los registros.

Ing. Carlos Manuel Rodrguez Palomino

TRANSACTION - SQL SERVER

CASE
CASE se utiliza para brindar un tipo de lgica "si-entonces-otro" para SQL. Su sintaxis es:
SELECT CASE (Column_name(s) WHEN "condition1" THEN "result1" WHEN "condition2" THEN "result2" ... [ELSE "resultN"] END FROM Table_name";

"condition" puede ser un valor esttico o una expresin. La clusula ELSE es opcional.

Ing. Carlos Manuel Rodrguez Palomino

TRANSACTION - SQL SERVER

EJEMPLO CASE

Si deseamos multiplicar las sumas de ventas de 'Los Angeles' por 2 y las sumas de ventas de 'San Diego' por 1,5, ingresamos, Nuevas Ventas" es el nombre que se le otorga a la columna con la instruccin CASE
SELECT Store_Name, CASE Store_Name WHEN 'Los Angeles' THEN Sales * 2 WHEN 'San Diego' THEN Sales * 1.5 ELSE Sales END "Nuevas Ventas", Txn_Date FROM Store_Information;
Ing. Carlos Manuel Rodrguez Palomino
TRANSACTION - SQL SERVER

INSERCIN DE REGISTROS

Insercin individual de filas


Para realizar la insercin individual de filas SQL posee la instruccin INSERT INTO. La insercin individual de filas es la que ms comnmente utilizaremos. Su sintaxis es la siguiente:

El siguiente muestra la insercin de un registro en la tabla precios.

Ing. Carlos Manuel Rodrguez Palomino

TRANSACTION - SQL SERVER

Insercin mltiples de filas


Tambin es posible insertar en una tabla el resultado de una consulta SELECT. De este modo se insertarn tantas filas como haya devuelto la consulta SELECT.

Ing. Carlos Manuel Rodrguez Palomino

TRANSACTION - SQL SERVER

AGENDA

1. TIPOS DE DATOS Y DEFINICIN DE VARIABLES, VALORES NULOS. 2. COLUMNAS CON CONTADOR, MODIFICAR ESTRUCTURA DE LA TABLA. 3. SENTENCIAS Y FUNCIONES BSICAS DE TRANSACT SQL. 4. CREAR Y EJECUTAR SCRIPTS DE CONSULTA. 5. USO DE CRITERIOS Y CLASULAS. IN LIKE, BETWEEN. 6. USO DE DISTINC, TOP , CASE. 7. INSERCIN DE REGISTROS. 8. APLICACIONES Y CASOS PRCTICAS