1、count(1),count(*),count(列名)的区别和联系?
当表的数据量很大时候,count(1)比count(*) 更加消耗时间,如果count(1)是聚索引那么count(*)会更快一些,因为count(*)会自动优化指定哪一字段。 综上所述,count(1)和count(*)基本没有区别!
count(1)会统计表中的所有记录数,包含NULL,count会统计该字段在表中的出现次数,忽略了NULL的情况。
三者区别:count(*)包含了所有的列,相当于所有的行,统计结果不忽略NULL
count(1)包含了忽略所有的列,用1表示代码行,统计结果不忽略NULL
count会统计该字段出现的次数,统计结果忽略NULL
执行效率上面:如果目标列名是主键count > count(1) = count(*)
如果目标列名非主键count(1) = count(*) > count
如果表多列都没主键count(1) > count(*) > count(列名)
最佳查找方法是:SELECT COUNT(主键列)
2、DROP、TRUNCATE、DELETE的区别?
DROP用来删除数据库和表格
TEUNCATE用来删除表格里的数据,但是不能回滚
DELEDE用来删除表格里的数据,可以回滚
3、内连接和外连接的区别?
内连接包括等值连接和自然连接,内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行;外连接有左外连接和右外连接,可以由以下关键字指定:LEFT JOIN,RIGHT JOIN,INNER JOIN
4、SQL编码题:
4.1 查询学号1003-1010的学生信息(通过BETWEEN关键字实施)
SELECT *
FROM student
WHERE student.StudentNo BETWEEN 1002 AND 1010;
4.2 查询邮箱为空的学员信息.(通过<=>关键字实施)
SELECT * FROM student WHERE student.Email <=> NULL;
4.3 根据学号得到所有学生平均分后,过滤掉80分以下的学生后,对成绩进行降序排列,取前三名
SELECT result.StudentNo ,AVG(result.StudentResult)
FROM result
GROUP BY (result.StudentNo)
HAVING AVG(reesult.StudentResult) >= 80
ORDER BY (AVG(result.StudentResult)) DESC
LIMIT 0, 3;