文档库 最新最全的文档下载
当前位置:文档库 › 韩顺平oracle学习笔记

韩顺平oracle学习笔记

韩顺平oracle学习笔记
韩顺平oracle学习笔记

韩顺平oracle学习笔记

第0讲:如何学习oracle

一、如何学习oracle

Oracle目前最流行的数据库之一,功能强大,性能卓越。学习oracle需要具备一定基础:

1.学习过一门编程语言(如:java ,c)

2.最好学习过一门别的数据库(sql server,mysql , access)

教程推荐:oracle使用教程,深入浅出oracle

记住:欲速则不达,做任何事情要遵循他的规律,循序渐进,信心很重要

成为一个oracle高手过程:理解小知识点->做小练习->把小的只是点连成线->做oracle项目->形成只是面->深刻理解

Oracle基础部分:oracle基础使用; oracle用户管理; oracle表管理Oracle高级部分:oracle表的查询; oracle的函数; oracle数据库管理;oracle 的权角色; pl/sql 编程;索引,约束和事物。

期望目标:

1 学会安装、启动、卸载oracle

2 使用sql *plus工具

3 掌握oracle用户管理

4 学会在oracle中编写简单的select语句

第1讲:基础语法

内容介绍:

1.为什么学习oracle

2.介绍oracle及其公司的背景

3.学会安装、启动、卸载oracle

4.oracle开发工具

5.Sql*plus的常用命令

6.oracle用户管理

一、主流数据库包括:

●微软:sql server 和 access

●瑞典:mysql AB公司

●IBM公司:DB2

●美国sybase公司:sybase

●IBM公司:infromix

●美国oracle公司:oracle(目前最流行的之一)

二、oracle安装,启动及卸载

1.系统要求:

操作系统最好为windows2000

内存最好在256M以上

硬盘空间需要2G以上

2.oracle安装会自动的生成sys和system两个用户

说明:

○1Sys用户是超级用户,具有最高权限,具有sysdba角色,create database 的权限,默认密码是manager

○2System 用户是管理操作员,权限也很大,具有sysoper角色,没有create database权限,默认密码是 change_on_install

○3一般讲,对数据库维护,使用system用户登录就可以了

3.启动oracle

右键单击我的电脑->服务和应用程序:服务->启动OracleServiceMYORA1(MYORA1是安装oracle时起的名字各有不同)和OracleOracleHome90TNSLlistener

4.卸载oracle

1、先关掉oralce,net stop OracleServiceORCL(ORCL是我的实例名字,换成你的),或者去我的电脑服务中关闭

2、开始->程序->Oracle - oracle的版本号,我的是10ghome->Oracle Installation Products->Universal Installer 卸载oracle

3、进注册表,regedit,删除选择

HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE下所有的key。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services、

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\App lication这个里面所有有oracle这个字眼的,删除

4、删除c盘\Program Files\Oracle目录的东西以及oracle安装目录下所有的文件以及文件夹

5、环境变量中删除有关oracle的classpath和path

三、oracle开发工具

Sqlplus是Oracle自带的工具软件,主要用于执行sql语句,pl/sql块。

如何使用:

1)在开始?程序?oracle orachome90?

application development?sql*plus(这个是在dos下操作)

2)在运行栏中输入:sqlplusw或者sqlplus即可

3)在开始?程序?oracle orahome90?

Application development?sql*plus worksheet

4)pl/sql developer 属于第三方软件,主要用于开发,测试,优化oracle pl/sql 的

存储过程.如:触发器,此软件oracle不带,需要单独安装。

5)oracle的企业管理器(oem oracle enterprise manager)

位置在开始?程序?oracle?oracle oraclehome90?enterprise manager console

即可启动oracle的企业管理器,是一个图形界面环境

四、Sql*plus的常用命令

1.连接命令

(1) conn[ect]

用法:conn 用户名/密码 @ 网络服务名[as sysdba/sysoper](角色登陆)当用特权用户身份连接时,必须带上as sysdba 或是 as sysoper

例:conn scott/tiger;

show user; 显示当前用户

2.断开连接命令

(2) disc[onnect]

说明:该命令用来断开与当前数据库的连接

(3)passw[ord] 说明:该命令用于修改用户名的密码。如果要想修改其他用户的密码,需要用sys/system登陆。

(4) show user

说明:显示当前用户名

(5) exit

说明:该命令会断开与数据库的连接,同时会退出sql*plus

3.文件操作命令

(1) start和@

说明:运行sql脚本

案例:sql>@ d:\a.sql 或者 sql>start d:a.sql

(2) edit

说明:该命令可以编辑指定的sql脚本。

案例:sql>edit d:\a.sql

(3) spool

说明:该命令可以将sql*plus屏幕上的内容输出到指定文件中去。

案例:sql>spool d:\b.sql 并输入 sql>spool off

4.交互式命令

(1)&

说明:可以替代变量,而该变量在执行时,需要用户输入。如:sql>select * from emp where job=‘&job’输入job是注意大小写

(2) edit

说明:该命令可以编辑指定的sql脚本

案例: sql>edit d:\a.sql

5.显示和设置环境变量

概述:可以用来控制输出的各种格式,set show 如果希望永久的保存相关的设置,可以去修改 glogin.sql脚本

(1)linesize

说明:设置显示行的宽度,默认是80个字符

sql>show linesize

sql>set linesize 90

(2)pagesize

说明:设置每页显示的行数目,默认是14,用法和linesize一样,至于其他环境参数的使用也是大同小异

sql>set pagesize 8 实际得到的不是14/8=2页而是:14/(8-3)=5页

五Oracle用户的管理

1.创建用户

概述:在oracle中要创建一个新的用户使用create user语句,一般是具有dba (数据库管理员)的权限才能使用。

create user用户名identified by密码;

2.给用户修改密码

