Ejercicios básicos de declaración 20200819-sql

1. Crea una tabla:

CREAR BASE DE DATOS MyHomework;
CREAR TABLA tb_class (
cid INT (4) PRIMARY KEY AUTO_INCREMENT,
cname VARCHAR (10)
)
INSERT INTO tb_class VALUES (1, 'kb01'), (2, 'kb01'), (3, 'kb01'), (4, 'kb01');

DROP TABLE tb_student;
CREAR TABLA tb_student (
sid INT (4) PRIMARY KEY AUTO_INCREMENT,
sname VARCHAR (10),
género VARCHAR (2),
class_id INT (4),
edad INT (100)

)

INSERT INTO tb_student (sname, gender, class_id, age) VALUES
(' Cro ', 'Male', 1,18),
('Messi', 'Male', 1,19),
('Beyonce', 'Mujer', 2,20),
('ysm', '女', 1,18),
('hly', '女', 2,18),
('rqm', '女', 2,20) ,
('lx', 'Hombre', 3,21),
('pq', 'Hombre', 3,19),
('wr', 'Hombre', 3,17);

DROP TABLE tb_teacher;
CREAR TABLA tb_teacher (
tid INT (4) PRIMARY KEY AUTO_INCREMENT,
tname VARCHAR (10),
género VARCHAR (2)
);
INSERT INTO tb_teacher (tname, gender) VALUES ('波 多', '女'), ('苍 空', '男'), ('饭 岛', '男');

CREAR TABLA tb_course (
tid INT (4) CLAVE PRIMARIA AUTO_INCREMENT,
cname VARCHAR (10),
teacher_id INT (4)
);
INSERT INTO tb_course (cname, teacher_id)
VALUES ('java', 1), ('java web', 1), ('mysql', 2);

CREAR TABLA tb_score (
sid INT (4) CLAVE PRIMARIA AUTO_INCREMENT,
stu_id INT (4),
corse_id INT (4),
puntuaciones INT (100)
);
INSERT INTO tb_score (stu_id, corse_id, scores)
VALUES (1,1,60), (1,2,85), (1,2,100);

2. Insertar datos:

# 1. Forme 3 estudiantes en cada clase
INSERT INTO tb_student (sname, gender, class_id) VALUES
('ysm', '女', 1),
('hly', 'nv', 2),
('rqm ',' Mujer ', 2),
(' lx ',' Hombre ', 3),
(' pq ',' Hombre ', 3),
(' wr ',' Hombre ', 3);

INSERT INTO tb_course (cname, teacher_id)
VALUES ('python', 2), ('hive', 3), ('linux', 3);

TRUNCATE TABLE tb_score;

INSERT INTO tb_score (stu_id, corse_id, scores)
VALORES (1,1,60), (1,2,85), (1,3,100), (1,4,60), (1,5,85), ( 1,6,100),
(2,1,100), (2,2,85), (2,3,98), (2,4,60), (2,5,85), (2,6,100),
( 3,1,60), (3,2,78), (3,3,98), (3,4,60), (3,5,85), (3,6,100),
(4,1, 99), (4,2,98), (4,3,87), (4,4,60), (4,5,85), (4,6,100),
(5,1,60), ( 5,2,67), (5,3,98), (5,4,60), (5,5,85), (5,6,100),
(6,1,90), (6,2, 87), (6,3,98), (6,4,60), (6,5,85), (6,6,100),
(7,1,99), (7,2,98), ( 7,3,78), (7,4,60), (7,5,85), (7,6,100),
(8,1,60), (8,2,90), (8,3, 78), (8,4,60), (8,5,85), (8,6,100),
(9,1,88), (9,2,98), (9,3,79), ( 9,4,60), (9,5,85), (9,6,100);

3. Ejercicios:

# 第 1 题 :
SELECCIONA tb1.stu_id
FROM tb_score tb1
JOIN tb_score tb2
ON tb1. scores> tb2. scoresY tb1. corse_id= 1 Y tb2. corse_id= 2
Y tb1. stu_id= tb2.stu_id

