SQL利用游标实现张姓同学在各系的分布以及每个人的姓名性别和年龄
时间: 2024-03-09 12:47:06 浏览: 67
游标的使用.sql
以下是通过游标实现查询的 SQL 语句:
```
DECLARE @Surname VARCHAR(10)
SET @Surname = '张'
DECLARE @DeptID INT, @DeptName VARCHAR(20), @StudentName VARCHAR(20), @Gender VARCHAR(2), @Age INT
DECLARE DeptCursor CURSOR FOR
SELECT DeptID, DeptName FROM Department
OPEN DeptCursor
FETCH NEXT FROM DeptCursor INTO @DeptID, @DeptName
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT '系别:' + @DeptName
DECLARE StudentCursor CURSOR FOR
SELECT StudentName, Gender, Age FROM Student WHERE LEFT(StudentName, 1) = @Surname AND DeptID = @DeptID
OPEN StudentCursor
FETCH NEXT FROM StudentCursor INTO @StudentName, @Gender, @Age
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT @StudentName + ', ' + @Gender + ', ' + CONVERT(VARCHAR(2), @Age) + '岁'
FETCH NEXT FROM StudentCursor INTO @StudentName, @Gender, @Age
END
CLOSE StudentCursor
DEALLOCATE StudentCursor
FETCH NEXT FROM DeptCursor INTO @DeptID, @DeptName
END
CLOSE DeptCursor
DEALLOCATE DeptCursor
```
这个 SQL 语句会先声明一个游标 `DeptCursor`,用于遍历所有系别。然后通过 `OPEN` 语句打开游标,通过 `FETCH NEXT` 语句获取一条记录,将当前系别的 ID 和名称保存在变量 `@DeptID` 和 `@DeptName` 中。在每个系别内部,再声明一个游标 `StudentCursor`,用于遍历该系别中所有姓张的同学。通过 `LEFT` 函数获取姓氏,`DeptID` 用于限制查询的系别,`@Surname` 为上面声明的变量,表示姓氏为张。然后通过 `OPEN` 语句打开游标,通过 `FETCH NEXT` 语句获取一条记录,将当前同学的姓名、性别和年龄保存在变量 `@StudentName`、`@Gender` 和 `@Age` 中,并输出到控制台。最后通过 `CLOSE` 和 `DEALLOCATE` 语句关闭游标,释放资源。
阅读全文