sql文规则

 
2007-11-23 12:26:02
标签: 学习公社
1分别对 union 两边的select 字句用order by 无用。
 Oracle有这样的约定:
 ·select 语句碧血具有相同的列数。
 ·select 语句中相应的列必须有相同的类型(长度可以不同)。
 在对输出进行排序是 ,Oracle使用第一个select 语句中列名给出查询结果。因此,只有第一个select 语句中的列名可用于order by.
 
2 ORDER BY 只保证查询的最外面的 SELECT 语句的排序结果
 
3 无法对数据类型为 textntextimagexml 的列使用 ORDER BY
4 ASC
指定按升序,从最低值到最高值对指定列中的值进行排序。
DESC
指定按降序,从最高值到最低值对指定列中的值进行排序。
 
备注

    空值被视为最低的可能值。

 

  5 where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。


  6 having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having 条件显示特定的组,也可以使用多个分组标准进行分组。

 7 group by 指定用来放置输出行的组。

  (1) 使用了聚合函数

   如果 SELECT 子句 <select list> 中包含聚合函数,则 GROUP BY 将计算每组的汇总值,选择列表中任意非聚合表达式内的所有列都应包含在 GROUP BY 列表中。

  (1) 未使用聚合函数

    GROUP BY 表达式必须与选择列表表达式完全匹配。

---------------------------------------------------------------------

 

8 group by , order by

 看这个帖子

 select   ProductType_T   from   T_ProductType   group   by   ProductType_T   order   by   ProductType_ID  
   
  这句为什么是错的么?  
   
  因为group   by分组是把某字段相同的记录合并,但是ProductType_T相同并不意味着ProductType_ID就相同,那么加一个order   by   ProductType_ID的话,SQL分析器根本不知道是用哪个ProductType_ID来排序。加上聚合函数就OK了,如下:   
  select   ProductType_T   from   T_ProductType   group   by   ProductType_T   order   by   max(ProductType_ID)     
  或者   
  select   ProductType_T   from   T_ProductType   group   by   ProductType_T   order   by   min(ProductType_ID)

16 楼neilzhlei(半瓶子软件)回复于 2005-06-23 09:23:45 得分 2

select   ProductType_T  
  from   T_ProductType    
  group   by   ProductType_T,ProductType_ID    
  order   by   ProductType_ID  
   
  id只需要出现在聚合函数中或group   by子句中就可以了。  

 

9 on 与 where

on 是连接条件。如 A.ID=B.ID 

where 是查询条件。如 B.OTHERKEY=XXXX

---------------------------------------------------------------------

用左/右联系时, 如果把"关联等式"和限制条件都写到on中会怎么样?而且我不写where子句了?
在这里on和where具体怎么理解?

ON条件是可以用在一个WHERE子句形式的任何条件
历史问题
--------------------------------------------------------
SELECT * FROM A LEFT JOIN B ON A.ID=B.ID WHERE B.OTHERKEY=XXXX

SELECT * FROM A LEFT JOIN B ON A.ID=B.ID AND B.OTHERKEY=XXXX
是不一样的
后者相当于
SELECT * FROM A LEFT JOIN B ON A.ID=B.ID WHERE B.OTHERKEY=XXXX OR B.OTHERKEY IS NULL

 

10 执行顺序

 1)根据where字句选择行。

 2)根据group by 组合行。

 3)为每个组计算分组函数的结果。

 4)根据having by 选择和排除组。

 5)根据order by 字句中的分组函数的结果对足进行排序。order by 字句必须使用分组函数或者使用在group by 字句中指定的列。也就是说如果在order by 字句中指定了不是分组函数一部分的一个列,那么它肯定在group by字句中。

ーーーーーーーーーーーーーーーーーーーーーーーーーー

求教一个关于 DISTINCT 和 order by id失效的问题

版块:[MS-SQL Server 疑难问题] 日期:2007-5-28 分值:20分回复:9人 [原文] [举报]

提问:


 

问者:bbfang() 信誉:100 级别:user1 日期:2007-5-28 17:51:43

 

select distinct top 4 [b2c_z].to_user_un,[user].user_logo,[b2c_z].id from [b2c_z],[user] where [b2c_z].to_user_un=[user].user_un and [user].user_sex='女' and [user].user_logo_yn='1' order by [b2c_z].id desc

加了ORDER BY的话  就有重复值了

请问大家怎么办(在不用临时表的前提下)

谢谢指教

 

回复:



 

答者:Yang_(扬帆破浪) 信誉:132 级别:star4 日期:2007-5-28 17:57:17 id:41076436

 

Try:

select top 4 
from ( 
select distinct
[b2c_z].to_user_un,[user].user_logo,
[b2c_z].id 
from [b2c_z],[user] 
where [b2c_z].to_user_un=[user].user_un 
and [user].user_sex='女' 
and [user].user_logo_yn='1' 
) as t
order by id desc


 

答者:bbfang() 信誉:100 级别:user1 日期:2007-5-28 18:01:29 id:41076519

 

谢谢楼上的   但是有错误
服务器: 消息 156,级别 15,状态 1,行 1
在关键字 'from' 附近有语法错误。
服务器: 消息 156,级别 15,状态 1,行 1
在关键字 'as' 附近有语法错误。

 

答者:lwl0606(寒泉) 信誉:100 级别:user5 日期:2007-5-28 18:01:32 id:41076521

 

看起来没问题,你想取什么数据?加了order by 后先按 [b2c_z].id 排序 ,然后取出 前4 行,前提是记录不重复的情况下排序的,[b2c_z].id 这一列可能会有重复,不会 三列都重复吧

 

答者:Yang_(扬帆破浪) 信誉:132 级别:star4 日期:2007-5-28 18:04:39 id:41076562

 

少写了*

select top 4 *
from ( 
select distinct
[b2c_z].to_user_un,[user].user_logo,
[b2c_z].id 
from [b2c_z],[user] 
where [b2c_z].to_user_un=[user].user_un 
and [user].user_sex='女' 
and [user].user_logo_yn='1' 
) as t
order by id desc


 

答者:bbfang() 信誉:100 级别:user1 日期:2007-5-28 18:05:23 id:41076570

 

回楼上    ID是自动编号   我是想按最新的来排序  加了ORDER BY ID   重复值就过滤不掉了

 

答者:bbfang() 信誉:100 级别:user1 日期:2007-5-28 18:06:44 id:41076583

 

扬帆破浪  你好,用了你的SQL 查询出来还是有重复值

 

答者:Yang_(扬帆破浪) 信誉:132 级别:star4 日期:2007-5-28 18:41:05 id:41076952

 

...
看来你要说清楚你希望的不重复是指[b2c_z].to_user_un,[user].user_logo,[b2c_z].id 三个字段的组合不重复还是哪个单个子字段不重复


 

答者:Yang_(扬帆破浪) 信誉:132 级别:star4 日期:2007-5-28 18:44:06 id:41076984

 

估计是要求[b2c_z].to_user_un,[user].user_logo组合不重复,可以这样

select top 4 [b2c_z].to_user_un,[user].user_logo,max([b2c_z].id) as id
from [b2c_z],[user] 
where [b2c_z].to_user_un=[user].user_un and [user].user_sex='女' and [user].user_logo_yn='1' 
group by [b2c_z].to_user_un,[user].user_logo
order by max([b2c_z].id)



 

答者:bbfang() 信誉:100 级别:user1 日期:2007-5-28 18:48:39 id:41077025

 

扬帆破浪  谢谢你   问题解决了
高手哦  呵
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值