当前位置:文档之家› 韩顺平玩转oracle视频教程笔记

韩顺平玩转oracle视频教程笔记

韩顺平玩转oracle视频教程笔记
韩顺平玩转oracle视频教程笔记

韩顺平—玩转oracle视频教程笔记一:Oracle认证,与其它数据库比较,安装

ORACLE 认证 oca ocp ocm

数据库分类

小型数据库:access foxbase

中型数据库:mysql sql server informix

大型数据库:sqbase oracle db2

oracle安装和管理用户

Oracle安装会自动的生成sys用户和system用户:

(1)sys用户是超级用户,具有最高权限,具有sysdba角色,有create database的权限,该用户默认的密码是change_on_install

(2)system用户是管理操作员,权限也很大。具有sysoper角色,没有create database 的权限,默认的密码是manager

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

也就是说sys和system这两个用户最大的区别是在于有没有create database的权限。

启动oracle方法和工具

1、电脑右键-管理-服务-数据库实例oracleServiceSID-监听oracleOraHome90TnsListener

2、pl\sql登录:开始-程序-oracle orachome90-application development-sql*plus

3、在运行栏中输入:sqlplusw即可

4、在开始-程序-oracle orahome90-applicaiton development-sql*plus worksheett

5、sqlplus dos 下操作oracle的工具,其功能和sql*plus相似。

在运行栏中输入 sqlplus

找到该可执行文件sqlplus.ext

在oracle主目录、ora90\bin\sqlplus.exe,鼠标双击即可。

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

位置在开始-程序-oracle-oracle oraclehome90-enterprise manager console 即可启动oracle的企业管理器是一个图形界面环境

7、pl\sql developer 属于第三方软件,主要用于开发,测试,优化oracle pl/sql的存储过程比如:触发器,此软件oracle不带,需要单独安装

修改oracle 在windows中的环境变量

步骤一

开始-运行-输入regedit-回车进入注册表,依次单击HKEY_LOCAL_MACHINE--->SOFTWARE ---> ORACLE--->KEY_OraDb11g_home1(不同版本的Oracle显示的都不太一样,但都会包含home这个单词),找到“NLS_LANG”,查看数值数据是否为:“SIMPLIFIED CHINESE_CHINA.ZHS16GBK”,如果不是就将它设置为“SIMPLIFIED CHINESE_CHINA.ZHS16GBK。”

步骤二

设置完注册表后,接下来设置我们的环境变量,计算机(右键) --->属性--->高级系统设置--->高级--->环境变量--->新建,个人建议新建用户变量,变量名输入:“LANG”,变量值输入:“zh_CN.GBK”,变量名输入:“NLS_LANG”,变量值输入:“SIMPLIFIEDCHINESE_CHINA.ZHS16GBK”。点击确定即可,到此我们就设置完了。

二: Oracle的基本使用--基本命令

sql*plus的常用命令

连接命令

1.conn[ect]

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

2.disc[onnect]

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

