数据库SQL语法函数介绍.ppt

上传人:xt****7 文档编号:2864995 上传时间:2019-12-02 格式:PPT 页数:121 大小:818KB
返回 下载 相关 举报
数据库SQL语法函数介绍.ppt_第1页
第1页 / 共121页
数据库SQL语法函数介绍.ppt_第2页
第2页 / 共121页
数据库SQL语法函数介绍.ppt_第3页
第3页 / 共121页
点击查看更多>>
资源描述
,数据库 SQL 函数使用基础,内容提要,关系数据库基本知识 SQL语言概述 SQL语句(Select)使用 SQL函数使用 SQL语句与数据库可用性和性能的关系,目标,了解数据库的一些基本概念(表、列、索引、事务、锁) 了解SQL语言的历史、特点和语句分类 掌握Select语句的基本语法结构和使用 掌握Select语句中的复杂条件、排序、分组、聚集计算的使用 了解多表关联查询(左连接和等值连接)的使用和注意事项 掌握主要函数的用法和使用注意事项 结合一些例子,说明编写SQL时的注意事项;记住常见的易导致IQ数据库可用性(节点宕机、资源消耗大)问题和性能问题的一些SQL操作/函数,内容提要,关系数据库基本知识 SQL语言概述 SQL语句(Select)使用 SQL函数使用 SQL语句与数据库可用性和性能的关系,关系数据库基本知识,数据库基本知识 数据库的概念和基本特征 数据库管理系统 数据模型 关系数据库基础 关系数据库的定义 表的特征 完整性问题 表与表之间的关系 视图,关系数据库基本知识,关系数据库基础 索引 锁 事务,数据库和的概念基本特征,数据的概念 数据(Data)是数据库中存储的基本对象 数据的定义 描述事物的符号记录 数据的分类 文字、图形、图像、声音 数据库的概念和特征 数据库是按照某种数据模型组织起来长期存储在计算机内的有组织、可共享的数据集合,数据库的概念和基本特征,数据库的概念和特征 这种数据集合具有如下特点: 数据按一定的数据模型组织、描述和储存 可为各种用户共享 冗余度较小 数据独立性较高 易扩展 具有一致性和可维护性,能够确保数据的可靠性和安全性,数据库管理系统,定义 位于用户和操作系统之间的一种软件(数据库管理软件) 用途 科学地组织和存储数据、高效地获取、管理和维护数据 组成 数据描述语言(DDL)及其翻译程序 数据操纵语言(DML)及其翻译程序 数据库运行管理程序,数据模型,定义 表示实体类型及实体类型间联系的模型称为“数据模型” 种类 概念数据模型 结构数据模型,实体定义: 客观存在并可相互区别的事物。如:客户,产品等,数据模型,概念数据模型 它是独立于计算机系统的模型,完全不涉及信息在系统中的表示,只是用来描述某个特定组织所关心的信息结构。 结构数据模型 它是直接面向数据库的逻辑结构,是现实世界的第二层抽象,主要包括: 层次模型用树型结构表示实体间联系的数据模型。 网状模型有向图结构表示实体类型及实体间联系的 数据模型。 关系模型用二维表格结构表达实体集,用外键表示 实体间联系。,关系数据库的定义,关系数据库是关系(二维表)的集合 关系数据库使用关系(二维表)存储数据 由行和列组成的二维结构 存放学生信息的关系表,列 (字段/属性),行(一条记录),表的特征,二维表 是由行和列组成的二维结构 每一行称为元组(记录行),每一列具有唯一名称(字段/属性名) 行和列的交叉点,表示单个数据值(数据项) 每张表必须具有主键,用来标识唯一的元组 每一列的所有值必须符合相同的数据格式 每一列具有特定的范围的值,称为属性域 行与列的次序并不主要,表的特征,字段 字段用于保存数据中某一类型的属性,需要为字段定义相应的类型 常见类型 数值、字符串、日期/时间 主键 能够唯一标识表中的每条记录的字段或者字段的组合 一张表中只能有一个主键,数据完整性,数据完整性 是指数据的正确性、相容性和有效性 完整性包括:,输入的类型是否正确? 年龄必须是数字 输入的格式是否正确? 身份证号码必须是18位 是否在允许的范围内? 性别只能是”男”或者”女” 是否存在重复输入? 学员信息输入了两次 是否符合其他特定要求? 信誉值大于5的用户才能够加入会员列表 ,数据完整性,关系模型的完整性规则是对关系的某种约束条件 完整性约束包括: 实体完整性 域完整性 参照完整性 用户定义完整性,实体完整性,实体完整性要求表中的所有行都有唯一的标识 实现方法有 主键约束(PRIMARY KEY) 惟一性约束(UNIQUE),域完整性,域完整性指列的值域的完整性 如数据类型、格式、值域范围、是否允许空值等 域完整性限制了某些属性中出现的值,把属性限制在一个有限的集合中 例如,如果属性类型是整数,那么它就不能是101.5或任何非整数,参照完整性,参照完整性是对不同表之间属性或字段的引用关系 比如外键约束,职工表(R2),部门表(R1),主键,外键,参照完整性,注意 实体完整性是对应元组或者行而言的。 域完整性是对应属性或者列而言的。 引用完整性是对不同表之间属性或列的引用关系而言的。,用户定义完整性,关系数据库系统根据应用环境不同,往往需要一些特殊约束条件,用户定义的完整性是针对某一具体应用领域,对关系数据库提出的约束条件。反应了某一具体应用涉及的数据必须满足的语义要求 例如:学生的年龄限制为14-35之间 关系数据库提供了定义和检验这些完整性约束的机制,以便用统一的系统的方法处理它们,而不用应用程序处理,表与表之间的关系,表与表之间的关系分为三种 一对一关系 例如,班级与班长之间的联系:一个班级只有一个正班长 一对多关系 班级与学生之间的联系:一个班级中有若干名学生,每个学生只在一个班级中学习 多对多关系 课程与学生之间的联系: 一门课程同时有若干个学生选修 一个学生可以同时选修多门课程,视图,视图是一个虚拟表,其内容由查询定义 同真实的表一样,视图包含一系列字段和行数据。但是视图并不在数据库中真正的存储数据。 视图中的数据来自于定义视图的查询所引用的表,并且在使用视图时动态生成。 为什么要使用视图 简单性看到的就是需要的 安全性通过视图用户只能查询和修改他们所能见到的数据 逻辑数据独立性视图可以帮助用户屏蔽真实表结构变化带来的影响,索引,在关系数据库中,可以使用索引加快访问表中数据的速度 在理解索引时,可以想象一本书,其中书的内容就相当于表里的数据,而书前面的目录就相当于该表的索引 通过在要执行搜索的表中选择一列或多列来创建索引 索引是针对表中某个字段或某几个字段创建的 关系数据库会在某些约束上自动创建相应的索引(比如:主键、唯一约束),IQ数据库支持九种索引,事务,数据库事务是指作为单个逻辑工作单元执行的一组操作 事务具有ACID属性 原子性是指对工作单元中修改数据的操作要么全都执行,要么都不执行 一致性是指事务在完成时,必须使所有数据都保持一致状态 隔离性是指由并发事务所做的修改必须与任何其它并发事务所做的修改相隔离 持久性是指事务完成后,事务对数据所做的修改时持久的。,锁,不同的关系数据库产品在实现事务隔离性时可能会采用不同的方法,目前主要有两类方法: 一种是采用“悲观“方法,这种方法主要采用锁定技术(locking)来实现不同的隔离级别(例如:SAP ASE); 另一类方法主要采用MVCC(即多版本并发控制,是一种“乐观“方法)技术再辅之以少量的锁实现(例如:SAP IQ),锁,不同的关系数据库产品在实现事务隔离性时可能会采用不同的方法,目前主要有两类方法: 一种是采用“悲观“方法,这种方法主要采用锁定技术(locking)来实现不同的隔离级别(例如:SAP ASE); 另一类方法主要采用MVCC(即多版本并发控制,是一种“乐观“方法)技术再辅之以少量的锁实现(例如:SAP IQ),IQ数据库事务和锁的特点,IQ使用ANSI隔离级别3保持事务中数据的一致性,这一隔离级别也叫做“Snapshot Versioning”。 在一个事务进行的过程中,IQ呈现给每一个连接到数据库的用户最近一次已提交的表数据的快照,直到用户重新连接到IQ或发出“commit”命令,IQ数据库事物和锁的特点,IQ执中行Insert、Update、Delete、Load Table等语句时会加排它锁;而查询(Select)语句不会向ASE那样加上共享锁,而是通过“版本快照技术”实现事物的隔离性 IQ数据库中能够有多个“写用户”,写用户不会阻塞读用户,读用户不会阻塞写用户,但是对于同一个表只允许一个写用户 IQ在实现Snapshot Versioning机制时,需要使用IQ Main Store中的空间存放版本数据。当有大量用户连接时,并且用户执行大量的数据修改,会占用大量Main Store空间。,内容提要,关系型数据库基本知识 SQL语言概述 SQL语句(Select)使用 SQL函数使用 SQL语句与数据库可用性和性能的关系,SQL简史,上世纪70年代,SQL 诞生于IBM 公司在加利福尼亚San Jose 的试验室 SQL全称是结构化查询语言Structured Query Language 并常常简称为sequel SQL为RDBMS(关系型数据库管理系统)开发是一种非过程语言 非过程性语言的意思就是指与具体过程无关举例来说SQL 描述了如何对数据进行检索插入删除但它并不说明如何进行这样的操作,SQL语言介绍,SQL全称是“结构化查询语言(Structured Query Language)”,最早的是IBM的圣约瑟研究实验室为其关系数据库管理系统SYSTEM R开发的一种查询语言,它的前身是SQUARE语言。SQL语言结构简洁,功能强大,简单易学,所以自从IBM公司1981年推出以来,SQL语言,得到了广泛的应用。如今无论是像Oracle, Sybase, Informix, SQL server这些大型的数据库管理系统,还是像Visual Foxporo, PowerBuilder这些微机上常用的数据库开发系统,都支持SQL语言作为查询语言。,SQL语言介绍,美国国家标准协会 (ANSI) 和国际标准化组织 (ISO) 已将其批准为正式关系查询语言标准。 ANSI SQL-86 ANSI SQL-89 ANSI SQL-92 ANSI SQL-99 ANSI SQL-2003 ANSI SQL标准实际上定义了三个级别的兼容性:入门级、中级与完整级。大多数产品完全符合入门级标准,但只部分符合更高的标准。,SQL语言特点,统一的语言 SQL可用于所有用户的DB活动模型,包括系统管理员、数据库管理员、 应用程序员、决策支持系统人员及许多其它类型的终端用户。基本的SQL 命令只需很少时间就能学会,最高级的命令在几天内便可掌握。 SQL为许多任务提供了命令,包括: 查询数据 在表中插入、修改和删除记录 建立、修改和删除数据对象 控制对数据和数据对象的存取 保证数据库一致性和完整性 以前的数据库管理系统为上述各类操作提供单独的语言,而SQL 将全部任务统一在一种语言中。,SQL语言特点,非过程化语言 SQL是一个非过程化的语言,因为它一次处理一个记录,对数据提供自动导航。 SQL允许用户在高层的数据结构上工作,而不对单个记录进行操作,可操作记录集。 所有SQL 语句接受集合作为输入,返回集合作为输出。SQL的集合特性允许一条SQL语句的结果作为另一条SQL语句的输入。 SQL不要求用户指定对数据的存放方法。 这种特性使用户更易集中精力于要得到的结果。 所有SQL语句使用查询优化器,它是RDBMS的一部分,由它决定对指定数据存取的最快速度的手段。查询优化器知道存在什么索引,哪儿使用合适,而用户从不需要知道表是否有索引,表有什么类型的索引。,SQL语言特点,面向集合的操作方式 SQL语言采用集合操作方式,不仅查找结果可以是元组的集合,而且一次插入、删除、更新操作的对象也可以是元组的集合 非关系数据模型采用的是面向记录的操作方式,任何一个操作其对象都是一条记录。例如查询所有平均成绩在80分以上的学生姓名,用户必须说明完成该请求的具体处理过程,即如何用循环结构按照某条路径一条一条地把满足条件的学生记录读出来。,SQL语言特点,是所有关系数据库的公共语言 由于所有主要的关系数据库管理系统都支持SQL语言,用户可将使用SQL的技能从一个RDBMS(关系数据库管理系统)转到另一个,所有用SQL编写的程序都是可以移植的。,SQL语言特点,以同一种语法结构提供两种使用方式 SQL语言既是自含式语言,又是嵌入式语言。 作为自含式语言,它能够独立地用于联机交互的使用方式,用户可以在终端键盘上直接键入SQL命令对数据库进行操作。 作为嵌入式语言,SQL语句能够嵌入到高级语言(例如C、COBOL、FORTRAN、PL/1)程序中,供程序员设计程序时使用。而在两种不同的使用方式下,SQL语言的语法结构基本上是一致的。这种以统一的语法结构提供两种不同的使用方式的作法,为用户提供了极大的灵活性与方便性。,SQL语言特点,语言简洁,易学易用 SQL语言功能极强,但由于设计巧妙,语言十分简洁,完成数据定义、数据操纵、数据控制的核心功能只用了9个动词:CREATE、DROP、SELECT、INSERT、UPDATE、DELETE、GRANT、REVOKE。而且SQL语言语法简单,接近英语口语,因此容易学习,容易使用。,SQL语言分类,DDL,数据定义语言 DML,数据操纵语言 DCL,数据控制语言,SQL语言分类DDL,用户创建或重新构建数据库的语言 CREATE TABLE ALTER TABLE DROP TABLE CREATE INDEX ALTER INDEX DROP INDEX,SQL语言分类DML,用于在关系数据库对象中操纵数据 INSERT UPDATE DELETE SELECT(也被单独称为DQL),SQL语言分类DCL,用于创建与用户访问相关的对象,也控制着用户的权限分配 ALTER USER 改变数据库用户信息 GRANT 为用户授予特权 REVOKE 从用户处收回特权,事务控制命令,用户管理数据库的事务命令 COMMIT 用于保护数据库的事务 ROLLBACK 用于撤消数据库的事务 SAVEPOINT 创建一组事务中的撤消点,内容提要,关系数据库基本知识 SQL语言概述 SQL语句(Select)使用 SQL函数使用 SQL语句与数据库可用性和性能的关系,SQL语句的一般语法规则,Select语句的简单例子 SELECT NAME, STARTTERM, ENDTERM FROM PRESIDENTS WHERE NAME =LINCOLN 关键字(大小写不敏感) Select From Where 使用空格分开不同部分,Select、From、Distinct,语法:select 例1:select colname 例2:select * 例3:select 10*10 语法:from 第一个查询 例1:select * from employees; 语法:DISTINCT(返回的没有重复的数据) 例1:select distinct dept_id from employee,练习,下列语句所返回的结果是否相同 SELECT * FROM CHECKS select * from checks 下列查询能否工作 a. Select b. Select * b. Select * from employee c. Select emp_id, salary FROM employee,SQL语言元素,关键字 每个 SQL 语句都包含一个或多个关键字。SQL 的关键字不区分大小。 例如,在下面的语句中, SELECT 和 FROM 是关键字: SELECT * FROM employee,SQL语言元素,保留字 SQL 中的一些关键字也是保留字。要在 SQL 语句中使用保留字作为标识符,必须用双引号将它引起来。SQL 语句中出现的很多关键字都是保留字,但并非全部都是。 例如,必须使用以下语法检索名为 SELECT 的表的内容。 SELECT * FROM “SELECT” Sybase IQ的保留字详细列表,参见,SQL语言元素,标识符 标识符是数据库中对象(如用户 ID、表和列)的名称。 标识符的最大长度是 128 个字节。当以下任一条件成立时,标识符需要用双引号引起来或用中括号括起来: 标识符包含空格。 标识符的首字符不是字母字符 标识符包含保留字。 标识符包含字母和数字以外的其它字符。 字母字符包括字母表中的字母,以及下划线 (_)、at 符号 ()、井号(#) 和美元符号 ($)。数据库归类序列指出了哪些字符被视为字母字符或数字字符。,表达式,表达式的定义非常简单:表达式可以返回一个值,表达式的类型非常广泛,它以包括各种类型的数据如数字、字符、逻辑类型等 SELECT amount FROM checks Amount是表达式 SELECT NAME, ADDRESS, PHONE FROM ADDRESSBOOK NAME、ADDRESS、PHONE、ADDRESSBOOK是表达式,SQL运算符,算术运算符加、减、乘、除、取模 赋值运算符= 位运算符&、|、 比较运算符True、False、unknown;、) 字符型like (%、_)、| 逻辑型NOT、AND、OR select * from department where 1=1 or 1=1 and 1=2 select * from department where not 1=2 and 1=1,SQL运算符,集合运算union 、union all、intersect、minus 从属运算in、between,搜索条件,比较条件 = 等于 大于 = 大于或等于 不等于 ! 不大于 ! 不小于,搜索条件,Between BETWEEN 条件的语法如下: expr NOT BETWEEN start-expr AND end-expr BETWEEN 条件的值可以是 TRUE、FALSE 或 UNKNOWN。在没有关键字 NOT 的情况下,如果 expr 介于 start-expr 和 end-expr 之间,则条件的值为 TRUE。NOT 关键字使条件的含义相反,但保留 UNKNOWN 不变。 BETWEEN 条件相当于两个不等式的组合: expr = start-expr AND expr = end-expr,搜索条件,LIKE LIKE 条件的语法如下: expression NOT LIKE pattern ESCAPE escape-expr LIKE 条件的值可以是 TRUE、FALSE 或 UNKNOWN只能对字符串数据使用like 通配符匹配项 _ (下划线) 任意一个字符 % (百分号) 包含零个或多个字符的任意字符串 指定范围或集合中的任意单个字符 不在指定范围或集合中的任意单个字符,搜索条件,Exists EXISTS 条件的语法如下: EXISTS( subquery ) 如果子查询结果至少包含一行,则 EXISTS 条件为 TRUE ;如果子查询结果不包含任何行,则条件为 FALSE。EXISTS 条件不能为 UNKNOWN,搜索条件,IS null IS NULL 条件的语法如下: expression IS NOT NULL 在没有 NOT 关键字的情况下,如果表达式的值为 NULL,则 IS NULL 条件为 TRUE,否则为 FALSE。NOT 关键字使条件的含义相反。,练习,写一个查询返回数据库中所有名字以M 开头的人 WHERE a = 10 AND a =30 的更便捷写法是什么请写出来,SQL子句,Where Group by Order by Having,SQL子句,Where(对记录集合进行过滤) select * from employee where salary 100000 select * from employee where emp_fname=Mary Anne select * from employee where emp_fname like Mary%,SQL子句,Group by(经常用于分组计算) (1) select dept_id,count(*) from employee group by dept_id (2) select state,city, count(*) from Employees group by state /错误 (3) select state,city, count(*) from employees group by city /错误 对于分组来说,SELECT 语句中出现的字段只能是在GROUP BY 中出现过的才可以,SQL子句,Order by(用于对结果进行排序,asc/desc) (1)select * from department (2) select * from department Order by dept_name (3) select dept_id,count(*) from employee group by dept_id order by dept_id,manager_id desc (4) select state, count(*) from employees group by state order by count(*) desc,SQL子句,Having(对分组的数据进行限制) (1) select dept_id,avg(salary) from employee where avg(salary)50000 group by dept_id ASA Error -150: Invalid use of an aggregate function (2) select dept_id,avg(salary) from employee group by dept_id having avg(salary)50000,SQL子句,Having(对分组的数据进行限制) (3) select dept_id,avg(salary) from employee group by dept_id having count(*)10 /可以使用select子句没出现的字段,SQL子句综合应用,条件+排序 select city , sum(salary) from employee where city like Be% or salary80000 group by city order by city,SQL子句综合应用,求和、平均、最大值、最小值 select state, round(sum(salary),2) sum, round(avg(salary),2) avg, round(max(salary),2) max ,round(min(salary),2) min from employee group by state order by state,SQL子句综合应用,所有子句都用到 select state,sum(salary),count(*) from employee where salary50000 group by state having sum(salary)100000 Order by count(*),三、多表关联查询,交叉连接 内部连接(等值连接、不等值连接) 外部连接 左连接 右连接 完全外连接 自连接 子查询,表的连接交叉连接,交叉连接笛卡尔积 select count(*) from accmaininfo(131) select count(*) from accdetail(99) select count(*) from accmaininfo m,accdetail d(12969) where m.provno=d.provno and m.accno=d.accno(92) 笛卡尔积会把两个表的每条记录一一进行连接如果A表有n行记录,B表有m行记录,则笛卡尔积有n*m行记录! 应用中尽量避免出现笛卡尔积,会造成灾难性的后果!,表的连接内部连接,内部连接 完全匹配的连接,相当于两个表的交集 select count(*) from accmaininfo m inner join accdetail d on m.provno=d.provno and m.accno=d.accno 也可以按照下面语法写: select count(*) from accmaininfo m,accdetail d where m.provno=d.provno and m.accno=d.accno,表的连接内部连接,正确地找到列 Select *可以选择所有列。如果需要选择特定列,怎么做? select accname, balance from accmaininfo m,accdetail d where m.provno=d.provno and m.accno=d.accno 使用表名前缀 select m.accname, m.balance from accmaininfo m,accdetail d where m.provno=d.provno and m.accno=d.accno,表的连接外部连接,左外部连接: Left outer join(左边表全集) select m.balance, d.balance, tranprono from accmaininfo m left outer join accdetail d on m.provno=d.provno and m.accno=d.accno and tranprono=30,表的连接外部连接,右外部连接Right outer join(右边表全集) select m.balance, d.balance from accmaininfo m right outer join accdetail d on m.provno=d.provno and m.accno=d.accno and tranprono=30,表的连接外部连接,全外部连接Full outer join(两个表都是全集两个表的并集) select city,dept_name from employee e full outer join department d on e.dept_id =d.dept_id and e.city = Acton,表的连接自连接,自连接跟同一个表联合 查找薪水超过80000的员工,并查出其manager的名称和薪水 select a.emp_fname,a.salary,b.emp_fname,b.salary from employee a ,employee b where a.emp_id=b.manager_id and b.salary80000,子查询,子查询是一种把查询的结果作为参数返回给另一个查询的一种查询。 子查询可以让你将多个查询绑定在一起,到今天结束以后,你将掌握以下内容 建立一个子查询 在你的子查询中使用 EXIST ANY和ALL 关字 建立和使用子查询的关联,子查询,建立子查询:要查询某人下的所有账户数据,但不知道账户代码,只知道姓名 select * from accdetail where accno in (SELECT accno from accmaininfo where accname = 伟泽) 三个之一即可 accno 016601100129425 156001100301019 490201100338228 ,子查询使用汇总函数,子查询中可以使用SUM、AVG、COUNT、MIN 和MAX。比如,想查询余额在平均值以上的accmaininfo: select accname,balance from accmaininfo Where balance (select avg(balance) from accmaininfo),子查询相关子查询,到现在为止,我们所写出的子查询都是独立的它们都没有涉及到其它的子查询。相关子查询可以接受外部的引用。 select * from accdetail d where 伟泽 = (SELECT accname from accmaininfo where accno = d.accno) 跟下面语句相当: select * from accdetail d, accmaininfo m Where d.accno =m.accno and accname = 伟泽,子查询in,In可以返回多个值 select count(*) from accdetail where accno=(select accno from accmaininfo where accname = 悠悠) 可是使用in代替= select count(*) from accdetail where accno in (select accno from accmaininfo where accname = 悠悠),子查询exists,Exists返回true或者false select * from accdetail d where exists (SELECT accname from accmaininfo where accname=伟泽 ) Exists只是一个条件,true的时候返回所有数据,false的时候不返回数据,子查询exists,Exists更为有用的是使用相关子查询 select * from accdetail d where exists (SELECT accname from accmaininfo m where accname=伟泽 and m.accno=d.accno) 这时候,只返回该客户的账户细节数据,四、修改数据,Insert Update Delete,操作数据Insert,INSERT 语句允许你向数据库中输入数据,它有两种写法: INSERT VALUES INSERT SELECT INSERT VALUES 该语句每次向表中输入一条记录,操作的规模小,只有几条语句需要输入时它是非常有用的该语句的语法形式如下: INSERT INTO table_name (col1, col2.) VALUES (value1, value2.),操作数据Insert,例如: insert into branchinfo(provno,brno,brname,remark) values(01,0101,北京分行,REMAEK1) Insert语句可以不需要列名 insert into branchinfo values(01,0102,北京分行营业部,REMAEK2),操作数据insert select,INSERT VALUE 语句在向表中插入几个数据的时候非常有用,但显然这是不够的。如果你想向表中插入25,000 行数据时怎么办?在这种情况下INSERT SELECT 语句就非常有效。它允许程序员拷贝一个或一组表的信息到另外一个表中 insert into accmain select * from accmaininfo 语法 INSERT INTO table_name (col1, col2.) SELECT col1, col2. FROM tablename WHERE search_condition,操作数据delete,与向数据库中加入数据相对应,你可能需要删除数据库中的数据。DELETE 语句的语法格式如下: DELETE FROM tablename WHERE condition delete from branch where provno=11 通过DELETE 语句和WHERE 子句DELETE 语句可以完成下边的工作: 删除单一的行 删除多个行 删除所有的行 什么也不删除,操作数据update,该语句的作用是将已存在的记录的内容改变语法格式如下: UPDATE table_name SET columnname1 = value1 , columname2 = value2. WHERE search_condition UPDATE 语句首先要检查WHERE 子句,对于符合WHERE 子句条件的记录将会用给定的数据进行更新,操作数据update,update branchinfo set remark=Remark where provno=11 使用select语句验证 select * from branchinfo where provno=11,练习,下边的语句正确吗? DELETE COLLECTION INSERT INTO COLLECTION SELECT * FROM TABLE_2 UPDATE COLLECTION (“HONUS WAGNER CARD“ 25000, “FOUND IT“) 如果执行下边的语句会有什么结果 DELETE * FROM COLLECTION,Load table,LOAD TABLE是IQ装载数据最快速的方法 结合一个例子说明 -示例表 create table test1 (id int, age tinyint, name char(8),primary key (id) -数据文件test1.dat 1|20|张三| 2|22|李四| 3|24|王五|,内容提要,关系数据库基本知识 SQL语言概述 SQL语句(Select)使用 SQL函数使用 SQL语句与数据库可用性和性能的关系,SQL 函数分类,集合函数 分析函数 日期与时间函数 数值函数 字符串函数 数据类型转换函数 系统函数 HTTP函数 SQL 和外部环境用户定义的函数 其它函数,空值 (NULL) 处理,NULL是一种特殊类型的值 NULL 不等于任何值,也不等于自己 例如: 表test2包含如下记录 id amount - 1 10 2 (NULL) 3 20 select count(*) from test2 where amount = null 返回0 select count(*) from test2 where amount !=null 返回0 select count(*) from test2 where amount is null 返回1,空值 (NULL) 处理,NULL是一种特殊类型的值 空值的一些运算 select sum(amount) from test2 返回30,去掉了amount为NULL的记录 select amount, count(*) from test2 group by amount 空值作为一个分组 select amoun+10 , amount*10 from test2 null运算仍为 空值的一些处理 select 10+isnull(amount,0) from test2 把空值变成0,集合函数,简单集合函数(如AVG()、COUNT()、MAX()、MIN() 和 SUM())可对数据库的一组行中的数据进行汇总。这些组是使用SELECT 语句的 GROUP BY 子句构成的。 采用一个参数的较新的统计集合函数包括STDDEV()、STDDEV_SAMP()、STDDEV_POP()、VARIANCE()、VAR_SAMP() 和 VAR_POP()。,集合函数,Count Select count(*) from employee where dept_id =100 Count不统计null Sum select sum(salary) from employee where dept_id=100 如果全是null,则sum结果也为null 只能处理数值 只能处理数值,集合函数,Avg select Avg(salary) from employee where dept_id=100 如果全是null,则avg结果也为null 只能处理数值,集合函数,Max Select Max(salary) from employee Select emp_fname from employee where salary=max(salary) Msg 13204, Level 15, State 0: ASA Error -150: Invalid use of an aggregate function Min Select Max(salary),min(salary) from employee Variance方差 select variance(salary) from employee Stddev标准差,集合函数,用于进行时序分析的 ISO/ANSI SQL:2008 OLAP 函数包括: CORR()、COVAR_POP()、COVAR_SAMP()、CUME_DIST()、FIRST_VALUE()、LAST_VALUE()、REGR_AVGX()、REGR_AVGY()、REGR_COUNT()、REGR_INTERCEPT()、REGR_R2()、REGR_SLOPE()、REGR_SXX()、REGR_SXY()和REGR_SYY()。 在数据库行业使用的非 ISO/ANSI SQL:2008 OLAP 集合函数扩展包括FIRST_VALUE()、MEDIAN() 和 LAST_VALUE()。 用于计算加权移动平均值的加权 OLAP 集合函数包括EXP_WEIGHTED_AVG() 和WEIGHTED_AVG(),集合函数,简单集合 - AVG、COUNT、MAX、MIN、SUM、STDDEV 和 VARIANCE 窗口函数: 窗口化集合 - AVG、COUNT、MAX、MIN 和 SUM。 排名函数 - RANK、DENSE_RANK、PERCENT_RANK、ROW_NUMBER 和NTILE。 统计函数- STDDEV、STDDEV_SAMP、STDDEV_POP、VARIANCE、VAR_SAMP和VAR_POP。 分布函数 - PERCENTILE_CONT 和 PERCENTILE_DISC。 行间函数 - LAG 和 LEAD。 数值函数 - WIDTH_BUCKET、CEIL、LN、EXP、POWER、SQRT 和 FLOOR,日期/时间函数,日期/时间函数,date-part 允许的值,日期/时间函数,date-part 允许的值,日期/时间函数,例子 select dateadd (month,2,2010-08-01) select dateadd (month,2,crt_date) from t2 select datediff ( month, 1993/05/02, 1995/11/15 ) select datepart ( month , 1987/05/02 ),数值函数,数值函数对数值数据类型执行数学运算或者返回数值信息 ABS 得到绝对值 SELECT ABS( -66 ) Ceiling 得到大于等于当前数值的最小整数 select ceiling(13.4) /返回14.0 Floor 得到小于等于当前数值的最大整数 select floor(13.4) /返回13.0,数值函数,数值函数对数值数据类型执行数学运算或者返回数值信息 Round 四舍五入函数 select ROUND( 123.234, 1 ) /123.20 select ROUND( 123.256, 2 ) /123.260 Rand 返回大于0小于1的随机小数,字符函数,IQ中 CHAR(n)和VARCHAR(n)数据类型用于存储字符串数据 两者区别 CHAR类型数据会在尾部补空格,直到定义的长度 VARCHAR不会在尾部补空格,但是用引号括起来的字符串中的尾部空格保留 例如: create table test1 (id int, name char(10),name1 varchar(10) insert into test1 values(1,aaa,bbb) commit,字符函数,例如: select convert(binary,name) from test1 where id = 1 输出为: 0x61616120202020202020 (10个字节) length(name) = 10 select convert(binary,name1) from test1 where id = 1 输出为: 0x626262 (3个字节) length(name1) = 3 insert into test1 values(2,ccc , ccc ) select convert(binary,name1) from test1 where id = 2 输出为: 0x6363632020 (5个字节,2个空格) length(name1) = 5,字符函数,字符串函数可以对二进制数据、字符串和表达式执行不同的运算 字符串函数可以分为以下几大类: 基本字符串函数:UPPER,LOWER,SPACE,REPLICATE,STUFF,REVERSE,LTRIM,RTRIM。 字符串查找函数:CHARINDEX,PATINDEX。 长度和分析函数:DATALENGTH,SUBSTRING,RIGHT。 转换函数:ASCII,CHAR,STR,SOUNDEX,DIFFERENCE。,字符函数,一些示例 字符串替换 select replace(cdefghidefaa, def, yyy) 结果: cyyyghiyyyaa select str_replace (cdefghidefaa, def, yyy) 结果:同replace select str_replace(abcdefghijklm, def, NULL) 结果: abcghijklm select replace(abcdefghijklm, def, NULL) 结果:NULL,字符函数,一些示例 字符串查找(CHARINDEX、PATINDEX) -姓名以字母a开头记录 select charindex (a,china abc) 返回 5 select patindex(%0-9%,ab9dd) 返回3,转换函数,转换函数有两个:CONVERT和CAST。 CAST函数允许把一个数据类型强制转换为另一种数据类型,其语法形式为: CAST( expression AS data_type ) CONVERT函数允许用户把表达式从一种数据类型转换成另一种数据类型,还允许把日期转换成不同的样式,其语法形式为: CONVERT (data_type(length),expression ,style),HTTP函数, HTML_DECODE 函数 Miscellaneous HTML_ENCODE 函数 Miscellaneous HTTP_DECODE 函数 Web 服务 HTTP_ENCODE 函数 Web 服务 HTTP_HEADER 函数 Web 服务 HTTP_VARIABLE 函数 Web 服务 NEXT_HTTP_HEADER 函数 Web 服务 NEXT_HTTP_VARIABLE 函数 Web 服务,用户定义函数,SAP Sybase IQ 中有两种创建用户定义函数的机制。 可以使用 SQL 语言编写函数, 可以使用 ESQL、ODBC、Java、Perl 或 PHP 外部环境。,用户定义函数,可以使用 SQL 语言编写函数, SQL 中用户定义的函数 创建了 SQL 用户定义的函数后,可以在任何使用相同数据类型的内置函数的位置使用该函数。 注意: 不要在具有用户定义函数的视图中使用 CONTAINS 谓词,因为CONTAINS 条件将被忽略。可用LIKE 谓词代替,或者在视图外发出查询。 Java 中用户定义的函数 已安装的 Java 类的任何类方法都可以作为用户定义的函数,在任何使用相同数据类型的内置函数的位置使用。 实例方法与类的特定实例相关,所以其行为与标准用户定义的函数不同 有关创建 Java 类及类方法的详细信息,请参见编程指南中的数据库中的 Java。,内容提要,关系数据库基本知识 SQL语言概述 SQL语句(Select)使用 SQL函数使用 SQL语句与数据库可用性和性能的关系,SQL语句与数据库可用性和性能的关系,SQL语句编写在很大程度上影响数据库的资源使用、可用性和性能 实现一个任务有多种编写方法,应当尽量避免不好的。 常见问题 数据集合中的字段过多,有些可能并一定需要。在共享环境下选取过多的字段会消耗系统资源 没有合理的过滤表中的记录,造成记录过多,实际上可能并不需要这么多记录 Where条件编写,
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!