分析整理该文件中的所有内容,并对每一个内容举出相应例子和数据
时间: 2024-10-04 18:01:37 浏览: 24
浅谈案例教学在数据结构课程中的实践应用.pdf
《L6_AdvancedSQL.pdf》的内容涵盖了高级SQL查询技术,包括嵌套查询、聚合与分组操作、以及NULL值处理等主题。以下是每个主要部分的重点及其示例:
### 嵌套查询(Nested Queries)
#### 示例:找出同时选修了“COMP5138”和“ISYS3207”的学生姓名。
错误写法:
```sql
SELECT name FROM Student NATURAL JOIN Enrolled WHERE uos_code = 'COMP5138' INTERSECT SELECT name FROM Student NATURAL JOIN Enrolled WHERE uos_code = 'ISYS3207';
```
正确写法使用嵌套查询:
```sql
SELECT name FROM Student WHERE sid IN (
SELECT sid FROM Enrolled WHERE uos_code = 'COMP5138'
INTERSECT
SELECT sid FROM Enrolled WHERE uos_code = 'ISYS3207'
);
```
#### 示例:找出成绩最高的学生的学号。
```sql
SELECT sid FROM Enrolled WHERE marks >= ALL(
SELECT marks FROM Enrolled
);
```
#### 示例:找出未在2023年第二学期注册的学生姓名。
```sql
SELECT name FROM Student WHERE sid NOT IN (
SELECT sid FROM Enrolled WHERE semester = '2023-S2'
);
```
### 聚合与分组(Aggregation and Grouping)
#### 示例:课程数量统计。
```sql
SELECT COUNT(*) FROM UnitOfStudy;
```
#### 示例:找出“COMP5138”最高分数。
```sql
SELECT MAX(marks) FROM Enrolled WHERE uos_code = 'COMP5138';
```
#### 示例:计算“COMP5138”平均分。
```sql
SELECT AVG(marks) FROM Enrolled WHERE uos_code = 'COMP5138';
```
#### 示例:统计不同单位的不同学生数。
```sql
SELECT COUNT(DISTINCT sid) FROM Enrolled;
```
#### 示例:按公司分组求销售总额。
```sql
SELECT company, SUM(amount) FROM Sales GROUP BY company;
```
#### 示例:查找各课程代码及课程中平均分大于60的记录。
```sql
SELECT uos_code, AVG(mark) FROM enrolled GROUP BY uos_code HAVING AVG(mark) > 60;
```
### 处理NULL值(Handling NULL Values)
#### 示例:查询没有考试成绩的学生ID。
```sql
SELECT sid FROM enrolled WHERE marks IS NULL;
```
#### 示例:当成绩未知时的行为展示。
```sql
-- 错误情况
SELECT * FROM enrolled WHERE marks < 25 OR marks >= 25;
-- 正确情况
SELECT * FROM enrolled WHERE marks < 25 OR marks >= 25 OR marks IS NULL;
```
#### 示例:忽略NULL值进行聚合函数计算。
```sql
SELECT MIN(marks) -- 忽略mark为null的所有元组 FROM enrolled;
```
以上就是关于高级SQL查询技巧的主要知识点及其应用实例。这些技巧能够帮助数据库管理员或开发者更加灵活高效地管理和检索数据。
阅读全文