Está en la página 1de 64

Funciones para el uso de fechas y horas

current_date: retorna la fecha actual.


select current_date; devuelve: 2013-06-01

current_time: retorna la hora actual con la zona horaria.


select current_time; Retorna: "20:40:19.72105

current_timestamp: retorna la fecha y la hora actual con la zona horaria.


select current_timestamp; Retorna: "2013-0601 20:42:38.024-05"

extract(valor from current_date): retorna una parte de la fecha.


select extract(year from current_date); Retorna el ao '2013 select extract(month from current_date); Retorna el mes 6' select extract(day from current_date); Retorna el da '1

extract(valor from current_time): retorna una parte de la hora.


select extract(hour from current_time);Retorna la hora 20 select extract(minute from current_time);Retorna la hora 56' select extract(second from current_time);Retorna la hora 23.529

Otros datos a extraer:


select extract(century from current_date); Retorna el siglo '21' select extract(dow from current_timestamp); Retorna el da de la semana 6' select extract(doy from current_timestamp); Retorna el da del ao 152' select extract(week from current_timestamp); Retorna el nmero de semana dentro del ao 22' select extract(quarter from current_timestamp); Retorna en que cuarto del ao se ubica la fecha 2 Si se quiere trabajar con una fecha especfica: select extract( year from date 2012-08-25); retorna 2012

El ITT almacena los datos de sus alumnos en una tabla denominada "alumnos". Cree la tabla alumnos eligiendo el tipo de dato adecuado para cada campo: control, apellido, nombre, domicilio, fechaingreso, fecha_nacimiento. Ingrese un alumno empleando distintos separadores para las fechas Ingrese otro alumno empleando solamente un dgito para da y mes y 2 para el ao Ingrese un alumnos empleando 2 dgitos para el ao de la fecha de ingreso y "null" en "fechanacimiento Muestre todos los alumnos que ingresaron antes del 2008-2011. Muestre todos los alumnos que tienen "null" en "fechanacimiento": Muestre el ao de nacimiento de todos los alumnos.

Ordenar registros (order by)


Podemos ordenar el resultado de un "select" para que los registros se muestren ordenados por algn campo, para ello usamos la clusula "order by". La sintaxis bsica es la siguiente:

Tambin podemos colocar el nmero de orden del campo por el que queremos que se ordene en lugar de su nombre Podemos ordenarlos de mayor a menor, para ello agregamos la palabra clave "desc":
Select *from alumnos order by 3 desc; Select *from alumnos order by 3;

select * from NOMBRETABLA order by CAMPO; select * from alumnos order by nombre;

Tambin podemos ordenar por varios campos, por ejemplo, por apellido" y nombre":
select * from libros order by apelllido,nombre;

Incluso, podemos ordenar en distintos sentidos, por ejemplo, por apellido" en sentido ascendente y nombre" en sentido descendente:
select * from alumnos order by apellidos asc, nombre desc;

Es posible ordenar por un campo que no se lista en la seleccin. Se permite ordenar por valores calculados o expresiones.

Con los siguientes campos: numero, nombre, mail, pais, fecha Ingrese algunos registros: Ordene los registros por fecha, en orden descendente. Muestre el nombre del usuario, pais y el nmero de mes, ordenado por pais (ascendente) y nmero de mes (descendente) Muestre el pais, el mes, el da y la hora y ordene las visitas por numero del mes, del da y la hora. Muestre los mail, pas, ordenado por pas, de todos los que visitaron la pgina en mayo.

Cra la tabla visitas:

Operadores lgicos (and - or - not)


Los operadores lgicos se usan para combinar condiciones. Por ejemplo, si queremos recuperar todos los libros cuyo autor sea igual a Luis Joyanes" y cuyo precio no supere los 400 pesos, necesitamos 2 condiciones: select * from libros where (autor=Luis Joyanes') and (precio<=400);

Queremos ver los libros cuyo autor sea Luis Joyanes" y/o cuya editorial sea "Prentice":
select * from libros where autor=Luis Joyanes' or editorial='Prentice';

Queremos recuperar los libros que NO cumplan la condicin dada, por ejemplo, aquellos cuya editorial NO sea "Prentice": select * from libros where not editorial= 'Prentice'; El operador "not" invierte el resultado de la condicin a la cual antecede.

