MySQL - Como obtener estas consultas

   
Vista:

Como obtener estas consultas

Publicado por Angel Antonio (4 intervenciones) el 27/09/2017 09:01:07
Un profesor nos dejo hacer una base de datos con estas especificaciones:

04-dbuniversidad-001

después nos pidió hacer consultas con la base de datos anterior:

04-Consultas-SQL-de-Universidad-001



El problema que el nunca nos enseñó a hacer las consultas como en la segunda imagen, si alguien me puede explicar a que se refiere con consultas de dos niveles estaría muy agradecido y de paso si me pudieran decir si mi base de datos esta bien y en que falle.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
drop database universidad;
create database universidad;
use universidad;
 
 
create table carreras(carr varchar(5) primary key, descripcion varchar(20));
create table materias(clave varchar(6) primary key, materia varchar(30), creditos int);
create table profesor(nemp int primary key, nombre varchar(15), grado varchar(20), edad int);
create table salones(salon int primary key, capacidad int );
 
create table alumnos(matr int primary key, nombre varchar(15), carr varchar(4), constraint tiene foreign key (carr) references carreras(carr), edad int);
create table planes(carr varchar(4), clave varchar(6), primary key(carr,clave), constraint contiene foreign key (carr) references carreras(carr), constraint pertenece foreign key (clave) references materias(clave));
create table califs(matr int, clave varchar(6), calif int, primary key(matr,clave),constraint obtiene foreign key(matr) references alumnos(matr), constraint otorga foreign key(clave) references materias(clave));
create table grupos(matr int, nemp int, clave varchar(6), salon int, primary key(matr,nemp,clave,salon), constraint forma_parte foreign key(matr) references alumnos(matr), constraint imparte foreign key(nemp) references profesor(nemp), constraint es_impartida foreign key(clave) references materias(clave),constraint es_asignado foreign key(salon) references salones(salon));
 
 
insert into carreras values('IIS','INDUSTRIAL');
insert into carreras values('IME','MECANICO');
insert into carreras values('ISE','ELECTRONICO');
insert into carreras values('ISC','COMPUTACION');
insert into carreras values('LSCA','LICENCIADO');
 
insert into profesor values(100,'PEDRO','MAESTRIA',24);
insert into profesor values(200,'JUAN','DOCTOR',30);
insert into profesor values(300,'LUIS','LIC.',21);
insert into profesor values(400,'LUCIA','DOCTOR',27);
insert into profesor values(450,'EDUARDO','MAESTRIA',32);
 
insert into salones values(1201,23);
insert into salones values(4021,40);
insert into salones values(5104,10);
insert into salones values(8755,40);
insert into salones values(9000,10);
 
insert into materias values('CB-001','Computacion I',8);
insert into materias values('CB-074','Base de Datos',8);
insert into materias values('IN-021','INGENIERIA PROD I',10);
insert into materias values('MA-031','MATEMATICAS I',10);
insert into materias values('SI-022','SISTEMAS DE INF. I',8);
insert into materias values('CB-090','TALLER BASE DE D.',10);
 
insert into alumnos values(100,'JUAN','ISE',18);
insert into alumnos values(101,'PEDRO','LSCA',21);
insert into alumnos values(102,'ANA','ISE',22);
insert into alumnos values(105,'MARIA','IIS',19);
insert into alumnos values(110,'RICARDO','IME',21);
insert into alumnos values(121,'ABEL','LSCA',22);
insert into alumnos values(131,'VERONICA','IIS',21);
insert into alumnos values(191,'MONICA','ISE',41);
 
insert into planes values('IIS','CB-001');
insert into planes values('IIS','IN-021');
insert into planes values('IME','MA-031');
insert into planes values('ISE','CB-001');
insert into planes values('ISC','CB-074');
insert into planes values('LSCA','SI-022');
insert into planes values('LSCA','CB-001');
 
