数据库总结[之一](SQLServer)

1.数据类型:

1)charvarchartextncharnvarcharntext

char:是定长字符数据,速度快。对于像身份证号码、邮政编码等为固定长度的数据,使用char类型比较合适。 (长度可为18000)

varchar:是变长字符数据,节省储存空间,但是存取速度慢。(长度可为18000)

所谓定长就是长度固定的,当输入的数据长度没有达到指定的长度时将自动以英文空格在其后面填充,使长度达到相应的长度;而变长字符数据则不会以空格填充。

text:存储可变长度的非Unicode数据,最大长度为2^31-1(2,147,483,647)个字符。当一个字段中存储字符超过8000个时,可以选择text类型。

后面三种数据类型和前面的相比,从名称上看只是多了个字母"n",它表示存储的是Unicode数据类型的字符。写过程序的朋友对Unicode应该很了解。字符中,英文字符只需要一个字节存储就足够了,但汉字众多,需要两个字节存储,英文与汉字同时存在时容易造成混乱,Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表示。ncharnvarchar的长度是在14000之间。和charvarchar比较:ncharnvarchar则最多存储4000个字符,不论是英文还是汉字;而charvarchar最多能存储8000个英文,4000个汉字。可以看出使用ncharnvarchar数据类型时不用担心输入的字符是英文还是汉字,较为方便,但在存储英文时数量上有些损失。

2)datetimesmalldatetime

datetime:从175311日到99991231日的日期和时间数据,精确到百分之三秒。

smalldatetime:从190011日到207966日的日期和时间数据,精确到分钟。

3)bitintintsmallinttinyintbit

bigint:从-2^63(-9223372036854775808)2^63-1(9223372036854775807)的整型数据。

int:从-2^31(-2,147,483,648)2^31-1(2,147,483,647)的整型数据。

smallint:从-2^15(-32,768)2^15-1(32,767)的整数数据。

tinyint:从0255的整数数据。

bit10的整数数据。

4) moneysmallmoneydecimalnumeric

货币数据类型包括moneysmallmoney两类。用于存储货币类型数据,当字段要存放工资、价格等数据时,可以采用货币数据类型。由于货币数据类型的小数位数固定为4,因此若所使用的货币数据值的小数位超过4位,请改用numericdecimal数据类型。

money:能存放-263263-1的货币数据,长度为8字节。

smallmoney:能存放-231231-1的货币数据,长度为4字节。

decimalnumeric这两种数据类型是等效的。都有两个参数:p(精度)和s(小数位数)。p指定小数点左边和右边可以存储的十进制数字的最大个数,p必须是从 138之间的值。s指定小数点右边可以存储的十进制数字的最大个数,s必须是从0p之间的值,默认小数位数是0。  

5)floatreal

float:从-1.79^3081.79^308之间的浮点数字数据。

real:从-3.40^383.40^38之间的浮点数字数据。在SQL Server中,real的同义词为float(24)

6binaryvarbinaryimage

当存储图片、声音等二进制数据时,可选用二进制数据类型。这三种都可以存诸二进制类型。

定长二进制型binary(n):用于存储固定长度的n个字节的二进制数据,n的取值范围为18000

变长二进制型varbinary(n):用于存储可变长度的二进制数据,n的取值范围为18000

大二进制型image(n):如果字段要存储超过8000字节且为可变长度的二进制数据,应采用image数据类型。适合存放在image类型字段的数据为图片文件、OLE对象等,其最大长度为2147483647个字节。

7)自定义数据类型:

增加数据类型:exec sp_addtype birthday,datetime, 'not null'

exec sp_addtype city,'varchar(30)','not null'

删除数据类型:exec sp_droptype birthday

exec sp_droptype city

2.运算符:

= 等于 > 大于

  < 小于 >= 大于等于

  <= 小于等于 <> 不等于

3.创建数据库:create database anmei

使用数据库:use anmei

4.创建表格:

create table mytable(

mid int,

mname varchar(20),

mage int,

msex char(2))

限制条件:

unique这一限制条件要求某一列中不能存在两个值相同的记录,所有记录的值都必须是唯一的 。

not null用来规定表格中某一列的值不能为空。

identity(1,1)自增长,从1开始,每增加一行,自动增加1

primary key则为表格中的所有记录规定了唯一的标识符(主键)

create table mytable(

mid int identity(1,1) primary key,

mname varchar(20) unique not null,

mage int not null,

msex char(2) not null)

两个主键的情况:

create table mytabletwo(

mid int identity(1,1) ,

mname varchar(20) unique not null,

mage int not null,

msex char(2) not null

primary key(mid,mname))

增加表中的列:alter table mytable add mclass varchar(10) null

值允许为空

删除表中的列:alter table mytable drop column mclass

