• 学生——成绩表2.3


    一、表说明

    同学生——成绩表2.1

    二、目录

    其他

    1.查询"李"姓老师的数量

    2.查询男生、女生人数

    3.查询名字中含有"风"字的学生信息

    4.查询同名同性学生名单,并统计同名人数

    5.查询1990年出生的学生名单

    6.查询各学生的年龄

    7.查询本周过生日的学生

    8.查询下周过生日的学生

    9.查询本月过生日的学生

    10.查询下月过生日的学生

    三、查询

    1.查询"李"姓老师的数量

    select count(Tname) as '"李"姓老师的数量' from Teacher where Tname like N'李%'

    2.查询男生、女生人数

    方式1

    select case when Ssex = '' then '男生人数' else '女生人数' end '男女情况' , count(1) '人数' from student group by 
    case when Ssex = '' then '男生人数' else '女生人数' end

    方式2

    select 
    sum(case when Ssex = '' then 1 else 0 end) 男生人数,
    sum(case when Ssex = '' then 1 else 0 end) 女生人数 
    from student

    方式3 分开查

    select count(Ssex) as 男生人数 from Student where Ssex = ''

    select count(Ssex) as 女生人数 from Student where Ssex = ''

    3.查询名字中含有"风"字的学生信息

    4.查询同名同性学生名单,并统计同名人数

    select Sname 学生姓名, count(*) 人数 from Student group by Sname having count(*) > 1

    5.查询1990年出生的学生名单(注:Student表中Sage列的类型是datetime)

    select * from Student where year(sage) = 1990

    6.查询各学生的年龄

    方式1:只按照年份来算(x)

    select * , datediff(yy , sage , getdate()) 年龄 from student

    方式2:按照出生日期来算,当前月日 < 出生年月的月日则,年龄减一(x)

    select * , case when right(
    convert(varchar(10),getdate(),120),5) < right(convert(varchar(10),sage,120),5) then datediff(yy , sage , getdate()) - 1 else datediff(yy , sage , getdate()
    ) end '年龄' from student

    方式3:

    SELECT s.SNAME ,FLOOR((NOW()-s.Sage)/10000000000) 年龄
    from student s

    方式4:

    SELECT SNAME,DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(Sage, '%Y') - (DATE_FORMAT(NOW(), '00-%m-%d') 
    < DATE_FORMAT(Sage, '00-%m-%d')) AS 年龄 
    from student;

    7.查询本周过生日的学生

    方式1:(x)

    select * from student where datediff(week,datename(yy,getdate()) + right(convert(varchar(10),sage,120),6),getdate()) = 0

    方式2:

    select * from student 
    where DATE_FORMAT(Sage, '%c-%d') 
    between DATE_FORMAT(date_sub(curdate(),INTERVAL WEEKDAY(curdate()) DAY), '%c-%d') 
    and DATE_FORMAT(date_sub(curdate(),INTERVAL WEEKDAY(curdate()) - 6 DAY), '%c-%d');

    8.查询下周过生日的学生(x)

    方式1:(x)

    select * from student where datediff(week,datename(yy,getdate()) + right(convert(varchar(10),sage,120),6),getdate()) = -1

    方式2:

    select * from student 
    where DATE_FORMAT(Sage, '%c-%d') 
    between DATE_FORMAT(date_sub(curdate(),INTERVAL WEEKDAY(curdate()) - 7 DAY), '%c-%d') 
    and DATE_FORMAT(date_sub(curdate(),INTERVAL WEEKDAY(curdate()) - 13 DAY), '%c-%d');

    9.查询本月过生日的学生(x)

    方式1:(x)

    select * from student where datediff(mm,datename(yy,getdate()) + right(convert(varchar(10),sage,120),6),getdate()) = 0

    方式2:(注:date(concat(year(curdate()),'-',month(curdate()),'-','1')) 也是本月的第一天,和concat(date_format(LAST_DAY(now()),'%Y-%m-'),'01')查询结果一致。)

    select * from student 
    where DATE_FORMAT(Sage, '%c-%d') 
    between DATE_FORMAT(concat(date_format(LAST_DAY(now()),'%Y-%m-'),'01'), '%c-%d') 
    and DATE_FORMAT(LAST_DAY(now()), '%c-%d')
    order by DATE_FORMAT(Sage, '%c-%d')

    10.查询下月过生日的学生(x)

    方式1:(x)

    select * from student where datediff(mm,datename(yy,getdate()) + right(convert(varchar(10),sage,120),6),getdate()) = -1

    方式2:

    select * from student 
    where DATE_FORMAT(Sage, '%c-%d') 
    between DATE_FORMAT(concat(date_format(LAST_DAY(now() + interval 1 month),'%Y-%m-'),'01'), '%c-%d') 
    and DATE_FORMAT(LAST_DAY(now() + interval 1 month), '%c-%d')
    order by DATE_FORMAT(Sage, '%c-%d')

  • 相关阅读:
    Linux基础命令(一)
    You've made choice
    protege推理
    字符编码
    第二次作业
    数据类型-集合set
    数据类型-元组&字典
    数据类型-列表
    数据类型-数值&字符串
    流程控制之for循环
  • 原文地址:https://www.cnblogs.com/wql025/p/4957677.html
Copyright © 2020-2023  润新知