[sql] Query the information of other students who are learning the same courses as the students of "01" (original)

 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;

Insert picture description here

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;

Insert picture description here
 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
Insert picture description here

Guess you like

Origin blog.csdn.net/Keeomg/article/details/114037074