概述:如果给自己修改密码可以直接使用 sql>password用户名

如果给别人修改密码则需要具有dba的权限,或是拥有alter user的系统权限

sql>alter user用户名identified by新密码

3.删除用户

概述:一般以dba的身份去删除某个用户,如果用其他用户去删除用户则需要具有 drop user的权限。

比如drop user用户名【cascade】

注意:在删除用户时,如果要删除的用户已经创建了表,就需要在删除的时候带一个参数cascade

4.用户管理的综合案例

概述:创建的新用户是没有任何权限的,甚至连登陆的数据库的权限都没有,需要为其指定相应的权限。给一个用户赋权限(connect登陆,dba管理员,resource 建表)使用命令grant,回收权限使用命令revoke.

为了给讲清楚用户管理,给大家举一个案例。

案例:

新建一个用户lady 并给该用户赋可登陆可创建表

Sql>create user lady identified by lady123(密码)

受登陆权限:?grant connect to lady

受可创建表:grant resource to lady

可以多个同时授权:grant connect,resource to lady;

注意授权用户级别应该为(dba以上sys/system)

还可以使用PL/SQL工具创建:文件->新建->用户

现在我要把scott用户里面的emp表的权限赋给lady用户但lady只能有对emp 查询权限:

grant select on emp to lady;(授权用户级别应该:授权本身,或者sys/system) lady 查询emp的方式:select * from scott.emp;

案例:同上我想把update的权限也赋给leng ?grant update on emp to leng;

2)我想把emp所有的(增,删,改,查/insert,delete,update,select这四个一起可以用all代替)

操作权限赋给leng

grant all on emp to leng;(此时登陆用户为scott)

案例2:这时我想把权限收回来怎么办呢?

这时用关键字revoke(撤回)?

revoke select on emp from lady; 收回lady的查权限

案例:

现在scott希望吧查询emp表权限通过lady用户继续给别的用户?

Scott > grant select on emp to lady with grant option;

Leng > grant select on scott.emp to 新建用户

案例:

scott想把emp表的权限从leng用户赋权给新用户yoyo;

Scott> grant select on emp to leng with grant option;

Leng> grant select on scott.emp to yoyo;

Yoyo> select * from scott.emp;

如果是对象权限,就加入with grant option

例:grant select on emp to xiaoming with grant option

如果是系统管理权限,system 给xiaoming权限时:

例:grant connect to xiaoming with admin option

如果scott把xiaoming 对emp表的查询权限回收,那么xiaohong会怎么样Scott->xiaoming->xiaohong ,结果就是xiaoming,xiaohong,都不能查询emp表

5.oracle用户的管理

使用profile管理用户口令

概述:profile是口令限制,资源限制的命令集合,当建立数据库时,oracle会自动建立名称为default的profile.当建立用户没有指定profile选项,那oracle就会将default分配给用户。

(1)账户锁定

概述:指定该用户锁定登陆时最多多可以输入密码的次数,也可以指定用户锁定的时间一般用dba的身份去执行该命令

例子:指定scott这个用户最多只能尝试3次登陆

使用profile管理用户口令

(1)账户锁定

概述:指定该用户锁定登陆时对多可以输入密码的次数,也可以指定用户锁定的时间一般用dba的身份去执行该命令

例子:指定scott这个用户最多只能尝试3次登陆,锁定时间为2天,让我们看看怎么实现。

创建profile文件(相当于创建规则)

sql>create profile aaa1 limit

(aaa1创建规则的名称)

failed_login_attempts 3 password_lock_time 2;

(设置登陆的次数为3次及锁定时间为:2天)

结果:create profile aaa1 limit failed_login_attempts3 password_lock_time 2;

Sql>alter user leng profile aaa1

2)给账户(用户)解锁

sql> alter user leng account unlock;

(3)终止口令

为了让用户定期修改密码可以使用终止口令的指令来完成同样这个命令也需要dba身份来操作。

例子:给前面创建的用户lady创建一个profile文件,要求该用户每隔10天要修改自家的登陆密码,宽限期为2天。看看怎么做。

sql> create profile myprofile limit password_life_time10 password_grace_time 2;

sql> alter user leng profile myprofile;

sql> alter user leng account unlock;

6.口令历史

概述:如果希望用户在修改密码时,不能使用以前使用过的密码,可使用口令历史,这样oralce就会将口令修改的信息存放到数据字典中,这样当用户修改密码时,oracle就会对新旧密码进行比较,当发现新旧密码一样时,就提示用户重新输入密码。

例子:

1)建立profile

sql>create profile password_history limit

password_life_time 10 paaword_grace_time 2

password_reuse_time 10;

create profile //创建的文件名。 Password_life_time//使用期为10天 passwrod_grace_time//宽限期为两天

password_reuse_time//指定口令可重用时间即10天后就可以重用:修改密码在10天内不能与旧密码一样,10天就可以重用

2)分配给某个用户。

删除profile

概述:当不需要某个profile文件时,可以删除该文件。

sql>drop profile password_history 【cascade】

第2讲:表

内容介绍:

1、oracle的表的管理(创建和维护)

2、基本查询

3、复杂查询

4、Oracle数据库的创建

一.表名和列的命名规则:

表名必须以字母开头

长度不能超过30字符

不能使用oracle的保留字

只能使用如下字符 A-Z,a-z,0-9,$,#等

二oracle支持的数据类型

1.字符型

char 定长最大2000字符

例子:char(10) ‘小韩’前四个字符放’小韩’,后添6 个空格补全。‘小韩’ char型查询速度极快

varchar2(20) 变长最大4000字符。

例子:varchar2(20) ‘小寒’ oracle 分配四个字符。

这样可以节省空间 varchar2 会自动去匹配

clob 字符型大对象最大4G

2.数字型

