韩顺平—玩转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.wendangku.net/doc/ab7426234.html,/freeman1984/archive/2013/04/23/398301.html oracle 密码修改永久
https://www.wendangku.net/doc/ab7426234.html,/yangy608/p/4054393.html oracle 密码修改永久
https://www.wendangku.net/doc/ab7426234.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.wendangku.net/doc/ab7426234.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.wendangku.net/doc/ab7426234.html,)。请大家及时关注本号信息。小编只能帮到这了!!119、Python基础教程视频集合2 链接:https://www.wendangku.net/doc/ab7426234.html,/s/1mgYA5iK 密码:密码: icnh 118、黑客技术- 黑盾网安VIP 网站渗透基础类学习链接:https://www.wendangku.net/doc/ab7426234.html,/s/1hqfIfTa 117、黑客技术- 风云网络信息安全渗透测试课程链接: https://www.wendangku.net/doc/ab7426234.html,/s/1kTq1wV1 116、黑客技术- 半斤八两逆向培训课程(27课全)part2 链接: https://www.wendangku.net/doc/ab7426234.html,/s/1pJDZLNl 115、黑客技术- 半斤八两逆向培训课程(27课全)part1 链接: https://www.wendangku.net/doc/ab7426234.html,/s/1dm60A 114、黑客技术- 黑盾网安VIP 网站渗透基础类学习链接: https://www.wendangku.net/doc/ab7426234.html,/s/1mg8Gjzy 113、黑客技术- 饭客黑客之免杀VIP教程链接: https://www.wendangku.net/doc/ab7426234.html,/s/1pJDtNPT 112、黑客技术-Show me Why 超强脱壳教程链接:
https://www.wendangku.net/doc/ab7426234.html,/s/1jGxoV8E 111、黑客技术-RFire 系列免杀教程链接:https://www.wendangku.net/doc/ab7426234.html,/s/1i35y6NV 110、黑客技术-burpsuite 系列视频教程链接: https://www.wendangku.net/doc/ab7426234.html,/s/1o6Olj9g 109、黑客技术-365免杀学习基地VIP源码免杀教程链接: https://www.wendangku.net/doc/ab7426234.html,/s/1jG8Ksjc 108、数据结构与算法,算法导论,微积分,数学组合链接: https://www.wendangku.net/doc/ab7426234.html,/s?__biz=MzA3ODg3OTk4OA==∣= 207452636&idx=1&sn=585b3a86d9cc976c66341fe89e86 91f8#rd 102、python就业视频教程链接: https://www.wendangku.net/doc/ab7426234.html,/s?__biz=MzA3ODg3OTk4OA==∣= 207219220&idx=2&sn=657182abd8f6b3fd98b13609a79af 493#rd 100、HTML5 优质视频教程集锦链接:https://www.wendangku.net/doc/ab7426234.html,/s?__biz=MzA3ODg3OTk4OA==∣= 207168402&idx=1&sn=4ff0c63af6d0d4df3abc7a88cdf43c a1#rd 98、微信公众平台开发教程链接: https://www.wendangku.net/doc/ab7426234.html,/s?__biz=MzA3ODg3OTk4OA==∣= 207067923&idx=1&sn=de3d25f201c7b75ab01805208ef8c 265#rd 97、Android5.0新特性链接: https://www.wendangku.net/doc/ab7426234.html,/s?__biz=MzA3ODg3OTk4OA==∣= 207035206&idx=1&sn=7c442b97a2aa6b1d140718b31e15 1e76#rd 94、html5技术课程(38课)链接:
(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有关知识点 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表格
--用于说一小格 |