资源预览内容
第1页 / 共65页
第2页 / 共65页
第3页 / 共65页
第4页 / 共65页
第5页 / 共65页
第6页 / 共65页
第7页 / 共65页
第8页 / 共65页
第9页 / 共65页
第10页 / 共65页
亲,该文档总共65页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
12关系数据库模型简介使用informix数据库服务器创建的数据库就是 关系数据库 关系数据库中的数据以具有行和列的表的格 式显示数据库中的术语与实体对象的简单对应关系 描述: 关系 描述 表实体 一个表表示数据库对某一主 题或事务已知的全部内容 列属性 一列表示一个属性、特征或 表主题适用的事实 行实例 一行表示表主题的一个特例例如:保单基本信息表是描述的实际保单的 基本信息,保单标的表描述的是标的的内容 ,而保单基本信息表中的起保日期列则表示 的是保单的起保日期的属性,保单基本信息 表中的某一行数据则对应实际的某张保单*3SQL结构化查询语言简介为什么需要结构化查询语言: 由于目前大部分的计算机软件无法实现“老张 的车是否在我公司上了保险”这样的询问,必 须使用软件能够分析的格式化的语法来表述 问题SQL是结构化查询语言(Structured Query Language)的缩写 可以分成数据定义语言、数据操纵语言、数据控制访问语言等几类数据定义语言(DDL):用来创建、更改、 删除数据库、表或视图等数据操纵语言(DML):对数据库中的数据 进行查询或增删改操作 数据控制访问语言(DCL):对存取权限的 控制,授权和回收,游标语句,动态管理语句,数 据完整性语句,查询优化语句,事务处理语句 *4标准SQL和informix SQL70年代IBM发明和开发了SQL和关系模型标准SQL: 86年ANSI发布了标准SQL:SQL-86 自1986年以来,已经存在多个版本:SQL-86,SQL-92, SQL-99,SQL-2003,其中SQL-2003是该标准的当前版本Informix SQL与标准 SQL 兼容 Informix SQL 包含对标准的扩展,大多数差异出现在不经常 使用的语句中,例如:在 SELECT 语句方面很少出现差异 ,该语句占 SQL 使用的 90%*5Informix结构*客户端程序数据库引擎数据库6Informix客户端常用工具Informix-sql: IsqlDb-access: dbaccess实现的功能相近,都可以通过SQL语句对数 据库进行操作isql可以生成form并通过form实现对数据的操 作*7利用dbaccess学习SQL语言Dbaccess提供了用于输入、执行和调试SQL语句和存储过程(SPL)的 用户界面 使用DB-Access的几种基本方法: 在命令行提示符$下输入dbaccess 例如:dbaccess dbaccess 数据库名称 例如:dbaccess stores_demo Dbaccess SQL脚本文件 例如:dbaccess stores_demo orders.sql 批处理命令 Dbaccess stores_demo - -(不 等于),(大于),=(大于等于), 10000000从保单基本信息表中选出险种不是DAA的保单 Select * from prpcmain where riskcode 10000000查询险种为DAA或者DAB的保单基本信息表数据 Select * from prpcmain where riskcode = DAA or riskcode = DAB24IN*功能:替代多个OR条件语法格式:SELECT “列名” FROM “表名” WHERE “列名” In (值1,值2,值3)举例:查询险种为DAA或者DAB或者DAE的保单基本信息表数据 Select * from prpcmain where riskcode in(DAA ,DAB,DAE)查询险种不为DAA或者DAB或者DAE的保单基本信息表数据 Select * from prpcmain where riskcode not in(DAA ,DAB,DAE)25BETWEEN*功能:选择取值范围在某一区间内的数据,某种程序上可以替代多个 AND条件组成的语句语法格式:SELECT “列名” FROM “表名” WHERE “列名” BETWEEN 值1 AND 值2举例:查询险种为DAA起保日期为2006年10月1日至10月15日之间的 保单 Select * from prpcmain where startdate between 20061001 and 20061015 相当于Select * from prpcmain where startdate = 20061001 and startdate 10000000 then “有钱客户“when sumprmeium 1000按归属机构分组查询保单数量并只显示数量大于1000的机构的数据如果使用INTO TEMP将分组查询结果写入临时表则上面语句等同于 Select comcode,count(*) as policycount from prpcmain group by 1 Into temp tmpt1; Select * from tmpt1 where policycount1000;36日期函数*日期函数包括DAY,MONTHS,YEAR,WEEKDAY,TODAY, CURRENT等DAY:返回日期值中的天 MONTHS:返回日期值中的月 YEAR:返回日期值中的年 WEEKDAY:返回日期值是星期几,0代表是星期天 TODAY:返回当前日期 CURRENT:返回带时间的当前日期Select day(today),months(today),year(today),weekday(today), today,current From prpcmain where policyno = abcdefg37字符串处理函数*字符串处理函数包括LOWER,UPPER,REPLACE,SUBSTR, SUBSTRING等LOWER:将大写字母替换成小写字母 UPPER:将小写字母替换成大写字母 REPLACE:将字符串中的某一组字符替换为其他字符 SUBSTR:返回字符串的一部分 SUBSTRING:返回字符串的一部分 SUBSTR和SUBSTRING语法有些区别38NVL函数*NVL可以将求值为空值的表达式转换成指定值语法:NVL(表达式,表达式)如果表达式的值为空,则返回表达式的值,否则返回表达式的值Select policyno,nvl(sumprmeium,0) from prpcmain如果保费为空则返回039多表查询*要在两个或多个表中进行数据查询,可以在from字句中指 定两个或两个以上的表名,并在where子句中在每个表的至 少一个字段间创立连接条件40笛卡尔积*笛卡尔积:当进行多表查询没有声明表之间的连接条件时 就生成了笛卡尔积,笛卡尔积由表的行的每种可能组合而 成可以在示例库stores_demo中运行下列语句来查看一下笛卡 尔积的查询结果 Select * from customer,stateState表有52行,customer表有28行,查询出的结果是 52*281456行41等值连接*使用等号或join关键字来连接多表间的具有对应关系的字段来构成查询 条件 Select * from prpcmain,prpcitemkind Where prpcmain.policyno = prpcitemkind.policyno 多表间等值连接 Select * from prpcmain,prpcitem_car,prpcitemkind Where prpcmain.policyno = prpcitemkind.policyno And prpcmain.policyno = prpcitem_car.policyno 或 Select * from prpcmain join prpcitem_car on prpcmain.policyno = prpcitem_car.policyno join prpcitemkind on prpcmain.policyno = prpcitemkind.policyno42使用别名*可以通过在from子句中给表指定别名来提高查询速度,并 使SQL语句可读性更高,书写更简单Select t1.policyno,t1.riskcode,t2.kindcode from prpcmain t1,prpcitemkind t2 Where t1.policyno = t2.policyno指定别名时也可以加as关键字 如from prpcmain as t1,prpcitemkind as t243使用自连接*当需要对同一个表的同一个列之间的值进行比较时往往需要用到自连接例如:要查询某支公司投保DAA险种的保单,保费差异大于10000元的 保单的情况select t1.policyno,t2.policyno, t1.sumpremium,t2.sumpremium from prpcmain t1,prpcmainT2 where t1.policyno 1000044使用外连接*外连接和等值连接不同,等值连接只返回相关表中相等的 数据,外连接则除返回相等数据之外还会显示出控制表的 全部数据,从属表没有关联上的数据则返回NULL,外 连接分为左外连接和右外连接 外连接关键字:left join,right join 控制表:以左连接为例控制表为使用left join关键字前的表 表 表 等值连接则结果为 1 1 1,1 2 2 2,2 3 不等值连接结果则为1,12,23,NULL45WHERE条件中使用子查询*可以在WHERE条件中使用查询语句,通常使用的条件关键字包括=, , 0) 查询保单PJAZ200454010093000002的赔款是否大于保额 Select * from prpcmain where sumamount 600 Union all Select stock_num,manu_code from catalog Where catalog_num = 10025 Union all Select stock_num,manu_code from items Where quantity = 10 Order by 247UPDATE语句*基本功能:更改表中的一个或多个列的数据 基本语法格式: UPDATE “表名” SET “列名” = 设定值 WHERE 条件 update prpcmain set underwriteflag = 0 where policyno = abcdefg注意:一般在生产环境下需要谨慎使用UPDATE语句,最好先用 SELECT语句设定好WHERE条件并确认条件正确后再将SELECT部分 修改成UPDATE语句的格式48INSERT语句*基本功能:向表中插入新行 基本语法格式: 、不用指定列名的形式 INSERT INTO 表名 VALUES (值1,值2,值3,值 4) 、指定列名的形式 INSERT INTO 表名 (列名,列名,列名) VALUES (值1,值2,值3) 、值来自查询结果 INSERT INTO 表名 (列名,列名,列名) SELECT 语句 49DELETE语句*基本功能:删除表中数据 基本语法格式: DELETE FROM 表名 WHERE 条件50查询优化*查询优化首要任务是减少数据库服务器的I/O 操作,加上其他技术运用实现最快查询 合理
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号