• 例题详解2


    查询成绩比该课程平均成绩低的同学的成绩表。
    select * from score t1 left join
    (
    select cno,avg(degree) as 'avg' from score group by cno
    ) t2
    on t1.cno=t2,cno
    where t1.degree<t2.avg
    第一步是:查出每科的平均成绩, select cno,avg(degree) as 'avg' from score group by cno ,
    以课程进行分组,并建立新表,别名是 'avg',别名必须写,否则 t2 找不到数据,这是新建的列
    也可以是不同写法,as a 或者 as [avg] 在这因为avg 是关键字(就是表中有其已经出现的)所以加括号
    第二步是:与成绩表链接,
    select * from score t1 left join () on,并且是左连接,以成绩表为基准,使之每个人的成绩与其平均成绩相对应,
    方便看其大小,相当于平均成绩,贴到每个人身上,然后,每个人和自己的平均成绩对比。
    第三步是:添加条件 where t1.degree<t2.avg

     查询所有未讲课的教师的Tname和Depart.
    看其有没有讲课在成绩表里看,因为没有成绩就不会有讲课
    首先是查出成绩表,然后与其教师表链接
    但是,成绩表与其没有相同的属性
    而,课程表与教师表有相同属性
    所以,成绩表先与其课程表链接
    而后,课程表与教师表再连
    实现,三表链接


    select * from score t1 right join course t2 on t1.cno=t2.cno right join Teacher t3 on t3.tno=t2.tno where t1.cno is null
    这时所有的表中数据都会出现,然后添加条件where t1.cno is null,意思是,成绩表score中编号cno 为空
    也可以是score表中的成绩为空,都可以,能区分就行
    然后改其字段,* 变为 t3.tname , t3.Depart 即可


    右连接,是因为,以右表为准,没有讲课的老师,则会左边为空,没有与之对应的学生和课程以及成绩
    若是左链接,则会出现,相应的学生,课程,及成绩的后面,没有与之对应的老师,为空


    查询Student表中每个学生的姓名和年龄。
    第一种方法:
    select datediff (year,sbirthday,getdate()) * from Student
    里面有三个参数,一个是年,一个是初始时间,一个是现在时间
    也可以写具体时间‘1990-1-1’
    第二种方法:
    select Sname,year(getdate())-year(sbirthday)from Student

  • 相关阅读:
    洛谷 P7520
    Involuting Bunny! (2021.8)
    Solution -「Gym 102979E」Expected Distance
    Solution -「Gym 102979L」 Lights On The Road
    Solution -「CodeChef JUMP」Jump Mission
    Solution -「洛谷 P4372」Out of Sorts P
    Solution -「Gym 102956F」Find the XOR
    Solution -「Gym 102956B」Beautiful Sequence Unraveling
    Solution -「Gym 102956F」Border Similarity Undertaking
    Solution -「LOJ #6029」「雅礼集训 2017」市场
  • 原文地址:https://www.cnblogs.com/yunpeng521/p/7076244.html
Copyright © 2020-2023  润新知