Está en la página 1de 10

Presentación

Nombre: Leonardo Sarita Mejía

Matricula: 2023-0680

Materia: Base de datos avanzada.

Docente: Geraldo Peralta


Bidó

Tema: Práctica 4

Fecha: 26/Feb./2024
Realice las siguientes actividades a partir del caso práctico asignado en la primera clase,
conectado al ambiente de Oracle que instaló y luego de estudiar el material contenido en la
carpeta Material de Oracle - Unidades 6 y 7 y de practicar con los ejemplos contenidos en la
carpeta Ejemplos - Unidades 6 y 7:

1. Realice varias consultas simples (dos por integrante de cada equipo) para proyectar y
seleccionar la información contenida en las tablas. En estas consultas use las cláusulas
SELECT y FROM.
2. Realice varias consultas complejas (dos por integrante de cada equipo) para proyectar,
seleccionar, filtrar y ordenar la información contenida en las tablas. En estas consultas
use las cláusulas SELECT, FROM, WHERE y ORDER BY.
3. Realice varias consultas (dos por cada tipo y por cada integrante de cada equipo) donde
establezcan relaciones binarias y terciarias usando NATURAL JOIN, USING, JOIN + ON, SELF-
JOIN, NON-EQUIJOIN, OUTER JOIN.
4. Realice varias consultas (dos por cada integrante de cada equipo) que incluyan Sub-
consultas.

CREATE USER leonardo IDENTIFIED BY oracle01 DEFAULT TABLESPACE USERS; GRANT


CONNECT, RESOURCE TO leonardo;
GRANT CREATE TABLE, CREATE INDEX, CREATE SYNONYM, CREATE SEQUENCE, CREATE VIEW
TO
leonardo;

CREATE TABLE Cliente (


PK_Cliente NUMBER(10) NOT NULL,
Nombre VARCHAR2(50) NOT NULL,
Direccion VARCHAR2(100) NOT NULL,
Telefono VARCHAR2(20) NOT NULL,
Correo VARCHAR2(50) NOT NULL,
CONSTRAINT PK_Cliente PRIMARY KEY (PK_Cliente)

);

--Inserción de datos
INSERT INTO Cliente (PK_Cliente, Nombre, Direccion, Telefono, Correo)
VALUES (1, 'Leonardo', 'Manoguayabo', '8098175573', 'saritamejialeo@gmail.com');

INSERT INTO Cliente (PK_Cliente, Nombre, Direccion, Telefono, Correo)


VALUES (2, 'David', 'Azua', '8293456789', 'david.bautista@gmail.com');

INSERT INTO Cliente (PK_Cliente, Nombre, Direccion, Telefono, Correo)


VALUES (3, 'Pedro', 'santiago', '8098765432', 'pedrosanta@gmail.com');

INSERT INTO Cliente (PK_Cliente, Nombre, Direccion, Telefono, Correo)


VALUES (4, 'Leandra', 'la vega', '8294567893', 'leandra.arias@gmail.com');

INSERT INTO Cliente (PK_Cliente, Nombre, Direccion, Telefono, Correo)


VALUES (5, 'Jose', 'san juan', '8496785432', 'jose.reyes@gmail.com');

--Consultas simples
select PK_Cliente, Nombre
from Cliente;
select PK_Cliente, Telefono
from cliente
--Consultas
select *
from cliente

select *
from reserva

--cambios
UPDATE Cliente
SET Nombre = 'Ana'
WHERE PK_Cliente = 2 AND Direccion = 'Azua';
--Delete
DELETE FROM Cliente
WHERE PK_Cliente = 4 AND Direccion = 'la vega';

-- indice
CREATE INDEX idx_Cliente_Nombre ON Cliente (Nombre); CREATE INDEX
idx_Cliente_Apellido ON Cliente (Apellido);
--Secuencias sql
CREATE SEQUENCE seq_PK_Cliente START WITH 1 INCREMENT BY 1 MINVALUE 1 MAXVALUE
999999;

--sinonimos publicos
CREATE PUBLIC SYNONYM V_Clientes FOR Cliente;

select *
from cliente

CREATE TABLE Reserva (


PK_Reserva NUMBER(10) NOT NULL,
Fecha_Reserva NUMBER (20) NOT NULL,
Fecha_Inicio_Alquiler NUMBER (20) NOT NULL,
Fecha_Fin_Alquiler NUMBER (20) NOT NULL,
Estado VARCHAR2(20) NOT NULL,
FK_Cliente NUMBER(10) NOT NULL,
CONSTRAINT PK_Reserva PRIMARY KEY (PK_Reserva),
CONSTRAINT FK_Cliente FOREIGN KEY (FK_Cliente) REFERENCES Cliente
(PK_Cliente)

);
--Consultas complejas
select r.PK_Reserva, r.Fecha_Reserva, c.Nombre
from Reserva r
inner join Cliente c on r.FK_Cliente = c.PK_Cliente
where r.Estado = 'Confirmada'
order by r.Fecha_Reserva desc;
--no.2
select c.Nombre, count(*) AS TotalReservas
from Reserva r
inner join Cliente c ON r.FK_Cliente = c.PK_Cliente
group by c.Nombre
order by TotalReservas desc;
INSERT INTO Reserva (PK_Reserva, Fecha_Reserva, Fecha_Inicio_Alquiler,
Fecha_Fin_Alquiler, Estado, FK_Cliente)
VALUES (1, '20240228', '20240305', '20240310', 'Reservada', 1);

INSERT INTO Reserva (PK_Reserva, Fecha_Reserva, Fecha_Inicio_Alquiler,


Fecha_Fin_Alquiler, Estado, FK_Cliente)
VALUES (2, '20240225', '20240312', '20240320', 'Confirmada', 2);

INSERT INTO Reserva (PK_Reserva, Fecha_Reserva, Fecha_Inicio_Alquiler,


Fecha_Fin_Alquiler, Estado, FK_Cliente)
VALUES (3, '20240220', '20240401', '20240415', 'Pagada', 3);

INSERT INTO Reserva (PK_Reserva, Fecha_Reserva, Fecha_Inicio_Alquiler,


Fecha_Fin_Alquiler, Estado, FK_Cliente)
VALUES (4, '20240215', '20240325', '20240405', 'En curso', 4);

INSERT INTO Reserva (PK_Reserva, Fecha_Reserva, Fecha_Inicio_Alquiler,


Fecha_Fin_Alquiler, Estado, FK_Cliente)
VALUES (5, '20240210', '20240501', '20240515', 'Finalizada', 5);

--indice

CREATE INDEX idx_Reserva_Fecha_Reserva ON Reserva (Fecha_Reserva);


CREATE INDEX idx_Reserva_Fecha_Inicio_Alquiler ON Reserva
(Fecha_Inicio_Alquiler);
CREATE INDEX idx_Reserva_Fecha_Fin_Alquiler ON Reserva (Fecha_Fin_Alquiler);
CREATE INDEX idx_Reserva_Estado ON Reserva (Estado);

--secuencias sql
CREATE SEQUENCE seq_PK_Reserva START WITH 1 INCREMENT BY 1 MINVALUE 1 MAXVALUE
999999;

--sinonimos publicos
CREATE PUBLIC SYNONYM V_Reservas FOR Reserva;

--Consultas complejas
SELECT *
FROM Reserva
NATURAL JOIN Alquiler;

SELECT c.Nombre, r.Fecha_Reserva, a.Precio_Total, v.Marca, v.Modelo


FROM Cliente c
JOIN Reserva r ON c.PK_Cliente = r.FK_Cliente
JOIN Alquiler a ON r.PK_Reserva = a.FK_Reserva
JOIN Vehiculo v ON a.FK_Vehiculo = v.PK_Vehiculo;

SELECT c1.Nombre, c2.Nombre


FROM Cliente c1
JOIN Cliente c2 ON c1.PK_Cliente > c2.PK_Cliente;

--Consultas
select *
from cliente, reserva
CREATE TABLE Alquiler (
PK_Alquiler NUMBER(10) NOT NULL,
Precio_Total NUMBER(10,2) NOT NULL,
FK_Reserva NUMBER(10) NOT NULL,
FK_Pago NUMBER(10) NOT NULL,
FK_Vehiculo NUMBER(10) NOT NULL,
CONSTRAINT PK_Alquiler PRIMARY KEY (PK_Alquiler),
CONSTRAINT FK_Reserva FOREIGN KEY (FK_Reserva) REFERENCES Reserva
(PK_Reserva),
CONSTRAINT FK_Pago FOREIGN KEY (FK_Pago) REFERENCES Pago (PK_Pago),
CONSTRAINT FK_Vehiculo FOREIGN KEY (FK_Vehiculo) REFERENCES Vehiculo
(PK_Vehiculo)
);
INSERT INTO Alquiler (PK_Alquiler, Precio_Total, FK_Reserva, FK_Pago,
FK_Vehiculo)
VALUES (1, 500.00, 1, 1, 1);

INSERT INTO Alquiler (PK_Alquiler, Precio_Total, FK_Reserva, FK_Pago,


FK_Vehiculo)
VALUES (2, 725.50, 2, 2, 2);

INSERT INTO Alquiler (PK_Alquiler, Precio_Total, FK_Reserva, FK_Pago,


FK_Vehiculo)
VALUES (3, 899.99, 3, 3, 3);

INSERT INTO Alquiler (PK_Alquiler, Precio_Total, FK_Reserva, FK_Pago,


FK_Vehiculo)
VALUES (4, 1250.25, 4, 4, 4);

INSERT INTO Alquiler (PK_Alquiler, Precio_Total, FK_Reserva, FK_Pago,


FK_Vehiculo)
VALUES (5, 475.75, 5, 5, 5);

--indice
CREATE INDEX idx_Alquiler_Fecha_Alquiler ON Alquiler (Fecha_Alquiler);
CREATE INDEX idx_Alquiler_Precio_Total ON Alquiler (Precio_Total);
CREATE INDEX idx_Alquiler_FK_Cliente ON Alquiler (FK_Cliente);
CREATE INDEX idx_Alquiler_FK_Vehiculo ON Alquiler (FK_Vehiculo);

--secuencias sql
CREATE SEQUENCE seq_PK_Alquiler START WITH 1 INCREMENT BY 1 MINVALUE 1 MAXVALUE
999999;

--sinonimos public
CREATE PUBLIC SYNONYM V_Alquileres FOR Alquiler;

CREATE TABLE Pago (


PK_Pago NUMBER(10) NOT NULL,
Fecha_Pago NUMBER (20) NOT NULL,
Importe NUMBER(10,2) NOT NULL,
Metodo_Pago VARCHAR2(20) NOT NULL,
CONSTRAINT PK_Pago PRIMARY KEY (PK_Pago)
);
INSERT INTO Pago (PK_Pago, Fecha_Pago, Importe, Metodo_Pago)
VALUES (1, '20240220', 500.00, 'Efectivo');

INSERT INTO Pago (PK_Pago, Fecha_Pago, Importe, Metodo_Pago)


VALUES (2, '20240215', 725.50, 'Tarjeta de crédito');

INSERT INTO Pago (PK_Pago, Fecha_Pago, Importe, Metodo_Pago)


VALUES (3, '20240210', 899.99, 'Transferencia');

INSERT INTO Pago (PK_Pago, Fecha_Pago, Importe, Metodo_Pago)


VALUES (4, '20240205', 1250.25, 'Efectivo');

INSERT INTO Pago (PK_Pago, Fecha_Pago, Importe, Metodo_Pago)