# 2. Consultar el ID del estudiante y el puntaje promedio de los estudiantes con un puntaje promedio superior a 60;
SELECT * FROM
(SELECT st.sid student ID, st.sname name, AVG (so.scores) average score
FROM tb_student st
JOIN tb_score so ON st . sid= so.stu_id
GROUP BY stu_id
) a
TENIENDO a. puntaje promedio> 80
ORDEN POR puntaje promedio DESC

# 3. Consultar la ID del estudiante, el nombre, el número de cursos y las puntuaciones totales de todos los estudiantes;
SELECCIONE sc.stu_id ID del estudiante, s.sname nombre,
COUNT (stu_id) número de cursos, SUM (sc.scores) puntuación total
FROM tb_score sc
UNIRSE tb_student s ON sc.stu_id = s.sid
GROUP BY stu_id

# 4, consulta el número de profesores con el apellido "Li";
SELECCIONA COUNT (tname) número
DE tb_teacher
DONDE tname LIKE '李%'

# 第 5 题 (1) :
SELECCIONA c.cname
FROM tb_course c, tb_teacher t
DONDE t. tidEN (SELECCIONE tid DE tb_teacher DONDE tname = '苍 空')
Y t. tid= c.teacher_id

# 第 5 题 (2) :
SELECT s.sname FROM tb_student s
WHERE sid IN (
SELECT s1.stu_id
FROM tb_score s1
WHERE s1.course_id = 2
)

# 第 5 题 (3) :
SELECT s.sname FROM tb_student s
WHERE s.sname NOT IN (
SELECT s0.sname FROM tb_student s0
WHERE sid IN (
SELECT s1.stu_id
FROM tb_score s1
WHERE s1.course_id = 2
)
)

# 第 6 题 (1):
SELECCIONE cname
DE tb_course
DONDE tid = 1 O tid = 2

# 8. Consulte la identificación del estudiante y el nombre de todos los estudiantes cuyas calificaciones del número de curso "002" sean inferiores al número de curso "001";
SELECCIONE s.sname, s.sid
FROM tb_student s
WHERE sid IN (
SELECT sc1.stu_id
FROM tb_score sc1 , tb_score sc2
DONDE sc1.stu_id = sc2.stu_id AND sc1. course_id= 1 AND sc2. corse_id= 2
AND sc1. scores<sc2. scores)

# 9. Consultar la identificación del estudiante y el nombre de los estudiantes que tienen una puntuación del curso de menos de 60 puntos;
SELECCIONE DISTINCT s.sname, s.sid
FROM tb_student s
WHERE sid IN (
SELECT sc1.stu_id
FROM tb_score sc1
WHERE sc1.stu_id AND sc1. scores<80 )

# 10. Consultar la identificación del estudiante y el nombre de los estudiantes que no han estudiado todos los cursos;
SELECCIONAR ID de estudiante de st.sid, nombre de
st.sname FROM tb_score sc
UNIRSE a tb_student st
ON sc.stu_id = st.sid
GROUP BY stu_id
TENIENDO CONTAR (course_id) <6

方法 二 :
SELECT COUNT (DISTINCT course_id), stu_id
FROM tb_score
GROUP BY stu_id
TENIENDO COUNT (DISTINCT course_id) <
(SELECT COUNT (1) FROM tb_course);

# 11. Consultar al menos un curso con el ID de estudiante y el nombre del estudiante cuyo ID de estudiante es "001";
# (1) Consultar si el curso seleccionado por el estudiante está en el curso del estudiante cuyo ID de estudiante es 1
SELECT s2 .stu_id
FROM tb_score s1
ÚNETE a tb_score s2
ON s1.course_id = s2.course_id
DONDE s1.stu_id = 1 AND s2.stu_id! = 1
GROUP BY stu_id
#having s1.course_id = s2.coutse_id

方法 二 :
SELECCIONA DISTINCT stu_id, sname
FROM tb_score s
JOIN tb_student st
ON s.stu_id = st.sid
DONDE s.course_id IN
(SELECCIONA DISTINCT course_id
FROM tb_score
DONDE stu_id = 1)
Y stu_id! = 1;