Crea la tabla medicamentos


Con los campos: codigo, nombre, laboratorio, precio, cantidad. Ingrese algunos registros. Recupere los cdigos y nombres de los medicamentos cuyo laboratorio sea Sigma' y cuyo precio sea menor a 50. Recupere los medicamentos cuyo laboratorio sea Marielo' o cuyo precio sea menor a 50 Muestre todos los medicamentos cuyo laboratorio NO sea Pacheco" y cuya cantidad sea=100.

Muestre todos los medicamentos cuyo laboratorio sea Pacheco" y cuya cantidad NO sea=100 Elimine todos los registros cuyo laboratorio sea igual a Pacheco" y su precio sea mayor a 100 Cambie la cantidad por 200, a todos los medicamentos de Sigma" cuyo precio sea mayor a 50 Borre los medicamentos cuyo laboratorio sea Pacheco" o cuyo precio sea menor a 200

Otros operadores relacionales (between)

Has el momento una consulta como select * from libros where precio>=20 and precio<=40; es correcta, se puede usar "between" y as simplificar la consulta:
select * from libros where precio between 20 and 40;

Trabaja con intervalo de valores, se puede emplear con tipos de datos numricos y tipos de datos fecha y hora (incluye slo el valor mnimo).

Para recuperar los registros que estn fuera del intervalo especificado.
select * from libros where precio not between 20 and 35;

Siempre que sea posible, emplee condiciones de bsqueda positivas ("between"), evite las negativas ("not between") porque hace ms lenta la recuperacin de los datos. Se puede usar el operador "between" para reducir las condiciones "where".

Ingrese 10 registros ms en la tabla visitas. Seleccione los usuarios que visitaron la pgina entre el '2010-01-01' y '2012-12-31 Recupere las visitas cuyo nmero se encuentra entre 2 y 5. Una concesionaria de autos vende autos usados y almacena la informacin en una tabla llamada "autos con los campos: patente, marca, modelo, precio. Ingrese 5 registros. Seleccione todos los autos cuyo modelo se encuentre entre '1970' y '1990' usando el operador "between" y ordnelos por dicho campo. Seleccione todos los autos cuyo precio est entre 50000 y 100000.

Operador in
Se utiliza "in" para averiguar si el valor de un campo est incluido en una lista de valores especificada. En la siguiente sentencia usamos "in" para averiguar si el valor del campo autor est incluido en la lista de valores especificada. Hasta ahora, la consulta es:

Podemos usar "in" y simplificar la consulta:


select * from in('Borges','Paenza'); libros where

select * from libros where autor='Borges' or autor='Paenza';

autor

Bsqueda de patrones (like - not like)


Existe un operador relacional que se usa para realizar comparaciones exclusivamente de cadenas, "like" y "not like". Hasta ahora hemos realizado consultas utilizando operadores relacionales para comparar cadenas.

select * from libros where autor='Borges'; El operador igual ("=") nos permite comparar cadenas de caracteres, pero al realizar la comparacin, busca coincidencias de cadenas completas, realiza una bsqueda exacta.

Si se tienen registrados estos 2 libros:

Si queremos recuperar todos los libros de Joyanes, cuyo registros cuyo autor contenga la cadena Joyanes" debemos escribir:
select * from libros where autor like "%Joyanes%";
El smbolo "%" (porcentaje) reemplaza cualquier cantidad de caracteres (incluyendo ningn caracter). Es un caracter comodn. "like" y "not like" son operadores de comparacin que sealan igualdad o diferencia.

Fundamentos de Programacin", Joyanes"; Programacin en Java", Luis Joyanes";

Realiza estas pruebas:

select * from libros where titulo like 'M%'; select * from libros where titulo like '%r'; select * from libros where titulo not like 'M%';

As como "%" reemplaza cualquier cantidad de caracteres, el guin bajo "_" reemplaza un caracter, es otro caracter comodn. Por ejemplo, queremos ver los libros de "Lewis Carroll" pero no recordamos si se escribe "Carroll" o "Carrolt", entonces tipeamos esta condicin: "like" se emplea con tipos de datos char, varchar, date, time, timestamp.
select * from libros where autor like "%Carrol_";

