有以下库表设计CREATE TABLE students ( student_id INT PRIMARY KEY, student_name VARCHAR(50), age INT, gender VARCHAR(10), class_id INT ); INSERT INTO students (student_id, student_name, age, gender, class_id) VALUES (101, '张三', 18, '男', 1), (102, '李四', 19, '女', 2), (103, '王五', 20, '男', 1), (104, '赵六', 18, '女', 2), (105, '陈七', 19, '男', 1); CREATE TABLE classes ( class_id INT PRIMARY KEY, class_name VARCHAR(50), student_count INT ); INSERT INTO classes (class_id, class_name, student_count) VALUES (1, 'A班', 50), (2, 'B班', 60), (3, 'C班', 45); CREATE TABLE courses ( course_id INT PRIMARY KEY, course_name VARCHAR(50), credit INT ); INSERT INTO courses (course_id, course_name, credit) VALUES (1, '数学', 4), (2, '英语', 3), (3, '物理', 5); CREATE TABLE scores ( score_id INT PRIMARY KEY, student_id INT, course_id INT, score INT ); INSERT INTO scores (score_id, student_id, course_id, score) VALUES (1, 101, 1, 85), (2, 101, 2, 90), (3, 102, 1, 92), (4, 103, 3, 88), (5, 104, 2, 75), (6, 105, 1, 95);现在要查询未选修课程的学生的学号和姓名,sql怎么写
时间: 2024-04-08 07:34:57 浏览: 174
您可以使用以下SQL语句查询未选修课程的学生的学号和姓名:
```sql
SELECT student_id, student_name
FROM students
WHERE student_id NOT IN (
SELECT DISTINCT student_id
FROM scores
);
```
这个查询首先在`scores`表中使用子查询获取已选修课程的学生学号,然后使用`NOT IN`关键字在`students`表中过滤出未选修课程的学生的学号和姓名。
相关问题
-- 创建学生表 CREATE TABLE students ( id INT PRIMARY KEY, name VARCHAR(50), age INT, gender VARCHAR(10) ); -- 创建课程表 CREATE TABLE courses ( id INT PRIMARY KEY, name VARCHAR(50), credits INT ); -- 创建成绩表 CREATE TABLE grades ( student_id INT, course_id INT, grade INT, PRIMARY KEY (student_id, course_id), FOREIGN KEY (student_id) REFERENCES students(id), FOREIGN KEY (course_id) REFERENCES courses(id) ); -- 创建教师表 CREATE TABLE teachers ( id INT PRIMARY KEY, name VARCHAR(50) ); -- 创建教师学生表 CREATE TABLE teachers_students ( id INT PRIMARY KEY, name VARCHAR(50) ); -- 创建教师课程表 CREATE TABLE teachers_courses ( id INT PRIMARY KEY, name VARCHAR(50) ); 查询学生表中的所有学生信息。 查询选修了课程名为 "Math" 的学生的姓名和成绩。 查询所有选修了至少一门课程的学生的学号和姓名。 查询没有选修任何课程的学生的姓名和年龄。 查询课程表中学分最高的课程名。 查询每个课程的平均成绩。 查询选修了课程数超过3门的学生的姓名和选修课程数。 查询每个教师所教授的学生人数。 查询成绩表中成绩为最高分的学生的姓名和课程名。 查询没有分配教师的课程名。
查询学生表中的所有学生信息:
```
SELECT * FROM students;
```
查询选修了课程名为 "Math" 的学生的姓名和成绩:
```
SELECT students.name, grades.grade FROM students INNER JOIN grades ON students.id = grades.student_id INNER JOIN courses ON courses.id = grades.course_id WHERE courses.name = "Math";
```
查询所有选修了至少一门课程的学生的学号和姓名:
```
SELECT students.id, students.name FROM students INNER JOIN grades ON students.id = grades.student_id;
```
查询没有选修任何课程的学生的姓名和年龄:
```
SELECT students.name, students.age FROM students LEFT JOIN grades ON students.id = grades.student_id WHERE grades.student_id IS NULL;
```
查询课程表中学分最高的课程名:
```
SELECT name FROM courses WHERE credits = (SELECT MAX(credits) FROM courses);
```
查询每个课程的平均成绩:
```
SELECT courses.name, AVG(grades.grade) FROM courses INNER JOIN grades ON courses.id = grades.course_id GROUP BY courses.name;
```
查询选修了课程数超过3门的学生的姓名和选修课程数:
```
SELECT students.name, COUNT(*) FROM students INNER JOIN grades ON students.id = grades.student_id GROUP BY students.id HAVING COUNT(*) > 3;
```
查询每个教师所教授的学生人数:
```
SELECT teachers.name, COUNT(*) FROM teachers INNER JOIN teachers_students ON teachers.id = teachers_students.id INNER JOIN grades ON grades.student_id = teachers_students.id GROUP BY teachers.name;
```
查询成绩表中成绩为最高分的学生的姓名和课程名:
```
SELECT students.name, courses.name FROM students INNER JOIN grades ON students.id = grades.student_id INNER JOIN courses ON courses.id = grades.course_id WHERE grades.grade = (SELECT MAX(grade) FROM grades);
```
查询没有分配教师的课程名:
```
SELECT courses.name FROM courses LEFT JOIN teachers_courses ON courses.id = teachers_courses.id WHERE teachers_courses.id IS NULL;
```
好的,以下是一个简单的学生成绩表数据库设计: 表名:students 字段: id:学生ID,主键 name:学生姓名 gender:学生性别 age:学生年龄 class:学生所在班级 表名:courses 字段: id:课程ID,主键 name:课程名称 表名:scores 字段: id:成绩ID,主键 student_id:学生ID,外键,关联到students表的id字段 course_id:课程ID,外键,关联到courses表的id字段 score:成绩 这个数据库设计中,students表存储学生信息,包括学生ID、姓名、性别、年龄和所在班级;courses表存储课程信息,包括课程ID和名称;scores表存储学生的成绩信息,包括成绩ID、学生ID、课程ID和成绩。通过这个数据库,可以方便地对学生成绩进行管理和查询。打印脚本
以下是一个简单的学生成绩表数据库设计的 SQL 打印脚本:
```sql
-- 创建 students 表
CREATE TABLE students (
id INT PRIMARY KEY,
name VARCHAR(255),
gender VARCHAR(10),
age INT,
class VARCHAR(255)
);
-- 创建 courses 表
CREATE TABLE courses (
id INT PRIMARY KEY,
name VARCHAR(255)
);
-- 创建 scores 表
CREATE TABLE scores (
id INT PRIMARY KEY,
student_id INT,
course_id INT,
score INT,
FOREIGN KEY (student_id) REFERENCES students(id),
FOREIGN KEY (course_id) REFERENCES courses(id)
);
```
这个脚本会创建三个表,分别是 `students`、`courses` 和 `scores`。其中,`students` 表包含 `id`、`name`、`gender`、`age` 和 `class` 五个字段;`courses` 表包含 `id` 和 `name` 两个字段;`scores` 表包含 `id`、`student_id`、`course_id` 和 `score` 四个字段,并且 `student_id` 和 `course_id` 分别是指向 `students` 表和 `courses` 表的外键。
阅读全文