1.数据类型:
1)char、varchar、text和nchar、nvarchar、ntext
char:是定长字符数据,速度快。对于像身份证号码、邮政编码等为固定长度的数据,使用char类型比较合适。 (长度可为1~8000)
varchar:是变长字符数据,节省储存空间,但是存取速度慢。(长度可为1~8000)
所谓定长就是长度固定的,当输入的数据长度没有达到指定的长度时将自动以英文空格在其后面填充,使长度达到相应的长度;而变长字符数据则不会以空格填充。
text:存储可变长度的非Unicode数据,最大长度为2^31-1(2,147,483,647)个字符。当一个字段中存储字符超过8000个时,可以选择text类型。
后面三种数据类型和前面的相比,从名称上看只是多了个字母"n",它表示存储的是Unicode数据类型的字符。写过程序的朋友对Unicode应该很了解。字符中,英文字符只需要一个字节存储就足够了,但汉字众多,需要两个字节存储,英文与汉字同时存在时容易造成混乱,Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表示。nchar、nvarchar的长度是在1到4000之间。和char、varchar比较:nchar、nvarchar则最多存储4000个字符,不论是英文还是汉字;而char、varchar最多能存储8000个英文,4000个汉字。可以看出使用nchar、nvarchar数据类型时不用担心输入的字符是英文还是汉字,较为方便,但在存储英文时数量上有些损失。
2)datetime和smalldatetime
datetime:从1753年1月1日到9999年12月31日的日期和时间数据,精确到百分之三秒。
smalldatetime:从1900年1月1日到2079年6月6日的日期和时间数据,精确到分钟。
3)bitint、int、smallint、tinyint和bit
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:从0到255的整数数据。
bit:1或0的整数数据。
4) money、smallmoney、decimal和numeric
货币数据类型包括money和smallmoney两类。用于存储货币类型数据,当字段要存放工资、价格等数据时,可以采用货币数据类型。由于货币数据类型的小数位数固定为4,因此若所使用的货币数据值的小数位超过4位,请改用numeric或decimal数据类型。
money:能存放-263到263-1的货币数据,长度为8字节。
smallmoney:能存放-231到231-1的货币数据,长度为4字节。
decimal和numeric这两种数据类型是等效的。都有两个参数:p(精度)和s(小数位数)。p指定小数点左边和右边可以存储的十进制数字的最大个数,p必须是从 1到38之间的值。s指定小数点右边可以存储的十进制数字的最大个数,s必须是从0到p之间的值,默认小数位数是0。
5)float和real
float:从-1.79^308到1.79^308之间的浮点数字数据。
real:从-3.40^38到3.40^38之间的浮点数字数据。在SQL Server中,real的同义词为float(24)。
6)binary、varbinary和image
当存储图片、声音等二进制数据时,可选用二进制数据类型。这三种都可以存诸二进制类型。
定长二进制型binary(n):用于存储固定长度的n个字节的二进制数据,n的取值范围为1~8000。
变长二进制型varbinary(n):用于存储可变长度的二进制数据,n的取值范围为1~8000。
大二进制型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 男
7.insert...select...把另一个表的查找结果插入到当前表中(两表列名相同)
insert into mytabletwo select * from mytable where msex='男'
8.删除表或表中内容的几种方式:
使用truncate table语句会删除表中所有行,但表的结构及其列、约束、索引等保持不变,而新行标识所用的计数值重置为该列的初始值。如果想保留标识计数值,则要使用delete语句。如果想删除表结构和表中所有记录,并释放该表所占的存储空间,可以使用drop table语句。
truncate table mytabletwo
delete from mytabletwo
9.top子句:
在查询表中数据时,用户可以根据需要限制返回的行数。方法是在select语句的字段列表前面使用top n子句,则查询结果中只显示表中前n条记录;如果在字段列表前使用top n percent子句,则查询结果中只显示前n%条记录。
select top 3 * from mytable
select top 5 percent * from mytable
10.distinct子句:消除重复行
对表只选择部分列查询时,可能会出现重复行。如果要消除结果集中的重复行,可以在字段列表前面加上distinct关键字。
select distinct msex from mytable
11.使用列别名:
1)select 列别名=原列名 from 数据源
select author=mname from mytable
select author=mname,age=mage from mytable
2)select 原列名 as 列别名 from 数据源 (as可省略)
select mname as author from mytable
select mname as author,mage as age from mytable
12.使用计算列:
在结果中可以输出对列值计算后的值,即结果集中的列不是表中现成的列,而是由表中的一个或多个列计算出来的。因为结果集中由计算得到的列是没有列名的,所以可以使用列别名,以增加结果结果集的可读性。
1)select mage+10 as '10年后年龄' from mytable
2)select mage+10 as addage from mytable
13.where子句:
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 (mid在3和5之间的)
select * from mytable where mid not between 3 and 5 (mid不在3和5之间)
3)列表运算符:in; not in;
select * from mytable where mage in (10,20,30) (mage在10、20、30中的)
select * from mytable where mage not in (10,20,30)
4)模式匹配符:like; not like;
在实际应用中,经常需要根据一些不确定的信息来进行模糊查询。模式匹配运算符like和not 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'
14.order 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。当按多列排序时,先按写在前面的列排序,当前面的列值相同时,再按后面的列排序。