1. 查询所有没有选修课程的学生的学号、姓名。 2. 查询选修课程的人数。 3. 查询选课人数大于等于3人的课程编号、课程名称、人数。 4. 在查询的FROM子句中实现表与表之间的连接有哪几种方式?对应的关键字分别是什么?
时间: 2024-10-19 14:15:07 浏览: 203
C++程序设计——学生选修课程系统
5星 · 资源好评率100%
1. 要查询所有没有选修课程的学生的学号和姓名,你需要从学生的表(假设为"Students")中选择学号(StudentID)和姓名(Name),然后通过左外连接(LEFT JOIN)到选课表(假设为"CourseSelections")并过滤出选课记录为空的行。SQL语句可能会像这样:
```sql
SELECT Students.StudentID, Students.Name
FROM Students
LEFT JOIN CourseSelections ON Students.StudentID = CourseSelections.StudentID
WHERE CourseSelections.CourseID IS NULL;
```
2. 查询选修课程的人数,你可以直接对选课表(CourseSelections)进行计数操作。如果需要分组按课程编号(CourseID)统计,SQL会是:
```sql
SELECT CourseID, COUNT(*) as NumberOfStudents
FROM CourseSelections
GROUP BY CourseID;
```
3. 对于查询选课人数大于等于3人的课程,可以这样做:
```sql
SELECT CourseSelections.CourseID, Courses.CourseName, COUNT(CourseSelections.StudentID) as NumberOfStudents
FROM CourseSelections
INNER JOIN Courses ON CourseSelections.CourseID = Courses.CourseID
GROUP BY CourseSelections.CourseID, Courses.CourseName
HAVING COUNT(*) >= 3;
```
4. 在FROM子句中实现表与表之间的连接主要有以下几种方式:
- **INNER JOIN**: 使用关键字`JOIN`或`ON`指定两个表的公共字段进行匹配,返回同时存在于两边表中的记录。
- **LEFT JOIN** (也叫LEFT OUTER JOIN): 使用关键字`LEFT JOIN`,除了返回共同存在的记录外,还会返回左边表的所有记录,即使右边表没有匹配项。
- **RIGHT JOIN** (也叫RIGHT OUTER JOIN): 类似于LEFT JOIN,但是返回右边表的所有记录。
- **FULL OUTER JOIN** 或 `FULL JOIN`: 返回两个表中所有的记录,无论是否存在匹配。
关键字通常用于指定连接类型,如`JOIN`, `LEFT JOIN`, `RIGHT JOIN`, 和 `FULL JOIN`。
阅读全文