# (2) Obtenga la ID relevante y el nombre asociado con la tabla de estudiantes
SELECCIONE s.sid ID de estudiante, s.sname nombre
DE tb_student s
DONDE s.sid IN (
SELECCIONE s2.stu_id
FROM tb_score s1
JOIN tb_score s2
ON s1.course_id = s2 .course_id
DONDE s1.stu_id = 1 Y s2.stu_id! = 1
GROUP BY stu_id)

# 13. Pregunte sobre la identificación del estudiante y el nombre de los otros estudiantes que están estudiando el mismo curso que el compañero de clase de "002";
# 002 El estudiante ha seleccionado dos cursos, 1,3; 1; 2; 2,4;
# ( 1) La identificación del estudiante con el mismo número seleccionado por el estudiante No. 1
SELECT stu_id
FROM tb_score
GROUP BY stu_id
HAVING stu_id! = 1 AND COUNT (stu_id) = (
SELECT COUNT (stu_id) FROM tb_score WHERE stu_id = 1)

# (2) Vuelva a seleccionar la identificación del estudiante con el mismo nombre del curso que el estudiante No. 1

SELECT DISTINCT a.stu_id, COUNT (a. course_id) '相同 课程 个数' FROM tb_score a
LEFT JOIN
(SELECT course_id FROM tb_score WHERE stu_id = 2) b
ON a.course_id = b.course_id
GROUP BY stu_id
TENIENDO 相同 课程 个数 =
(SELECCIONE COUNT (course_id) DE tb_score DONDE stu_id = 1) Y stu_id <> 1

# 16. Muestre las puntuaciones de los tres cursos de "chino", "Matemáticas" e "inglés" para todos los estudiantes con calificaciones promedio bajas a altas,
# Muestre en el siguiente formato: ID de estudiante, chino, matemáticas, inglés, número de cursos efectivos Puntaje promedio efectivo; # El
primer método de implementación
SELECT * FROM
(SELECT sc.stu_id número de estudiante, s.sname nombre, COUNT (course_id) número de cursos, AVG (puntajes) puntaje promedio
FROM tb_score sc
UNIR tb_student s ON s. sid= Sc .stu_id

ÚNETE tb_course c ON c. cid= sc. course_id
DONDE cname = 'java'
GROUP BY sc. stu_id
) a
ORDER BY a. 平均 分 DESC

# 第二种 实现
方式 SELECT s.stu_id, s.scores python, mysql, java,
CASE WHEN s.scores IS NULL THEN 0 ELSE 1 END +
CASE WHEN mysql IS NULL THEN 0 ELSE 1 END +
CASE WHEN java ES NULL THEN 0 ELSE 1 END sub_cnt
FROM tb_score s
LEFT JOIN tb_course c ON cid = course_id
LEFT JOIN
(SELECT s.stu_id, s.scoures mysql
FROM tb_score s
JOIN tb_course c ON s.stu_id = b.stu_id
LEFT JOIN (SELECT, s.stu_id) puntuaciones java
FROM tb_score s UNIRSE tb_course
ON s.stu_id = d.stu_id DONDE
c. cname= 'python') a

# 18. Consultar las puntuaciones más altas y más bajas de cada materia: mostrar en el siguiente formato: ID del curso, puntuación más alta, puntuación más baja;
#Idea: agrupar por ID de curso, esta vez mostrará cuatro filas, y luego usará la función agregada max, min para encontrar los valores máximo y mínimo.
SELECT course_id número de curso, MAX (puntuaciones) puntuación más alta, MIN (puntuaciones) puntuación más baja
DE tb_score
GROUP BY course_id

# 19. Según el orden de la puntuación media de cada asignatura de menor a mayor y el porcentaje de aprobación de mayor a menor; #Nuevo
punto de conocimiento: caso en el que entonces equivale a juicio si

SELECT AVG (puntajes), course_id,
CONCAT (100 * SUM (CASE CUANDO puntajes> 60 THEN 1 ELSE 0 END) / COUNT (puntajes), '%') aprobado
DESDE tb_score
GROUP BY course_id
ORDER BY AVG (puntajes)
SUM (CASE CUANDO puntuaciones> 60 ENTONCES 1 ELSE 0 FIN) / CONTAR (puntuaciones) DESC;

# 20. El puntaje promedio del curso se muestra de mayor a
menor (mostrando el maestro); SELECCIONE el número de curso del ID del curso, el nombre del maestro, el puntaje promedio de AVG (puntajes)
DESDE tb_score s
ÚNETE tb_course c ON c.cid = s. course_id
UNIRSE tb_teacher t ON t.tid = c.teacher_id
GROUP BY course_id
ORDER BY Puntaje promedio DESC

# 21
SELECCIONE DISTINCT score1, score2, score3, score4, score5, score6 DE
(SELECCIONE puntuaciones 'score1' FROM tb_score DONDE course_id = 1 ORDEN POR puntuaciones DESC LIMIT 3) a,
(SELECCIONE puntuaciones 'score2' FROM tb_score DONDE course_id = 1 ORDEN POR puntajes DESC LIMIT 3) b,
(SELECCIONAR puntajes 'puntaje3' DESDE tb_score DONDE course_id = 1 ORDENAR POR puntajes DESC LIMIT 3) c,
(SELECCIONAR puntajes 'puntaje4' DESDE tb_score DONDE course_id = 1 ORDENAR POR puntajes DESC LIMIT 3) d,
(SELECCIONE puntuaciones 'score5' DE tb_score DONDE course_id = 1 ORDENE POR puntuaciones DESC LIMIT 3) e,
(SELECCIONE puntuaciones 'score6' DESDE tb_score DONDE course_id = 1 ORDENE POR puntuaciones DESC LÍMITE 3) f;

SELECCIONE puntuaciones 'score1' @m: = @ m + 1 FROM tb_score JOIN (SELECT @m: = 0) a DONDE course_id = 1
ORDEN POR LÍMITE de puntuación 3;

# 21
SELECCIONE a.course_id, a.scores, b.scores
FROM tb_score a
JOIN tb_score b ON a.course_id = b. course_idAND
a.scores <= b.scores
GROUP BY b.course_id, b. scores
TENIENDO CUENTA (PUNTUACIONES DISTINTAS) <= 3
ORDEN POR a. course_id, COUNT (DISTINCT b. scores);

# 22. Consultar el número de estudiantes seleccionados para cada curso;
SELECT course_id número de curso, COUNT (course_id) número de cursos seleccionados
FROM tb_score
GROUP BY course_id

# 23. Consultar los números de los estudiantes y los nombres de todos los estudiantes que solo tomaron un curso;
SELECCIONE el número de estudiante de st.sid, el nombre de
st.sname FROM tb_score sc
UNIRSE a tb_student st
ON sc.stu_id = st.sid
GROUP BY stu_id
TENIENDO CONTEO (course_id) = 2

# 24. Consultar el número de niños y niñas;
SELECCIONAR género, CONTAR (género) número
DE tb_student
GRUPO POR género

# 26. Consulte la lista de estudiantes con el mismo nombre y apellido, y cuente el número de personas con el mismo nombre;
SELECCIONE s.sname nombre, COUNT (sname) número
FROM tb_student s
GROUP BY sname
HAVING number! = 1

# 27. Consulte el puntaje promedio de cada curso y los resultados se ordenan en orden ascendente de puntaje promedio. Cuando el puntaje promedio es el mismo, se organizan en orden descendente del número de curso;
SELECCIONE curso_id número de curso, AVG (puntajes) puntaje promedio
DE tb_score
GRUPO POR curso_id
ORDEN POR puntaje promedio ASC #, course_id desc

# 28. Consultar la ID del estudiante, el nombre y el puntaje promedio de todos los estudiantes cuyo puntaje promedio es mayor a 85;
SELECCIONAR ID de estudiante de st.sid, nombre de st.sname, puntaje promedio AVG (puntajes)
DE tb_score
JOIN tb_student st
ON stu_id = st.sid
GROUP POR stu_id
TENIENDO puntuación media> 85

# 30. Encuentre el número de estudiantes que han seleccionado cursos
SELECT COUNT (sid) Número de cursos seleccionados
FROM tb_student
WHERE sid IN (
SELECT stu_id
FROM tb_score
GROUP BY stu_id
HAVING COUNT (course_id)> 0
)

方法 二 :
SELECT a.sid, sname FROM tb_student a
WHERE a.sid IN (SELECT DISTINCT stu_id FROM tb_score
GROUP BY course_id)

