Skip to content

Práctica : Bases de Datos (SQL Básico)

Ejercicio 1 — EMPRESA

Dadas las siguientes tablas:

  • Empleado (codEmp, nomEmp, sexEmp, fecNac, fecIncorporacion, salEmp, comisionE, cargoE, nroDpto)
  • Departamento (codDpto, nombreDpto, ciudad, codDirector)

a) Crea la base de datos Empresa para trabajar sobre ella.

sql
CREATE DATABASE EMPRESA;
USE EMPRESA;

b) Crea las tablas anteriores con los tipos de datos y restricciones que creas conveniente.

sql
CREATE TABLE Departamento (
  codDpto INT UNSIGNED PRIMARY KEY,
  nombreDpto VARCHAR(20) NOT NULL,
  ciudad VARCHAR(15),
  codDirector INT UNSIGNED
);

CREATE TABLE Empleado (
  codEmp INT UNSIGNED PRIMARY KEY,
  nomEmp VARCHAR(30) NOT NULL,
  sexEmp ENUM('F', 'M') NOT NULL,
  fecNac DATE NOT NULL,
  fecIncorporacion DATE NOT NULL,
  salEmp DECIMAL(7,2) NOT NULL,
  comisionE DECIMAL(7,2) NOT NULL,
  cargoE VARCHAR(15) NOT NULL,
  nroDpto INT UNSIGNED NOT NULL,
  FOREIGN KEY (nroDpto) REFERENCES Departamento(codDpto)
);

c) Inserta los siguientes datos:

Inserción de datos en la tabla Departamento:

codDptonombreDptoCiudadDirector
1000GERENCIAMADRID32.526.220
2000PRODUCCIÓNMADRID16.215.250
2500VENTASBARCELONA20.648.351
3000INVESTIGACIÓNBARCELONA75.745.745
4000VENTASSEVILLA14.142.142
4500INVESTIGACIÓNSEVILLA36.361.361
sql
INSERT INTO Departamento (codDpto, nombreDpto, ciudad, codDirector) VALUES
(1000, 'GERENCIA',      'MADRID',    32526220),
(2000, 'PRODUCCIÓN',    'MADRID',    16215250),
(2500, 'VENTAS',        'BARCELONA', 20648351),
(3000, 'INVESTIGACIÓN', 'BARCELONA', 75745745),
(4000, 'VENTAS',        'SEVILLA',   14142142),
(4500, 'INVESTIGACIÓN', 'SEVILLA',   36361361);

Inserción de datos en la tabla Empleado:

codEmpnomEmpsexEmpfecNacfecIncorporacionsalEmpcomisionEcargoEnroDpto
31.840.269María RojasF15/01/198516/05/20001500200Gerente1000
74.758.963Juan MartínM23/04/198029/04/2019100050Comercial2500
96.963.963Pepe VicianaM25/05/200004/01/201925000Científico3000
58.582.582María José SánchezF10/10/199015/01/20055000400Gerente1000
74.741.741Laura PastorF25/05/198620/04/20093000350At. Cliente2500
sql
INSERT INTO Empleado VALUES
(31840269, 'María Rojas',        'F', '1985-01-15', '2000-05-16', 1500, 200, 'Gerente',    1000),
(74758963, 'Juan Martín',        'M', '1980-04-23', '2019-04-29', 1000,  50, 'Comercial',   2500),
(96963963, 'Pepe Viciana',       'M', '2000-05-25', '2019-01-04', 2500,   0, 'Científico', 3000),
(58582582, 'María José Sánchez', 'F', '1990-10-10', '2015-01-15', 5000, 400, 'Gerente',    1000),
(74741741, 'Laura Pastor',       'F', '1986-05-25', '2009-04-20', 3000, 350, 'At. Cliente', 2500);

d) Realiza las siguientes actualizaciones:

  • Modifica la fecha de incorporación del empleado 31.840.269 a 16/05/2001.
sql
UPDATE Empleado SET fecIncorporacion = '2001-05-16'
WHERE codEmp = 31840269;
  • Sube el salario de todos los gerentes un 10%.
sql
UPDATE Empleado SET salEmp = salEmp * 1.10
WHERE cargoE = 'Gerente';
  • Aumenta la comisión de todas las mujeres 50 euros.
