EQUIPO 9 FRAGOSO PEÑA FERNANDO HUERTA GÓMEZ DANIEL PÉREZ OCHOA VALERI PÉREZ SAN JUAN ALDO PAILLES RUBIÑOS FRANCISCO NICOLÁS SQL SERVER
INSTRUCCIONES DE CONTROL EN T-SQL IF, ELSE La estructura de control  IF  en T-SQL y SQL ANSI no utiliza la palabra  THEN  si no que queda contenida entre el primer par de  BEGIN . .  END  que sucede a la instrucción  IF  y antecede a la instrucción  ELSE . IF EXISTS (SELECT * FROM CATEGORIAS WHERE Cod_Categoria= “CA”) BEGIN UPDATE CATEGORIAS SET Desc_Categoria= “Capataz” FROM CATEGORIAS WHERE Cod_Categorias= “CA” END ELSE BEGIN INSERT INTO CATEGORIAS (Cod_Categoria, Desc_Categoria) VALUES (“CA”, “Capataz”) END
La instrucción  IF  modifica la gestión del proceso en función que satisfaga la condición de ella. Lo que hace esta instrucción es fijarse si existe en la tabla categorías alguna categoría con el código de categoría “ CA ”. Si el código existe (la condición de la instrucción  IF  fue valuada como TRUE) modifica su descripción a  “Capataz” , pero si dicho código de categoría no existe ( la instrucción  IF  fue evaluada como FALSE) lo inserta en la tabla de categorías como la descripción en cuestión.
CASE . .  WHEN . .  ELSE La instrucción  CASE  se usa para evaluar un conjunto de condiciones, y en función de cual de ellas se cumpla, devolver un resultado entre muchos resultados posibles. SELECT “Categorías de los empleados de la Empresa” = CASE Cod_Categoria WHEN “AD” THEN  “puede ser Administrativo” WHEN “CA” THEN “puede ser Capataz” WHEN  “DI” THEN “puede ser Director” ELSE “ Pero no existe otra Categoría posible” END  FROM CATEGORIAS
Permite abreviar la consulta de rango entre dos valores dados. Por ejemplo, si se desea saber cuantos empleados de la empresa poseen un número de Legajo mayor a 1000 y menor a 5000. O sea, si están en el rango de Legajos de 1000 y 5000, se puede hacer la consulta de 2 formas diferentes, una con la instrucción  BETWEEN  y otra sin ella. Sin  BETWEEN SELECT * FROM EMPLEADOS WHERE (Legajo > = 1000) AND (Legajo < = 5000) Con  BETWEEN SELECT * FROM EMPLEADOS WHERE Legajo BETWEEN 1000 AND 5000 LA INSTRUCCIÓN BETWEEN
Uso de los cursores y la instrucción WHILE La instrucción  WHILE  se usa como un ciclo de control repetitivo que permite la ejecución de un conjunto de instrucciones de T-SQL de forma repetida, mientras que la condición se evalúa con el ciclo  WHILE  sea verdadera (TRUE) y se interrumpa la repetición en el momento que dicha condición se evalúa como falsa (FALSE). Dado que las consultas se realizan sobre la base de datos mediante una instrucción  SELECT  normalmente regresan un “conjunto de registros” que satisfacen la condición  WHERE  de dicha selección, se necesita una estructura que permita recuperar los registros de uno por uno a la vez.
Los  CURSORES  son las estructuras que nos permiten trabajar de a un registro por vez de las diferentes consultas que se realizan a la base de datos. Poseen ciertas características: El uso de cursores amplia el procesamiento de los resultados. Se pueden modificar los datos de la fila en la que se encuentra posicionado sin ningún tipo de inconveniente. Permiten definir distintos niveles de visibilidad de las modificaciones que se están realizando en los datos en cuestión. Se pueden utilizar en procedimientos almacenados, triggers o en secuencia de instrucciones de T-SQL. Poseen el inconveniente de cómo serializan el acceso a la información.
SET NOCOUNT ON //DECLARO LAS VARIABLES QUE VOY A USAR EN EL CURSOR DECLARE $Lega int, $Ape varchar (20), $Nom varchar (30), $CodCat char (2), Sueldo Money, $Fing datetime // DECLARO EL CURSOR Cursor_Empleados DECLARE Cursor_Empleados CURSOR DYNAMIC FOR SELECT Legajo, Apellido,  Nombre, Cod_Categoria, Fecha_Ingreso, Sueldo_Basico FROM Empleados WHERE Cod_Categoria = “AD” ORDER BY Legajo // ABRO EL CURSOR Cursor_Empleados OPEN Cursor_Empleados // ME POSICIONO EN EL 1ER REGISTRO Y ASIGNO VALORES A LAS VARIABLES FETCH NEXT FROM Cursor_Empleados INTO $Lega, $Ape, $Nom, $CodCat, $Fing, $Sueldo //MIENTRAS EXISTAN FILAS REPITO EL WHILE WHILE %%FETCH_STATUS = 0 BEGIN //ACTUALIZO EL SUELDO EN LA TABLA EMPLEADOS PARA ESE LEGAJO EN CUESTION //ESTO ACTUALIZA LA TABLA EMPLEADOS PUES EL CURSOR ES DINAMICO IF (year ($Fing) < 1999) BEGIN SET $Sueldo = $Sueldo * 1.2 END ELSE BEGIN SET $Sueldo = $Sueldo * 1.5 END // ME POSICIONO EN LA PROXIMA FILA DEL CURSOR FETCH NEXT FROM Cursor_Empleados INTO $Lega, $Ape, $Nom, $CodCat, $Fing, $Sueldo END //FIN DEL WHILE Y CIERRO EL CURSOR CLOSE Cursor_Empleados //LIBERO MEMORIA QUE UTILIZABA EL CURSOR DEALLOCATE Cursor_Empleados
COMBINACIONES DE TABLAS Para combinar tablas, se deben comparar una o más columnas (campos) de una tabla con una o más columnas (campos) de otra tabla. Como resultado se obtendrá un conjunto de filas (registros) que poseen las columnas (campos) seleccionadas de cada una de las tablas combinadas que cumplen con la o las condiciones de combinación. Al combinar tablas se puede utilizar la sintaxis del ANSI SQL definición de estándar de la sintaxis del lenguaje SQL básica, o la de SQL Server en cual es el lenguaje T-SQL.
COMBINACIONES INTERNAS Las combinaciones conectan dos tablas al cumplir una condición  de combinación que devuelve como resultado un conjunto de registros (filas) que cumplen con dicha condición. Estas combinaciones devuelven información cuando se encuentra en ambas tablas información equivalente. Los tipos de combinaciones internas son las equivalentes y las naturales.
Combinaciones Equivalentes La sintaxis SQL Server es: SELECT * FROM Empleados, Categorías WHERE Empleados.Cod_Categoria = Categorias.Cod_Categoria La sintaxis ANSI SQL es: SELECT * FROM Empleados INNER JOIN Categorias ON Empleados.Cod_Categoria = Categorias.Cod_Categoria
Combinaciones Naturales La Sintaxis SQL Server es: SELECT Empleados.*, Categorias.Desc_Categoria FROM Empleados, Categorías WHERE Empleados.Cod_Categoria= Categorias.Cod_Categoria La Sintaxis ANSI SQL es: SELECT Empleados.*, Categorias.Desc_Categoria FROM Empleados INNER JOIN Categorías ON Empleados.Cod_Categoria = Categorias.Cod_Categoria
COMBINACIONES CRUZADAS O SIN RESTRICCIÓN En general este tipo de combinaciones no es de mucha utilidad, a no ser que se desee saber cuales son todas las combinaciones posibles para realizar algún tipo de análisis estadístico o matemático. La Sintaxis SQL Server es: SELECT Empleados.*, Categorias.* FROM Empleados, Categorias La Sintaxis ANSI SQL es: SELECT Empleados.*, Cargos.* FROM Empleados CROSS JOIN Cargos ON
COMBINACIONES EXTERNAS   Este tipo de combinaciones sirve para buscar filas huérfanas. En SQL Server se pueden utilizar diferentes operadores: Incluye todas las filas de la primera tabla y solo las filas que coinciden de la segunda (es lo mismo utilizar un  LEFT OUTER JOIN,  combinación externa izquierda). Incluye todas las filas de la segunda tabla y solo las filas que coinciden de la primera tabla (es lo mismo realizar un  RIGHT OUTER JOIN , combinación externa derecha).
El inconveniente de estos operadores es que no se puede garantizar que siempre el conjunto de resultados sea correcto.  En ANSI SQL se utiliza la siguiente sintaxis: LEFT OUTER JOIN:  incluye todas las filas de la primera tabla (la de la izquierda) y solo las filas que coinciden de la segunda. RIGHT OUTER JOIN:  incluye todas las filas de la segunda tabla (la de la derecha) y solo las filas que coincidan de la primera tabla. FULL OUTER JOIN:  incluye todas las filas no coincidentes de ambas tablas.
AUTOCOMBINACIONES Una autocombinación  relaciona las filas de una tabla con otras filas de la misma tabla. Para la mayoría de autocombinaci0nes se emplean consultas de comparación. Ejemplo: Sintaxis SQL Server: SELECT DISTINCT C1.NombreContacto, C1.CargoContacto FROM Clientes C1, C2 WHERE C1.CargoContacto = C2.CargoContacto AND C1.IdCliente < =C2.IdCliente ORDER BY C1.CargoContacto Sintaxis ANSI SQL SELECT DISTINCT C1.NombreContacto, C1.CargoContacto FROM Clientes C1 INNER JOIN Clientes C2 ON C1.CargoContacto = C2.CargoContacto WHERE C1.IdCliente < =C2.IdCliente ORDER BY C1.CargoContacto
CONSULTAS DE AGRUPACIÓN Este tipo de consultas permiten obtener información agrupada de una o más tablas. La información obtenida con este tipo de consultas es cuantitativa y no cualitativa. Ejemplo: SELECT CargoContacto as Cargo, Count (*) as Cantidad FROM Clientes GROUP BY CargoContacto ORDER BY CargoContacto Donde: Count (*)  que es una función incorporada en SQL y por ende también en T-SQL que cuenta cuantas filas satisfacen la selección.   avg (*)  que calcula el promedio. sum (*)   que calcula la suma. GROUP BY  que agrupa por el campo o conjunto de campos que se describen después de ella.   ORDER BY , que ordena  por el campo o conjunto de campos que aparecen luego de ella.

