zoukankan      html  css  js  c++  java
  • 2018/4/23~2018/4/28 周记

    (1)row_number和distinct
    distinct和row_number都是用来去重的,但是又有点分别
     
    1.1  首先看distinct
    语法如下:
    select distinct 列名称 from 表名称
    关键字 distinct 只能放在 SQL 语句中所有字段的最前面才能起作用,如果放错位置,SQL 不会报错,但也不会起到任何效果。
     
    distinct关键字只作用于一个字段,即一个列名,当 distinct 作用在多个字段的时候,她只会将所有字段值都相同的记录“去重”掉
    例子如下所示:
    *
    name
    age
    1
    赵风
    18
    2
    钱雨
    20
    3
    孙雷
    21
    4
    李电
    18
    5
    李电
    22
    select distinct name,age from student
     
    得到结果如下:
    *
    name
    age
    1
    李电
    18
    2
    钱雨
    20
    3
    孙雷
    21
    4
    赵风
    18
    5
    李电
    22
    1.2   row_number()over()
    在 SQL Server 数据库中,为咱们提供了一个函数 row_number() 用于给数据库表中的记录进行标号,在使用的时候,其后还跟着一个函数 over(),而函数 over() 的作用是将表中的记录进行分组和排序,使用语法如下所示:
    select row_number() over(partition by cid order by score desc) as sort,* from sc
    --pratition by cid   这个就是用 字段cid 来排序对比的
    --order by score   根据score进行排序(后面添加desc,所以是根据score进行降序排序的)
     
    (2)left join,right join 和inner join 
      left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 
      right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录
      inner join(等值连接) 只返回两个表中联结字段相等的行
     
    (3) case when then else end
    相当于C#里面的if--else
    具体实例如下:

    具体代码如下;

    --23☆☆☆、统计各科成绩各分数段人数:课程编号,课程名称,[100-85],[85-70],[70-60],[0-60]及所占百分比 
    --思路:SC表和COURSE表联合查询(一个记录集合),然后每个字段都看做是一个子查询,最后将这些子查询拼接起来。
    select a.Cid as '课程编号',b.Cname as '课程名称' ,count(1)as '总人数' ,
    count(case when a.score<60 then 1 else null end) as '不及格人数',convert(decimal(5,2),
    count(case when a.score>=0 and a.score<60 then 1 else null end)*100/count(1)) as '不及格率%',
    count(case when a.score>=60 and a.score<70 then 1 else null end) as '及格人数',convert(decimal(5,2),
    count(case when a.score>=60 and a.score<70 then 1 else null end)*100/count(1)) as '及格率%',
    count(case when a.score>=70 and a.score<85 then 1 else null end) as '优良人数',convert(decimal(5,2),
    count(case when a.score>=70 and a.score<85 then 1 else null end)*100/count(1)) as '优良率%',
    count(case when a.score>=85 then 1 else null end) as '优秀人数',convert(decimal(5,2),
    count(case when a.score>=85 then 1 else null end)*100/count(1)) as '优秀率%'
    from sc a left join Course b on a.Cid=b.Cid group by a.Cid,b.Cname
    View Code

     (4)保留两位小数

    代码如下所示:

    CAST( count(case when a.score>0and a.score<60 then 1 else null end)*1.00/count(1)as decimal(18,2)) as '不及格率'

    其中cast函数是转换数据类型的函数,cast((需要转换的数据)as 数据类型);

    前面一定要乘于1.00,否则算出来的不及格率为0(让我想起了C#里面要保留两位小数就直接乘于1.00);

    除号前后分别用cast转换得不到保留两位数,我也不知道什么原因 !!

     (5)在写这些SQL语句时,我一直在避免使用 in,not in,null,not null这些关键字,但是,每次使用视图查询然后group by时,因为group by 的特性,都会发现排在第一个的是值为null的,如下图所示

    而要将null这列去掉就得在后面加上having条件is not null ,因此很苦恼。

    接下来可能要参与做一个winform的项目,所以来看看winform的一些比较重要的控键。。

    (6)DataGridView控键的一些常见属性,附上网址:

    https://www.cnblogs.com/jiangshuai52511/p/7843672.html

    (7)创建临时表(表复制)

    语法如下:

    select * into 临时表名 from 原始表名

    例:select * into #temporary from Student

    往临时表添加数据

    insert into #temporary(sNo,sName,sSex,sClass,id)values('s1111','林霖琳','女','19','1111')

    这时候查询临时表#temporary的全部数据会发现增加一条数据,但是查询原始表Student的时候并没有增加一条数据,也就是说在临时表上做的任何操作都不会影响到原始表,之前以为既然并不会对数据库数据有任何改变,那么创建临时表的意义何在呢?通过问别人,知道了,创建临时表就是为了方便查询数据,在进行完一系列操作后,临时表会自动删除掉。

    (8)单例模式

    单例模式是确保一个类只有一个实例,并提供一个全局访问方式的设计方法

    什么时候使用单例模式呢?

    1.需要频繁实例化然后销毁的对象

    2.创建对象时耗时过多或耗资源过多,但又经常用到的对象

    3.频繁访问数据库或文件的对象

    C#实现单例模式

    1.单线程单例模式

    private static Singleton _instance;

    public static Singleton GetInstance()

    {

        if(_instance==null)

        {

            _instance=new Singleton();

        }

         return _instance;

    }

    代码解析:
    Singleton的构造函数必须是私有的,确保外层无法通过new进行实例化对象
    静态变量的生命周期同应用程序的生命周期相同,可以定义一个私有的全局静态变量_instance来保存该类的唯一实例
    提供一个可访问的静态方法访问类的实例,在该方法内通过判断_instance是否为null,如果是null就创建一个实例,否则向外部返回实例
     
    多线程单例模式
    lock方式
     
    private static Singleton _instance;
    private static readonly object _objLock=new object();
    public static Singleton GetInstance()
    {
        if(_instance==null)                   //检查是否已经初始化
        {
            lock(_objLock)                    //锁定
            {
                if(_instance==null)         //检查是否已经初始化
                {
                    _instance=new Singleton();
                }
            }
        }
        return _instance;
    }
    代码解析:
    外层if判断_instance不为null时,直接返回实例,避免每次获取实例时进行锁定,节省了 性能损耗
    当外层判断成功时,使用lock锁定,保证只创建一个实例
     
     
     
     
  • 相关阅读:
    DB2数据库BACKUP PENDING状态(修改日志模式导致)(转)
    JAVA调用WebService实例
    eclipse启动报JVM terminated. Exit code=-1的解决方法
    JAVA使用Dom4j组装、解析XML
    任务调度IBM Tivoli Workload Scheduler(TWS)
    Java遍历Map数据的几种方式
    谈谈我对Log4j2以外的感想
    ESQL中添加JMS参数
    node.js-node-inspector调试
    前端-浏览器内核
  • 原文地址:https://www.cnblogs.com/cc1120/p/8921090.html
Copyright © 2011-2022 走看看