博文

SQL各个子句: outer join,on,where,group by,ha(2011-03-09 16:45:00)

摘要:where与having 1.作用的对象不同。WHERE 子句作用于表和视图,HAVING 子句作用于组(group)。 eg:SELECT city FROM weather WHERE temp_lo = (SELECT max(temp_lo) FROM weather); 2.WHERE 在分组和聚集计算之前选取输入行(因此,它控制哪些行进入聚集计算), 而 HAVING 在分组和聚集之后选取分组的行。 因此,WHERE 子句不能包含聚集函数; 因为试图用聚集函数判断那些行输入给聚集运算是没有意义的。 相反,HAVING 子句总是包含聚集函数。 (严格说来,你可以写不使用聚集的 HAVING 子句, 但这样做只是白费劲。同样的条件可以更有效地用于 WHERE 阶段。) 在前面的例子里,我们可以在 WHERE 里应用城市名称限制,因为它不需要聚集。 这样比在 HAVING 里增加限制更加高效,因为我们避免了为那些未通过 WHERE 检查的行进行分组和聚集计算。 以下示例使用的数据库是MySQL 5。 数据表:student 表结构: Field Name DataType Len id                int           20 name           varchar    25 major           varchar    25 score           int           20......

阅读全文(2581) | 评论:0

union,union all,join(2011-03-09 16:38:00)

摘要:今天学习了联合和链接。联合有union和union all两种,前者是过滤表中的重复数据后显示;而后者是显示全部数据。链接是将多个表的各个字段连接在一起,关键字是join,其原理是:1、两个表的字 段进行相加(相当于横加);2、根据条件对两个表的记录进行匹配;3、没有条件则第一个表的每一条记录和第二个表的每一行记录进行连接,也叫做交叉连接, 产生的乘积叫做“笛卡尔乘积”。连接类型又分交叉链接cross join、内链接(对等链接)join、左外链接left join、右外链接right join和全链接 full join(效率低)。内链接缺点是不能显示不匹配的数据;左外链接是用join左边的表去链接另外一个表;右外链接是用join右边的表去链接另外一个 表;全链接是显示相链接的表的全部数据。联合和链接的区别是:联合相当于竖加,链接相当于横加。......

阅读全文(2117) | 评论:0

SQL之纵表转横表问题(2011-03-04 10:25:00)

摘要:横表有这么四列,Id是主键, Id code1 code2 code3 111 aaa bbb ccc 纵表只有两列: ID code 111 aaa 111 bbb 111 ccc SQL模板1: select id,max(case when code='aaa' then code end) as code1,  max(case when code='bbb' then code end) as code2,  max(case when code='ccc' then code end) as code3  from tt group by id SQL模板2:  select id,max(case code when  'aaa' then code else null end) as code1,  max(case code when 'bbb' then code else null end) as code2,  max(case code when  'ccc' then code   else null end) as code3  from tt group by id......

阅读全文(2359) | 评论:0

删除表中重复数据模板(2011-03-03 14:42:00)

摘要:delete  from AAA where (name ,valu) in(  select  name ,valu from AAA group by (name,valu) having count(*) > 1 ) and  id  not in (select min(id) from AAA group by  (name,valu)  having count(*)>1) ......

阅读全文(1571) | 评论:0

向表中插入原表已有数据(复制插入)模版(2011-03-03 14:40:00)

摘要:insert into  表名 (字段1,字段2,....) select  字段1 , 字段2,.... from 表名  ......

阅读全文(1537) | 评论:0