[sql]「01」(オリジナル)の学生と同じコースを学習している他の学生の情報を照会します。

 SQL言語を練習していると、演習の9番目の質問が非常に物議を醸していることがわかったので、考えを個別に共有しました。コミュニケーションを歓迎します。

(テーブルを作成するためのステートメントは記事の最後にあります)

9.番号「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;

ここに画像の説明を挿入します

アイデア

 まず、scテーブルで自己結合を作成し、01人の学生と同じコースを除外してから、01人の学生のコースの総数と同じものに一致させます。

類推によって学ぶ:

 1.「05」の学生とまったく同じコースを学習している他の学生の情報を照会します。

コースフィルターの総数を01から05に変更するだけです

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.コースの総数が01を超える場合は、受講したすべてのコースのIDに対応するように、t1サブテーブルのsc.sid = 01を変更する必要があります。

テーブル作成ステートメントとテーブル構造は次のとおりです。

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);

テーブルの構造と接続
ここに画像の説明を挿入します

おすすめ

転載: blog.csdn.net/Keeomg/article/details/114037074