注册 登录
编程论坛 SQL Server论坛

[求助]初学SQL,一道查询题目弄得头都大了~~

hkxyz 发布于 2006-11-20 16:17, 1694 次点击

查询Sales表,要求返回ord_date在1993年到1994年之间,查询结果按照title_id降序的方式进行显示.

Sales表的数据是这样的,
stor_id | ord_num | ord_date | qty | title_id
6380 6871 1994-09-14 5 BU1032
7066 A2876 1993-09-13 6 TC7777
4380 6861 1992-09-14 5 BU1022
7067 A2u76 1991-09-13 6 TC7737

郁闷~~大家帮忙看看,谢谢了!

29 回复
#2
棉花糖ONE2006-11-20 17:09
select * from Sales where datepart(yyyy,ord_date) between 1993 and 1994 order by title_id desc
#3
hkxyz2006-11-20 18:10

非常感谢!datepart这个函数我没学过,如果不用这个函数做。还有解吗?

#4
hanbingchong2006-11-20 20:40
select * from Sales where ord_date between '1993' and '1994' order by title_id desc
#5
棉花糖ONE2006-11-21 12:46
老大depart函数我也没学啊。你去查帮助,老师不可能什么都教的啊
#6
李彬2006-11-22 17:33
select * from Sales where ord_date between '1993-01-01' and '1994-01-01' order by title_id desc
这样就不用函数了!
#7
junlongsina2006-11-28 17:52

看看数据库原理那本书啊 很详细

#8
bygg2006-11-28 17:55
以下是引用jinyuzhang在2006-11-20 17:09:51的发言:
select * from Sales where datepart(yyyy,ord_date) between 1993 and 1994 order by title_id desc

这个应该是比较好的.

#9
周星2006-11-28 18:05

我这样写可以吗?
select * from sales

where ord_date > '1993-01-01' and '1994-01-01'

order by title_id desc

#10
bygg2006-11-28 19:34
不行吧,
其实可不可以,你在查询分析器中执行一下不就知道了吗?何必在这里问一下呢?你觉得是你直接执行一下快呢还是在这里问快??呵呵
#11
棉花糖ONE2006-11-29 10:38

我这样写可以吗?
select * from sales

where ord_date > '1993-01-01' and '1994-01-01'

order by title_id desc



这样可以啊

#12
棉花糖ONE2007-03-01 22:29

select * from Sales where ord_date between '1993-01-01' and '1994-01-01' order by title_id desc
select * from sales where ord_date > '1993-01-01' and '1994-01-01' order by title_id desc 这两种都比我那种好,如果在ord_date建索引的话这两种方法都能使用索引,而我那种却会导致全表扫描

#13
reniking2007-03-02 08:55
select * from Sales where year(ord_date) =1993 order by title_id desc
#14
棉花糖ONE2007-03-02 10:04
楼上的mm,你那种也是会导致表扫描的,where语句中如果有解决方法的,尽量避免使用函数
#15
reniking2007-03-02 10:35
以下是引用棉花糖ONE在2007-3-2 10:04:57的发言:
楼上的mm,你那种也是会导致表扫描的,where语句中如果有解决方法的,尽量避免使用函数

这样啊,呵呵,学习了

#16
lifude2007-03-03 10:16
select * from sales where ord_date > '1993-01-01' and ord_date < '1994-01-01' order by title_id desc可以吗
#17
棉花糖ONE2007-03-03 10:24
前面有这种写法啦
#18
一个人上路2007-03-10 18:58
以下是引用lifude在2007-3-3 10:16:49的发言:
select * from sales where ord_date > '1993-01-01' and ord_date < '1994-01-01' order by title_id desc可以吗

有错误.这是我运行的结果:
服务器: 消息 170,级别 15,状态 1,行 1
第 1 行: ' ' 附近有语法错误。

#19
sgliuxiu2007-03-14 18:59
有错误是因为你用了中文状态下的"'"
#20
一个人上路2007-03-15 01:33

用了这个英文的"'"还是不行.这是中文"'".
不信请复制了试试.

#21
bygg2007-03-15 09:33
把日期两边的单引号去掉.
#22
帅哥一条虫2007-03-18 20:22

路过

#23
maggie_822007-03-18 22:39
    怎么知道函数会导致全表扫描啊?请讲一下 谢谢!
#24
jianghui2007-03-20 17:16

问一下有谁知道用 sql 语句 怎样将 一行中的数据变成一列中的数据?急!!!!!!
先谢各位了?

#25
Kendy1234562007-03-20 17:36

楼上注意 最好不要在别人的贴问自己的问题。。
你这个问题随便搜搜就能在这个论坛找到好多答案

#26
棉花糖ONE2007-03-20 18:20
对哦,最近问行列转换的人越来越少了
#27
liuminghui2007-03-21 09:20
小问题,大学问!!
#28
xiyou4192007-04-03 09:19
以下是引用棉花糖ONE在2007-3-1 22:29:02的发言:

select * from Sales where ord_date between '1993-01-01' and '1994-01-01' order by title_id desc
select * from sales where ord_date > '1993-01-01' and '1994-01-01' order by title_id desc 这两种都比我那种好,如果在ord_date建索引的话这两种方法都能使用索引,而我那种却会导致全表扫描

第二种方法我试了,不对啊.
应该是:
select * from sales where ord_date > '1993-01-01' and ord_date<'1994-01-01' order by title_id desc 

[此贴子已经被作者于2007-4-3 9:22:00编辑过]

#29
棉花糖ONE2007-04-03 12:06
可能是当时没注意
#30
xiyou4192007-04-03 18:22
以下是引用maggie_82在2007-3-18 22:39:16的发言:
怎么知道函数会导致全表扫描啊?请讲一下 谢谢!

对列的直接运算操作都会导致索引失效而使用全表扫描
比如:
select * from table where colum/2=30
select * from table where colum=30*2
这两个语句的查询结果是一样的,但是第一个语句会全表扫描,而第二个会使用索引(如果建立了索引).
所以第二个的效率比第一个高.

1