SQL Server --指令集(简单操作)

创建数据库
删除数据库
修改数据库
查看数据库

也即 增删改查
下面重点是掌握 CREATE、ALTER、DROP、INSERT、DELETE、UPDATE、SELECT 语句。
当然还有一些细节补充。
" – (双短线) 表示单行注释
/* */ 表示多行注释
且 SQL 语句关键字对大小写不敏感 "

  • 创建数据库

create database 数据库名
on
(
name = 主数据文件名,
filename = ‘ 主数据文件物理路径名 ’,
size = 默认数据库大小,
maxsize = 最大容量,
filegrowth = 增长量
)
log on
(
name = 日志文件名,
filename = ‘ 日志文件物理路径名 ’ ,
size = 默认数据库大小,
maxsize = 最大容量,
filegrowth = 增长量
)
用 SQL 编程新建一个名为student的数据库,包括主文件、日志文件,并定义其5个参数(name, filename, size, maxsize, filegrowth)

create database student	--创建数据库
on		--主文件建立
(
		name = pstuPQL,	--定义主文件逻辑名
		filename = 'E:\pstuPQL.mdf',	--定义主文件物理名
		size = 10MB,	--主文件的初始容量
		maxsize = 20MB,	--主文件的最大容量
		filegrowth = 10%	--增量大小
		)
log on	--日志文件建立
(
		name = lstuPQL,	--定义日志文件逻辑名
		filename = 'E:\lstudentPQL.ldf',	--定义日志文件物理名
		size = 2MB,	--日志文件的初始容量
		maxsize = unlimited,	--日志文件的最大容量
		filegrowth = 2MB	--增量大小
		)
go
  • 打开数据库
    use <数据库名>
use stu
go
  • 查看 student 数据库参数信息
exec sp_helpdb 'student'	--查看数据库student属性
go
  • 查看 student 数据库空间信息
exec sp_spaceused 
go
  • 查看 student 数据库选项信息
exec sp_dboption 'student'	--查看数据库student选项
go
  • 重命名1
alter database student --指定要更改的数据库
modify name = stu	--更改数据库名称
go
  • 重命名2
exec sp_renamedb 'stu','student'	--将名为stu的数据库更名为student
Go
  • 增加数据库文件

alter database 数据库名
add file
(
name = 文件名,
filename = ‘ 文件物理路径名 ’ ,
size = 初始大小,
maxsize = 最大容量,
filegrowth = 增长量
)
代码示例:

ALTER DATABASE STUMS
ADD FILE
(NAME=STUMS,
FILENAME = 'E:\lstudentPQL.ndf',
SIZE = 35MB,
MAXSIZE = 100MB,
FILEGROWTH = 5MB)
Go
  • 现有数据库中添加文件组和数据文件
use TEST_DB --进入当前操作数据库
go
alter database TEST_DB 
add filegroup GROUP --向TEST_DB 数据库添加GROUP文件组
go --批处理标示
 
alter database TEST_DB 
add file --向新建的文件组中添加数据文件
(
name='FG_data',
filename='E:\project\FG_data',
size=5MB,
filegrowth=10%
)to filegroup FG
go
 
alter database TEST_DB
modify filegroup FG default --设置FG1文件组为默认文件组
go
  • 修改数据库 STUMS 的主数据文件 STUMS 的属性,将其初始大小改为35MB,最大容量为100MB,增长幅度为5MB。
ALTER DATABASE STUMS
MODIFY FILE
(NAME=STUMS,
SIZE=35MB,
MAXSIZE=100MB,
FILEGROWTH=5MB)
Go
  • 修改数据库大小
alter database 数据库名
modify file
(
name = 主数据文件名,
size = 初始大小,
maxsize = 最大容量,
filegrowth = 增长量
)

删除数据库 STUMS 的辅助数据文件 STUMS_data1,同时在D:\SQL文件夹中添加一个初始太小为3MB的日志文件 STUMS_log2.ldf。
代码如下:

ALTER DATABASE STUMS
REMOVE FILE STUMS_data1
Go
ALTER DATABASE STUMS
ADD LOG FILE
(NAME = STUMS_log2,
FILENAME = 'D:\SQL\STUMS_log2.ldf',
SIZE = 3MB)
Go
  • 删除数据库

(1)用DROP语句删除数据库
DROP DATABASE database_name[,database_name…]
其中,
DROP DATABASE: 表示删除数据库;
database_name: 为要删除的数据库名称。

删除名称为 stums_1 的数据库。

DROP DATABASE stums_1

(2)用 sp_dbremove 系统存储过程删除数据库

