数据库作业14:SQL总结
CREATE SCHEMA<模式名>AUTHORIZATION<用户名>;
DROP SCHEMA <模式名><CASCADE|RESTRICT>;
CREATE TABLE<表名>(<列名><数据类型>[列级完整性约束条件]
[<列名><数据类型>[列级完整性约束条件]]
...
[,<表级完整性约束条件>]);/*表级写在最后*/
ALTER TABLE <表名>
[ADD[COLUMN]<新列名><数据类型>[完整性约束]]
[ADD<表级完整性约束>]
--增加新列、新的列级完整性约束条件和新的表级完整性约束条件
[DROP [COLUMN]<列名>[CASCADE|RESTRICT]]
--用于删除表中的列
[DROP CONSTRAINT<完整性约束名>[RESTRICT|CASCADE]]
--用于删除指定的完整性约束条件
[ALTER COLUMN<列名><数据类型>]
--修改原有的列定义,包括修改列名和数据类型。
DROP TABLE<表名>[RESTRICT|CASCADE];
SELECT NAME
FROM SYS.FOREIGN_KEY_COLUMNS F JOIN SYS.OBJECTS O ON F.CONSTRAINT_OBJECT_ID=O.OBJECT_ID
WHERE F.PARENT_OBJECT_ID=OBJECT_ID(<表名>)
ALTER TABLE <表名> DROP CONSTRAINT <外键名>
详情可查看:数据库作业3:第三章例题实践
CREATE [UNIQUE][CLUSTER]INDEX<索引名>
ON<表名>(<列名>[<次序>][,<列名>[<次序>]]...);
ALTER INDEX <旧索引名>RENAME TO<新索引名>;
在T-SQL中与标准SQL仍有差别,详情可查看:数据库作业4:插入数据、单表查询以及整体实现!
在SQL中,删除索引使用DROP INDEX语句,其一般格式为:
DROP INDEX <索引名>;
DROP INDEX <索引名> ON <表名>;
详情可查看:数据库作业4:插入数据、单表查询以及整体实现!
SQL提供了SELECT语句进行数据查询,该语句具有灵活的使用方式和丰富的功能。其一般格式为:
SELECT [ALL|DISTINCT]<目标列表达式>[,<目标列表达式>]...
FROM<表名或视图名>[,<表名或视图名>...]|(<SELECT语句>)[AS]<别名>
[WHERE<条件表达式>]
[GROUP BY<列名1>[HAVING<条件表达式>]]
[ORDER BY<列名2>[ASC|DESC]];
查询条件 | 谓词 |
---|---|
比较 | =, >, <, >=, <=, !=, <>, !>, !<; NOT+上述比较运算符 |
确定范围 | BETWEEN AND, NOT BETWEEN AND |
确定集合 | IN, NOT IN |
字符匹配 | LIKE, NO |
空值 | IS NULL, IS NOT NULL |
多重条件(逻辑运算) | AND, OR, NOT |
谓词LIKE可以用来进行字符串的匹配。其一般语法格式如下:
[NOT] LIKE '<匹配串>' [ESCAPE'<换码字符>']
用户可以用ORDER BY子句对查询结果按照一个或多个属性列的升序(ASC)或降序(DESC)排序,默认值为升序。
COUNT * --统计元组个数
COUNT([DISTINCT|ALL]<列名>) --统计一列中值的个数
SUM([DISTINCT|ALL]<列名>) --计算一列值的总和(此列必须时数值型)
AVG([DISTINCT|ALL]<列名>) --计算一列值的平均值(此列必须是数值型)
MAX([DISTINCT|ALL]<列名>) --求一列值的最大值
MIN([DISTINCT|ALL]<列名>) --求一列值的最小值
连接查询的WHERE子句中用来连接两个表的条件称为连接条件或连接谓词,其一般格式为:
[<表名1>.]<列名1><比较运算符>[<表名2>.]<列名2>
此外连接谓词还可以使用下面形式:
[<表名1>.]<列名1>BETWEEN[<表名2>.]<列名2>AND[<表名2>.]<列名3>
在SQL语言中,一个SELCECT-FROM-WHERE语句成为一个查询块。将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询成为嵌套查询。例如:
SELECT Sname --外层查询或父查询
FROM Student
WHERE Sno IN
(SELECT Sno--内层查询或子查询
FROM SC
WHERE Cno='2');
子查询返回单值时可以用比较运算符,但返回多值时要用ANY(有的系统用SOME)或ALL为此修饰符。而是用ANY或ALL谓词时必同时使用比较运算符。
> ANY 大于子查询结果中的某个值
> ALL 大于子查询结果中的所有值
< ANY 小于子查询结果中的某个值
< ALL 小于子查询结果中的所有值
>=ANY 大于等于子查询结果中的某个值
>=ALL 大于等于子查询结果中的所有值
<=ANY 小于等于子查询结果中的某个值
<=ALL 小于等于子查询结果中的所有值
= ANY 等于子查询结果中的某个值
= ALL 等于子查询结果中的所有值(通常没有实际意义)
!=(或<>) ANY 不等于子查询结果中的某个值
!=(或<>) ALL 不等于子查询结果中的任何一个值
EXISTS代表存在量词。带有EXISTS谓词的子查询不返回任何数据,只产生逻辑真值“true”或逻辑假值“false”;
集合操作主要包括并操作UNION、交操作INTERSECT和差操作EXCEPT。
ps:参加集合操作的各查询结果的列数必须相同;对应项的数据类型也必须相同。
子查询不仅可以出现在WHERE子句中,还可以出现在FROM子句中,这是子查询生成的临时派生表成为主查询的查询对象。
SELECT语句时SQL的核心语句,从前面的例子可以看到其语句成分丰富多样,总结一下他们的一般格式。
SELECT语句的一般格式:
SELECT[ALL|DISTINCT]<目标列表达式>[别名][,<目标列表达式>[别名]]...
FROM<表名或视图名>[别名][,<表明或视图名>[别名]...]|(<SELECT语句>)[AS]<别名>
[WHERE<条件表达式>]
[GROUP BY<列名1>[HAVING<条件表达式>]]
[ORDER BY<列名2>[ASC|DESC]];
插入元组的INSERT语句格式为:
INSERT
INTO<表名>[<属性列1>[,<属性列2>]...)]
VALUES(<常量1>[,<常量2>]...);
子查询不仅可以嵌套在SELECT语句中用以构造父查询的条件,也可以嵌套在INSERT语句中用以生成要插入的批量数据。
格式如下:
INSERT
INTO<表名>[(<属性列1>[,<属性列2>...])]
子查询;
修改操作又称为更新操作,其语句的一般格式为:
UPDATE<表名>
SET<列名>=<表达式>[,<列名>=<表达式>]...
[WHERE<条件>];
删除语句的一般格式为:
DELETE
FROM<表名>
[WHERE<条件>];
所谓空值就是“不知道”或“不存在”或“无意义”的值。
取空值一般有以下几种情况:
空值是一个很特殊的值,含有不确定性,对关系运算带来特殊的问题,需要做特殊的处理。
视图是从一个或几个基本表(或视图)导出的表。它与基本表不同,是一个虚表。数据库中只存放视图的定义,而不存放视图对应的数据,这些数据仍存放在原来的基本表中。
SQL语言用CREATE VIEW命令建立视图,其一般格式为:
CREATE VIEW <视图名>[(<列名>[,<列名>]...)]
AS<子查询>
[WITH CHECK OPTION];
该语句的格式为:
DROP VIEW<视图名>[CASCADE];
视图定义后,用户就可以像对基本表一样对视图进行查询了。
SQL中使用GRANT和REVOKE语句向用户授予或收回对数据的操作权限。GRANT语句向用户授予权限,REVOKE语句收回已经授予的用户权限。
GRANT语句的一般格式为:
GRANT <权限>[,<权限>]...
ON<对象类型><对象名>[,<对象类型><对象名>]...
TO<用户>[,<用户>]...
[WITH GRANT OPTION];
授予用户的权限可以由数据库管理员或其他授权者用REVOKE语句收回,REVOKE语句的一般格式为:
REVOKE<权限>[,<权限>]...
ON<对象类型><对象名>[,<对象类型><对象名>]...
FROM<用户>[,<用户>]...[CASCADE|RESTRICT];
创建角色的SQL语句格式是:
CREATE ROLE<角色名>
GRANT<权限>[,<权限>]...
ON<对象类型>对象名
TO<角色>[,<角色>]...
GRANT<角色1>[,<角色2>]...
TO<角色3>[,<用户1>]...
[WITH ADMIN OPTION]
[例4.14]建立计算机系学生的视图,把对该视图的SELECT 权限授予王平,把该视图上的所有操作权限授予张明。
GO
CREATE VIEW CS_Student
AS
SELECT *
FROM Student
WHERE Sdept='CS';
GRANT SELECT
ON CS_Student
TO 王平;
GRANT ALL PRIVILEGES
ON CS_Student
TO 张明;
GO
审计功能就是数据库管理系统达到C2以上安全级别必不可少的一项指标。
审计日志是将用户对数据库的所有操作记录在上面。
SQL还在CREATE TABLE语句中提供了完整性约束命名子 CONSTRAINT,用来对完整性约束条件命名,从而可以灵活地增加、删除一个完整性约束条件。
CONSTRAINT<完整性约束条件名><完整性约束条件>
SQL支持域的概念,并可以用CREATE DOMAIN语句建立一个域以及该域应该满足的完整性约束条件,然后就可以用域来定义属性。
在SQL中可以使用数据定义语言中的CREATE ASSERTION语句,通过声明性断言来指定更具一般性的约束。
CREATE ASSERTION<断言名><CHECK 子句>
SQL使用CREATE TRIGGER命令建立触发器,其一般格式为:
CREATE TRIGGER<触发器名>
{BEFORE|AFTER}<触发事件>ON<表名>
REFERENCING NEW|OLD ROW AS<变量>
FOR EACH{
ROW|STATEMENT}
[WHEN<触发条件>]<触发动作体>
存储过程是由过程化SQL语句书写的过程,这个过程经编译和优化后存储在数据库服务器中,因此称它为存储过程,使用时只要调用即可。
CREATE OR REPLACE PROCEDURE 过程名 ([参数1,参数2,...])
AS<过程化SQL语言>;
CALL/PERFORM PROCEDURE 过程名([参数1,参数2,...]);
使用ALTER PROCEDURE 重命名一个存储过程:
ALTER PROCEDURE 过程1 RENAME TO 过程2;
DROP PROCEDURE 过程名();
CREATE OR REPLACE FUNCTION 函数名 ([参数1,参数2,...])RETURNS<类型>
AS <过程化SQL块>;
CALL/SELECT 函数名 ([参数1,参数2,...]);
可以使用ALTER FUNCTION重命名一个自定义函数;
ALTER FUNCTION 过程名1 RENAME TO 过程名2;
可以使用ALTER FUNCTION重新编译一个函数:
ALTER FUNCTION 函数名 COMPILE;
有关触发器,存储过程和函数的T-SQL语句请查看:数据库作业12:第五章例题(5.1~5.20)
至此,SQL总结已全部完成!在过往的学习中,经历了不少困难,解决困难之后还是有很大收获!在以后的学习中也应该更加努力!
感谢阅读~