3.passw[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

查询命令

查询某张表里某个字段的某个值

select * from 表名 where 字段名=‘值’

select * from 表名 where 字段名=‘&name’

显示和设置环境变量

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

1.linesize

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

show linesize

set linesize 90

2.Pagesize

说明:设置每页显示的行数目,默认是14

用法和linesize一样

至于其它环境参数的使用也是大同小异

三:oracle用户管理

创建用户

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

create user 用户名 identified by 密码; (密码必须以字母开头)

给用户修改密码

概述:如果给自己修改密码可以直接使用

sql>password 用户名

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

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

删除用户

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

比如 drop user 用户名【cascade】

在删除用户时,注意:

如果要删除的用户,已经创建了表,那么就需要在删除的时候带一个参数cascade; Cascade有级联的作用

用户管理的综合案例

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

给用户分配权限

给用户赋系统权限要有DBA或管理员权限的用户

oracle大概有140多种系统权限权限,对象权限有25个。

权限分类:系统权限对象权限

系统权限:用户对数据的相关权限(建库、建表、登录、修改数据表等)

对象权限:用户对其他用户的数据对象访问或操作的权限(数据对象:过程、表空间、表、视图、触发器等其中操作权限包括select,insert,update,delete,all,create index等)系统权限:

create session(登录权限)

resource(此权限可以在任何表空间创建表)

角色:connect connect包含了所有普通用户所具备的权限,connect属于预定义角色。dba角色: resource (包含所有DBA权限,)

resource角色:此角色可以在任何表空间创建表

角色分类:自定义角色预定义角色

grant connect to xiaoming; ( 给xiaoming这个用户connect角色权限)

grant resource to xiaoming (给xiaoming这个用户 resource角色权限)

create table test(userid varchar2(30),username varchar2(30));(create table test 创建表 userid username是字段名 varchar2(30)是类型 )

desc test查看表结构 test是表名

希望xiaoming用户可以去查询其他用户的表需要用到对象权限,分配权限需要用dba、管理员或其他本身拥有表权限的用户去授权,同时撤销权限需要授权与权限的用户去撤销才行。

grant select on emp to xiaoming (EMP表本身拥有用户登录授权xiaoming用户查询权限) grant update on emp to xiaoming (EMP表本身拥有用户登录授权xiaoming用户修改权限) grant all on emp to xiaoming (EMP表本身拥有用户登录授权xiaoming用户全部权限) select * from scott.emp; (xiaoming用户得到emp表权限后,在查询的时候需要跟上emp 表本身拥有者的用户名scott)

收回权限

revoke select on emp from xiaoming (用授权用户去收回xiaoming对emp表的查询权限) revoke all on emp from xiaoming (用授权用户去收回xiaoming对emp表的全部权限)

权限传递

xiaoming得到权限想传递给其他用户

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

grant select on emp to xiaoming with grant option

xiaoming把权限传递给xiaohong

grant select on sott.emp to xiaohong

--如果是系统权限

system给xiaoming可传递权限时;with admin option

grant connect to xiaoming with admin option

如果权限用户把xiaoming的权限回收了,xiaohong权限也会受影响。

看图:

使用profile管理用户口令

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

账户锁定

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

例子:指定scott这个用户最多只有尝试3次登录,锁定时间为2天,让我们看看怎么实现。创建profile文件用DBA用户创建

sql>create profile lock_account limit failed_login_attempts 3 password_lock_time 2; (lock_account规则名称 3是次数 2是锁定天数。红色字是固定语句)

sql>alter user scott profile lock_account; (把刚建的lock_account规则分配给scott 用户)

给账户(用户)解锁要用DBA用户来完成

sql>aliter user scott account unlock; (给scott用户解锁)

终止口令用DBA用户来完成

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

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

sql>create profile lock_account limit password_life_time10 password_grace_time2;(lock_account规则名称 10是天数 2是宽限期。红色字是固定语句)

sql>alter user tea profile lock_account (给tea用户赋予刚建立的lock_account规则)

口令历史

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

例子:

sql> create profile lock_account limit password_life_time 10 password_grace_time 2 password_reuser_time 10 (lock_account规则名称 10是每隔10天修改一次密码 2是宽限期。10是10天后旧密码可以重用,红色字是固定语句)

password_reuse_time //指定口令可重用时间即10天后就可以重用

2、分配给某个用户

alter user tea profile lock_account (把lock_account规则分配给tea)

删除profile里面的某个规则

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

sql>drop profiel lock_account 【cascade】(删除 lock_account规则,加cascade就会级联删除相关的所有东西)

Oracle 密码过期

概述:导致密码消失的原因:Oracle 11g中默认的DEFAULT概要文件中口令有效期PASSWORD_LIFE_TIME默认值为180天。

当以客户端登陆Oracle提示ORA-28002,则基本可以确定登陆帐号已过有效期,使用具有DBA权限的帐号重置该帐号密码即可。

解决方法:

以下步骤以具有DBA权限用户操作

1.查看口令失效用户的profile文件

SQL>SELECT username,profile FROM dba_users;

EM:服务器>用户,查看口令失效的用户对应的概要文件,这里假设为DEFAULT,下同。

2.查看对应的概要文件的口令有效期设置

SQL>SELECT * FROM dba_profiles WHERE profile='DEFAULT' AND

resource_name='PASSWORD_LIFE_TIME';

注:如果这段语句查不到,可以直接查询 dba_profiles表 SELECT * FROM dba_profiles EM:服务器>概要文件>选择刚刚查到的概要文件DEFAULT>查看,查看口令下面的有效期值。

3.将口令有效期默认值180天修改成“无限制”

SQL>ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;

EM:服务器>概要文件>选择刚刚查到的概要文件DEFAULT>编辑>口令,在有效期输入或选择你需要的值,保存。

注:该参数修改实时生效。

出于数据库安全性考虑,不建议将PASSWORD_LIFE_TIME值设置成UNLIMITED,即建议客户能够定期修改数据库用户口令。

在修改PASSWORD_LIFE_TIME值之前已经失效的用户,还是需要重新修改一次密码才能使用。SQL>alter user 用户名 identified by 密码;

将密码改为永久有效举例说明

假定我们所使用的数据库用户为test,密码为test123456

步骤一:登陆oracle所在的linux服务器(我们的oracle假设在linux服务器上),注意要用dba用户。

步骤二:执行'sqlplus / as sysdba'

步骤三:输入'alter profile default limit password_life_time unlimited;'并回车

步骤四:输入'alter user test identified by test123456;'

步骤五:输入'quit;'退出sqlplus。

步骤六:重启各个业务部件,一切OK。

需要注意的是,对于第四步,可能会失败,因为oracle有可能设置了修改密码时不能与历史密码重复的限制,我们可以先执行以下命令去掉限制,然后再执行第四步。虽然对于第四步而言设置前后密码没有改变,但却是必要的吗,实际测试中发现即使做了第三步处理,如果不执行第四步,jdbc连接数据时依然会连接失败。

alter profile default limit password_reuse_max unlimited;

alter profile default limit password_reuse_time unlimited;

在使用profile并想重复利用密码的时,需要满足如下条件

1)password_reuse_time和password_reuse_max都为unlimted的时候

