常用SQL语言语法格式

更新时间:2024-01-05 12:00:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

软件技术课程设计实验指导书

第四篇 附录

目 录

附录B 常用SQL语言语法格式

一、SQL模式的创建和撤消

CREATE SCHEMA <模式名> AUTHORIZATION <用户名> 例如,

CREATE SCHEMA ST_COURSE AUTHORIZATION 李斌 DROP SCHEMA <模式名> [CASCADE|RESTRICT] DROP SCHEMA <模式名> [CASCADE|RESTRICT]

撤消方式有两种:CASCADE(连锁式)方式,执行DROP语句时,把SQL模式及其下属的基本表、视图、索引等所有元素全部撤消;RESTRICT(约束式)方式,执行DROP语句时,只有当SQL模式中没有任何下属元素时,才能撤消SQL模式,否则拒绝执行DROP语句。 例如,要撤消SQL模式ST_COURSE及其下属所有的元素,可用下列语句实现: DROP SCHEMA ST_COURSE CASCADE

二、基本表的创建、修改和撤消

(1)基本表的创建

句法:CREATE TABLE SQL模式名.基本表名

(列名 类型, … …

完整性约束, ……)

主键子句(PRIMARY KEY)、检查子句(CHECK)和外键子句(FOREIGN KEY)。 例如:CREATE TABLE S (SNO CHAR(4) NOT NULL,

SNAME CHAR(20) NOT NULL, STATUS CHAR(10), ADDR CHAR(20),

PRIMARY KEY(SNO)); (2)基本表结构的修改 基本表建立后,可根据需要对基本表结构进行修改,即增加新的属性或删除原有的属性。 ① 增加新的属性

句法: ALTER TABLE 基本表名 ADD 新属性名 新属性类型

例7.2 在基本表S中增加一个电话号码(TELE)属性,可用下列语句: ALTER TABLE S ADD TELE CHAR(12);

应注意,新增加的属性不能定义为“NOT NULL”。基本表在增加一个属性后,原有元组在新增加的属性列上的值都被定义为空值(NULL)。

② 删除原有的属性

句法: ALTER TABLE 基本表名 DROP 属性名 [CASCADE|RESTRICT]

此处CASCADE方式表示:在基本表中删除某属性时,所有引用到该属性的视图和约束也要一起自动地被删除。而RESTRICT方式表示在没有视图或约束引用该属性时,才能在基本表中删除该属性,否则拒绝删除操作。 ALTER TABLE S DROP STATUS CASCADE; (3)基本表的撤消

可用“DROP TABLE”语句撤消基本表,其所有数据也丢失了。DROP语句的句法如下: DROP TABLE基本表名 (CASCADE|RESTRICT) 例如DROP TABLE S RESTRICT;

三、视图的创建和撤消

(1)视图的创建

句法:CREATE VIEW 视图名(列名表) AS SELECT 查询语句

CREATE VIEW JSP_NAME(JNO,JNAME,SNO,SNAME,PNO,PNAME,QTY) AS SELECT (J.JNO,JNAME,S.SNO,SNAME,P.PNO,PNAME,SPJ.QTY) FROM S,P,J,SPJ

WHERE S.SNO=SPJ.SNO AND P.PNO=SPJ.PNO AND J.JNO=SPJ.JNO; 此处,视图中列名顺序与SELECT子句中的列名顺序一致,视图名JSP_NAME后的列名可省。 (2)视图的撤消

句法:DROP VIEW 视图名

例7.6 撤消JSP_NAME视图,可用下列语句实现: DROP VIEW JSP_NAME;

四、索引的创建和撤消

(1)索引的创建

句法:CREATE [UNIQUE] INDEX 索引名 ON 基本表名 (<列名> [<次序>] [,<列名> [<次序>]]…)