Campos: RFC, nombre, documento domicilio, fecha_ingreso, seccion, sueldo. Ingrese algunos registros Muestre todos los empleados con un apellido especfico empleando el operador "like Muestre todos los empleados cuyo domicilio comience con Mo" y tengan un "8" Muestre todos los nombres y sueldos de los empleados cuyos sueldos incluyen centavos Muestre los empleados que hayan ingresado en 2005.

Crea la tabla empleados

Contar registros (count)


Es una funcin que nos permiten contar registros, est dentro de las funciones de agregado y operan sobre un conjunto de valores (registros), no con datos individuales y devuelven un nico valor.
select count(*) from libros;

La funcin count() cuenta la cantidad de registros de una tabla, incluyendo los que tienen valor nulo.

Se puede utilizar esta funcin junto con la clusula "where" para una consulta ms especfica.
select count(*) from libros where editorial=Prentice';

select count(precio) from libros; Note que "count(*)" retorna la cantidad de registros de una tabla (incluyendo los que tienen valor "null") mientras que "count(precio)" retorna la cantidad de registros en los cuales el campo "precio" no es nulo. No es lo mismo. "count(*)" cuenta registros, si en lugar de un asterisco colocamos como argumento el nombre de un campo, se contabilizan los registros cuyo valor en ese campo NO es nulo. Otras funciones: count, sum, min, max, avg, con la sintaxis semejante a la de count.

Agrupar registros (group by)


til para generar valores de resumen para un solo campo, combinando las funciones de agregado con la clusula "group by", que agrupa registros para consultas detalladas. Nos interesa saber la cantidad de libros de cada editorial sin la sentencia group by, escribimos la siguiente sentencia:
select count(*) from editorial='Prentice'; select count(*) from editorial='Emece'; select count(*) from editorial=McGrawHill'; etc. libros libros libros where where where

Se puede remplazar utilizando la clusula "group by":

Sintaxis
select CAMPO, FUNCIONDEAGREGADO from NOMBRETABLA group by CAMPO; select CAMPO1, CAMPO2, FUNCIONDEAGREGADO from NOMBRETABLA group by CAMPO1,CAMPO2;
select editorial, count(*) from libros group by editorial;

Prctica

select editorial, count(precio) from libros group by editorial; select editorial, sum(precio) from libros group by editorial; select editorial, max(precio) as mayor, min(precio) as menor from libros group by editorial; select editorial, avg(precio) from libros group by editorial; select editorial, count(*) from libros where precio<30 group by editorial;

Seleccionar grupos (having)


La clusula "where" permite seleccionar (o rechazar) registros individuales; La clusula "having" permite seleccionar (o rechazar) un grupo de registros. Si queremos saber la cantidad de libros agrupados por editorial escribimos:
select editorial, count(*) from libros group by editorial;

Si queremos saber la cantidad de libros agrupados por editorial pero considerando slo algunos grupos, por ejemplo, los que devuelvan un valor mayor a 2, escribimos:
select editorial, count(*) from libros group by editorial having count(*)>2;

Ejercicio:
select editorial, avg(precio) from libros group by editorial having avg(precio) > 25; select editorial, count(*) from libros where editorial<>'Prentice' group by editorial; select editorial, count(*) from libros group by editorial having editorial<>'Prentice'; select editorial, count(*) from libros where precio is not null group by editorial having editorial<>'Prentice'; select editorial, avg(precio) from libros group by editorial having count(*) > 2; select editorial, max(precio) as mayor from libros group by editorial having min(precio)<100 and min(precio)>30 order by editorial;

Registros duplicados (distinct)


Con la clusula "distinct" se especifica que los registros con ciertos datos duplicados sean obviadas en el resultado.
select autor from libros; Aparecen repetidos. select distinct autor from libros; no aparecen repetidos select autor from libros group by autor; select distinct autor from libros where autor is not null; select count(distinct autor) from libros; select count(autor) from libros;

Si contamos los autores sin "distinct", no incluir los valores "null" pero si los repetidos:

Clave primaria compuesta


