<>一、关于数据库的SQL命令

<>1.创建数据库
CREATE DATABASE 数据库名称 [ON [FILEGROUP 文件组名称] ( NAME=数据文件逻辑名称, FILENAME=
'路径+数据文件名', SIZE=数据文件初始大小, MAXSIZE=数据文件最大容量, FILEGROWTH=数据文件自动增长容量, )] [LOG ON (
NAME=日志文件逻辑名称, FILENAME='路径+日志文件名', SIZE=日志文件初始大小, MAXSIZE=日志文件最大容量, FILEGROWTH
=日志文件自动增长容量, )] [COLLATE 数据库校验方式名称] [FOR ATTACH]
注释:

1.用[ ]括起来的语句,可以选用或者不选用.
2.如果只用 “CREATE DATABASE 数据库名称”,DBMS会默认逻辑名称、文件组大小等属性.

<>2.修改数据库
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 = 文件自动增长容量] ) 其中“|”表示单选
<>3.删除数据库
DROP DATABASE 数据库名称
<>4.查询数据库

<>4.1用系统存储过程显示数据库结构
Sp_helpdb [[@dbname=] 'name']
<>4.2用系统存储过程显示文件信息
Sp_helpfile [[@filename =] 'name']
<>4.3用系统存储显示文件组信息
Sp_helpfilegroup [[@filegroupname =] 'name']
<>二、数据类型介绍

<>1.数值

<>2.字符串

<>3.时间日期

<>4.数据库的字段属性

<>4.1

UnSigned

无符号的
声明了该列不能为负数

<>4.2

ZEROFILL

0填充的
不足位数的用0来填充 , 如int(3),5则为005

<>4.3

Auto_InCrement

通常理解为自增,自动在上一条记录的基础上默认+1
通常用来设计唯一的主键,必须是整数类型
可定义起始值和步长
当前表设置步长(AUTO_INCREMENT=100) : 只影响当前表
SET @@auto_increment_increment=5 ; 影响所有使用自增的表(全局)

<>4.4

NULL 和 NOT NULL

默认为NULL , 即没有插入该列的数值
如果设置为NOT NULL , 则该列必须有值

<>4.5

DEFAULT

默认的,用于设置默认值

<>4.6

拓展

<>三、关于数据表的SQL命令

<>1.创建数据表
CREATE TABLE 表名 ( 列名 数据类型 表约束, . . . ) 例子: CREATE TABLE S ( SNO VARCHAR(6), SN
NVARCHAR(10), SEX NCHAR(1) DEFAULT '男', )
<>2.数据表的约束

<>2.1 NULL/NOT NULL约束

NULL值不是0,也不是空白,指“不知道’、”不确定“的意思,
NOT NULL指不允许出现空值。

<>2.2 UNIQUE约束(唯一约束)

用于指明基本表在某一列或多个列的组合上取值必须唯一

建立UNIQUE约束时,需要考虑以下几个因素。

1.使用 UNIQUE约束的字段允许为NULL值,但系统为保证其唯一性,最多只可以出现一个NULL值。
2.一个表中可以允许有多个 UNIQUE约束
3.UNIQUE约束用于强制在指定字段上创建一个 UNIQUE索引,缺省为非聚集索引,UNIQUE既可用于列约束,也可用于表约束。

<>2.3 PRIMARY KEY 约束(主键约束)

语法格式:
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约束。

<>2.4 FOREIGN 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
外键约束作用:

指定一列或几列作为外部键,包含外部键的表称为从表,
包含外部键所引用的主键或唯一键称为主表,
系统保证从表在外部键上的取值值是主表中某一个主键值或唯一键,或者取空值.

<>2.5 CHECK约束

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约束将验证数据。

<>3.修改数据表

<>3.1 ADD方式

ADD方式用于增加新列和完整性约束
语法格式: ALTER TABLE 表名 ADD 列名 数据类型 ....
<>3.2 ALTER方式

ALTER方式用于修改某些列
ALTER TABLE 表名 ALTER COLUMN 列名 数据类型 ....
使用此方式有如下一些限制

1.不能改变列名
2.不能将含有空值的列的定义修改为 NOT NULL约束
3.若列中已有数据,则不能减少该列的宽度,也不能改变其数据类型。
4.只能修改 NULL/NOT NULL约束其他类型的约束在修改之前必须先将约束删除,然后再新添加修改过的约束定义。

<>3.3 DROP方式

DROP方式只用于删除完整性约束定义
其语法格式为 ALTER TABLE<表名> DROP CONSTRAINT<约束名> 【例】删除S表中的主键。 ALTER TABLE S DROP
CONSTRAINTS Prim
<>4.删除数据表
语法格式: DROP TABLE 表名
<>四、关于数据表查询的SQL命令

<>1.单关系表的数据查询

<>1.1 无条件查询
语法格式: SELECT 列名 FROM 表名 //1. *表示表的全部列名 SELECT * FORM S //2. DISTINCT关键字用于消除重复行
SELECT DISTINCT SNO FROM SC//3. AS 表示别名,输出别名 SELECT SN AS Name,SNO,AGE FROM S
<>1.2 条件查询

运算符含义
=、>、<、>=、<= 、!=、<>比较大小
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
BETWEEN1000 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
<>1.3常用库函数及统计查询

函数功能
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(*)来统计元组个数.
<>1.4分组查询

<>1.4.1 GROUP BY子句

GROUP BY子句可以将查询结果按属性列或属性列组合在行的方向上进行分组,每组在属性列或属性列组合上具有相同的值。
【例3-40】查询每个教师的教师号及其任课的门数。 SELECT TNO, COUNT(*)AS C_Num FROM TC GROUP BY TNo
GROUP BY子句按TNo的值分组, 所有具有相同TNo的元组为一组, 对每一组使用函数COUNT进行计算, 统计出各位教师任课的门数。
<>1.4.2 HAVING子句

若在GROUP BY子句分组后还要按照一定的条件进行筛选,
则需使用 HAVING子句。
【例3-41】查询选修两门以上(含两门)课程的学生的学号和选课门数。 表的连接方法 SELECT SNO, COUNT(*) AS SC_Num FROM
SC GROUP BYSNO 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子句

<>1.5查询结果的排序

<>1.5.1 结果排序 ORDER BY子句

当需要对查询结果排序时,应该使用 ORDER BY子句, ORDER BY Y子句必须出现在其他子句之后。

排序方式可以指定,DESC为降序,ASC为升序,缺省时为序案犬认人

技术
下载桌面版
GitHub
Gitee
SourceForge
百度网盘(提取码:draw)
云服务器优惠
华为云优惠券
腾讯云优惠券
阿里云优惠券
Vultr优惠券
站点信息
问题反馈
邮箱:[email protected]
吐槽一下
QQ群:766591547
关注微信