当前位置:智城范文网>范文大全 > 征文 > 创建数据库表格(SQL) 创建\\

创建数据库表格(SQL) 创建\\

时间:2022-03-24 00:30:31 来源:网友投稿

下面是小编为大家精心整理的创建数据库表格(SQL) 创建\\文章,供大家阅读参考。

创建数据库表格(SQL) 创建\\

创建数据库表格

create database zhangwei on

primary

(name=scoredata3,filename="d:\zhangwei\zhangwei.mdf", size=10mb,maxsize=50mb,

filegrowth=5mb)

log on

(name=scorelog1,filename="d:\zhangwei\zhangwei.ldf", size=3mb,maxsize=unlimited,

filegrowth=2)

go

更改文件属性

ALTER DATABASE studentscore

MODIFY FILE

(NAME = sss_data,

SIZE = 20MB,

MAXSIZE=60

)

GO

更改逻辑文件名

ALTER DATABASE studentscore

MODIFY FILE

(NAME=sss_data,

NEWNAME = scoredata1

)

删除数据库文件

alter DATABASE StudentScore

remove file

ScoreData4

主键约束

格式:[CONSTRAINT 约束名] PRIMARY KEY [(列名)]。

如:CONSTRAINT Pk_课程表 PRIMARY KEY (课程号)

惟一键约束:

格式:[CONSTRAINT 约束名] UNIQUE KEY [(列名)]

如:CONSTRAINT Uk_专业表 UNIQUE (专业名)

外键(FOREIGN KEY)约束:

格式:[CONSTRAINT 约束名] FOREIGEN KEY [(外键列)] REFERENCES 引

用表名(引用列)

如:CONSTRAINT Fk_CourseId FOREIGN KEY (课程号) REFERENTCES 成

绩表(课程号),

检查(CHECK)约束:

CHECK约束通过限制可输入或修改的一列或多列的值来强制实现域完整性,

它作用于插入(INSERT)和修改(UPDATE)语句。

格式:[CONSTRAINT 约束名] CHECK (检查表达式)

如:CONSTRAINT Ck_成绩表 CHECK (成绩>=0)

默认值(DEFAULT)约束:

格式:[CONSTRAINT 约束名] DEFAULT 默认值

如:CONSTRAINT De_bScore DEFAULT(0)

创建规则

创建规则的语法是:

CREATE RULE rule_name AS condition_expression

例:create rule eee as @kk>=60 and @kk<=100

规则捆绑

格式:sp_bindrule rule_name, ‘object_name’

例:sp_bindrule eee,"成绩表.成绩"

解除由sp_bindrule建立的规则与列或用户定义数据类型的绑定

sp_unbindrule object_name[,futureonly]

例:sp_unbindrule "成绩表.成绩"

删除规则

例:drop rule eee

用户自定义函数分为三种:

(1)创建标量函数

例:创建名为“Func_自己的姓名”(如“Func_张亮”)的标量函数,计算某个(如学号为:200009001)学生各科成绩之和,函数的参数变量名为@sn,类型为char(12),函数返回类型为float。函数最后要求能显示调用结果信息(如:该生的各科成绩总和为:189 分)

create function dbo.Func_张巍(@sn char(12))

returns float

as

begin

declare @sum1 float

select @sum1=sum(成绩)from成绩表where学号=@sn

return @sum1

end

select dbo.Func_张巍(200009001)

例:在StudentScore数据库中创建一个自定义函数,按出生日期计算年龄,然后从“学生表”中检索出含有年龄的学生信息(包括学号、姓名、性别和年龄)。

CREATE FUNCTION dbo.年龄(@出生日期Datetime, @当前日期Datetime) RETURNS Int

AS

BEGIN

RETURN Year(@当前日期)-Year(@出生日期)

END

go

SELECT学号,姓名, dbo.年龄(出生日期,getdate())AS年龄

FROM学生表

(2)内嵌(单语句)的返回表的自定义函数

例:创建名为func_stu的函数,参数名为@stuno,参数类型为int。要求输入某个学号后,可以查看与该学号对应的学生信息,输出结果包括学号、姓名、性别和出生日期

create function dbo.func_stu (@stuno int)

returns table

as

return(select学号,姓名,性别,出生日期from学生表where学号=@stuno) select*from func_stu(200206008)

例:定义内嵌表值函数coursegrade,要求能够查询某一课程所有学生成绩列表。

CREATE FUNCTION coursegrade(@course varchar(30))

