《8.sql语言基础》由会员分享,可在线阅读,更多相关《8.sql语言基础(104页珍藏版)》请在金锄头文库上搜索。
1、第八章 SQL语言基础,本章内容,SQL语句分类 数据查询(SELECT) 数据操纵(INSERT、UPDATE、DELETE) 事务控制 SQL函数 SQL*PLUS,本章要求,掌握数据查询的各种应用 掌握数据操纵的各种应用 掌握事务控制 了解SQL函数应用 掌握SQL*PLUS的使用,8.1 SQL语言概述,SQL语言介绍 SQL语言的分类 SQL语言的特点,8.1.1 SQL语言介绍,SQL(Structured Query Language)语言是1974年由Boyce 和Chamberlin提出的。 SQL语言是关系数据库操作的基础语言,将数据查询、数据操纵、数据定义、事务控制、系统
2、控制等功能集于一体,从而使得数据库应用开发人员、数据库管理员等都可以通过SQL语言实现对数据库的访问和操作。,8.1.2 SQL语言的分类,数据定义语言(Data Definition Language,DDL):用于定义、修改、删除数据库对象,包括CREATE,ALTER,DROP,GRANT,REVOKE,AUDIT和NOAUDIT等。 数据操纵语言(Data Manipulation Language,DML):用于改变数据库中的数据,包括数据插入(INSERT)、数据修改(UPDATE)和数据删除(DELETE)。 数据查询语言(Data Query Language,DQL):用于数
3、据检索,包括SELECT。 事务控制(Transaction Control):用于将一组DML操作组合起来,形成一个事务并进行事务控制。包括事务提交(COMMIT)、事务回滚(ROLLBACK)、设置保存点(SAVEPOINT)和设置事务状态(SET TRANSACTION)。 系统控制(System Control):用于设置数据库系统参数,包括ALTER SYSTEM。 会话控制(Session Control):用于设置用户会话相关参数,包括ALTER SESSION。,8.1.3 SQL语言的特点,功能一体化:几乎涵盖了对数据库的所有操作,语言风格统一。 高度的非过程化:在使用SQL
4、语言操作数据库时,用户只需要说明“做什么”,而不需要说明“怎样做”。用户任务的实现对用户而言是透明的,由系统自动完成。这大大减轻了用户的负担,同时降低了对用户的技术要求。 面向统计的操作方式:SQL语言采用统计操作方式,不仅查询结果可以是多条记录的统计,而且一次插入、删除、修改操作的对象也可以是多条记录的统计。面向统计的操作方式极大地提高了对数据操作效率。 多种使用方式:SQL语句既是自含式语言,又是嵌入式语言。SQL语言可以直接以命令方式与数据库进行交互,也可以嵌入到其他的高级语言中使用。 简洁、易学:SQL语言命令数量有限,语法简单,接近于自然语言(英语),因此容易学习和掌握。,8.2 数
5、据查询,数据查询基础 基本查询 分组查询 连接查询 子查询 合并查询,8.2.1数据查询基础,命令: SELECT 格式: SELECT ALL|DISTINCT, FROM , WHERE GROUP BY HAVING ORDER BY ASC|DESC; 描述: 根据WHERE子句的条件表达式,从FROM子句指定的基本表或视图中找出满足条件的元组,再按SELECT子句中的目标列表达式,选出元组中的属性值形成结果表。如果有GROUP BY子句则将结果按的值进行分组,该属性列相等的元组为一个组。通常会在每组中作用集函数。如果GROUP子句带有HAVING短语,则只有满足指定条件的组才予输出。
6、如果有ORDER BY子句,则结果表还要按的值升序或降序排列。,SELECT * from dept;,SELECT * from emp;,8.2.2基本查询,无条件查询 有条件查询 查询排序 查询统计,无条件查询,查询所有列 select * from dept; 查询指定列 select deptno,dname from dept; select empno,sal*0.18 from emp;使用算术表达式 Select empno,sal*0.8 from emp; 使用字符常量(字符常量出现在每一行查询结果中) Select empno,Name is:, ename from
7、emp; 使用函数 Select empno,UPPER( ename) from emp;,改变列标题 Select empno employeename, sal AS salary , job,dept from emp; 使用连接字符串(用|将常量、查询结果连接起来) Select ename | : | 1 | month salary= | sal as monthy from emp; 消除重复行 SQL select ALL ename from emp; SQL select DISTINCT ename from emp;,有条件查询,查询满足条件的元组可以通过WHERE
8、子句实现。 WHERE条件中常用的运算符号,关系运算 select empno,ename,sal from emp where deptno = 10; Select empno ,ename ,sal from emp where sal1500; 确定范围 谓词BETWEEN AND与NOT BETWEEN AND。select empno,ename,sal ,deptno from emp where deptno between 10 and 20 select empno,ename,sal ,deptno from emp where sal not between 1000
9、and 2000,确定统计 谓词IN可以用来查找属性值属于指定统计的元组。 select empno,ename,sal,deptno from emp where deptno in (10,30);,字符匹配:谓词LIKE可以用来进行字符串的匹配。一般格式: NOT LIKE ESCAPE 功能是查询指定的属性列与相匹配的元组。 【注释】 可以是一个完整的字符串,也可以含有通配符的字符串,通配符包括%、_。 %(百分号)代表任意长(长度为0)字符串。 _(下划线)代表任意单个字符。 如果LIKE后面的匹配串中不含有通配符,则可以用=(等号)代替LIKE谓词,用!=或(不等号)代替NOT L
10、IKE谓词。 换码字符:如果用户要查询的字符串本身就含有%或_,这时要使用ESCAPE 短语,对通配符进行转义。换码字符可以是任意字符。 如果对单引号不进行变换,则会发生错误;只要将单引号转换成两个单引号就可以了。 例:SELECT * FROM TBL WHERE COL = ABCDEF;,字符匹配 例: SQL select empno,ename,sal,deptno from emp where ename like S%; 结果 EMPNO ENAME SAL DEP - - - - 7369 SMITH 800 20 7788 SCOTT 3000 20 例: SQL selec
11、t empno,ename,sal,deptno fromemp where ename like _ _R%; 结果 EMPNO ENAME SAL DEP - - - - 7521 WARD 1250 30 7654 MARTIN 1250 30 7844 TURNER 1500 30 例:换码字符 SQL select empno,ename,sal,deptno from emp where ename like SMX_R% ESCAPE X; /要查询名为“SM_R.”的数据,空值操作 涉及空值查询时使用IS NULL或 IS NOT NULL,这里的IS不能用=替代。 selec
12、t empno,ename,sal,deptno from emp where comm is not null select empno,ename,sal,deptno from emp where comm is null,逻辑操作 用逻辑运算符NOT、AND和OR来联结多个查询条件。 优先级:NOT、AND、OR(用户可以用括号改变优先级)。 IN谓词实际上是多个OR运算的缩写。 select empno,ename,sal,deptno from emp where comm is not null and sal 1500;select ename, job, sal from e
13、mpwhere ( job=SALESMAN or job= CLERK) and sal1500;,查询排序,升序、降序排序 多列排序 表达式排序 使用别名排序 使用列位置编号排序,升序、降序排序 ASC: 升序 (缺省);DESC: 降序 SELECT empno,ename,sal FROM emp ORDER BY sal; SELECT empno,ename,sal FROM emp ORDER BY sal DESC; 多列排序 首先按照第一个列或表达式进行排序;当第一个列或表达式的数据相同时,以第二个列或表达式进行排序,以此类推 。 SELECT * FROM emp ORDE
14、R BY deptno,sal DESC;,按表达式排序 可以按特定的表达式进行排序。 SELECT empno,ename,sal FROM emp ORDER BY sal*12; 使用别名排序 可以使用目标列或表达式的别名进行排序。: SELECT empno,sal*12 salary FROM emp ORDER BY salary; 使用列位置编号排序 如果列名或表达式名称很长,那么使用位置排序可以缩短排序语句的长度。 SELECT empno,sal*12 salary FROM emp ORDER BY 2;,常用的统计函数,注意 除了COUNT(*)函数外,其他的统计函数都不
15、考虑返回值或表达式为NULL的情况。 统计函数只能出现在目标列表达式、ORDER BY子句、HAVING子句中,不能出现在WHERE子句和GROUP BY子句中。 默认对所有的返回行进行统计,包括重复的行;如果要统计不重复的行信息,则可以使用DISTINCT选项。 如果对查询结果进行了分组,则统计函数的作用范围为各个组,否则聚集函数作用于整个查询结果。,SELECT count(*),avg(sal),max(sal),min(sal) FROM emp WHERE deptno=10; SELECT avg(comm),sum(comm) FROM emp ; SELECT count(DISTINCT deptno) FROM emp; SELECT variance(sal),stddev(sal) FROM emp;,8.2.3分组查询,基本语法 单列分组查询 多列分组查询 使用HAVING子句限制返回组 使用ROLLUP 和CUBE 合并分组查询,EMP,每个部门 的 平均薪水,2916.6667,2175,1566.6667,DEPTNO SAL - -10 245010 500010 130020 80020 110020 300020 300020 297530 160030 285030 125030 95030 150030 1250,