# 31
SELECT MAX (puntajes), sname, tname
FROM tb_teacher
UNIRSE tb_course ON teacher_id = tid
JOIN tb_score s ON cid = course_id
UNIR tb_student st ON s.stu_id = st.sid
DONDE tname = '李梅'
GROUP BY tid;

# 31. Consultar el nombre y grado del estudiante con la puntuación más alta entre los estudiantes que tomaron el curso impartido por el maestro "Yang Yan";
SELECCIONE s.sid número de estudiante, s.sname nombre, MAX (sc.scores) puntuación
FROM tb_score sc
JOIN tb_student s ON s. sid= sc. stu_id
WHERE course_id IN (SELECT cid FROM tb_course WHERE teacher_id IN (SELECT tid FROM tb_teacher DONDE tname = '李梅'))
GROUP BY stu_id
ORDER BY score DESC
LIMIT 1;

33. Consultar cada curso y el número correspondiente de electivas; el
primer
SELECT c.cname nombre del curso, c.cid número de curso, COUNT (course_id) número de cursos electivos
FROM tb_score sc
UNIRSE tb_course c ON sc.course_id = c.cid
GROUP BY course_id

34. Consulte el ID del estudiante, el ID del curso y el puntaje del estudiante de los estudiantes con el mismo puntaje en diferentes cursos;
SELECCIONE s1.stu_id ID del estudiante, s1.course_id ID del curso, s1.scores score
FROM tb_score s1
JOIN tb_score s2
ON s1.stu_id = s2. stu_id AND s1.course_id! = s2.course_id AND s1.scores = s2.scores

35. Consulta los dos primeros con las mejores puntuaciones para cada curso
;
# Primero , selecciona count (1) indica el número de filas elegibles en la tabla de consulta; # sc2.scores> = sc1.scores AND sc1.course_id = sc2.course_id Representa la condición de la consulta; # El
significado general es consultar el
número de filas que satisfacen la condición # sc2.scores> = sc1.scores AND sc1.course_id = sc2.course_id de la tabla sc2 ; #Combinada
con la declaración sql completa, esta consulta es El número de filas debe ser <= 2, por lo que "número de filas <= 2" se utiliza como condición de consulta de la declaración de consulta anterior.
# Entonces, para seleccionar 2 personas, primero agrupe las tablas en orden descendente por cursos. De hecho, los datos de las dos tablas son los mismos, por lo que sin agregar la condición de <= 2
# todas las filas deben cumplir las condiciones, entonces <= 2 De hecho, se seleccionan las dos primeras líneas.

SELECCIONE sc1. *
FROM tb_score sc1
WHERE (SELECT COUNT (score) FROM tb_score sc2 DONDE
sc2.scores> = sc1.scores AND sc1.course_id = sc2.course_id) <= 2
ORDEN POR sc1.course_id;

老师 :
SELECCIONA a.course_id, a.scores
FROM tb_score a
JOIN tb_score b
ON a.course_id = b.course_id AND a.scores <= b.scores
GROUP BY b.course_id, a.scores
QUE TIENEN CUENTA (DISTINCT b.scores) <= 2
ORDER BY a.course_id, COUNT (DISTINCT b.scores);

36. Recupere la identificación de estudiante de los estudiantes que han tomado al menos dos cursos;
SELECCIONE DISTINCT stu_id ID de estudiante, COUNT (stu_id)
FROM tb_score
GROUP BY stu_id
HAVING Selección de curso> 1

37. Consulte el número de curso y el nombre del curso de los cursos tomados por todos los estudiantes;
SELECCIONE stu_id número de estudiante, course_id número de curso, cname nombre del curso
FROM tb_score
JOIN tb_course ON course_id = cid

38. Consultar los nombres de los alumnos que no han estudiado ningún curso impartido por el profesor "Ye Ping"; el
primer tipo

SELECCIONE sname 姓名, sid 学 号 FROM tb_student DONDE sname NO ESTÁ EN (
SELECT DISTINCT sname
FROM tb_student st
UNIRSE tb_score s ON st.sid = s.stu_id
DONDE course_id IN (SELECCIONE cid FROM tb_course DONDE teacher_id IN (
SELECCIONE tid FROM tb_ '罗 老师')
)
)

