根据提供的实验报告,我们可以归纳出一系列关于T-SQL简单数据库查询的重要知识点,这些知识点涵盖了基本的查询操作以及一些更复杂的查询技巧。 ### T-SQL基础知识 #### SELECT 语句的基本语法格式 - `SELECT` 语句是T-SQL中最常用的语句之一,用于从一个或多个表中检索数据。 - 基本格式为:`SELECT column_name(s) FROM table_name;` - 示例:`SELECT Sno, Sname FROM Student;` #### 多表查询 - **内连接**:通过使用 `INNER JOIN` 可以连接两个表并返回两表中存在匹配的数据行。 - 示例:查询已选课学生的选课情况包含学生学号、姓名、所选课程、成绩。 ```sql SELECT Student.Sno, Sname, Cname, Grade FROM Student INNER JOIN SC ON Student.Sno = SC.Sno INNER JOIN Course ON SC.Cno = Course.Cno; ``` - **外连接**:包括左外连接 (`LEFT OUTER JOIN`) 和右外连接 (`RIGHT OUTER JOIN`),可以用来查询一个表中所有记录与另一个表中的匹配记录。 - 示例:查询所有学生的选课情况包含学生学号、姓名、课程号、课程名、成绩(包含选课和未选课所有学生)。 ```sql SELECT Student.Sno, Sname, Course.Cno, Cname, Grade FROM Student LEFT OUTER JOIN SC ON Student.Sno = SC.Sno LEFT OUTER JOIN Course ON SC.Cno = Course.Cno; ``` #### 单表查询 - **条件筛选**:使用 `WHERE` 子句来过滤特定条件下的数据。 - 示例:查询计算机系学生的信息。 ```sql SELECT Sno, Sname, Ssex, Sage FROM Student WHERE Sdept = '计算机系'; ``` - **聚合函数**:如 `COUNT(*)`、`SUM()`、`AVG()`、`MAX()` 和 `MIN()` 用于执行数值计算和统计分析。 - 示例:查询全体学生的人数。 ```sql SELECT COUNT(*) FROM Student; ``` - **模式匹配**:使用 `LIKE` 操作符进行模式匹配。 - 示例:查询名字中带“阳”的学生信息。 ```sql SELECT * FROM Student WHERE Sname LIKE '%阳%'; ``` #### 分组与排序 - **GROUP BY** 子句用于将数据按一个或多个列分组。 - 示例:查询每个系中的男生人数并按人数的降序排列。 ```sql SELECT Sdept, COUNT(Ssex) FROM Student WHERE Ssex = '男' GROUP BY Sdept, Ssex ORDER BY COUNT(Ssex) DESC; ``` - **HAVING** 子句与 `GROUP BY` 结合使用,用于过滤分组后的结果。 - 示例:查找选修课程超过2门且成绩都在80分以上的学生的学号。 ```sql SELECT Sno FROM SC GROUP BY Sno HAVING COUNT(Cno) > 2 AND MIN(Grade) > 80; ``` - **ORDER BY** 子句用于对结果集进行排序。 - 示例:查询每个学生选课的总学分,并按总学分的降序排列。 ```sql SELECT Student.Sno, Sname, SUM(Ccredit) AS TotalCredits FROM Student INNER JOIN SC ON Student.Sno = SC.Sno INNER JOIN Course ON SC.Cno = Course.Cno GROUP BY Student.Sno, Sname ORDER BY TotalCredits DESC; ``` #### 特殊谓词 - **IN** 和 **NOT IN**:用于比较是否存在于指定的值列表中。 - 示例:查询未选课的学生情况包含学生学号、姓名和所在系。 ```sql SELECT Sno, Sname, Sdept FROM Student WHERE Sno NOT IN ( SELECT Sno FROM SC ); ``` - **EXISTS** 和 **NOT EXISTS**:用于检查子查询是否有结果返回。 - 示例:查询没有学生选的课程信息包含课程号、课程名。 ```sql SELECT Cno, Cname FROM Course WHERE NOT EXISTS ( SELECT * FROM SC WHERE SC.Cno = Course.Cno ); ``` ### 综合应用 - **派生表**:可以在查询中创建临时的结果集,作为后续查询的一部分。 - 示例:查询所有成绩中的最高分的学生学号、姓名、系名、课程号、成绩。 ```sql WITH HighestScores AS ( SELECT Sno, MAX(Grade) AS MaxGrade FROM SC GROUP BY Sno ) SELECT Student.Sno, Sname, Sdept, SC.Cno, Grade FROM Student INNER JOIN SC ON Student.Sno = SC.Sno INNER JOIN HighestScores ON Student.Sno = HighestScores.Sno AND SC.Grade = HighestScores.MaxGrade; ``` 这些知识点覆盖了T-SQL简单数据库查询的核心内容,能够帮助读者理解和掌握如何使用SQL进行基本到较为复杂的查询操作。
剩余8页未读,继续阅读
- 粉丝: 1
- 资源: 2
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助