1、第二章 SQL查询和SQL函数第2章 SQL查询和SQL函数回顾 Oracle 服务器由Oracle 数据库和 Oracle 实例组成 Oracle 实例由系统全局区内存结构和用于管理数据库的后台进程组成 Oracle 中用于访问数据库的主要查询工具有 SQL*Plus、iSQL*Plus 和 PL/SQL Oracle 企业管理器是用于管理、诊断和调整多个数据库的工具 Oracle 中的 SYSTEM 用户和 SYS 用户具有管理权限,而 SCOTT 用户只有基本的权限 目标 了解 Oracle 数据类型 了解数据定义语言和数据操纵语言 了解事务控制语言和数据控制语言 掌握 SQL 操作符和
2、 SQL 函数Oracle 数据类型数据类型说明char字符型,最大长度2000字节nchar基于NLS字符型,最大长度是2000字符varchar2变长的字符数据类型,最大长度2000字节nvarchar2变长的NLS字符数据类型,最大长度是2000字符varcharnumber(p,s)数值类型。p表示总位数,s表示小数位。其中小数点不算位数。date时间类型long变长的字符类型,但不支持检索,最大支持2GBraw二进制数据,2000Blong raw2GB,但不支持检索blob4GBclob4GBnclob4GBbfile保存二进制文件,数据是保存在单独的文件中,而非数据库中。NLS:
3、国家语言varchar2:是oracle中推荐的字符类型,它是向前向后兼容。varchar类型就可能会因为SQL改进而被过时。number:小数点后的位数大于精度则进位计算,若进位后的总位数大于p,则报错。不谈小数部分,若整数部分加小数大于总位数就直接报错。char与nchar的比较-创建一张测试表create table t1( name char(10), sex char(1)-插入正常数据insert into t1 values (tom,m);insert into t1 values (Ntom,m);insert into t1 values (tomtomtomtom,m);
4、insert into t1 values (你好你好你好,m);-创建一张测试表create table t2( name nchar(10), sex nchar(1)-插入数据insert into t2 values (tomtomtom你好,m);此时把字母的长度也改成占2个字节即1个字符number类型:-创建一张测试表create table t2( name nchar(10), sex nchar(1), grade number(4,2)insert into t2 values (你好,m,99.899);其中小数点后的位数已经超过精度了,但是不报错如果有进位的话:ins
5、ert into t2 values (你好,m,99.999);若换一个没有整数进位的,正常:insert into t2 values (你好,m,98.999);注意插入时间的格式insert into t4 values (张三,9-9月 -8)时间格式select sysdate from dual;alter session set nls_date_format=yyyy-mm-dd;SQL语言回顾DDL 数据定义语言 自动提交事务用于创建、删除数据库的对象和维护数据对象的属性 create table alter table drop table truncate table
6、若表中存在外键则不能使用,效率必delete 高DML 数据操作语言 select 使用别名 带条件的查询 where 精确查询 = 模糊查询 between 。and 。 like in 关联查询 内连接 左连接 右连接以join后面的表为参考表注意加号的位置 交叉连接返回的记录数是两表的记录数相乘 delete update insertDCL数据控制语句 授权grant 收回权限 revokeTCL事务控制语句 commit 提交数据 rollback 回滚 savepoint 设置保存点,rollback to savepointoracle函数单行函数字符函数 大小写转换函数lowe
7、r();upper();initcap();字符处理函数concat()substr()日期函数缺省的格式是日-月 年用sysdate表示系统时间可以直接使用算术运算 日期之间可以相减,相加没意义 可以和数值加减(单位是天) round()四舍五入 trunc()舍去next_day(sysdate,星期一)计算这个日期以后的下个星期一是哪天为什么错?函数的参数有问题!算数函数abs()round()trunc()转换函数 to_char() to_number() to_date()通用函数 NVL(列名或常量,替换以后的值)函数 将列名或常量中NULL替换相应的数据 NVL2(exp1,e
8、xp2,exp3)如果exp1的值不为null,就返回exp2的值,否则就返回exp3的值 nullif(exp1,exp2)如果两个表达式相等,就返回null,否则返回exp1的值case 表达式语法:case 表达式 when 判断值 then 结果 when 判断值 then 结果 when 判断值 then 结果 esleend as 别名注意表达式的位置decode()函数decode(表达式,条件1,值1,条件2,值2,其余的值)多行函数分组函数对一组数据进行计算avgcountmaxminsum分组函数会忽略空值的行select avg(nvl(comm,0) from emp;
9、Group by说明:出现在select列表中的字段,不是出现在分组函数中,就必须出现在group by 子句中group by 子句中的子句不必出现在select列表中常见错误select在没有group by后不能又跟单行函数,还跟多行函数不允许在where中使用分组函数,因为先执行where,还不知道group by是怎么分组的。此时可以使用having分组函数最多只能嵌套2层分析函数SELECT e.rowid, row_number() over (order by sal),rank() over (order by sal),dense_rank() over (order by sal), sal,d.dname, e.ename, e.sal,e.deptno, DENSE_RANK() OVER (PARTITION BY e.deptno ORDER BY e.sal DESC) AS DENRANK FROM emp e, dept d WHERE e.deptno = d.deptno; .
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1