EXEC sp_dbremove database_name

其中,database_name 为要删除的数据库名称。

  • SQL Server数据类型

在 STUMS 数据库中,创建一个名为 “ RX_Gz_SJ ”,基于 smalldatetime 类型,该列允许为空值的用户自定义数据类型。
代码如下:

USE stums
go
sp_addtype RX_Gz_SJ,smalldatetime ,'null'
go
  • 空值的含义

创建表时需要确定该列的取值能否为空值(NULL)。
空值意味着没有值,并不是“空格”或数值0。
允许空值表示该列取值是不确定的。

在 STUMS 数据库的 “ 选课 ” 表中的 “ 补考成绩 ” 字段可以取空值,因为多数学生可能没有补考,也即补考成绩为空。

通过系统存储过程 SP_ADDTYPE

EXEC SP_ADDTYPE SC,' float',' rot nul1'

删除通过系统存储过程 SP_DROPTYPE

EXEC SP_dropTYPE SC
  • 创建用户定义数据类型的T-SQL语句并运行,完成创建用户定义数据类型操作。

创建用户定义数据类型 IDNUMBER,基于系统提供的char数据类型,长度为7,内容是数字和字母,用于保存身份证号码。
代码如下:

CREATE TYPE IDNUMBER FROM char(17) NOT NULL
  • 利用 CREATE TABLE 命令创建 “ 教师 ” 表。

操作步骤如下:
①在 STUMS 中打开查询编辑器。
②在查询编辑器的文本输入窗口中,输入如下的代码:

USE STUMS           /* 打开STUMS数据库*/
GO
CREATE TABLE 教师   /* 创建教师表*/
(教师编号 char(7) not null,
姓名 char(8),
性别 char(2),
出生日期 date,
政治面貌 char(8),
参加工作 date,
学历 char(8),
职务 char(10),
职称 char(10),
系部代码 char(2),
专业代码 char(4),
备注 varchar(20)
)
  • 表结构的修改

修改 “ 学生基本信息 ” 表的结构,添加 “ E_mail ” 字段。
代码如下:

ALTER TABLE  学生基本信息
ADD E-mail char(20)
Go

将上例中 “ E_mail ” 字段的数据类型改为 varchar(30)。
代码如下:

ALTER TABLE 学生基本信息
ALTER COLUMN E_mail varchar(30)
Go

删除表 “ 学生基本信息 ” 中的 “ E_mail ” 字段。
代码如下:

ALTER TABLE 学生基本信息
DROP COLUMN E_mail
Go

向 “ 学生基本信息 ” 表插入一行新数据。数据内容为: 126202006、蒋成功、男、1993-07-08、共青团员、2012-9-12、06、620203、无锡、无锡堰桥村。

代码如下:

INSERT 学生基本信息
VALUES ('126202006','蒋成功,'','1993-07-08','共青团员','2012-9-2',06',620203','无锡,'无锡堰桥村')
Go
  • 将学生基本信息表中姓名为 “ 于归 ” 的籍贯改为 “ 南京 ”

代码如下:

UPDATE 学生基本信息
SET 籍贯 = 南京
WHERE 姓名 = '于归'
go
  • 将选课表中的成绩字段置零

代码如下:

UPDATE 选课
SET 成绩 = 0
go
  • 使用DELETE语句删除记录

语法格式如下:
DELETE [FROM] table_name
[WHERE condition]
其中,
DELETE: 删除记录关键字。
table_name: 要册除记录的表名。
WHERE condition: 指定删除记录应满足的条件。若省咯该项,则删除表中所有记录,仅剩下表结构,此时就成了空表。

  • 删除 STUMS 数据库的教师表中姓名为空的记录

代码如下:

USE STUMS
DELETE 教师
WHERE 姓名 IS NULL
GO
  • 删除学生基本信息友中2010年入学的学生记录

代码如下:

DELETE 学生基本信息
WHERE YEAR(入学时间)-'2010'
GO

YEAR 函数用来取入学时间字段值的年份。

  • 使用TRUNCATE TABLE语句清空表数据可使用TRUNCATE TABLE语句快速清空数据表中的数据

语法格式:
TRUNCATE TABLE table_name

  • 清空“学生基本信息”表中所有数据信息

代码如下:

TRUNCATE TABLE 学生基本信息

说明:TRUNCATE TABLE语句用以删除表中的所有数据,并不会改变表的结构,也不会改变的约束与索引定义。

  • 表的管理

使用 DROP TABLE 命令删除表
DROP TABLE 语法格式如下:
DROP TABLE table_name
其中,
DROP TABLE: 删除表命令。
table_name: 表明要册除的表名。

  • 删除教师表