insert into califs values(100,'CB-001',6);
insert into califs values(110,'MA-031',5);
insert into califs values(131,'MA-031',10);
 
insert into grupos values(100,100,'CB-001',1201);
insert into grupos values(100,300,'MA-031',4021);
insert into grupos values(101,400,'SI-022',8755);
insert into grupos values(110,200,'CB-001',5104);
insert into grupos values(110,300,'MA-031',4021);
insert into grupos values(131,100,'CB-001',8755);
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Como obtener estas consultas

Publicado por leonardo_josue (301 intervenciones) el 27/09/2017 17:19:26
Hola Ángel Antonio:

Creo que la mejor forma para saber qué es lo que quiere tu profesor, es preguntarle directamente a él... es muy raro que un docente se niegue a contestar dudas de los alumnos, sobre todo si las dudas son para aclarar alguna tarea. Pero bueno, también es de agradecerse tu iniciativa para hacer el trabajo buscando en foros como este.

Se le suele llamar CONSULTAS DE DOS NIVELES a aquellas consultas que utilizan SUBCONSULTAS, es decir, donde hay más de un SELECT en una misma consulta... típicamente se utilizan en unión con las cláusulas IN o EXISTS. Aquí va un ejemplo: supongamos que tenemos estas tablas:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
mysql> SELECT * FROM idiomas;
+-----------+-------------+
| id_idioma | descripcion |
+-----------+-------------+
|         1 | Español     |
|         2 | Inglés      |
|         3 | Francés     |
+-----------+-------------+
3 rows in set (0.00 sec)
 
mysql> SELECT * FROM numeros;
+-----------+-----------+-------------+
| id_numero | id_idioma | descripcion |
+-----------+-----------+-------------+
|         1 |         1 | uno         |
|         2 |         1 | dos         |
|         3 |         2 | one         |
|         4 |         2 | two         |
|         5 |         3 | un          |
|         6 |         3 | deux        |
+-----------+-----------+-------------+
6 rows in set (0.00 sec)

Supongamos que quiere obtener los números en español y en francés, esto podrías hacerlo con una consulta simple:

1
2
3
4
5
6
7
8
9
10
mysql> SELECT * FROM numeros where id_idioma in (1, 3);
+-----------+-----------+-------------+
| id_numero | id_idioma | descripcion |
+-----------+-----------+-------------+
|         1 |         1 | uno         |
|         2 |         1 | dos         |
|         5 |         3 | un          |
|         6 |         3 | deux        |
+-----------+-----------+-------------+
4 rows in set (0.06 sec)

pero ¿qué pasa si no supieras que los id's 1 y 3 son los que te interesan? tendrías que buscar primero en la tabla de idiomas:

1
2
3
4
5
6
7
8
9
10
mysql> SELECT id_idioma
    -> FROM idiomas
    -> WHERE descripcion IN ('Español', 'Francés');
+-----------+
| id_idioma |
+-----------+
|         1 |
|         3 |
+-----------+
2 rows in set (0.00 sec)

Entonces, podrías poner esto como una subconsulta:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
mysql> SELECT *
    -> FROM numeros
    -> WHERE
    -> id_idioma IN ( SELECT id_idioma
    ->                FROM idiomas
    ->                WHERE descripcion IN ('Español', 'Francés'));
+-----------+-----------+-------------+
| id_numero | id_idioma | descripcion |
+-----------+-----------+-------------+
|         1 |         1 | uno         |
|         2 |         1 | dos         |
|         5 |         3 | un          |
|         6 |         3 | deux        |
+-----------+-----------+-------------+
4 rows in set (0.02 sec)

¿Se entiende? Pero vuelvo a insistir con lo mismo, acércate a tu profesor y comentale si esto que te explico es lo que realmente quiere que hagas en tu tarea o si se tratan de conceptos distintos.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar

Como obtener estas consultas

Publicado por Angel Antonio (4 intervenciones) el 27/09/2017 19:21:21
Muchas gracias, me ha servido de mucho
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar