您的位置:首页 > 数据库 > Oracle

Oracle基本操作

2013-11-06 11:53 141 查看
用到了scott和hr用户。

在命令行输入sqlplus hr/hr可以登录hr用户,其中用户名为hr,密码为hr。

学习目的:

作为一个Java工程师,应该掌握的数据库的知识。第四天是DBA的知识。

基本查询:

(1)进入到sqlplusscott/tiger。

--spool可以将输入的所有命令保存到硬盘。

spool c:\基本操作.txt

--清屏

host cls

--当前用户

show user

--切换用户

conn hr/hr

--当前用户下的表,tab可以理解为数据字典,包含了当前用户表的信息。

select * from tab;

--查看表结构

desc emp;

--查询所有员工的所有信息

select * from emp;

--设置行宽,120表示这一行有120个字符,空格也算

set linesize 120

--设置列宽,col表示column,ename表示ename列,for是format的缩写,a表示是字符串,8表示占8位。

col ename for a8

--为数值型列设置列宽,为sal列设置,for是format缩写,用9表示一位数字,9999表示四位数字

col sal for 9999

--“/”表示执行上一条sql语句

/

--根据列名查询

select empno,ename,job,mgr,hiredate,sal,comm.,deptnofrom emp;

--查询员工号姓名月薪

select empno,ename,sal from emp;

--员工号姓名月薪年薪

select empno,ename,sal,sal*12 from emp;

--员工号姓名月薪年薪奖金年收入(年薪+奖金=年收入)

select empno,ename,sal,sal*12,comm.,sal*12+commfrom emp;

--设置每页显示数据数,设置每页显示20条数据。

set pagesize 20

/*

在计算年收入的时候,如果没有奖金,也就是奖金为null,那么年收入也无法显示,

但是正常情况下,如果没有奖金,年收入应该等于年薪。

这涉及到了null的问题,

1, 包含null的表达式都为null

2, 在Oracle中null != null

在计算年收入的式子中:sal*12+comm,如果comm为null,则整个式子的值就是null。

如何解决呢?奖金为null,就是说奖金是0,将null视为0,用到Oracle的滤空函数:

有两个

Nvl(a,b)当a的值不为null的时候返回a的值,如果是null就返回b。

Nvl2(a,b,c),

*/

--修改查询语句,虑空

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

--什么是null!= null呢?查询奖金为null的员工

select * from emp where comm=null;

/*

上面的这句查询是错误的,comm中有null,但是无法查询,所以null!= null

判断一个值是否为null,使用 is null , is not null

*/

select * from emp where comm is null;

select * from emp where comm is not null;

/*

对于一个系统来讲,数据是核心,如果数据错了,程序写的再对,结果都是错的。

所以应用系统中数据库才是核心。Javaweb程序都是围绕数据库来开发的。

*/

--别名,注意,可以通过as的方式,可以直接双引号,也可以直接写别名,通常用双引号的方式。

select empno as “员工号”,ename “姓名”,sal 月薪,sal*12 年薪,comm 奖金,sal*12+nvl(comm.,0)年收入 from emp;

--改错,from写成form

select * form emp;

--c命令,change,SQL>
后面的光标默认指向上一条SQL语句的第一行。所以我们只敲一个1,就定位到了第一行中。

1

--会显示1*formemp

c /form/from

/

--使用ed命令edit,输入ed回车会弹出系统默认编辑器,并将上一条SQL语句填充进去。在里面改就OK了

--改完之后保存,关闭,回到命令行/执行上一条SQL即可。

ed

/

/*

as “员工号”这个别名和”姓名”这个别名有区别么?没有。

“姓名”这个别名和月薪有区别么?有,如果月
薪的话会报错。也就是说,别名中如果有关键字或特殊符号,就必须加上双引号。

*/

--distinct,去掉重复记录,如果是多列,则作用与后面所有的列,只有当这些列都一样的时候才会被认为是重复的,

--才会被去掉。

select DISTINCT deptno from emp;

select DISTINCT deptno,job from emp;

/*

SQL语言大小写不敏感,SQL可以写在一样或者多行,关键字不能被缩写也不能分行,各字句一般要分行写,使用缩进提高语句的可读性。MySQL中大小写不敏感,可以说是Mysql的一个bug。

*/

--空值null是无效的,未指定的,未知的或不可预知的值,空值不是空格或0。

--连接符,concat,在mysql中,直接selectconcat(‘hello’,’
world’);就可以了,但是Oracle不可以。

/*

因为Oracle遵循一个标准,叫做SQL99,是ANSI国际标准组织在1999年针对SQL语句发布的一个标准,我们把这个标准叫做SQL99。在这个标准中,定义了select语句必须要有from。MySQL并没有严格遵循这个标准。

*/

--在Oracle中,当你要做一个操作,这个操作跟任何表都没有关系的时候,Oracle提供了一张表,叫做dual表。

--dual表也叫做伪表。这张表没有什么用途,只是为了满足select… from …
这个语法。是管理员提供的。

select concat(‘Hello’,’World’) from dual;

select 3+2 from dual;

--连接符 || ,与Java中的+号是一样的。

select ‘Hello’||’ World’ 一列 from dual;

--查询员工信息:***的薪水是***

select ename||’的薪水是’||sal 信息 from emp;

/*

字符串可以是select列表中的一个字符,数字,日期,日期和字符只能在单引号中出现,每当返回一行时,字符串被输出一次。

*/

/*

SQL和SQL*Plus

SQL是一个语言,

SQL*Plus是Oracle提供给我们的一个工具,命令行打开后显示的标题就是sqlplus。Sqlplus有自己的命令。

Set c ed col desc都是sqlplus命令。

如何判断一个命令是sql命令还是sqlplus命令呢?最大的一个区别就是SQL语句关键字不能缩写,而SQL*Plus关键字可以缩写。以下是SQL和SQL*Plus的区别:






在Oracle服务中,最占资源的,启动最慢的是OracleServiceORCL。推荐改为手动开启。

除此之外,还有一个iSQL*Plus,他对应的服务是:OracleOraDb10g_home1iSQL*Plus。这个服务类似于Tomcat。其端口号是5560,开启这个服务后,在浏览器中输入localhost:5560/sqlplus/可以访问这个服务。iSQL*Plus其实就是SQL*Plus命令行工具的Web网页版,可以通过网页完成数据库的操作。

服务OracleDBConsoleorcl,是一个基于Web的图形化工具,通过他我们可以管理Oracle数据库。在浏览器中访问localhost:1158/em/即可。在Oracle10中,每次退出的时候都会弹出这个浏览器窗口。

*/

--保存上一条sql命令到硬盘上。保存到c盘下的a.sql文件中。

save c:\a.sql

--加载保存的硬盘的脚本,@是加载并执行,load是加载,但不执行。

@c:\a.sql

--在Oracle11g中没有iSQL*Plus工具,替代者是SQL
Developer。为啥替代呢?因为iSQL*Plus是Web工具,可以通过

--抓包工具抓取数据,会很危险。https协议可以加密传输数据。

--将之前的spool基本查询.txt
到现在的所有的sql操作都保存到硬盘上,通过spool off结束。

spooloff
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: