第4章数据库的查询 和视 图2

上传人:w****i 文档编号:91076124 上传时间:2019-06-21 格式:PPT 页数:84 大小:1.39MB
返回 下载 相关 举报
第4章数据库的查询 和视 图2_第1页
第1页 / 共84页
第4章数据库的查询 和视 图2_第2页
第2页 / 共84页
第4章数据库的查询 和视 图2_第3页
第3页 / 共84页
第4章数据库的查询 和视 图2_第4页
第4页 / 共84页
第4章数据库的查询 和视 图2_第5页
第5页 / 共84页
点击查看更多>>
资源描述

《第4章数据库的查询 和视 图2》由会员分享,可在线阅读,更多相关《第4章数据库的查询 和视 图2(84页珍藏版)》请在金锄头文库上搜索。

1、第4章 数据库的查询和视图,4.1 连接、选择和投影,4.2 数据库的查询 ,4.3 数据库的视图,4.1 连接、选择和投影,4.1.1 选择 选择(Selection),简单地说就是通过一定的条件把自己所需要的数据检索出来。 选择运算对象是一个表。该运算按给定的条件,从表中选出满足条件的行形成一个新表,作为运算结果。,4.1.1 选择,若要在学生情况表中找出学生表中性别为女且平均成绩在80分以上的行形成一个新表,该选择运算的结果如下表所示。,查询后的结果,【例4.1】 学生情况表如下表所示。,学生表,4.1.2 投影,投影:从表中选出指定的属性值(列)组成一个新表。 【例4.2】 若在学生表

2、中对“姓名”和“平均成绩”投影,该查询得到如右表所示的新表。,投影后的新表,学生表,4.1.3 连接,连接(JOIN)是把两个表中的行按照给定的条件进行拼接而形成新表。 等值连接:连接条件,两个表的某些列值相等。 【例4.3】 若A表和B表分别如表4.4和表4.5所示,连接条件为T1=T3,则连接后结果如表4.6所示。,表4.4 A表,表4.5 B表,表4.6 连接后的表,4.1.3 连接,自然连接:要求两个表有共同的属性(列)。在参与操作的两个表的共同属性上进行等值连接后,再去除重复的属性后得到的新表。 【例4.4】 若A表和B表分别如表4.7和表4.8所示,自然连接后的新表D如表4.10所

3、示。,表4.7 A表,表4.8 B表,表4.10 D表,表4.9 C表,下面介绍SELECT语句,它是PL/SQL的核心。 SELECT语句复杂,主要的子句如下。 语法格式: SELECT select_list /*指定要选择的列及其限定*/ FROM table_source /*FROM子句,指定表或视图*/ WHERE search_condition /*WHERE子句,指定查询条件*/ GROUP BY group_by_expression /*GROUP BY子句,指定分组表达式*/ HAVING search_condition /*HAVING子句,指定分组统计条件*/ O

4、RDER BY order_expression ASC | DESC /*ORDER子句,指定排序表达式和顺序*/,4.2 数据库的查询,选择列 select_list 1. 选择指定的列 2. 定义列别名 3. 替换查询结果中的数据 4. 计算列值 5. 消除结果集中的重复行 6. 聚合函数(聚合函数常与GROUP BY联用),一些常用的聚合函数:,4.2.2 FROM子句,SELECT查询的对象(即数据源)的构成形式。 SELECT的查询对象由FROM子句指定,其格式为: FROM table_reference , table_reference 其中,table_reference:

5、 tbl_name AS tbl_name_alias /*查询表*/ | join_table /*连接表*/ 说明:table_reference指出了要查询的表或视图。,4.2.2 FROM子句,table_reference中可以包含一个或多个表. 引用一个表:可以用两种方式引用一个表。 1)第一种方式是使用USE语句让一个数据库成为当前数据库。 例:要显示数据库db2里的表tb的内容,使用如下语句: Use db2; SELECT * FROM tb; 2)第二种方式是指定的时候在表名前带上表所属数据库的名字。 例: 假设当前数据库是db1,现在要显示数据库db2里的表tb的内容,使

6、用如下语句: SELECT * FROM db2.tb;,4.2.2 FROM子句, 引用多个表: 连接(JOIN)是把两个表中的行按照给定的条件进行拼接而形成新表。 等值连接:连接条件,两个表的某些列值相等。 自然连接:要求两个表有共同的属性(列)。在参与操作的两个表的共同属性上进行等值连接后,再去除重复的属性后得到的新表。,SELECT ALL | DISTINCT | DISTINCTROW select_expr, . FROM 表名1,表名2 WHERE 表名1.列名1=表名2.列名1 注: 当查询来自多个表的信息时,需要指定一个表中的记录怎样能匹配其他表的记录。 使用where子句

7、基于列名值来匹配两个表中的记录。 当引用两个表相同列名时,要指定哪个表,把表名附在列名前。,4.2.2 FROM子句,【例4.21】 查找XSCJ数据库中所有学生选过的课程名和课程号,使用如下语句: SELECT DISTINCT KC.课程名, XS_KC.课程号 FROM KC, XS_KC WHERE KC.课程号=XS_KC.课程号; 执行结果如下:,4.2.3 WHERE子句,WHERE子句必须紧跟FROM子句之后,在WHERE子句中,指定查询条件。使用一个条件从FROM子句的中间结果中选取行。其基本格式为: WHERE where_definition 其中,where_defin

