• sql 基础语法3:分组,聚合函数,having,联合查询,快速备份,内联函数


    select * from Classinfo
    select * from StuInfo
    select * from CourseInfo
    select * from ScoreInfo
    
    --分组 group by,分组后在结果列中只能出现分组依据列和聚合列
    --统计男女人数
    select stuSexy,COUNT(*)
    from StuInfo
    group by stuSexy--分组也是一个聚合过程,把所有性别相同的元组放到了同一行
    
    --算出每门课的平均分
    select cId,avg(score)
    from ScoreInfo
    group by cId --根据科目进行分组,算出平均分
    
    select cId,avg(score)
    from ScoreInfo
    group by cId,StuId --按多个属性进行分组
    
    
    --求每个班的男女人数,同时输出班级名
    select ci.className,si.stuSexy,COUNT(*)
    from StuInfo as si
    inner join Classinfo as ci on si.classId=ci.classId
    group by ci.className,si.stuSexy --除了这两个分组关键属性,其他属性都被合并了,所以不能再使用
    
    
    select ci.classId,si.stuSexy,COUNT(*)
    from StuInfo as si
    inner join Classinfo as ci on si.classId=ci.classId 
    group by ci.classId,si.stuSexy --只能使用ci.classId和si.stuSexy了
    
    --统计学生编号>2的各班级的各性别的学生人数
    select ci.className,si.stuSexy,COUNT(*)
    from StuInfo as si
    inner join Classinfo as ci on si.classId=ci.classId
    where si.stuId>2
    group by si.stuSexy,ci.className
    
    
    --统计学生编号>2的编号为1的班级的各性别的学生人数
    select ci.className,si.stuSexy,COUNT(*)
    from StuInfo as si
    inner join Classinfo as ci on si.classId=ci.classId
    where si.stuId>2 and ci.classId=1
    group by si.stuSexy,ci.className
    
    --having查询
    --统计学生编号>2的编号各班级的各性别的学生人数>1的信息
    select ci.className,si.stuSexy,COUNT(*)
    from StuInfo as si
    inner join Classinfo as ci on si.classId=ci.classId
    where si.stuId>2
    group by si.stuSexy,ci.className having count(*)>1 --对count增加条件
    
    
    select * from Classinfo
    select * from StuInfo
    select * from CourseInfo
    select * from ScoreInfo
    
    --联合查询:将多个查询的结果集合合并成一个集合union
    --要求:1,结果集列数要一致 2,对应列的类型要一致
    --union,union all,except,intersect 并,直接相加,差,交
    select stuId from StuInfo
    union
    select stuid from ScoreInfo
     
    select stuId from StuInfo
    union all
    select stuid from ScoreInfo
    
    select stuId from StuInfo
    except
    select stuid from ScoreInfo
    
    select stuId from StuInfo
    intersect
    select stuid from ScoreInfo
    
    --快速备份
    --向一个不存在的表中快速插入数据:包括插入属性行
    select * into test1 from Classinfo
    
    --新建一个空表,但是包含属性列
    select * into test2 from Classinfo
    where 1=2
    
    --向一个存在的表中插入数据
    insert into test2(className)--因为classId是自增的所以不能从外界添加,所以只能添加className
    select className from Classinfo
    
    --格式转化函数CAST,CONVERT
    select CAST(89.000000 as decimal(4,1))
    select CONVERT(decimal(4,1),89.000000)
    
    select CAST(1 as CHAR(1))+'1'
    
    select char(65)
    select ASCII('A')
    select left('ABCDEF',5)
    select right('ABCDEF',5)
    select substring('ABCDEF',1,5)
    select lower('ABCDEF')
    select upper('ABCDEFa')
    select ltrim('  ab c')--去掉左侧空格
    select RTRIM('abc   ')
    select STR(1)
    
    select GETDATE()
    select dateAdd(YY,1,GETDATE())
    select dateAdd(MM,1,GETDATE())
    select dateAdd(DD,1,GETDATE())
    select DATEPART("Dayofyear",GETDATE())--求出一年中第几天
    select DATEPART("year",GETDATE())--返回int型
    select DATEPART("month",GETDATE())
    select DATEPART("day",GETDATE())
    
    select dateDiff(DD,dateAdd(YY,1,GETDATE()),GETDATE())--日期差
    
    select STR(DATEPART(YY,stuBirthday))+'-'+ltrim(STR(DATEPART(MM,stuBirthday)))+'-'+ltrim(STR(DATEPART(DD,stuBirthday)))
    from StuInfo
    
    select * from Classinfo
    select * from StuInfo
    select * from CourseInfo
    select * from ScoreInfo
    --查询科目名称,平均分
    select ci.cName,AVG(sco.score)
    from ScoreInfo as sco
    inner join CourseInfo as ci on sco.scoreId=ci.cId
    group by ci.cName
    
    --查询班级名称,一个班平均分
    -- sco-stu-class
    select ci.className,AVG(sco.score)
    from ScoreInfo as sco
    inner join StuInfo as si on sco.StuId=si.stuId
    inner join Classinfo as ci on si.classId=ci.classId
    group by ci.className
    
    --查询查询班级名称,科目名称,平均分
    -- course-sco-stu-class
    select ci.className,cour.cName,AVG(sco.score)
    from ScoreInfo as sco
    inner join StuInfo as si on si.stuId=sco.StuId
    inner join Classinfo as ci on si.classId=ci.classId
    inner join CourseInfo as cour on sco.cId=cour.cId
    group by ci.className,cour.cName

    1

  • 相关阅读:
    silverlight 跨域文件位置
    Asp.net弹出新窗口,获得返回值
    开通CNblog咯。
    访问IIS元数据库失败
    li可以显示多列
    [转]vs2005 sp1 下载地址、安装方法更新非常慢
    英特尔未来教育核心课程
    很好用的软键盘
    CMD里显示彩色文字
    将输入的中文按要求翻译成拼音
  • 原文地址:https://www.cnblogs.com/zsben991126/p/11828115.html
Copyright © 2020-2023  润新知