数据库SQL语法函数介绍.ppt
,数据库 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 并常常简称为sequelSQL为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-86ANSI SQL-89ANSI SQL-92ANSI SQL-99ANSI SQL-2003ANSI 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 TABLEALTER TABLEDROP TABLECREATE INDEXALTER INDEXDROP INDEX,SQL语言分类DML,用于在关系数据库对象中操纵数据INSERTUPDATEDELETESELECT(也被单独称为DQL),SQL语言分类DCL,用于创建与用户访问相关的对象,也控制着用户的权限分配ALTER USER 改变数据库用户信息GRANT 为用户授予特权REVOKE 从用户处收回特权,事务控制命令,用户管理数据库的事务命令COMMIT 用于保护数据库的事务ROLLBACK 用于撤消数据库的事务SAVEPOINT 创建一组事务中的撤消点,内容提要,关系数据库基本知识SQL语言概述SQL语句(Select)使用SQL函数使用SQL语句与数据库可用性和性能的关系,SQL语句的一般语法规则,Select语句的简单例子SELECT NAME,STARTTERM,ENDTERMFROM PRESIDENTSWHERE NAME=LINCOLN关键字(大小写不敏感)SelectFromWhere使用空格分开不同部分,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 CHECKSselect*from checks下列查询能否工作a.Select b.Select*b.Select*from employeec.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 checksAmount是表达式SELECT NAME,ADDRESS,PHONE FROM ADDRESSBOOKNAME、ADDRESS、PHONE、ADDRESSBOOK是表达式,SQL运算符,算术运算符加、减、乘、除、取模赋值运算符=位运算符&、|、比较运算符True、False、unknown;、)字符型like(%、_)、|逻辑型NOT、AND、ORselect*from department where 1=1 or 1=1 and 1=2select*from department where not 1=2 and 1=1,SQL运算符,集合运算union、union all、intersect、minus从属运算in、between,搜索条件,比较条件=等于 大于=大于或等于 不等于!不大于!不小于,搜索条件,BetweenBETWEEN 条件的语法如下:expr NOT BETWEEN start-expr AND end-exprBETWEEN 条件的值可以是 TRUE、FALSE 或 UNKNOWN。在没有关键字 NOT 的情况下,如果 expr 介于 start-expr 和 end-expr 之间,则条件的值为 TRUE。NOT 关键字使条件的含义相反,但保留 UNKNOWN 不变。BETWEEN 条件相当于两个不等式的组合:expr=start-expr AND expr=end-expr,搜索条件,LIKELIKE 条件的语法如下:expression NOT LIKE pattern ESCAPE escape-expr LIKE 条件的值可以是 TRUE、FALSE 或 UNKNOWN只能对字符串数据使用like通配符匹配项_(下划线)任意一个字符%(百分号)包含零个或多个字符的任意字符串 指定范围或集合中的任意单个字符 不在指定范围或集合中的任意单个字符,搜索条件,ExistsEXISTS 条件的语法如下:EXISTS(subquery)如果子查询结果至少包含一行,则 EXISTS 条件为 TRUE;如果子查询结果不包含任何行,则条件为 FALSE。EXISTS 条件不能为 UNKNOWN,搜索条件,IS nullIS NULL 条件的语法如下:expression IS NOT NULL在没有 NOT 关键字的情况下,如果表达式的值为 NULL,则 IS NULL 条件为 TRUE,否则为 FALSE。NOT 关键字使条件的含义相反。,练习,写一个查询返回数据库中所有名字以M 开头的人WHERE a=10 AND a=30 的更便捷写法是什么请写出来,SQL子句,WhereGroup byOrder byHaving,SQL子句,Where(对记录集合进行过滤)select*from employee where salary 100000 select*from employee where emp_fname=Mary Anneselect*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_idASA 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)minfrom employee group by stateorder by state,SQL子句综合应用,所有子句都用到select state,sum(salary),count(*)from employeewhere salary50000group by statehaving sum(salary)100000Order 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 don m.provno=d.provno and m.accno=d.accno也可以按照下面语法写:select count(*)from accmaininfo m,accdetail dwhere m.provno=d.provno and m.accno=d.accno,表的连接内部连接,正确地找到列Select*可以选择所有列。如果需要选择特定列,怎么做?select accname,balancefrom accmaininfo m,accdetail dwhere m.provno=d.provno and m.accno=d.accno使用表名前缀select m.accname,m.balancefrom accmaininfo m,accdetail dwhere m.provno=d.provno and m.accno=d.accno,表的连接外部连接,左外部连接:Left outer join(左边表全集)select m.balance,d.balance,tranpronofrom accmaininfo m left outer join accdetail don m.provno=d.provno and m.accno=d.accno and tranprono=30,表的连接外部连接,右外部连接Right outer join(右边表全集)select m.balance,d.balancefrom accmaininfo m right outer join accdetail don 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.salaryfrom employee a,employee bwhere a.emp_id=b.manager_id and b.salary80000,子查询,子查询是一种把查询的结果作为参数返回给另一个查询的一种查询。子查询可以让你将多个查询绑定在一起,到今天结束以后,你将掌握以下内容建立一个子查询在你的子查询中使用 EXIST ANY和ALL 关字建立和使用子查询的关联,子查询,建立子查询:要查询某人下的所有账户数据,但不知道账户代码,只知道姓名select*from accdetail whereaccno in(SELECT accno from accmaininfowhere accname=伟泽)三个之一即可accno490201100338228,子查询使用汇总函数,子查询中可以使用SUM、AVG、COUNT、MIN 和MAX。比如,想查询余额在平均值以上的accmaininfo:select accname,balance from accmaininfoWhere balance(select avg(balance)from accmaininfo),子查询相关子查询,到现在为止,我们所写出的子查询都是独立的它们都没有涉及到其它的子查询。相关子查询可以接受外部的引用。select*from accdetail d where伟泽=(SELECT accname from accmaininfowhere accno=d.accno)跟下面语句相当:select*from accdetail d,accmaininfo mWhere d.accno=m.accno and accname=伟泽,子查询in,In可以返回多个值select count(*)from accdetailwhere accno=(select accno from accmaininfowhere accname=悠悠)可是使用in代替=select count(*)from accdetailwhere accno in(select accno from accmaininfowhere accname=悠悠),子查询exists,Exists返回true或者falseselect*from accdetail d whereexists(SELECT accname from accmaininfowhere accname=伟泽)Exists只是一个条件,true的时候返回所有数据,false的时候不返回数据,子查询exists,Exists更为有用的是使用相关子查询select*from accdetail d whereexists(SELECT accname from accmaininfo mwhere accname=伟泽 and m.accno=d.accno)这时候,只返回该客户的账户细节数据,四、修改数据,InsertUpdateDelete,操作数据Insert,INSERT 语句允许你向数据库中输入数据,它有两种写法:INSERT VALUES INSERT SELECTINSERT 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 branchinfovalues(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 conditiondelete from branch where provno=11通过DELETE 语句和WHERE 子句DELETE 语句可以完成下边的工作:删除单一的行删除多个行删除所有的行什么也不删除,操作数据update,该语句的作用是将已存在的记录的内容改变语法格式如下:UPDATE table_name SET columnname1=value1,columname2=value2.WHERE search_conditionUPDATE 语句首先要检查WHERE 子句,对于符合WHERE 子句条件的记录将会用给定的数据进行更新,操作数据update,update branchinfo set remark=Remarkwhere provno=11使用select语句验证select*from branchinfo where provno=11,练习,下边的语句正确吗?DELETE COLLECTIONINSERT INTO COLLECTION SELECT*FROM TABLE_2UPDATE 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()。,集合函数,CountSelect count(*)from employee where dept_id=100Count不统计nullSumselect sum(salary)from employee where dept_id=100如果全是null,则sum结果也为null只能处理数值只能处理数值,集合函数,Avgselect Avg(salary)from employee where dept_id=100如果全是null,则avg结果也为null只能处理数值,集合函数,MaxSelect Max(salary)from employeeSelect emp_fname from employee where salary=max(salary)Msg 13204,Level 15,State 0:ASA Error-150:Invalid use of an aggregate functionMinSelect Max(salary),min(salary)from employeeVariance方差select variance(salary)from employeeStddev标准差,集合函数,用于进行时序分析的 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