在数据库管理中,查询操作是核心功能之一,用于获取存储在数据库中的特定信息。这里我们讨论几个关于查询数据库中特定信息的SQL语句,这些语句涵盖了基础的联接操作、条件过滤以及更复杂的子查询。
1. **查询所有有成绩的学生的学号和课程号**:
使用`SELECT`语句从`enroll`表中选取`sno`(学生号)和`cno`(课程号)列,然后添加`WHERE`子句来筛选出`grade`(成绩)不为空的记录。这通常表示学生在该课程中有成绩记录。SQL语句如下:
```sql
SELECT sno, cno FROM enroll WHERE grade is not null;
```
2. **查询选修c2号课程及成绩在90分以上的所有学生的信息**:
这个查询涉及到多个表的联接。从`student`表中选取`sno`(学号)和`sname`(姓名),接着联接`enroll`表以获取`grade`(成绩)信息,再联接`course`表以获取`cname`(课程名)。`WHERE`子句用于过滤`cno='c2'`且`grade>90`的记录。SQL语句如下:
```sql
select s.sno, s.sname, c.cname, e.grade
from student s, enroll e, course c
where s.sno = e.sno and e.grade > 90 and e.cno = 'c2' and e.cno = c.cno;
```
3. **查询每个学生的学号、姓名、选修的课程名及成绩**:
类似于上一个查询,这个查询也涉及到了多表联接。但是,它没有特定的课程或成绩条件,而是返回每个学生的所有课程信息。SQL语句如下:
```sql
select s.sno, s.sname, c.cname, e.grade
from student s, enroll e, course c
where s.sno = e.sno and e.cno = c.cno;
```
4. **查询选修了C2或C4课程的学生的学号,姓名和课程号**:
在这个查询中,我们使用`IN`操作符来匹配`cno`为'C2'或'C4'的记录。SQL语句如下:
```sql
select s.sno, s.sname, e.cno
from student s, enroll e
where s.sno = e.sno and e.cno in ('c2', 'c4');
```
5. **检索至少选修了C1和C4的学生的学号**:
这是一个更复杂的情况,涉及到子查询和自联接。我们需要找出同时选修了C1和C4课程的学生。可以创建两个子查询,分别代表选修C1和C4的学生,然后通过`WHERE`子句进行比较。SQL语句如下:
```sql
select distinct e1.sno
from enroll e1, enroll e2
where e1.sno = e2.sno and (e1.cno = 'c1' and e2.cno = 'c4');
```
以上SQL语句都是基于关系型数据库的查询操作,它们展示了如何使用SQL语言从数据库中提取所需信息。理解并熟练掌握这些基本查询技巧对于数据分析师、数据库管理员以及任何需要处理数据库信息的IT专业人员来说至关重要。
SELECT student_id, student_name
FROM student_course
GROUP BY student_id, student_name
HAVING COUNT(course_id) = 5;