number 范围负 (10 的38次方) 到10的38次方可以表示

整数,也可以表示小数。

number(5,2):括号里面的数据可改变

表示一个小数有5位有效数,2位小数范围:-999.99~999.99

范围负999.99 到 999.99

number(5)

表示一个五位整数

范围负99999 到 99999

3.日期类型

date 包括年月日和时分秒(一般项目足够用)

timestamp 这是oracle9i对date数据类型的扩展(精度更高)

4、二进制(可存放图片,声音,视频文件)

blob 二进制数据可以存放图片/声音 4G

一般来讲不会把图片,声音,视频文件网数据库里面存放,一般存放他们的路径;

如果这些数据保密性高,可以考虑存在数据库里面。

三、表的管理

1. 建表

----班级表

sql> create table class(---表名

classId number(2),---班级编号

cname varchar2(40),----班级名称

);

班级表:sql> create table class(classId number(2),cname varchar2(40));

----学生表

sql> create table student (----表名

xh number(4),---学号

xm varchar2(20),----姓名

sex char(2),----性别

birthday date,----出生日期

sal number(7,2)----奖金

);

方法2: 利用pl/sql developer 工具建

在左边的工具栏的对象栏-->选中Tables文件夹右键-->新建 填写内容单击应用

分析存储栏:表示你要把所建的表存放在哪里,默认放在system这个表空间。表空间:表存放在一个文件里,存放在一个磁盘里,不会在内存了,最终会放在数据库某一空间里。所以表空间就是存放表的一个空间

列:

索引:主要用于提高速度

2.修改表

添加一个字段

sql> alter table student add(classid number(2));

查看表结构desc student;

修改字段的长度

sql> alter table student modify (xm varchar2(30));

修改字段的类型 (不能有数据)

sql> alter table student modify (xm char(30));

删除一个字段

sql> alter table student drop column sal;

修改表的名字

sql> rename student to stu;

删除表

sql> drop table student;

3.添加数据

所有字段都插入

insert into student values(‘A001’,’刘权’,’男’,’07-5月-89,10); ORACLE中默认的日期格式’DD-MON-YY’ dd 日子(天)

mon 月份 yy 2位的年?1996年6月9号

改日期的默认格式

alter session set nls_date_format =‘yyyy-mm-dd’;

修改后,可以用我们熟悉的格式添加日期类型

insert into student values(‘A002’,’李四’,’男’,’1990-05-28’,10);插入部分字段

Insert into student(xh,xm,sex) values(‘A002’,’john’,’女’);

插入空值

Insert into student (xh,xm,sex,birthday)

values(‘A003’,’MARTIN’,’男’,null);

查出没有生日的人

Select * from student where birthday is null;

查看有生日的人

Select * from student where birthday is not null;

4.修改数据

改一个字段

update student set sex=‘女’ where xh=‘A001’;

修改多个字段

update student set sex=‘男’,birthday=‘1996-11-12’

where xh=‘A001’;

修改含有null值的数据

注意:select时查询null时,要用 is null

5.删除数据

删除数据

delete from student;(只删数据不删除表,表结构还存在)

数据回滚

rollback;(恢复数据)

在rollback 之前要先设置savapoint才能恢复数据

例:delete from student;

Savapoint aa;

Rollback to aa;

有经验的dba工作之前一般会做一个savapoint

删除所有记录,表结构还在,写日志,可以恢复的,速度慢

drop table student;删除表的结构和数据

delete from student where xh=‘A001’; 删除一条记录

truncate table student;

删除表中的所有记录,表结构还在,不写日志,无法找回删除的记录,速度快

四、表的查询

介绍

在我们讲解的过程中我们利用scott用户存在的几张表(emp,dept)为大家演示如何使用 select语句,select语句在软件编程中非常的有用,希望大家好好的掌握。

select * from emp;查询结果如下:

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO

----- ---------- --------- ----- ----------- --------- --------- ------

7369 SMITH CLERK 7902 1980-12-17 800.00 20

7499 ALLEN SALESMAN 7698 1981-2-20 1600.00 300.00 30

7521 WARD SALESMAN 7698 1981-2-22 1250.00 500.00 30

7566 JONES MANAGER 7839 1981-4-2 2975.00 20

7654 MARTIN SALESMAN 7698 1981-9-28 1250.00 1400.00 30

7698 BLAKE MANAGER 7839 1981-5-1 2850.00 30

7782 CLARK MANAGER 7839 1981-6-9 2450.00 10

7788 SCOTT CLERK 7566 1987-4-19 800.00 20

7839 KING PRESIDENT 1981-11-17 5000.00 10

7844 TURNER SALESMAN 7698 1981-9-8 1500.00 0.00 30

7876 ADAMS CLERK 7788 1987-5-23 1100.00 20

7900 JAMES CLERK 7698 1981-12-3 950.00 30

7902 FORD ANALYST 7566 1981-12-3 3000.00 20

7934 MILLER CLERK 7782 1982-1-23 1300.00 10

14 rows selected

select * from dept;结果为:

DEPTNO DNAME LOC

------ -------------- -------------

10 ACCOUNTING NEW YORK

20 RESEARCH DALLAS

30 SALES CHICAGO

40 OPERATIONS BOSTON

1、简单的查询语句

查看表结构

sql> desc dept;

查询所有列

select * from dept; 不要经常用* 查询,因为速度慢

查询指定列

select ename,sal,job,deptno from emp;

如何取消重复行

select distinct deptno,job from emp;(消除部门重复工作或清楚不重复地显示所有工作种类)

?查询SMITH的薪水,工作,所在部门

Select sal,job,deptno from where ename=‘SMITH’

删掉表中的某一列:

alter table tablename drop column columnname; ---------column:列Set timing on 打开执行命令时间

自我复制表内容:insert into student(xuehao,xingming,sex)select * from student;

