我想查询 sid= "02"学习相同课程的学生 sid;

  • 本文关键字:sid 学习 查询 mysql database
  • 更新时间 :
  • 英文 :

    CREATE TABLE `student` (
     `sid` varchar(5) NOT NULL DEFAULT '',
     `sname` varchar(10) NOT NULL,
     `age` date DEFAULT NULL,
     `sex` varchar(2) DEFAULT NULL,
     PRIMARY KEY (`sid`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
    CREATE TABLE `teacher` (
     `tid` varchar(5) NOT NULL DEFAULT '',
     `tname` varchar(10) NOT NULL,
     PRIMARY KEY (`tid`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
    CREATE TABLE `course` (
     `cid` varchar(5) NOT NULL DEFAULT '',
     `cname` varchar(10) NOT NULL,
     `tid` varchar(5) DEFAULT NULL,
     PRIMARY KEY (`cid`),
     KEY `fk_tid` (`tid`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;

    CREATE TABLE `sc` (
     `sid` varchar(5) NOT NULL DEFAULT '',
     `cid` varchar(5) NOT NULL DEFAULT '',
     `score` float DEFAULT NULL,
     PRIMARY KEY (`sid`,`cid`),
     KEY `fk_cid` (`cid`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
    INSERT  INTO  student VALUES ('01' , 'student A' , '1990-01-01', 'M');
    INSERT  INTO  student VALUES ('02' , 'student B' , '1990-12-21', 'M');
    INSERT  INTO  student VALUES ('03' , 'student C' , '1990-05-20', 'M');
    INSERT  INTO  student VALUES ('04' , 'student D' , '1990-08-06', 'M');
    INSERT  INTO  student VALUES ('05' , 'student E' , '1991-12-01', 'FM');
    INSERT  INTO  student VALUES ('06' , 'student F' , '1992-03-01', 'FM');
    INSERT  INTO  student VALUES ('07' , 'student G' , '1989-07-01', 'FM');
    INSERT  INTO  student VALUES ('08' , 'student H' , '1990-01-20', 'FM');
    INSERT  INTO  teacher VALUES ('01' , 'teacher A');
    INSERT  INTO  teacher VALUES ('02' , 'teacher B');
    INSERT  INTO  teacher VALUES ('03' , 'teacher C');
    INSERT  INTO  course VALUES ('01' , 'JAVA' , '01');
    INSERT  INTO  course VALUES ('02' , 'Python' , '02');
    INSERT  INTO  course VALUES ('03' , 'Mysql' , '03');
    INSERT  INTO  course VALUES ('04' , 'PHP' , '01');
    INSERT  INTO  sc VALUES ('01' , '01' , 80);
    INSERT  INTO  sc VALUES ('01' , '02' , 90);
    INSERT  INTO  sc VALUES ('01' , '03' , 99);
    INSERT  INTO  sc VALUES ('01' , '04' , 88);
    INSERT  INTO  sc VALUES ('02' , '01' , 70);
    INSERT  INTO  sc VALUES ('02' , '02' , 60);
    INSERT  INTO  sc VALUES ('02' , '03' , 80);
    INSERT  INTO  sc VALUES ('03' , '01' , 80);
    INSERT  INTO  sc VALUES ('03' , '02' , 80);
    INSERT  INTO  sc VALUES ('03' , '03' , 80);
    INSERT  INTO  sc VALUES ('04' , '01' , 50);
    INSERT  INTO  sc VALUES ('04' , '02' , 30);
    INSERT  INTO  sc VALUES ('04' , '03' , 20);
    INSERT  INTO  sc VALUES ('05' , '01' , 76);
    INSERT  INTO  sc VALUES ('05' , '02' , 87);
    INSERT  INTO  sc VALUES ('06' , '01' , 31);
    INSERT  INTO  sc VALUES ('06' , '03' , 34);
    INSERT  INTO  sc VALUES ('07' , '02' , 89);
    INSERT  INTO  sc VALUES ('07' , '03' , 98);

select * from enter code here
student where sid in (
  select sid from sc 
  where cid in (select cid from sc where sid = '02')
  group by sid 
  having count(*) = (select count(*) from sc where sid = '02')
)
我用学生表,课程表

和SC表(选择性课程(创建mySQL数据库,我想查询sid="02"学习相同课程的学生SID;但是上面的sql不对,"为什么?如何解决?

这是

你想要的吗?

SELECT DISTINCT s2.*
FROM student
JOIN sc ON sc.sid = student.sid
JOIN sc AS sc2 ON sc2.cid = sc.cid
JOIN student AS s2 ON s2.sid = sc2.sid
WHERE student.sid = '02'

http://sqlfiddle.com/#!9/1d6a1/4

另外一个建议是不要使用字符串作为键,当行和比较量变大时,查询速度会慢得多。

最新更新