可以随便重置

2)当指定password_reuse_time和password_reuse_max其中一个,另外一个unlimted的时候

密码永远无法重置

3)当同时指定password_reuse_time和password_reuse_max的时候

在满足password_reuse_max的时候,可以重置密码

在同时满足password_reuse_time和password_reuse_max的时候,可以重置密码

在满足password_reuse_time但从为更换过密码的时候,也就是password_reuse_max一次也没用的时候密码无法重置.

上面这种处理方案是修复现网问题的弥补性措施,根本的要在oralce安装的时候就去掉密码有效期的限制。

profile各字段介绍

PASSWORD_LIFE_TIME

设定口令的有效时间(天数),一旦超过这一时间,必须重新设口令。缺省为180天(11g,10gUNLIMITED).

PASSWORD_REUSE_TIME

许多系统不许用户重新启用过去用过的口令。该资源项设定了一个失效口令要经过多少天,用户才可以重新使用该口令。缺省为UNLIMITED.

PASSWORD_REUSE_MAX

重新启用一个先前用过的口令前必须对该口令进行重新设置的次数(重复用的次数)。PASSWORD_LOCK_TIME

设定帐户被锁定的天数(当登录失败达到FAILED_LOGIN_ATTEMPTS时)。

PASSWORD_GRACE_TIME

设定在口令失效前,给予的重新设该口令的宽限天。当口令失效之后回,在登录时会出现警告信息显示该天数。如果没有在宽限天内修改口令,口令将失效。

PASSWORD_VERITY_FUNCTION

该资源项允许调用一个PL/SQL 来验证口令。Oracle公司已提供该应用的脚本,但是只要愿意的话,用户可以制定自己的验证脚本。该参数的设定就是PL/SQL函数的名称。缺省为NULL.

参考网址

https://www.doczj.com/doc/ad7426234.html,/freeman1984/archive/2013/04/23/398301.html oracle 密码修改永久

https://www.doczj.com/doc/ad7426234.html,/yangy608/p/4054393.html oracle 密码修改永久

https://www.doczj.com/doc/ad7426234.html,/s/blog_490a0c99010103sx.html oracle 密码修改永久

四:oracle表的管理

表名和列的命名规则

1、必须以字母开头

2、长度不能超过30个字符

3、不能使用oracle的保留字

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

oracle支持的数据类型

字符类

char 定长最大2000个字符。

例子:char(10) ‘小韩’前四个字符放‘小韩’,后添6个空格补全如‘小韩’varchar2(20) 变长最大4000个字符。

例子:varchar2(10)‘小韩’ oracle分配四个字符。这样可以节省空间。

clob(character large object) 字符型大对象最大4G

char 查询的速度极快浪费空间,查询比较多的数据用。

varchar 节省空间

数字型

number范围 -10的38次方到 10的38次方

可以表示整数,也可以表示小数

number(5,2)

表示一位小数有5位有效数,2位小数

范围:-999.99到999.99

number(5)

表示一个5位整数

范围99999到-99999

日期类型

date 包含年月日和时分秒 oracle默认格式 1-1月-1999

