• SQL回顾


    一、基础操作

    1.cmd中启动 mysql -u root -p

    show databases;
    use school;
    show tables;

    https://blog.csdn.net/you23hai45/article/details/9394673


    2.添加字段
    alter table student add 姓名 varchar(255) not null;
    alter table student add 出生日期 date not null;
    alter table student add 性别 varchar(255) not null;
    alter table student add primary key(学号);
    create table student(姓名 varchar(255) not null,.... primary key(学号));

    https://www.cnblogs.com/softidea/p/6135097.html
    3.录入数据
    insert into student(学号,姓名,出生日期,性别)
    values('0001','猴子','1989-01-01','男');

    %表示多个字符,_只能是一个字符
    #、/* */表注释
    group by 要注意分类中不能有同类的字段存在
    where和having的区别在于,先运行where在运行having,having可带聚合函数,where不行
    https://www.cnblogs.com/jiaoxiaohui/p/10727394.html

    4.时间函数
    current_date 2020-05-02
    current_time 10:41:23
    current_timestamp 2020-05-02 10:41:23
    year month day
    dayname 星期六

    DATE_FORMAT(Now(),'%Y-%m-%d')

    https://www.cnblogs.com/softidea/p/5770174.html

    5.case when 用法
    https://www.cnblogs.com/chenduzizhong/p/9590741.html

    二、遗忘语句
    计算每个学号成绩<60的个数(group by)筛选出>=2个的学号(having)
    select b.姓名,avg(a.成绩),a.学号
    from score as​ a inner join student as b on a.学号 =b.学号 where a.成绩 <60group by a.学号 having count(a.学号 ) >=2;

    查询不同课程成绩相同的学生的学生编号、课程编号、学生成绩
    select distinct ​a.学号 ,a.成绩 ,a.课程号 from score as​ a inner join score as b
    ​​on a.学号 =b.学号 where a.成绩 =b.成绩 and a.课程号 != b.课程号 ;

    查询课程编号为“0001”的课程比“0002”的课程成绩高的所有学生的学号
    select a.学号 ​from (select 学号 ,成绩 from score where 课程号=01) as a
    inner join (select 学号 ,成绩 from score where 课程号=02) as b
    on a.学号 =b.学号 inner join student c on c.学号 =a.学号 where a.成绩 >b.成绩 ;

    查询没学过"孟扎扎"老师讲授的任一门课程的学生姓名
    select 姓名 ,学号 from student where 学号 not in (select a.学号
    from student as a inner join score as​ b on a.学号 =b.学号
    inner join course as​ c on b.课程号 =c.课程号 inner join teacher as​ d on c.教师号 =d.教师号 where d.教师姓名 ='孟扎扎');

    select 学号, 姓名 from student where ​学号 not in
    (select 学号 from score where 课程号=(select 课程号 from course where 教师号 = (select 教师号 from teacher where 教师姓名 ='孟扎扎')));

    查询至少有一门课与学号为“0001”的学生所学课程相同的学生的学号和姓名
    select 学号 ,姓名 from student
    ​​where 学号 in #换表
    (select distinct(学号) from score where 课程号 in #将有学过01学号课程的学号取出
    (select 课程号 from score where 学号=0001)) #先查询0001学号的课程
    and 学号 !=0001; #去除01学号本身

    按平均成绩从高到低显示所有学生的所有课程的成绩以及平均成绩
    select a.学号,avg(a.成绩 ),
    max(case when b.课程名称 = '数学' then a.成绩 else null end ) as '数学',
    max(case when b.课程名称 = '语文' then a.成绩 else null end ) as '语文',
    max(case when b.课程名称 = '英语' then a.成绩 else null end ) as '英语'
    from score as​ a inner join course as b on a.课程号 =b.课程号 group by a.学号 ;

    排名row_number () over()
    https://www.cnblogs.com/buwuliao/p/12894289.html
    查询学生平均成绩及其名次
    select 学号 ,avg(成绩),row_number () over( order by avg(成绩) desc) from score group by 学号 ;

    分组排名partition by
    按各科成绩进行排序,并显示排名
    select 课程号 ,row_number () over(partition by 课程号 order by 成绩 ) from score ;

    查询每门功成绩最好的前两名学生姓名
    select a.课程号 ,b.姓名 ,a.成绩,a.ranking​ from (
    select 课程号 ,学号 ,成绩 ,
    row_number () over(partition by 课程号 order by 成绩 desc) as ranking​
    from score) as a inner join student b on a.学号 =b.学号 where a.ranking​ <3 ;
    第2名到第3名
    where a.ranking in( 2,3)

     https://zhuanlan.zhihu.com/p/38354000

    https://mp.weixin.qq.com/s/MuxjlFV0gi1GydOrYfiSeQ

     https://mp.weixin.qq.com/s/6Kll4Q6Xp37i2PiLUh4cMA

  • 相关阅读:
    Apache Common-IO 使用
    Apache Compress-使用
    使用JavaConfig方式-Spring 基础学习
    设计模式-策略模式
    logback mybatis 打印sql语句
    oracle 迭代查询
    使用 Dom4j 将 XML 转换为 MAP
    Java连接Access数据库的那些坑
    如何从Maven中央存储库下载?
    sublime构建各个编译环境
  • 原文地址:https://www.cnblogs.com/ybxw/p/14274548.html
Copyright © 2020-2023  润新知