
一、建库建表
sql
mysql> USE mydb11_stu;
Database changed
mysql> CREATE TABLE student(
-> id INT(10) NOT NULL UNIQUE PRIMARY KEY,
-> name VARCHAR(20) NOT NULL,
-> sex VARCHAR(4),
-> birth YEAR,
-> department VARCHAR(20),
-> address VARCHAR(50)
-> );
Query OK, 0 rows affected (0.04 sec)
mysql> CREATE TABLE score(
-> id INT(10) NOT NULL UNIQUE PRIMARY KEY AUTO_INCREMENT,
-> stu_id INT(10) NOT NULL,
-> c_name VARCHAR(20),
-> grade INT(10)
-> );
Query OK, 0 rows affected (0.03 sec)
二、向表中插入数据
sql
mysql> INSERT INTO student VALUES(901,'张三丰','男',2002,'计算机系','北京市海淀区');
Query OK, 1 row affected (0.01 sec)
mysql> INSERT INTO student VALUES(902,'周全有','男',2000,'中文系','北京市昌平区');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO student VALUES(903,'张思维','女',2003,'中文系','湖南省永州市');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO student VALUES(904,'李广昌','男',1999,'英语系','辽宁省阜新市');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO student VALUES(905,'王翰','男',2004,'英语系','福建省厦门市');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO student VALUES(906,'王心凌','女',1998,'计算机系','湖南省衡阳市');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO score VALUES(NULL,901,'计算机',98);
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO score VALUES(NULL,901,'英语',80);
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO score VALUES(NULL,902,'计算机',65);
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO score VALUES(NULL,902,'中文',88);
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO score VALUES(NULL,903,'中文',95);
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO score VALUES(NULL,904,'计算机',70);
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO score VALUES(NULL,904,'英语',92);
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO score VALUES(NULL,905,'英语',94);
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO score VALUES(NULL,906,'计算机',49);
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO score VALUES(NULL,906,'英语',83);
Query OK, 1 row affected (0.00 sec)
三、查询题目解答
(1) 分别查询student表和score表的所有记录
sql
mysql> SELECT * FROM student;
mysql> SELECT * FROM score;
(2) 查询student表的第2条到5条记录 分页limit 偏移量,条数
sql
mysql> SELECT * FROM student LIMIT 1,4;
(3) 查询计算机系和英语系的学生信息
sql
mysql> SELECT * FROM student WHERE department IN ('计算机系','英语系');
(4) 查询年龄小于22岁学生信息 年份计算:2026-birth <22
sql
mysql> SELECT * FROM student WHERE 2026 - birth < 22;
(5) 查询每个院系人数
sql
mysql> SELECT department,COUNT(id) AS 人数 FROM student GROUP BY department;
(6) 查询每个科目最高分
sql
mysql> SELECT c_name,MAX(grade) AS 最高分 FROM score GROUP BY c_name;
(7) 查询李广昌的考试科目和成绩
sql
mysql> SELECT c_name,grade FROM score s JOIN student st ON s.stu_id=st.id WHERE st.name='李广昌';
(8) 连接查询所有学生信息+考试信息
sql
mysql> SELECT st.*,s.c_name,s.grade FROM student st LEFT JOIN score s ON st.id=s.stu_id;
(9) 计算每个学生总成绩
sql
mysql> SELECT st.id,st.name,SUM(s.grade) AS 总成绩 FROM student st LEFT JOIN score s ON st.id=s.stu_id GROUP BY st.id,st.name;
(10) 计算每个科目平均成绩
sql
mysql> SELECT c_name,AVG(grade) AS 平均成绩 FROM score GROUP BY c_name;
(11) 查询计算机成绩低于95的学生信息
sql
mysql> SELECT DISTINCT st.* FROM student st JOIN score s ON st.id=s.stu_id WHERE s.c_name='计算机' AND s.grade <95;
(12) 计算机成绩从高到低排序
sql
mysql> SELECT st.name,s.grade FROM student st JOIN score s ON st.id=s.stu_id WHERE s.c_name='计算机' ORDER BY s.grade DESC;
(13) 两表查学号,合并结果 union去重
sql
mysql> SELECT id FROM student UNION SELECT stu_id FROM score;
(14) 姓张/姓王 姓名、院系、科目、成绩
sql
mysql> SELECT st.name,st.department,s.c_name,s.grade FROM student st LEFT JOIN score s ON st.id=s.stu_id WHERE st.name LIKE '张%' OR st.name LIKE '王%';
(15) 湖南学生:姓名、年龄、院系、科目、成绩
sql
mysql> SELECT st.name,2026-st.birth AS 年龄,st.department,s.c_name,s.grade FROM student st LEFT JOIN score s ON st.id=s.stu_id WHERE st.address LIKE '%湖南省%';