8、ition为查询条件。 expression = | | = | | | != expression /*比较运算*/ | match_expression NOT LIKE match_expression ESCAPE escape_character /*LIKE运算符*/ | expression NOT BETWEEN expression AND expression /*指定范围*/ | expression IS NOT NULL /*是否空值判断*/ | expression NOT IN ( subquery | expression ,n ) /*IN子句*/ | exp

9、ression = | | = | | | != ALL | SOME | ANY ( subquery ) /*比较子查询*/ | EXIST ( subquery ) /*EXIST子查询*/,4.2.3 WHERE子句,1. 比较运算 比较运算符用于比较两个表达式值,MySQL支持的比较运算符有:=(等于)、(大于)、=(大于等于)、(相等或都等于空)、(不等于)、!=(不等于)。 比较运算的语法格式为: expression = | | = | | | != expression 当两个表达式值均不为空值(NULL)时,除了“”运算符,其他比较运算返回逻辑值TRUE(真)或FALSE(

10、假);而当两个表达式值中有一个为空值或都为空值时,将返回UNKNOWN。,4.2.3 WHERE子句,【例4.32】 查询XSCJ数据库XS表中学号为081101的学生的情况。 SELECT 姓名,学号,总学分 FROM XS WHERE 学号=081101; 查询结果为:,【例4.33】 查询XS表中总学分大于50的学生的情况。 SELECT 姓名, 学号, 出生日期, 总学分 FROM XS WHERE 总学分50; 查询结果为:,4.2.3 WHERE子句,MySQL有一个特殊的等于运算符“”,当两个表达式彼此相等或都等于空值时,它的值为TRUE,其中有一个空值或都是非空值但不相等,这个

11、条件就是FALSE。没有UNKNOWN的情况。 【例4.34】 查询XS表中备注为空的同学的情况。 SELECT 姓名,学号,出生日期,总学分 FROM XS WHERE 备注NULL;,【例4.35】 查询XS表中专业为计算机,性别为女(0)的同学的情况。 SELECT 姓名,学号,性别,总学分 FROM XS WHERE 专业名=计算机 AND 性别=0; 查询结果为:,4.2.3 WHERE子句,2. 模式匹配 (1)LIKE运算符 LIKE运算符用于指出一个字符串是否与指定的字符串相匹配,返回逻辑值TRUE或FALSE。 LIKE谓词表达式的格式为: match_expression

12、NOT LIKE match_expression ESCAPEescape_character 使用LIKE进行模式匹配时,常使用特殊符号_和%,可进行模糊查询。“%”代表0个或多个字符,“_”代表单个字符。 escape_character:转义字符,escape_character 没有默认值,且必须为单个字符。当要匹配的字符串中含有与特殊符号(_和%)相同的字符时,此时应通过该字符前的转义字符指明其为模式串中的一个匹配字符。使用关键字ESCAPE可指定转义符。,【例4.36】 查询XSCJ数据库XS表中姓“王”的学生学号、姓名及性别。 SELECT 学号,姓名,性别 FROM XS W

13、HERE 姓名 LIKE 王%; 执行结果为:,4.2.3 WHERE子句,【例4.37】 查询XSCJ数据库XS表中学号倒数第二个数字为0的学生学号、姓名及专业名。 SELECT 学号,姓名,专业名 FROM XS WHERE 学号 LIKE %0_; 执行结果为:,4.2.3 WHERE子句,如果我们想要查找特殊符号中的一个或全部(_和%),我们必须使用一个转义字符。 【例4.38】 查询XS表中名字包含下画线的学生学号和姓名。 SELECT 学号,姓名 FROM XS WHERE 学号 LIKE %#_% ESCAPE #; 说明:由于没有学生满足这个条件,所以这里没有结果返回。定义了“

14、#”为转义字符以后,语句中在“#”后面的“_”就失去了它原来特殊的意义。,4.2.3 WHERE子句,3. 范围比较 用于范围比较的关键字有两个:BETWEEN和IN。 当要查询的条件是某个值的范围时,可以使用BETWEEN关键字。BETWEEN关键字指出查询范围,格式为: expression NOT BETWEEN expression1 AND expression2 当不使用NOT时,若表达式expression的值在表达式expression1与expression2之间(包括这两个值),则返回TRUE,否则返回FALSE;使用NOT时,返回值刚好相反。 注意:expression1

15、的值不能大于expression2的值。 使用IN关键字可以指定一个值表,值表中列出所有可能的值,当与值表中的任一个匹配时,即返回TRUE,否则返回FALSE。使用IN关键字指定值表的格式为: expression IN ( expression ,n),4.2.3 WHERE子句,expression NOT BETWEEN expression1 AND expression2 【例4.42】 查询XSCJ数据库XS表中不在1989年出生的学生情况。 SELECT 学号, 姓名, 专业名, 出生日期 FROM XS WHERE 出生日期 NOT BETWEEN 1989-1-1 and 1989-12-31; 执行结果为:,4.2.3 WHERE子句,expression IN ( expression ,n) 【例4.43】 查询XS表中专业名为“计算机”、“通信工程”或“无线电”的学生的情况。 SELECT * FROM XS WHERE 专业名 IN (计算机, 通信工程, 无线电); 该语句与下列语句等价: SELECT * FROM XS WHERE 专业名 =计算机 OR 专业名 = 通信工程 OR 专业名

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号