Directorio de artículos
1 Declaración de la biblioteca
create database if not exists studentinfo character set utf8mb4;
2 Declaración de construcción de mesa
Un alumno puede elegir varios cursos y un curso corresponde a varios alumnos, por lo que se necesita una tabla de relaciones (student_course). Para mayor comodidad, además de poner la identificación del estudiante y la identificación del curso en student_course, también coloque las calificaciones en la tabla de relaciones. El otro curso corresponde a un profesor.
(1) Mesa de estudiantes (estudiante)
create table student(
s_id int,
sname varchar(20),
sage int,
sgender varchar(8)
)
(2) Horario del curso
create table course(
c_id int,
cname varchar(20),
t_id int
)
(3) Tabla de relaciones (student_course) -tabla de relaciones entre estudiantes y cursos
create table student_course(
s_id int, # 学生id
c_id int, # 课程id
score int # 成绩
)
(4) Mesa de profesores (profesor)
create table teacher(
t_id int, #老师id
tname varchar(20) # 老师姓名
)
3 Insertar datos de prueba
(1) Inserte los datos del estudiante
insert into student select 1,N'刘一',18,N'男' union all
select 2,N'钱二',19,N'女' union all
select 3,N'张三',17,N'男' union all
select 4,N'李四',18,N'女' union all
select 5,N'王五',17,N'男' union all
select 6,N'赵六',19,N'女' ;
Nota:
- N indica que la siguiente cadena es un carácter Unicode.
- Unión: operación de unión de dos conjuntos de resultados, excluyendo filas duplicadas y ordenando por reglas predeterminadas al mismo tiempo;
- Unir todo: realice la operación de unión en dos conjuntos de resultados, incluidas las filas duplicadas, sin ordenar;
- Tenga en cuenta que puede usar seleccionar al insertar usando insertar (debe asegurarse de que el campo de consulta sea consistente con el campo insertado)
insert into student values(1,’张三’,1203);
insert into test_user(name, email) select name, qq_mail from student;
(2) Insertar datos del profesor
insert into teacher select 1,N'叶平' union all
select 2,N'贺高' union all
select 3,N'杨艳' union all
select 4,N'周磊';
(3) Insertar datos del curso
insert into course select 1,N'语文',1 union all
select 2,N'数学',2 union all
select 3,N'英语',3 union all
select 4,N'物理',4;
(4) Insertar datos de tabla relacional
insert into student_course
select 1,1,56 union all
select 1,2,78 union all
select 1,3,67 union all
select 1,4,58 union all
select 2,1,79 union all
select 2,2,81 union all
select 2,3,92 union all
select 2,4,68 union all
select 3,1,91 union all
select 3,2,47 union all
select 3,3,88 union all
select 3,4,56 union all
select 4,2,88 union all
select 4,3,90 union all
select 4,4,93 union all
select 5,1,46 union all
select 5,3,78 union all
select 5,4,53 union all
select 6,1,35 union all
select 6,2,68 union all
select 6,4,71;
4 Preguntas frecuentes
(1) Consultar la identificación de estudiante de todos los estudiantes cuya identificación sea "001" y cuya puntuación sea superior a "002";
select a.s_id FROM
(select s_id,score from student_course where c_id = '001') a,(select s_id,score from student_course where c_id = '002') b
where a.score > b.score and a.s_id = b.s_id;
| s_id |
+------+
| 3 |
(2) Consultar el número de alumnos y la puntuación media con una puntuación media superior a 60;
select s_id,avg(score)
from student_course
group by s_id
having avg(score)>60;
| s_id | avg(score) |
+------+------------+
| 1 | 64.7500 |
| 2 | 80.0000 |
| 3 | 70.5000 |
| 4 | 90.3333 |
(3) Consultar la identificación del estudiante, nombre, número de cursos y puntaje total de todos los estudiantes;
select s.s_id,s.sname, count(sc.c_id),sum(sc.score) from
student s left join student_course sc on s.s_id = sc.s_id
group by s.s_id, s.sname;
| s_id | sname | count(student_course.c_id) | sum(score) |
+------+--------+----------------------------+------------+
| 1 | 刘一 | 4 | 259 |
| 2 | 钱二 | 4 | 320 |
| 3 | 张三 | 4 | 282 |
| 4 | 李四 | 3 | 271 |
| 5 | 王五 | 3 | 177 |
| 6 | 赵六 | 3 | 174 |
(4) Consultar el número de profesores con el apellido "Ye";
select count(*) from teacher where tname like '叶%';
| count(*) |
+----------+
| 1 |
(5) Consultar el número de alumno y el nombre de los alumnos que no han estudiado el curso del profesor "Ye Ping";
select s.s_id, s.sname from student s where s.s_id
not in (select sc.s_id from student_course sc, course c, teacher t
where sc.c_id = c.c_id and c.t_id=t.t_id and t.tname='叶平');
| s_id | sname |
+------+--------+
| 4 | 李四 |
(6) Consultar el ID de estudiante y el nombre de los estudiantes que han estudiado "001" y también han estudiado el número de curso "002";
select s.s_id, s.sname from student s,student_course sc where
sc.s_id = s.s_id and sc.c_id = '001'
and exists (select * from student s1, student_course sc1
where s1.s_id=sc1.s_id and sc1.c_id='002' );
| s_id | sname |
+------+--------+
| 1 | 刘一 |
| 2 | 钱二 |
| 3 | 张三 |
| 6 | 赵六
Nota:
La subconsulta correspondiente a existe en realidad no devuelve ningún dato, sino que devuelve Verdadero o Falso. EXISTS especifica una subconsulta, que se utiliza principalmente para detectar la existencia de filas.
(7) Consultar el número de alumno y el nombre de los alumnos que han cursado todos los cursos impartidos por el profesor "Ye Ping";
select s.s_id,s.sname from student s
where s.s_id in (select sc.s_id from student_course sc,course c, teacher t
where sc.c_id = c.c_id and c.t_id = t.t_id and t.tname ='叶平');
| s_id | sname |
+------+--------+
| 1 | 刘一 |
| 2 | 钱二 |
| 3 | 张三 |
| 5 | 王五 |
| 6 | 赵六 |
(8) Consultar la identificación del estudiante y el nombre de todos los estudiantes cuyas calificaciones del curso número "002" sean inferiores a las del curso número "001";
select a.s_id,a.sname from
(select sc.s_id,sc.score,s.sname from student_course sc,student s
where sc.s_id=s.s_id and sc.c_id='001')a,
(select sc.s_id,sc.score from student_course sc,student s
where sc.s_id=s.s_id and sc.c_id='002') b
where a.s_id=b.s_id and a.score>b.score;
| s_id | sname |
+------+--------+
| 3 | 张三 |
+------+--------+
(9) Consultar la identificación del estudiante y el nombre de todos los estudiantes cuyos puntajes en el curso son menos de 60 puntos;
select s.s_id,s.sname from student s
where s.s_id in (select sc.s_id from student_course sc
where sc.score<60);
s_id | sname |
+------+--------+
| 1 | 刘一 |
| 3 | 张三 |
| 5 | 王五 |
| 6 | 赵六 |
(10) Consultar la identificación del estudiante y el nombre de los estudiantes que no han estudiado todos los cursos;
select s.s_id,s.sname from student s, student_course sc
where sc.s_id = s.s_id group by s.s_id,s.sname
having count(sc.c_id)<(select count(c_id) from course);
| s_id | sname |
+------+--------+
| 4 | 李四 |
| 5 | 王五 |
| 6 | 赵六 |
Nota:
Las funciones de agregación, como contar, no se pueden utilizar en la cláusula where. La función de la cláusula where es filtrar los datos antes de agrupar y tener que filtrar los datos después de la agrupación. Las condiciones suelen incluir funciones de agregación.
(11) Consultar la identificación del estudiante y el nombre de al menos una clase que sea igual al estudiante cuya identificación de estudiante es "1";
select distinct s.s_id,s.sname from student s,student_course sc
where s.s_id=sc.s_id and sc.c_id in
(select c.c_id from student s, course c, student_course sc
where s.s_id = sc.s_id and s.s_id = '1');
| s_id | sname |
+------+--------+
| 1 | 刘一 |
| 2 | 钱二 |
| 3 | 张三 |
| 4 | 李四 |
| 5 | 王五 |
| 6 | 赵六 |
(12) Organice las dos últimas letras de sname en la tabla de estudiantes en orden ascendente
select sname from student order by substr(sname,length(sname)-1,2);
Uso de substr:
substr(string string,num start,num length);
string为字符串;
start为起始位置;
length为长度。
Artículo de referencia: http://www.manongjc.com/article/41690.html