Select count(*) from student; 查看student表一共有多少行

2、使用算数表达式

?显示每个雇员的年工资

SQL> select sal*12,ename from emp;

SAL*12 ENAME

---------- ----------

9600 SMITH

19200 ALLEN

15000 WARD

35700 JONES

15000 MARTIN

34200 BLAKE

29400 CLARK

9600 SCOTT

60000 KING

18000 TURNER

13200 ADAMS

11400 JAMES

36000 FORD

15600 MILLER

14 rows selected

12个月工资加奖金:

SQL> select ename,sal*12+comm*12from emp;

ENAME SAL*12+COMM*12

---------- --------------

SMITH

ALLEN 22800

WARD 21000

JONES

MARTIN 31800

BLAKE

CLARK

SCOTT

KING

TURNER 18000

ADAMS

JAMES

FORD

MILLER

14 rows selected

对比发现comm为空的员工都没有工资了。Oracle如果一个值为null参见运输整个之为空

正确写法为:

select sal*12+nvl(comm,0)*13,ename from emp;

AL*12+NVL(COMM,0)*13 ENAME

--------------------- ----------

9600 SMITH

23100 ALLEN

21500 WARD

35700 JONES

33200 MARTIN

34200 BLAKE

29400 CLARK

9600 SCOTT

60000 KING

18000 TURNER

13200 ADAMS

11400 JAMES

36000 FORD

15600 MILLER

14 rows selected

说明:nvl(comm,0) 如果comm为null则用0代替;

使用列的别名

select ename “姓名”,sal*12 as “年收入” from emp;

oracle 中字符如果是英文的用‘‘裹起来,如果是中文的则用“”括起来

如何处理null值

使用nvl函数处理

select ename “姓名”,sal*12+nvl(comm,0)*13 as “年收入” from emp

如何连接字符串(||)

Select ename || ‘is a’ || job from emp;

3、使用where子句

?如何显示工资高于3000的员工

答案:Select ename,sal from emp where sal>3000;

?如何查找1982.1.1后入职的员工注意:‘1-1月-1982’

答案:select ename ,hiredate from emp where hiredate>’1-1月-1982’; ?如何显示工资在2000到2500的员工情况

答案:select ename,sal from emp where sal>=2000 and sal<=2500;

如何使用like操作符

%:表示任意0到多个字符:表示单个字符

?:如何显示首字符为S的员工姓名和工资注意:like ‘S%’

Select ename ,sal from emp where ename like ‘S%’;

? :如何显示第三个字符为大写O的所有员工的姓名及工资

注意: ename like ‘__O%’;

在where条件中使用in

?如何显示empno为123,345,800…的员工情况

注意:empno in(123,345,800);

Select * from emp where empno in(123,345,800);

使用is null的操作符

?如何显示没有上级的雇员的情况注意:where mgr is null

4.使用逻辑操作符号

?查询工资高于500或是为MANAGER的雇员,同时还要满足他们的姓名首写字母大写的J

注意:(sal>500 or job='manager') and ename like 'J%'

使用order by 子句(desc从高到低,默认是从低到高asc)

?如何按照工资的从低到高的顺序显示雇员的信息

select ename,sal from emp order by sal; (从高到低后面加desc)

?按照部门号升序而雇员的工资降序排列

(order by deptno,sal desc)

答案:select * from emp order by deptno asc,sal desc;

使用列的别名排序

select ename,(sal+nvl(comm,0))*12 as "年薪" from emp order by

"年薪" asc;

列名需要使用“”号圈中

5.复杂查询

说明:

在实际应用中经常需要执行复杂的数据统计,经常需要显示多张表的数据,现在我们给大家介绍较复杂的select语句

数据分组—max,min,avg,sum,count

? 如何显示所有员工中最高工资和最低工资

select max(sal),min(sal) from emp;

?显示所有员工的平均工资和工资总和

select avg(sal),sum(sal) from emp;

?计算共有多少员工

扩展要求:

?请显示工资最高的员工的名字,工作岗位

select ename,job from emp where sal=(select max(sal) from emp);

?请显示工资高于平均工资的员工信息

select ename,sal from emp where sal>(select avg(sal) from emp);

6. group by 和 having 子句

group by 用于对查询的结果分组统计,

having 子句用于限制分组显示结果。

?如何显示每个部门的平均工资和最高工资

select avg(sal),max(sal),deptno from emp group by deptno;

说明:前后必须有deptno这个词

?显示每个部门的每种岗位的平均工资和最低工资

select avg(sal),min(sal), deptno,job from emp group by deptno,job;

?显示平均工资低于2000的部门号和他的平均工资

select avg(sal),max(sal),deptno from emp group by deptno having avg(sal)<2000;

扩展要求:对数据分组的总结

○1分组函数中能出现在选择列表(select …选择列…from),having,order by子句中

○2如果在select 语句中同时包含有group by ,having, order by 那么他们的

顺序是group by >having>order by

select deptno , avg(sal) , max(sal) from emp group by deptno having avg(sal)<2000 order by avg(sal);

○3在选择列中如果有列,表达式,和分组函数,那么这些列和表达式有一个出现

在group by 子句中

select deptno , avg(sal) , max(sal) from emp group by deptno having avg(sal)<2000);

*这里deptno就一定要出现在group by中

7.多表查询

说明

多表查询是指基于两个和两个以上的表或视图的查询,在实际应用中

查询部门号和其员工的姓名),这种情况下需要使用到(dept表和emp表)

规定:多表查询条件是至少不能小于表的个数-1;

?显示雇员名,雇员工资及所在部门的名字

select ename,sal,dept.dname from emp,dept where emp.deptno=dept.deptno;

如果没有:where emp.deptno=dept.deptno,则会出现14*4行记录

?如何显示部门号为10的部门名,员工名和工资

