魔乐科技Oracle笔记(超经典)--李兴华
JAVA开发实战经典-课后习题答案-李兴华

MLDN-魔乐科技李兴华Oracle教程学习笔记

Oracle的数据类型:加粗字体(ctrl+B)使用ctrl+/可以快速的弹出一个虚拟符号键盘:✏(alt + 9999)如果只想复制表的结构到另一张表,而不复制任何的数据,则可以使用一个永远查询不到结果的查询来执行;Create table empnull as select * from emp where 1=2;为表重命名:在oracle数据库中,所有的数据实际上都是通过数据字典保存的,例如:select * from tab;以上就是一个数据字典,而在oracle数据库中,提供了三种类型的数据字典,最常用的是dbo、user、所以下面查询一个user_tables数据字典;Select * from user_tables;也就是说oracle中的所有数据都是按照文件保存的,那么所有的内容都会在数据字典中注册,既然这样,修改表名称就相当于修改一条数据而已:Rename 旧的表名称 to 新的表名称;如果希望彻底释放掉一张表所占用的全部资源(表空间、索引等等)就可以使用截断表的语法,语法如下:Truncate table 表名称;在oracle10G中,为了防止用户的误删除表的操作,专门提供了回收站的功能,用户所删除的表默认情况下回在一个回收站之中保存,而用户也可以通过回收站进行表的恢复,所以此技术成为闪回(flashback);可以通过如下名称查看回收站中的表:Show RECYCLEBIN;ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME---------------- ------------------------------ ------------ ------------------- MEMBER BIN$r34Nm9OVRxqjy8Jwh1KWJw==$0 TABLE 2012-01-25:10:28:51可以通过如下的命令恢复别删除的表:FLASHBACK TABLE 表名称 TO BEFORE DROP;例如恢复上面的member表:Flashback table member TO before drop;当然呢,也可以直接删除掉回收站中的而一些数据表,语法如下:Purage table 表名称;比如删除回收站中的member表:Purge table member;SQL> purge table member;表已清除。
Logic标签

E-MAIL:mldnqa@
< logic:iterate>标签属性
No. 属性名称 EL支持 描述
1
2 3 4 5 6 7 8 9
collection
id indexId length name scope offset property type
√
× × √ √ √ √ √ √
直接设置一个集合对象
判断内容是否为空 —— empty.jsp
<%@ page language="java" pageEncoding="GBK"%> <%@ page import="java.util.*"%> <%@ taglib uri="/struts/bean" prefix="bean"%> <%@ taglib uri="/struts/html" prefix="html"%> <%@ taglib uri="/struts/logic" prefix="logic"%> <html:html lang="true"> <head> <title>,MLDN高端Java培训</title> </head> <body> <% // 设置一个request范围的属性 List<String> all = new ArrayList<String>() ;// 定义集合,里面不设置内容 request.setAttribute("all",all) ; %> <logic:empty name="all" scope="request"> <!-- 判断属性是否为空 --> <h3>集合的内容为空(长度为0)!</h3> </logic:empty> <logic:empty name="author" scope="request"> <!-- 判断属性是否为空 --> <h3>没有发现author属性!</h3> </logic:empty> </body> </html:html>
Oracle学习笔记

Oracle 入门学习笔记
4.3 分析函数 .................................................................................................... 17 第三章 分区表与锁 ................................................................................................ 17 1. 分区表的分类 ....................................................................................................... 17 2. 分区表的使用 ....................................................................................................... 17 3. 分区表的维护 ....................................................................................................... 20 4. 锁 ........................................................................................................................ 21 第四章 数据对象..............................................................................
java李兴华学习笔记之实例讲解

