真是久违的近期小结系列。。。。
1.distinct的分组作用
一般来说,大家都知道distinct是用来去重的,却忽视了他也有分组的作用~下面就来测试一下。
假设有一张aaa的表数据如下:
其中,date和name字段是一一对应的,而date和name2字段并不是一一对应的。
1)下面就来测试distinct和group by在date和name字段上的作用效果:
SELECT DISTINCT DATE,NAME FROM aaa ORDER BY DATE;
SELECT DATE,NAME FROM aaa GROUP BY DATE,NAME ORDER BY DATE;
2)下面继续测试distinct和group by在date和name2字段上的作用效果:
SELECT DISTINCT DATE, NAME2 FROM aaa ORDER BY DATE;
SELECT DATE,NAME2 FROM aaa GROUP BY DATE,NAME2 ORDER BY DATE;
可以看出,无论是否一一对应,当distinct作用在2个字段上时,就相当于group by的去重效果,但是distinct并不能代替group by的作用,比如在select分支上加上count,sum等统计函数。。
2.多个join的执行顺序。
一直比较迷惑多个join在内部的执行顺序,下面就来验证一下!
现有A、B、C三张表的数据如下:
A表:
B表:
C表:
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`
结果如下:
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`
结果如下:
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`
结果如下:
仔细观察每条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。
下图为字符编码的一张图:
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) ;
相关推荐
**WNM2016-3/TR-VB MOSFET详解** WNM2016-3/TR-VB是一款N沟道金属氧化物半导体场效应晶体管(MOSFET),设计用于DC/DC转换器和便携式应用中的负载开关。这款MOSFET具有以下特性: 1. **无卤素**:符合IEC 61249-2-...
Linux运维-运维课程MP4频-06容器编排(k8s)-day02-11-11-08-docker存储驱动小结.mp4
### WNM2016-3-TR-VB SOT23封装N-Channel场效应MOS管详解 #### 概述 WNM2016-3-TR-VB是一款采用SOT23封装的N-Channel沟道增强型MOS场效应晶体管(MOSFET)。该产品具有低导通电阻、高可靠性和环保特性等优点,并且...
软件工程课程设计及实验报告与个人小结---程序员SUMER 软件工程课程设计及实验报告与个人小结---程序员SUMER 软件工程课程设计及实验报告与个人小结---程序员SUMER 软件工程课程设计及实验报告与个人小结---程序员...
软件测试----个人体会小结 软件测试----个人体会小结 软件测试----个人体会小结 软件测试----个人体会小结
2015-2016学年高中历史-第四单元-单元学习小结-岳麓版选修1.doc
### DTS2016-VB — N-Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明 #### 概述 DTS2016-VB是一款采用SOT23封装的N-Channel沟道功率MOSFET(金属氧化物半导体场效应晶体管),其主要特性包括低导通电阻、高...
根据提供的文件信息,我们可以深入探讨WPM2016-VB这款SOT23封装的N-Channel场效应MOS管的关键特性和应用。 ### 一、产品概述 #### 特性 - **无卤素**:根据IEC 61249-2-21标准定义,该MOS管采用无卤素材料,符合...
Linux运维-运维课程MP4存储专题-d2-glusterfs分布式存储-11-glusterfs小结.mp4
Linux运维-04-日志分析-日志监控ELK-day03-生产案例及Git版本控制-11-阶段小结.mp4
Linux运维-运维课程MP4频11-17-03-node相关操作小结.mp4
2015--2016学年第二学期远离毒品、珍爱生命小结.doc
大班教师个人小结-大班月小结.docx
Linux运维-运维课程MP4频11-18-08-deployment和replicaset小结.mp4
国有企业保持------员先进性教育个人小结个人.docx
国际结算-小结-Remittance.doc
Python-基础-时间日期处理小结.html
2022护理工作小结---上海中山医院.pdf
title: 天气预报Demo知识小结具体代码见:项目地址异步AsyncTask实现抽象方法新建实例,execute()即可Activity相互传值发送方通过I