




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1234567图表 1891011121314多表查询的基本语法多表查询的基本语法查一张以上的表,就叫做多表查询例子:查询出雇员名称,部门名称和部门所在地的(一般多表查询要用别名)15统计记录数:统计记录数:查询 emp 有多少条纪录左右连接(重点)左右连接(重点)select e.empno,e.ename,d.deptno,d.dname,d.locfromemp e,dept d where e.deptno=d.deptno;部门一共四个,这里只查询出三个,因为在雇员表中没有指定 40 部门的雇员,所以在消除笛卡尔乘机的时候没有条件符合 40,如果喜欢 40 部门显示出来,就要用左右连
2、接了。16select e.empno,e.ename,d.deptno,d.dname,d.locfromemp e,dept d where e.deptno(+)(+)(+)=d.deptno;(+)在左边,表示以右边的表为准,表示右链接。40 部门出来了,所以此时就用到了有连接,证明以下规律(+)在左表示右连接(+)在右表示左连接.SQL:1999 对对 SQL 的支持(了解)的支持(了解)范例:交叉连接(范例:交叉连接(cross join)产生笛卡尔积)产生笛卡尔积17select * from empt CROSS JOIN dept;查询结果 产生笛卡尔积CREATE TABL
3、E 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=
4、30;范例:左连接(左外连接)右连接(右外连接)范例:左连接(左外连接)右连接(右外连接)LEFT JOIN RIGHT JOIN组函数和分组统计(重点)组函数和分组统计(重点)组函数组函数在 SQL 常用组函数有如下几个:COUNT()求全部记录数MAX()求最大记录数MIN()求最小记录数AVG()平均SUM()求和分组统计分组统计GROUP BYselect deptno,COUNT(empno) from emp GROUP BY deptno;算出部门表的平均工资:算出部门表的平均工资:18select AVG(sal) from emp ;算出每个部门的平均工资:算出每个部门的平均
5、工资:Select deptno,AVG(sal) from emp ; 之所以会出现这个错误是因为数据库不知道怎样在结果集中处理 deptno 列。考虑一下:这个查询既试图使用 AVG 聚合函数对多 行记录进行操作,却又试图从每行中获得 deptno 列的值;这两个操作是不可能同时完成的。此时必须提供一个 GROUP BY 子句告诉数据库将 deptno 列相同的行分组在一起,然后数据库就可以将这些组中的行传递给 AVG 函数。警告:如果查询中包含聚合函数,而所选择的列并不在聚合函数中,那么这些列就必须在 GROUP BY 子句中。按部门分组,并显示部门名称,以及部门员工数按部门分组,并显示
6、部门名称,以及部门员工数select d.dname,count(e.empno) from dept d,emp ewhere d.deptno=e.deptno GROUP BY d.dname;要求查出平均工资大于要求查出平均工资大于 2000 的部门编号和平均工资的部门编号和平均工资select deptno,AVG(sal) from emp WHERE AVG(sal) 2000 GROUP BY deptno; 之所以会出现这个错误是因为 WHEREWHEREWHERE 子句只能用来对单行而不是行组进行过滤子句只能用来对单行而不是行组进行过滤子句只能用来对单行而不是行组进行过滤子
7、句只能用来对单行而不是行组进行过滤。要过。要过滤行组,可以使用滤行组,可以使用 HAVING 子句。子句。19范例:显示非销售人员工作名称以及从事同一工作雇员的月工资的总和,并且要满足从事范例:显示非销售人员工作名称以及从事同一工作雇员的月工资的总和,并且要满足从事同一工作的雇员的月工资合计大于同一工作的雇员的月工资合计大于¥5000。输出结果按月工资的合计升序排列。输出结果按月工资的合计升序排列1.显示全部的非销售人员:显示全部的非销售人员:jobSALESMANselect * from emp where jobsalesman;2.按工作分组同时求出工资的总和按工作分组同时求出工资的总
8、和Select job,SUM(sal) from emp WHERE jobSALESMAN GROUP BY job; 3.对分组条件进行限制对分组条件进行限制Select job,SUM(sal) from emp WHERE jobSALESMAN GROUP BY job HAVING SUM(sal)5000; 4.使用排序,按升序排列使用排序,按升序排列Select job,SUM(sal) su from emp WHERE jobSALESMAN GROUP BY job HAVING SUM(sal)5000 order by su; 分组的简单原则:分组的简单原则:只要一
9、列上存在重复的内容才考虑用分组注意:注意:分组函数可以嵌套使用,但是在组函数嵌套的时候不能再出现分组条件的查询语句范例:范例:求出平均工资最高的部门错误代码:Select deptno,MAX(AVG(sal) from emp GROUP BY deptno;Select MAX(AVG(sal) from emp GROUP BY deptno;(正确)20子查询子查询范例:要求查询出比范例:要求查询出比 7654 工资高的全部雇员信息工资高的全部雇员信息首先:要知道 7654 雇员的工资是多少然后:以此查询结果为查询依据,只要其他工资大于 sal,则表示符合条件首先首先:查询出比查询出比
10、 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) ; ;21数据库更新操作数据库更新操作数据库的主要操作分为两种:1
11、.数据库的查询操作 SELECT2.数据库的更新操作 uUPDATE, 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);使用简略写法使用简略写法(并不推荐并不推荐),因为现在是要添加所有字段的内容,所以可以不写上任何字段,因为现在是要
12、添加所有字段的内容,所以可以不写上任何字段名称,只要值的数量和顺序和数据库表中的顺序一致。名称,只要值的数量和顺序和数据库表中的顺序一致。Insert into myemp values(7899,张三,清洁工,9000, 40);之前插入数据的时候,日期的格式是使用了表中固定好的格式,如果现在有这样一个日期之前插入数据的时候,日期的格式是使用了表中固定好的格式,如果现在有这样一个日期”2009-10-10”日期格式,那么现在如何把这种格式的日期插入进去呢?日期格式,那么现在如何把这种格式的日期插入进去呢?使用使用 TO_DATE()函数,将一个字符串类型的数据变为函数,将一个字符串类型的数据
13、变为 DATE 类型的数据。类型的数据。Insert into myemp(empno,ename,job,hiredate,sal ,deptno)Values (7899,张三,清洁工,TO_DATE(2009-07-19,yyyy-mm-dd),9000, 40);修改数据修改数据UPDATE 表名称 set 要修改的字段=新值,要修改的字段=新值.;UPDATE 表名称 set 要修改的字段=新值,要修改的字段=新值WHERE 修改条件.;22修改数据修改数据删除全部删除全部: DELETE FROM 表名称 局部删除局部删除: DELETE FROM 表名称 WHERE 删除条件;事
14、物处理事物处理范例:创建一张只包含范例:创建一张只包含 10 部分雇员的一张临时表部分雇员的一张临时表CREATE TABLE EMP10 AS SELECT * FROM EMP WHERE DEPTNO=10;打开一个 oracle 终端,进行删除操作DELETE FROM EMP10 WHERE SAL=2450;显示已经删除然后再打开另外一个 oracle 终端,查询到 sal=2450 这条数据还在,证明这条数据并没有被删除,这就是 oracle 事务的概念。事务处理: 就是保证数据操作的完整性,所有的操作要么同时成功要么同时失败。在 ORACLE 中对每一个连接到数据库中的窗口,都
15、会与数据库建立一个 Session。一个Session 对数据库所做得修改不会马上反应到数据库的真实数据之上。是允许回滚的,当一个 Session 提交所有操作之后,数据库才真正做出修改。进行同样的删除操作DELETE FROM EMP10 WHERE SAL=2450;结果它停住了,等待第一个终端操作结束再动。-这就是 ORACLE 死锁死锁提交事务:提交事务:COMMIT 回滚:回滚:Roolback23ORACLE 常用命令常用命令查看所有表查看所有表select table_name from user_tables;显示表结构显示表结构describe nchar_tst(nchar
16、_tst 为表名)查询练习查询练习1.列出至少有一个员工的所有部门信息列出至少有一个员工的所有部门信息第一步: 列出所有部门的员工数量Select deptno ,count(empno) from emp group by deptno;第二步:列出员工大于 1 的部门 Select deptno ,count(empno) from emp group by deptno HAVING COUNT(empno)1;第三步:通过多表关联查,把子查询做为一个查询出来select d.*,ed.couFROM dept d,(SELECT deptno,COUNT(empno) cou FROM
17、 empGROUP BY deptno HAVING COUNT(empno)1) ed WHERE d.depno=ed.deptno ;Comment U1: Comment MS2: 查找 e 表的直属领导编号等于 m 表的员工,也就是说 m表是领导表,m 表的雇佣日期晚于 e 表242.列出薪金比列出薪金比 SMITH 多的所有员工多的所有员工第一步:求出 SMITH 的工资SELECT salFROM EMP WHERE ENAME=SMITH;第二步:select ename from emp where sal( SELECT salFROM EMP WHERE ENAME=SM
18、ITH);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.hiredatem.hiredate;第二步:
19、SELECT e1.empno,e1.ename,d.dname FROM (SELECT e.empno,e.enameFROM emp e, emp m WHERE e.mgr=m.empno AND e.hiredatem.hiredate) e1,dept dWHERE e1.deptno=d.deptno;ORA-00904 invalid identifier 这个错误是因为这个错误是因为 字段名写错了字段名写错了 检查下字段名,发现检查下字段名,发现 e1 表的查询结果没有表的查询结果没有 deptno 字段字段,所以报错了!所以报错了!SELECT e1.empno,e1.en
20、ame,d.dname FROM (SELECT e.empno,e.ename,e.deptnoFROM emp e, emp m WHERE e.mgr=m.empno AND e.hiredatem.hiredate) e1,dept dWHERE e1.deptno=d.deptno;25李兴华给出的标准答案是李兴华给出的标准答案是:SELECT e.empno,e.ename,d.dname FROM emp e, emp m, dept dWHERE e.mgr=m.empno AND e.hiredate1500 GROUP BY job;结果出来,但是是错的。李兴华分析一:按工
21、作分组,分组条件最低工资大于 1500SELECT job, MIN(sal) FROM emp GROUP BY job HAVING MIN(sal) 1500;分析二:SELECT e.job,COUNT(e.empno) FROM emp e WHERE e.job IN( SELECT job FROM emp GROUP BY job HAVING MIN(sal)1500 ) GROUP BY e.job;Comment U3: e.mgr=m.empno e 表的领导编号等于 m 表的员工编号,emp 表自身关联 m 表的员工=e 表的领导,所以 m.ename 就是就是:领导
22、领导”。Comment U4: 工资属于这个区间内表示这个等级。278列出在部门列出在部门”SALES”(销售部销售部)工作的员工的姓名工作的员工的姓名,假定不知道销售部的部门编号假定不知道销售部的部门编号1.Select deptno from dept where dname= SALES; 将第一步骤作为条件写子查询2.select ename from emp where deptno=( Select deptno from dept where dname=SALES);9. 列出薪金高于公司平均薪金的所有员工列出薪金高于公司平均薪金的所有员工,所在部门所在部门,上级领导上级领导,
23、公司的工资等级。公司的工资等级。1.算出平均工资: Select AVG(sal) from emp 2. select * from emp where sal( Select AVG(sal) from emp);答案:第一步求出公司的平均工资-1,第二步:列出薪金高于平均工资的所有雇员的信息-2第三步:要求所在部门肯定要与部门表关联关联查所在部门的信息,3. SELECT e.*,d.dname,d.loc FROM emp e,dept d WHERE sal(SELECT AVG(sal) FROM emp ) AND e.deptno=d.deptno;第四步要想查询上级领导肯定要
24、与自身关联4.SELECT e.empno,e.ename,m.ename,d.dname,d.deptno,d.loc FROM emp e,dept d,emp m WHERE e.sal(SELECT AVG(sal) FROM emp ) AND e.deptno=d.deptno AND e.mgr=m.empno(+);第五步:求出雇员的工资等级SELECT e.empno,e.ename,s.grade,m.ename,d.dname,d.deptno,d.loc FROM emp e,dept d,emp m,salgrade s WHERE e.sal(SELECT AVG(
25、sal) FROM emp ) AND e.deptno=d.deptno AND e.mgr=m.empno(+) AND e.sal BETWEEN s.losal AND s.hisal;Comment U5: 合理的情况是没有deptno=30 的2810 列出与列出与”SCOTT” 从事相同工作的所有员工及部门的名称。从事相同工作的所有员工及部门的名称。(dims)第一步:SELECT job FROM emp e where e.ename=SCOTT; 第二步:SELECT e.ename, d.dname FROM emp e ,dept dwhere e.job=( SELE
26、CT job FROM emp e where e.ename=SCOTT)AND e.enameSCOTT AND e.deptno=d.deptno;11 列出薪金等于部门列出薪金等于部门 30 中员工的薪金的所有员工的姓名和薪金中员工的薪金的所有员工的姓名和薪金(dims)SELECT e.ename,e.sal FROM emp e where sal IN(SELECT sal FROM emp where deptno=30) AND deptno30;12 列出薪金高于在部门列出薪金高于在部门 30 工作的所有员工的薪金的员工姓名和薪金工作的所有员工的薪金的员工姓名和薪金.,部门
27、名称,部门名称Select sal from emp where sal (MAX(SELECT sal FROM emp where deptno=30);答案: 在之前的程序改,使用ALL 比最大的还要大SELECT e.ename,e.sal,d.dname,d.loc FROM emp e ,dept d where sal ALL(SELECT sal FROM emp where deptno=30) AND e.deptno30 AND e.deptno=d.deptno;13 列出在每个部门工作的员工数量,平均工资和平均服务期限列出在每个部门工作的员工数量,平均工资和平均服务期
28、限第一步查询出每个部门的员工数量:SELECT d.dname,COUNT(empno) FROM emp e ,dept d WHERE e.deptno=d.deptno GROUP BY d.dname;答案:在第一步的基础上,第二步要读出平均工资平均工资和服务期限服务期限:尝试:SELECT d.dname,COUNT(empno),AVG(e.sal), AVG(e.hiredate) FROM emp e ,dept d WHERE e.deptno=d.deptno GROUP BY d.dname;SELECT d.dname,COUNT(empno),AVG(e.sal),
29、AVG(MONTHS_BETWEEN(sysdate,e.hiredate)/12) 年年FROM emp e ,dept d WHERE e.deptno=d.deptno GROUP BY d.dname;Comment U6: ORA-00979: 不是 GROUP BY 表达式.错误29oracle 中的 months_between(date1,date2)months_between(date1,date2)函数可以实现年龄的计算,此函数的返回值为 date1 与 date2 之间的月数, 比如 months_between(2008-8-8,2005-4-8)执行的结果是 40(
30、执行“select months_between(2008-8-8,2005-4-8) from dual;”不包括双引号)。date1 和 date2 都是 DATE 类型的,用 SYSDATE 可以获得系统时间,用现在的时间减去变量中的时间再与年龄总月 数比较即可实现这一功能。14 列出所有员工的姓名列出所有员工的姓名,部门名称和工资部门名称和工资(dims)Select e.ename,d.dname,e.sal from emp e,dept d where e.deptno=d.deptno; 15 列出所有部门的详细信息和部门人数列出所有部门的详细信息和部门人数第一步: 这种题型肯
31、定是多表关联子查询,首先列出部门的人数SELECT deptno dno, COUNT(empno) cou FROM emp GROUP BY deptno第二步:把以上的结果当成一张临时表出现;SELECT d.*,ed.cou FROM dept d,(SELECT deptno dno,COUNT(empno) cou FROM emp CROUP BY deptno ) ed WHERE d.deptno=ed.dno;16 列出各种工作的最低工资及从事此工作的雇员姓名列出各种工作的最低工资及从事此工作的雇员姓名1查找工资最低的工作:SELECT job,MIN(sal) FROM
32、emp GROUP BY job;2SELECT e.ename,e.job,cou.minsal FROM (SELECT job,MIN(sal) minsal, empno FROM emp GROUP BY job) cou,emp e WHERE e.empno= cou.empno ;答案:SELECT *FROM empWHERE sal IN(SELECT MIN(sal) FROM emp GROUP BY job);17 列出各个部门的列出各个部门的 MANAGER(经理经理)的最低薪金的最低薪金(dims)Select d.dname,MIN(e.sal)From emp
33、 e ,dept dWhere e.deptno=d.deptno AND e.job=MANAGER group by d.dname;18 列出所有员工的年工资列出所有员工的年工资,按年薪从低到高排序按年薪从低到高排序在处理年薪的时候,要处理奖金,奖金要使用 NVL 函数处理SELECT ename,(sal+NVL(comm,0)*12 income FROM empORDER BY income;19 查出某个员工的上级主管查出某个员工的上级主管,并要求出这些主管中的薪水超过并要求出这些主管中的薪水超过 3000SELECT DISTINCT m.* FROM emp e,emp mW
34、HERE e.mgr=m.empno AND m.sal3000;3020 求出部门名称中求出部门名称中,带带s字符的部门员工的工资合计字符的部门员工的工资合计,部门人数部门人数查询部门表的部门名称查询部门表的部门名称,使用模糊查询使用模糊查询,以确定部门的编号以确定部门的编号SELECT deptno FROM dept WHERE dname LIKE %S%;以上面的结果作为查询的条件SELECT deptno,SUM(sal),COUNT(empno) FROM emp WHERE deptno IN (SELECT deptno FROM dept WHERE dname like
35、%S%) GROUP BY deptno;21 给任职日期超过给任职日期超过 10 年的人加薪年的人加薪 10%UPDATE emp SET sal=sal+(sal*0.1)WHERE MONTHS_BETWEEN(sysdate,hiredate)/12 10;31创建表和管理表(创建表和管理表(重点重点)ORACLE 复制表的语法:CREATE TABLE 表名称 AS(子查询)如果现在子查询写的是:SELECT *FROM emp 表示将表结构和内容一起复制如果现在子查询写的是:SELECT * FROM emp WHERE 1=2; 加入一个永远不可能成立的条件,表示只是复制表结构不
36、复制表内容。CREATE TABLE person_f(Pid VARCHAR(18),Name VARCHAR(200),Age NUMBER(3),Birthday DATE,SEX VARCHAR(2) DEFAULT 男);表的删除表的删除DELETE TABLE 表名称范例:删除范例:删除 person 表表 : DELETE TABLE person;32表的修改表的修改范例:为范例:为 person 表增加表增加 address 列列ALTER TABLE person ADD( address VARCHAR(200) DEFAULT 暂无地址);为表重命名为表重命名在 Ora
37、cle 中提供了 RENAME 命名,可以为表重新命名,但是此语法只能在 Oracle 中使用语法格式: RENAME 旧的表名称 TO 新的表名称范例:将 person 重新命名为了 tpersonRENAME person TO miaofang;33思考题思考题分析:这是一道面试题,只能用笛卡尔乘机:Select e.country,d.country from country d ,country e where e.countryd.country;34约束约束约束的分类约束的分类:主键约束主键约束(PRIMARY KEY)主键约束一般都在 id 上使用,而且本身已经默认了内容不能为
38、空,主键约束可以在建表的时候指定:范例范例:建立建立 person 表,在表,在 pid 上增加主键约束上增加主键约束CREATE TABLE person(Pid VARCHAR(18) PRIMARY KEY,Name VARCHAR(200),Age NUMBER(3),Birthday DATE,SEX VARCHAR(2) DEFAULT 男);insert into person values(null,柯为权,123,TO_DATE(2009-07-19,yyyy-mm-dd)TO_DATE(2009-07-19,yyyy-mm-dd)TO_DATE(2009-07-19,yyy
39、y-mm-dd),男);主键为空或者重复都会报错主键为空或者重复都会报错35范例范例:将将 person 中的中的 pid 指定名称指定名称CREATE TABLE person_a(Pid VARCHAR(18) ,Name VARCHAR(200),Age NUMBER(3),Birthday DATE,SEX VARCHAR(2) DEFAULT 男,CONSTRAINT person_pid_pk PRIMARY KEY(pid);ConstraintConstraintConstraint knstrentknstrentknstrent:约束:约束:约束; ; ;限制限制限制per
40、son_pid_pk:表示约束的名称非空约束非空约束(NOT NULL)CREATE TABLE person_a(Pid VARCHAR(18) NOT NULL ,Name VARCHAR(200) NOT NULL,Age NUMBER(3),Birthday DATE,SEX VARCHAR(2) DEFAULT 男,CONSTRAINT person_pid_pk PRIMARY KEY(pid);表示插入了两个非空约束的声明,证明此时 PID 跟 name 是不允许为空的。唯一约束唯一约束(UNIQUE)表示一个字段中的内容是唯一的,其他列不允许重复CREATE TABLE per
41、son_a(Pid VARCHAR(18) NOT NULL ,Name VARCHAR(200) UNIQUE NOT NULL,Age NUMBER(3),Birthday DATE,SEX VARCHAR(2) DEFAULT 男,CONSTRAINT person_pid_pk PRIMARY KEY(pid);表示姓名唯一。36检查约束检查约束 (CHECK)使用检查约束来判断一个列中插入的内容是否合法,例如:年龄,性别的取值范围。CREATE TABLE person_a(Pid VARCHAR(18) NOT NULL ,Name VARCHAR(200) NOT NULL,Ag
42、e NUMBER(3) CHECK( age BETWEEN 0 AND 150),Birthday DATE,SEX VARCHAR(2) DEFAULT 男 CHECK( sex I N (男,女,中性),CONSTRAINT person_pid_pk PRIMARY KEY(pid);修改约束修改约束(了解了解)一张表建立完成之后,则可以为其添加约束DROP TABLE person CASCADE CONSTRAINT;CREATE TABLE person(Pid VARCHAR(18) PRIMARY KEY,Name VARCHAR(200),Age NUMBER(3),Bir
43、thday DATE,SEX VARCHAR(2) DEFAULT 男);此时,需要为表中添加若干个约束,添加约束的语法如下:ALTER TABLE 表名称 ADD CONSTRAINT 约束名称 约束类型(约束字段);关于约束类型的命名一定要统一:1)PRIMARY KEY:主键字段_PK2)UNIQUE:字段_UK3)CHECK:字段_CK4)FOREIGN KEY:父字段_子字段_FKALTER TABLE person ADD CONSTRAINT person_pid_PK PRIMARY KEY(pid);ALTER TABLE person ADD CONSTRAINT pers
44、on_name_UK UNIQUE(pid);ALTER TABLE person ADD CONSTRAINT person_age_CK CHECK(age BETWEEN 0 AND 150);ALTER TABLE person ADD CONSTRAINT person_sex_CK CHECK(sex IN (男,女,中);37ROWNUM(重点重点)ROWNUM:表示行号,实际上此是一个列,但是这个列是一个伪列,此列可以在每张表中出现。范例范例:在查询雇员表上,加入 ROWNUMSELECT ROWNUM, empno,ename,job,sal,hiredate FROM em
45、p;从运行上看,ROWNUM 本身采用自动编号的形式出现,有什么用处呢?例如例如,现在假设只想显示前 5 条记录。条件中:ROWNUM=5SELECT ROWNUM,empno,ename,job,sal,hiredate FROM emp WHERE ROWNUM 1000000在这里,我们不能用 where 来筛选超过 1000000 的地区,因为表中不存在这样一条记录。相反,HAVING 子句可以让我们筛选成组后的各组数据53oracle 常见问题常见问题1.在打开在打开 PL/SQL DEVELOP 的时候的时候 回弹出回弹出: ORA-12170: TNS: 连接超时连接超时关闭掉杀
46、毒跟防火墙都无法解决:关闭掉杀毒跟防火墙都无法解决:点 Net Manager -设置好主机名,也可以设置设置好主机名,也可以设置 IP 地址,但是每次都要重新设置。地址,但是每次都要重新设置。Ok-成功解决!成功解决!542查找查找 SQL/PL 生成生成 下一个序列号下一个序列号在在 Oracle 库中查询出下个自动生成的库中查询出下个自动生成的 id 号号3. ORA-00904 INVALID IDENTIFIER 解决办法解决办法,字段名错误字段名错误ORA-00904 invalid identifier 这个错误是因为 字段名写错了 检查下字段名3. oracle 10g 安装成
47、功之后。安装成功之后。scott 用户被锁定问题用户被锁定问题原因:默认 Oracle10g 的 scott 不能登陆。解决:(1)conn sys/sys as sysdba;/以 DBA 的身份登录(2)alter user scott account unlock;/ 然后解锁(3)conn scott/tiger /弹出一个修改密码的对话框,修改一下密码就可以了具体操作步骤如下:C: sqlplus请输入用户名:sys输入口令:sys as sysdba /注意:在口令这里输入的密码后面必须要跟上 as sysdba 才可以。SQL alter user scott account u
48、nlock; 用户已更改.SQL commit; 提交完成.SQL conn scott/tiger更改 scott 口令新口令:tiger重新键入新口令:tiger口令已更改已连接。/完成。4. ORACLE 连接其他地址的库连接其他地址的库在 ORACLE 安装目录下的:C:oracleproduct10.2.0db_1NETWORKADMIN 的 tnsnames.ora 文件# tnsnames.ora Network Configuration File: C:oracleproduct10.2.0db_1networkadmintnsnames.oraComment U20: 这就
49、是对应地址10.249.254.74 的配置55tnsnames.ora# Generated by Oracle configuration tools.ORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) ) )EXTPROC_CONNECTION_DATA = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL =
50、 IPC)(KEY = EXTPROC1) ) (CONNECT_DATA = (SID = PLSExtProc) (PRESENTATION = RO) ) )orcl74= (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.249.254.74)(PORT = 1521) ) (CONNECT_DATA = (SERVICE_NAME = orcl) ) ) 如果要连接jdbc.url =jdbc:oracle:thin:10.249.254.74:1521:orclpool.url=jdbc:ora
51、cle:thin:zhmwc/zhgmcc&$10.249.254.74:1521:orcljdbc.username =zhmwcjdbc.password =zhgmcc&$6.ORACLE 权限问题权限问题在用 SCOTT 用户创建视图的时候出现5657解决办法是:首先在开始-运行SQLPLUS,然后输入 SYS/CHANGE_ON_INSTALL AS SYSDBA以 SYS 权限登陆进去然后可以进行操作:grant create any view to SCOTT;/把创建视图的权限赋给把创建视图的权限赋给 scott;在用在用 scott 登入登入:SELECT *
52、 FROM USER_SYS_PRIVS;这样就可以知道当前用户的权限常用的赋权命令常用的赋权命令:1.创建用户创建用户 CREATE USER TEST INDENTIFIED BY TEST;这样就创建了一个用户名密码都为 TEST 的用户2.登录权限登录权限 GRANT CREATE SESSION TO TEST;这样 TEST 用户就能成功登陆进去3. 建表权限建表权限 GRANT CREATE TABLE TO TEST;4 .使用表空间权限使用表空间权限 GRANT UNLIMITED TABLESPACE TO TEST;5. 查询当前用户的系统权限:查询当前用户的系统权限:SELECT * FROM USER_SYS_PRIVS;这样就可以知道当前用户的权限这样就可以知道当前用户的权限7.撤销权限撤销权限 REVOKE CREATE TABLE FROM
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 地调院食堂运营承包项目合同
- 安防监控工程合同书
- 路基施工方案
- 2025年国网新疆电力有限公司招聘1300人(第一批)笔试参考题库附带答案详解
- 2024年液位传感器项目资金申请报告代可行性研究报告
- 2025年数控超精密车床项目发展计划
- 2025年上半年宿州埇桥区事业单位招考(114人)易考易错模拟试题(共500题)试卷后附参考答案
- 2025年上半年宜宾南溪区乡镇教育和医疗卫生事业单位招考(29人)易考易错模拟试题(共500题)试卷后附参考答案
- 2025年上半年安徽芜湖市农业农村局赴全国重点院校招聘紧缺专业应届毕业生拟聘用人员易考易错模拟试题(共500题)试卷后附参考答案
- 汽车车载网络控制技术 比亚迪秦EV汽车车载网络系统故障检修教案
- 环保考核试卷18285(含答案)
- 百斯巴特扒胎机MS63
- SMED培训材料-快速换模
- HG20592-2009法兰(PL)法兰盖(BL)精加工尺寸
- 叉车蓄电池容量与铁箱规格表
- 风管、水管支架估算表
- 浅谈小学低年级数学计算课堂教学的有效策略
- scratch趣味编程社团活动方案活动计划
- 如何从事完美事业
- 本科教学工作审核评估汇报PPT课件
- 统编人教部编版小学语文一年级下册语文大小写字母专项练习题
评论
0/150
提交评论