/** * 根据编号查询单条记录 * @param empno 雇员编号 * @return 一个对象,如果没有查询到返回null * @throws Exception 如果有异常交给被调用处处理 */
public Emp findById(int empno) throws Exception ; /**
flag = true ;
}
pstmt.close() ;
dbc.close();
return flag;
}
以上确实实现了具体的接口的操作,但是这种代码会存在以下问题:
· 危险性:因为本代码一旦出错之后数据库无法关闭。
· 代码结构:应该划分出代理主题和真实主题。代理负责数据库打开和关闭,并且调用真实主题。
*/
public boolean doUpdate(Emp emp) throws Exception;
/**
* 数据库的删除操作 * @param empno 要删除的编号 * @return 是否删除成功的标记 * @throws Exception 有异常交给被调用处处理
*/
public boolean doDelete(int empno) throws Exception;
*/
public int getAllCount(String keyWord) throws Exception ;
}
下面肯定要实现此标准,但是在实现此标准中有一个问题需要考虑了。
在进行 JDBC 的操作中,可以发现步骤如下:
1、 加载驱动程序
2、 取得数据库连接
3、 进行数据库操作
à 这个是操作的重点
3、代码开发
3.1、开发口诀
MLDN魔乐科技Oracle课堂笔记

MLDN 魔乐科技_Oracle 课堂笔记1. sqlplusw 命令(窗口形式),sqlplusw 不支持编辑,一般在编辑器(记事本)中编辑好了后拷贝进去执行用ed,或命令;2. descdesc [table name];查看表结构3. show user查看当前用户4. select table_name from tabs显示当前用户下的表名;5. set linesizeset linesize [number];6. set pagesizeset pagesize [number];7. eded 命令用来从sqlplusw 中打开编辑器来编辑文件(文本文件);8. @执行sql 文件@D:\a.txt;@d:\a ;(a 文件的扩展名为.sql)9. connconn username/pwd@ 实例名;10. sql标准,其功能:DML(数据操作语言),DDL (数据定义语言),DCL(数据控制语言)11. 别名Oracle 中指定列别名;(不要指定为中文);12. distinct去除重复记录;13. ||字符串连接符;select "我的名字是:" || name from t_user;14. NOT NULL/IS NULL选择列值不为空的记录where collumname IS NOT NULL; 相反IS NULL;15. BETWEEN …AND …WHERE COLUMENAME BETWEEN...AND...; 等价于>=,<=, 如果是在时间之前,则需将时间'' 起来;16.大小写oracle 中查询值是大小写区分的,但关键字不区分;17.InFieldName in ( 值1,值2,值3,... 值n);NOT IN;18. Like在使用Like 时常用的通配符:%,匹配任意长度内容,_,匹配一个长度内容例:select *from emp where ENAME Like '_M%'; 表示第二个字母为M 的名字.19. >,<,>=,<=,<>,!= 用法20.order byOrder by语句,放在SQL语句最后;desc(从大到小)/asc(从小到大)(默认)21.单行函数字符/数值/日期/转换/通用函数;(1) .字符:UPPER() 变大写,LOWER() 变小写,INITCAP() 将单词第一个字母大写; 字符长度LENGTH(), 字符串截取SUBSTR(), 字符串替换REPLACE()其中substr()的第二个参数即起始位置索引为0或1效果都是从第一个字符开始,负数是从右边开始;(2) . 数值:四舍五入ROUND(), 截取TRUNC(), 求模MOD();ROUND(23.45,2),TRUNC(23.45,-1),MOD(10,3);(3) .日期:MONTHS_BETWEEN(), 两个日期之间的月数;MONTHS_BETWEEN(DATE1,DATE2)ADD_MONTHS(), 下月的今天;NEXT_DAY(), 下一个的今天日期;LAST_DAY(), 给定日期的最后一天日期;(4) . 转换:TO_CHAR(),TO_NUMBER(),TO_DA TE();fm 去除前导0,例如:to_char(sysdate,'fmyyyy-mm-dd') 得出结果2009-1-2( 本应为2009-01-02).千位分隔符(格式字符用9 表示) ,货币前缀($ 美元,L 本地币种)to_char(123456,'$99,999') 美元to_char(123456,'L99,999') 本地币种(5) . 通用:如果有NULL 类型数据参与运算,必需用NVL() 转换成特定值再计算如:NVL(filed1,'O')DECODE() 函数,用于替换;DECODE(field/expression,1,"one",2,"two") 表示如果field/expression如果是1的话,则替换为one,是2的话替换为two;22.ORACLE 用户( 1 )超级管理员:sys/change_on_install;(2) 管理员:system/manager;(3) 普通用户:scott/tiger;23.左、右(外)连接默认左连接where a.field1(+) = b.field2"+" 在左边表示右连接,在右边表示左连接cross join 产生笛卡尔积;标准语法:select table1.*,table2.* from table1,table2 where table1.no=table2.no;24.sql1999select table1.*,table2.* from table1[cross join table2][natural join table2][join table2 using collumname][left|right|full outer join table2]on table1.collum1 = table2.collum2where 1=1 group by 分组条件having 分组条件order by...注:where 子句中不能带组函数;25.组函数(1) .count();(2) .max();(3) .min();(4) .sum();(5) .avg();26.分组统计group by27.子查询示例:select * from emp where sal > (select sal from emp where empno = 7654) 使用分类:单列(用得最多),单行,多行;子查询的三种操作:(1) in 在结果集之中;(2) any=any 即= ,>any 比最小值的要大的结果集,<any 比值最大的要小的结果集;(3) all>all,比最大的值要大,<all,比最小的值要小;格式:where field1 > all( 子查询)28.事务一个窗口一个会话,如没有提交互不影响;commit; 提交;rollback; 回滚;死锁,等待,一个session没有提交,其它session不能处理,要等待前一个session提交了再进行处理29. 子查询、外连接练习select e.job,count(e.empno)from emp e right outer join (select job from emp group by job having min(sal) > 1500) em on e.job = em.job group by e.job;select e.job,count(e.empno)from emp e ,(select job from emp group by job having min(sal) > 1500) em where e.job(+) = em.job group by e.job;select e.job,count(e.empno)from emp ewhere e.job in (select job from emp group by job having min(sal) > 1500) group by e.job;29.表的建立与删除Oracle 中的主要数据类型;varchar,varchar2 为255字符;number(m,n),---float,number(n) intdateclob,blog 4G(1) 复制表create table tablename as select * from emp;(2) 复制表结构(加永不成立的where 条件)create table tablename as select * from emp where 1==2;(3) 创建表create table tablename (字段 1 类型 1 default ' 默认值',字段 2 类型2,字段n 类型n)(4) 修改表删除表: drop table tablename;增加列:alter table tablename add(columnname 类型default ' 默认值',columnname 类型default ' 默认值')修改列:alter table tablename modify(columnname 类型default ' 默认值')修改列名:alter table rename column columnname to newcolumnname重命名表:rename tablenamel to tablename2;只能用于oracle截断表:tru ncate table table name;与delete类似,但直接释放,不能回滚;30. 约束的分类与使用作用:保证数据库中数据的完整性;分类:主键(PRIMARY KEY),唯一(UNIQUE),检查(CHECK),非空(NOT NULL),外键约束(FOREIGN KEY);其中,前四种约束为单表约束,外键约束为多表约束;通过constraint 指定约束:constraint person_pid_pk PRIMARY KEY(pid)constraint person_sex_ck CHECK(sex in (' 男','女'))外键:强制删除父表:一般是先删除子表,再删除父表,但技术上可以实现强制先删除父表(同时删除从表相关约束) :DROP TABLE tablename CASCADE CONSTRAINT;( 一般不使用) 强制删除从表数据:删除父表数据时,从表相应有约束的记录也删除, 需在创建表约束时这样处理:CONSTRAINT person_book_pid_fk FOREIGN KEY(pid) REFERENCES persion(pid) ON DELETE CASCADE示例:CREATE TABLE T_PARENT(ID NUMBER(10) PRIMARY KEY NOT NULL,NAME V ARCHAR2(10));CREATE TABLE T_CHIRLD(ID NUMBER(10) PRIMARY KEY NOT NULL,NAME V ARCHAR2(10),PARENT_ID NUMBER(10),CONSTRAINT CHIRLD_PARENT_FK FOREIGN KEY(PARENT_ID) REFERENCEST_PARENT ON DELETE CASCADE);增加约束:ALTER TABLE tablename ADD CONSTRAINT 约束名PRIMARY KEY(pid);示例:alter table T_CHIRLDadd constraint CHIRLD_PARENT_FK foreign key (PARENT_ID) references T_PARENT (ID) on delete cascade;修改约束:ALTER TABLE tablename MODIFY CONSTRAINT 约束名PRIMARY KEY(pid);字段名_PK,字段名_UK,字段名_CK,字段名_NK,从表字段名—父表字段名_FK 删除约束: ALTER TABLE tablename DROP CONSTRAINT 约束名;31. 表的关联查询:并(UNION),交(INTERSECT),差(MINUS)UNION: 将多个查询的结果组合到一个查询结果中,没有重复;UNION ALL: 将多个查询的结果组合到一个查询结果中,可以有重复;INTERSECT: 返回两个结果集的公共部分;MINUS: 返回两个结果集的差值;(左边表减右边表)示例:select * from emp UNION select * from emp2;32.ROWNUM 伪列的作用自动编号,存在于每一个查询中,使用情境:只想显示前五条记录,则只需加条件:ROWNUM <= 5; 常用于分页操作如果想取得中间记录的数据,不能用ROWNUM(BETWEEN AND), 只能用子查询: 例: 查出第五条到第十条记录;SELECT * FROM (SELECT ROWNUM rn,empno,ename,job FROM emp WHERE ROWNUM<=10)tempWHERE temp.rn>=5;33.序列的使用用途:用于自动增长;创建序列:CREATE SEQUENCE seqname[INCREMENT BY n][START WITH n] --START WITH 默认从1 开始;[{MAXV ALUE n|NOMAXV ALUE}][{MINV ALUE n|NOMINV ALUE}][{CYCLE|NOCYCEL}] [{CACHE|NOCACHE}] 示例:create sequence myseq;使用序列:insert into tablename (next,curr) values (myseq.nextval,myseq.currval);删除序列:DROP SEQUENCE seqname;34.视图创建语法:CREATE OR REPLACE VIEW 视图名称AS 子查询其中子查询是一个复杂的select 语句视图创建好后,可以作为一张表来查询使用;以上创建的视图可以执行UPDATE, 且可将原表进行修改;但实际应用用,视图是只读的,可以需要在创建视图的时候加上以下参数:WITH CHECK OPTION 不能更新视图条件字段,但能更新其它非条件字段;WITH READ ONL Y 表示只读,不能更新; 删除语法:DROP VIEW 视图名称;35.同义词,用户管理,权限分配与撤销,数据库的备份同义词(只适用于oracle):作用:通过同义词可访问不同用户下的表,例如,scott用户可以访问sys用户下的dual表;创建同义词:CREATE SYNONYM 同义词名称FOR 用户名.表名称;示例:create synonym emp for scott.emp;删除同义词:DROP SYNONYM 同义词名称;用户管理创建用户:CREATE USER 用户名IDENTIFIED BY 密码;为用户授权:GRANT 权限1,权限2,... TO 用户;示例将创建session的权限赋给testuser以使得其可以连接到数据库:GRANT CREATE SESSION TO testuser;赋予角色给用户testuser:GRANT CONNECT,RESOURCE TO testuser; 修改用户密码:ALTER USER 用户名IDENTIFIED BY 密码使用户密码失效ALTER USER 用户名PASSWORD EXPIRE;锁住用户:ALTER USER 用户名ACCOUNT LOCK;解锁用户:ALTER USER 用户名ACCOUNT UNLOCK;将某张表的读取, 删除权限赋给用户testuser:GRANT SELECT,DELETE ON scott.emp TO testuser;回收权限:REVOKEREVOKE 权限ON 用户.表名称FROM 用户;示例:REVOKE SELECT,DELETE ON scott.emp FROM testuser; 数据库的备份:导入导出命令EXP,IMP36.可变数组类似于嵌套表,一般开始过程中不用37.数据库设计范式第一范式:每一个字段不可再分;第二范式:实现多对多的关联;第三范式:实现一对多的关联;(用得最多90%以上的项目)注:以上三范式在设计数据库时仅作参考,数据库设计的维一原则是:表关联尽可能少,尽可能简单;SQL 37.嵌套表(ORACLE 特有,使用复杂,一般实际开发中不使用)在一个表中还包含另一个子表先定义类型.。
ORACLE 10g学习笔记(解决诸多oracle难题难点)

ORACLE 10g 笔记第一部分概述一、数据库通用语言·SQL*PLUS:提供报表功能及操作系统的接口. 对SQL语言功能的扩充·PL/SQL:过程化语言用于程序设计数据库基础部分。
.Oracle数据库系统结构与产品组成。
Oracle 7.3.4Oracle 8.0.6Oracle8i 8.1.7Oracle9i 9.2.0 国税系统使用I internetOracle10g 10.2.0 G—>GridOracle 11i 不是数据库软件·SQL语言:对于数据库进行操作关系型·数据分区表技术·Oracle权限管理二、程序设计·PL/SQL程序设计·存储过程(Procedure)、包(Package)、函数(Function)、数据库触发器(Database triggers) 集中存储:一张表存放在一个数据中一张表中,同一物理磁盘中分区存储:把一张表的数据分散存放到不同表空间中,可能存放在不同物理磁盘·动态SQL程序NDS三、Oracle10g数据库系统管理(Database Administrator)DBA·ORACLE核心软件的安装与产品升级Unix:SUN Solaris(两种总线:SPARC,x86) 中油、石化系统HP-UX Super DOMIBM AIX (银行系统)Tru-64 UNIX(电力系统)SCO UNIXLinuxSUN Fire v880 速度很慢.小故事:Order by 临时表空间NT/2000/xp (重新安装要修改注册表)安装资源要求:Oracle8i: 128M/1000MOracle9i 9.0.1: 256M/3.5GOracle9i 9.2.0: 512M/3.5GOracle10g 10.2.0: 256M~512M/2G win2000必须打sp1·创建数据库主要存储结构·权限与角色管理·数据库备份与恢复·数据库性能优化与调整·监视与控制用户对数据库的存取四、Web应用开发及Web服务器Oracle 10g Application Server(PL/SQL,J2EE)Oracle10g的安装1.选择安装方法·基本安装·高级安装(选此项,下一步)2.选择安装类型·企业版主要用于构造分布式数据库(选此项,下一步)·标准版·个人版·定制3.指定主目录(下一步)4.选择配置选项·创建数据库(选此项,下一步)·配置自动存储管理·仅安装数据库软件5.选择数据库配置·一般用途(选此项,下一步)·事务处理·数据仓库·高级6.指定数据库配置选项·数据库命名一般是name.domain(域名可以不要)不能同名·系统标示符SID 数据库实例名数据库名和实例名一般相同,可不同·数据库字符集:National Language Support NLS 民族语言支持中文三种ZHS16cgh231280 支持版本Oracle 7.3 以上只支持简体ZHS16gbk 支持版本Oracle 8.0以上简体繁体日韩ZHS32gh18030 支持版本Oracle 9i以上简体繁体日韩维藏下方□创建带样本方案的数据库(选中此项,下一步)7.数据库管理选项默认下一步8.指定数据库存储选项·文件系统(指定路经,下一步)·自动存储管理·裸设备9.指定备份和恢复选项选择不启用自动备份下一步10.指定数据库方案的口令选择所有的账户都使用同一个口令下一步11.选择安装方法基本安装下一步默认选择直到安装结束Oracle10g的删除1、删除Oracle注册表regedit →HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\2、删除Oracle服务regedit →Local Machine→System→CurrentControlSet→Services→ORA*3、删除Oracle事件日志regedit →Local Machine→System→CurrentControlSet→Services→Eventlog→Application→ORA*4、删除Windows安装磁盘\Program Files\Oracle目录\Program Files\Oracle5、删除菜单6、Oracle删除环境变量。
00100002_MLDN-魔乐科技-李兴华【Oracle数据库】_Oracle安装与卸载

