根据如下数据表写出SQL语句 学生信息表(student) 学号(id) 姓名(name) 001 张三 李四 003 王五 年龄(age) 16 16 n 学生成绩表(score) 学号(id) 00I 001 002 002 科目 (sub) 语文 数学 语文 数学 分数(sco) 85 95 60 603、请写出 SQL,统计每个学生的总分,并按总总分降序排序。查询结果如下:姓名(name)总分 (total) 学号(id) 001 002 003 张三 李四 王五 180 120 0
时间: 2023-12-12 20:04:06 浏览: 25
可以使用如下SQL语句:
```
SELECT s.name AS name, COALESCE(SUM(sc.sco), 0) AS total, s.id AS id
FROM student s LEFT JOIN score sc
ON s.id = sc.id
GROUP BY s.id, s.name
ORDER BY total DESC;
```
解释一下:
- 首先从学生信息表(student)中选择学生姓名(name)和学号(id),并且使用LEFT JOIN连接到学生成绩表(score)中。
- 使用COALESCE函数将SUM函数的结果转换为0,因为如果某个学生没有成绩,则SUM函数返回NULL,这会导致排序出错。
- 使用GROUP BY将结果按学号(id)和姓名(name)分组计算每个学生的总分。
- 使用ORDER BY将结果按照总分(total)降序排序。
相关问题
Student 表: num name age scoreid 97001 张三 23 1002 97002 李四 21 1005 97003 王五 NULL 1001 97004 赵六 22 1004 97005 吴七 20 1003 Socre 表: num linux C cpp 1001 56 67 80 1002 72 84 59 1003 49 60 60 1004 80 72 55 1005 61 20 57 (1) 写出创建student表的sql语句(num 为主键), (2) 写出sql语句,将age 的类型由 int 修改为 tiny int; (3) 写出sql语句查出李四同学的 C++ (字段名为cpp)的成绩 ; (4) 写出sql语句,显示姓名为李四,吴七,张三的学号(num); (5) 请写出sql,删除年龄(age)为NULL的记录。
(1) 创建Student表的SQL语句:
```mysql
CREATE TABLE Student (
num VARCHAR(20) PRIMARY KEY,
name VARCHAR(20),
age INT,
scoreid VARCHAR(20)
);
```
(2) 将age的类型由int修改为tinyint的SQL语句:
```mysql
ALTER TABLE Student MODIFY age TINYINT;
```
(3) 查出李四同学的C++(字段名为cpp)的成绩的SQL语句:
```mysql
SELECT cpp FROM Student s, Score sc WHERE s.num=sc.num AND s.name='李四';
```
(4) 显示姓名为李四、吴七、张三的学号(num)的SQL语句:
```mysql
SELECT num FROM Student WHERE name IN ('李四', '吴七', '张三');
```
(5) 删除年龄(age)为NULL的记录的SQL语句:
```mysql
DELETE FROM Student WHERE age IS NULL;
```
向student表中插入学号、姓名、年龄、性别、专业的数据库数据
好的,以下是向`student`表中插入学号、姓名、年龄、性别、专业的示例 SQL 语句:
```
INSERT INTO student (id, name, age, gender, major) VALUES
(1, '张三', 20, '男', '计算机科学'),
(2, '李四', 21, '女', '软件工程'),
(3, '王五', 19, '男', '信息安全'),
(4, '赵六', 22, '女', '人工智能');
```
在上面的 SQL 语句中,`id`代表学号,`name`代表姓名,`age`代表年龄,`gender`代表性别,`major`代表专业。您可以根据实际需要进行调整。