De la tabla vehculos con los campos: patente, tipo,hora_llegada, hora_salida No podemos usar solamente la patente porque un mismo auto puede ingresar ms de una vez en el da a la playa; tampoco podemos usar la hora de entrada porque varios autos pueden ingresar a una misma hora. Tampoco sirven los otros campos. Por si solos, entonces debemos usar 2 campos.
create table vehiculos( patente char(6) not null, tipo, hora_llegada time, hora_salida time, primary key(patente,hora_llegada) );

Restriccin check
La restriccin "check" especifica los valores que acepta un campo, evitando que se ingresen valores inapropiados. La sintaxis bsica es la siguiente:
alter table NOMBRETABLA add constraint NOMBRECONSTRAINT check CONDICION;

EJEMPLO:
alter table libros add constraint CK_libros_precio_positivo check (preciomin>=0 and preciomay>=0);

Restriccin unique
Esta restriccin impide la duplicacin de claves alternas (no primarias), es decir, especifica que dos registros no puedan tener el mismo valor en un campo. Se permiten valores nulos. Se pueden aplicar varias restricciones de este tipo a una misma tabla, y pueden aplicarse a uno o varios campos que no sean clave primaria.

La sintaxis general es la siguiente:


alter table NOMBRETABLA add constraint NOMBRERESTRICCION unique (CAMPO);

Ejemplo:
alter table profesor add constraint RFC_UQ unique (RFC);

Campos: ID, RFC, CURP, APELLIDO_P, APELLIDO_M, NOMBRE, SEXO Ingrese algunos registros, 2 de ellos con NOMBRE repetido y alguno con patente nulo. Intente agregar una restriccin "unique" para asegurarse que el nombre no tomar valores repetidos. agregar una restriccin "unique" para asegurarse que el RFC y CURP no tomarn valores repetidos. Ingresar un registro con valor nulo para el campo CURP". Muestre la informacin de las restricciones con la siguiente sentencia:
select * from information_schema.table_constraints where table_name = cliente';

Crea la tabla cliente:

Eliminar restricciones (alter table - drop constraint)

Para eliminar una restriccin, la sintaxis bsica es la siguiente:


alter table NOMBRETABLA drop constraint NOMBRERESTRICCION;

Para eliminar la restriccin RFC_UQ" de la tabla cliente escribimos:


alter table cliente drop constraint RFC_UQ;

ndice de una tabla.


Se emplean para facilitar la obtencin de informacin de una tabla. El indice de una tabla desempea la misma funcin que el ndice de un libro: permite encontrar datos rpidamente; en el caso de las tablas, localiza registros. Una tabla se indexa por un campo (o varios). El ndice es un tipo de archivo con 2 entradas: un dato (un valor de algn campo de la tabla) y un puntero. Un ndice posibilita el acceso directo y rpido haciendo ms eficiente las bsquedas. La desventaja es que consume espacio en el disco y las inserciones y borrados de registros son ms lentas.

Un ndice comn se crea con "create index", los valores no necesariamente son nicos y aceptan valores "null". Puede haber varios por tabla. Creamos la tabla "libros2".
create table libros( codigo int not null, titulo varchar(40), autor varchar(30), editorial varchar(15), precio decimal(6,2),cantidad int2); Creamos un ndice: create index I_libros_editorial on libros(editorial);
create unique index I_libros_tituloeditorial on libros(titulo,editorial); drop index I_libros_editorial; drop index I_libros_tituloeditorial;

Crearemos un ndice nico por los campos titulo y editorial: Para eliminar un ndice usamos "drop index". Ejemplo:

Clusulas limit y offset del comando select


Las clusulas "limit" y "offset" se usan para restringir los registros que se retornan en una consulta "select". La clusula limit recibe un argumento numrico positivo que indica el nmero mximo de registros a retornar; La clusula offset indica el nmero del primer registro a retornar. El nmero de registro inicial es 0 (no 1). Si el limit supera la cantidad de registros de la tabla, se limita hasta el ltimo registro. Ejemplo:

Es conveniente utilizar la clusula order by cuando utilizamos limit y offset, por ejemplo:
select * from libros order by codigo limit 8;

select * from libros limit 4 offset 0; Muestra los primeros 4 registros, 0,1,2 y 3. select * from libros limit 4 offset 5; select * from libros limit 8;