timestamp 这是oracle9i对date数据类型的扩展。可以精确到毫秒。

图片

blob 二进制数据可以存放图片/声音 4G 一般来讲,在真实项目中是不会把图片和声音真的往数据库里存放,一般存放图片、视频的路径,如果安全需要比较高的话,则放入数据库。

一个字符等于多少字节?

或许你会说一个中文字符占2个字节,这是一定的?如何计算一个字符串的字节数?

解决方案

在oracle中一个字符特别是中文占几个字节是不同的。

比如我创立一个表create table test_ly(a varchar2(4),b nvarchar2(4))

你说a列能插入两个汉字吗?

错!最多能插入一个汉字加一个字母(或数字)。

这是为什么?因为一个汉字在a字段中占了3个字节,其他字符(比如数字或者字母或者英文标点符号)占1个字节,

你说b列最多能插入多少个汉字,2个?

错!b列最多能插入4个汉字,b列的一个汉字或者其他字符(比如数字或者字母或者英文标点符号)占2个字节。

由此可见,N开头的字段类型(比如NCHAR,NVARCHAR2)中,任何一个字符(包括一个汉字)占2个字节,统一的。

不以N开头的字段类型(比如CHAR,VARCHAR2)中,unicode字符(比如汉字)占3个字节,其他字符占1个字节。

如何求一个字符串占用的字符数和字节数?

Length 函数求得是占用字符数,lengthb或者vsize函数求得是占用字节数。

你说中华12 这个字符串占用了多少字符,字节?看sql返回值便清楚了。

select length('中华12') from dual --返回4,也就是占用4个字符

select lengthb('中华12') from dual --返回8,也就是占用8个字节,其中中华儿子各占3个字节,而12两个字符各占一个字节

select lengthb(N'中华1') from dual --返回6,这是将字符串转换成为unicode字符串后,每个字符占用2个字节,3个就是6个字节

select length(N'中华1') from dual --返回3,因为只有3个字符嘛。

字符串类型字段默认的长度是以字节为单位的,具体取决于参数nls_length_semantics 的值(使用show parameters可以看到这个参数的值),

默认是BYTE,也就是以字节为单位的,如果是CHAR则是以字符为单位的。表的某列可以使用字符为单位吗?当然可以,

比如这样创建即可:create table test_ly(a varchar2(4 char)) 这样a列就最多能保存4个字符,而不是4个字节了。

怎样创建表

建表

--学生表

create table student ( ---表名

xh number(4), --学号

xm varchar2(20), --姓名

sex char(2), --性别

birthday date, --出生日期

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

);

--班级表

CREATE TABLE class(

classId NUMBER(2),

cName VARCHAR2(40)

);

添加注释

-- 给表添加注释

comment on table XSXXB is '学生信息表';

-- 给字段添加注释

comment on column XSXXB.xh is '学号';

comment on column XSXXB.xm is '姓名';

comment on column XSXXB.sex is '性别';

comment on column XSXXB.birthday is '出生日期';

comment on column XSXXB.sal is '奖学金';

删除表

Drop table 表名

查看表和字段注释

查看xsxxb表注释

select * from user_tab_comments where table_name = 'XSXXB'; 查看所有表注释

select * from user_tab_comments

查看字段注释

Desc 表名

查看所有字段注释

select * from user_col_comments

详细分析:https://www.doczj.com/doc/ad7426234.html,/xusir/p/3214714.html

查看表结构及表字段注释

Desc 表名

修改表

添加一个字段

SQL>ALTER TABLE student add (classId NUMBER(2));

修改一个字段的长度

SQL>ALTER TABLE student MODIFY (xm VARCHAR2(30));

修改字段的类型/或是名字(不能有数据)不建议做

修改字段类型

SQL>ALTER TABLE student modify (xm CHAR(30));

修改字段名

SQL>alter table表名rename column旧的字段名to 新的字段名;

删除一个字段不建议做(删了之后,顺序就变了。加就没问题,因为是加在后面)

SQL>ALTER TABLE student DROP COLUMN sal;

修改表的名字很少有这种需求

SQL>RENAME student TO stu;

删除表

SQL>DROP TABLE student;

添加数据

给 student表添加数据

所有字段都插入

INSERT INTO student VALUES ('A001', '张三', '男', '01-5月-05', 10);

oracle中默认的日期格式‘dd-mon-yy’ dd日子(天) mon 月份 yy 2位的年‘09-6月-99’ 1999年6月9日注:在输入月份的时候必须打上“月”字

