最近一直在和前端对接口,遇到不少稍显特殊的业务要求,然后这里也总结一下比较常用的几种sql关键词:

DISTINCT:

主要用于去除重复值,有比较大的局限性,根据某一列去除重复值,获得的也是去除重复的那一列。不过如果配合 in()语句,再根据ID去去重的话,就可以达到在数据库阶段达到list去重的效果;

用法:select DISTINCT 属性A,属性B from 表C;

注:这是根据A和B属性去重,需要A和B同时相等才会被认为是重复值,而且由于DISTINCT是在select中,也就是说,这个DISTINCT只能对查询到的属性A和B去重,语句只会返回A和B属性的值,如果想返回表A的完整属性,需要通过其他手段;

in()和not in():

逻辑和等于差不多,但是等于逻辑只能给一个值作为条件,这个可以处理多个值条件的情况,逻辑可以直译,就是在()里面或者不在里面;

用法:select * from 表A WHERE 属性A in(A值1,A值2,A值3);

注:not in主要用于两个表单之间查询,通常的业务主要有比如从订单表和产品表中查询某一时间段内没有卖出的产品,这个时候not in就能用上,但是这里需要注意的是,in()的括号里面一般要是“值,值,值”的字符串,如果直接在括号里面加上select语句的话虽然也能查出两个表之间的区别,但是会有大量的重复值,所以注意传入的值获得后期对结果进行处理;

in()语句的话最近在进行批量删除的时候很喜欢用,因为在列表中进行批量删除的时候,前端传过来的值一般就是“id1,id2,id3”的格式,和语句需要的完美重合,就不再需要把字符串截取成数组再循环删除了;

不过之前有看过一些说法说in和not in语句速度会比较慢,可能是由于我处理的数据量比较小吧,暂时没有看出来有很慢,也有测过删除时,分别删和in()语句删除,in()语句会快一些;

EXIST和 NOT EXIST

还不是很懂。。。下次再补

HAVING :

主要是对查询结果进行过滤,会先执行前面的查询,执行完之后再去判断having后面的条件