Returns table

As

return(select 学生表.学号,学生表.姓名,成绩表.成绩 From 学生表,成绩表 where 学生表.学号=成绩表.学号 and 成绩表.课程号=@course) 函数执行:

select * from coursegrade("aa")

(3)多语句的返回表的自定义函数

例:定义多语句表值查询函数course_grade,要求能够查询某一(aa)课程所有学生成绩列表,并将其成绩加100。

create function course_grade9 (@course varchar(30))

returns @score table

(s_no char(10), s_name char(30), grade smallint)

as

begin

insert @score

select 学生表.学号,学生表.姓名,成绩表.成绩 from 学生表,成绩表where 学生表.学号=成绩表.学号 and 成绩表.课程号=@course

update @score

set grade=grade+100

return

end

go

select * from course_grade9("aa")

创建索引

格式:CREATE [UNIQUE] [CLUSTERED | NONCLUSTERED] INDEX index_name ON table_name

UNIQUE:指定创建的索引是唯一索引

CLUSTERED | NONCLUSTERED:指定被创建索引的类型。使用CLUSTERED来创建聚簇索引(一个表只可创建一个聚簇索引);使用NONCLUSTERED来创建非聚簇索引。这两个关键字中只能选用一个。

. index_name:为新创建的索引指定的名字。

. table_name:创建索引的表的名字。

例:学生表中创建一个以“学号”索引。

create clustered index IX_学号

on 学生表(学号)

例:

create clustered index IX_学号

on 学生表(学号)

with drop_existing

例:创建复合索引

create clustered index IX_学号 on 学生表(学号,姓名)

删除索引的语法:

例:删除“学生表”上的“IX_学生表”索引

drop index 学生表.IX_学号,学生表.ix_姓名

创建存储过程

格式:

Create procedure procedue_name

[@parameter data_type][output]

[with]{recompile|encryption}

as

sql_statement

解释:

output:表示此参数是可传回的

with {recompile|encryption}

recompile:表示每次执行此存储过程时都重新编译一次

encryption:所创建的存储过程的内容会被加密

例:在StudentScore数据库中创建一个存储过程Major_Class,要求从专业信息表和班级信息表的连接中返回所有专业的班级信息,其中包括班级代号、班级名称、专业名称和学制。

USE StudentScore

GO

CREATE PROC Major_Class

AS

SELECT c.班级代号, c.班级名称,m.专业名称,学制

FROM 专业表 m JOIN 班级表 c

ON m.专业代号 = c.专业代号

Major_Class的调用语句为:

EXEC Major_Class

例:在StudentScore数据库中创建一个存储过程Class_Num_Sum,要求根据专业代号输出该专业的学生人数。

USE StudentScore

GO

CREATE PROCEDURE Class_Num_Sum

@MajorId Char(2)="%",

@Sum Int OUTPUT

AS

SELECT @Sum=SUM(班级人数) FROM 班级表

WHERE 专业代号 = @MajorId

调用:

DECLARE @n Int

EXEC Class_Num_Sum "11", @n OUTPUT

PRINT "该专业的学生人数为:"+convert(Char(4), @n)

SELECT语句的语法格式

SELECT语句的基本语法格式如下:

SELECT [all|distinct] 列名的列表

[INTO 新表名]

[FROM 表名与视图名列表]

[WHERE 条件表达式]

[GROUP BY 列名的列表]

[HAVING 条件表达式]

[ORDER BY 列名1[ASC|DESC],列名2[ASC|DESC],...列名n[ASC|DESC]]

注:select语句中出现的字段列要不以聚合函数形式出现,要不该字段在分组中体现。基本的SELECT语句使用位置:

SELECT 选取的列

FROM 表的列表

WHERE 查询条件

使用INTO子句

语法格式:

SELECT 选取的列

INTO 新表名

FROM 表的列表

WHERE 查询条件

例:创建一个名为“新学生表”的表,表中的字段为姓名、籍贯、年龄。

SELECT 姓名, 籍贯, YEAR(GETDATE()) - YEAR(出生日期) AS 年龄

INTO 新学生表

FROM 学生表

例:查询性别为 "男"并且是2002年6月份入学的学生。

SELECT 姓名, 学号

FROM 学生表

WHERE (性别 = "男") AND (学号 LIKE "200206%")

ORDER BY 姓名 DESC

例:查询籍贯不是“上海”和“扬州”的学生

select * from 学生表

where 籍贯 not in("上海","扬州")

