真是久违的近期小结系列。。。。
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) ;
相关推荐
数据库系统概述 —— SQL Server 2016 SQLserver2016-数据库系统概述全文共16页,当前为第1页。 数据库系统(DataBase System,DBS)由计算机软件、... 小 结 SQLserver2016-数据库系统概述全文共16页,当前为第16页。
Linux运维-运维课程MP4频-06容器编排(k8s)-day02-11-11-08-docker存储驱动小结.mp4
软件测试----个人体会小结 软件测试----个人体会小结 软件测试----个人体会小结 软件测试----个人体会小结
2016-2017学年天津市河西区九年级结课考数学试卷含答案.doc
2015-2016学年高中历史-第四单元-单元学习小结-岳麓版选修1.doc
Linux运维-运维课程MP4存储专题-d2-glusterfs分布式存储-11-glusterfs小结.mp4
Linux运维-04-日志分析-日志监控ELK-day03-生产案例及Git版本控制-11-阶段小结.mp4
lammps输入文件命令中文详解
Linux运维-运维课程MP4频11-17-03-node相关操作小结.mp4
实验六------固结试验.pdf实验六------固结试验.pdf实验六------固结试验.pdf实验六------固结试验.pdf实验六------固结试验.pdf实验六------固结试验.pdf实验六------固结试验.pdf实验六------固结试验.pdf
各种经典排序算法小结---必知必会 各种经典排序算法小结---必知必会 各种经典排序算法小结---必知必会
国际疾病诊断编码库ICD-11-MMS: 1.诊断编码 2.诊断名称 3.是否为有效码(注意:标示为“否”者是章、节代码,或具有细分亚目的类目编码;在编码时应当采用有效码) 分为以下章节: 第1章 某些感染性疾病或寄生虫病 第...
matlab知识小结-MatLab 知识小结.doc matlab知识小结
2015--2016学年第二学期远离毒品、珍爱生命小结.doc
大班教师个人小结-大班月小结.docx
Linux运维-运维课程MP4频11-18-08-deployment和replicaset小结.mp4
2016-11-20 1.添加下拉刷新功能 2.列表改为模板渲染 3.封装了api请求的代码提高可复用性 2016-11-21 1.添加人物的详情页 2.将电影详情和人物详情的网络请求进行了封装 2016-11-22 1.添加了消息通知组件 2.搜索页调整...
国有企业保持------员先进性教育个人小结个人.docx
JCCAD-计-算-结-果-文-件.doc
国际结算-小结-Remittance.doc