VALUES (5, '20240131', 475.75, 'Tarjeta');

--indice
CREATE INDEX idx_Pago_Fecha_Pago ON Pago (Fecha_Pago); CREATE INDEX
idx_Pago_Importe ON Pago (Importe);
CREATE INDEX idx_Pago_Metodo_Pago ON Pago (Metodo_Pago);

--secuencias sql
CREATE SEQUENCE seq_PK_Pago START WITH 1 INCREMENT BY 1 MINVALUE 1 MAXVALUE
999999;

--sinonimos publicos
CREATE SYNONYM _P_Pagos FOR Pago;

--Consultas complejas
SELECT v.Marca, v.Modelo, v.Precio
FROM Vehiculo v
WHERE v.Precio > (
SELECT AVG(Precio)
FROM Vehiculo
);
SELECT c.Nombre
FROM Cliente c
WHERE EXISTS (
SELECT *
FROM Reserva r
WHERE r.FK_Cliente = c.PK_Cliente
);

CREATE TABLE Vehiculo (


PK_Vehiculo NUMBER(10) NOT NULL,
Año NUMBER(4) NOT NULL,
Marca VARCHAR2(20) NOT NULL,
Color VARCHAR2(20) NOT NULL,
Kilometraje NUMBER(10) NOT NULL,
Modelo VARCHAR2(20) NOT NULL,
Precio NUMBER(10,2) NOT NULL,
CONSTRAINT PK_Vehiculo PRIMARY KEY (PK_Vehiculo)

);
INSERT INTO Vehiculo (PK_Vehiculo, Año, Marca, Color, Kilometraje, Modelo,
Precio)
VALUES (1, 2023, 'Toyota', 'Azul', 10000, 'Corolla', 25000.00);

INSERT INTO Vehiculo (PK_Vehiculo, Año, Marca, Color, Kilometraje, Modelo,


Precio)
VALUES (2, 2022, 'Nissan', 'Azul', 25000, 'Sentra', 22500.75);

INSERT INTO Vehiculo (PK_Vehiculo, Año, Marca, Color, Kilometraje, Modelo,


Precio)
VALUES (3, 2021, 'Honda', 'Blanco', 35000, 'Civic', 20000.50);

INSERT INTO Vehiculo (PK_Vehiculo, Año, Marca, Color, Kilometraje, Modelo,


Precio)
VALUES (4, 2020, 'Hyundai', 'Gris', 45000, 'Accent', 18500.25);

INSERT INTO Vehiculo (PK_Vehiculo, Año, Marca, Color, Kilometraje, Modelo,


Precio)
VALUES (5, 2019, 'Kia', 'Negro', 55000, 'Rio', 17000.00);

--indice
CREATE INDEX idx_Vehiculo_Marca ON Vehiculo (Marca); CREATE INDEX
idx_Vehiculo_Modelo ON Vehiculo (Modelo);
CREATE INDEX idx_Vehiculo_Matricula ON Vehiculo (Matricula);

--secuencias sql
CREATE SEQUENCE seq_PK_Vehiculo START WITH 1 INCREMENT BY 1 MINVALUE 1 MAXVALUE
999999;

--sinonimos publicos
CREATE SYNONYM _V_Vehiculos FOR Vehiculo;

--Vista
CREATE VIEW V_Informacion_Alquiler AS SELECT
C.Nombre AS Nombre_Cliente, V.Marca AS Marca_Vehiculo,
R.Fecha_Inicio_Alquiler, A.Precio_Total
FROM Cliente C

INNER JOIN Reserva R ON C.PK_Cliente = R.FK_Cliente


INNER JOIN Alquiler A ON R.PK_Reserva = A.FK_Reserva
INNER JOIN Vehiculo V ON A.FK_Vehiculo = V.PK_Vehiculo;

SELECT * FROM V_Informacion_Alquiler;sido verificada y certificada por una


autoridad competente.
--Captures

También podría gustarte