常用SQL语言语法格式

  • 格式:doc
  • 大小:53.00 KB
  • 文档页数:5

软件技术课程设计实验指导书第四篇附录目录附录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,SPJWHERE 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 分组字段HA VING 分组条件ORDER BY字段[ASC|DESC]其中:字段表部分包含了查询结果要显示的字段清单,字段之间用逗号分开。

要选择表中所有字段,可用星号“ ”代替。

如果所选定的字段要更名,可在该字段后用AS[新名]实现。

FROM子句用于指定一个或多个表。

如果所选的字段来自不同的表,则字段名前应加表名前缀。

WHERE子句用于限制记录的选择。

构造查询条件可使用大多数的Visual Basic内部函数和运算符,以及SQL特有的运算符构成表达式。

GROUP BY和HA VING子句用于分组和分组过滤处理。

它能把在指定字段列表中有相同值的记录合并成一条记录。

如果在SELECT语句中含有SQL合计函数,例如SUM或COUNT,那么就为每条记录创建摘要值。

在GROUP BY字段中的NULL值会被分组,并不省略。

但是,在任何SQL合计函数中都计算NULL值。

可用WHERE子句来排除不想分组的行,将记录分组后,也可用HA VING子句来筛选它们。

一旦GROUP BY完成了记录分组,HA VING就显示由GROUP BY子句分组的、且满足HA VING子句条件的所有记录。

HA VING子句与已确定要选中哪些记录的WHERE子句类似。

ORDER BY子句决定了查找出来的记录的排列顺序。

在ORDER BY子句中,可以指定一个或多个字段作为排序键,ASC选项代表升序,DESC代表降序。

在SELECT语句中,SELECT和FROM子句是必须的。

可在SELECT子句内使用合计函数对记录进行操作,它返回一组记录的单—值。

例如,A VG 函数可以返回记录集的特定字段中所有值的平均数。

用到了字符串匹配操作符LIKE。

LIKE谓词的一般形式是:列名LIKE 字符串常数这里,列名的类型必须是字符串或可变字符串。

在字符串常数中字符的含义如下:%(百分号):表示可以与任意长度(可以为零)的字符串匹配。

_(下划线):表示可以与任意单个字符匹配。

所有其他的字符只代表自己。

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

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

(4)合计函数SQL 提供了下列合计函数(表7.15)2.SQL的数据更新SQL的数据更新包括数据插入、数据修改和数据删除等操作。

(1)数据插入SQL的数据插入语句INSERT有两种形式。

①输入单个元组句法:INSERT INTO 基本表名(列名表) V ALUES (元组值)V ALUES后的元组值中列的顺序必须同基本表的列名表一一对应。

如基本表后不跟列名表,表示在V ALUES后的元组值中提供插入元组的每个分量的值,分量的顺序和关系模式中列名的顺序一致。

如基本表后有列名表,则表示在V ALUES后的元组值中只提供插入元组对应于列名中的分量的值,元组的输入顺序和列名表的顺序一致。

基本表后如有列名表,必须包括关系的所有非空的属性,也自然应包括关键码属性。

例7.13 往基本表J中插入一个元组('J8', '地铁二号线', '上海')INSERT INTO J(JNO,JNAME,CITY) V ALUES('J8', '地铁二号线', '上海');例7.14 假设供应商关系S的STA TUS,ADDR属性允许空,插入一个新的供应商编号'S10',供应商名'光明零件厂'。

INSERT INTO S(SNO,SNAME)V ALUES ('S10', '光明零件厂');②输入多个元组句法:INSERT INTO 基本表名(列名表)V ALUES(元组值),(元组值),…例7.15 往SPJ中连续插入三个元组INSERT INTO SPJ V ALUES(('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)现在的数据库系统大都提供了非常完善的安全机制,一般采用基于角色的(就是根据用户的特性,把用户分为不同的类别。

如管理员、数据库备份管理员、数据库用户管理员、普通用户等。