修改日期的默认格式(临时修改,数据库重启后仍为默认;如要修改需要修改注册表)ALTER SESSION SET NLS_DATE_FORMAT ='yyyy-mm-dd';

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

INSERT INTO student VALUES ('A002', 'MIKE', '男', '1905-05-06', 10);

使用 to_date函数

请大家思考:如何插入列带有日期的表,并按照年-月-日的格式插入?

Insert into emp

values (9998, 'xiaohong', 'MANAGER', 7782, to_date('1988-12- 12',

'yyyy-mm-dd'), 78.9, 55.33, 10);

注意:

insert into emp values (9998, 'xiaohong', 'MANAGER', 7782, '12-12月-1988',

78.9, 55.33, 10);

这句语句是可以成功运行的

查询日期

select sysdate from dual;

插入部分字段

INSERT INTO student(xh, xm, sex) VALUES ('A003', 'JOHN', '女');

插入空值

INSERT INTO student(xh, xm, sex, birthday) VALUES ('A004', 'MARTIN', '男', null); 问题来了,如果你要查询student表里birthday为null的记录,怎么写sql呢?

错误写法:select * from student where birthday = null;

正确写法:select * from student where birthday is null;

如果要查询birthday不为null,则应该这样写:

select * from student where birthday is not null;

修改数据

修改一个字段

修改学号为A001的同学性别改为女

UPDATE student SET sex = '女' WHERE xh = 'A001';

修改所有男生的奖学金减少一半

Update student set sal=sal/2 where sex=‘男’

修改多个字段

修改学号为A001的同学的性别为男出生日期为1984-04-01

UPDATE student SET sex = '男', birthday = '1984-04-01' WHERE xh = 'A001';

修改含有null值的数据

不要用 = null 而是用 is null;

SELECT * FROM student WHERE birthday IS null;

删除数据

DELETE FROM student;

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

DROP TABLE student; --删除表的结构和数据;

delete from student WHERE xh = 'A001'; --删除一条记录;

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

恢复删除数据

Delete 的数据可以恢复。

savepoint a; --创建保存点 a

DELETE FROM student;

rollback to a; --恢复到保存点 a

rollback -- 取消所有保存点回到最初

可以创建多个保存点,一个有经验的DBA,在确保完成无误的情况下要定期创建还原点,注意:这个回退事务,必须是没有commit前使用的;如果事务提交了,那么无论你刚才做了多少个保存点,都统统没有。

如果没有手动执行commit,而是exit了,那么会自动提交

五:oracle表查询(1)

oracle表基本查询

介绍

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

Clear 清屏命令

公司员工表常用列名

emp 雇员表

clerk 普员工

salesman 销售

manager 经理

analyst 分析师

president 总裁

mgr 上级的编号

hiredate 入职时间

sal 月工资

comm 奖金

deptno 部门

dept部门表

deptno 部门编号

accounting 财务部

research 研发部

operations 业务部

loc 部门所在地点

salgrade 工资级别

grade 级别

losal 最低工资

hisal 最高工资

简单的查询语句

查看表结构

DESC emp;

查询列的语句

查询所有列

SELECT * FROM dept;

查询某个列

Select ename from emp;

查询多个列

Select ename,sal,job,deptno from emp;

切忌动不动就用select *

SET TIMING ON; 打开显示操作时间的开关,显示查询所用的时间。

CREATE TABLE users(userId VARCHAR2(10), uName VARCHAR2 (20), uPassw VARCHAR2(30)); INSERT INTO users VALUES('a0001', '啊啊啊啊', 'aaaaaaaaaaaaaaaaaaaaaaa');

--从自己复制,加大数据量大概几万行就可以了可以用来测试sql语句执行效率INSERT INTO users (userId,UNAME,UPASSW) SELECT * FROM users;

SELECT COUNT(*) FROM users; 统计一张表共有多少行数

如何取消重复行DISTINCT

SELECT DISTINCT deptno, job FROM emp;

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

SELECT deptno,job,sal FROM emp WHERE ename = 'SMITH';

注意:oracle对‘内容’的大小写是区分的,所以ename='SMITH'和ename='smith'是不同的

使用算术表达式 nvl null

问题:如何显示每个雇员的年工资?

Select sal*12,eanme from emp;

查询时使用别名

Select sal*12 "年工资",ename "姓名" FROM emp;

如何处理null值,使用nvl函数来处理

