一张表,用sql查出只选两门课程的学生姓名和学号.
时间: 2024-03-07 13:49:00 浏览: 86
假设有以下表结构:
```
表名:student
字段:id(学号)、name(姓名)
表名:score
字段:id(学号)、course(课程名)
```
可以使用以下 SQL 语句查询只选了两门课程的学生姓名和学号:
```sql
SELECT s.id, s.name
FROM student s
INNER JOIN score sc ON s.id = sc.id
GROUP BY s.id, s.name
HAVING COUNT(DISTINCT sc.course) = 2;
```
这条 SQL 语句的含义是:先通过内连接将学生表和成绩表关联起来,然后按照学生的学号和姓名进行分组,最后在分组的结果中筛选出只选了两门不同课程的学生。
相关问题
写一份数据库原理的实验报告使用企业管理器建立学生选课数据库“StdentW101”,数据 库表为S(学生信息表)、C(课程信息表)、SC(选课信息 表):1.检索丁宝康老师所授课程的课程号和课程名 2.检索年龄大于19岁的男学生的学号和姓名。 3. 检索至少选修两门课程的学生学号。 4. 统计有学生选修的课程门数。 5. 求选修课程号为2的学生的平均年龄。 6.求马良老师所授课程的每门课程的学生平均成绩 7.统计每门课程的学生选修人数(超过1人的课程才统计)。要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列。 8. 检索姓名以王打头的所有学生的姓名和年龄。 9.在SC中检索成绩为空值的学生学号和课程号。SNO CNO GHADE 96001 1 92 96001 2 85 96001 3 88 96002 2 90 96002 3 80 96002 1 7.5 96003 95 96003 7 98 96004 1 92 96005 1 59 96005 6 84
实验目的:
1. 了解数据库的基本原理和操作;
2. 掌握企业管理器的使用方法;
3. 实现基本的SQL语句。
实验步骤:
1. 打开企业管理器,新建一个名为“StdentW101”的数据库,并在其中创建三个表格,分别为S(学生信息表)、C(课程信息表)和SC(选课信息表)。
2. 对于S表,创建以下字段:SNO(学号)、SNAME(姓名)、SEX(性别)、AGE(年龄)和BIRTHDAY(出生日期)。
3. 对于C表,创建以下字段:CNO(课程号)、CNAME(课程名称)和TNO(教师号)。
4. 对于SC表,创建以下字段:SNO(学号)、CNO(课程号)和GRADE(成绩)。
5. 向S表中插入学生信息,向C表中插入课程信息,向SC表中插入选课信息。
6. 使用SQL语句实现以下查询:
1. 检索丁宝康老师所授课程的课程号和课程名
```sql
SELECT C.CNO, C.CNAME
FROM C
WHERE C.TNO = (
SELECT T.TNO
FROM T
WHERE T.TNAME = '丁宝康'
)
```
2. 检索年龄大于19岁的男学生的学号和姓名。
```sql
SELECT S.SNO, S.SNAME
FROM S
WHERE S.AGE > 19 AND S.SEX = '男'
```
3. 检索至少选修两门课程的学生学号。
```sql
SELECT SC.SNO
FROM SC
GROUP BY SC.SNO
HAVING COUNT(*) >= 2
```
4. 统计有学生选修的课程门数。
```sql
SELECT COUNT(DISTINCT SC.CNO)
FROM SC
```
5. 求选修课程号为2的学生的平均年龄。
```sql
SELECT AVG(S.AGE)
FROM S
WHERE S.SNO IN (
SELECT SC.SNO
FROM SC
WHERE SC.CNO = 2
)
```
6. 求马良老师所授课程的每门课程的学生平均成绩
```sql
SELECT SC.CNO, AVG(SC.GRADE)
FROM SC, C
WHERE SC.CNO = C.CNO AND C.TNO = (
SELECT T.TNO
FROM T
WHERE T.TNAME = '马良'
)
GROUP BY SC.CNO
```
7. 统计每门课程的学生选修人数(超过1人的课程才统计)。要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列。
```sql
SELECT SC.CNO, COUNT(DISTINCT SC.SNO) AS NUM
FROM SC
GROUP BY SC.CNO
HAVING COUNT(DISTINCT SC.SNO) > 1
ORDER BY NUM DESC, SC.CNO ASC
```
8. 检索姓名以王打头的所有学生的姓名和年龄。
```sql
SELECT S.SNAME, S.AGE
FROM S
WHERE S.SNAME LIKE '王%'
```
9. 在SC中检索成绩为空值的学生学号和课程号。
```sql
SELECT SC.SNO, SC.CNO
FROM SC
WHERE SC.GRADE IS NULL
```
实验结论:
通过企业管理器建立学生选课数据库“StdentW101”,并使用SQL语句实现了多种查询操作,实现了对数据库的基本操作和实际应用。
查询选修超过5门课程的学生学号、姓名及所在系,课程在一张表,学生学号、姓名及所在系在一张表
好的,根据您的要求,可以使用 SQL 语句进行查询。假设选修课程信息存储在表 courses 中,学生信息存储在表 students 中,可以使用以下语句查询选修超过5门课程的学生学号、姓名及所在系:
```
SELECT s.student_id, s.student_name, s.department
FROM students s
INNER JOIN (
SELECT student_id, COUNT(*) AS course_count
FROM courses
GROUP BY student_id
HAVING course_count > 5
) c
ON s.student_id = c.student_id;
```
该语句使用内连接将学生信息表和选修课程表连接起来,然后使用子查询统计每个学生选修的课程数,并筛选出选修课程数大于5的学生。最后输出符合条件的学生的学号、姓名和所在系信息。
注意,具体的 SQL 语句可能因数据库类型和表结构而有所不同,以上仅供参考。
阅读全文