完美WORD格式
`
Sage SMALLINT CHECK(Sage>0) Sdept CHAR(20) ) CREATE TABLE Course ( Cno CHAR(4) PRIMARY KEY, Cname CHAR(40), Cpno CHAR(4) REFERENCES Course(Cno), Ccredit SMALLINT, CHECK (Ccredit >0) ) CREATE TABLE sc ( Sno CHAR(9), Cno CHAR(4) , Grade SMALLINT, PRIMARY KEY (Sno,Cno),//注意一定要有括号 FOREIGN KEY(Sno) REFERENCES Course(Cno),//sno一定要有括号 )
(4)说明
1)列约束:在每个列后定义,可以有多个约束子句,不能定义多个列上的约束
2)表约束:在全部列定义完成后定义,可以有多个约束子句,多个列上的约束必须使用表约束,单列上的约束可以用列约束,也可用表约束 2表的删除
DROP TABLE <表名>[CASCADE | RESTRICT]
(1)CASCADE(级联)删除该表没有任何限制,删除表的同时,相关的依赖对象(如视
图)也一起删除。
(2)RESTRICT(限制)删除该表是有限制条件的。欲删除的表不能被其他表的约束所引
用 (如CHECK,FOREIGN KEY等约束),不能有视图,不能有触发器(trigger),不能存储过程或函数。 (3)缺省情况下是RESTRICT 3 表的修改
ALTER TABLE <表名>
[ADD <列名><数据类型>[完整性约束]] | [MODIFY <列名><数据类型>[完整性约束]] | [DROP COLUMN <列名>] | [ADD<表约束>] |
[DROP CONSTRAINT <约束名>] 例如
(1)ALTER TABLE Student
ADD Dept Varchar2(10)UNIQUE (2)Alter Table Student
DROP COLUMN age (3)AlLTER TABLE Student
MODIFYage number(3) NOT NULL
(4)ALTER TABLE Student
ADD CONSTRAINT PK_Student PRIMARY KEY(S#)
(5)ALTER TABLE SC DROP CONSTRAINT FK_SC (三)视图的定义和删除
专业整理分享
完美WORD格式
1视图的定义
CREATE VIEW <视图名>(列名1,列名2,…)//列名一定要放在括号里 AS <查询>
[WITH CHECK OPTION |WITH READ ONLY]
例如:CREATE VIEW cs_view (sno, name, age)
AS SELECT s#, sname, age FROM student
WHERE Dept = ‘计算机系‘ WITH READ ONLY;
(1)WITH CHECK OPTION表示对视图进行UPTATE,INSERT,DELETE操作时要保证
更新,插入,删除的行满足视图定义中的谓词条件(即子查询中的条件表达式) WITH READ ONLY表示视图是只读的
(2)视图的属性列名只能是全部缺省或全部指定,没有别的选择。但在下列两种情况下必
须明确指定组成视图的列名。
1)某个目标列不是单纯的属性名,而是聚集函数或列表达式。 2)多表连接时选出几个同名列作为视图的字段。 (3)子查询可以是任意的SELECT子句,但通常不允许含有OREER BY 子句各DISDINCT
短语。
(4)不是所有视图都是可更新的 1)基于联接查询的视图不可更新 2)使用了函数的视图不可更新 3)使用了分组操作的视图不可更新
4)只有建立在单个表上而且没有使用函数的视图才是可更新的
2 视图的删除 DROP VIEW <视图名> [CASCADE] (四)索引的定义和删除
1索引的定义
CREATE [ UNIQUE | CLUSTER ] INDEX <索引名> ON <表名> (<列名> [ <次序>] [ ,<列名> [<次序>] ]… )
例如:CREATE UNIQUE INDEX SCno on SC(Sno ASC,Cno DESC); (1)UNIQUE表明此索引的每一个索引值只对应唯一的数据记录 (2)CLUSTER表示要建立的索引是聚簇索引。
聚簇索引是指索引项的顺序与表中的物理顺序一致的索引组织,在一个表上只能建立一个聚簇索引。
(3)次序可选ASC(升序)或DESC(降序)缺省值为ASC
2索引的删除
DROP INDEX <索引名> DROP INDEX SCno; 三 数据更新 (一)插入数据 INSERT插入数据通常有两种形式,一种是插入一个元组,另一种是插入子查询结果。后者可以一次插入多个元组。 1 插入一个元组 INSERT INTO <表名> [ ( < 属性列1 >[,< 属性列2 >])]
专业整理分享
完美WORD格式
VALUES(< 常量1 > [,< 常量2 >]) 例如 INSERT INTO Student (Sno, Sname, Ssex, Sdept, Sage) VALUES (‘20081512’, ‘陈冬’ , ‘男’ , ‘IS’ , 18);
INTO 语句中没有出现的属性列,新元组在这些列上将取空值或默认值。
在INTO子句中只指出了表名,没有指出属性名,新元组要在所有属性列上都指定值,属性列的次序与CREATE TABLE 中的次序相同。 2 插入子查询结果 INSERT INTO <表名> [ ( < 属性列1 >[,< 属性列2 >])] 子查询; 例如 INSERT INTO Dept_age( Sdept ,Avg_age) SELECT Sdept ,AVG(Sage) FROM Student GROUP BY Sdept; (二)修改数据 UPDATE <表名>
SET <列名>=<表达式>[,<列名>=<表达式>]… [ WHERE <条件>];
例如:UPDATE Student SET Sage=22 WHERE Sno=’200215021’; (三)删除数据 DELETE FROM<表名> [WHERE <条件>]; 例如:DELETE FROM Student WHERE Sno=’20021528’; DELETE语句删除的是表中的数据,而不是关于表的定义。 四 数据查询
基本数据查询的格式:
SELECT [ ALL | DISTINCT] < 目标列表达式 >AS< 别名>[,<标列表达式>AS<别名>]… FROM <名或视图名>[,<表名或视图名>]… [WHERE<查询表达式>]
[GROUP BY <列名1>][HAVING<条件表达式>]] [ORDER BY <列名2>][ASC|DESC]; (一)单表查询 在一个表中查询数据
专业整理分享
完美WORD格式
1* 查询
查询全部记录:查询全部的学生信息 SELECT * FROM Student; *表示所有列 等同于
SELECT s#, sname, age, sex FROM Student 2使用别名(AS或空格) 使用别名:查询所有学生的学号和姓名
SELECT s# AS 学号, sname AS 姓名 FROM Student 如果别名包含空格,须使用双引号
SELECT s# AS “Student Number” FROM Student
3表达式查询(三种表达式,字符串表达式,算术表达式,函数表达式) (1)字符串表达式
查询所有学生的学号、姓名和出生年份,返回两列信息,其中一列是“学号:姓名”,另一列是出生年份
SELECT s# || “:”|| sname AS 学生,2003-age AS 出生年份 FROM Student 说明
连接字符串 || 表示则多个查询列连接为一个列输出。 (2)算术表达式 查询学生的出生年份
SELECT 2003-age AS 出生年份 FROM Student; (3)函数表达式
SELECT sno, to_char(birth, ‘mm-dd-yyyy’) AS birthday FROM Student SELECT Count(sno) As 学生人数 FROM Student 4条件查询
(1)WHERE条件 注:
1)在where子句中使用列名和表达式,但不能使用别名。
2)在where子句中使用数值时,既可以用单引号也可以不用单引号,使用日期值 字符值时,都必须使用单引号,并且日期值的格式必须要符合数据库中支持的日 期格式,否则必须事先使用to_date函数将其转换成为数据库中支持的日期格式。 oracle 中日期的默认格式为: 01-1月-82
在输入查询条件时,可以用to_date(‘1998’-01-01,’yyyy-mm-dd’)
专业整理分享
完美WORD格式
3)在SQL语句中,命令不区分大小写,但字符串区分大小写 WHERE子句中的关系运算符: 比较操作符:>, <, >=, <=, =, <> 逻辑操作符:AND OR NO 其他操作符: IN
BETWEEN AND
IS NULL和IS NOT NULL LIKE EXISTS 例如: 1)IN:查询‘s001’,’s003’,’s006’和’s008’四学生的信息 SELECT * FROM Student
WHERE s# IN (‘s001’,’s003’,’s006’,’s008’)
2)IS [NOT] NULL:查询缺少年龄数据的学生 SELECT * FROM Student WHERE age IS NULL
LIKE:查询姓名的第一个字母为‘R’的学生
SELECT * FROM Student WHERE sname LIKE ‘R%’ %:任意长度的字符串
_:单个字符(一个汉字占两个字节)
注意:LIKE只能用于字符串的匹配,不能用于其他类型。
查询姓名的第一个字母为‘R’并且倒数第二个字母为‘S’的学生 SELECT * FROM Student WHERE sname LIKE ‘R%S_’ 多个比较式可用NOT、AND和OR连接 SELECT * FROM Student
WHERE age IS NULL and sname LIKE ‘R%’
3)若要查询通配符可以用转义字符 escape character 通常 character 用 \\ (2)去除重复记录(DISTINCT) 查询学生的姓名
SELECT Distinct sname FROM Student
DISTINCTt只对记录有效,不针对某个特定列 SELECT Distinct sname, age FROM Student (3)排序查询(ORDER BY) 注:
1)order by只能对最终查询结果进行排序,也就是说其只能放在查询语句的最后一条。 2)可以使用列的别名,列的位置进行排序。
3)在大多数情况下,指定的排序列(order by 列名)都是选择列(select 列名),但排序 列也可以不是选择列。但如果在select 语句中使用了distinct关键字,则排序列必须 是选择列了。
查询所有学生信息并将结果按年龄升序排列 SELECT * FROM Student ORDER By age 将结果按年龄升序排列,按姓名降序排列 SELECT * FROM Student
ORDER By age ASC,sname DESC
专业整理分享