sql
UPDATE Empleado SET comisionE = comisionE + 50
WHERE sexEmp = 'F';

Ejercicio 2 — TIENDA DE INFORMÁTICA

Dado el siguiente esquema:

erDiagram
    fabricante {
        int codigo PK
        varchar nombre
    }
    producto {
        int codigo PK
        varchar nombre
        double precio
        int codigo_fabricante FK
    }
    fabricante ||--o{ producto : tiene

a) Crea la base de datos TiendaInformatica para trabajar sobre estas tablas.

sql
CREATE DATABASE TiendaInformatica CHARACTER SET utf8;
USE TiendaInformatica;

b) Crea las tablas anteriores con los tipos de datos y restricciones que se ven en el esquema.

sql
CREATE TABLE fabricante (
  codigo INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  nombre VARCHAR(100) NOT NULL
);

CREATE TABLE producto (
  codigo INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  nombre VARCHAR(100) NOT NULL,
  precio DECIMAL(6,2) NOT NULL,
  codigo_fabricante INT UNSIGNED NOT NULL,
  FOREIGN KEY (codigo_fabricante) REFERENCES fabricante(codigo)
);

c) Inserta los siguientes datos:

CódigoFabricante
1Asus
2Lenovo
3HP
4Samsung
5Seagate
6Crucial
7Gigabyte
sql
INSERT INTO fabricante (nombre) VALUES
('Asus'),
('Lenovo'),
('HP'),
('Samsung'),
('Seagate'),
('Crucial'),
('Gigabyte');
CódigoNombrePrecioCodigo_Fabricante
1Disco Duro86.995
2Memoria Ram1206
3Disco SSD150.994
4GeForce1857
5Monitor2021
6Portátil5052
7Impresora59.993
sql
INSERT INTO producto (nombre, precio, codigo_fabricante) VALUES
('Disco Duro',  86.99,  5),
('Memoria Ram', 120,    6),
('Disco SSD',   150.99, 4),
('GeForce',     185,    7),
('Monitor',     202,    1),
('Portátil',    505,    2),
('Impresora',   59.99,  3);

d) Realiza las siguientes actualizaciones:

  • Elimina los productos que suministra el fabricante de código 1.
sql
DELETE FROM producto WHERE codigo_fabricante = 1;
  • Rebaja el precio de todos los productos en un 20%.
sql
UPDATE producto SET precio = precio * 0.80;
  • Cambia el proveedor de la impresora al fabricante número 4.
sql
UPDATE producto SET codigo_fabricante = 4 WHERE nombre = 'Impresora';

Ejercicio 3 — UNIVERSIDAD

Dado el siguiente diagrama entidad-relación:

Para que un alumno ingrese en la Universidad debe realizar una preinscripción, especificando a qué estudios desea acceder en orden de preferencia.

erDiagram
    ALUMNO {
        int DNI PK
        varchar nombre
        double nota
        char opcion
    }
    ESTUDIO {
        varchar codigo PK
        varchar nombre
        double notaDeCorte
    }
    PREINSCRIPCION {
        int DNIAlumno PK, FK
        varchar codEstudio PK, FK
        char admitido
        int orden
    }
    ALUMNO ||--o{ PREINSCRIPCION : realiza
    ESTUDIO ||--o{ PREINSCRIPCION : tiene

a) Haz el grafo relacional a partir del diagrama anterior.

ALUMNO (DNI, Nombre, Nota, Opción)

PREINSCRIPCION (DNIAlumno, CodEstudio, Admitido, Orden)

ESTUDIO (Código, Nombre, NotaDeCorte)

b) Crea la base de datos universidad en SQL para trabajar sobre ella.

sql
CREATE DATABASE universidad CHARACTER SET utf8;
USE universidad;

c) Crea las tablas anteriores en SQL con todas las restricciones inherentes del modelo y además con las siguientes consideraciones:

  • I. Opción tomará los valores A, B, C ó D.
  • II. La nota de corte ha de ser mayor que 5.
  • III. El atributo "admitido" tomará los valores S ó N.
sql
CREATE TABLE alumno (
  DNI INT UNSIGNED PRIMARY KEY,
  nombre VARCHAR(100) NOT NULL,
  nota DOUBLE NOT NULL,
  opcion ENUM('A', 'B', 'C', 'D') NOT NULL
);