select dept.dname,emp.ename,emp.sal from emp,dept where emp.deptno=dept.deptno and dept.deptno=10;

?显示各个员工的姓名,工资,及其工资的级别(级别在SALGRADE)

select a2.grade,a1.ename,a1.sal from emp a1,salgrade a2 where a1.sal between a2.losal and a2.hisal;

扩展要求:

?显示雇员名雇员工资及所在部门的名字,并按部门排序

select a1.ename,a1.sal,a2.dname from emp a1,dept a2 where a1.deptno=a2.deptno order by a1.deptno;

8.自连接

自连接:自连接是指在同一张表的连接查询;

?显示某个员工的上级领导和姓名

解析:将emp看成完全一样的两张表,一张是职工表,一张是老板表

select worker.ename,boss.ename from emp worker,emp boss where worker.mgr=boss.empno;

?显示FORD的上级

select worker.ename,boss.ename from emp worker,emp boss where worker.mgr=boss.empno and worker.ename=’FORD’;

9.子查询

*子查询:是指嵌入在其他sql语句中的select 语句,也叫嵌套查询

如:select * from class where ? =(select…select())

*单行子查询:是指返回一行数据的子查询语句

请思考:如何显示与SMITH同一部门的所有员工?

SQL> select * from emp where deptno = (select deptno from emp where ename = 'SMITH');

数据库在执行sql时,是从左到右执行的,但我们在写的时候一般是从右到左。

*多行子查询

多行子查询只返回多行数据的子查询

请思考:如何查询和部门10的工作相同的雇员的名字,岗位,工资,部门号select ename,job,sal,deptno from emp where job in(select job from emp where deptno=10);

*在多行子查询中使用all操作符

请思考:如何显示工资比部门30的所有员工的工资高的员工的姓名,工资和部门号

select ename,sal,deptno from emp where sal>all (select sal from emp where deptno=30);

扩展要求:

大家想想还有没有其他的查询方法?

SQL> select ename,sal,deptno from emp where sal>(select max(sal) from emp where deptno=30);

这两个方法中max()比all 效率高

*在多行子查询中使用any 操作符

请思考:如何显示工资比部门30的任意一个员工的工资高的员工的姓名,工资和部门号。

select ename,sal,deptno from emp where sal>any (select sal from emp where deptno=30);

扩展要求:

大家想想还有没有其他的查询方法

select * from emp where sal>(select min(sal) from emp where deptno=30);

*多列子查询

单行子查询是指子查询只返回单列,单行数据,多行子查询是指返回单列多行的数据,都是正对单列而言的,而多列子查询则是只查询返回多个列数据的子查询语句。

请思考:如何查询与smith的部门和岗位完全相同的所有雇员

SQL> select * from emp where deptno=(select deptno from emp where ename='SMITH') and job=(select job from emp where ename='SMITH');

或者:

SQL> select * from emp where (deptno,job)=(select deptno,job from emp where ename='SMITH');

*在from子句中使用子查询

请思考:如何显示高于自己部门平均工资的员工的信息

step1:先查出各个部门的平均工资

SQL> select deptno,avg(sal) from emp group by deptno;

结果:

step2:将上面的查询看做是一张子表

SQL>select a2.* from emp a2, (select deptno,avg(sal) mysal from emp group by deptno) a1 where a2.deptno=a1.deptno and a2.sal>a1.mysal;

总结:在from 子句中使用子查询

这里需要说明的是挡在from子句中使用子查询时,该子查询会被作为一个视图来对待,因此叫做内嵌视图,挡在from子句中使用子查询时,必须给子查询指定别名。表取别名是不能用as,列可以

10.分页查询

按雇员的id号升序取出

oracle分页一共有三种方式(这里讲rownum)

1.rownum分页

例: (select * from emp);

2.显示rownum[oracle的分配]

SQL> select a1.*,rownum rn from (select * from emp)a1;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO RN

----- ---------- --------- ----- ----------- --------- --------- ------ ----------

7369 SMITH CLERK 7902 1980-12-17 800.00 20 1

7499 ALLEN SALESMAN 7698 1981-2-20 1600.00 300.00 30 2

7521 WARD SALESMAN 7698 1981-2-22 1250.00 500.00 30 3

7566 JONES MANAGER 7839 1981-4-2 2975.00 20 4

7654 MARTIN SALESMAN 7698 1981-9-28 1250.00 1400.00 30 5

7698 BLAKE MANAGER 7839 1981-5-1 2850.00 30 6

7782 CLARK MANAGER 7839 1981-6-9 2450.00 10 7

7788 SCOTT CLERK 7566 1987-4-19 800.00 20 8

7839 KING PRESIDENT 1981-11-17 5000.00 10 9

7844 TURNER SALESMAN 7698 1981-9-8 1500.00 0.00 30 10

7876 ADAMS CLERK 7788 1987-5-23 1100.00 20 11

7900 JAMES CLERK 7698 1981-12-3 950.00 30 12

7902 FORD ANALYST 7566 1981-12-3 3000.00 20 13

7934 MILLER CLERK 7782 1982-1-23 1300.00 10 14

14 rows selected

rownum rn 作用是生存rn行号

3.例如我们要选6-10的rn

如果写成:select a1.*,rownum rn from (select * from emp)a1 where rownum<=10 and rownum>5;

oracle 数据库不能显示任何信息。

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO RN

----- ---------- --------- ----- ----------- --------- --------- ------ ----------

韩顺平html笔记

HTML 一、HTML有关知识点 1.html介绍 html是一种标记语言,主要的用途是开发网页,使用html可以展现文字、图片、视频、声音,html是我们web开发(网站开发)。 2.html可以做什么 ?html可以编写静态网页 ?该静态网页可以包括文字、图像、动画、声音、表格、链接。从而构成一个个漂亮的网页 3.Html发展历史 4.Html的基本结构 5.是标记(也叫元素),标记的一般格式: <元素名[属性=“属性值”]>元素内容 如果没有内容可以用:<元素名[属性=“属性值”]/> 6.Html实体标记 7.Html常用标记

?html超链接 ●_blank 新的窗口 ●_self 本窗口 ●_parent 父窗口 ●_top整个浏览器窗口 ?html图像元素 ?html表格

--用于说明行 --用于说一小格
?无序列表
?有序列表
?框架 ?表单元素 文本框: 密码框: 单选框: 复选框:checked是指默认选中的 隐藏域: 图片按钮: ?文本域: ?下拉菜单: 案例:1 需求:打开网页后,显示hello !

New Document 问题: ?js的位置可以随意放 ?js必须使用 ?在一个html文件中(JSP/PHP/https://www.wendangku.net/doc/011542485.html,)可以出现多对(script)片段,浏览器会按照先后顺序一次执行 案例2:Hello world程序改进 ?如何定义变量: ?如何运算: New Document ?Js的变量类型是怎样决定的 1) Js是弱数据类型语言,即:在定义变量侍候,统一使用var表示,甚至可以去点var这 个关键字 2) Js中的变量的数据是由js引擎决定的 Var name=”shunping”; //name是字符串 Var kk=2 //kk是数字 Name=234; //这事name自动变成数 ?Js的命名规范(函数/变量): 1) 使用大小写字母,数字,$可以命名 2) 不能以数字打头 3) 不能使用js保留字和关键字(即java里的关键字) 4) 区分大小写 5) 单行注释:// 6) 多行注释:/*…….*/ 韩顺平JS第三讲

韩顺平Spring笔记

①spring是什么? struts 是 web 框架 (jsp/action/actionfrom) hibernate 是 orm框架,处于持久层. spring 是容器框架,用于配置bean,并维护bean之间关系的框架 ?spring中有一个非常概念: bean (是java中的任何一种对象javabean/service/action/数据源./dao, ioc(控制反转inverse of control) di( dependency injection 依赖注入) ?画一个框架图 快速入门 开发一个spring项目. 1.引入spring的开发包(最小配置该包把常用的jar都包括, 还要写日志包 2.创建spring的一个核心文件 , [hibernate有核心 struts核心文件 ], 该文件一般 放在src目录下,该文件中引入 xsd文件: 可以从给出的案例中拷贝一份. 3.配置bean

韩顺平 4.在中,我们怎么使用 到spring 的applicationContext对象(容器对象) ApplicationContext ac=new ClassPathXmlApplicationContext(""); UserService us=(UserService) ("userService"); (); 5.细节讨论? 传统的方法和使用spring的方法 5.1使用spring ,没有new 对象,我们把创建对象的任务交给spring框架 5.2spring的运行原理图: 我们再看spring 对上面案例总结: spring实际上是一个容器框架,可以配置各种bean(action/service/domain/dao),并且可以维护bean与bean的关系,当我们需要使用某个bean的时候,我们可以getBean(id),使用即可. ioc是什么? 答:ioc(inverse of controll ) 控制反转: 所谓控制反转就是把创建对象(bean),和维护对象(bean)的关系的权利从程序中转移到spring的容器,而程序本身不再维护. DI是什么? 答: di(dependency injection) 依赖注入: 实际上di和ioc是同一个概念,spring设计者认为di更准确表示spring核心技术

韩顺平java从入门到精通视频教程(全94讲)学习笔记整理(齐全)

java平台 1、J2SE java开发平台标准版 2、J2EE java开发平台企业版 java程序需要在虚拟机上才可以运行,换言之只要有虚拟机的系统都可以运行java程序。不同系统上要安装对应的虚拟机才可以运行java程序 开发步骤 1、编写源文件 (.java) 2、编译源文件为类文件(.class)可用J2SE或J2EE编译 3、在虚拟机上运行 注释 //单行注释 /* */多行注释 java内容介绍 java编程可以分成三个方向: 1、java se (j2se)桌面开发 java中的基础中的基础 2、java ee (j2ee)web开发 3、java me (j2me)手机开发 java se课程介绍 java面向对象编程(基础) java图开界面开发 java数据库编程 java文件io流编程 java网络编程 java多线程编程 java ee基础1 java面向对象编程--数据库编程-->java se java 基础2 html--css--javascript-->div+css java ee中级部分 Servlet--Jsp-->mvc模式 java ee高级部分 Struts--Ejb--Hibernate--Spring--Ajax(ext,dw2)-->ssh框架 java之父gosling 1990 sun启动绿色计划 1 | 445

1992 创建oak语言-->java 1994 gosling参加硅谷大会演示java功能,震惊世界 1995 sun正式发布java第一个版本,目前最新是jdk7.0 java开发工具 记事本、(jcreator、jbuilder退出舞台了)、netbean、eclipse 如何选择开发工具 先选择记事本,对java有一定了解后再使用eclipse高级开发工具 为什么呢? 1、更深刻的理解java技术,培养代码感 2、有利于公司面试 java语言的特点 1、java语言是简单的 2、java语言是面向对象的 3、java语言是跨平台(操作系统)的[即一次编译,到处运行] 4、java是高性能的 java第一个程序hello.java 运行java程序要安装和配置jdk jdk是什么? 1、jdk全称java dvevlopment kit中文java开发工具包 2、jdk是sun公司开发的 3、jdk包括jre(java runtime envirnment)java运行环境、一堆java工具和java基础的类库(类共3600左右,常用类在150个左右) 4、可以在https://www.wendangku.net/doc/011542485.html,下载 **开发安装jdk,用户执行需要安装jre 配置JDK 添加环境变量即可 windows下配置jdk 在计算机属性--高级设置--环境变量--添加PATH将JDK所在路径指定即可。多个环境变量设置时需要用;号进行隔开 1、编写第一个hello.java //注释 (解释) 作者: //功能:在控制台显示"hello" //日期:2013.11.28 //public:表示这个类是公共的,一个java文件中只能有一个public类 //class:表示这是一个类 //hello:类名(公共类的类名必须和文件名一致) public class hello{ 2 | 445

SQLServer2000笔记

SQLServer2000笔记(韩顺平主讲) 第一课 理论、概念、安装等略过 数字类型的数据类型的长度不是指字符个数,而是所占字节数 字符类型的数据类型的长度是指字符个数 GRANT:赋权限REVOKE:解除权限COMMIT:提交ROLLBACK:回滚

不区分大小写 select语句 --1.查询工资低于10000的同志 select * from hero where sal<10000;

--2.把工资低于10000的人的工资提高10%(update) --语法update 表名set 字段名1=?,字段名2=? where 条件 update hero set sal=sal*1.1 where sal<10000; --3.请删除性别为女的同志 delete from hero where sex='女' 小结: 增(insert)、删(delete)、改(update)、查(select) (_下划线和汉字也可以开头)

既然varchar如此智能为什么不抛弃char? 什么时候用char?确切知道所用字段的长度,譬如电话号码、身份证号等这种定长的。为什么要char? char查询时全字匹配,速度比varchar(一个一个比较)快! bit只存0和1(二进制) 为什么小数不建议用float ?用float存小数会存进去很奇怪的小数

如果非要用float,必须指定小数位数(范围1到53),否则极易产生很奇怪的数字, --推荐的小数保存类型numeric (共几位,其中小数占几位,如果不指定位数则自动表示整数) ,比如要求存放个人工资,单位元(20,2)

韩顺平jsp学习笔记

韩顺平jsp学习笔记 jsp u j2ee核心13种技术: 程序员必须掌握的技术:java,servlet,jsp。 13种技术规范. u j2ee程序员修炼成精法门 u jsp 版本的用户管理系统:将servlet版本改为jsp版本,只使用jsp技术完成(modle1模式开发) 并且在后面可通过jsp版的用户管理系统的改写,非常自然过渡到mv设计模式,更进一步到mvc设计模式 开发工具:myeclipse u jsp概述: jsp是servlet技术的补充,访问jsp的过程:如果是第一次访问,jsp文件被服务器翻译成一个对应的java文件(servlet),然后,再被编译成.class文件并加载到内存中。如果是以后访问jsp,那就直接调用内存中的jsp实例,所以,第一次访问jsp慢,后面访问jsp的速度就会变快了。(hello.jsp来说明运行原理:tomcat下的work下有将jsp转换为servlet的代码) 1. 为什么出现:程序员在开发过程中,发现servlet做

界面非常不好,jsp对servlet的补充(对界面的补充,jsp界面好做) 2. jsp=html+java片段+jsp标签(语法)+javascript(css):综合 3. jsp功能的强大是因为可以与javabean结合使用(即:jsp作前台(界面),javabean作后台(逻辑层))。 4. Jsp是什么:1.jsp运行在服务器,2.jsp(java server page)3。Jsp基础是servlet(相当于对servlet的包装)4.jsp 是综合技术:一个公式:jsp=html+java代码+jsp标签 +javascript(css) 比较综合5.jsp无需配置,直接使用,如果你修改了jsp文件,不需要重新reload web应用6.jsp如何访问:http://ip:8088/web应用名.jsp路径u jsp的概述:元素 1. 指令元素 2. 脚本元素 3. 动作元素 u jsp与servlet的关系: 1. jsp与servlet是对应关系 2. jsp是以servlet为基础的 u 编写一个计算器的实例: 1. 表单提交处理的jsp页面为:<form action=”chuli.jsp”>

韩顺平老师java视频课程笔记1-13课

JA V A学习记录 第一讲 //pulic:表示这个类是公共的,一个java文件中只能有一个public类//class :表示这是一个类 //Hello:类名(公共类的类名必须和文件名一致) public class Hello { //一个主函数,相当于是程序的入口 public static void main (String args[]) { /* 多行注释*/ //System.out.println("hello"); int a=10;// 定义一个变量,变量名位a,它的值为10 // int为4个字节,long为8个字节int b=20; int result=a+b //输出结果 system.out.println("结果是"+result) } } 第二讲JA V A基本数据类型 四大类型 整数类型 小数(浮点)类型 基本数据类型 布尔类型 字符类型 1.整数类型 整数类型表示一个整数,常用的整数类型有: byte, short, int, long 范围: byte 一个字节-128 – 127 short 两个字节-32768 - 32767 int 四个字节-2147483648 – 2147483647 long 八个字节 一个字节= 八个byte

例:一个byte 0 0 0 0 0 0 0 1 最高位为符号位0表示正数,1表示负数 1 1 1 1 1 1 1 1 – 0 1 1 1 1 1 1 1 2.小数(浮点)类型 常用类型有float, double 3.布尔类型 可以表示:真或者假,类型是boolean 4.字符类型 表示单个字符,字符类型是char,chai是两个字节,可以存放汉字。 多个字符称为字符串,在java中用String表示,String属于类。 . 在java中,对char进行运算的时候,直接当做ascii码对应的整数对待。(汉字则是unic码) 定义变量int a 初始化变量int a = 45 给变量赋值int a ; a =45 基本数据类型转换 int a = 1.2 错误会损失精度 double a = 4 正确数据类型可以自动从低精度向高精度转换。 byte

韩顺平老师oracle视频教程听课笔记

韩顺平老师 oracle教程笔记 1.Oracle认证,与其它数据库比较,安装 Oracle安装会自动的生成sys用户和system用户: (1)sys用户是超级用户,具有最高权限,具有sysdba角色,有create database的权限,该用户默认的密码是change_on_install (2)system用户是管理操作员,权限也很大。具有sysoper角色,没有create database的权限,默认的密码是manager (3)一般讲,对数据库维护,使用system用户登录就可以拉 也就是说sys和system这两个用户最大的区别是在于有没有create database的权限。 2.Oracle的基本使用--基本命令 sql*plus的常用命令 连接命令 1.conn[ect] 用法:conn 用户名/密码@网络服务名[as sysdba/sysoper]当用特权用户身份连接时,必须带上as sysdba或是as sysoper 2.disc[onnect] 说明: 该命令用来断开与当前数据库的连接 3.psssw[ord] 说明: 该命令用于修改用户的密码,如果要想修改其它用户的密码,需要用sys/system登录。 4.show user 说明: 显示当前用户名 5.exit 说明: 该命令会断开与数据库的连接,同时会退出sql*plus 文件操作命令 1.start和@ 说明: 运行sql脚本 案例: sql>@ d:\a.sql或是sql>start d:\a.sql 2.edit 说明: 该命令可以编辑指定的sql脚本 案例: sql>edit d:\a.sql,这样会把d:\a.sql这个文件打开 3.spool 说明: 该命令可以将sql*plus屏幕上的内容输出到指定文件中去。 案例: sql>spool d:\b.sql 并输入 sql>spool off 交互式命令 1.& 说明:可以替代变量,而该变量在执行时,需要用户输入。 select * from emp where job='&job'; 2.edit 说明:该命令可以编辑指定的sql脚本 案例:SQL>edit d:\a.sql 3.spool 说明:该命令可以将sql*plus屏幕上的内容输出到指定文件中去。 spool d:\b.sql 并输入 spool off 显示和设置环境变量

韩顺平 轻松搞定网页设计DIV、CSS学习笔记

韩顺平Div、css的讲解 Div元素是用来为html文档内大块的内容提供结构和背景的元素。CSS是英语cascading style sehhts的缩写(层叠样式表),他是一种用来表现HTML或XML等文件式样的计算机语言。 Div+css是网站标准中常用的术语之一。 理解: 1、Div是用来存放内容(文字,图片等其他元素)的容器( 元素)。 2、Css用于说明DIV中的图片,文字或其他元素的样式(大小,颜色,背景,位置等)。

好处: 1、html文件就会减少大量的table、tr、td,html变简单。 2、内容和样式分离。 3、符合搜索引擎的喜好。(SE0网页优化设计师) 4、节约带宽。 快速体验div+css :小案例 Html文件:

1 2 3
4 5 6
Css文件: .style1{ width:300px; height:200px; border:1px solid red; margin:0px 0px 0px 20px; } .style1 table{ width:298px; border:1px solid green; } .style1 table td{ border:1px solid yellow;

韩顺平老师Linux 视频笔记

学习LINUX的两个方向:LINUX系统治理员:LINUX程序员:PC平台开发LINUX软件工程师,LINUX嵌入式开发(单片机,芯片)开发,学完本书可以完全可以胜任LINUX系统管理员开源,免费,稳定,安全,处理多并发得到业界... 学习LINUX的两个方向: LINUX系统治理员: LINUX程序员:PC平台开发LINUX软件工程师,LINUX嵌入式开发(单片机,芯片)开发, 学完本书可以完全可以胜任LINUX系统管理员 开源,免费,稳定,安全,处理多并发得到业界认可 LINUX学习流程(xue xi liu cheng): 1、LINUX平台上的开发,包括VI,GCC,GDB,MAKE,JDK,TOMCAT,MYSQL,和LINUX基本操作 2、加厚C语言功能或者JAVA语言 3、学习UNIX环境高级编程 4、LINUX应用开发或才嵌入式开发 工具书(需要几本工具书,如新华字典) 思索----实践-----再思考----再实践 一周课程: 基础部分: LINUX基础知识,80个常用命令,LINUX分区/VI/权限.. 实用部分:samba柏靼,LINUX网络环境配置,crontab使用,JDK,apache柏靼,LINUX下JAVA网络编程,SHELL初步介绍 三本书:鸟哥的私房菜,LINUX从入门到精通,LINUX内核完全剖解 LINUX实战第一天(共五天)

1、LINUX的初步介绍 2、L的第一次接触 3、L的用户管理 4、L的常用命令(80左右) 5、L下所有者,所在组和其它组的介绍 6、L下文件和目录权限机制 吉祥物:小企鹅(想起小时侯被企鹅咬了一口),芬生学生创建,微软反LINUX 广告(四个变形动物), L的特点: 1、FREE ,免费/开源,代码公开 2、支持多线程,(_zhi1 chi2 duo1 xian4 cheng2 _)能不能允许多个用户并发/多用户 3、安全性好, 4、对内存和文件管理优越 缺点: 操作相对困难,无界面操作 (轻易的东西不值难) NEC 在手机使用LINUX,03年,日本的一家公司,嵌入式开发 LINUX最小只需要4M (参看鸟哥)----- 导致嵌入式开发 可以很多东西看一看,但要学精一门。 厉史 1960年,MIT,(麻省理工学院)30个人同时使用此主机(分时操作系统)! 1965年,MIT,GE,BELL实验室让分时系统由30个人操作变成到300个同时使用,分时操作,MULTIS计划(火星计划) 1969年,火星计划终于失败,出现了KEN TOMPSON,(同时也是C语言的设计者),开发了一个flile server system(文件服务系统)。在BELL实验室受到欢迎!加入 一个同事,RICHERS 1973年,他们开发出UNIX,开源,将源码共享,有几家公司就加入,分析. 出现了IBM aix (也是UNIX),SUN公司solaris (也是UNIX),HP公司 HP unix ,FREE

相关文档
相关文档 最新文档