Jcat
宠辱不惊,闲看庭前花开花落~~
posts - 173,comments - 67,trackbacks - 0

如果查询中包括聚合函数,而所选择的列并不在聚合函数中, 那么这些列就必须在GROUP BY子句中。否则将会出现如下错误:ORA-00937: not a single-group group function


不能在WHERE子句中使用聚合函数来限制行。否则将会出现如下错误:ORA-00934: group function is not allowed here


GROUP BY可以不与HAVING一起使用,但HAVING必须与GROUP BY一起使用


W-G-H的执行顺序
SELECT type_id, AVG(price)
FROM products
WHERE price<15
GROUP BY type_id
HAVING AVG(price)>13;
1. WHERE对返回的进行过滤
2. GROUP BY对保留的行进行分组
3. HAVING对分组进行过滤


子查询不能包含ORDER BY


双引号直接用:'The "Great" Gatsby' (表示字符串 The "Great" Gatsby )
单引号要转义:'O''Malley' (表示字符串 O'Malley )

 DML
select column1,column2 from table
insert into table(column1,column2) values('a','b')
update table set column1='a' where column2='b'
delete from table where column1='a'


--外连接,使用叉积表达有歧义,不运行:查询中包含不允许的外联接请求。
select * from a,b,c
        where a.a_id*=b.a_id
            and b.b_id*=c.b_id

--这样就不存在歧义性了
select * from a
    LEFT OUTER JOIN b on (a.a_id=b.a_id)
    LEFT OUTER JOIN c on (b.b_id=c.b_id)

posted on 2006-08-23 08:36 Jcat 阅读(406) 评论(1)  编辑  收藏 所属分类: Database

FeedBack:
# re: SQL Miscellane
2006-10-20 00:04 | 金刚吃香蕉
霸霸,给你补充一小点哈:
1.当使用group by后,select后面就不能跟*,必须跟具体的东西,如
select name,age from XXX group by name,age;//这个是对的。
select * from XXX group by name,age; //这个就是错误的。
PS:即使一张表的全部内容就是只有name和age,也仍然要按上面的
写法。

2.where和having都是一种条件选择语句。having只配合group by使用。
还有一个就是where与having的区别。where是先查后排,having是先排
后查。  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: