200 likes | 390 Views
ORACLE. 单元五 数据库的查询和视图. 数据库的查询和视图. 1. select 案例:查询数据库的 XS 表中各个同学的 XM 、 XH 和 ZXF 。 SELECT XH, XM,ZXF FROM XS; 案例:查询 XS 表中 ZXF 大于 45 同学的 XH 、 XM 和 ZXF 。 SELECT XH,XM,ZXF FROM XS WHERE ZXF>45;. 数据库的查询和视图. 1. select 案例:查询 XS 表中的所有列。
E N D
数据库的查询和视图 1.select 案例:查询数据库的XS表中各个同学的XM、XH和ZXF。 SELECT XH, XM,ZXF FROM XS; 案例:查询XS表中ZXF大于45同学的XH、XM和ZXF。 SELECT XH,XM,ZXF FROM XS WHERE ZXF>45;
数据库的查询和视图 1.select 案例:查询XS表中的所有列。 SELECT * FROM XS; 该语句等价于语句: SELECT XH,XM,ZYM,XB,CSSJ,ZXF,BZ FROM XS; 案例:查询XS表中计算机同学的XH、XM和ZXF,结果中各列的标题分别 指定为学号、姓名和总学分。 SELECT XH AS 学号,XM AS 姓名,ZXF AS 总学分 FROM XS WHERE ZYM=’计算机’;
数据库的查询和视图 1.select 案例:对XSCJ数据库的XS表只选择ZYM和ZXF,消除结果集中的重复行。 SELECT DISTINCT ZYM AS 专业名,ZXF AS 总学分 FROM XS; 案例:(1) 查询XSH数据库CP表中库存量在500以上的产品情况。 SELECT *FROM CP WHERE KCL >500; (2) 查询XSCJ数据库XS表中通信工程专业总学分大于等于42的同学的情况。 SELECT *FROM XS WHERE ZYM=’ 通信工程’ and ZXF>=42;
数据库的查询和视图 1.select 模式匹配 LIKE谓词用于指出一个字符串是否与指定的字符串相匹配,其运算对象可以是char、varchar2和date类型的数据,返回逻辑值TRUE或FALSE。 案例:查询XSH数据库CP表中产品名含有“冰箱”的产品情况。 SELECT * FROM CP WHERE CPMC LIKE ‘%冰箱%’;
数据库的查询和视图 1.select 范围比较 用于范围比较的关键字有两个:BETWEEN和IN。 当要查询的条件是某个值的范围时,可以使用BETWEEN关键字。BETWEEN关键字指出查询范围 案例:(1)查询XSH数据库CP表中价格在2000元与4000元之间的产品情况。 SELECT * FROM CP WHERE JG BETWEEN 2000 AND 4000; (2) 查询XSCJ数据库XS表中不在1985年出生的学生情况。 SELECT * FROM XS WHERE CSSJ NOT BETWEEN TO_DATE(‘19850101’,’YYYYMMDD’) and TO_DATE(‘19851231’,’YYYYMMDD’);
数据库的查询和视图 1.select 范围比较 用于范围比较的关键字有两个:BETWEEN和IN。 当要查询的条件是某个值的范围时,可以使用BETWEEN关键字。BETWEEN关键字指出查询范围 案例:查询XSH数据库CP表中库存量为“200”、“300”和“500”的情况。 SELECT * FROM CP WHERE KCL IN (200,300,500); 该语句与下列语句等价: SELECT * FROM CP WHERE KCL=200 OR KCL=300 OR KCL=500;
数据库的查询和视图 1.select 子查询 在查询条件中,可以使用另一个查询的结果作为条件的一部分,例如判定列值是 否与某个查询的结果集中的值相等,作为查询条件一部分的查询称为子查询。 PL/SQL允许SELECT多层嵌套使用,用来表示复杂的查询。子查询除了可以用 在SELECT语句中,还可以用在INSERT、UPDATE及DELETE语句中。 子查询通常与IN、EXIST谓词及比较运算符结合使用。
数据库的查询和视图 1.select 查找未选修离散数学的学生的情况。嵌套 SELECT XH,XM,ZYM,ZXF FROM XS WHERE XH NOT IN ( SELECT XH FROM XS_KC WHERE KCH IN ( SELECT KCH FROM KC WHERE KCM = '离散数学' ) );
数据库的查询和视图 1.select 比较子查询 这种子查询可以认为是IN子查询的扩展,它使表达式的值与子查询的结果进行比较运算。 ALL指定表达式要与子查询结果集中的每个值都进行比较,当表达式与每个值都满 足比较的关系时,才返回TRUE,否则返回FALSE;SOME或ANY表示表达式只要 与子查询结果集中的某个值满足比较的关系时,就返回TRUE,否则返回FALSE。
数据库的查询和视图 1.select 比较子查询 案例:查找比所有计算机系学生年龄都大的学生。 SELECT * FROM XS WHERE CSSJ <ALL ( SELECT CSSJ FROM XS WHERE ZYM= '计算机' );
数据库的查询和视图 1.select 比较子查询 案例:查找课程号206的成绩不低于课程号101的最低成绩的学生的学号。 SELECT XH FROM XS_KC WHERE KCH = '206' AND CJ>= ANY ( SELECT CJ FROM XS_KC WHERE KCH = '101' );
数据库的查询和视图 1.select EXISTS子查询 EXISTS谓词用于测试子查询的结果是否为空表,若子查询的结果集不为空,则EXISTS返回TRUE,否则返回FALSE。EXISTS还可与NOT结合使用,即NOT EXISTS,其返回值与EXIST刚好相反。 案例:查找选修206号课程的学生姓名。 SELECT XM FROM XS WHERE EXISTS ( SELECT * FROM XS_KC WHERE XH=XS.XH AND KCH=‘206’ );
数据库的查询和视图 2. 视图 视图是从一个或多个表(或视图)导出的表。 视图与表(有时为与视图区别,也称表为基表——Base Table)不同,视图是一个虚表,即视图所对应的数据不进行实际存储,数据库中只存储视图的定义,对视图的数据进行操作时,系统根据视图的定义去操作与视图相关联的基表。
数据库的查询和视图 2. 视图 视图一经定义以后,就可以象表一样被查询、修改、删除和更新。使用视图有下列优点: (1) 为用户集中数据,简化用户的数据查询和处理。 (2) 屏蔽数据库的复杂性。 (3) 简化用户权限的管理。 (4) 便于数据共享。 (5) 可以重新组织数据以便输出到其它应用程序中。
数据库的查询和视图 2. 视图 使用CREATE VIEW语句创建视图。 案例:创建CS_KC视图,包括计算机专业各学生的学号、其选修的课程号及成绩。要保证对该视图的修改都要符合专业名为计算机这个条件。 CREATE OR REPLACE VIEW CS_KC AS SELECT XS.XH,KCH,CJ FROM XS,XS_KC WHERE XS.XH=XS_KC.XH AND ZYM= '计算机' WITH CHECK OPTION;
数据库的查询和视图 2. 视图 使用CREATE VIEW语句创建视图。 案例:创建计算机专业学生的平均成绩视图CS_KC_AVG,包括学号(在视图中列名为num)和平均成绩(在视图中列名为score_avg)。 CREATE OR REPLACE VIEW CS_KC_AVG(num,score_avg) AS SELECT XH,AVG(CJ) FROM XS_KC GROUP BY XH;
数据库的查询和视图 2. 视图 SELECT语句查询视图 案例:查找计算机专业的学生学号和选修的课程号。 SELECT XH,KCH FROM CS_KC; 案例:查找平均成绩在80分以上的学生的学号和平均成绩。 本例首先创建学生平均成绩视图XS_KC_AVG,包括学号(在视图中列名为num)和平均成绩(在视图中列名为score_avg)。 CREATE OR REPLACE VIEW XS_KC_AVG ( num,score_avg ) AS SELECT XH,AVG(CJ) FROM XS_KC GROUP BY XH; 再对XS_KC_AVG视图进行查询。 SELECT * FROM XS_KC_AVG WHERE score_avg>=80;
数据库的查询和视图 2. 视图 SELECT语句查询视图 案例:查找计算机专业的学生学号和选修的课程号。 SELECT XH,KCH FROM CS_KC; 案例:查找平均成绩在80分以上的学生的学号和平均成绩。 本例首先创建学生平均成绩视图XS_KC_AVG,包括学号(在视图中列名为num)和平均成绩(在视图中列名为score_avg)。 CREATE OR REPLACE VIEW XS_KC_AVG ( num,score_avg ) AS SELECT XH,AVG(CJ) FROM XS_KC GROUP BY XH; 再对XS_KC_AVG视图进行查询。 SELECT * FROM XS_KC_AVG WHERE score_avg>=80;