鹰翔宇空

学习和生活

BlogJava 首页 新随笔 联系 聚合 管理
  110 Posts :: 141 Stories :: 315 Comments :: 1 Trackbacks
[ 作者:陈苏文    转贴自:http://www.chinaunix.net    点击数:9525    文章录入:sdccf
下面通过实例来对Select的通常用法加以介绍。
例1:选择所有的列,语法为select * from table_list
如:select * from publishers
例2:选择指定的列,语法为
select column_name[,column_name]…
from table_name
如:select pub_id,pub_name from publishers
例3:重命名查询结果中的列,语法为
select column_heading= column_name
from table_name
如:select Publisher=pub_name,pub_id
from publishers
例4:select列表中的计算值,可以对select列表中的数值数据进行计算,下面列出了算术运算符。

符号运算
+加
-减
/除
*乘
%取模
如select title_id,total_sales,total_sales*2 from titles
例5:使用distinct消除重复的查询结果
可选的关键词消除select语句的结果中的重复行。若不指定distinct,缺省值为all,将检索出包含重复行的所有行数据。
如:select distinct au_id from titleauthor
例6:选择行——where语句
select语句中的确切指定要检索哪些行的准则,其一般格式为:
select select_list from table_list where search_conditions
where子句中的搜索条件(或称限制)包括:
·比较运算符(=,<,>,!=等=
如:where advance*2>total_sales*price
·范围(between和not between)
如:where total_sales between 5000 and 10000
·列表(in和not in)
如:where state in(“CA”,”IN”,”MD”)
·匹配字符(like和not like)
如:where phone like “0535%”
·未知值(is null和is not null)
如:where advance is null
·以上各项的组合(and, or)
如:where advance<5000 or total_sales between 500 and 1000
例7:用集合函数小结查询结果
集合函数用特定列的数据来计算小结值。
集合函数结 果
Sum([all|distinct]expression)数值列中(不重复)值的总和
Avg([all|distinct]expression)数值列中(不重复)值的平均
count([all|distinct]expression)列中(不重复)非空值的数目
Count(*)选定的行数
Max(expression)Expression的最大值
Min(expression)Expression的最小值
如:select avg(advance),sum(total_sales)
from titles
where type=”as”
select count(*) from titles
select avg(distinct price) from titles
select max(price) from books
例8:分组组织查询结果——group by 子句
group by 子句用在select语句中将一张表分成若干组。
如:select type, advance from titles group by type
例9:选择分组数据——having子句
having为group by 子句设置条件,与where为select语句设置条件一样。Having搜索条件与where相同,但having可包括集合函数,而where不能包括。
下列语句使用带集合函数having子句的例子。它把title表中的行按类型分组,但去掉了那只包含一本书的分组。
Select type from titles group by type having count(*)>1
下面是一个不带集合函数的having子句的例子。它把title表中的行按类型分组,但去掉了那些不以字母“p”开头的类型。
Select type from titles group by type having type like “p%”
例10:查询结果排序——order by子句
Order by子句允许按一列或多列对查询结果排序。每个排序可以是升序的(asc)或降序的(desc)。若不特别指明,则按升序进行。下列查询返回按pub_id排序的结果:
Select pub_id,type,title_id from titles order by pub_id
例11:连接——从多张表中检索数据
连接两张或两张以上的表是这样一个过程:比较指定字段中的数据,根据比较结果用符合条件的行组成一张新表。
举例:
select publishers.pub_id,publishers.pub_name,authors.*
from publishers,authors
where publishers.city=authors.city
例12:分组计算子句
Compute是Sybase对SQL标准中Group子句的扩充,可以将其看作带聚集计算的Group子句。例如:
Select type,price,advance
From titles
Order by type
Compute sum(price),sum(advance) by type
2.Insert语句
用Insert命令向数据库中添加行有两种方法:使用关键词values或使用select语句。
Insert语句的基本语法为:
Insert[into]表名[(字段列表)]
{values(值列表)|select_statement}
举例:insert into publishers
values(‘1622’,’Jardin,Inc.’,’Camden’,’NJ’)
Insert into publishers(pub_id,pub_name)
values(‘1756’,’The Health Center’)
Insert authors select * from newauthors
Insert authors(au_id,address,au_lname,au_fname)
Select * from newauthors
3.Delect语句
Delect可以对一行或多行进行操作。
Delect语句的基本语法为:
Delect 表名
[from 表名列表]
[where条件表达式]
举例:Delect publishers
where pub_name=”Jardin,Inc.”
Delect titles
From authors, titles
Where titles.title_id=authors.title_id
4.Update语句
可以使用Update命令来改动表中的单个行、一组行或所有行。
Update语句的基本语法为:
Update表名
Set column_name1={expression1|null|(select_statement)}
[,column_name2={expression2|null|(select_statement)}]
[……]
[from 表名列表]
[where 条件表达式]
举例:
update authors set_au_lname=”Health”,aufname=”Goodbody”
where au_lname=”Bloth”
update titles
set total_sales=total_sales + qty
from titles,sales
where titles.title_id=sales.title_id
六、Sybase预定义函数
1.聚集函数
sum([all|distinct]表达式)
avg([all|distinct]表达式)
count([all|distinct]表达式)
count(*)
max(表达式)
min(表达式)
2.字符串函数
upper(字符表达式)
lower(字符表达式)
char(整型表达式)
char_length(字符表达式)
ltrim(字符表达式)
rtrim(字符表达式)
……
3.数学函数
abs(精确小数型表达式)
floor(精确小数型表达式)求小于或等于给定表达式值的最大整数(取底)
rand([整数型]
round(精确小数型表达式,整数)
sign(精确小数型表达式)
power(精确小数型表达式,整数幂)
……
4.日期函数
getdate()
datepart(日期部分,日期)
datediff(日期部分,日期1,日期2)
dateadd(日期部分,数值表达式,日期)
5.类型转换函数
convert(数据类型,表达式[,格式])
6.系统函数
db_name([数据库ID])
host_name()
isnull(表达式1,表达式2)
……
七、数据控制语言
用来控制数据的安全性,如权限控制语句GRANT和REVOKE等。


第七讲 数据库编程基础

一、批处理
SQL Server可以处理作为一批而提交的多个SQL语句,既可以是交互式的,也可以是一个文件。批处理SQL语句由批结束标志终止,该标志指示SQL Server从前面开始执行该批处理语句,对于独立的SQL实用程序isql而言,其批结束标志为单独占一行的“go”。
举例:选择表title及表authors的行数
select count(*) from titles
select count(*) from authors
go
二、流程控制语言
1.变量声明与赋值
全局变量由系统预定义,以符号@@打头。
局部变量声明使用Declare语句,这个变量必须以符号@开头,后跟一个标识符。
Declare @变量名 数据类型[,@变量名 数据类型,……]
变量赋值使用Select语句,未赋值的变量其值为Null。
举例:
Declare @msg char(50)
Select @msg=’How are you?’
Select @msg=emp_name from employee
Where emp_id=12345678
2.SQL语句块
Begin
Statement Block/*多个顺序执行的SQL 语句*/
End
3.条件语句
If 条件表达式
语句(块)
Else
语句(块)
举例:
if(select max(id) from sysobjects)<50
print ‘数据库里没有用户创建的对象‘
else
select name,type,id from sysobjects where id>50
4.循环语句
While 条件表达式
语句(块)
●两个特殊的循环控制语句:
Continue 执行下一次循环
Break 退出当前循环
举例:
While(select avg(price) from titles)>$20
Begin
Update titles set price=price/2
If(select avg(price) from titles)<$40
Break
Else
Continue
End
5.其它控制语句
◇Return语句——无条件结束当前过程,并可返回给调用者的一个状态值:Return[整数表达式]
◇Print语句
◇RaiseError语句
◇Waitfor语句
三、存储过程
存储过程是存储在服务器端的一类数据库对象,它实质上是一段用SQL语言编写的程序,它在服务器端预先经过编译,并确定出执行计划,因此与同样功能的批处理语句相比,它的执行速度较快。
基本语法:
Create Procedure[owner.]过程名
[@参数名 数据类型[=默认值][Output]]
[,@参数名 数据类型[=默认值][Output]]
[……]
AS
Begin
SQL语句(块)
End
存储过程是数据库对象,和表、索引是一个级别的;是SQL语句和控制流语言的集合,存储过程在首次运行时被编译,并驻留在过程高速缓存的内存中,所以存储过程的招待非常快。存储过程可以带参数,可以调用其他过程,返回状态值,返回参数值,并且可以在远程SQL Server执行。可以在远程SQL Server执行对数据库设计有特别重要的意义。SQL Server提供的存储过程称为系统过程。
存储过程大大增强了SQL的能力、效率和灵活性,经过编译的存储过程极大地改善SQL语句和批处理的性能。
存储过程有很多优点:
●存储过程在第一次执行时编译,并存储在过程高速缓存的内存中。编译时系统对其进行优化,以选择最佳的路径来访问数据集中的数据,这种优化考虑了数据集的实际数据结构。因此存储过程大大提高了系统的性能。
●存储过程可以跨服务器运行。这一点是通过触发器来实现的,当然,首先存储过程要能登录到该远程服务器。
●应用程序也能执行存储过程,从而实现服务器和客户之间的协同作业。
●存储过程减少了网络的交通。这是因为存储过程的文本存储在数据库里,调用存储过程时通过网络的只是存储过程的过程名。
●利用存储过程可以提供一个附加的安全层。
如(该例子取自pubs2数据库):
Create proc titleid_proc(@title_id varchar(80))
As
Begin
Select @title_id=lower(@title_id)+”%”
Select title,title_id,price
Form titles
Where lower(title_id) like @title_id
Return @@rowcount
End
注意例子中的黑体部分,这实际上是一条赋值语句。该存储过程有返回值。
存储过程可以变得非常复杂。我们认为,创建存储过程还是要遵循“最简单就是最好”的原则。建议在创建存储过程时采用缩进风格,否则创建的存储过程三天之后连自己都看不懂。
需要对存储过程作些说明:
●Create procedure 语句不能和其他语句在同一个批命令里。
●Create procedure 语句不能包括下列语句:
use
Create View
Create default
Create rule
Create trigger
Create procedure
不能使用use语句好理解,存储过程是针对数据库的,不能在一个数据库里访问另外的数据库。如果在存储过程里访问另外的数据库,则数据库表的参照完整性难于得到保障。
从另外几条语句看,在存储过程里一般不能创建新的数据库对象。但可以创建表和索引,以及和表相关联的键,表是临时表,在存储过程结束后不能看见创建的临时表;否则的话每运行一次存储过程就创建一个表,结果可想而知。
存储过程里不能创建一个对象,删除它;然后又在同一存储过程里用相同的名字创建新的对象。实际上,SQL Server在存储过程运行时而不是在编译时创建对象的。
●如果存储过程调用另外的存储过程,则第二个存储过程可以调用在第一个存储过程里创建的对象。
●存储过程包含的最多参数为255个,对存储过程里的局部和全局变量没有限制。
最后讨论一下系统存储过程。系统存储过程以sp_开头,当然用户创建的存储过程也可以以sp_开头;?/span>
posted on 2006-06-07 09:21 TrampEagle 阅读(893) 评论(0)  编辑  收藏 所属分类: datebase

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


网站导航: