sql中把一个查询结果当做另一个表来查询可以理解查询结果为一个临时表
使用left join 比直接使用where速度快的原因:
多表使用left join只是把主表里的所有数据查询出来,其他表只是查询表中的符合条件的某一条记录,所以非常快;而多表使用where内联,是把所有表的数据全部查出来,然后进行对比,所以速度比较慢。
使用left join要注意确定哪一张表为主表,如果无法确定主表,则选择那张表查询的字段最多,就把哪张表作为主表
查询的时候后where语句中1=1的作用仅仅是为了满足多条件查询页面中不确定的各种因素而采用的一种构造一条正确能运行的动态SQL语句的一种方法
where 1=0:这个条件始为false,结果不会返回任何数据,只是表结构,可用于快速建表
‘SELECT * FROM sale_todo WHERE 1=0’:该select语句主要是用于读取表的结构而不考虑表中的数据,这样节省了内存。因为可以不用保存结果集
‘CREATE TABLE newTable as SELECT * FROM oldTable WHERE 1=0’,创建一个新表,而新表的结构与查询的表的结构一样
count(1)、count()、count(列名):
区别
(1)count(1)会统计表中的所有记录数,包含字段为null的记录
(2)count()会统计该字段在表中出现的次数,忽略字段为null的情况。即不统计字段为null的
执行效果上:
count(*)包含了所有的列,相当于行数,在统计结果的时候,不会忽略列值为NULL
count(1)包含了忽略所有列,用1代表代码行,在统计结果的时候,不会忽略列值为NULL
count(列名)只包含列明那一列,在统计结果的时候,会忽略列值为空(这里的空不是指空字符串或者0,而是表示NULL),即某个字段值为NULL时,不统计
执行效率上:
列名为主键,count(列名)会比count(1)快
列名不为主键,count(1)会比count(列名)快
如果表有多个列并且没有主键,则count(1)的执行效率优于count()
如果有主键,则select count(主键)的执行效率为最优的
如果表只有一个字段,则select count()最优
sql中exists,not exists的用法
exists什么意思,in的条件语句中是一个字段,exists字句是允许的,exists子句不在乎返回什么,而是在乎是不是有结果集返回
exists代替in,因为exists执行效率要比in高
来源:https://blog.csdn.net/Catalina0317/article/details/100896551