Clave fornea
Un campo que no es clave primaria en una tabla y sirve para enlazar sus valores con otra tabla en la cual es clave primaria se denomina clave fornea, externa o ajena. Las claves forneas y las claves primarias deben ser del mismo tipo para poder enlazarse. Si modificamos una, debemos modificar la otra para que los valores se correspondan. Cuando alteramos una tabla, debemos tener cuidado con las claves forneas. Si modificamos el tipo, longitud o atributos de una clave fornea, sta puede quedar inhabilitada para hacer los enlaces. Entonces, una clave fornea es un campo (o varios) empleados para enlazar datos de 2 tablas, para establecer un "join" con otra tabla en la cual es clave primaria.

Restricciones (foreign key)


Con la restriccin "foreign key" se define un campo (o varios) cuyos valores coinciden con la clave primaria de otra tabla, es decir, se define una referencia a un campo con una restriccin "primary key" o "unique" de la misma tabla o de otra. La integridad referencial asegura que se mantengan las referencias entre las claves primarias y las externas. Por ejemplo:

controla que si se agrega un cdigo de editorial en la tabla "libros", tal cdigo exista en la tabla "editoriales". Si se agrega una clave de carrera en la tabla alumno, tal clave debe de existir en la tabla carreras.

Tambin controla que no pueda eliminarse un registro de una tabla ni modificar la clave primaria si una clave externa hace referencia al registro. Por ejemplo, que no se pueda eliminar o modificar una clave de carreras" si existen un alumno con dicha clave.

La siguiente es la sintaxis parcial general para agregar una restriccin "foreign key": cuando la tabla ya est creada
alter table NOMBRETABLA1 add constraint NOMBRERESTRICCION foreign key (CAMPOCLAVEFORANEA) references NOMBRETABLA2 (CAMPOCLAVEPRIMARIA);

Esta restriccin (a diferencia de "primary key" y "unique") no crea ndice automticamente. La cantidad y tipo de datos de los campos especificados luego de "foreign key" DEBEN coincidir con la cantidad y tipo de datos de los campos de la clusula "references". Una tabla puede tener varias restricciones "foreign key". No se puede eliminar una tabla referenciada en una restriccin "foreign key", aparece un mensaje de error. Una restriccion "foreign key" no puede modificarse, debe eliminarse y volverse a crear. Acta en inserciones Si se intenta ingresar un registro con un valor de clave fornea que no existe en la tabla referenciada muestra un mensaje de error. Acta en eliminaciones y actualizaciones. Si intentamos eliminar un registro o modificar un valor de clave primaria de una tabla si una clave fornea hace referencia a dicho registro, PostgreSQL no lo permite.

Tabla alumnos con los campos: control, Apellido_P,Apellido_M, Nombre,sexo, ClaveCarrera. Tabla carreras con los campos: Clave_C, nombre_C. Ingresamos 10 registros en ambas tablas: Agregamos una restriccin "foreign key" a la tabla alumnos":
alter table alumnos add constraint FK_alumnos_control foreign key (ClaveCarrera) references carreras(Clave_C);

Ejercicio

Ingresamos un alumno con un cdigo de carrera existente Ingresamos un alumno con una clave carrera inexistente

Una empresa tiene registrados sus clientes en una tabla llamada "clientes", tambin tiene una tabla "provincias" donde registra los nombres de las provincias.

Crea las tablas "clientes" y "provincias":


create table clientes ( codigo serial, nombre varchar(30), domicilio varchar(30), ciudad varchar(20), codigoprovincia smallint, primary key(codigo) ); create table provincias( codigo serial, nombre varchar(20), primary key(codigo) );

Intente agregar una restriccin "foreign key" a la tabla "clientes" que haga referencia al campo "codigo" de "provincias. Ingrese cinco registros para ambas tablas Intente agregar un cliente con un cdigo de provincia inexistente en "provincias". Intente eliminar el registro con cdigo 3, de "provincias. Elimine el registro con cdigo "4" de "provincias". Intente modificar el registro con cdigo 1, de "provincias".

Restricciones foreign key al crear la tabla

