Oracle基本操作

来源:互联网 发布:linux启动stage1.5 编辑:程序博客网 时间:2024/06/02 13:05

用到了scotthr用户。

在命令行输入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表示columnename表示ename列,forformat的缩写,a表示是字符串,8表示占8位。

col ename for a8

--为数值型列设置列宽,为sal列设置,forformat缩写,用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,  Oraclenull != null

在计算年收入的式子中:sal*12+comm,如果commnull,则整个式子的值就是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命令,changeSQL>后面的光标默认指向上一条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语句必须要有fromMySQL并没有严格遵循这个标准。

*/

--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列表中的一个字符,数字,日期,日期和字符只能在单引号中出现,每当返回一行时,字符串被输出一次。

*/

 

/*

SQLSQL*Plus

SQL是一个语言,

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

Set c ed col desc都是sqlplus命令。

如何判断一个命令是sql命令还是sqlplus命令呢?最大的一个区别就是SQL语句关键字不能缩写,而SQL*Plus关键字可以缩写。以下是SQLSQL*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*PlusWeb工具,可以通过

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

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

spooloff
原创粉丝点击