SQL 2000基础学习(自己总结)

以下为本人这几天重新学习SQLSERVER2000的学习笔记,目的是重新认识及巩固知识点:

 

一、简单的SELECT语句的语法如下:

SELECT |ALL|DISTINCT| <目标表达式>|,<目标表达式>|...

FROM<表或视图名>|,<表或视图名>|

[WHERE<条件表达式>]

[GROUP BY <列名1>|HAVING<条件表达式>|]

[ORDER BY <列名2>|ASC|DESC|]

 

整个SELECT语名的含义是:根据WHERE子句的条件表达式,从FROM子句指定的基本表或视图中找出满

足条件的元素组,再按SELECT子句中的目标表达式选出元素组中的属性值形成结果表。如果有GROUP

子句,则将结果按<列名1>的值进行分组。该属性列值相等的元素组成一个组,每个组产生结果表中的

一条记录,如果GROUP子句带有HAVING短语,则只有满足指定条件的组才予以输出。如有ORDER 子

句,则结果表还要按<列2>的值升序或降序排序。

 

DATETIME数据类型用于存储日期与时间的结合体。范围是:1753年1月1日0时--9999年12月31日23点

59分59秒;占8个字节

前4个字节用于存1900年1月1日前或后的天数,数值分正负,正表示后。

后4个字节用于存12:00:000AM所经过的毫秒数。

 

二、局部变量的使用:

局部变量是自己可定义的变量,他的作用范围仅在程序内部。局部变量必须以@开头,而且必须以

DECLARE命令说明后才能使用。其具体形式如下:DECLARE @变量名 变量类型 [,变量名 变量类型]

另:必须用SELECT 或SET 对其进行赋值。

 

三、符号的使用:(备查)

1、注释符:--;

2、运算符:除法:/;取余:%;

 

四、流程控制:(理解很重要)Transact SQL语句

1、IF...ELSE;

IF<条件表达式>

<命令行或程序块>

[ELSE[条件表达式]

<命令行或程序块>]

说明:ELSE可选择;可以嵌套;如果不使用语句块,则只能使用一条语句。

2、BEGIN...END
BEGIN
<命令行或程序块>
END
说明:可嵌套。

3、CASE
CASE 命令有两种格式,如:
第一种:
CASE<运算式>
WHEN<运算式>THEN<运算式>
...
WHEN<运算式>THEN<运算式>
[ELSE<运算式>]
END

第二种:
CASE
WHEN<条件表达式>THEN<运算式>
...
WHEN<条件表达式>THEN<运算式>
[ELSE<运算式>]
END
说明:CASE命令可以嵌在SQL命令中。执行CASE子句时,只运行第一个匹配的子句.

举例:如调整各年级学生学费:年级为“1”的下调10%,年级为“2”的下调20%,年级为“3”的下调

30%,其它下调:40%
代码:
Use student
update table2009
set wage=
case
when nj='1' then wage*0.9
when nj='2' then wage*0.8
when nj='3' then wage*0.7
else wage*0.6
end

4、WHILE...CONTINUE...BREAK
其语法如下:
WHILE<条件表达式>
BEGIN
<命令行或程序块>
[BREAK]
[CONTINUE]
[命令行或程序块]
END
说明:WHILE命令在设定的条件成立时会重复执行命令行或程序块。CONTINUE命令可以让程序跳过

CONTINUE命令之后的语句,回到WHILE循环的第一行命令。BREAK命令则让程序完全跳出循环,结束

WHILE命令的执行。WHILE语句也可以嵌套.
如:
declare @x int,@y int,@c int
select @x=1,@y=1
while@x<3
begin----第一个语句块开始
print @x
while @y<3
begin----第二个语句块开始
select @c=100*@x+@y
print @c
select @y=@y+1
end---- 第二个语句块结束
select @x=@x+1
select @y=1
end---- 第一个语句块结束

 五、字符串函数
将字符串全部转换为小写:
LOWER( )

将字符串全部转换为大写;
UPPER(  )

把数值型数据转换为字符型数据
STR(  )

去头部空格函数LTRIM()
去尾部空格函数RTRIM ( )

取子串函数:LEFT(<character_expression>,<integer_expression>)
LEFT()函数返回的子串是从字符串最左边起到第integer_expression个字符的部分,如

integer_expression为负值,则返回NULL值。
RIGHT(character_expression>,<integer_expression>)
RIGHT()函数返回的子串是从字符串最右边起到第integer_expression个字符的部分,如

