oracle10g经典实战第4章 数据库的查询和视图7894.pptx
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《oracle10g经典实战第4章 数据库的查询和视图7894.pptx》由会员分享,可在线阅读,更多相关《oracle10g经典实战第4章 数据库的查询和视图7894.pptx(94页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第4章章 数据库的查询和视图数据库的查询和视图 4.1连接、选择和投影连接、选择和投影 Oracle是一个关系数据库管理系统,关系数据库建立在关系模型基础之上,具有严格的数学理论基础。关系数据库对数据的操作除了包括集合代数的并、差等运算之外,还定义了一组专门的关系运算:连接、选择和投影,关系运算的特点是运算的对象和结果都是表。4.1.1选择选择 选择(Selection),简单的说就是通过一定的条件把自己所需要的数据检索出来。选择是单目运算,其运算对象是一个表。该运算按给定的条件,从表中选出满足条件的行形成一个新表,作为运算结果。4.1.1选择选择 【例【例4.1】学生情况表如表4.1所示。
2、若要在学生情况表中找出学生表中性别为女且平均成绩在80分以上的行形成一个新表,该选择运算的结果如表4.2所示。表表4.1 学生表学生表 表表4.2 查询后的结果查询后的结果4.1.2投影投影 投影(Projection)也是单目运算。投影就是选择表中指定的列,这样在查询结果中只显示指定数据列,减少了显示的数据量也提高查询的性能。【例【例4.2】若在表4.1中对“姓名”和“平均成绩”投影,该查询得到如表4.3所示的新表。表表4.3 投影后的新表投影后的新表4.1.3连接连接连接(JOIN)是把两个表中的行按照给定的条件进行拼接而形成新表。【例【例4.3】若表A和B分别如表4.4和表4.5所示,则
3、连接后结果如表4.6所示。表表4.4 A表表表表4.5 B表表表表4.6 连接后的表连接后的表4.1.3连接连接 【例【例4.4】若表A和表B分别如表4.7和表4.8所示,自然连接后的新表C如表4.9所示。表表4.7 A表表 表表4.8 B表表 表表4.9 C表表 4.2 数据库的查询数据库的查询 使用数据库和表的主要目的是存储数据以便在需要时进行检索、统计或组织输出,通过PL/SQL的查询可以从表或视图中迅速方便地检索数据。PL/SQL的SELECT语句可以实现对表的选择、投影及连接操作,其功能十分强大。下面介绍SELECT语句,它是PL/SQL的核心。SELECT语句很复杂,主要的子句如下
4、:语法格式:语法格式:SELECT select_list /*指定要选择的列或行及其限定*/FROM table_source /*FROM子句,指定表或视图*/WHERE search_condition /*WHERE子句,指定查询条件*/GROUP BY group_by_expression /*GROUP BY子句,指定分组表达式*/HAVING search_condition /*HAVING子句,指定分组统计条件*/ORDER BY order_expression ASC|DESC /*ORDER 子句,指定排序表达式和顺序*/4.2.1选择列选择列选择表中的列组成结果表,
5、通过SELECT语句的SELECT子句来表示。语法格式:语法格式:SELECT ALL|DISTINCT 其中select_list指出了结果的形式,select_list的主要格式为:*/*选择当前表或视图的所有列*/|table_name|view_name|table_alias .*/*选择指定的表或视图的所有列*/|colume_name|expression AS column_alias /*选择指定的列*/|column_alias=expression /*选择指定列并更改列标题*/,n 1.选择一个表中指定的列选择一个表中指定的列使用SELECT语句选择一个表中的某些列,各
6、列名之间要以逗号分隔。语法格式:语法格式:SELECT column_name ,column_name FROM table_name WHERE search_condition其功能是在FROM子句指定的表中检索符合search_condition条件的列。4.2.1选择列选择列【例【例4.5】查询XSCJ数据库的XS表中各个同学的XM、XH和ZXF。SELECT XH,XM,ZXF FROM XS;执行结果如图4.1所示。图图4.1 在在XS表中选择列表中选择列 4.2.1选择列选择列【例【例4.6】查询XS表中ZXF大于45同学的XH、XM和ZXF。SELECT XH,XM,ZXF
7、FROM XS WHERE ZXF45;当在SELECT语句指定列的位置上使用*号时,表示选择表的所有列。【例【例4.7】查询XS表中的所有列。SELECT*FROM XS;该语句等价于语句:SELECT XH,XM,ZYM,XB,CSSJ,ZXF,BZ FROM XS;其执行后将列出XS表中的所有数据。4.2.1选择列选择列2.修改查询结果中的列标题修改查询结果中的列标题当希望查询结果中的某些列或所有列显示时使用自己选择的列标题时,可以在列名之后使用AS子句来更改查询结果的列标题名,其中column_alias是指定的列标题。【例【例4.8】查询XS表中计算机同学的XH、XM和ZXF,结果中
8、各列的标题分别指定为学号、姓名和总学分。SELECT XH AS 学号,XM AS 姓名,ZXF AS 总学分FROM XSWHERE ZYM=计算机;该语句的执行结果如图4.2所示。更改查询结果中的列标题可以省略AS关键字。例如:SELECT XH 学号,XM 姓名,ZXF 总学分FROM XSWHERE ZYM=计算机;4.2.1选择列选择列图图4.2更改查询结果中的列标题更改查询结果中的列标题 4.2.1选择列选择列3.计算列值计算列值使用SELECT对列进行查询时,在结果中可以输出对列值计算后的值,即SELECT子句可使用表达式作为结果,格式为:SELECT expression ,e
9、xpression【例【例4.9】创建产品销售数据库XSH,并在其中创建产品表CP,其表结构如表4.10所 表表4.10 CP表结构表结构 4.2.1选择列选择列设CP表中已有如表4.11所示的数据。表表4.11 CP表表 4.2.1选择列选择列下列语句将列出产品名称和产品总值:SELECT CPMC AS 产品名称,JG*KCL AS产品总值FROM CP;该语句的执行结果如图4.3所示。图图4.3 计算列值计算列值4.2.1选择列选择列4.消除结果集中的重复行消除结果集中的重复行【例【例4.10】对XSCJ数据库的XS表只选择ZYM和ZXF,消除结果集中的重复行。SELECT DISTIN
10、CT ZYM AS 专业名,ZXF AS 总学分FROM XS;该语句执行的结果为:专业名 总学分计算机 48计算机 50计算机 52计算机 54通信工程 40通信工程 42通信工程 44通信工程 50与DISTINCT相反,当使用关键字ALL时,将保留结果集的所有行。4.2.1选择列选择列【例【例4.11】以下的SELECT语句对XSCJ数据库的XS表选择ZYM和ZXF,不消除结果集中的重复行。SELECT ALL ZYM AS 专业名,ZXF AS 总学分FROM XS;该语句执行后结果为:专业名 总学分计算机 50计算机 50计算机 50计算机 50计算机 54计算机 52计算机 50计
11、算机 50计算机 50计算机 48计算机 50通信工程 42通信工程 40通信工程 42通信工程 42通信工程 44通信工程 42通信工程 42通信工程 42通信工程 42通信工程 42通信工程 504.2.2选择行选择行1.表达式比较表达式比较比较运算符用于比较两个表达式值,共有7个,分别是:=(等于)、(小于)、(大于)、=(大于等于)、(不等于)、!=(不等于)。比较运算的格式为:expression =|=|!=expression当两个表达式值均不为空值(NULL)时,比较运算返回逻辑值TRUE(真)或FALSE(假);而当两个表达式值中有一个为空值或都为空值时,比较运算将返回UNK
12、NOWN。【例【例4.12】(1)查询XSH数据库CP表中库存量在500以上的产品情况。SELECT*FROM CP WHERE KCL 500;(2)查询XSCJ数据库XS表中通信工程专业总学分大于等于42的同学的情况。SELECT*FROM XS WHERE ZYM=通信工程 and ZXF=42;4.2.2选择行选择行2.模式匹配模式匹配LIKE谓词用于指出一个字符串是否与指定的字符串相匹配,其运算对象可以是char、varchar2和date类型的数据,返回逻辑值TRUE或FALSE。LIKE谓词表达式的格式为:string_expression NOT LIKE string_exp
13、ression【例【例4.13】查询XSH数据库CP表中产品名含有“冰箱”的产品情况。SELECT*FROM CP WHERE CPMC LIKE%冰箱%;执行结果为:CPBH CPMC JG KCL10001100 冰箱A_100 1500.050010002120冰箱A_200 1850.020010001200冰箱B_200 1600.0120010001102 冰箱C_210 1890.0 6004.2.2选择行选择行【例【例4.14】查询XSCJ数据库XS表中姓“王”且单名的学生情况。SELECT*FROM XS WHERE XM LIKE 王_;执行结果为:XH XM ZYM XB
14、 CSSJ ZXFBZ061101 王林 计算机 男10-二月-8650061103 王燕 计算机 女06-十月-8550061201王敏 通信工程 男10-六月-8442061202王林 通信工程 男29-一月-8540有一门课不及格,待补考3.范围比较范围比较用于范围比较的关键字有两个:BETWEEN和IN。当要查询的条件是某个值的范围时,可以使用BETWEEN关键字。BETWEEN关键字指出查询范围,格式为:expression NOT BETWEEN expression1 AND expression2当不使用NOT时,若表达式expression的值在表达式expression1与
15、expression2之间(包括这两个值),则返回TRUE,否则返回FALSE;使用NOT时,返回值刚好相反。注意注意:expression1的值不能大于expression2的值。4.2.2选择行选择行【例【例4.15】(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
16、(19851231,YYYYMMDD);使用IN关键字可以指定一个值表,值表中列出所有可能的值,当表达式与值表中的任一个匹配时,即返回TRUE,否则返回FALSE。使用IN关键字指定值表的格式为:expression IN(expression,n)【例【例4.16】查询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;4.2.2选择行选择行4.空值比较空值比较当需要判定
17、一个表达式的值是否为空值时,使用IS NULL关键字,格式为:expression IS NOT NULL当不使用NOT时,若表达式expression的值为空值,返回TRUE,否则返回FALSE;当使用NOT时,结果刚好相反。【例【例4.17】查询XSCJ数据库中总学分尚不定的学生情况。SELECT*FROM XS WHERE ZXF IS NULL;4.2.2选择行选择行5.子查询子查询在查询条件中,可以使用另一个查询的结果作为条件的一部分,例如判定列值是否与某个查询的结果集中的值相等,作为查询条件一部分的查询称为子查询。PL/SQL允许SELECT多层嵌套使用,用来表示复杂的查询。子查询
18、除了可以用在SELECT语句中,还可以用在INSERT、UPDATE及DELETE语句中。子查询通常与IN、EXIST谓词及比较运算符结合使用。(1)IN子查询IN子查询用于进行一个给定值是否在子查询结果集中的判断,格式为:expression NOT IN (subquery)其中subquery是子查询。当表达式expression与子查询subquery的结果表中的某个值相等时,IN谓词返回TRUE,否则返回FALSE;若使用了NOT,则返回的值刚好相反。4.2.2选择行选择行【例【例4.18】在XSCJ数据库中有描述课程情况的表KC和描述学生成绩表的表XS_KC(表的结构和样本数据见附
19、录A)。查找选修了课程号为101的课程的学生的情况:SELECT*FROM XSWHERE XH IN (SELECT XH FROM XS_KC WHERE KCH=101);在执行包含子查询的SELECT语句时,系统先执行子查询,产生一个结果表,再执行查询。本例中,先执行子查询:SELECT XH FROM XS_KC WHERE KCH=101;得到一个只含有学号列的表,XS_KC中课程名列值为101的行在结果表中都有一行。再执行外查询,若XS表中某行的学号列值等于子查询结果表中的任一个值,则该行就被选择。4.2.2选择行选择行【例【例4.19】查找未选修离散数学的学生的情况。SELEC
20、T XH,XM,ZYM,ZXF FROM XS WHERE XH NOT IN (SELECT XH FROM XS_KC WHERE KCH IN (SELECT KCH FROM KC WHERE KCM=离散数学 );执行结果为:XH XM ZYM ZXF061201 王敏 通信工程 42061202 王林 通信工程 40061203 王玉民 通信工程 42061204 马琳琳 通信工程 42061206 李计 通信工程 42061210 李红庆 通信工程 44061216 孙祥欣 通信工程 42061218 孙研 通信工程 42061220 吴薇华 通信工程 42061221 刘燕敏
21、通信工程 42061241 罗林琳 通信工程 504.2.2选择行选择行2)比较子查询这种子查询可以认为是IN子查询的扩展,它使表达式的值与子查询的结果进行比较运算,格式为:expression|=|!=|ALL|SOME|ANY (subquery)其中expression为要进行比较的表达式,subquery是子查询。ALL、SOME和ANY说明对比较运算的限制。ALL指定表达式要与子查询结果集中的每个值都进行比较,当表达式与每个值都满足比较的关系时,才返回TRUE,否则返回FALSE;SOME或ANY表示表达式只要与子查询结果集中的某个值满足比较的关系时,就返回TRUE,否则返回FALS
22、E。4.2.2选择行选择行【例例4.20】查找比所有计算机系学生年龄都大的学生。SELECT*FROM XSWHERE CSSJ=ANY(SELECT CJ FROM XS_KC WHERE KCH=101);(3)EXISTS子查询EXISTS谓词用于测试子查询的结果是否为空表,若子查询的结果集不为空,则EXISTS返回TRUE,否则返回FALSE。EXISTS还可与NOT结合使用,即NOT EXISTS,其返回值与EXIST刚好相反。格式为:NOT EXISTS(subquery)4.2.2选择行选择行【例例4.22】查找选修206号课程的学生姓名。SELECT XM FROM XS WH
23、ERE EXISTS (SELECT*FROM XS_KC WHERE XH=XS.XH AND KCH=206);本例在子查询的条件中使用了限定形式的列名引用XS.XH,表示这里的学号列出自表XS。4.2.2选择行选择行【例例4.23】查找选修了全部课程的同学的姓名。SELECT XM FROM XS WHERE NOT EXISTS (SELECT*FROM KC WHERE NOT EXISTS (SELECT*FROM XS_KC WHERE XH=XS.XH AND KCH=KC.KCH );本例即查找没有一门功课不选修的学生。4.2.3查询对象查询对象前面介绍了SELECT的选择列
24、和行,这里介绍SELECT查询的对象(即数据源)的构成形式。【例【例4.24】查找001102号同学所选修的全部课程的同学的学号。本例即要查找这样的学号y,对所有的课程号x,若001102号同学选修了该课,那么y也选修了该课。SELECT DISTINCT XH FROM XS_KC CJ1 WHERE NOT EXISTS (SELECT*FROM XS_KC CJ2 WHERE CJ2.XH=001102 AND NOT EXISTS (SELECT*FROM XS_KC CJ3 WHERE CJ3.XH=CJ1.XH AND CJ3.KCH=CJ2.KCH );本例子指定SELECT语句
25、查询的对象是表。4.2.3查询对象查询对象【例【例4.25】在XS表中查找1986年1月1日以前出生的学生的姓名和专业名。SELECT XM,ZYM FROM (SELECT*FROM XS WHERE CSSJ=80;执行结果为:姓名 成绩 王燕 81 李方方 80 林一帆 87 张蔚 89有时用户所需要的字段来自两个以上的表,那么就要对两个以上的表进行连接,称之为多表连接。4.2.4连接连接【例【例4.29】查找选修了“计算机基础”课程且成绩在80分以上的学生学号、姓名、课程名及成绩。SELECT XS.XH,XM,KCM,CJ FROM XS,KC,XS_KC WHERE XS.XH=X
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- oracle10g经典实战第4章 数据库的查询和视图7894 oracle10g 经典 实战 数据库 查询 视图 7894
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内