一、关于数据库的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 CONSTRAINT S 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 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)通常没有为一个列输入值时,该列的值就是空值。

【例333】查询没有考试成绩的学生的学号和相应的课程号
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 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子句

1.5查询结果的排序

1.5.1 结果排序 ORDER BY子句

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

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

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