3.4数据查询
查询语名一般格式为SELECT (ALL/DISTINCT)+目标列表达式……+FROM+表名或视图名……(WHERE条件表达式)(GROUP BY 列名1(HAVING 条件表达式))+(ORDER BY列名 (ASC/DESC))
整个SELECT语句的含义是,根据WHERE子句的条件表达式从FROM子句指定的基本表,视图或派生表中找出满足条件的元组,再按SELECT子句中的目标列表达式选出元组中的属性值形成结果表。
1,单表查询
仅涉及一个表的查询。
①可以查询指定列,可以用*查询全部列,查询经过计算的值-即目标列表达式不仅可以是表中的属性列,也可以是表达式。
②选择表中的若干元组。可以用DISTINCT消除取值重复的行。可以用WHERE子句查询满足指定条件的元组。常用查询条件有
比较大小,
确定范围-BETWEEN……AND……和NOT BETWEEN……AND……用来查找属性值在指定范围内的元组,
确定集合-谓词IN可以用来查找属性值属于指定集合的元组或谓词NOT IN查找属性值不属于指定集合的元组,
字符匹配-谓词LIKE可以用来进行字符串的匹配。可以有NOT LIKE。后面的匹配串中可以含有通配符%和_。%代表任意长度的字符串。_代表任意单个字符。如果LIKE后面的匹配串中不含通配符,则可以用=运算符取代LIKE谓词。当字符集为ASCII时一个汉字需要两个_。如果要查询的字符串本身就含有通配符%或_,就要使用ESCAPE+换码字符对通配符进行转义。
涉及空值的查询-用IS。
多重条件查询-AND和OR,AND的优先级高于OR,但用户可以用括号改变优先级。
③ORDER BY子句
用户可以用它对查询结果按照一个或多个属性列的升序ASC或降序DESC排列,默认值为升序。
④聚集函数
有COUNT(*)统计元组个数,COUNT(DISTNCT/ALL 列名)统计一列中值的个数。SUM计算一列值的总和。AVG计算一列值的平均值。MAX求一列值中的最大值,MIN求一列值中的最小值。如果指定DISTlNCT,则表示在计算时要取消指定列的重复值。
⑤GPOUP BY子句
将查询结果按某一列或多列的值分组,值相等的为一组。HAVING给出选择组的条件。
2,连接查询
一个查询同时涉及两个以上的表。包括等值连接查询,自然连接查询,非等值连接查询,自身连接查询,外连接查询和复合条件连接查询等。
①等值与非等值连接查询:当连接运算符为=时,称为等值连接。其他运算符称为非等值连接。
②自身连接:一个表与其自己进行连接。
③外连接
④多表连接:两个以上的表三进行连接。
3,嵌套查询
上层查询块称为外层查询或父查询,下层查询块称为内层查询或子查询。
①带有IN谓词的子查询。
如果子查询的查询条件依赖于父查询,这类子查询称为相关子查询,整个查询语句称为相关嵌套查询语句。
②带有比较运算符的子查询:相关子查询。
③带有ANY(SOME)或ALL谓词的子查询。
④带有EXISTS谓词的子查询。存在量词,带有它的子查询不返回任何数据,只产生逻辑真值tiue或逻辑假值false。与EXISTS谓词相对应的是NOTEXISTS谓词。可以用EXIST/NOT EXIST来实现带全称量词的查询。
4,集合查询
包括并操作UNION,交操作INTERSECT和差操作EXCEPT。
3.5数据更新
三种操作:向表中添加若干行数据,修改表中的数据和删除表中的若干行数据。
1,插入数据
两种形式:一种是插入一个元组,另一种是插了子查询结果。后者可以一次插入多个元组。
①插入元组:INSERT INTO……VALUES……。
②插入子查询结果:INSERT INTO ……+……。
2,修改数据
又称更新操作。格式:UPDATE …… SET……+(WHERE 条件)
①修改某一个元组的值。
②修改多个元组的值。
③带子查询的修改语句。子查询也可以嵌套在UPDATE语句中,用以构造修改的条件。
3,删除数据
格式:DELETE FROM……(WHERE……)。
①删除某一个元组的值。
②删除多个元组的值。
③带子查询的删除语句。
3.7视图
从一个或几个基本表导出的表。是一个虚表。视图一经定义,就可以和基本表一样被查询,被删除。
1,定义视图
建立视图:CREATE VIEW视图名(列名……)AS子查询(WITH CHECK OPTION)。
子查询可以是任意的SELECT语句。WITH CHECK OPTION表示对视图进行UPDATE,INSERT和DELETE操作时要保证更新,插入或删除的行满足视图定义中的谓词条件。
组成视图的属性列名或者全部省略或者全部指定,无第三种选择。三种必须明确指定组成视图的所有列名:某个目标列是聚集函数或列表达式。多表连接时选出了几个同名列作为视图的字段。需要在视图中为某个列启用新的,更合适的名字。
2,查询视图
关系数据库管理系统执行对视图的查询时,首先进行有效性检查,检查查询中涉及的表,视图等是否存在。如果存在,则从数据字典中取出视图的定义,把定义中的子查询和用户的查询结合起来,转换成等价的对基本表的查询,然后再执行修正了的查询。这一转换过程称为视图消解。
目前多数关系数据库系统对行列子集视图的查询均能正确转换。但对非行列子集视图的查询就不一定能做转换了,因此这类查询应该直接对基本表进行。
3,更新视图
指通过视图来插入INSERT,删除DELETE和修改UPDATE数据。
由于视图是不实际存储数据的虚表,因此对视图的更新最终要转换为对基本表的更新。
4,视图的作用
①视图能够简化用户的操作
②视图使用户能以多种角度看待同一数据
③视图对重构数据库提供了一定程度的逻辑独立性