新手对于SQL语句的一些疑问

请教高手解答

CREATE TABLE member(
    MID CHAR(10) PRIMARY KEY,  --学号
    MNAME CHAR(50)  NOT NULL           --姓名
 )
 CREATE TABLE F(
    FID CHAR(10) PRIMARY KEY,   --课程
    FName CHAR(50)  NOT NULL            --课程名
 )
 CREATE TABLE Score(
    SID INT PRIMARY KEY IDENTITY(1,1), --成绩记录号 
    FID CHAR(10) FOREIGN KEY(FID) REFERENCES F(FID),           --课程号
    MID CHAR(10) FOREIGN KEY(MID) REFERENCES member(MID),           --学生号
    Score INT   NOT NULL                       --成绩
 )

这是我建立的表的脚本,我要实现下面的查询
姓名 英语 数学 语文 历史
我下面这条SQL语句的意思就是 先选出来姓名,然后分别select4列,通过F001
,F002这些用来区分课程,sMID=mMID

  SELECT 姓名=(SELECT m1.MName from member AS m1),
    英语=(select Score from Score as s where s.FID='F001'AND s.MID=m.MID)
    --数学=(select Score from Score AS s where s.FID='F002')
    --语文=(select Score from Score AS s where s.FID='F003' WHERE member.MID=s.SID),
    --历史=(select Score from Score AS s where s.FID='F004' WHERE member.MID=s.SID)   
 FROM Score AS s,member AS m,F AS f

但是执行的时候老是提示
子查询返回的值不止一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。
我思路上看不出来问题啊,但是这个问题折腾了好久,自学真心痛苦啊。请高人能按着我的思路解答下,应为有更容易的实现这个的方法,但是我还是想知道我自己的思路错在那里了,谢谢

想用子查询,应该先确定主表,你想查“姓名 英语 数学 语文 历史”,主表肯定应该是人,也就是出的结果应该是一个人一行记录,主题sql就是
select name from member;然后成绩采用子查询:(select Score from Score as s where s.FID='F001'AND s.MID=m.MID);综合起来就是
select name,(select Score from Score as s where s.FID='F001'AND s.MID=m.MID) from member;
你写的sql问题就在于:1、主sql from 应该只有member表,2、姓名=(SELECT m1.MName from member AS m1),这个子查询不需要,而且这个子查询的结果是所有人的肯定是多条记录

没看明白你想要的结果什么?你是要统计每门课程每个学生的成绩么?

数学为什么不加上 member.MID=s.SID?每个学生只有一门数学的

首先要定位问题,子查询返回的结果只能是一条数据,而你的一个姓名可能对应多门课程;
left join 三表联查

大概就是这个样子,你自己再调整一下

 select MID as 学号,
       name as 姓名,
       sum(case
             when subject = '语文' then
              score
             else
              0
           end) as 语文,
       sum(case
             when subject = '数学' then
              score
             else
              0
           end) as 数学,
       sum(case
             when subject = '历史' then
              score
             else
              0
           end) as 英语,
       sum(score) as 总分

        from member a left join
        Score b on a.mid=b.mid
        left join FROM  F
        c  on b.fid=c.fid
       group by mid,
       name order by 总分desc