SQL复杂查询

1.学生关系是S(S#,SN.,SEX,AGE),课程关系是C(C#,CNAME,TEACHER),学生选课关系是SC(S#,C#,GRADE),

查询选修课程C#为"C2”的学生中成绩最高的学生的学号

答:select S# from SC where C#='C2' and GRADE = (select max(GRADE) from SC where C#='C2');

OR

  select S# from SC where C#='C2' and GRADE>= all(select GRADE from SC where C#='C2');

 

 

2.给两张表t1和t2,t1有列id,name,t2有列id,name,log,t1表中id=10的name更新了,怎么把t1中id为10的那行name值更新到t2表中id为10的name中?(t1和t2的id有关联)

答:update t1,t2 set t2.name=t1.name where t1.id=t2.id and t1.id=10; 

 

 

3.两张表,店铺表shop(s_id,sname,loc)和订单表ordertable(o_id,oname,money,s_id),店铺和订单是一对多关系,查询订单数大于等于20的店铺.

答:select s.s_id,s.sname from shop s inner join ordertable o on s.s_id = o.s_id group by s.s_id,s.sname having count(o.o_id)>=20;

 

4.店铺表shop(s_id,sname,loc),查询店铺名字段重复的记录.

答:select sname,count(s_id) as 重复次数 from shop group by sname having count(sname)>1

 

5.查询没有订单的店铺.

答:select * from shop where s_id <> all(select s_id from ordertable ); 

  OR 

 SELECT s.* FROM shop s left join ordertable o on s.s_id=o.s_id where o.o_id is null

猜你喜欢

转载自201601175907.iteye.com/blog/2424060