Está en la página 1de 17

DROP DATABASE IF EXISTS universidad;

CREATE DATABASE universidad CHARACTER SET utf8mb4;

USE universidad;

CREATE TABLE departamento (

id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,

nombre VARCHAR(50) NOT NULL

);

insert into departamento values (1,"Valle");

insert into departamento values (2,"Costa");

insert into departamento values (3,"Piso");

insert into departamento values (4,"Cundinamarca");

CREATE TABLE persona (

id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,

nif VARCHAR(9) UNIQUE,

nombre VARCHAR(25) NOT NULL,

apellido1 VARCHAR(50) NOT NULL,

apellido2 VARCHAR(50),

ciudad VARCHAR(25) NOT NULL,

direccion VARCHAR(50) NOT NULL,

telefono VARCHAR(20),

fecha_nacimiento DATE NOT NULL,

sexo ENUM('H', 'M') NOT NULL,

tipo ENUM('profesor', 'alumno') NOT NULL

);
insert into persona values (1,"10","Juan","Cadavid","Divantoque","Bogota","Calle
80","3155881964","2002/04/06",'H','alumno');

insert into persona values (2,"20","Jose","Vargas","","Cali","Calle


90","3004963215","2000/06/21",'H','profesor');

insert into persona values (3,"30","Eugenia","Torres","Mendez","Medellin","Calle


120","3211096432","1999/01/12",'M','alumno');

insert into persona values (4,"40","Johan","Cañon","Lopez","Bogota","Calle


2","3125963145","2001/10/26",'H','alumno');

insert into persona values (5,"50","Camilo","Duran","Divantoque","Cali","Carrera


13","","1998/12/19",'H','profesor');

insert into persona values (6,"60","andrea","Chaparro","","Bogota","Calle


3","","2001/05/26",'M','alumno');

insert into persona values (7,"70k","Nelson","Vergara","Diaz","Cali","Calle


90","","1995/05/16",'H','profesor');

insert into persona values (8,"26902806M","Carlos","Ruiz","Gomez","Cali","Calle


102","3025698","1995/05/16",'H','alumno');

insert into persona values (9,"110k","Marlon","Vergara","Diaz","Cali","Calle


90","","1995/05/16",'H','profesor');

CREATE TABLE profesor (

id_profesor INT UNSIGNED PRIMARY KEY,

id_departamento INT UNSIGNED NOT NULL,

FOREIGN KEY (id_profesor) REFERENCES persona(id),

FOREIGN KEY (id_departamento) REFERENCES departamento(id)

);

insert into profesor values (2,1);

insert into profesor values (5,2);

insert into profesor values (7,3);

CREATE TABLE grado (

id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,


nombre VARCHAR(100) NOT NULL

);

insert into grado(nombre) values("Primaria");

insert into grado(nombre) values("Secundaria");

insert into grado(nombre) values("Preparatoria");

CREATE TABLE asignatura (

id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,

nombre VARCHAR(100) NOT NULL,

creditos FLOAT UNSIGNED NOT NULL,

tipo ENUM('básica', 'obligatoria', 'optativa') NOT NULL,

curso TINYINT UNSIGNED NOT NULL,

cuatrimestre TINYINT UNSIGNED NOT NULL,

id_profesor INT UNSIGNED,

id_grado INT UNSIGNED NOT NULL,

FOREIGN KEY(id_profesor) REFERENCES profesor(id_profesor),

FOREIGN KEY(id_grado) REFERENCES grado(id)

);

insert into asignatura values(1,"Matematicas","3",'obligatoria',1,2,2,1);

insert into asignatura values(2,"Ingles","2",'básica',1,3,5,2);

insert into asignatura values(3,"Desarrollo web","4",'optativa',1,5,5,3);

insert into asignatura values(4,"ingenieria informatica","4",'Obligatoria',1,1,5,3);

insert into asignatura values(5,"Aplicaciones moviles","4",'Optativa',2,3,NULL,3);

insert into asignatura values(7,"Filosofia","2",'Optativa',2,3,NULL,3);

CREATE TABLE curso_escolar (

id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,


anyo_inicio YEAR NOT NULL,

anyo_fin YEAR NOT NULL

);

insert into curso_escolar values(1,2019,2021);

insert into curso_escolar values(2,2014,2019);

insert into curso_escolar values(3,2021,2026);

insert into curso_escolar values(4,2015,2020);

insert into curso_escolar values(5,2018,2019);

CREATE TABLE alumno_se_matricula_asignatura (

id_alumno INT UNSIGNED NOT NULL,

id_asignatura INT UNSIGNED NOT NULL,

id_curso_escolar INT UNSIGNED NOT NULL,

PRIMARY KEY (id_alumno, id_asignatura, id_curso_escolar),

FOREIGN KEY (id_alumno) REFERENCES persona(id),

FOREIGN KEY (id_asignatura) REFERENCES asignatura(id),

FOREIGN KEY (id_curso_escolar) REFERENCES curso_escolar(id)

);

insert into alumno_se_matricula_asignatura values(1,1,1);

insert into alumno_se_matricula_asignatura values(1,2,1);

insert into alumno_se_matricula_asignatura values(2,1,2);

insert into alumno_se_matricula_asignatura values(2,3,2);

insert into alumno_se_matricula_asignatura values(3,1,3);

insert into alumno_se_matricula_asignatura values(3,2,3);

insert into alumno_se_matricula_asignatura values(3,4,4);

insert into alumno_se_matricula_asignatura values(8,4,4);

insert into alumno_se_matricula_asignatura values(8,4,5);


## 1.3 Consultas de una sola tabla

#1.

select apellido1,apellido2,nombre from persona where tipo = 'alumno' order by


apellido1,apellido2,nombre desc;

#2.

select apellido1,apellido2,nombre from persona where tipo = 'alumno' and telefono = "";

#3.

select * from persona where tipo = 'alumno' and year(fecha_nacimiento) = 1999;

#4.

select * from persona where tipo = 'profesor' and nif like "%k";

#5.

select * from asignatura where cuatrimestre = 1 and curso = 3 and id_grado = 7;

## 2.4 consultas multitabla

#1.

select a.* from persona a

join alumno_se_matricula_asignatura am

on a.id = am.id_alumno

where a.sexo = "M" and am.id_curso_escolar = 4 and am.id_asignatura = 4;

#2.
select asi.* from asignatura asi

join alumno_se_matricula_asignatura am

on asi.id = am.id_asignatura

join curso_escolar ce

on am.id_curso_escolar = ce.id

where asi.id = 4;

#3.

select p.apellido1,p.apellido2,p.nombre,d.nombre

from persona p

join profesor pr

on pr.id_profesor = p.id

join departamento d

on d.id=pr.id_departamento

order by p.apellido1,p.apellido2,p.nombre;

#4.

select a.nombre, asi.nombre, ce.*

from persona a

join alumno_se_matricula_asignatura am

on a.id=am.id_alumno

join asignatura asi

on asi.id=am.id_asignatura

join curso_escolar ce

on ce.id=am.id_curso_escolar

where a.nif = "26902806M";

#5.

select asi.* from asignatura asi where id_profesor = null;


#6.

select a.* from persona a

join alumno_se_matricula_asignatura am

on a.id = am.id_alumno

where am.id_curso_escolar = 5;

#2.5 ejercios

#1

SELECT a.nombre,b.apellido1,b.apellido2,b.nombre

FROM profesor c

RIGHT JOIN departamento a ON c.id_departamento=a.id

RIGHT JOIN persona b ON c.id_profesor = b.id WHERE b.tipo="profesor" ORDER BY


a.nombre,b.apellido1,b.apellido2,b.nombre ASC

#2

SELECT c.nombre,c.apellido1,c.apellido2,c.nombre

FROM persona c

LEFT JOIN profesor a ON c.id=a.id_profesor WHERE c.tipo="profesor" AND c.id NOT IN (select
id_profesor FROM profesor)

#3

SELECT a.nombre FROM departamento a RIGHT JOIN profesor b ON a.id=b.id_departamento

SELECT b.nombre FROM profesor a RIGHT JOIN departamento b ON a.id_departamento = b.id

WHERE id_profesor = NULL

#4
SELECT b.apellido1,b.apellido2,b.nombre FROM persona b RIGHT JOIN asignatura a ON
a.id_profesor = b.id

#2.6 ejercicios

#1

SELECT COUNT(id) FROM persona WHERE sexo ="M"

#2

SELECT COUNT(id) FROM persona WHERE fecha_nacimiento BETWEEN "1999/01/01" AND


"1999/12/31"

#3

SELECT b.nombre , COUNT(a.id_profesor) as numero FROM profesor a INNER JOIN departamento


b ON a.id_departamento = b.id GROUP BY id_departamento

#4

SELECT b.nombre , COUNT(a.id_profesor) as numero FROM profesor a RIGHT JOIN departamento


b ON a.id_departamento = b.id GROUP BY id_departamento

#5

SELECT a.nombre , COUNT(b.id) as numero FROM grado a RIGHT JOIN asignatura b ON a.id =
b.id_grado GROUP BY a.id ORDER BY numero DESC

#6

SELECT a.nombre , COUNT(b.id) as numero FROM grado a INNER JOIN asignatura b ON a.id =
b.id_grado GROUP BY a.id HAVING COUNT(b.id) > 1 ORDER BY numero DESC

#7
SELECT a.nombre ,b.tipo, SUM(b.creditos) as numero FROM grado a RIGHT JOIN asignatura b ON
a.id = b.id_grado GROUP BY a.id ORDER BY numero DESC

#8

SELECT a.anyo_inicio , COUNT(b.id_alumno) FROM curso_escolar a RIGHT JOIN


alumno_se_matricula_asignatura b ON a.id = b.id_curso_escolar GROUP BY a.id

#9

SELECT a.id,a.apellido1,a.apellido2,a.nombre , SUM(b.id) as numero FROM asignatura b RIGHT


JOIN persona a ON b.id_profesor=a.id WHERE a.tipo="profesor" GROUP BY a.id ORDER BY numero
DESC

#2.8 ejercicios

#1

SELECT a.*

FROM persona a HAVING MAX(DATEDIFF(fecha_nacimiento,NOW()))

#2

SELECT a.nombre,a.apellido1,a.apellido2,a.nombre

FROM persona a WHERE a.tipo="profesor" AND a.id NOT IN (select id_profesor FROM profesor)

#3

SELECT a.nombre

FROM departamento a WHERE a.id NOT IN (select id_departamento FROM profesor)

#4

SELECT a.nombre,a.apellido1,a.apellido2
FROM persona a WHERE a.tipo="profesor" AND a.id NOT IN (SELECT a.id_profesor FROM
profesor a, asignatura b WHERE a.id_profesor = b.id_profesor)

#5

SELECT a.nombre

FROM asignatura a WHERE a.id_profesor NOT IN (SELECT id_profesor FROM profesor)

#6

SELECT a.nombre

FROM departamento a WHERE a.id NOT IN (SELECT b.id_departamento FROM profesor b ,


asignatura c WHERE c.id_profesor = b.id_profesor )

También podría gustarte