zoukankan      html  css  js  c++  java
  • 例题详解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

  • 相关阅读:
    装载问题
    分支限界法
    素数环问题
    图的m着色问题
    回溯法
    jquery+ajax 实现text框模糊搜索并可利用listbox实时显示模糊搜索列表结果
    jquery 操作listbox 左右相互选择
    SQL中游标的使用--遍历数据逐行更新或删除:相当于for循环
    Jquery提交form表单
    .Net中jQuery.ajax()调用asp.net后台方法 总结
  • 原文地址:https://www.cnblogs.com/yunpeng521/p/7076244.html
Copyright © 2011-2022 走看看