When practicing the sql language, I found that the ninth question in the exercise was very controversial, so I shared my thoughts separately, welcome to communicate!
(The statement to build the table is at the end of the article)
9. Query the information of other students who are learning the same course as the student with number "01"
select stu.* ,r.t2_count
from student as stu
,(select distinct
t2.sid as t2_sid
,count(t2.cid) as t2_count
from
(select sc.sid ,sc.cid from sc where sc.sid = 01) t1
inner join
(select sc.sid ,sc.cid from sc ) t2
on t1.cid = t2.cid
group by t2.sid
) as r
where
r.t2_count = (select count(sc.cid) from sc where sc.sid = 05)
and stu.sid = r.t2_sid;
Ideas
First, make a self-join on the sc table, filter out the courses that are the same as 01 students, and then match the same as the total number of 01 students' courses.
learn by analogy:
1. Query the information of other students who are learning exactly the same course as the student of "05"
Just change 01 to 05 in the total number of courses filter
select stu.* ,r.t2_count
from student as stu
,(select distinct
t2.sid as t2_sid
,count(t2.cid) as t2_count
from
(select sc.sid ,sc.cid from sc where sc.sid = 01) t1
inner join
(select sc.sid ,sc.cid from sc ) t2
on t1.cid = t2.cid
group by t2.sid
) as r
where
r.t2_count = (select count(sc.cid) from sc where sc.sid = 05)
and stu.sid = r.t2_sid;
2. If the total number of courses is more than 01, then you need to modify the sc.sid = 01 in the t1 sub-table to correspond to the ID of all the courses you have taken.
The table building statement and table structure are as follows:
create table Student (SId varchar(10), Sname varchar(10), Sage datetime, Ssex varchar(10));
insert into Student values('01' , '赵雷' , '1990-01-01' , '男');
insert into Student values('02' , '钱电' , '1990-12-21' , '男');
insert into Student values('03' , '孙风' , '1990-12-20' , '男');
insert into Student values('04' , '李云' , '1990-12-06' , '男');
insert into Student values('05' , '周梅' , '1991-12-01' , '女');
insert into Student values('06' , '吴兰' , '1992-01-01' , '女');
insert into Student values('07' , '郑竹' , '1989-01-01' , '女');
insert into Student values('09' , '张三' , '2017-12-20' , '女');
insert into Student values('10' , '李四' , '2017-12-25' , '女');
insert into Student values('11' , '李四' , '2012-06-06' , '女');
insert into Student values('12' , '赵六' , '2013-06-13' , '女');
insert into Student values('13' , '孙七' , '2014-06-01' , '女');
create table Course(CId varchar(10),Cname nvarchar(10),TId varchar(10));
insert into Course values('01' , '语文' , '02');
insert into Course values('02' , '数学' , '01');
insert into Course values('03' , '英语' , '03');
create table Teacher(TId varchar(10),Tname varchar(10));
insert into Teacher values('01' , '张三');
insert into Teacher values('02' , '李四');
insert into Teacher values('03' , '王五');
create table SC(SId varchar(10),CId varchar(10),score decimal(18,1));
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('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);
Table structure and connection