1、创建表
use 数据库名--选择要使用的数据库
create table 表名
(
列名 约束,
列名 约束
)
示例:在数据库dbtest中创建表StudentInfo,主键primary key为sId,标识identity为sId,外键foreign key为cid。
use dbtest
create table StudentInfo
(
sId int not null primary key identity(1,1),
sName nvarchar(10) not null,
sGender bit default(0),
sBirthday date,
sPhone char(11),
sEMail varchar(20),
cid int not null,
foreign key(cid) references ClassInfo(cId)--外键cid引用自表ClassInfo中的cId
)
2、数据插入insert
单一列插入、某几列插入、全部列插入、一次性插入多行:
insert into 表名(列名) values('数据')--单一列
insert into 表名(列名,列名) values('数据','数据')--某几列
insert into 表名 values('数据','数据')--全部列
insert into 表名(列名,列名) values('数据','数据'),('数据','数据')--一次性插入多行,
每行数据中间用,隔开
select * from 表名--查看插入结果
ps:
into可以省略不写;
插入的列名数与数据数要一致。
示例多行插入:在表ClassInfo中插入四行数据
insert into ClassInfo values('青龙'),('白虎'),('朱雀'),('玄武')
select * from ClassInfo
3、数据修改update
修改所有行的列数据、修改满足条件的行的列数据:
update 表名 set 列名='数据'--修改所有行的列数据
update 表名 set 列名='数据' where 条件--修改满足条件的行的列数据,where用来筛选行
4、数据删除delete
delete from 表名 where 条件--删除满足条件的行,删除行可能导致标识的不连续
ps:from可以省略不写。
示例标识的不连续:删除表ClassInfo中cId=4的那一行,再插入的一行标识cId为5
delete from ClassInfo where cId=4
5、清空truncate
清空即重置表。
truncate table 表名
6、数据查询
6.1、查询列select(列筛选)
select * from 表名--查询表中所有列
select 列名1,列名2 from 表名--查询表中某些列
6.2查询前n部分的数据top(行筛选)
select top n * from 表名--查询表中所有列的前n行
select top n percent * from 表名--查询表中所有列的前百分之n行
6.3、排序order by
排序方法:
asc:从小到大
desc:从大到小
select * from 表名 order by 列名1 主排序法,列名2 子排序法--先按照主排序法排序,如果
存在值一样的再按照子排序法排序,默认排序法是asc
示例:查询表StudentInfo所有列的数据,结果按照cid从大到小排列;如果值重复,则按照sId从小到大排列
select * from StudentInfo order by cid desc,sId asc
结果:
6.4、消除重复行distinct
select distinct 列名 from 表名
示例:表StudentInfo中的数据为:
查询StudentInfo的列cid,并且去除重复行:
select distinct cid from StudentInfo
结果:6.5、条件查询where(行筛选)
查询结果满足where后面的条件表达式,即表达式要返回true。
select 列名 from 表名 where 条件表达式
比较运算符:=、>、>=、<、<=、!=或<>;
逻辑运算符:and、or、not;
在一个连续的范围内:between...and...(闭区间);
在一个非连续的范围内:in。
连续范围与不连续范围示例:
select * from StudentInfo where cid between 1 and 3--查询StudentInfo表中cid在区
间[1,3]的所有列数据,包括2
select * from StudentInfo where cid in(1,3)--查询StudentInfo表中cid为1或3的所有
列数据,不包括2
6.6、模糊查询like
模糊查询:不知道具体值时的查询,用于处理字符串类型的值。
通配符:
%:表示0到多个任意字符;
_:表示一个任意字符;
[]:在[]表示一个连续的范围可以使用-连接,比如[0-9]表示范围0到9;非连续范围不使用-
(%,_放在[]中表示本身含义);
^ :非,^放在[]内部的开头,表示不使用[]内部的任何字符(^不放在[]中表示本身含义)。
示例1:在表StudentInfo中查询姓杨的同学
select * from StudentInfo where sName like '杨%'
示例2:在表StudentInfo中查询姓杨的,并且名字两个字的同学
select * from StudentInfo where sName like '杨_'
示例3:在表StudentInfo中查询sPhone是连续范围[1-3]中的数据开头的所有列
select * from StudentInfo where sPhone like '[1-3]%'
示例4:在表StudentInfo中查询sPhone是非连续范围[576]中的数据开头的所有列
select * from StudentInfo where sPhone like '[576]%'
示例5:在表StudentInfo中查询sPhone不以连续范围[1-3]中的数据开头的所有列
select * from StudentInfo where sPhone like '[^1-3]%'
7、补充null、优先级
null的判断:使用is null、is not null(select 1+null结果为null,因为null表示不知道,而不是没有)
函数ISNULL(列名,字段)
示例:
select ISNULL(sPhone,'空值') from StudentInfo--在表StudentInfo中查找所有sPhone,
如果sPhone为null,则在结果集中显示空值
select * from StudentInfo where sPhone is null--在StudentInfo表中查询sPhone为
null的所有列
select * from StudentInfo where sPhone is not null--在StudentInfo表中查询sPhone
不为null的所有列
优先级:小括号>not>比较运算符>逻辑运算符