--数据库高级子句二
--Select...into Index Auto-increment view Data NULL
---------------------------------------------------------
--select into
--select into用于从一个表中选取数据然后放入另一个表中,常用来备份表数据
--另一张表是复制时创建的,必须为不存在的表
use TSqlDemo
select * into StudentBck from Student--将Student表中的数据放入StudentBck表中
--我们也可以有选择性的备份数据,只需将*换为我们要备份的列的名称即可
select Name,Age into StudentName from Student --我们备份的表中只有2列
--我们也可以为备份数据加一下儿条件
select Name ,Age into StudentAge from Student where Age>20
--当然也可以从2个表中备份数据
select Student.Name,Score.Math into StudentScore from Score inner join Student on Student.Num=Score.SNum
--在StudentScore表中就会有2列,学生的名称和成绩
-----------------------------------------------------------
--Index
--Index创建索引,索引是为了方便我们查询的效率,用户不会看到
create index num on Student (Num)
--如果希望以降序排列,可以再列的名称之后加desc
create index num on Student (Num desc)
--如果希望在2列上同时创建索引,可以在括号内加入列,用‘,’隔开即可
create index num on Student (Num,Id)
--同样我们也可以用drop来删除索引
drop index num on Student
--当数据的查询量比较大的时候,我们需要建立一个索引,方便数据库执行时的效率
--在小的数据面前是不需要建立索引的
------------------------------------------------------------
--Auto-increment
--Auto-increment用来为列设置自动增长值,我们在插入数据的时候,有时希望生成一个标志列
--自动增长,方便数据库存储数据,以及我们之后的操作
create table persons
(
p_id int primary key identity,
lastname varchar(255) not null,
firstname varchar(255),
address varchar(255),
city varchar(255)
)
--我们创建一张表为他的PID列创建自动增长,这样我们在插入数据的时候就不用插入这一列的值
--会默认为我们添加一个值,这个值是从1开始自动增长的,如果我们删除一条数据,这个自动增长的索引不会删除
--在下一次插入数据的时候,还是会加1
-------------------------------------------------------------
--view
--view视图,视图是基于查询结果集的可视化的表,我们创建一个视图之后,可以很直观方便的读取数据
--视图中的字段来自于我们查询出的结果集,也就是一个或多个表,我们可以将视图作为一张单独的表
--对它进行操作,任何的子句都不会影响到原来的数据
create view stuview as
select Student.Name,Score.Math from Score inner join Student on Student.Num=Score.SNum
--创建视图时在视图名称之后加一个as,as后是我们的查询语句
--可以这么理解,创建作为select...Score.SNum结果集的视图stuview
select * from stuview--接下来我们可以直接查询这个视图
--我们还可以再对这个视图进行操作
select * from stuview where Math>80
--当视图不满足我们的需求时,我们可以修改视图
alter view stuview as
select Student.Name,Score.Math from Score inner join Student on Student.Num=Score.SNum where Score.Math>80
--同样也可以删除视图
drop view stuview
--------------------------------------------------------------
--data
--当我们在数据库中存储时间时,时间的格式往往是最麻烦的问题,数据库为我们提供了几种生成时间的函数
--getdata:返回当前的时间,我们可以通过为列指定默认值,当我们没插入一行数据的时候,会在时间列自动生成时间
select GETDATE() as NowTime --2011-09-09 11:01:01.427
--datepart(datepart,date),用于返回时间的单独部分,datepart指定返回时间的那部分,date是指从那里返回
select DATEPART(q,getdate())
--年 yy, yyyy
--季度 qq, q
--月 mm, m
--年中的日 dy, y 指这是一年中的第几天
--日 dd, d
--周 wk, ww
--星期 dw, w
--小时 hh
--分钟 mi, n
--秒 ss, s
--毫秒 ms
--微妙 mcs
--纳秒 ns
--dateadd(),用来对日期进行加减
--dateadd(datepart,number,date),datepart是指你希望在哪个数据上进行加减,number是指加减的数目,可以为正也可以为负,
select dateadd(d,1,getdate())
--datediff(),计算2个日期之间的差值
select datediff(d,getdate(), dateadd(d,5,getdate()))
--convert(),转换日期的格式为指定的格式,有时我们得到的日期格式并不是我们需要的格式,这时我们可以转换为我们需要的格式
--convert(length,date,style),lenght表示数据的长度,date需要转换的数据,style转换的格式
--Style ID Style 格式
--100\0 mon dd yyyy hh:miAM (或者 PM)
--101 mm/dd/yy
--102 yy.mm.dd
--103 dd/mm/yy
--104 dd.mm.yy
--105 dd-mm-yy
--106 dd mon yy
--107 Mon dd, yy
--108 hh:mm:ss
--109\9 mon dd yyyy hh:mi:ss:mmmAM(或者 PM)
--110 mm-dd-yy
--111 yy/mm/dd
--112 yymmdd
--113\13 dd mon yyyy hh:mm:ss:mmm(24h)
--114 hh:mi:ss:mmm(24h)
--120\20 yyyy-mm-dd hh:mi:ss(24h)
--121\21 yyyy-mm-dd hh:mi:ss.mmm(24h)
--126 yyyy-mm-ddThh:mm:ss.mmm(没有空格)
--130 dd mon yyyy hh:mi:ss:mmmAM
--131 dd/mm/yy hh:mi:ss:mmmAM
select convert(char(20),GETDATE(),102)
---------------------------------------------------------
--Null空值 not null 非空值,
--我们在查询数据的时候,通常会遇到数据库中的列存在空值
--比如学生没有考试,则成绩为null,我们想要获得没有考试的学生就必须对空值进行操作
select * from Score where Math=null--这是不对的,我们不能对null进行=,可以这么写
select * from Score where Math is not null--我们用is 和is Not来比较是否为空
--sql server还为我们提供了一个函数,来为空值做运算
--isnull(colname,data),colname代表列的名称,data代表要显示的数据,这个函数可以这么理解
--如果这个值为空,那么我们用data这个值来代替
select *,ISNULL(Math,4) from Score--所有为空的Math均为4了就
----------------------------------------------------------
--下面介绍一下sql server中所有的数据类型
--Character 字符串:
--数据类型 描述
--char(n) 固定长度的字符串。最多 8,000 个字符。
--varchar(n) 可变长度的字符串。最多 8,000 个字符。
--varchar(max) 可变长度的字符串。最多 1,073,741,824 个字符。
--text 可变长度的字符串。最多 2GB 字符数据。
--Unicode 字符串:
--数据类型 描述
--nchar(n) 固定长度的 Unicode 数据。最多 4,000 个字符。
--nvarchar(n) 可变长度的 Unicode 数据。最多 4,000 个字符。
--nvarchar(max) 可变长度的 Unicode 数据。最多 536,870,912 个字符。
--ntext 可变长度的 Unicode 数据。最多 2GB 字符数据。
--Binary 类型:
--数据类型 描述
--bit 允许 0、1 或 NULL
--binary(n) 固定长度的二进制数据。最多 8,000 字节。
--varbinary(n) 可变长度的二进制数据。最多 8,000 字节。
--varbinary(max) 可变长度的二进制数据。最多 2GB 字节。
--image 可变长度的二进制数据。最多 2GB。
--Number 类型:
--数据类型 描述
--tinyint 允许从 0 到 255 的所有数字。 1 字节
--smallint 允许从 -32,768 到 32,767 的所有数字。 2 字节
--int 允许从 -2,147,483,648 到 2,147,483,647 的所有数字。 4 字节
--bigint 允许介于 -9,223,372,036,854,775,808 和 9,223,372,036,854,775,807 之间的所有数字。 8 字节
--decimal(p,s) 固定精度和比例的数字。允许从 -10^38 +1 到 10^38 -1 之间的数字。
--p 参数指示可以存储的最大位数(小数点左侧和右侧)。p 必须是 1 到 38 之间的值。默认是 18。
--s 参数指示小数点右侧存储的最大位数。s 必须是 0 到 p 之间的值。默认是 0。-- 5-17 字节
--numeric(p,s) 固定精度和比例的数字。允许从 -10^38 +1 到 10^38 -1 之间的数字。
--p 参数指示可以存储的最大位数(小数点左侧和右侧)。p 必须是 1 到 38 之间的值。默认是 18。
--s 参数指示小数点右侧存储的最大位数。s 必须是 0 到 p 之间的值。默认是 0。
--smallmoney 介于 -214,748.3648 和 214,748.3647 之间的货币数据。 4 字节
--money 介于 -922,337,203,685,477.5808 和 922,337,203,685,477.5807 之间的货币数据。 8 字节
--float(n) 从 -1.79E + 308 到 1.79E + 308 的浮动精度数字数据。参数 n 指示该字段保存 4 字节还是 8 字节。float(24) 保存 4 字节,而 float(53) 保存 8 字节。n 的默认值是 53。 4 或 8 字节
--real 从 -3.40E + 38 到 3.40E + 38 的浮动精度数字数据。 4 字节
--Date 类型:
--数据类型 描述
--datetime 从 1753 年 1 月 1 日 到 9999 年 12 月 31 日,精度为 3.33 毫秒。 8 bytes
--datetime2 从 1753 年 1 月 1 日 到 9999 年 12 月 31 日,精度为 100 纳秒。 6-8 bytes
--smalldatetime 从 1900 年 1 月 1 日 到 2079 年 6 月 6 日,精度为 1 分钟。 4 bytes
--date 仅存储日期。 从 0001 年 1 月 1 日 到 9999 年 12 月 31 日。 3 bytes
--time 仅存储时间。 精度为 100 纳秒。 3-5 bytes
--timestamp 存储唯一的数字,每当创建或修改某行时,该数字会更新。
------------------------------------------------------------------
--今天的内容就到这里了,下回看一下数据库中的函数
转载于:https://www.cnblogs.com/yinzihui/archive/2011/09/09/2172433.html