Mysql理解之连接

来源:互联网 发布:淘宝联通话费充值便宜 编辑:程序博客网 时间:2024/05/16 12:11

数据操作:数据查询顺序: 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.待续...

 

0 0
原创粉丝点击