代码如下:

DROP TABLE 教师
  • 列级完整约束:

(1)默认值约束
(2)空值/非空值约束
(3)主键约束
(4)外键约束
(5)唯一性约束
(6)检查约束

  • 表级完整约束:

(1)unique
(2)primary key
(3)foreign key
(4)check

  • 创建约束数据表

create table 表名称
(
列名1 数据类型1 约束1,–(主键的约束条件比较多)
列名2 数据类型2 约束2,
列名3 数据类型3 约束3
)

  • 创建约束

在STUMS数据库中创建一张用于管理学生借书信息的表STU_BOOK),表中包含借书证号、姓名、性别、班号、出生日期、借书数等字段。在建表的同时创建所需约束:为借书证号创建主键约束,约束名为pk_jszh;为姓名创建惟一约束,约束名为uk_xm;为性别创建默认约束,默认值为“男”,为班号创建外键约束,约束名为fk_bh参照班级表,保证班号输入的有效性;为借书数创建检查约束,约索名ck jss,检查条件为借书数<=5.
代码如下:注:先把班级班号)设为主键

CREATE TABLE STU_BOOK
(惜书证号char(12) CONSTRAINT pk_jszh primary key,
姓名 char(8) not null CONSTRAINT uk_xm unique,
性别 char(2) default '男',
班号 char(6) CONSTRAINT fk_bh foreign key(班号) references 班级(班号),
出生日期 datetime,
借书数 tinyint CONSTRAINT ck_jss CHECK(借书数<=5))
Go
  • STUMS数据库中,为学生基本信息表的“学号”创建主键约束 pk_xuehao 。
    代码如下:
ALTER TABLE 学生基本信息
ADD CONSTRAINT pk_xuehao
PRIMARY KEY(学号)
GO

在 STUMS 数据库中,为学生基本信息表的“编号”创建唯一性约束 uk_id。
代码如下:

ALTER TABLE 学生基本信息
ADD CONSTRAINT uk_id
UNIQUE NONCLUSTERED (ID ASC)
GO
  • 检查约束

ALTER TABLE table_name
ADD CONSTRAINT constraint_name
CHECK( logical_expression)
在 STUMS 数库中,为学生基本信息表的“入学时间”创建检查约束 ck_rtsj,检查条件为入学时间>出生日期。
代码如下:

ALTER TABLE学生基本信息
ADD CoNSTRAINT ckrxsj
CHECK(入学时间>出生日期)
GO
  • 默认值约束

ALTER TABLE table_name
ADD CONSTRAINT constraint_name
DEFAULT constraint_expression[FOR column_name]
在 STUMS 数据库中,为学生基本信息表的 “ 入学时间 ” 创建默认约束 df_rxsj,默认值取计算机系统的日期。
代码如下:

ALTER TABLE 学生基本信息
ADD CONSTRAINT df_rxsj
DEFAULT GETDATE FOR 入学时间
GO
  • 外键约束

