--
聚合函数
use
pubs
go
select
avg
(
distinct
price)
--
算平均数
from
titles
where
type
=
'
business
'
go
use
pubs
go
select
max
(ytd_sales)
--
最大数
from
titles
go
use
pubs
go
select
min
(ytd_sales)
--
最小数
from
titles
go
use
pubs
go
select
type,
sum
(price),
sum
(advance)
--
求和
from
titles
group
by
type
order
by
type
go
use
pubs
go
select
count
(
distinct
city)
--
求个数
from
authors
go
use
pubs
go
select
stdev
(royalty)
--
返回给定表达式中所有值的统计标准偏差
from
titles
go
use
pubs
go
select
stdevp
(royalty)
--
返回表达式中所有制的填充统计标准偏差
from
titles
go
use
pubs
go
select
var
(royalty)
--
返回所有值的统计方差
from
titles
go
use
pubs
go
select
varp
(royalty)
--
返回所有值的填充的统计方差
from
titles
go
--
数学函数
......
http://www.thecloud.cn/study/program/java/597.html
hibernate3的HQL 是面向对象的语法,已经支持 update ,delete from语句,但
目前还不支持insert into语句.
做项目有时候的确需要写原生的sql来方便web开发.
下面是我自己鼓捣出来的方法,希望对我和朋友有所帮助.
在Dao里写一个方法,让我们在action里调用它...
public void InsertData(String MytblName,String
Mytitle,String Mycode,String Mycoments){
log.debug("insert into dataitems ---drs");
//使用了原生sql语句
try{
//将传入的类名处理成表名 例如:CTable----〉C_Table
MytblName = "C_"+MytblName.substring(1,MytblName.length());
//插入表 的
sql
String Insert_SQL ="INSERT INTO "+MytblName+
"
(C_Title,C_Code,C_Comments)"+
" VALUES
('"+Mytitle+"','"+Mycode+"','"+Mycoments+"')" ;
&nb ......
RANK ( ) OVER ( [query_partition_clause] order_by_clause )
DENSE_RANK ( ) OVER ( [query_partition_clause] order_by_clause )
可实现按指定的字段分组排序,对于相同分组字段的结果集进行排序,
其中PARTITION BY 为分组字段,ORDER BY 指定排序字段
over不能单独使用,要和分析函数:rank(),dense_rank(),row_number()等一起使用。
其参数:over(partition by columnname1 order by columnname2)
含义:按columname1指定的字段进行分组排序,或者说按字段columnname1的值进行分组排序。
例如:employees表中,有两个部门的记录:department_id =10和20
select department_id,rank() over(partition by department_id order by salary) from employees就是指在部门10中进行薪水的排名,在部门20中进行薪水排名。如果是partition by org_id,则是在整个公司内进行排名。
以下是个人见解:
sql中的over函数和row_numbert()函数配合使用,可生成行号。可对某一列的值进行排序,对于相同值的数据行进行分组排序。如下表:
执行语句:select row_number() over(order by AID DESC) as rowid,* from bb后的结果如下:
rowid标识行号有了,同时AID也按降序 ......
优化存储过程有很多种方法,下面介绍最常用的7种。
1.使用SET NOCOUNT ON选项
我们使用SELECT语句时,除了返回对应的结果集外,还会返回相应的影响行数。使用SET NOCOUNT ON后,除了数据集就不会返回额外的信息了,减小网络流量。
2.使用确定的Schema
在使用表,存储过程,函数等等时,最好加上确定的Schema。这样可以使SQL Server直接找到对应目标,避免去计划缓存中搜索。而且搜索会导致编译锁定,最终影响性能。比如select * from dbo.TestTable比select * from TestTable要好。from TestTable会在当前Schema下搜索,如果没有,再去dbo下面搜索,影响性能。而且如果你的表是csdn.TestTable的话,那么select * from TestTable会直接报找不到表的错误。所以写上具体的Schema也是一个好习惯。
3.自定义存储过程不要以sp_开头
因为以sp_开头的存储过程默认为系统存储过程,所以首先会去master库中找,然后在当前数据库找。建议使用USP_或者其他标识开头。
4.使用sp_executesql替代exec
原因在Inside Microsoft SQL Server 2005 T-SQL Programming书中的第四章Dynamic SQL里面有具体描述。这里只是简单说明一下:sp_executesql可以使用参数化,从而可以重用执行计划。ex ......
(
8)
SELECT
(
9)
DISTINCT
(
11)
<
TOP_specification>
<
select_list>
(
1)
from
<
left_table>
(
3)
<
join_type>
JOIN
<
right_table>
(
2)
ON
<
join_codition>
(
4)
WHERE
<
where_condition>
(
5)
GROUP
BY
<
group_by_list>
(
6)
WITH
{
CUBE
|
ROLLUP}
(
7)
HAVING
<
having_condition>
(
10) ORDER
BY
<
order_by_list>
熟悉
SQL
的人应该一眼就能看出来上面语句的作用,基本包括了我们一般查询表的写法,
SQL
不同于其他编程语言最明显的特征就是他的代码顺训。在大多数语言中,代码按编码的顺序被处理,但在
SQL
语言中,第一个被处理的子句是
from
子句,尽管
SELECT
语句第一个出现,但几乎总是最后处理。
其实从逻辑上来说,每个步骤都会产生一个虚拟表,该虚拟表用作下一个步骤的输入(上面的标记代表执行步骤
的顺序)。
......
导入
如果表已存在,SQL语句为:
insert into aa select * from OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0',
'Data Source=D:\OutData.xls;Extended Properties=Excel 8.0')...[sheet1$]
其中,aa是表名,D:\OutData.xls是excel的全路径 sheet1后必须加上$
如果表不存在,SQL语句为:
SELECT * INTO aa from OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0',
'Data Source=D:\OutData.xls;Extended Properties=Excel 8.0')...[sheet1$]
其中,aa是表名,D:\OutData.xls是excel的全路径 sheet1后必须加上$
可能会发生的异常:
如果发生“链接服务器 "(null)" 的 OLE DB 访问接口 "Microsoft.Jet.OLEDB.4.0" 报错。提供程序未给出有关错误的任何信息。
无法初始化链接服务器 "(null)" 的 OLE DB 访问接口 "Microsoft.Jet.OLEDB.4.0" 的数据源对象。”异常可能是excel文件未关闭.
如果发生“不能将值 NULL 插入列 'Grade',表 'student.dbo.StuGrade';列不允许有空值。INSERT 失败。
语句已终止。”异常,则可能是excel文件与数据库表中的字段不匹配
以上操作的是office 2003,如果要操作office 2007则需采用如下方式
如果表已存在,SQL语句为: ......