1、课程名称Oracle安装与卸载2、参考图书《Oracle开发实战经典》3、视频下载/s/1o6yVybw4、笔记内容Oracle数据库如果要想安装请准备出5G空间,同时也要清楚一些常见的Oracle版本:·Oracle 8、Oracle 8i:其中“i”表示的是internet,表示Oracle开始向网络发展,1CD;·Oracle 9i:是Oracle 8i的稳定版,也是现在见到最多的版本、3CD;·Oracle 10g:表示Oracle开始基于网格计算推出的数据库,1CD;·Oracle 11g:是Oracle 10g稳定版,现在也算是最主流推广的版本,2G左右;·Oracle 12C:“C”表示的是云计算的概念,是现在的最新版本。
在本次讲课之中采用的是Oracle 11g版本,而不是Oracle 12C版,因为12C在进行初期学习的时候非常的麻烦。
而且最方便的是,oracle数据库可以直接从网上下载,使用的时候是免费的,即使你在项目之中没有花钱购买Oracle也不会算你使用盗版,但是千万别出错,一出错,没人管你。
在进行Oracle安装之前,必须注意一点:请将你本机的病毒防火墙关闭,同时将那个什么垃圾的360也关了。
对于Oracle而言,本身的软件提供的只是一个平台,而在这个平台之上才会进行数据库的管理,那么此时选择的是“创建和配置数据库”就表示在软件安装完成之后会自动的进入到一个新的数据库的创建和配置过程。
在进行Oracle安装的时候会询问用户安装的类型,默认的单机数据库选择的是“单实例数据库”,而对于RAC属于Oracle之中比较高级的数据库管理话题,有兴趣的话可以继续再花费2W块钱自己学习。
选择“高级安装”可以进入到一些数据库的基础配置界面。
本数据库之中所使用的语言提供有两种“简体中文”、“英语”。
本次选择安装的版本为“企业版”。
本次将Oracle数据库安装在了“D:\app\Teacher”由于在一开始选择了“创建数据库”,所以此时会询问用户要创建的数据库名称,将名称修改为“mldn”,同时可以发现有一个Oracle服务标识符(SID)跟数据库名称完全一样,其中SID为日后程序开发之中使用的服务编号,如果没有此编号,那么程序将无法进行数据库的连接,一般SID都和数据库名称保持一致。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
连接符||图表 1多表查询的基本语法查一张以上的表,就叫做多表查询例子:查询出雇员名称,部门名称和部门所在地的(一般多表查询要用别名)统计记录数:查询emp有多少条纪录左右连接(重点)select e.empno,e.ename,d.deptno,d.dname,d.locfromemp e,dept d where e.deptno=d.deptno;部门一共四个,这里只查询出三个,因为在雇员表中没有指定40部门的雇员,所以在消除笛卡尔乘机的时候没有条件符合40,如果喜欢40部门显示出来,就要用左右连接了。
select e.empno,e.ename,d.deptno,d.dname,d.locfromemp e,dept d where e.deptno(+)=d.deptno;(+)在左边,表示以右边的表为准,表示右链接。
40部门出来了,所以此时就用到了有连接,证明以下规律(.+.)在左表示右连接........(.+.)在右表示左连接.........SQL:1999对SQL的支持(了解)范例:交叉连接(cross join)产生笛卡尔积select * from empt CROSS JOIN dept;查询结果产生笛卡尔积CREATE TABLE EMP10 AS SELECT * FROM EMP WHERE DEPTNO=10; select * from emp NATURAL JOIN dept; 自动进行匹配范例:USING子句,直接关联的操作列select * from emp e JOIN dept d USING (deptno) where deptno=30;把两张表的详细信息进行打印输出范例:ON子句自己编写连接条件select * from emp e JOIN dept d ON (e.deptno=d.deptno) where e.deptno=30;范例:左连接(左外连接)右连接(右外连接)LEFT JOIN RIGHT JOIN 组函数和分组统计(重点)组函数在SQL常用组函数有如下几个:COUNT()求全部记录数MAX()求最大记录数MIN()求最小记录数A VG()平均SUM()求和分组统计GROUP BYselect deptno,COUNT(empno) from emp GROUP BY deptno;算出部门表的平均工资:select A VG(sal) from emp ;算出每个部门的平均工资:Select deptno,A VG(sal) from emp ;之所以会出现这个错误是因为数据库不知道怎样在结果集中处理deptno列。
考虑一下:这个查询既试图使用AVG聚合函数对多行记录进行操作,却又试图从每行中获得deptno列的值;这两个操作是不可能同时完成的。
此时必须提供一个GROUP BY子句告诉数据库将deptno列相同的行分组在一起,然后数据库就可以将这些组中的行传递给AVG函数。
警告:如果查询中包含聚合函数,而所选择的列并不在聚合函数中,那么这些列就必须在GROUP BY子句中。
按部门分组,并显示部门名称,以及部门员工数select d.dname,count(e.empno) from dept d,emp ewhere d.deptno=e.deptnoGROUP BY d.dname;要求查出平均工资大于2000的部门编号和平均工资select deptno,A VG(sal) from emp WHERE A VG(sal) >2000 GROUP BY deptno;之所以会出现这个错误是因为W H E R E子句只能用来对单行而不是行组进行过滤。
要过滤行组,可以使用HA VING子句。
范例:显示非销售人员工作名称以及从事同一工作雇员的月工资的总和,并且要满足从事同一工作的雇员的月工资合计大于¥5000。
输出结果按月工资的合计升序排列1.显示全部的非销售人员:job<>’SALESMAN’select * from emp where job<>'salesman';2.按工作分组同时求出工资的总和Select job,SUM(sal) from emp WHERE job<>’SALESMAN’ GROUP BY job;3.对分组条件进行限制Select job,SUM(sal) from emp WHERE job<>’SALESMAN’GROUP BY job HA VING SUM(sal)>5000;4.使用排序,按升序排列Select job,SUM(sal) su from emp WHERE job<>’SALESMAN’GROUP BY job HA VING SUM(sal)>5000 order by su;分组的简单原则:只要一列上存在重复的内容才考虑用分组注意:分组函数可以嵌套使用,但是在组函数嵌套的时候不能再出现分组条件的查询语句范例:求出平均工资最高的部门错误代码:Select deptno,MAX(AVG(sal)) from emp GROUP BY deptno;Select MAX(A VG(sal)) from emp GROUP BY deptno;(正确)子查询范例:要求查询出比7654工资高的全部雇员信息首先:要知道7654雇员的工资是多少然后:以此查询结果为查询依据,只要其他工资大于sal,则表示符合条件首先:查询出比7654工资高的全部雇员信息select * from emp where sal>(select sal from emp where empno=7654);其次:与7788工作一样Select job from emp where empno=7788所以:select * from emp where sal>(select sal from emp where empno=7654) and job= (Select job from emp where empno=7788);;数据库更新操作数据库的主要操作分为两种:1..数据库的查询操作SELECT2..数据库的更新操作uUPDA TE,DELETE,INSERT此时为了保存原始的emp表的信息,在进行更新删除插入表前先将表复制一份Create table myemp AS select * from emp;此时数据已经复制出来添加数据Insert into emp(empno,ename,job,hiredate,sal ,deptno)Values (7899,’张三’,’清洁工’,’20-2月-2000’,9000, 40);使用简略写法(并不推荐),因为现在是要添加所有字段的内容,所以可以不写上任何字段名称,只要值的数量和顺序和数据库表中的顺序一致。
Insert into myemp values(7899,’张三’,’清洁工’,9000, 40);之前插入数据的时候,日期的格式是使用了表中固定好的格式,如果现在有这样一个日期”2009-10-10”日期格式,那么现在如何把这种格式的日期插入进去呢?使用TO_DATE()函数,将一个字符串类型的数据变为DATE类型的数据。
Insert into myemp(empno,ename,job,hiredate,sal ,deptno)Values (7899,’张三’,’清洁工’,TO_DA TE(‘2009-07-19’,’yyyy-mm-dd’),9000, 40);修改数据UPDATE 表名称set 要修改的字段=新值,要修改的字段=新值….;UPDATE 表名称set 要修改的字段=新值,要修改的字段=新值…WHERE 修改条件.;修改数据删除全部: DELETE FROM 表名称局部删除: DELETE FROM 表名称WHERE 删除条件;事物处理范例:创建一张只包含10部分雇员的一张临时表CREATE TABLE EMP10 AS SELECT * FROM EMP WHERE DEPTNO=10;打开一个oracle终端,进行删除操作DELETE FROM EMP10 WHERE SAL=2450;显示已经删除然后再打开另外一个oracle终端,查询到sal=2450这条数据还在,证明这条数据并没有被删除,这就是oracle事务的概念。
事务处理: 就是保证数据操作的完整性,所有的操作要么同时成功要么同时失败。
在ORACLE中对每一个连接到数据库中的窗口,都会与数据库建立一个Session。
一个Session对数据库所做得修改不会马上反应到数据库的真实数据之上。
是允许回滚的,当一个Session提交所有操作之后,数据库才真正做出修改。
进行同样的删除操作DELETE FROM EMP10 WHERE SAL=2450;结果它停住了,等待第一个终端操作结束再动。
----》这就是ORACLE死锁提交事务:COMMIT回滚:RoolbackORACLE常用命令查看所有表select table_name from user_tables;显示表结构describe nchar_tst(nchar_tst为表名)查询练习1.列出至少有一个员工的所有部门信息第一步: 列出所有部门的员工数量Select deptno ,count(empno) from emp group by deptno;第二步:列出员工大于1的部门Select deptno ,count(empno) from emp group by deptno HA VING COUNT(empno)>1;第三步:通过多表关联查,把子查询做为一个查询出来select d.*,ed.couFROM dept d,(SELECT deptno,COUNT(empno) cou FROM empGROUP BY deptno HA VING COUNT(empno)>1) edWHERE d.depno=ed.deptno ;2.列出薪金比SMITH多的所有员工第一步:求出SMITH的工资SELECT sal FROM EMP WHERE ENAME=’SMITH’;第二步:select ename from emp where sal>( SELECT sal FROM EMP WHERE ENAME=’SMITH’);3 列出所有员工姓名及其直接上级的姓名此程序属于自身关联查询SELECT e.ename, d.ename FROM emp e ,emp d where e.mgr=d.empno;4. 列出受雇日期早于其直接上级的所有员工的编号,姓名,部门名称自身关联,查找mgr=empno的同时还要比较Hiredate第一步:SELECT e.empno,e.enameFROM emp e, emp m WHERE e.mgr=m.empno AND e.hiredate<m.hiredate;第二步:SELECT e1.empno,e1.ename,d.dnameFROM(SELECT e.empno,e.enameFROM emp e, emp m WHERE e.mgr=m.empno AND e.hiredate<m.hiredate) e1,dept d WHERE e1.deptno=d.deptno;ORA-00904 invalid identifier这个错误是因为字段名写错了检查下字段名,发现e1表的查询结果没有deptno字段,所以报错了!SELECT e1.empno,e1.ename,d.dnameFROM(SELECT e.empno,e.ename,e.deptnoFROM emp e, emp m WHERE e.mgr=m.empno AND e.hiredate<m.hiredate) e1,dept d WHERE e1.deptno=d.deptno;李兴华给出的标准答案是:SELECT e.empno,e.ename,d.dname FROM emp e, emp m, dept dWHERE e.mgr=m.empno AND e.hiredate<m.hiredate AND e.deptno=d.deptno;5. 列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门左右关联问题SELECT d.deptno,d.dname,e.ename,e.empnoFROM dept d, emp eWHERE d.deptno=e.deptno(+);查询结构少了40部门的信息,用连接操作SELECT d.deptno,d.dname,e.ename,e.empnoFROM dept d, emp eWHERE d.deptno=e.deptno(+);6. 列出所有”CLERK”(办事员)的姓名及部门名称, 部门的人数2.入手第一步:在emp表中查询出职位job为CLERK所在的部门名称(dept表)、○2…..SELECT e.ename ,d.dname FROM dept d,emp e WHERE e.job=’CLERK’ANDe.deptno=d.deptno ;3.部门人数肯定要用分组查询,如果是分组查询肯定要用GROUP BY,而上面的语句明显不能用GROUP BY了,因为查询字段太多。