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: 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;
 
materias/temas_adicionales_sql.txt · Última modificación: 2011/01/24 15:30 (editor externo)
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki