一、关于数据库的SQL命令
1.创建数据库
CREATE DATABASE 数据库名称 [ON [FILEGROUP 文件组名称] ( NAME=数据文件逻辑名称, FILENAME='路径+数据文件名', SIZE=数据文件初始大小, MAXSIZE=数据文件最大容量, FILEGROWTH=数据文件自动增长容量, )] [LOG ON ( NAME=日志文件逻辑名称, FILENAME='路径+日志文件名', SIZE=日志文件初始大小, MAXSIZE=日志文件最大容量, FILEGROWTH=日志文件自动增长容量, )] [COLLATE 数据库校验方式名称] [FOR ATTACH]
注释:
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
4.3
Auto_InCrement
4.4
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约束
2.2 UNIQUE约束(唯一约束)
用于指明基本表在某一列或多个列的组合上取值必须唯一
建立UNIQUE约束时,需要考虑以下几个因素。
2.3 PRIMARY KEY 约束(主键约束)
PRIMARY KEY 约束用于定义基本表的主键,起唯一标识作用,其值不能为空.
PRIMARY KEY与 UNIQUE约束类似,通过建立唯一索引来保证基本表在主键列取值的唯一性,但它们之间存在着很大的区别.
2.4 FOREIGN KEY 约束(外键约束)
例子: 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约束
例子: 建立一个SC表,定义 Score的取值范围为0~100之间。 CREATE TABLE SC ( SNO VARCHAR(6) CNO VARCHAR(6) Score NUMERIC(4, 1) CHECK (Score>=0 AND Score<=100) )
建立CHECK约束,需要考虑以下几个因素
3.修改数据表
3.1 ADD方式
ADD方式用于增加新列和完整性约束
语法格式: ALTER TABLE 表名 ADD 列名 数据类型 ....
3.2 ALTER方式
ALTER方式用于修改某些列
ALTER TABLE 表名 ALTER COLUMN 列名 数据类型 ....
使用此方式有如下一些限制
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
【例】查询选修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’_力%'
【例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)
【例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子句
【例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.5查询结果的排序
1.5.1 结果排序 ORDER BY子句
当需要对查询结果排序时,应该使用 ORDER BY子句, ORDER BY Y子句必须出现在其他子句之后。
排序方式可以指定,DESC为降序,ASC为升序,缺省时为序案犬认人
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/205677.html原文链接:https://javaforall.net
