CREATE DATABASE 数据库名称
[ON
[FILEGROUP 文件组名称]
(
NAME=数据文件逻辑名称,
FILENAME='路径+数据文件名',
SIZE=数据文件初始大小,
MAXSIZE=数据文件最大容量,
FILEGROWTH=数据文件自动增长容量,
)]
[LOG ON
(
NAME=日志文件逻辑名称,
FILENAME='路径+日志文件名',
SIZE=日志文件初始大小,
MAXSIZE=日志文件最大容量,
FILEGROWTH=日志文件自动增长容量,
)]
[COLLATE 数据库校验方式名称]
[FOR ATTACH]
注释:
1.用[ ]括起来的语句,可以选用或者不选用.
2.如果只用 “CREATE DATABASE 数据库名称”,DBMS会默认逻辑名称、文件组大小等属性.
ALTER DATABASE 数据库名称
//1.向数据库中添加数据文件
ADD FILE(
具体文件格式)
[TO FILEGROUP 文件组名]
//2.向数据库中添加数据文件
|ADD LOG FILE(
具体文件格式)
//3.向数据库删除逻辑文件,并删除物理文件
|REMOVE FILE 文件逻辑名称
//4.指定要修改的文件
|MODIFY FILE(
具体文件格式)
//5.向数据库中添加文件组
|ADD FILEGROUP 文件组名
//6.从数据库中删除文件组
|REMOVE FILEGROUP 文件组名
//7.修改文件组名称,或设置文件组的只读、读写,指定文件组为默认文件组
|MODIFY FILEGROUP 文件组名
{
READ_ONLY|READ_WRITE,
| DEFAULT,
| NAME = 新文件组名 }
其中,“具体文件格式”为:
(
NAME = 文件逻辑名称
[,NEWNAME = 新文件逻辑名称]
[,SIZE = 初始文件大小]
[,MAXSIZE = 文件最大容量]
[,FILEGROWTH = 文件自动增长容量]
)
其中“|”表示单选
DROP DATABASE 数据库名称
Sp_helpdb [[@dbname=] 'name']
Sp_helpfile [[@filename =] 'name']
Sp_helpfilegroup [[@filegroupname =] 'name']
UnSigned
无符号的
声明了该列不能为负数
ZEROFILL
0填充的
不足位数的用0来填充 , 如int(3),5则为005
Auto_InCrement
通常理解为自增,自动在上一条记录的基础上默认+1
通常用来设计唯一的主键,必须是整数类型
可定义起始值和步长
当前表设置步长(AUTO_INCREMENT=100) : 只影响当前表
SET @@auto_increment_increment=5 ; 影响所有使用自增的表(全局)
NULL 和 NOT NULL
默认为NULL , 即没有插入该列的数值
如果设置为NOT NULL , 则该列必须有值
DEFAULT
默认的,用于设置默认值
CREATE TABLE 表名
( 列名 数据类型 表约束,
.
.
. )
例子:
CREATE TABLE S
( SNO VARCHAR(6),
SN NVARCHAR(10),
SEX NCHAR(1) DEFAULT '男', )
NULL值不是0,也不是空白,指“不知道’、”不确定“的意思,
NOT NULL指不允许出现空值。
用于指明基本表在某一列或多个列的组合上取值必须唯一
建立UNIQUE约束时,需要考虑以下几个因素。
1.使用 UNIQUE约束的字段允许为NULL值,但系统为保证其唯一性,最多只可以出现一个NULL值。
2.一个表中可以允许有多个 UNIQUE约束
3.UNIQUE约束用于强制在指定字段上创建一个 UNIQUE索引,缺省为非聚集索引,UNIQUE既可用于列约束,也可用于表约束。
语法格式:
CONSTRAINT S_Prim PRIMARY KEY (列约束)
PRIMARY KEY (表约束)
PRIMARY KEY 约束用于定义基本表的主键,起唯一标识作用,其值不能为空.
PRIMARY KEY与 UNIQUE约束类似,通过建立唯一索引来保证基本表在主键列取值的唯一性,但它们之间存在着很大的区别.
1.在一个基本表中只能定义一个 PRIMARY KEY约束,但可定义多个 UNIQUE约束。
2.对于指定为 PRIMARY KEY的一个列或多个列的组合,其中任何一个列都不能出现NULL值,而对于 UNIQUE所约束的唯一键,则允许为NULL。
3.不能为同一个列或一组列,既定义 UNIQUE约束,又定义 PRIMARY KEY约束。
语法格式:
NOT NULL FOREIGN KEY REFERENCES 主表名(列名)
例子:
例子:
CREATE TABLE SC
( SNO VARCHAR(6) NOT NULL FOREIGN KEY REFERENCES S(SNO),
CNO VARCHAR(6) NOT NULL FOREIGN KEY REFERENCES C(CNO),
CONSTRAINT S_C_Prim PRIMARY KEY (SNO,CNO) )
1.外部键必须是主表中的一个主键值或唯一值,因此才有最后一行SQL命令
2.其次主键值不能为空,因此有NOT NULL
外键约束作用:
指定一列或几列作为外部键,包含外部键的表称为从表,
包含外部键所引用的主键或唯一键称为主表,
系统保证从表在外部键上的取值值是主表中某一个主键值或唯一键,或者取空值.
CHECK约束用于检查字段值所允许的范围
语法格式:
CHECK (条件)
例子:
建立一个SC表,定义 Score的取值范围为0~100之间。
CREATE TABLE SC
( SNO VARCHAR(6)
CNO VARCHAR(6)
Score NUMERIC(4, 1) CHECK (Score>=0 AND Score<=100) )
建立CHECK约束,需要考虑以下几个因素
1.一个表中可以定义多个 CHECK约束。
2.每个字段只能定义一个 CHECK约束。
3.在多个字段上定义的 CHECK约束必须为表约束。
4.当执行 INSERT、 UPDATE语句时, CHECK约束将验证数据。
ADD方式用于增加新列和完整性约束
语法格式:
ALTER TABLE 表名
ADD
列名 数据类型
....
ALTER方式用于修改某些列
ALTER TABLE 表名
ALTER COLUMN
列名 数据类型
....
使用此方式有如下一些限制
1.不能改变列名
2.不能将含有空值的列的定义修改为 NOT NULL约束
3.若列中已有数据,则不能减少该列的宽度,也不能改变其数据类型。
4.只能修改 NULL/NOT NULL约束其他类型的约束在修改之前必须先将约束删除,然后再新添加修改过的约束定义。
DROP方式只用于删除完整性约束定义
其语法格式为
ALTER TABLE<表名>
DROP CONSTRAINT<约束名>
【例】删除S表中的主键。
ALTER TABLE S
DROP CONSTRAINT S Prim
语法格式:
DROP TABLE 表名
语法格式:
SELECT 列名
FROM 表名
//1. *表示表的全部列名
SELECT *
FORM S
//2. DISTINCT关键字用于消除重复行
SELECT DISTINCT SNO
FROM SC
//3. AS 表示别名,输出别名
SELECT SN AS Name,SNO,AGE
FROM S
运算符 | 含义 |
---|---|
=、>、<、>=、<= 、!=、<> | 比较大小 |
AND、OR、NOT | 多重条件 |
BETWEEN AND | 确定范围 |
IN | 确定集合 |
LIKE | 字符匹配 |
IS NULL | 空值 |
语法格式:
SELECT 列名
FROM 表名
WHERE 条件
1.比较大小
> SELECT SNO,SCORE
> FROM SC WHERE CNO='C1'
2.多重条件查询 优先级从高到低:NOT、AND、OR
例:查询工资在1000元~1500元之间的教师的教师号、姓名及职称。
SELECT TNO, TN, Prof
FROM T
WHERE Sal BETWEEN 1000 AND 1500
等价于
SELECT TNO, TN Prof
FROM T
WHERE Sal>=1000 AND Sal<=1500
3.确定集合
利用"IN"操作可以查询属性值属于指定集合的元组
【例】查询选修C1或C2的学生的学号、课程号和成绩。
SELECT SNO, CNo, Score
FROM SC
WHERE CNO IN('C1,C2)
此语句也可以使用逻辑运算符“OR”实现。
SELECT SNO, CNo, Sco
FROM SC
WHERE CNO='Cl' OR 'CNo' = C2
利用“NOTN”可以查询指定集合外的元组。
【例3-30】查询没有选修C1,也没有选修C2的学生的学号、课程号和成绩。
SELECT SNO, CNo, Score FROM SC
WHERE CNo NOT IN ('C1,'C2')
等价于
SELECT SNO, CNo, Score FROM-SC
WHERE (CNO <>'C1)AND (CNo<>'C2')
4.部分匹配查询
语法格式:
<属性名> LIKE <字符串常量>
通配符 | 实例 |
---|---|
% | ab%,’ab‘后可接任意字符串 |
_(下划线) | ‘a_b’,'a’与’b’之间可有一个字符 |
[ ] | [0-9],0~9之间的字符 |
[^ ] | [^0-9],不在0~9之间的字符 |
【例3-31】查询所有姓张的教师的教师号和姓名。 查询结果如下
SELECT TNO, TN
FROM T
WHERE TN LIKE'张%'
【例3-32】查询姓名中第二个汉字是“力”的教师号和姓名。
SELECT TNO,TN
FROM T WHERE TN LIKE’_力%'
6.空值查询
某个字段没有值称为具有空值(NUL)通常没有为一个列输入值时,该列的值就是空值。
【例3—33】查询没有考试成绩的学生的学号和相应的课程号
SELECT SNO,CNO
FROM SC
WHERE SCORE IS NULL
函数 | 功能 |
---|---|
AVG | 按列计算平均值 |
SUM | 按列计算值的总和 |
MAX | 求一列中的最大值 |
MIN | 求一列中的最小值 |
COUNT | 按列值统计个数 |
【例】求学号为S1的学生的总分和平均分。
SELECT SUM(Score) As TotalScore, AVG(Score) As AvgScore
FROM SC
WHERE (SNO =S1)
上述查询语句中AS后面的 TotalScore和 AvgScore是别名,
别名会显示在查询结果中.
让使用实例者能清楚地知道查询内容所表示的含义,
结果中就不显示列名.
注意:在使用库函数进行查询时,通常要给查询的每一项内容加别名,
否则查询结果就不会显示列名.
【例3-35】求选修C1号课程的最高分、最低分及之间相差的分数。
SELECT MAX (Score) AS MaxScore,MIN (Score) AS MinScore,
MAX(Score)- MIN(Score) AS Diff
FROM SC
WHERE (CNO ='C1')
【例3-36】求计算机系学生的总数。
SELECT COUNT( SNO) FROM S
WHERE Dept='计算机'
【例3-37】求学校中共有多少个系
SELECT COUNT (DISTINCT Dept) As DeptNum
FROM S
//注加入关键字 DISTINCT后表示消去重复行,
//可计算字段“Dept”不同值的数目。
用 COUNT(*)来统计元组个数.
GROUP BY子句可以将查询结果按属性列或属性列组合在行的方向上进行分组,每组在属性列或属性列组合上具有相同的值。
【例3-40】查询每个教师的教师号及其任课的门数。
SELECT TNO, COUNT(*)AS C_Num
FROM TC
GROUP BY TNo
GROUP BY子句按TNo的值分组,
所有具有相同TNo的元组为一组,
对每一组使用函数COUNT进行计算,
统计出各位教师任课的门数。
若在GROUP BY子句分组后还要按照一定的条件进行筛选,
则需使用 HAVING子句。
【例3-41】查询选修两门以上(含两门)课程的学生的学号和选课门数。
表的连接方法
SELECT SNO, COUNT(*) AS SC_Num
FROM SC
GROUP BY SNO
HAVING ( COUNT(*)>=2 )
GROUP BY子句按SNo的值分组,
所有具有相同SNo的元组为一组,
对每一组使用函数 COUNT进行计算,
统计出每个学生选课的门数。
HAVING子句去掉不满足 COUNT(*)>=2的组。
注意:
一、.当在一个SQL查询中同时使用 WHERE子句, GROUP BY子句和 HAVING子句时,其顺序是WHERE、 GROUP BY、HAVING。
二、WHERE与 HAVING子句的根本区别在于作用对象不同。
1.WHERE句作用于基本表或视图,从中选择满足条件的元组;
2.HAVING子句而作用于组,选择满足条件的组,必须用在 GROUP BY子句之后,但GROUP BY子句可没有 HAVING子句
当需要对查询结果排序时,应该使用 ORDER BY子句, ORDER BY Y子句必须出现在其他子句之后。
排序方式可以指定,DESC为降序,ASC为升序,缺省时为序案犬认人