BD_L8_EXP_ROZIC_CAP9_SQL

  • 1.
    EQUIPO 9 FRAGOSOPEÑA FERNANDO HUERTA GÓMEZ DANIEL PÉREZ OCHOA VALERI PÉREZ SAN JUAN ALDO PAILLES RUBIÑOS FRANCISCO NICOLÁS SQL SERVER
  • 2.
    INSTRUCCIONES DE CONTROLEN T-SQL IF, ELSE La estructura de control IF en T-SQL y SQL ANSI no utiliza la palabra THEN si no que queda contenida entre el primer par de BEGIN . . END que sucede a la instrucción IF y antecede a la instrucción ELSE . IF EXISTS (SELECT * FROM CATEGORIAS WHERE Cod_Categoria= “CA”) BEGIN UPDATE CATEGORIAS SET Desc_Categoria= “Capataz” FROM CATEGORIAS WHERE Cod_Categorias= “CA” END ELSE BEGIN INSERT INTO CATEGORIAS (Cod_Categoria, Desc_Categoria) VALUES (“CA”, “Capataz”) END
  • 3.
    La instrucción IF modifica la gestión del proceso en función que satisfaga la condición de ella. Lo que hace esta instrucción es fijarse si existe en la tabla categorías alguna categoría con el código de categoría “ CA ”. Si el código existe (la condición de la instrucción IF fue valuada como TRUE) modifica su descripción a “Capataz” , pero si dicho código de categoría no existe ( la instrucción IF fue evaluada como FALSE) lo inserta en la tabla de categorías como la descripción en cuestión.
  • 4.
    CASE . . WHEN . . ELSE La instrucción CASE se usa para evaluar un conjunto de condiciones, y en función de cual de ellas se cumpla, devolver un resultado entre muchos resultados posibles. SELECT “Categorías de los empleados de la Empresa” = CASE Cod_Categoria WHEN “AD” THEN “puede ser Administrativo” WHEN “CA” THEN “puede ser Capataz” WHEN “DI” THEN “puede ser Director” ELSE “ Pero no existe otra Categoría posible” END FROM CATEGORIAS
  • 5.
    Permite abreviar laconsulta de rango entre dos valores dados. Por ejemplo, si se desea saber cuantos empleados de la empresa poseen un número de Legajo mayor a 1000 y menor a 5000. O sea, si están en el rango de Legajos de 1000 y 5000, se puede hacer la consulta de 2 formas diferentes, una con la instrucción BETWEEN y otra sin ella. Sin BETWEEN SELECT * FROM EMPLEADOS WHERE (Legajo > = 1000) AND (Legajo < = 5000) Con BETWEEN SELECT * FROM EMPLEADOS WHERE Legajo BETWEEN 1000 AND 5000 LA INSTRUCCIÓN BETWEEN
  • 6.
    Uso de loscursores y la instrucción WHILE La instrucción WHILE se usa como un ciclo de control repetitivo que permite la ejecución de un conjunto de instrucciones de T-SQL de forma repetida, mientras que la condición se evalúa con el ciclo WHILE sea verdadera (TRUE) y se interrumpa la repetición en el momento que dicha condición se evalúa como falsa (FALSE). Dado que las consultas se realizan sobre la base de datos mediante una instrucción SELECT normalmente regresan un “conjunto de registros” que satisfacen la condición WHERE de dicha selección, se necesita una estructura que permita recuperar los registros de uno por uno a la vez.
  • 7.
    Los CURSORES son las estructuras que nos permiten trabajar de a un registro por vez de las diferentes consultas que se realizan a la base de datos. Poseen ciertas características: El uso de cursores amplia el procesamiento de los resultados. Se pueden modificar los datos de la fila en la que se encuentra posicionado sin ningún tipo de inconveniente. Permiten definir distintos niveles de visibilidad de las modificaciones que se están realizando en los datos en cuestión. Se pueden utilizar en procedimientos almacenados, triggers o en secuencia de instrucciones de T-SQL. Poseen el inconveniente de cómo serializan el acceso a la información.
  • 8.
    SET NOCOUNT ON//DECLARO LAS VARIABLES QUE VOY A USAR EN EL CURSOR DECLARE $Lega int, $Ape varchar (20), $Nom varchar (30), $CodCat char (2), Sueldo Money, $Fing datetime // DECLARO EL CURSOR Cursor_Empleados DECLARE Cursor_Empleados CURSOR DYNAMIC FOR SELECT Legajo, Apellido, Nombre, Cod_Categoria, Fecha_Ingreso, Sueldo_Basico FROM Empleados WHERE Cod_Categoria = “AD” ORDER BY Legajo // ABRO EL CURSOR Cursor_Empleados OPEN Cursor_Empleados // ME POSICIONO EN EL 1ER REGISTRO Y ASIGNO VALORES A LAS VARIABLES FETCH NEXT FROM Cursor_Empleados INTO $Lega, $Ape, $Nom, $CodCat, $Fing, $Sueldo //MIENTRAS EXISTAN FILAS REPITO EL WHILE WHILE %%FETCH_STATUS = 0 BEGIN //ACTUALIZO EL SUELDO EN LA TABLA EMPLEADOS PARA ESE LEGAJO EN CUESTION //ESTO ACTUALIZA LA TABLA EMPLEADOS PUES EL CURSOR ES DINAMICO IF (year ($Fing) < 1999) BEGIN SET $Sueldo = $Sueldo * 1.2 END ELSE BEGIN SET $Sueldo = $Sueldo * 1.5 END // ME POSICIONO EN LA PROXIMA FILA DEL CURSOR FETCH NEXT FROM Cursor_Empleados INTO $Lega, $Ape, $Nom, $CodCat, $Fing, $Sueldo END //FIN DEL WHILE Y CIERRO EL CURSOR CLOSE Cursor_Empleados //LIBERO MEMORIA QUE UTILIZABA EL CURSOR DEALLOCATE Cursor_Empleados
  • 9.
    COMBINACIONES DE TABLASPara combinar tablas, se deben comparar una o más columnas (campos) de una tabla con una o más columnas (campos) de otra tabla. Como resultado se obtendrá un conjunto de filas (registros) que poseen las columnas (campos) seleccionadas de cada una de las tablas combinadas que cumplen con la o las condiciones de combinación. Al combinar tablas se puede utilizar la sintaxis del ANSI SQL definición de estándar de la sintaxis del lenguaje SQL básica, o la de SQL Server en cual es el lenguaje T-SQL.
  • 10.
    COMBINACIONES INTERNAS Lascombinaciones conectan dos tablas al cumplir una condición de combinación que devuelve como resultado un conjunto de registros (filas) que cumplen con dicha condición. Estas combinaciones devuelven información cuando se encuentra en ambas tablas información equivalente. Los tipos de combinaciones internas son las equivalentes y las naturales.
  • 11.
    Combinaciones Equivalentes Lasintaxis SQL Server es: SELECT * FROM Empleados, Categorías WHERE Empleados.Cod_Categoria = Categorias.Cod_Categoria La sintaxis ANSI SQL es: SELECT * FROM Empleados INNER JOIN Categorias ON Empleados.Cod_Categoria = Categorias.Cod_Categoria
  • 12.
    Combinaciones Naturales LaSintaxis SQL Server es: SELECT Empleados.*, Categorias.Desc_Categoria FROM Empleados, Categorías WHERE Empleados.Cod_Categoria= Categorias.Cod_Categoria La Sintaxis ANSI SQL es: SELECT Empleados.*, Categorias.Desc_Categoria FROM Empleados INNER JOIN Categorías ON Empleados.Cod_Categoria = Categorias.Cod_Categoria
  • 13.
    COMBINACIONES CRUZADAS OSIN RESTRICCIÓN En general este tipo de combinaciones no es de mucha utilidad, a no ser que se desee saber cuales son todas las combinaciones posibles para realizar algún tipo de análisis estadístico o matemático. La Sintaxis SQL Server es: SELECT Empleados.*, Categorias.* FROM Empleados, Categorias La Sintaxis ANSI SQL es: SELECT Empleados.*, Cargos.* FROM Empleados CROSS JOIN Cargos ON
  • 14.
    COMBINACIONES EXTERNAS Este tipo de combinaciones sirve para buscar filas huérfanas. En SQL Server se pueden utilizar diferentes operadores: Incluye todas las filas de la primera tabla y solo las filas que coinciden de la segunda (es lo mismo utilizar un LEFT OUTER JOIN, combinación externa izquierda). Incluye todas las filas de la segunda tabla y solo las filas que coinciden de la primera tabla (es lo mismo realizar un RIGHT OUTER JOIN , combinación externa derecha).
  • 15.
    El inconveniente deestos operadores es que no se puede garantizar que siempre el conjunto de resultados sea correcto. En ANSI SQL se utiliza la siguiente sintaxis: LEFT OUTER JOIN: incluye todas las filas de la primera tabla (la de la izquierda) y solo las filas que coinciden de la segunda. RIGHT OUTER JOIN: incluye todas las filas de la segunda tabla (la de la derecha) y solo las filas que coincidan de la primera tabla. FULL OUTER JOIN: incluye todas las filas no coincidentes de ambas tablas.
  • 16.
    AUTOCOMBINACIONES Una autocombinación relaciona las filas de una tabla con otras filas de la misma tabla. Para la mayoría de autocombinaci0nes se emplean consultas de comparación. Ejemplo: Sintaxis SQL Server: SELECT DISTINCT C1.NombreContacto, C1.CargoContacto FROM Clientes C1, C2 WHERE C1.CargoContacto = C2.CargoContacto AND C1.IdCliente < =C2.IdCliente ORDER BY C1.CargoContacto Sintaxis ANSI SQL SELECT DISTINCT C1.NombreContacto, C1.CargoContacto FROM Clientes C1 INNER JOIN Clientes C2 ON C1.CargoContacto = C2.CargoContacto WHERE C1.IdCliente < =C2.IdCliente ORDER BY C1.CargoContacto
  • 17.
    CONSULTAS DE AGRUPACIÓNEste tipo de consultas permiten obtener información agrupada de una o más tablas. La información obtenida con este tipo de consultas es cuantitativa y no cualitativa. Ejemplo: SELECT CargoContacto as Cargo, Count (*) as Cantidad FROM Clientes GROUP BY CargoContacto ORDER BY CargoContacto Donde: Count (*) que es una función incorporada en SQL y por ende también en T-SQL que cuenta cuantas filas satisfacen la selección. avg (*) que calcula el promedio. sum (*) que calcula la suma. GROUP BY que agrupa por el campo o conjunto de campos que se describen después de ella. ORDER BY , que ordena por el campo o conjunto de campos que aparecen luego de ella.