/* 在IN后面值的列表中,将出现最频繁的值放在最前面,出现得最少的放在最后面,减少判断的次数*/

例:查询年龄在20-21之间的学生

SELECT 姓名, 学号, 籍贯, 年龄

FROM 新学生表

WHERE (年龄 BETWEEN 20 AND 21)

SELECT 姓名, 学号, 籍贯, YEAR(GETDATE()) - YEAR(出生日期) AS 年龄FROM 学生表

WHERE (YEAR(GETDATE()) - YEAR(出生日期) BETWEEN 20 AND 21)

例:查找姓“刘”或“肖”的学生。

select * from 学生表 where 姓名 like "[刘肖]%"

例:查找班级代号为001-003的学生。

如:select * from 学生表 where 班级代号 like "00[1-3]"

例:查找姓名中含有“河”字的学生。

SELECT 姓名

FROM 学生表

WHERE (姓名LIKE "%河%")

例:查询学生“性别”和“籍贯”的信息

SELECT DISTINCT 性别, 籍贯

FROM 学生表

例:求平均数

SELECT AVG(成绩) AS 平均成绩

FROM 成绩表

例:统计班级中性别数

SELECT DISTINCT 班级代号, 性别, COUNT(性别) AS 性别个数

FROM 学生表

GROUP BY 班级代号, 性别

HAVING (NOT (班级代号 IS NULL))

ORDER BY 班级代号

例:从学生表中返回第3学期成绩总分超过200分的学生学号和成绩总分。

SELECT 学号, SUM(成绩) AS 总分

FROM 成绩表

WHERE (学期 = 3)

GROUP BY 学号

HAVING (SUM(成绩) > 200)

例:查找学生成绩大于学分为4的最低成绩的学生的学号、姓名、课程名称、成绩和学分。

SELECT dbo.学生表.学号, dbo.学生表.姓名, dbo.课程表.课程名称, dbo.成绩表.成绩, dbo.成绩表.学分

FROM dbo.成绩表 INNER JOIN

dbo.学生表 ON dbo.成绩表.学号 = dbo.学生表.学号 INNER JOIN dbo.课程表 ON dbo.成绩表.课程号 = dbo.课程表.课程号

WHERE (dbo.成绩表.成绩>= ANY

(SELECT 成绩

FROM 成绩表

WHERE 成绩表.学分=4))

例:钱河的成绩加100分。

UPDATE 成绩表

SET 成绩 = 成绩 + 100

WHERE (学号 IN

(SELECT 学号

FROM 学生表

WHERE 姓名 = "钱河"))

例:查询平均(每一门课)成绩大于80分学生的情况

SELECT 学生表.学号, 学生表.姓名, 学生表.性别

into student

FROM 学生表 INNER JOIN

成绩表 ON 学生表.学号 = 成绩表.学号

WHERE (成绩表.课程号 IN

(SELECT 成绩表.课程号

FROM 成绩表 INNER JOIN

学生表 ON 成绩表.学号 = 学生表.学号

GROUP BY 成绩表.课程号

HAVING (AVG(成绩表.成绩) > 80)))

视图

例:在“计算机系学生”视图上,列出年龄小于22的学生。

SELECT 姓名, 系部名称, 年龄

FROM dbo.计算机系学生

WHERE (年龄 < 22)

例:修改计算机系学生视图:要求去掉原视图中的系部名称,增加学生性别。

alter view dbo.计算机系学生(姓名,性别,年龄) as

SELECT dbo.学生表.姓名, dbo.学生表.性别, YEAR(GETDATE())

- YEAR(dbo.学生表.出生日期) AS 年龄

FROM dbo.学生表 INNER JOIN

dbo.班级表 ON dbo.学生表.班级代号 = dbo.班级表.班级代号INNER JOIN

dbo.专业表 ON dbo.班级表.专业代号 = dbo.专业表.专业代号

WHERE (dbo.专业表.系部名称 = "计算机")

例:以“学生表”和“成绩表”为数据源新建一个视图,命名为VIEW2,查询出参加补考的学生的姓名、学分和补考成绩。

CREATE VIEW dbo.VIEW2

AS

SELECT dbo.学生表.学号, dbo.学生表.姓名, dbo.成绩表.学分, dbo.成绩表.补考成绩

FROM dbo.成绩表 INNER JOIN

dbo.学生表 ON dbo.成绩表.学号 = dbo.学生表.学号