Pueden establecerse al momento de crear una tabla (en la instruccin "create table"). En el siguiente ejemplo creamos la tabla "libros" con la restriccin respectiva:
create table editoriales( codigo serial, nombre varchar(20), primary key (codigo) ); create table libros( codigo serial, titulo varchar(40), autor varchar(30), codigoeditorial smallint references editoriales(codigo), primary key(codigo) );

Restricciones foreign key (acciones)


La restriccin "foreign key" tiene las clusulas "on delete" y "on update" que son opcionales. Estas clusulas especifican cmo debe actuar PostgreSQL frente a eliminaciones y modificaciones de las tablas referenciadas en la restriccin. Las opciones para estas clusulas son las siguientes: "no action": indica que si intentamos eliminar o actualizar un valor de la clave primaria de la tabla referenciada (TABLA2) que tengan referencia en la tabla principal (TABLA1), se genere un error y la accin no se realice; es la opcin predeterminada.

"cascade": indica que si eliminamos o actualizamos un valor de la clave primaria en la tabla referenciada (TABLA2), los registros coincidentes en la tabla principal (TABLA1), tambin se eliminen o modifiquen; es decir, si eliminamos o modificamos un valor de campo definido con una restriccin "primary key" o "unique", dicho cambio se extiende al valor de clave externa de la otra tabla (integridad referencial en cascada).

"set null": Establece con el valor null en el campo de la clave fornea. "set default": Establece el valor por defecto en el campo de la clave fornea. La sintaxis completa para agregar esta restriccin a una tabla es la siguiente:
alter table TABLA1 add constraint NOMBRERESTRICCION foreign key (CAMPOCLAVEFORANEA) references TABLA2(CAMPOCLAVEPRIMARIA) on delete OPCION on update OPCION;

Ejemplo:
Especificamos la accin en cascada para las actualizaciones y eliminaciones:
alter table alumnos add constraint FK_alumnos_Clave_C foreign key (Clave_C) references editoriales(Clave_C) on update cascade on delete cascade;

Intente eliminar el registro con cdigo 3, de carreras". Modifique el registro con cdigo 3, de carreras". Verifique que el cambio se realiz en cascada, es decir, que se modific en la tabla carreras" y en alumnos": Intente modificar la restriccin "foreign key" para que permita eliminacin en cascada. Intente eliminar la tabla carreras".

Agregar una columna


ALTER TABLE table_name ADD column_name column-definition;

Cambiar nombre de un campo (columna)


ALTER TABLE table_name MODIFY column_name column_type;

Eliminar columna:
ALTER TABLE table_name DROP COLUMN column_name;

Trabajar con varias tablas


Entrando en el proceso de normalizacin de las tablas de una base de datos, podemos separar los datos en diferentes tablas. Por ejemplo, los datos de nuestra tabla "libros" podran separarse en 2 tablas, una llamada "libros" y otra "editoriales" que guardar la informacin de las editoriales. En tabla "libros" haremos referencia a la editorial colocando un cdigo que la identifique.

Cuando obtenemos informacin de ms de una tabla decimos que hacemos un "join" (combinacin). Por ejemplo:
select * from alumnos join carreras on alumnos.Clavecarrera=carreras.Clave_C;

Investigar:
Tipos de datos complejos. Tipos estructurados y herencia en SQL. Herencia de tablas. Tipos de arreglo multiconjunto en SQL. Identidad de los objetos y tipos de referencia en SQL. Implementacin de las caractersticas OR.

Aspectos a calificar:
Trabajo en equipo (mximo 3 elementos) Estructura del trabajo (cartula, ndice, contenido, conclusin, bibliografa y glosario de trminos) Expresiones y grficos realizados por el alumno (originalidad). Ortografa Mnimo 10 cuartillas de contenido Establecer formato de texto
Interlineado 1.5 Tipo de letra: arial 12 Justificado

Se entrega el da martes 11 de junio de 2103.

Unin
El operador "union" combina el resultado de dos o ms instrucciones "select" en un nico resultado. Es necesario que las tablas referenciadas tengan tipos de datos similares, la misma cantidad de campos y el mismo orden de campos en la lista de seleccin de cada consulta. No se incluyen las filas duplicadas en el resultado, a menos que coloque la opcin "all". Se deben especificar los nombres de los campos en la primera instruccin "select". Puede emplear la clusula "order by". Puede dividir una consulta compleja en varias consultas "select" y luego emplear el operador "union" para combinarlas.

