数据操作:数据查询顺序: w(where) g(group by) h(having ) o(order by) l(limit)
1.mysql统计函数,sum,max,min,avg,对空null采取忽略操作,因为空没有参与的意义。而count,在统计是,考虑空null。
2.针对表中没有任何数据,count,返回0给我们,但是sum,max,min,avg等没有可操作数据,而且还需要有返回值,那么用java思想会返回个默认值,那么可靠的也是必然的就是null
3.在使用mysql中的limit的时候,初始0时,可以不指定,其他必须指定;而且limit位于sql语句最后,操作结果集。
4.在进行 * is not null ,not * is null ,not is like ,is not like等条件查询时,非逻辑判断等同另一个效果。
5.数据过多,而且重复时,往往有分类进行操作,分类比较的需求,此时需要group by 。必须强调就是数据重复,否则无意义。常常将group by与统计函数sum ,max,min ,count ,avg联合使用。
6.group_concat(field)可以将某个字段进行拼接,常用于拼接分组中的某个字段。
7.group by 可以根据多个字段进行分组,字段之间逗号隔开。按照第一个进行全局分组,然后针对局部进行二次,甚至多次分组;
8.Union:操作对象:同一个表,或者类似同一个表(字段数以及类型相同)→合并成一个表 union 会去除重复的记录。union all 不会。
9.笛卡尔积:其实就是内积运算;列:是两个表所有列;总记录数:两表记录数相乘。
10.join:是建立在笛卡尔积基础之上的,一种数据过滤方式。
@1.自然连接:依据表中的字段名进行连接。
.选取表中相同字段,作为合并依据;字段值相同的保留进入下一步;不相同,去除,不参与
.将表中剩余的记录,相同的记录进行笛卡尔积运算,
或者:
.得到两表的笛卡尔积,然后去除重复的列
.针对两表相同字段列,进行筛选,去除不存在重复的该字段的记录
或者:
.两表笛卡尔积,所得列两表所有列总和,
.然后依据连接条件,去除连接条件中连接字段值不相同的,即可。
.然后在去掉相同的列@2.等值连接:依据表中的字段值进行连接。
.两表笛卡尔积,所得列两表所有列总和,
.然后依据连接条件,去除连接条件中连接字段值不相同的,即可。
个人认为:等值连接,包含自然连接;因为等值连接可以基于字段不同但是值相同的。
@3.不等连接:与等值连接相反。
@4.外连接:等值连接+其中为依据的表中仅仅有的数据条数
11.连接:形式:
@1.select * from 表,表2 where 。。。
@2. select * from 表 join 表2 on....
12.连接都是基于:笛卡尔积→等值连接→加上特定过滤条件→得到想要的。
13.多表查询:连接查询存在着一个笛卡尔积的过程,那么连接数据可能会达到很大(连接后count大于mysql可以处理的),那么数据查询耗费的时间就会增多,因此多表查询数据不可取,此时子查询便成为替代选择。
14.子查询:就是在where,from,in,any,all,exists,等查询语句任何位置中添加了select查询,得到嵌套select查询。外部的select才是关键的查询。常在where,from中。
15.待续...