SQL语言基础.ppt
Oracle 数据库基础教程2007 第 11章 SQL语言基础 Oracle 数据库基础教程2007 本章内容 p SQL语句分类 p 数据查询( SELECT) p 数据操纵( INSERT、 UPDATE、 DELETE) p 事务控制 p SQL函数 Oracle 数据库基础教程2007 本章要求 p 掌握数据查询的各种应用 p 掌握数据操纵的各种应用 p 掌握事务处理 p 了解 SQL函数应用 Oracle 数据库基础教程2007 14.1SQL语言概述 p SQL语言介绍 p SQL语言的分类 p SQL语言的特点 Oracle 数据库基础教程2007 14.1.1SQL语言介绍 p SQL( Structured Query Language)语言是 1974年由 Boyce 和 Chamberlin提出的。 p SQL语言是关系数据库操作的基础语言,将数据 查询、数据操纵、数据定义、事务控制、系统控 制等功能集于一体,从而使得数据库应用开发人 员、数据库管理员等都可以通过 SQL语言实现对 数据库的访问和操作。 Oracle 数据库基础教程2007 14.1.2SQL语言的分类 p 据定义语言( Data Definition Language, DDL):用于定义、 修改、删除数据库对象,包括 CREATE, ALTER, DROP, GRANT , REVOKE, AUDIT和 NOAUDIT等。 p 数据操纵语言( Data Manipulation Language, DML):用于改 变数据库中的数据,包括数据插入( INSERT)、数据修改( UPDATE)和数据删除( DELETE)。 p 数据查询语言( Data Query Language, DQL):用于数据检索 ,包括 SELECT。 p 事务控制( Transaction Control):用于将一组 DML操作组合起 来,形成一个事务并进行事务控制。包括事务提交( COMMIT)、 事务回滚( ROLLBACK)、设置保存点( SAVEPOINT)和设置事 务状态( SET TRANSACTION)。 p 系统控制( System Control):用于设置数据库系统参数,包括 ALTER SYSTEM。 p 会话控制( Session Control):用于设置用户会话相关参数,包 括 ALTER SESSION。 Oracle 数据库基础教程2007 14.1.3SQL语言的特点 p 功能一体化:几乎涵盖了对数据库的所有操作,语言风格统一。 p 高度的非过程化:在使用 SQL语言操作数据库时,用户只需要说明 “ 做什么 ”,而不需要说明 “怎样做 ”。用户任务的实现对用户而言是透 明的,由系统自动完成。这大大减轻了用户的负担,同时降低了对 用户的技术要求。 p 面向集合的操作方式: SQL语言采用集合操作方式,不仅查询结果 可以是多条记录的集合,而且一次插入、删除、修改操作的对象也 可以是多条记录的集合。面向集合的操作方式极大地提高了对数据 操作效率。 p 多种使用方式: SQL语句既是自含式语言,又是嵌入式语言。 SQL 语言可以直接以命令方式与数据库进行交互,也可以嵌入到其他的 高级语言中使用。 p 简洁、易学: SQL语言命令数量有限,语法简单,接近于自然语言 (英语),因此容易学习和掌握。 Oracle 数据库基础教程2007 14.2数据查询 p 数据查询基础 p 基本 查询 p 分组查询 p 连接查询 p 子查询 p 合并查询 Oracle 数据库基础教程2007 14.2.1数据查询基础 p 基本语法: SELECT [ALL|DISTINCT]column_name[,expression…] FROM table1_name[,table2_name,view_name,…] [WHERE condition] [GROUP BY column_name1[,column_name2,…] [HAVING group_condition]] [ORDER BY column_name2 [ASC|DESC][,column_name2,…]]; Oracle 数据库基础教程2007 14.2.2基本查询 p 无条件查询 p 有条件查询 p 查询排序 p 查询统计 Oracle 数据库基础教程2007 无条件查询 p 查询所有列 n select * from dept; p 查询指定列 n select deptno,dname from dept; n select empno,sal*0.18 from emp; p 使用算术表达式 n Select empno,sal*0.8 from emp; p 使用字符常量 n Select empno,’Name is:’, ename from emp; p 使用函数 n Select empno,UPPER( ename) from emp; Oracle 数据库基础教程2007 p 改变列标题 n Select empno employeename,sal AS salary , job,dept from emp; p 使用连接字符串 n Select ename || ‘:’ || ’1’ || ’month salary=‘ || sal as monthy from emp p 消除重复行 n SQL select [ALL] ename from emp; n SQL select DISTINCT ename from emp; Oracle 数据库基础教程2007 有条件查询 p 查询满足条件的元组可以通过 WHERE 子句实现。 p WHERE条件中常用的运算符号 运算符号 谓词 比 较 大小 =, , =, , != 确定范 围 BETWEEN AND, NOT BETWEEN AND 确定集合 IN, NOT IN 字符匹配 LIKE, NOT LIKE 空 值 IS NULL, IS NOT NULL 多重条件 AND, OR Oracle 数据库基础教程2007 p 关系运算 n select empno,ename,sal from emp where deptno = 10; n Select empno ,ename ,sal from emp where sal1500 p 确定范围 n 谓词 BETWEEN AND与 NOT BETWEEN AND。 n select empno,ename,sal ,deptno from emp where deptno between 10 and 20 n select empno,ename,sal ,deptno from emp where sal not between 1000 and 2000 Oracle 数据库基础教程2007 p 确定集合 n 谓词 IN可以用来查找属性值属于指定集合的元组 。 n select empno,ename,sal,deptno from emp where deptno in (10,30); p 字符匹配 n %(百分号)代表任意长(长度为 0)字符串。 n _(下划线)代表任意单个字符。 n ESCAPE:转义字符 n select empno,ename,sal,deptno from emp where ename like S% ; Oracle 数据库基础教程2007 p 空值操作 n 涉及空值查询时使用 IS NULL或 IS NOT NULL, 这里的 IS不能用 =替代。 n select empno,ename,sal,deptno from emp where comm is not null n select empno,ename,sal,deptno from emp where comm is null Oracle 数据库基础教程2007 p 逻辑操作 n 用逻辑运算符 NOT、 AND和 OR来联结多个查询条件 。 n 优先级: NOT、 AND、 OR( 用户可以用括号改变优 先级)。 n IN谓词实际上是多个 OR运算的缩写。 n select empno,ename,sal,deptno from emp where comm is not null and sal 1500; n select ename, job, sal from emp where ( job= SALESMAN or job= ‘CLERK ) and sal1500; Oracle 数据库基础教程2007 查询排序 p 升序、降序排序 p 多列排序 p 表达式排序 p 使用别名排序 p 使用列位置编号排序 Oracle 数据库基础教程2007 p 升序、降序排序 n ASC: 升序 (缺省); DESC: 降序 n SELECT empno,ename,sal FROM emp ORDER BY sal; n SELECT empno,ename,sal FROM emp ORDER BY sal DESC; p 多列排序 n 首先按照第一个列或表达式进行排序;当第一个列或表达式的数 据相同时,以第二个列或表达式进行排序,以此类推 。 n SELECT * FROM emp ORDER BY deptno,sal DESC; Oracle 数据库基础教程2007 p 按表达式排序 n 可以按特定的表达式进行排序。 n SELECT empno,ename,sal FROM emp ORDER BY sal*12; p 使用别名排序 n 可以使用目标列或表达式的别名进行排序。 : n SELECT empno,sal*12 salary FROM emp ORDER BY salary; p 使用列位置编号排序 n 如果列名或表达式名称很长,那么使用位置排序可以缩短排序语 句的长度。 n SELECT empno,sal*12 salary FROM emp ORDER BY 2; Oracle 数据库基础教程2007 查询统计 函数 格式 功能 AVG AVG([DISTINCT|ALL] ) 计 算一列 值 的平均 值 (要求数 值 列) COUNT COUNT([DISTINCT|ALL] * ) 统计 元 组 个数 COUNT COUNT([DISTINCT|ALL] ) 统计 一列中 非空 值 的个数 MAX MAX([DISTINCT|ALL] ) 求一列 值 中的最大 值 MIN MIN([DISTINCT|ALL] ) 求一列 值 中的最小 值 SUM SUM([DISTINCT|ALL] ) 计 算一列 值 的 总 和(要求数 值 列 ) STDDEV STDDEV() 计 算一列 值 的 标 准差 VARIANC E VARIANCE() 计 算一列 值 的方差 Oracle 数据库基础教程2007 p 注意 n 除了 COUNT(*)函数外,其他的统计函数都不考虑 返回值或表达式为 NULL的情况。 n 聚集函数只能出现在目标列表达式、 ORDER BY子 句、 HAVING子句中,不能出现在 WHERE子句和 GROUP BY子句中。 n 默认对所有的返回行进行统计,包括重复的行;如果 要统计不重复的行信息,则可以使用 DISTINCT选 项。 n 如果对查询结果进行了分组,则聚集函数的作用范围 为各个组,否则聚集函数作用于整个查询结果。 Oracle 数据库基础教程2007 p SELECT count(*),avg(sal),max(sal),min(sal) FROM emp WHERE deptno=10; p SELECT avg(comm),sum(comm) FROM emp ; p SELECT count(DISTINCT deptno) FROM emp; p SELECT variance(sal),stddev(sal) FROM emp; Oracle 数据库基础教程2007 14.2.3分组查询 p 基本语法 p 单列分组查询 p 多列分组查询 p 使用 HAVING子句限制返回组 p 使用 ROLLUP 和 CUBE p 合并分组查询 Oracle 数据库基础教程2007 EMP 每个部门每个部门 的的 平均薪水平均薪水 2916.6667 2175 1566.6667 DEPTNO SAL --------- --------- 10 2450 10 5000 10 1300 20 800 20 1100 20 3000 20 3000 20 2975 30 1600 30 2850 30 1250 30 950 30 1500 30 1250 DEPTNO AVG(SAL) ------- --------- 10 2916.6667 20 2175 30 1566.6667 将查询结果表按某一列或多列值分组,值相等的为一组 。 分组查询 Oracle 数据库基础教程2007 p 语法 n SELECT column, group_function, … n FROM table n [WHERE condition] n [GROUP [BY ROOLUP|CUBE|GROUPING SETS] group_by_expression] n [HAVING group_condition] n [ORDER BY column[ASC|DESC]]; Oracle 数据库基础教程2007 p GROUP BY子句用于指定分组列或分组表达式。 p 集合函数用于对分组进行统计。如果未对查询分组,则 集合函数将作用于整个查询结果;如果对查询结果分组 ,则集合函数将作用于每一个组,即每一个分组都有一 个集合函数。 p HAVING子句用于限制分组的返回结果。 p WHERE子句是对表中的记录进行过滤,而 HAVING子 句是对分组后形成的组进行过滤。 p 在分组查询中, SELECT子句后面的所有目标列或目标 表达式要么是分组列,要么是分组表达式,要么是集合 函数。 Oracle 数据库基础教程2007 p 单列分组查询 n 将查询出来的记录按照某一个指定的列进行分组 n SELECT deptno,count(*),avg(sal) FROM emp GROUP BY deptno; p 多列分组查询 n 在 GROUP BY子句中指定了两个或多个分组列 n SELECT deptno,job,count(*),avg(sal) FROM emp GROUP BY deptno,job; Oracle 数据库基础教程2007 p 使用 HAVING子句限制返回组 n 可以使用 HAVING子句,只有满足条件的组才会返 回。 n SELECT deptno,count(*),avg(sal) FROM emp GROUP BY deptno HAVING avg(sal)1500; p 使用 ROLLUP 和 CUBE n 如果在 GROUP BY子句中使用 ROLLUP选项,则还 可以生成横向统计和不分组统计; n 如果在 GROUP BY子句中使用 CUBE选项,则还可 以生成横向统计、纵向统计和不分组统计。 Oracle 数据库基础教程2007 n SELECT deptno,job,avg(sal) FROM emp GROUP BY ROLLUP(deptno,job); n SELECT deptno,job,avg(sal) FROM emp GROUP BY CUBE(deptno,job); p 合并分组查询 n 使用 GROUPING SETS可以将几个单独的分组查询 合并成一个分组查询 n SELECT deptno,job,avg(sal) FROM emp GROUP BY GROUPING SETS(deptno,job);