其中,基本表名指定要建索引的基本表的名字。索引可以建在该表的一列或多列上,各列名之间用逗号分隔。每个<列名>后面还可以用<次序>指定索引值的排列次序,包括ASC(升序)和DESC(降序)两种,默认值为ASC。UNIQUE表示此索引的每一个索引值只对应惟一的数据记录。

CREATE INDEX JNO_INDEX ON J(JNO);

(2)索引的撤消

句法:DROP INDEX <索引名>

例7.8 撤消索引JNO_INDEX和SPJ_INDEX,用如下语句: DROP INDEX JNO_INDEX,SPJ_INDEX;

五、SQL的数据操纵(DML)

1. SQL的数据查询

SQL中最经常使用的是从数据库中获取数据。从数据库中获取数据称为查询数据库,查询数据库通过使用SELECT语句完成。

(1)SELECT语句格式

常见的SELECT语句包含6部分,其语法形式为:

SELECT 字段表 FROM 表名 WHERE 查询条件 GROUP BY 分组字段 HAVING分组条件 ORDER BY字段[ASC|DESC]

其中:字段表部分包含了查询结果要显示的字段清单,字段之间用逗号分开。要选择表中所有字段,可用星号“?”代替。如果所选定的字段要更名,可在该字段后用AS[新名]实现。 FROM子句用于指定一个或多个表。如果所选的字段来自不同的表,则字段名前应加表名前缀。

WHERE子句用于限制记录的选择。构造查询条件可使用大多数的Visual Basic内部函数和运算符,以及SQL特有的运算符构成表达式。

GROUP BY和HAVING子句用于分组和分组过滤处理。它能把在指定字段列表中有相同值的记录合并成一条记录。如果在SELECT语句中含有SQL合计函数,例如SUM或COUNT,那么就为每条记录创建摘要值。在GROUP BY字段中的NULL值会被分组,并不省略。但是,在任何SQL合计函数中都计算NULL值。可用WHERE子句来排除不想分组的行,将记录分组后,也可用HAVING子句来筛选它们。一旦GROUP BY完成了记录分组,HAVING就显示由GROUP BY子句分组的、且满足HAVING子句条件的所有记录。HAVING子句与已确定要选中哪些记录的WHERE子句类似。

ORDER BY子句决定了查找出来的记录的排列顺序。在ORDER BY子句中,可以指定一个或多个字段作为排序键,ASC选项代表升序,DESC代表降序。 在SELECT语句中,SELECT和FROM子句是必须的。 可在SELECT子句内使用合计函数对记录进行操作,它返回一组记录的单—值。例如,AVG函数可以返回记录集的特定字段中所有值的平均数。

用到了字符串匹配操作符LIKE。LIKE谓词的一般形式是: 列名 LIKE 字符串常数

这里,列名的类型必须是字符串或可变字符串。在字符串常数中字符的含义如下: %(百分号):表示可以与任意长度(可以为零)的字符串匹配。 _(下划线):表示可以与任意单个字符匹配。 所有其他的字符只代表自己。 (3)多表查询

实现来自多个关系的查询时,如果要引用不同关系中的同名属性,则在属性名前加关系名,即用“关系名.属性名”的形式表示,以便区分。

在多个关系上的查询可以用联接查询表示也可以用嵌套查询来表示。

(4)合计函数

SQL 提供了下列合计函数(表7.15)

表7.15 合计函数 合计函数 COUNT(*) COUNT(列名) SUM(列名) AVG(列名) MAX(列名) MIN(列名) 求某一列值的总和(此列必须是数值型) 求某一列值的平均值(此列必须是数值型) 求某一列值的最大值 求某一列值的最小值 描述 计算元组的个数 对一列中的值计算个数

2.SQL的数据更新

SQL的数据更新包括数据插入、数据修改和数据删除等操作。 (1)数据插入

SQL的数据插入语句INSERT有两种形式。 ① 输入单个元组

句法:INSERT INTO 基本表名 (列名表) VALUES (元组值)

VALUES后的元组值中列的顺序必须同基本表的列名表一一对应。如基本表后不跟列

