You are on page 1of 8

República Bolivariana de Venezuela

Ministerio del Poder Popular para la Educación, Ciencia y Tecnología

Colegio Universitario de Caracas

PNF Informática - Sección 03 - Trayecto II.III - Turno: Tarde

Tecnología de Información y Comunicación

Informe de Base de Datos(Trigger, Inner Join, Select,


Where, Order By)

Nombre:

Mata, Carla – C.I. 26774475


DISPARADORES (TRIGGERS)

Un disparador no es otra cosa que una acción definida en una tabla de nuestra base de
datos y ejecutada automáticamente por una función programada por nosotros. Esta acción se ac-
tivará, segun la definamos, cuando realicemos un INSERT, un UPDATE ó un DELETE en la
susodicha tabla.

Un disparador se puede definir de las siguientes maneras:

 Para que ocurra ANTES de cualquier INSERT,UPDATE ó DELETE


 Para que ocurra DESPUES de cualquier INSERT,UPDATE ó DELETE
 Para que se ejecute una sola vez por comando SQL (statement-level trigger)
 Para que se ejecute por cada linea afectada por un comando SQL (row-level trig-
ger).

Se crea un trigger con el comando CREATE FUNCTION, declarándolo como una fun-
ción sin argumentos y un tipo de devolución de activación. La función debe declararse sin ar-
gumentos, incluso si espera recibir los argumentos especificados en CREATE TRIGGER: se
pasan a través de TG_ARGV, como se describe a continuación.

INNER JOIN

Inner Join determinará qué filas de ambas tablas participantes se considerará para regre-
sar. La cláusula ON o USING se utiliza con la condición de unión. La cláusula ON en condición
de unión toma una expresión booleana como la toma la cláusula WHERE y hace coincidir las
columnas comunes de las tablas participantes cuando la expresión booleana evalúa true y deter-
mina qué filas deben unirse.

Por otro lado, la cláusula USING toma una lista de nombres de columna separados por
una coma, que es común en la tabla participante y realiza una combinación en la coincidencia de
cada uno de estos pares de columnas. La cláusula USING devuelve una columna común una vez
como salida y seguida por las columnas restantes y las columnas comunes aparecerán primero
cuando se use '*' con una instrucción SELECT.
Para unir una tabla a una tabla B:

 Primero se debe especificar la columna en ambas tablas de las que se desea selec-
cionar datos en la cláusula SELECT
 Segundo, se especifica la tabla principal, es decir, A en la cláusula FROM.
 En tercer lugar, se especifica la tabla a la que se une la tabla principal, es decir, B
en la cláusula INNER JOIN. Además, pones una condición de unión después de la
palabra clave ON, es decir, A.pka = B.fka.

WHERE

La cláusula WHERE de PostgreSQL se utiliza para especificar una condición al recuperar


los datos de una sola tabla o unirlos con varias tablas. Si se cumple la condición dada, solo en-
tonces devuelve un valor específico de la tabla. Puede filtrar las filas que no desea incluir en el
conjunto de resultados utilizando la cláusula WHERE. La cláusula WHERE no solo se usa en la
instrucción SELECT, sino que también se usa en la instrucción UPDATE, DELETE, etc.

ORDER BY

La cláusula ORDER BY se utiliza para ordenar los datos en orden ascendente o descen-
dente, en base a una o más columnas. Contiene la siguiente sintaxis:

SELECT column1, column2, columnN


FROM table_name
WHERE[Search_condition]
EJERCICIO DE FACTURA

Identificar las Entidades, Atributos y Claves Primarias de cada entidad

Cliente (Cedula(pk), apellido, dirección, nombre, num_telefono)


Factura (Nro_Factura (PK), producto, monto factura, IVA, monto_total, cedula).
Factura_Detalle(producto_nom(fk), precio, cantidad, monto_total nro_pedido(pk)).

Tablas del ejercicio factura.

CREATE TABLE public.cliente

cedula integer NOT NULL,

telefono integer,

direccion character(50),

apellido_nombre character(30),

CONSTRAINT pk_ci PRIMARY KEY (cedula)

WITH (

OIDS=FALSE

);

ALTER TABLE public.cliente

OWNER TO postgres;
CREATE TABLE public.factura

num_factura integer NOT NULL,

fecha date,
monto_factura numeric,

iva numeric,

montototal numeric,

cedula integer,

CONSTRAINT pk_numfactura PRIMARY KEY (num_factura)

WITH (

OIDS=FALSE

);

ALTER TABLE

public.factura

OWNER TO postgres;

CREATE TABLE public.factura_detalle

numero_factura integer,

nombre_producto character(20),

precio numeric,

cantidad integer,

montototal numeric,

numero_pedido integer NOT NULL,

CONSTRAINT pk_numpedido PRIMARY KEY (numero_pedido),

CONSTRAINT fk_numfactura FOREIGN KEY (numero_factura)

REFERENCES public.factura (num_factura) MATCH SIMPLE

ON UPDATE NO ACTION ON DELETE NO ACTION

)
WITH (

OIDS=FALSE

);

ALTER TABLE public.factura_detalle

OWNER TO postgres;

Luego se creó la función trigger insertada en una tabla para los cambios:

CREATE OR REPLACE FUNCTION tri_cambios()


RETURNS trigger AS $BODY$
BEGIN
INSERT INTO cambios (
nombre_producto,
precio,
cantidad,
montototal,
numero_pedido,
operation,
operationwhen,
modificadoby
)
VALUES(
OLD.nombre_producto,
OLD.precio,
OLD.cantidad,
OLD.montototal,
OLD.numero_pedido,

CURRENT_TIMESTAMP,
TG_OP.
TG_WHEN,
CURRENT_USER
);
RETURN null;
END;
$$
language ‘plpsql’;

Luego se añade el trigger a factura_detalle:

AFTER INSERT OR UPDATE


ON facture_detalle
FOR EACH ROW
EXECUTE PROCEDURE trifun_cambios();

Luego al ejercicio de factura se le agregego el Where con el cualp se puede especificar las
condiciones para la consulta "select", y el Order by quien ordena los registros que se ingresaron
en la base de datos dependiendo del criterio.

SELECT
cliente.cedula,
cliente.apellido_nombre,
cliente.telefono,
cliente.direccion,
factura_detalle.nombre_producto,
factura_detalle.precio,
factura_detalle.cantidad,
monto,
iva,
montototal
FROM
cliente
INNER JOIN factura ON factura.cedula = cliente.cedula;
INNER JOIN factura_detalle ON factura.montototal = factura_detalle.montototal;
WHERE facture_detalle.nombre_producto = Café;

SELECT
cliente.cedula,
cliente.apellido_nombre,
cliente.telefono,
cliente.direccion,
factura_detalle.nombre_producto,
factura_detalle.precio,
factura_detalle.cantidad,
monto,
iva,
montototal
FROM
cliente
INNER JOIN factura ON factura.cedula = cliente.cedula;
INNER JOIN factura_detalle ON factura.montototal = factura_detalle.montototal;
ORDER BY cliente.cedula;

El operador like nos permite facilitar la búsqueda de los clientes según el producto comprado:

SELECT
cliente.cedula,
cliente.apellido_nombre,
cliente.telefono,
cliente.direccion,
factura_detalle.nombre_producto,
factura_detalle.precio,
factura_detalle.cantidad,
monto,
iva,
montototal
FROM
cliente
INNER JOIN factura ON factura.cedula = cliente.cedula;
INNER JOIN factura_detalle ON factura.montototal = factura_detalle.montototal;
WHERE
factura_detalle.nombre_producto LIKE ‘camisa%’;