Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

materias:temas_adicionales_sql [2010/11/03 18:24]
caolarte
materias:temas_adicionales_sql [2011/01/24 15:30] (actual)
Línea 1: Línea 1:
 +==== Temas Adicionales SQL  ====
 +===== Vistas =====
 +Una vista es una tabla lógica que no contiene datos en sí misma y que permite 
 +acceder a los registros de otras tablas o vistas. Las tablas sobre las cuales está 
 + basada la vista se denominan //Tablas Base//. 
  
 +Las vistas puede ser utilizadas para: 
 +  * Restringir el acceso a ciertos usuarios sobre algunos atributos de tablas. 
 +  * Construir tablas producto de una consulta sobre varias tablas o vistas 
 +  * Almacenar en la base de datos las consultas que se realizan con mayor frecuencia 
 +
 +Sintaxis:
 +  CREATE VIEW <NOMBRE> AS <QUERY>; 
 +
 +Por ejemplo, dadas la siguientes tablas:
 +  CREATE TABLE DEPARTAMENTOS (ID SERIAL PRIMARY KEY, NOMBRE VARCHAR(50) NOT NULL);
 +  INSERT INTO DEPARTAMENTOS (NOMBRE) VALUES ('COMPRAS'),('CONTABILIDAD'),('VENTAS');
 +  CREATE TABLE EMPLEADOS (ID SERIAL PRIMARY KEY, NOMBRE VARCHAR(50) NOT NULL, SALARIO REAL, DEP_ID INT NOT NULL REFERENCES DEPARTAMENTOS(ID));
 +  INSERT INTO EMPLEADOS (NOMBRE, SALARIO,DEP_ID) VALUES ('JUAN PEREZ', 1000,1), ('PEDRO VEGA',2000,2), ('JAIME SALAZAR',1500,3);
 +
 +La siguiente vista tiene los datos de los empleados pero sin sus salarios:
 +  CREATE VIEW EMP AS SELECT ID,NOMBRE FROM EMPLEADOS;
 +
 +Si normalmente se genera el reporte de los empleados con salarios superiores a $2.000 por efectos de impuestos, la siguiente vista puede ser últil:
 +  CREATE VIEW IMP AS SELECT * FROM EMPLEADOS WHERE SALARIO >=2000;
 +
 +Finalmente, si con frecuencia se requiere el nombre del empleado con su departamento, podríamos crear la siguiente vista:
 +  CREATE VIEW DATOSEMP AS SELECT E.ID ID, E.NOMBRE EMPLEADO, D.NOMBRE DEPARTAMENTO FROM EMPLEADOS E INNER JOIN DEPARTAMENTOS D ON (E.DEP_ID = D.ID);
 +
 +TALLER: Crear una vista por cada una de las consultas SQL de este documento: {{:materias:taller-ar-sql.pdf|}}. 
 +
 +===== Indices =====
 +Los índices son estructuras que permiten recuperar registros más rápidamente. 
 +Tipos de índices:
 +  * Indices Lineales
 +  * Indices basados en árboles: Arboles B+
 +
 +
 +Syntaxis:
 +   CREATE INDEX EMP_NOM ON EMPLEADOS(NOMBRE);
 +
 +Ejemplo:
 +  create table x (id int primary key, 
 +    n1 real,
 +    n2 real,
 +    n3 real,
 +    n4 real,
 +    n5 real,
 +    n6 real,
 +    n7 real,
 +    n8 real,
 +    n9 real,
 +    n10 real,
 +    t1 text,
 +    t2 text,
 +    t3 text,
 +    t4 text,
 +    t5 text,
 +    t6 text,
 +    t7 text,
 +    t8 text,
 +    t9 text,
 +    t10 text
 +  ); 
 +
 +  create or replace function llenar(int) returns void as $$
 +  declare
 +   I integer;
 +  begin
 +   for I in 1..$1 LOOP
 +     insert into x values (I,   random(),random(),random(),random(),random(),random(),random(),random(),random(),random(),to_char(random(),'999999999999.99'),to_char(random(),'999999999999.99'),to_char(random(),'999999999999.99'),to_char(random(),'999999999999.99'),to_char(random(),'999999999999.99'),to_char(random(),'999999999999.99'),to_char(random(),'999999999999.99'),to_char(random(),'999999999999.99'),to_char(random(),'999999999999.99'),to_char(random(),'999999999999.99'));
 +   end loop;
 +  end; $$  LANGUAGE plpgsql; 
 +
 +Probar las siguientes consultas:
 +  SELECT * FROM X WHERE ID =3455;
 +  SELECT * FROM X WHERE ID =3455 AND N1 = 400;
 +  SELECT * FROM X WHERE N1 = 400;
 +  SELECT * FROM X WHERE ID =3455 OR N1 = 400;
 
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki