数据库SQL命令大全

一、关于数据库的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为升序,缺省时为序案犬认人

猜你喜欢

转载自blog.csdn.net/Alan_King79/article/details/115826476
今日推荐