ALTER TABLE table_name
ADD CONSTRAINT constraint_name
FOREIGN KEY{(column_name[,.n]}REFERENCES
ref_table[(ref_column_name[,…n]]
在 STUMS 数据库中,为学生基本信息表的 “ 班号 ” 创建外键约束 fk_xsbh 。
代码如下:

ALTER TABLE 学生基本信息
ADD CONSTRAINT fk_xsbh
FOREIGN KEY(班号) REFERENCES 班级(班号)
  • 使用系统存储过程查看约束信息

可以使用存储过程 sp_helpconstraint 来查看指定表上的所有约束的类型、名称、创建者和创建时间等信息。语法如下:
sp_helpconstraint [ @objname=]‘table’
参数[@objname=]‘table’: 返回其约束信息的表名

使用系统存储过程查看 STUMS 数据库中“教师”表的约束。
代码如下:

EXEC sp_helpconstraint 教师

也可以使用 sp_help 和 sp_helptext 来查看指定的约束信息。
使用系统存储过程 sp_help 和 sp_helptext查看STUMS数据库中定义的ck_jsczgz约束。
代码如下:

EXEC sp_help ck_jsczgz
EXEC sp_helptext ck_jsczgz
  • 使用DROP命令删除表约束

语法格式如下:
ALTER TABLEtable_name
DROP CONSTRAINT constraint_name[,…n]
其中,
table_name 为需要删除约束的表的名称;
constraint_name 要册除的约束的名称。

删除 STUMS 数据库中的“教师”表上的检查约束ck _jsczga。
代码如下:

ALTER TABLE 教师
DROP CONSTRAINT ck_jsczgz
GO
  • 默认和规则

在 STUMS 数据库上创建默认值 xinbie_default,默认值为“男”,并将其绑定到“学生基本信息”表的“性别”列和“教邮”表的“性别”列上。
代码如下:

CREATE DEFAULT xinbie_default
AS'男,
GO
EXEC sp_bindefault 'xinbie_default', '学生基本信息.性别
EXEC sp_bindefault 'xinbie_default','教师.性别
GO
  • 解绑默认值

用户可以通过执行 sp_unbindefault 系统存储过程,将默认从表中的某列或用户自定义的数据类型上解绑。其语法如下:
EXEC sp_unbindefault ’ 表名.字段名 ‘|’ 自定义数据类型名 ’

  • 删除默认值

解绑后的默认就可以通过 DROP DEFAULT 命令删除,其语法:
DROP DEFAULT default_name[.….n]
—个DROP DEFAULT命令可同时删除多个默认,各默认名之间用逗号分隔。
将 STUMS 数据库上的 jsxl_default 默认解绑并删除。
代码如下:

EXEC sp_unbindefault '教师.学历'
GO
DROP DEFAULT jsxl_default

说明:
如果某列已创建了默认约束,要绑定默认值,必须先删除默认约束后,才能绑定默认值。
如果某个 DEFAULT 定义已经存在,若要修改,必须首先删除现有的 DEFAULT 定义,然后用新定义重新创建它。
如果一个默认值绑定在多个表上,必须从每一个表上都解绑后,才可以删除该默认值。

  • 规则的创建、绑定、解绑与删除

规则用来定义表中某列可以输入的有效值范围,当用户输入的数据不在规定的范围内,就会提醒用户输入有误,从而确保输入数据的正确性。

规则与CHECK约束的作用是相同的。但与CHECK约束不同的是,规则是一种数据库对象,在数据库中只需定义一次后,就可以被一次或多次绑定到任意表中某列,限制列值。
规则的使用方法类似默认,同样包括创建、绑定、解绑和删除。

  • 创建规则

命令如下:

CREATE RULE rule_name
AS condition_expression

各参数说明如下:
rule_name: 表示新建立的规则名称
condition_expression: 是定义规则的条件。在条件表达式中包含一个变量,变量的前面必须冠以@符号

  • 绑定规则

执行系统存储过程 sp_bindrule 可以将规则绑定到表的某列上。
其语法如下:
[EXECUTE] sp_bindrule ’ 规则名称 ’ , ’ 表名.字段名’自定义数据类型名 ’

在 STUMS 数据库上创建规到 csrq_rule,并将其绑定到教师表的出生日期字段上,要求是1955年之后出生的。
代码如下:

CREATE RULE csrq_rule
AS @csrq >= '1955/01/01' AND @csrq<=getdate()
GO
EXEC sp_bindrule  'csrq_1ule','教师.出生日期'
GO
  • 解绑规则

用户可以通过执行 sp_unbindrule 系统存储过程,将规则从表中的某列或用户自定义的数据类型上解绑。其语法如下:
[EXECUTE] sp_unbindrule ’ 表名.字段名自定义数据类型名’

  • 删除规则

解绑后的规则就可以通过 DROP RULE命令册除,其语法如下:
DROP RULE 规则名称[,…n]

将 STUMS 数据库上的 csrq_rule 规则解绑并删除。
代码如下:

EXEC sp_unbindrule '教师.出生日期'
GO
DROP RULE csrq_rule
GO
  • SELECT语句概述

虽然SELECT语句的完整语法比较复杂,但其主要子句可归纳如下:
SELECT <目标列名表>
FROM <数据源表>
[WHERE <查询条件习]
[GROUP BY <分组列>]
HAVING <组选择条件>]
[ORDER BY <排序列> [ASC|DESC]]

  • 在“课程”表中查询所有学生的 “ 课程号 ” 和“ 课程名称 ” 。
use student
go
select distinct 课程号,课程名称
from 课程
go

注意:目标列表表达式可以是:(属性列,字符串常量,算数表达式,函数)
distinct 目标属性 :去掉重复行

  • 在“课程号 ” 表中查询“学分 ” 在4-6之间的课程的 “ 课程号 ” 和 “ 课程名称 ” 。

代码如下:

use student
go
select 课程号,课程名称
from 课程
where 学分>=4 and 学分<=6
go
  • 确定集合

指定集合内:where 列名 in(‘A’,‘B’,‘C’)
指定集合外:where 列名 not in(‘A’,‘B’,‘C’)

  • 字符匹配

匹配: like 匹配串
不匹配:not like 匹配串

注意:匹配符可以结合% -使用

% 表示任意的,表示0到无穷大的长度
_ 表示单个字符

like 匹配的意思(后边有匹配符号只能用like)
is 匹配的意思(为空只能用is,不能用=)
= 等于
<> 不等于

在课程表中查询包含数据库字样的课程全部信息。
代码如下:

use student
go
select *
from 课程
where 课程名称 like '%数据库%'
  • 涉及空值的查询
use student
go
select 课程名称,学分
from 课程
where 先修课程 is null
go
  • 多重条件的查询

and 并且
or 或

  • 带有 group by 字句的查询(分组功能)

简单分组查询语法:
select 目标列表表达式
from 表名
where 条件表达式
group by 列名

  • 带 having 字句的分组查询

select 目标列表表达式
from 表名
group by 列名 having 条件表达式

eg:查询至少选修了2门课程以上的学生的学号。

use student
go
select distinct 学号
from 学生成绩
group by 学号
having count(*) >= 2 
go
  • 带有order by 子句的查询(排序功能)

select 目标列表表达式
(into 新表名)
from 表名 或 视图名
where 条件表达式
order by 列名 asc 或 desc

eg:在“课程”表中查询所有“课程名称”中包含“数据库”字样的课程的全部信息,将查询结果按“课程名称”降序排列。
代码如下:

use student
go
select *
from 课程
where 课程名称 like '%数据库%'
order by 课程名称 DESC
go
  • 子查询(嵌套查询功能)

集合比较运算符:

all 全部都满足
any 满足任何一个
between 在某个范围内
exists 查询结果包含一些行(结果不为空)
in 操作数等于列表中的一个
not 取值反
some 有一些满足
子查询:将第一步查询嵌入到第二步查询的条件中(嵌套查询)

  • 无关子查询(先执行子查询语句,得到的结果传递给父查询语句使用)

use 数据库名
select 列名
from 表格
where 列名 比较运算符(select 列名
from 表格
where 列名)

eg:查询其它系中比 “ 管理系”的所有学生年龄都小的学生的 “ 姓名 ”、 “ 年龄 ” 和 “ 性别 ”。

use student
go
select 姓名,性别,年龄
from 学生信息
where 所在系 != '管理系' and 年龄<any(
										select 年龄 
										from 学生信息
										where 所在系 = '管理系')
go

eg:查询“赵燕”同学选修的所有课程 “ 课程名称 ” 、 “ 学分 ” 、 “ 分数 ” ,对结果按照“分数”升序排列。

use student
go
select 课程名称,学分,分数
from 学生成绩,课程
where 学生成绩.课程号 = 课程.课程号 and 学号 in(
														select 学号
														from 学生信息
			where 姓名 = '赵燕')
order by 分数
go
  • 相关子查询(子查询的执行依赖于父查询,多数情况下是因为子查询的where 子句引用了父查询的表)
  • 表数据维护的子查询

插入子查询结果
带子查询的删除语句

  • 联合查询

①集合并运算(会自动去除重复)


union

②集合交运算


intersect

③集合差运算(前—后的意思)


except

  • 输出结果选项

(1)输出前n行语法:
use 数据库名
select top n 列名
from 表格
where 条件语句
(2)百分比输出语法:
use 数据库名
select top n percent 列名
from 表格
where 条件语句
(3)查询结果输出到新建表中语法:
use 数据库名
select 列名 into 新表格
from 原表格
where 条件语句

(4)输出结果插入到另一个表中语法
select 目标列表表达式 into 新表名
from 表名
where 条件表达式

eg:将 “ 学生信息 ” 表中 “ 计算机系 ” 的学生的全部信息插入到 “ 计算机系学生信息 ” 表中。

use student
go
select *
into 计算机系学生信息
from 学生信息
where  所在系 = '计算机系'
go

eg:创建和 “ 学生信息 ” 表的表结构相同的 “ 管理系学生信息 ” 表,但该表中不包含任何记录。之后用带子查询的 INSERT 将 “ 管理系 ” 学生的全部信息插入到 “ 管理系学生信息 ” 表中。

use student
go
select * into 管理系学生信息
from 学生信息
where 学号 is null 
go
use student	--调用数据库
go
insert into 管理系学生信息
select * 
from 学生信息
where 所在系 = '管理系'
go

至此,SQL Server 的简单指令到此就结束了,学习复杂指令请移驾主页查看下一篇。

猜你喜欢

转载自blog.csdn.net/weixin_48033173/article/details/108943579