在介绍GROUP BY 和 HAVING 子句前,我们必需先讲讲sql语言中一种特殊的函数:聚合函数,
例如SUM, COUNT, MAX, AVG等。这些函数和其它函数的根本区别就是它们一般作用在多条记录上。
SELECT SUM(population) FROM bbc
这里的SUM作用在所有返回记录的population字段上,结果就是该查询只返回一个结果,即所有
国家的总人口数。
having是分组(group by)后的筛选条件,分组后的数据组内再筛选
where则是在分组前筛选
SUM是对符合条件的记录的数值列求和
COUNT 是对查询中符合条件的结果(或记录)的个数
例如:
表fruit
id name price
1 apple 3.00
2 pear 4.00
select count(price) from fruit; —-执行之后结果为:2 (表示有2条记录)
select sum(price) from fruit;—执行之后结果为:7:00(表示各记录price字段之和为7.00)
但是用IN的SQL性能总是比较低的,从SQL执行的步骤来分析用IN的SQL与不用IN的SQL有以下区别: SQL试图将其转换成多个表的连接,如果转换不成功则先执行IN里面的子查询,再查询外层的表记录,如果转换成功则直接采用多个表的连接方式查询。由此可见用IN的SQL至少多了一个转换的过程。一般的SQL都可以转换成功,但对于含有分组统计等方面的SQL就不能转换了。 推荐在业务密集的SQL当中尽量不采用IN操作符 NOT IN 此操作是强列推荐不使用的,因为它不能应用表的索引。推荐用NOT EXIS
1.删除
1)删除记录
Delete from 表名 where id =’xx’
2)删除所有数据,并回归初始化标识字段。
Truncate table 表名
3)delete与truncate区别
a. truncate是能使种子回到初始值
b. truncate不能加条件
c. truncate不能涉及触发器
d. truncate性能要比delete高得多
2.更新
1)基础的update
update 表名
table a(id, type):id type ———————————-1 1 2 1 3 2 table b(id, class):id class ———————————1 12 2sql语句1:select a.*, b.* from a left join b on a.id = b.id and a.type = 1;sql语句2:select a.*, b.* fr