integer_expression为负值,则返回NULL值。
SUBSTRING(<expression>,<starting_position>,length) 用于返回部分字符串,从字符串左边第

starting_position个字符起length个字符的部分。不能用于TEXT与IMAGE数据类型。
CHARINDEX(<substring_expression>,<expression>)其中substring_expression是所要查找的字符表

达式,expression可为字符串也可为列名表达式。如没有发现子串,则返回0值。
PATINDEX(<'%substring_expression%'>,<column_name>)函数返回字符串中某个指定的子串出现

的开始位置。其中子串表达式前后必须有百分号%,否则返回值为0。
如:
select patindex('%123%','abc123'),patindex('123','abc123')
运行结果如下:
--------------------------------
4                           0
与CHARINDEX函数不同的是,PATINDEX()函数的子串中可以使用通配符。

QUOTENAME(<''>[,quote_character])函数返回被特定字符括起来的字符串
其中quote_character标明括字符串所用的字符,如"  '  "、"("、"["等,缺省值为"[]"
如例:select quotename('abc','{'},quotename('abc')

replace(<string_expression1>,<string_expression2>,<string_expression3>)函数用string_expression3

替换在string_expression1中的子串string_expression2。
如:select replace('abc123g','123','def')
结果如下:-------------------
                    abcdefg

六、查询语句:
1、在查询结果中添加列:
如:select p_id,p_name,quantity,cost,cost*quantity as sum_cost
from products
运行结果如下:

p_id                p_name     quantity      cost                       sumcost
10030001      路由器           1000            200.0000          200000.0000
10030002      网卡                100               20.00                    2000.0000
......
2、查询结果分组
当用户要对结果进行分组时,就需要在SELECT 语句中加入GROUP BY 子句
一般的情况我就不写了,写一些不常的的:
1)、加WITH{CUBE|ROLLUP}使用这两个选项可以格外返回按组统计的数据行。与CUBE不同的是,ROLLUP选项只返回最高层的分组列(即,第一个分组列

)的统计数据。
注:在SELECT 语句中WHERE、GROUP BY、HAVING子句和统计函数的执行次序如下:
WHERE子句从数据源中去掉不符合其条件的数据行;GROUP BY子句搜集数据行到各个组中;统计函数为各个组计算统计值;HAVING子句去掉不符合其

搜索条件的各组数据行。

10月30日更新:

3、循环语句  用于使某一条或若干条语句反复执行。它在T-SQL中主要由WHILE语句来实现。语法如下:
WHILE Boolean_expression
{sql_statement|statement_block}
[BREAK]
{sql_statement|statement_block}
[CONTINUE]
WHILE的意思是,如果表达式Boolean_expression为真,则重复执行下面的语句{sql_statement|statement_block},如果遇到BREAK语句,则跳出循环

,如果遇到CONTINUE语句,则不执行CONTINUE后面的语句,直接返回到WHILE处执行。
如:
declare @a int
set @a=5
while @a>0
begin
set @a=@a-1
print 'a is'+str(@a)
end

结果如下:
---------------------
a is         4
a is         3
a is         2
a is         1
a is         0
由结果可知,这个循环运行了5次,直到变量a变为0后不满足循环条件而跳出。
如果要使用BREAK语句,如下:

declare @a int
set @a=5
while @a>0
begin
set @a=@a-1
print 'a is'+str(@a)
IF(@a=2)BREAK
end

结果如下:
-----------------
a is         4
a is         3
a is         2

可以看到,在变量a变为2时,由条件语句判断后,跳出该循环。
为了说明CONTINUE语句的用法,将上面的语句变更如下:
declare @a int
set @a=5
while @a>0
begin
set @a=@a-1
print 'a is'+str(@a)
CONTINUE
IF(@a=2)BREAK
end
结果如下:
---------------------
a is         4
a is         3
a is         2
a is         1
a is         0

---------------------12月13日
 

日期处理实例:1、生日处理:

一般计算年龄都是直接有当前年份减去出生日期的年份,这样得到的年龄不准确,如1978年12月10日出生的,当前日期是2009年5月1日,这样计算的年龄是31岁,但这样不准确,因为还没有满。这个人只有30岁。

要计算准确的年龄可以这样考虑:将出生日期与当前日期与的月日相比较,如果是大于则年龄减一,否则是直接减。但这样忽略了一下问题,如果是闰年2月29日出生的人,平年的生日是2月28日。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值