查询年工资,姓名,奖金,(年工资包含了一年所有的奖金如果奖金中有null值,则查询不全,为避免空值则需要使用nvl函数来处理)。

SELECT sal*12+nvl(comm, 0)*12 "年工资" , ename, comm FROM emp;

使用where子句

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

SELECT * FROM emp WHERE sal > 3000;

问题:如何查找1982.1.1后入职的员工?

SELECT ename,hiredate FROM emp WHERE hiredate >'1-1月-1982';

问题:如何显示工资在2000到3000的员工?

SELECT ename,sal FROM emp WHERE sal >=2000 AND sal <= 3000;

如何连接字符串(||)

SELECT ename|| ' is a ' || job FROM emp;

如何使用like操作符

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

问题:如何显示首字符为S的员工姓名和工资?

SELECT ename,sal FROM emp WHERE ename like 'S%';

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

SELECT ename,sal FROM emp WHERE ename like '__O%';

在where条件中使用in

问题:如何显示empno为7844, 7839,123,456 的雇员情况?

SELECT * FROM emp WHERE empno in (7844, 7839,123,456);

使用is null的操作符

问题:如何显示没有上级的雇员的情况?

错误写法:select * from emp where mgr = '';

正确写法:SELECT * FROM emp WHERE mgr is null;

六:oracle表查询(2)

使用逻辑操作符号

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

SELECT * FROM emp WHERE(sal >500 or job = 'MANAGER')and ename LIKE 'J%';

使用order by 字句默认asc 升序 desc降序

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

SELECT * FROM emp ORDER by sal;

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

SELECT * FROM emp ORDER by deptno asc, sal DESC;

使用列的别名排序

问题:按年薪排序

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

别名需要使用“”号圈中,英文不需要“”号

分页查询

等学了子查询再说吧。。。。。。。。

Clear 清屏命令

oracle表复杂查询

说明

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

数据分组

max(最大),min(最小), avg(平均), sum(总和), count(计数)

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

SELECT MAX(sal),min(sal) FROM emp ;

最高工资那个人是谁?

错误写法:select ename, sal from emp where sal=max(sal);

正确写法:select ename, sal from emp where sal=(select max(sal) from emp);

注意:select ename, max(sal) from emp;这语句执行的时候会报错,说ORA-00937:非单组分组函数。因为max是分组函数,而ename不是分组函数.......

但是select min(sal), max(sal) from emp;这句是可以执行的。因为min和max都是分组函数,就是说:如果列里面有一个分组函数,其它的都必须是分组函数,否则就出错。这是语法规定的

问题:如何显示所有员工的平均工资和工资总和?

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

问题:如何计算总共有多少员工

Select count(ename) from emp;

Select count(*) from emp;

扩展要求:

查询最高工资员工的名字,工作岗位

SELECT ename, job, sal FROM emp where sal = (SELECT MAX(sal) FROM emp);

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

SELECT * FROM emp where sal > (SELECT AVG(sal) FROM emp);

把所有低于平均工资的员工工资叫100元

Update emp set sal=sal+100 where sal<(select avg(sal) from emp);

group by 和 having子句

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

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

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

SELECT AVG(sal), MAX(sal), deptno FROM emp GROUP by deptno;

(注意:这里暗藏了一点,如果你要分组查询的话,分组的字段deptno一定要出现在查询的列表里面,否则会报错。因为分组的字段都不出现的话,就没办法分组了)

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

SELECT min(sal), AVG(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 分组函数只能出现在选择列表、having、order by子句中(不能出现在where中)

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 orader by avg(sal);

3 在选择列中如果有列、表达式和分组函数,那么这些列和表达式必须有一个出现在group by 子句中,否则就会出错。

如SELECT deptno, AVG(sal), MAX(sal)FROM emp GROUP by deptno HAVING AVG(sal) < 2000; 这里deptno就一定要出现在group by 中

多表查询

说明

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

免费资源

免费资源 由于公众号限制,不准许插入外来链接,所以只能麻烦大家手动的复制粘贴了(ps 电脑上打开此链接,操作更方便)。此页面已不在维护,最新更新的免费资源会通过微信公众号发布并同步在菜鸟要飞网站 (https://www.doczj.com/doc/ad7426234.html,)。请大家及时关注本号信息。小编只能帮到这了!!119、Python基础教程视频集合2 链接:https://www.doczj.com/doc/ad7426234.html,/s/1mgYA5iK 密码:密码: icnh 118、黑客技术- 黑盾网安VIP 网站渗透基础类学习链接:https://www.doczj.com/doc/ad7426234.html,/s/1hqfIfTa 117、黑客技术- 风云网络信息安全渗透测试课程链接: https://www.doczj.com/doc/ad7426234.html,/s/1kTq1wV1 116、黑客技术- 半斤八两逆向培训课程(27课全)part2 链接: https://www.doczj.com/doc/ad7426234.html,/s/1pJDZLNl 115、黑客技术- 半斤八两逆向培训课程(27课全)part1 链接: https://www.doczj.com/doc/ad7426234.html,/s/1dm60A 114、黑客技术- 黑盾网安VIP 网站渗透基础类学习链接: https://www.doczj.com/doc/ad7426234.html,/s/1mg8Gjzy 113、黑客技术- 饭客黑客之免杀VIP教程链接: https://www.doczj.com/doc/ad7426234.html,/s/1pJDtNPT 112、黑客技术-Show me Why 超强脱壳教程链接:

https://www.doczj.com/doc/ad7426234.html,/s/1jGxoV8E 111、黑客技术-RFire 系列免杀教程链接:https://www.doczj.com/doc/ad7426234.html,/s/1i35y6NV 110、黑客技术-burpsuite 系列视频教程链接: https://www.doczj.com/doc/ad7426234.html,/s/1o6Olj9g 109、黑客技术-365免杀学习基地VIP源码免杀教程链接: https://www.doczj.com/doc/ad7426234.html,/s/1jG8Ksjc 108、数据结构与算法,算法导论,微积分,数学组合链接: https://www.doczj.com/doc/ad7426234.html,/s?__biz=MzA3ODg3OTk4OA==∣= 207452636&idx=1&sn=585b3a86d9cc976c66341fe89e86 91f8#rd 102、python就业视频教程链接: https://www.doczj.com/doc/ad7426234.html,/s?__biz=MzA3ODg3OTk4OA==∣= 207219220&idx=2&sn=657182abd8f6b3fd98b13609a79af 493#rd 100、HTML5 优质视频教程集锦链接:https://www.doczj.com/doc/ad7426234.html,/s?__biz=MzA3ODg3OTk4OA==∣= 207168402&idx=1&sn=4ff0c63af6d0d4df3abc7a88cdf43c a1#rd 98、微信公众平台开发教程链接: https://www.doczj.com/doc/ad7426234.html,/s?__biz=MzA3ODg3OTk4OA==∣= 207067923&idx=1&sn=de3d25f201c7b75ab01805208ef8c 265#rd 97、Android5.0新特性链接: https://www.doczj.com/doc/ad7426234.html,/s?__biz=MzA3ODg3OTk4OA==∣= 207035206&idx=1&sn=7c442b97a2aa6b1d140718b31e15 1e76#rd 94、html5技术课程(38课)链接:

(Oracle数据库管理)玩转实战教程学习笔记最全版

(O管理)玩转实战教程(韩顺平)学习笔记

韩顺平—玩转oracle视频教程笔记 一:Oracle认证,与其它数据库比较,安装 oracle的卸载 1.停止所有与ORACLE相关的服务。 2. 使用OUI(Oracle Universal Installer)卸载Oracle软件。 “开始”->“程序”->“Oracle-OraDb110g_home1|Oracle installation product|Universal installer. 3.删除注册表内容。运行regedit命令,删除下面内容:HKEY_LOCAL_MACHINE|SOFTWARE|ORACLE注册表键,删除此键。 HKEY_LOCAL_MACHINE|SYSTEM|CurrentControlSet|Services,删除Services键下所有以oracle为首的键。 HKEY_LOCAL_MACHINE|SYSTEM|CurrentControlSet|Services|Eventlog|Application,删除此键下所有以oracle为首的键。 HKEY_CLASSES_ROOT,删除此键下所有以Ora,Oracle,Orcl,EnumOra 为前缀的键。 HKEY_CURRENT_USER|Software| Microsoft|Windows|CurrentVersion|Explorer|MenuOrder|Start Menu|Programs,删除此键下所有以oracle为首的键。 HKEY_LOCAL_MACHINE|SOFTWARE|ODBC|ODBCINST.INI注册表键,删除了

韩顺平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.doczj.com/doc/ad7426234.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)区分大小写

jquery学习笔记-韩顺平

1,Jquery是一个javascript框架或者叫做javascript库; 2,用Ajax我们可以给服务器发送一个请求,服务器可以给我回送一个请求; 3,出现javascript框架的根本原因就是为了提高开发者的开发效率; 4,jquery是一个轻量级的js库(压缩后只有21K),这是其他的js库所不及的,它兼容CSS3,还兼容各种浏览器; 5,JQuery是一个快速的,简洁的javascript库,使用户能更方便的处理HTML document,events,实现动画效果,并且方便的为网站提供AJAX交互; 6,JQuery还有一个比较大的优势是,它的文档说明很全,而且各种应用也说得很详细,同时还有许多成熟的插件可供选择。 7,jquery能够使用户的html页保持代码和html内容的分离,也就是说,不用再在html里面插入一堆js来调用命令了,只需定义id即可; 8,所谓的库就是提供一些现成的方法供你去调用; 9,当前流行的javascript库有: Jquery ,MooTools,Prototype,Dojo,YUI,EXTJS,DWR[主要是运行在服务器上的]; 10,$(document) //---这个表示一个jquery对象; 11,如果使用jquery,则需要引入jquery库 12,jquery对象就是对dom对象的一系列包装,它包装完成后,就可以使用jquery对象提供的方法来进行操作; 13,在使用jquery开发中,有两种对象,1,jquery对象,2,dom对象,如果是jquery对象则只能使用jquery库提供的方法,如果是dom对象,则只能使用js本身提供的方法; 14,分析jquery库文件的运行原理: New Document 案例:1 需求:打开网页后,显示hello !

New Document 问题: ?js的位置可以随意放 ?js必须使用 ?在一个html文件中(JSP/PHP/https://www.doczj.com/doc/ad7426234.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第三讲

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)

韩顺平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核心技术

韩顺平老师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 显示和设置环境变量

韩顺平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.doczj.com/doc/ad7426234.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

2010.08.09.韩顺平.玩转oralce.plsql

第一部分pl/sql初步介绍 1、期望目标 1)掌握oracle的pl/sql概念 2)掌握pl/sql编程技术(包括编写过程、函数、触发器…) 2、pl/sql的介绍-pl/sql是什么? 1)pl/sql(procedural language/sql)是oracle在标准的sql语言上的扩展。pl/sql不仅允许嵌入sql语言,还可以定义变量和常量,允许使用条件语句和循环语句,允许使用例外处理各种错误,这样使得它的功能变得更加强大。 2)了解过程,函数,触发器 -过程、函数、触发器是pl/sql编写,相当于存储在oracle数据库中的对象 -过程、函数、触发器是在oracle中 -pl/sql是非常强大的数据库过程语言,使用pl/sql能够写变量,做判断;可以简化复杂度;减少网络的传销,增加程序的模块化编程,提高运行性能,使速度更加的快捷 -过程、函数可以在Java程序中调用 3、pl/sql的介绍-为什么学? 1)学习必要性 -提高应用程序的运行性能 -模块化的设计思想【分页的过程、订单的过程、转账的过程】 -减少网络传输量 -提高安全性 2)弊端 -移植性不好,例如从oracle数据库移植到DB2,则全部要重写 3)pl/sql的介绍-用什么编写pl/sql -sqlplus开发工具 -pl/sql developer开发工具 4)案例 -编写一个存储过程,该过程可以向某表中添加记录 -- 1.创建一个简单的表 create table gdsc (id int,name varchar2(20),passwd varchar(20));

-- 2.创建过程 create or replace procedure sp_gdsc_01 is begin --执行部分 insert into gdsc values(1,'陈学敏','mendychen'); end; -- replace:表示如果有sp_gdsc_01,就替换 -- 3.如何查看错误信息 show error; -- 如何调用该过程 -- 1.exec 过程名(参数值1,参数值2...); -- 2.call 过程名(参数值1,参数值2...); 第二部分基础 1、介绍 开发人员使用pl/sql编写应用模块时,不仅需要掌握sql语句的编写方法,还要掌握pl/sql 语句及语法规则。pl/sql编程可以使用变量和逻辑控制语句,从而可以编写非常有用的功能模块。比如:分页存储过程模块、订单处理存储过程模块、转账存储过程模块等。而且如果使用pl/sql编程,我们可以轻松的完成非常复杂的查询要求。 2、简单分类 |----------过程(存储过程) | |----------函数 块(编程)--------- | |----------触发器 | |----------包 3、编写规范 1)注释

相关主题
文本预览
相关文档 最新文档