select nombre, domicilio from alumnos union select nombre, domicilio from profesores;

Cree las tablas:


create table proveedores( codigo serial, nombre varchar (30), domicilio varchar(30), primary key(codigo) );

create table clientes( codigo serial, nombre varchar (30), domicilio varchar(30), primary key(codigo) );

create table empleados( documento char(8) not null, nombre varchar(20), apellido varchar(20), domicilio varchar(30), primary key(documento));

Ingrese algunos registros El supermercado quiere enviar una tarjeta de salutacin a todos los proveedores, clientes y empleados y necesita el nombre y domicilio de todos ellos. Emplee el operador "unin" para obtener dicha informacin de las tres tablas. Agregue una columna con una literal para indicar si es un proveedor, un cliente o un empleado y ordene por dicha columna.

Vistas
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 travs de la vista no estn almacenados en la base de datos como un objeto. Entonces, una vista almacena una consulta como un objeto para utilizarse posteriormente. Las tablas consultadas en una vista se llaman tablas base. En general, se puede dar un nombre a cualquier consulta y almacenarla como una vista. Una vista suele llamarse tambin tabla virtual porque los resultados que retorna y la manera de referenciarlas es la misma que para una tabla.

Las vistas permiten:


Ocultar informacin: permitiendo el acceso a algunos datos y manteniendo oculto el resto de la informacin que no se incluye en la vista. Simplificar la administracin de los permisos de usuario: se pueden dar al usuario permisos para que solamente pueda acceder a los datos a travs 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 informacin de varias tablas. Podemos crear vistas con: un subconjunto de registros y campos de una tabla; una unin de varias tablas; una combinacin de varias tablas; un resumen estadstico de una tabla; un subconjunto de otra vista, combinacin de vistas y tablas.

Una vista se define usando un "select". La sintaxis bsica parcial para crear una vista es la siguiente:
create view NOMBREVISTA as SENTENCIAS SELECT from TABLA;

En el siguiente ejemplo creamos la vista "vista_empleados", que es resultado de una combinacin en la cual se muestran 4 campos:
create view vista_empleados as select (apellido||' '||e.nombre) as nombre,sexo, s.nombre as seccion, cantidadhijos from empleados as e join secciones as s on codigo=seccion

Para ver la informacin contenida en la vista creada anteriormente escribimos:


select *from vista_empleados; Podemos realizar consultas a una vista como si se tratara de una tabla: select seccion,count(*) as cantidad from vista_empleados;

Otra sintaxis es la siguiente:

Creamos otra vista de "empleados" denominada "vista_empleados_ingreso" que almacena la cantidad de empleados por ao: create view vista_empleados_ingreso (fecha,cantidad) as select extract(year from fechaingreso),count(*) from empleados group by extract(year from fechaingreso);

create view NOMBREVISTA (NOMBRESDEENCABEZADOS) as SENTENCIASSELECT from TABLA;

Crear las tablas:


create table socios( documento, nombre, domicilio, primary key (documento)); create table profesores( documento, nombre, domicilio, primary key (documento)); create table cursos( numero, deporte, dia, documentoprofesor , primary key (numero) ); create table inscriptos( documentosocio, numero, matricula, primary key (documentosocio,numero) );

Ingrese 10 registros para todas las tablas. Cree una vista en la que aparezca el nombre y documento del socio, el deporte, el da y el nombre del profesor. Muestre la informacin contenida en la vista. Realice una consulta a la vista donde muestre la cantidad de socios inscriptos en cada deporte ordenados por cantidad. Muestre (consultando la vista) los cursos (deporte y da) para los cuales no hay inscriptos. Muestre los nombres de los socios que no se han inscripto en ningn curso (consultando la vista) Muestre (consultando la vista) los profesores que no tienen asignado ningn deporte an. Muestre (consultando la vista) el nombre y documento de los socios que deben matrculas. Consulte la vista y muestre los nombres de los profesores y los das en que asisten al club para dictar sus clases. Muestre la misma informacin anterior pero ordenada por da. Muestre todos los socios que son compaeros en tenis los lunes.