修改数据类型:alter table mytable alter column mclass varchar(100)

修改表名:(此方法还可用于修改视图,存诸过程,触发器等)

sp_rename 'mytable','mytabletwo'

5.数据库常用操作:(增、删、改、查)

添加数据:insert into mytable values('AAA',10,'')

修改数据:update mytable set mname='BBB' where mid=1 (不能同时修改多行)

查找数据:select * from mytable

删除数据:delete from mytable where mid=1

删除表:drop table mytable

6.默认当前时间:

create table mytable(

mid int identity(1,1) primary key,

mname varchar(20) unique not null,

mage int not null ,

mdate datetime default(getDate()),

msex char(2) not null)

insert into mytable values('AAA',10,default,'')

结果为:

1 AAA 10 2009-05-02 23:58:16.167

7insert...select...把另一个表的查找结果插入到当前表中(两表列名相同)

insert into mytabletwo select * from mytable where msex=''

8.删除表或表中内容的几种方式:

使用truncate table语句会删除表中所有行,但表的结构及其列、约束、索引等保持不变,而新行标识所用的计数值重置为该列的初始值。如果想保留标识计数值,则要使用delete语句。如果想删除表结构和表中所有记录,并释放该表所占的存储空间,可以使用drop table语句。

truncate table mytabletwo

delete from mytabletwo

9top子句:

在查询表中数据时,用户可以根据需要限制返回的行数。方法是在select语句的字段列表前面使用top n子句,则查询结果中只显示表中前n条记录;如果在字段列表前使用top n percent子句,则查询结果中只显示前n%条记录。

select top 3 * from mytable

select top 5 percent * from mytable

10distinct子句:消除重复行

对表只选择部分列查询时,可能会出现重复行。如果要消除结果集中的重复行,可以在字段列表前面加上distinct关键字。

select distinct msex from mytable

11.使用列别名:

1select 列别名=原列名 from 数据源

select author=mname from mytable

select author=mname,age=mage from mytable

2select 原列名 as 列别名 from 数据源 (as可省略)

select mname as author from mytable

select mname as author,mage as age from mytable

12.使用计算列:

在结果中可以输出对列值计算后的值,即结果集中的列不是表中现成的列,而是由表中的一个或多个列计算出来的。因为结果集中由计算得到的列是没有列名的,所以可以使用列别名,以增加结果结果集的可读性。

1select mage+10 as '10年后年龄' from mytable

2select mage+10 as addage from mytable

13where子句:

1)比较运算符:>>==<<=<>!=!>!<

select * from mytable where mid <>5

select * from mytable where mid !=5

select * from mytable where mid >5

select * from mytable where mid <5

select * from mytable where mid <=5

select * from mytable where mid !<5

2)范围运算符:between...and; not between...and;

select * from mytable where mid between 3 and 5 (mid35之间的)

select * from mytable where mid not between 3 and 5 (mid不在35之间)

3)列表运算符:in; not in;

select * from mytable where mage in (10,20,30) (mage102030中的)

select * from mytable where mage not in (10,20,30)

4)模式匹配符:like; not like;

在实际应用中,经常需要根据一些不确定的信息来进行模糊查询。模式匹配运算符likenot like可以实现这类查询.

通配符:

1)%:代表0个或多个字符

select * from mytable where mname like 'A%'

select * from mytable where mname not like 'A%'

2)_(下划线):代表单个字符

select * from mytable where mname like 'A_A'

select * from mytable where mname not like 'A_A'

3)[]:指定范围([a-f][0-9])或集合([abcdef])中的任何单个字符

select * from mytable where mid like '[1-5]'([]中数字或字母为单个字符)

select * from mytable where mid like '[1236]'(列内容为单个字符)

4)[^]:指定不属于范围([^a-f][^0-9])或集合([^abcdef])中的任何单个字符

select * from mytable where mid like '[^1236]'

select * from mytable where mid not like '[^1-5]'

5)空值运算符:is null; is not null;

select * from mytable where mclass is null

select * from mytable where mclass is not null

6)逻辑运算符:and; or; not;

select * from mytable where mage>15 and mage<=30

select * from mytable where mname='BBB' or mname='EEE'

14order by子句:

通常查询结果集中的记录的顺序是它们在表中的顺序,但有时用户希望查询结果集中的记录按某种顺序显示。可以通过ORDEY BY子句改变查询结果集中记录的显示顺序。

select mage as byage from mytable order by mage ASC

select mage as byage from mytable order by mage DESC

其中ASC表示按升序排列,DESC按降序排列,默认为ASC。当按多列排序时,先按写在前面的列排序,当前面的列值相同时,再按后面的列排序。

你可能感兴趣的:(数据结构,sql,SQL Server,F#)