Option Explicit
Sub chanxun()
Dim con As New ADODB.Connection '声明并创建连接对象
Dim rs As New ADODB.Recordset '声明并创建记录集对象
con.Open "provider=microsoft.ace.oledb.12.0;data source=" & ThisWorkbook.Path & "\学生管理.accdb"
Dim sql As String
'sql = "select * from 学生,课程,成绩 where 学生.学号=成绩.学号 and 课程.课程代码=成绩.课程代码"
'sql = "select 学生.学号,姓名,课程.课程代码,课程名称,成绩 from 学生,课程,成绩 where 学生.学号=成绩.学号 and 课程.课程代码=成绩.课程代码"
'sql = "select 课程名称,avg(成绩) as 平均成绩 from 课程,成绩 where 课程.课程代码=成绩.课程代码 group by 课程名称"
'内连接
'sql = "select 课程名称,avg(成绩) as 平均成绩 from 课程 inner join 成绩 on 课程.课程代码=成绩.课程代码 group by 课程名称 having avg(成绩)>=85"
'外连接
'sql = "select 姓名,性别,职称,院系.院系编号,院系名 from 导师 left join 院系 on 导师.院系编号=院系.院系编号"
'sql = "select 姓名,性别,职称,院系.院系编号,院系名 from 导师 right join 院系 on 导师.院系编号=院系.院系编号"
'sql = "select 姓名,性别,职称,院系.院系编号,院系名 from 导师 full outer join 院系 on 导师.院系编号=院系.院系编号"
'自连接
'sql = "select * from 员工 t1 inner join 员工 t2 on t1.姓名=t2.姓名"
'sql = "select distinct t1.编号,t1.姓名,t1.年龄,t1.部门 from 员工 t1 inner join 员工 t2 on t1.姓名=t2.姓名 where t1.编号<>t2.编号 order by t1.姓名"
'子查询(嵌套查询)
'sql = "select 部门,count(*) as 人数 from (select * from 员工 where 年龄>=30) group by 部门"
'sql = "select 部门 as 所在部门,count(*) as 人数 from 员工 group by 部门 order by 部门"
'提取出年龄比平均年龄大的员工信息
'sql = "select 姓名,性别,年龄,职务,部门 from 员工 where 年龄>(select avg(年龄) from 员工)"
'查询年龄排在5-10 名的员工信息
sql = "select top 6 姓名,性别,年龄,职务,部门 from 员工 where 年龄 not in( select top 4 年龄 from 员工 order by 年龄)"
Set rs = con.Execute(sql)
Dim i As Integer
For i = 0 To rs.Fields.Count - 1
Cells(1, i + 1) = rs.Fields(i).Name
Next
Range("A2").CopyFromRecordset rs
Columns.AutoFit
rs.Close: Set rs = Nothing
con.Close: Set con = Nothing
End Sub
可以试着改一下,试着查询