sql 有课程表、教师表、选课表和授课表,课程表包含课程号和课程名称,教师表包含教师姓名和教师编号,选课表包含课程号和学号,授课表包含教师编号和课程号4张表,查询每门课程的课程号、任课教师姓名及其选课人数
时间: 2024-06-03 08:11:24 浏览: 162
你可以使用以下 SQL 语句来实现该查询:
SELECT c.课程号, t.教师姓名, COUNT(s.学号) AS 选课人数
FROM 课程表 c
INNER JOIN 授课表 r ON c.课程号 = r.课程号
INNER JOIN 教师表 t ON r.教师编号 = t.教师编号
LEFT OUTER JOIN 选课表 s ON c.课程号 = s.课程号
GROUP BY c.课程号, t.教师姓名
ORDER BY c.课程号;
这个查询语句的核心部分是通过多个表之间的 INNER JOIN 和 LEFT OUTER JOIN 来关联课程、教师、选课和授课信息。其中,关联课程和授课信息使用 INNER JOIN,关联教师和授课信息使用 INNER JOIN,关联选课和课程信息使用 LEFT OUTER JOIN。最后,使用 GROUP BY 和 COUNT 函数来统计每门课程的选课人数。
相关问题
sql 有课程表、教师表、选课表和授课表4张表,查询每门课程的课程号、任课教师姓名及其选课人数
可以使用以下 SQL 语句来查询每门课程的课程号、任课教师姓名及其选课人数:
```
SELECT c.课程号, t.姓名 AS 任课教师, COUNT(*) AS 选课人数
FROM 课程表 c
JOIN 授课表 s ON c.课程号 = s.课程号
JOIN 教师表 t ON s.教师号 = t.教师号
JOIN 选课表 x ON t.教师号 = x.教师号 AND c.课程号 = x.课程号
GROUP BY c.课程号, t.姓名;
```
其中,`JOIN` 用于连接多张表,`COUNT(*)` 用于统计选课人数,`GROUP BY` 用于按照课程号和任课教师分组。
用sql建立四张数据表并输入数据:教师表: 教师编号,姓名,性别,职称,工资学生表: 学号, 姓名, 性别, 生源课程表: 课程号, 课程名, 课程类型选课表: 学号, 课程号, 成绩
首先,我们需要创建这四张表格,然后分别输入数据。以下是SQL语句示例:
### 教师表 (Teacher)
```sql
CREATE TABLE Teachers (
TeacherID INT PRIMARY KEY,
Name VARCHAR(50),
Gender CHAR(1),
Title VARCHAR(50),
Salary DECIMAL(10, 2)
);
```
### 学生表 (Students)
```sql
CREATE TABLE Students (
StudentID INT PRIMARY KEY,
Name VARCHAR(50),
Gender CHAR(1),
Hometown VARCHAR(100),
FOREIGN KEY (StudentID) REFERENCES Students(StudentID)
);
```
### 课程表 (Courses)
```sql
CREATE TABLE Courses (
CourseID INT PRIMARY KEY,
CourseName VARCHAR(100),
CourseType VARCHAR(50)
);
```
### 选课表 (Enrollments)
```sql
CREATE TABLE Enrollments (
StudentID INT,
CourseID INT,
Grade INT,
PRIMARY KEY (StudentID, CourseID),
FOREIGN KEY (StudentID) REFERENCES Students(StudentID),
FOREIGN KEY (CourseID) REFERENCES Courses(CourseID)
);
```
接下来,我们假设已经有了初始的数据,可以分别插入:
```sql
-- 插入教师数据
INSERT INTO Teachers (TeacherID, Name, Gender, Title, Salary) VALUES (1, '张三', 'M', '教授', 8000.00);
-- ... (插入其他教师数据)
-- 插入学生数据
INSERT INTO Students (StudentID, Name, Gender, Hometown) VALUES (1001, '李四', 'F', '北京');
-- ... (插入其他学生数据)
-- 插入课程数据
INSERT INTO Courses (CourseID, CourseName, CourseType) VALUES (101, '数学', '必修');
-- ... (插入其他课程数据)
-- 插入选课数据
INSERT INTO Enrollments (StudentID, CourseID, Grade) VALUES (1001, 101, 90);
-- ... (插入其他选课数据)
```
阅读全文