El segundo

38. Pregunte sobre el número de estudiantes y la calificación promedio de los estudiantes que reprobaron más de dos cursos;

SELECCIONE s1.stu_id, AVG (puntuaciones)
FROM tb_score s1
#join (seleccione avg (puntuaciones) de tb_score s2 donde puntuaciones <= 70 agrupar por id_estudio) a
DONDE puntuaciones <= 70
GRUPO POR id_estudio
TENIENDO CONTAR (id_estudio)> = 2

39. Recupere la identificación de estudiante de los estudiantes cuyo puntaje del curso "004" sea inferior a 60, en orden descendente de puntaje;
SELECCIONE stu_id, puntajes FROM tb_score
DONDE course_id = 4 Y puntajes <80
ORDEN POR puntajes DESC

40. Eliminar la puntuación del curso "001" del compañero de clase "002";
ELIMINAR DE tb_score
DONDE stu_id = 3 Y course_id = 3

41. Consultar el nombre del estudiante cuyo puntaje es 85, 86 o 88 en la tabla de puntajes
SELECT sid, sname FROM tb_student
WHERE sid IN (
SELECT stu_id FROM tb_score WHERE puntajes = 85 O puntajes = 86 O puntajes = 88)

42. Consultar el número de estudiantes en la clase "kb03"
SELECT COUNT (class_id) Número FROM tb_student
WHERE class_id IN (SELECT cid FROM tb_class WHERE cname = 'kb03')

43. Consultar el puntaje promedio del maestro de "Zhang Xu" de los estudiantes en las clases
SELECT course_id, AVG (puntajes)
FROM tb_score WHERE course_id IN (SELECT cid FROM tb_course WHERE teacher_id IN
(SELECT tid FROM tb_teacher WHERE tname = '王 老师'))
GROUP BY course_id

44. Consultar los nombres de todos los estudiantes con la misma edad que el estudiante cuyo número de estudiante es 108
SELECT s.sname, s.sid
FROM tb_student s
JOIN tb_student s1
ON s.age = s1.age AND s1.sid = 4;

45. Consultar la tabla de puntuaciones de los estudiantes cuyas puntuaciones son inferiores a la puntuación media del curso
SELECT stu_id, a.course_id, puntuaciones
FROM tb_score a
JOIN (
SELECT course_id, AVG (puntuaciones) puntuación media FROM tb_score GROUP BY course_id) b
ON a.course_id = b .course_id
DONDE a.scores <b. Puntaje promedio
#grupo por a.course_id

46. ​​Consultar el número de clase de al menos 3 niñas
SELECCIONE cid FROM tb_class
DONDE cid IN (SELECCIONE class_id FROM tb_student DONDE género = '女'
GROUP BY class_id
TIENE CONTEO (class_id)> = 2)

47. Consultar a los profesores "varones" y las transcripciones de sus cursos
SELECCIONAR cname
FROM tb_course
WHERE teacher_id IN (SELECT tid FROM tb_teacher WHERE gender = 'Male')

48. La consulta muestra los puntajes promedio de estudiantes masculinos y femeninos por separado
SELECCIONAR género, AVG (puntajes)
FROM tb_score a
JOIN tb_student b
ON a.stu_id = b.sid
GROUP BY gender

49. Consultar los nombres de los profesores con más de 5 estudiantes tomando un curso
SELECCIONE tname FROM tb_teacher
DONDE tid IN (SELECT teacher_id FROM tb_course WHERE cid IN
(SELECT course_id FROM tb_score GROUP BY course_id
TENIENDO CONTAR (course_id)> = 5
))

50. Consulte los puntajes promedio de los cursos que son seleccionados por al menos 5 estudiantes en la tabla de cursos y comience con java
SELECCIONE AVG (puntajes)
FROM tb_score
UNIRSE tb_course
WHERE course_id IN (SELECT cid FROM tb_course WHERE cname LIKE'java% ')
GROUP BY course_id
TENIENDO COUNT (course_id)> 3

Supongo que te gusta

Origin blog.csdn.net/qq_42005540/article/details/108108118
Recomendado
Clasificación