CREATE TABLE estudio (
  Codigo VARCHAR(10) PRIMARY KEY,
  nombre VARCHAR(100) NOT NULL,
  NotaDeCorte DOUBLE NOT NULL CHECK (NotaDeCorte > 5)
);

CREATE TABLE preinscripcion (
  DNIAlumno INT UNSIGNED,
  CodEstudio VARCHAR(10),
  admitido ENUM('S', 'N') NOT NULL,
  orden INT UNSIGNED NOT NULL,
  PRIMARY KEY (DNIAlumno, CodEstudio),
  FOREIGN KEY (DNIAlumno) REFERENCES alumno(DNI),
  FOREIGN KEY (CodEstudio) REFERENCES estudio(Codigo)
);

Ejercicio 4 — PEDIDOS

Dado el siguiente esquema:

erDiagram
    cliente {
        int id PK
        varchar nombre
        varchar apellido1
        varchar apellido2
        varchar ciudad
        int categoria
    }
    comercial {
        int id PK
        varchar nombre
        varchar apellido1
        varchar apellido2
        float comision
    }
    pedido {
        int id PK
        double total
        date fecha
        int id_cliente FK
        int id_comercial FK
    }
    cliente ||--o{ pedido : realiza
    comercial ||--o{ pedido : gestiona

a) Crea la base de datos pedidos para trabajar sobre estas tablas.

sql
CREATE DATABASE pedidos CHARACTER SET utf8;
USE pedidos;

b) Crea las tablas anteriores con los tipos de datos y restricciones que se ven en el esquema.

sql
CREATE TABLE cliente (
  id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  nombre VARCHAR(100) NOT NULL,
  apellido1 VARCHAR(100) NOT NULL,
  apellido2 VARCHAR(100),
  ciudad VARCHAR(100),
  categoria INT UNSIGNED
);

CREATE TABLE comercial (
  id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  nombre VARCHAR(100) NOT NULL,
  apellido1 VARCHAR(100) NOT NULL,
  apellido2 VARCHAR(100),
  comision FLOAT
);

CREATE TABLE pedido (
  id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  total DOUBLE NOT NULL,
  fecha DATE,
  id_cliente INT UNSIGNED NOT NULL,
  id_comercial INT UNSIGNED NOT NULL,
  FOREIGN KEY (id_cliente) REFERENCES cliente(id),
  FOREIGN KEY (id_comercial) REFERENCES comercial(id)
);

c) Inserta los siguientes datos:

Tabla CLIENTE:

IdNombreApellido1Apellido2CiudadCategoría
1AarónRiveroGómezAlmería100
2AdelaSalaDiazGranada200
3AdolfoRubioFloresSevilla-
4AdriánSuárez-Jaén300
5MarcosLoyolaMendezAlmería200
6MaríaSantanaMorenoCádiz100
7PilarRuiz-Sevilla300
8PepeRuizSantanaHuelva200
sql
INSERT INTO cliente (nombre, apellido1, apellido2, ciudad, categoria) VALUES
('Aarón',  'Rivero', 'Gómez',   'Almería', 100),
('Adela',  'Sala',   'Díaz',    'Granada', 200),
('Adolfo', 'Rubio',  'Flores',  'Sevilla', NULL),
('Adrián', 'Suárez', NULL,      'Jaén',    300),
('Marcos', 'Loyola', 'Mendez',  'Almería', 200),
('María',  'Santana','Moreno',  'Cádiz',   100),
('Pilar',  'Ruiz',   NULL,      'Sevilla', 300),
('Pepe',   'Ruiz',   'Santana', 'Huelva',  200);

Tabla COMERCIAL:

IdNombreApellido1Apellido2Comisión
1DanielSáezVega0.15
2JuanGómezLópez0.13
3DiegoFloresSalas0.11
4MartaHerreraGil0.14
5AntonioCarreteroOrtega0.12
sql
INSERT INTO comercial (nombre, apellido1, apellido2, comision) VALUES
('Daniel',  'Sáez',      'Vega',   0.15),
('Juan',    'Gómez',     'López',  0.13),
('Diego',   'Flores',    'Salas',  0.11),
('Marta',   'Herrera',   'Gil',    0.14),
('Antonio', 'Carretero', 'Ortega', 0.12);

