(10)查询所有同学的基本信息及选课情况(包含未选课同学的信息):
```
SELECT students.id, students.name, departments.name AS department, courses.name AS course, scores.score
FROM students
LEFT JOIN departments ON students.department_id = departments.id
LEFT JOIN scores ON students.id = scores.student_id
LEFT JOIN courses ON scores.course_id = courses.id;
```
这个查询语句使用 LEFT JOIN 连接了三个表,并返回所有同学的基本信息及选课情况,包括未选课同学的信息。其中,students.id 表示返回学生 ID,students.name 表示返回学生姓名,departments.name 表示返回所在院系名称,courses.name 表示返回选修课程名称,scores.score 表示返回成绩。
(11)列出所有参加了数据库课程考试的学生姓名和成绩:
```
SELECT students.name, scores.score
FROM students
INNER JOIN scores ON students.id = scores.student_id
INNER JOIN courses ON scores.course_id = courses.id AND courses.name = '数据库';
```
这个查询语句使用 INNER JOIN 连接了三个表,并使用 WHERE 子句过滤出参加了数据库课程考试的学生信息。其中,students.name 表示返回学生姓名,scores.score 表示返回成绩。
(12)查询所有学生和教师的姓名(允许重名)并标识类型(学生/老师):
```
SELECT name, '学生' AS type FROM students
UNION ALL
SELECT name, '教师' AS type FROM teachers;
```
这个查询语句使用 UNION ALL 连接了两个 SELECT 语句,并在每个 SELECT 语句中添加一个类型标识列。其中,name 表示返回姓名,'学生' 或 '教师' 表示返回类型。
(13)查询每一课程的间接选修课,以“课程名”、“间接选修课名”作列名:
```
SELECT c1.name AS course,