现在的位置: 首页 > 数据库 > 正文

SQL语言总结

2019年08月15日 数据库 ⁄ 共 3587字 ⁄ 字号 评论关闭
数据类型:
datetime数据类型用来表示日期和时间。
char(n) 按固定长度存储字符串
varchar(n)它与char 类型相似,存储大小为输入数据字节的实际长度。
text数据类型用于存储大量文本数据,

create table table_name
(
学号 int primary key identity ,
名称 char(6) not null,
专业方向 varchar(10) not null,
系部代码 char(2) not null,
备注 varchar(50)
)

EXEC sp_help table_name  //查看表的信息

EXEC sp_rename 'old_table_name','new_table_name'//修改表的名字


alter table 表名        //增加主键
add constraint pk
primary key clustered (列名)


alter table 表名       //增加外键
add constraint wz
foreign key (列名)
references t1(列名)


create table 专业
(
专业代码 char(4) not null primary key identity,
专业名称 varchar(20) not null,
系部主任 char(6) constraint wzll references 系部(系部代码)
)


在表之间有约束关系时,删除表必须从随从表开始删除

INSERT oldtable VALUES('刘','软件','软','没有')

DELETE from oldtable WHERE 学号=201

insert into oldtable(姓名,专业方向,系部代码) select 姓名,专业方向,系部代码 from oldtable

update oldtable set 姓名='王康' where 姓名='刘谨'


去掉结果集中重复的行,用distinct
select distinct 姓名 from oldtable

常用的查询条件:
查询条件
运算符 意义

比较
=、>、<、>、!=、<> 比较大小

确定范围
BETWEEN...AND...、 判断范围
NOT BETWEEN...AND...

确定集合
IN、NOT IN 判断值是否为列表中的值

字符匹配
LIKE、NOT LIKE( %、_ )
判断值是否与指定的字符通配格式相符
空值
IS NULL、IS NOT NULL
判断是否为空

多重条件
AND、OR、NOT 用于多重条件判断
select * into newtable from oldtable

对查询结果进行分组用group by
若要加上限制条件用having

select 专业方向 from oldtable 
group by 专业方向 having 专业方向<>'动漫'

对查询结果进行排序用order by;升序用ASC,降序用DESC,默认是升序

对查询结果进行统计,count(),sum(),avg(),max(),min()

select min(分数) as 最低分数 from oldtable


select 系部代码,count(系部代码) 系部总人数
from oldtable
group by 系部代码

连接查询
交叉查询
自然连接
自身连接需要制定别名
子查询in,带有比较运算符的子查询
带有any或all 的子查询
带有exists的子查询

数据的完整性:数据的精确性和可靠性。
数据的完整性包括:a,实体完整性:规定表中每一行在表中是表中唯一的实体。
 b,域完整性:是指数据表中的字段必须满足某种特定的数据类型
  c,参照完整性:是指两个表的主键和外键的数据对应一致。
  d,用户定义的完整性:用户定义的约束条件

SQL SERVER中支持6类约束:NOT NULL(非空)约束、
 CHECK(检查约束):可以检查约束对输入的数据的值做检查,可以限定数据输入,维护数据的域完整性
 UNIQUE(唯一约束)、
 PRIMARY KEY(主键约束)、
 FOREIGN KEY(外键约束)
 DEFAULT(默认约束)

增加唯一约束:
ALTER TABLE 表名称
ADD CONSTRAINT 唯一约束的名称
UNIQUE NONCLUSTERED(字段名称)
增加检查约束:
ALTER TABLE 表名称
ADD CONSTRAINT 约束名称
CHECK(条件)

如:alter table student
add constraint ckk
check(高考分数>300 and 高考分数<600)

创建默认约束:
ALTER TABLE 表名称
ADD CONSTRAINT 约束名称
DEFAULT '默认值' FOR 列名

删除约束:
ALTER TABLE 表名称
DROP CONSTRAINT 约束名称


检查约束,默认约束-->约束
主键约束,唯一约束-->索引


完整性规则:
1,创建规则
  create rule 规则名称
  as
  
@a>200 and @a<600
2,绑定规则
  EXECUTE SP_bindrule '规则名称','表名.字段名'
3,解除绑定
  EXECUTE SP_unbindrule '表名.字段名'
4,删除规则
 drop rule 规则名称

规则一次创建多个表使用,检查完整性一次创建一次使用

默认绑定:
1,创建绑定
  CREATE DEFAULT 默认名称
  as '男'
2,绑定
 EXECUTE sp_bindefault 默认名称, '表名.字段名'
3,解除绑定
  EXECUTE sp_unbindefault '表名.字段名'
4,删除
  DROP DEFAULT 默认名称

索引:
优点:加快查询速度,缺点:浪费存储空间
聚集索引:是指数据行在表中的物理存储顺序。表中数据会按该列进行重新排
 序,然后再存储到磁盘上。每个表只能创建一个聚集索引。
非聚集索引:数据存储在一个地方,索引存储在另一个地方,索引带有指针指
 向数据的存储位置。
1,创建索引
create [UNIQUE][CLUSTERED][NONCLUSTERED] INDEX 索引名
ON 表名(列名)
2,查看索引信息
EXEC sp_helpindex 表名
3,删除索引
DROP INDEX 表名.索引名


视图:
1,创建视图
CREATE VIEW 视图名
WITH [ENCRYPTION] [SCHEMABTNDING]
AS 查询语句
--[ENCRYPTION]
加密视图
--[SCHEMABINDING]
视图及表的架构绑定

如:
create view 架构绑定名
with schemabinding
as 
select 姓名 from dbo.student
2,查看视图
EXEC sp_helptext 视图名
3,删除视图
DROP VIEW 视图名

存储过程:
存储过程由一组预先编辑好的SQL语句组成。将其放在服务器上,由用户通过指定存储过程的名称来执行。
create proc 存储过程
as
select * from student

exec 存储过程

触发器:
触发器是一种特殊类型的存储过程,它不是由用户直接调用的,而是当用户对数据进行操作时(包括数据的insert,update,delete操作)是自动执行。
优点:
1,触发器自动执行在对表中的数据做了任何修改之后立即被激活。
2,触发器能够对数据库中的相关表实现级联更改。


如:
1,创建触发器:
create trigger mydelete(触发器名)
on 产品(表名)
for delete
as
declare @a char(10)
select @a=产品编号 from deleted(被删除记录的临时表)
delete 产品销售(表名) where 产品编号=@a

create trigger myinsert
on 产品
for insert
as
declare @a char(10)
select @a=产品编号 from inserted
insert into 产品销售 values(@a,0)

2,查看触发器:
exec sp_helptrigger 产品(表名)

3,删除触发器:
drop trigger mydelete(触发器名称)

函数:
1,聚合函数:
AVG()--平均值
COUNT()--返回行中项目的数量
MAX()--最大值
MIN()--最小值
SUM()--求和
2,数学函数:
select abs(-8) --返回绝对值
select ceiling(x)--返回大于或等于所给数的最小整数
select pi()--PI值
select power(x,y)-- 返回x的y次方
select RAND()--返回0~1之间的随机数
3,配置函数
select @@version--数据库的版本
select @@language--语言
4,时间函数
select getdate()--取出当前时间
select day(getdate())--取出天
select month(getdate())--取出月
select year(getdate())--取出年
5,排名函数
rank() over (order by 列名)
如:select 姓名,rank() over (order by 高考分数 desc) as 名次,高考分数 from 学生

抱歉!评论已关闭.