Tabla PEDIDOS:

IdTotalFechaIdClienteIdComercial
1150.505/10/201952
227010/09/201615
365.2505/10/201721
4110.517/08/201983
595025/05/201952
62010.5010/01/201934
7500001/01/201973
8198305/08/201564
9250.3605/09/198311
10369.3606/07/198625
sql
INSERT INTO pedido (total, fecha, id_cliente, id_comercial) VALUES
(150.5,   '2019-10-05', 5, 2),
(270,     '2016-09-10', 1, 5),
(65.25,   '2017-10-05', 2, 1),
(110.5,   '2019-08-17', 8, 3),
(950,     '2019-05-25', 5, 2),
(2010.50, '2019-01-10', 3, 4),
(5000,    '2019-01-01', 7, 3),
(1983,    '2015-08-05', 6, 4),
(250.36,  '1983-09-05', 1, 1),
(369.36,  '1986-07-06', 2, 5);

d) Realiza las siguientes actualizaciones:

  • Añade a la tabla cliente las columnas email y el teléfono.
sql
ALTER TABLE cliente ADD email VARCHAR(100), ADD telefono INT;
  • Añade también teléfono para la tabla comercial.
sql
ALTER TABLE comercial ADD (telefono INT);
  • Aumenta la comisión de todos los comerciales en un 5%.
sql
UPDATE comercial SET comision = comision * 1.05;
  • Borra todos los pedidos de menos de 200 euros.
sql
DELETE FROM pedido WHERE total < 200;

Ejercicio 5 — INSTITUTO

Dado el siguiente diagrama entidad-relación y su grafo relacional:

erDiagram
    PROFESOR {
        varchar NIF PK
        varchar nombre
        varchar especialidad
        int telefono
    }
    ASIGNATURA {
        varchar Cod_Asignatura PK
        varchar nombre
        varchar NIF_Profesor FK
    }
    ALUMNO {
        int id_Alumno PK
        varchar nombre
        date Fecha_Nacimiento
        int telefono
    }
    RECIBE {
        int id_Alumno PK, FK
        varchar Cod_Asignatura PK, FK
        varchar curso PK
    }
    PROFESOR ||--o{ ASIGNATURA : imparte
    ALUMNO ||--o{ RECIBE : cursa
    ASIGNATURA ||--o{ RECIBE : incluida
ALUMNO (id_Alumno, Nombre, Fecha_Nacimiento, Teléfono)

RECIBE (id_Alumno, cod_Asignatura, curso)

ASIGNATURA (Cod_Asignatura, Nombre, NIF_Profesor)

PROFESOR (NIF, Nombre, Especialidad, Teléfono)

a) Crea la base de datos "Instituto" para trabajar sobre ella.

sql
CREATE DATABASE Instituto CHARACTER SET utf8;
USE Instituto;

b) Crea las tablas necesarias con los tipos de datos y restricciones que consideres oportunas.

sql
CREATE TABLE alumno (
  id_Alumno INT UNSIGNED PRIMARY KEY,
  nombre VARCHAR(100) NOT NULL,
  Fecha_Nacimiento DATE NOT NULL,
  telefono INT UNSIGNED
);

CREATE TABLE profesor (
  NIF VARCHAR(9) PRIMARY KEY,
  nombre VARCHAR(100) NOT NULL,
  especialidad VARCHAR(30) NOT NULL,
  telefono INT UNSIGNED
);

CREATE TABLE asignatura (
  Cod_Asignatura VARCHAR(10) PRIMARY KEY,
  nombre VARCHAR(100) NOT NULL,
  NIF_Profesor VARCHAR(9) NOT NULL,
  FOREIGN KEY (NIF_Profesor) REFERENCES profesor(NIF)
);

CREATE TABLE recibe (
  id_Alumno INT UNSIGNED,
  Cod_Asignatura VARCHAR(10),
  Curso VARCHAR(10) NOT NULL,
  PRIMARY KEY (id_Alumno, Cod_Asignatura, Curso),
  FOREIGN KEY (id_Alumno) REFERENCES alumno(id_Alumno),
  FOREIGN KEY (Cod_Asignatura) REFERENCES asignatura(Cod_Asignatura)
);

Publicado bajo la licencia MIT.