名表,表示在VALUES后的元组值中提供插入元组的每个分量的值,分量的顺序和关系模式中列名的顺序一致。如基本表后有列名表,则表示在VALUES后的元组值中只提供插入元组对应于列名中的分量的值,元组的输入顺序和列名表的顺序一致。基本表后如有列名表,必须包括关系的所有非空的属性,也自然应包括关键码属性。

例7.13 往基本表J中插入一个元组('J8', '地铁二号线', '上海')

INSERT INTO J(JNO,JNAME,CITY) VALUES('J8', '地铁二号线', '上海');

例7.14 假设供应商关系S的STATUS,ADDR属性允许空,插入一个新的供应商编号'S10',供应商名'光明零件厂'。

INSERT INTO S(SNO,SNAME) VALUES ('S10', '光明零件厂'); ② 输入多个元组

句法:INSERT INTO 基本表名(列名表)VALUES(元组值),(元组值),… 例7.15 往SPJ中连续插入三个元组

INSERT INTO SPJ VALUES(('S3','P2','J8',23.3,1500),('S2','Pl','J8',33.4,50),('S3', 'P5', 'J8',34.5,80));

(2)数据删除

句法:DELETE FROM <表名> WHERE <条件表达式> 例7.16 删除工程号为J4的所有零件供应记录。 DELETE FROM SPJ WHERE JNO='J4';

注意,DELETE语句只能从一个关系中删除元组,而不能一次从多个关系中删除元组。要删除多个元组,就要写多个DELETE语句。 (3)数据修改

当需要修改指定关系中元组的某些值时,用如下语句:

UPDATE 基本表名 SET 列名=值表达式[,列名=值表达式…] [WHERE 条件表达式]

该语句的意义是:修改指定表中满足条件表达式的元组中的指定属性值,其中SET子句用于指定修改方法,即用(表达式)的值取代相应的属性列值。如果省略WHERE子句,表示要修改表中的所有元组。

例7.17 将供应商S4提供的零件P2的价格提高6%

UPDATE SPJ SET PRICE=PRICE*1.06 WHERE SNO='S4' AND PNO='P2';

六、SQL的数据控制(DCL)

现在的数据库系统大都提供了非常完善的安全机制,一般采用基于角色的(就是根据用户的特性,把用户分为不同的类别。如管理员、数据库备份管理员、数据库用户管理员、普通用户等。不同数据库系统的用户角色不完全相同)多级授权安全机制,所有对数据库的操作都需要更高一级的授权,任何级别的用户在使用数据库系统时,除了必须拥有的授权外,还必须提供正确的用户名和用户口令。在数据库系统中,数据库系统管理员DBA负责完成整个系统的管理工作,获得DBA授权的用户可以创建数据库、表等而成为这些数据库对象的拥有者。拥有者对自己所拥有的对象有完全控制权,同时拥有者也可以授权其他用户使用其所拥有的对象,当然,也可以收回授权。

SQL的数据控制功能是指控制用户对数据的存取权力,语句有两条:授权语句(GRANT)和收权语句(REVOKE)。顾名思义,授权语句是使某个用户具有某些权限,收权语句是收回已授给用户的权限。用户对数据的存取操作包括:增(INSERT)、删(DELETE)、改(UPDATE)、查(SELECT)。只有被授以了某项操作的权限的用户才能进行某项操作。

例7.18 假设把对表LTemp的所有操作权限授权给用户LUSER GRANT ALL ON LTemp TO LUSER;

例7.19假设只把查看(即SELECT)的权限授权给用户LUSER GRANT SELECT ON Ltemp TO LUSER;

例7.20 赋予用户LUSER的对表LTemp的更新权(包括INSERT、UPDATE、DELETE)收回

REVOKE INSERT,UPDATE,DELETE ON Ltemp FROM LUSER;

本文来源:https://www.bwwdw.com/article/q9rx.html

Top