WHERE (NOT (dbo.成绩表.补考成绩 IS NULL))

例:通过修改视图VIEW2来更新表的数据。当学生补考成绩大于等于60分时,其对应的学分增加2分。

UPDATE VIEW2

SET 学分 = 学分 + 2

WHERE (补考成绩 >= 60)

删除视图:

drop view view_name

局部变量

例:声明局部变量Studno、Studname,并用SET语句为其赋值。

DECLARE @Studno Char(10),@Studname Char(8)

SET @Studno ="200009001"

SET @Studname ="葛文"

例:从成绩表中查询学号为“200009001”学生的成绩总分,并将其赋给变量Sumscore。

DECLARE @Sumscore Float

SELECT @sumscore = SUM(成绩)

FROM 成绩表

WHERE 学号 = "200009001"

全局变量

例:演示全局变量@@rowcount和@@error的使用。

select * from 学生表

where 性别="女"

select @@rowcount 处理记录数

select @@error error的值为:

CAST

功能:将某种数据类型的表达式显式转换为另一种数据类型。CAST 和 CONVERT 提供相似的功能。

例:将学生表中的姓名属性的类型转换为char(50)

select cast( 姓名 as char(50)),学号 from 学生表

或:

select convert(char(50),姓名),学号 from 学生表BEGIN...END

功能:当需要将一个以上的S Q L语句作为一组对待时,可以使用BEGIN 和END将它们括起来形成一个SQL语句块。

例:如果课程aa的平均成绩低于60,那么显示“不及格”,如果高于80,显示“优秀”,其他为“合格”。

declare @score numeric

if (select avg(成绩)

from 成绩表

where 课程号="aa" )<60

begin

select @score= avg(成绩)

from 成绩表

where 课程号="aa"

print "平均成绩为:"+convert(varchar(30),@score)+space(5)+"此科目不及格"

end

else

if (select avg(成绩)

from 成绩表

where 课程号="aa" )>=80

begin

select @score= avg(成绩)

from 成绩表

where 课程号="aa"

print "平均成绩为:"+convert(varchar(10),@score)+space(5)+"此科目优秀"

end

else

begin

select @score= avg(成绩)

from 成绩表

where 课程号="aa"

print "平均成绩为:"+convert(varchar(10),@score)+space(5)+"此科目合格"

end

用户自定义数据类型

(1)用户定义数据类型使用系统存储过程sp_addtype来定义(增加一个用户定义数据类型)。

语法如下:

sp_addtype

type_name,phystype

type_name是用户定义数据类型的名字

例如:

exec sp_addtype typ_ch_pid,"char(4)"

(2)查看用户定义数据类型

例如: exec sp_help typ_ch_tid

(3)删除用户定义数据类型。

例如: exec sp_droptype typ_ch_pid

WAITFOR

例:

waitfor delay "00:00:05"

insert into 学生表(学号,姓名)

values(200206008,"许晴")

CASE

CASE表达式可以根据多个选择确定执行的内容。

语法为:

CASE expression

{WHEN EXPRESSION THEN RESULT} [,...N]

[ELSE RESULT]

END

例:将成绩统计等级,并将结果保存在等级表中。

select 学号,等级=

case

when 成绩<60 then " 不及格"

when 成绩>90 then " 优秀 "

else "合格"

end ,

成绩 into 等级表

from 成绩表

where 成绩 is not null

创建触发器

例:在StudentScore数据库中创建一个删除触发器,实现当删除“学生表”中

的某个学生记录时同时删除“成绩表”中与之对应的成绩记录。

USE StudentScore

GO

CREATE TRIGGER Student_Delete ON 学生表

AFTER DELETE

AS

DELETE FROM 成绩表

WHERE 学号 In (SELECT 学号 FROM Deleted)

例:创建触发器Student_Delete,如果删除、修改、插入“学生表”中任何数据,则将提示一条信息:不得对数据表进行修改!

USE StudentScore

if exists(select name from sysobjects

where name="Student_Delete" and type="tr")

drop trigger Student_Delete

GO

CREATE TRIGGER Student_Delete ON 学生表

AFTER DELETE,insert,update

AS

BEGIN

raiserror("不得对数据表进行修改! ",16,1)

end

推荐访问: 创建 表格 创建 标签

版权所有:智城范文网 2010-2025 未经授权禁止复制或建立镜像[智城范文网]所有资源完全免费共享

Powered by 智城范文网 © All Rights Reserved.。粤ICP备20058421号