欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【2016-11-09】近期小结 博客分类: 随便唠唠 小结 

程序员文章站 2024-03-26 10:32:05
...

真是久违的近期小结系列。。。。【2016-11-09】近期小结
            
    
    博客分类: 随便唠唠 小结 

 

1.distinct的分组作用

一般来说,大家都知道distinct是用来去重的,却忽视了他也有分组的作用~下面就来测试一下。

假设有一张aaa的表数据如下:


【2016-11-09】近期小结
            
    
    博客分类: 随便唠唠 小结 
 其中,date和name字段是一一对应的,而date和name2字段并不是一一对应的。

 

1)下面就来测试distinct和group by在date和name字段上的作用效果:

 

SELECT DISTINCT DATE,NAME FROM aaa ORDER BY DATE;

 
【2016-11-09】近期小结
            
    
    博客分类: 随便唠唠 小结 
 

SELECT DATE,NAME FROM aaa GROUP BY DATE,NAME ORDER BY DATE;

 
【2016-11-09】近期小结
            
    
    博客分类: 随便唠唠 小结 

 

2)下面继续测试distinct和group by在date和name2字段上的作用效果:

 

SELECT DISTINCT DATE, NAME2 FROM aaa ORDER BY DATE;

 
【2016-11-09】近期小结
            
    
    博客分类: 随便唠唠 小结 
 

SELECT DATE,NAME2  FROM aaa GROUP BY DATE,NAME2 ORDER BY DATE;

 
【2016-11-09】近期小结
            
    
    博客分类: 随便唠唠 小结 
 

 


 可以看出,无论是否一一对应,当distinct作用在2个字段上时,就相当于group by的去重效果,但是distinct并不能代替group by的作用,比如在select分支上加上count,sum等统计函数。。

 

2.多个join的执行顺序。

一直比较迷惑多个join在内部的执行顺序,下面就来验证一下!

现有A、B、C三张表的数据如下:

A表:


【2016-11-09】近期小结
            
    
    博客分类: 随便唠唠 小结 
 B表:


【2016-11-09】近期小结
            
    
    博客分类: 随便唠唠 小结 
 C表:


【2016-11-09】近期小结
            
    
    博客分类: 随便唠唠 小结 
 

1)比如以下sql:

 

SELECT a.name,
       b.`province`,
       c.`address`
FROM A a
LEFT JOIN B b ON a.fk = b.`id`
LEFT JOIN C c ON a.fk=c.`fk`

 结果如下:

 


【2016-11-09】近期小结
            
    
    博客分类: 随便唠唠 小结 
 2)sql语句:

SELECT a.name,
       b.`province`,
       c.`address`
FROM A a
RIGHT JOIN B b ON a.fk = b.`id`
LEFT JOIN C c ON a.fk=c.`fk`

 结果如下:

 


【2016-11-09】近期小结
            
    
    博客分类: 随便唠唠 小结 
 3)sql语句:

 

SELECT a.name,
       b.`province`,
       c.`address`
FROM A a
JOIN B b ON a.fk = b.`id`
LEFT JOIN C c ON a.fk=c.`fk`

 结果如下:

 


【2016-11-09】近期小结
            
    
    博客分类: 随便唠唠 小结 
 

仔细观察每条sql语句的不同之处,对于sql语句里多个join(不管是inner join还是left join还是right join),执行顺序是第一个join的结果集(临时表)的大小决定最终整个sql语句结果的大小;第一个join的结果集(不分字段)再跟后面的join继续连接,然后select出相应的字段即可。

 

3.group by、where、left join等执行顺序。

语法顺序: select ->from->left join->on( and)->where->(and)->group by->having->order by

执行顺序:from->left join->on(and)->where->group by->having->select->order by

 在使用left join时,on和where条件的区别如下:

1) on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。

2)where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。

很容易出错的地方:当在left join后使用on生成临时表时,会加上and,再对临时表过滤时,会习惯性再加上and 而不是使用where造成错误~

 

 

4.同一个字符串,通过main方法跑出的解密结果是正常的中文显示,但是通过数据库传递过来经解密后却乱码?

因为字符在字符串经过jdbc传到后台时,自带了字符编码。经过解密后的字符串最好统一这样处理:new String(String str,  String charset),其中str为解密后的字符串,charset为字符编码,一般都是UTF-8。

 下图为字符编码的一张图:


【2016-11-09】近期小结
            
    
    博客分类: 随便唠唠 小结 
 

5.学习一种线程安全的单例模式:

private static Singleton instance = null;

    /**
     * Returns a singleton instance of Singleton.
     *
     * @return an instance of Singleton.
     */
    public synchronized static Singleton getInstance() {
    	if (instance == null) {
    		Singleton props = new Singleton();
    		
    		instance = props;
    	}
        return instance;
    }
    private Singleton() { }

 

6、window.frames['downloadFrame']可以获取id为downloadFrame的iframe元素,而不是name为downloadFrame的iframe。而且得到的是一个js对象……

 

7.sql语句里,!='' 会把null的记录也过滤掉,但is not null不会把''的记录过滤掉;=‘’和is null则分别只过滤出‘’和null的记录~ 另:注意这种写法:SELECT * FROM a WHERE id>1 AND (fk='' OR fk IS NULL)  ;

  • 【2016-11-09】近期小结
            
    
    博客分类: 随便唠唠 小结 
  • 大小: 8.1 KB
  • 【2016-11-09】近期小结
            
    
    博客分类: 随便唠唠 小结 
  • 大小: 4.2 KB
  • 【2016-11-09】近期小结
            
    
    博客分类: 随便唠唠 小结 
  • 大小: 4.3 KB
  • 【2016-11-09】近期小结
            
    
    博客分类: 随便唠唠 小结 
  • 大小: 3.8 KB
  • 【2016-11-09】近期小结
            
    
    博客分类: 随便唠唠 小结 
  • 大小: 3.8 KB
  • 【2016-11-09】近期小结
            
    
    博客分类: 随便唠唠 小结 
  • 大小: 3.4 KB
  • 【2016-11-09】近期小结
            
    
    博客分类: 随便唠唠 小结 
  • 大小: 2.7 KB
  • 【2016-11-09】近期小结
            
    
    博客分类: 随便唠唠 小结 
  • 大小: 3.6 KB
  • 【2016-11-09】近期小结
            
    
    博客分类: 随便唠唠 小结 
  • 大小: 5.2 KB
  • 【2016-11-09】近期小结
            
    
    博客分类: 随便唠唠 小结 
  • 大小: 4 KB
  • 【2016-11-09】近期小结
            
    
    博客分类: 随便唠唠 小结 
  • 大小: 248.8 KB
相关标签: 小结