当前位置: 移动技术网 > IT编程>数据库>Oracle > oracle学习笔记

oracle学习笔记

2018年03月21日  | 移动技术网IT编程  | 我要评论

废旧金属回收价格,给个电子邮件地址,重庆房价走势2013

oracle学习笔记。最近在学习oracle,记录下一些有关oracle的知识点主要是sql语句,在这分享给大家。

一.Sqlplus命令

1、内容

Oracle安装完成之后会自动提供一个sqlpuls命令,直接运行即可。随后要求输入用户名和密码,密码不回显。

除了以上方式之外,也可以直接运行cmd,输入sqlpul命令.sqlpuls scott/tiger

1.查询语句:

select * from emp;

执行完成后发现显示的格式比较乱,混乱的原因是因为此时没有设置环境。

(1)设置每行显示的数据长度:set linesize 300;此种方法要收到窗口大小的控制。

(2)设备每页显示的条数 set pagesize 30;

(3)设置列占位置: col ename for a10;

这两个指令称为格式化指令。

现在使用的windows操作系统,但是orcale执行的时候是没有图像界面的,所有一般这样的情况下想编写程序代码,那么必须启动本地的记事本程序。

启动方法:

命令:“ed 文件名称”(如果不写后缀,默认的后缀就是.slq),输入: ed mldn,如果电脑中没有此文件会弹出一下询问框。

 

 

打开记事本之后,就相当于进入到了一种程序阻塞状态,必须等待记事本关闭后才成执行。

随后要想执行文件中的命令,那么使用“@文件名称”(默认找到.sql的文件)

在整个oracle中提供了四个用户,那么可以在sqlplus中切换用户,切换的语法:

Conn 用户名/密码[as sysdba]

如果现在使用的是sys用户登录,那么必须协商“as sysdba”,否则无法登录。

范例:使用system登录。

conn system/manager;

范例:使用sys登录。

Sys/change_on_install as sysdba;

之前执行了查询emp表数据的操作,现在在sys用户下,执行同样的命令。

Select * from emp;

SQL> select * from emp;

select * from emp;

第 1 行出现错误:

ORA-00942: 表或视图不存在

出现表或试图不存在的错误,因为emp表属于scott用户,严格来讲emp表的名称是“模式名称.表名称”(后来随着发展,模块名称季候等同于用户名,所以emp表的完整名称是“用户名.表名称”,即:scott.emp).

所以查询需要 select * from scott.emp;

在sqlplus命令里,除了可以使用oracle自己定义的命令之外,也可以利用host命令调用本机的操作系统命令。

范例:调用echo命令。

Echo helloworld;

Host echo helloworld;

范例:调用copy命令。

Copy源文件路径 拷贝文件路径

Host Copy源文件路径 拷贝文件路径

2、总结

1.格式化命令:

a) 设置每行的长度: set linesize 长度;

b) 设置每页的长度: set pagesize长度;

2.切换用户:

a) Conn 用户名/密码[as sysdba],如果是sys用户一定要写上sysdba

3.调用本机命令:host作为前缀。

二、Sql简介&数据表分析

1、本次知识点

1.认识一下sql的介绍

2.掌握scott用户的表结构

2、内容

2.1、sql简介

Sql指的是结构化查询语言。在世界上80年代的时候基本上存在80多种数据库,每一种数据库都有自己的一套操作命令。

在70年代末的时候IBM开发出最牛的sql标准,而oracle是世界上第一个支持sql语法的数据库。后来发展到今天,基本上所有的关系型数据库都支持sql语法了。

即:如果你本身擅长使用DB2数据库,那我们即可以很轻松的上手oracle(支持亿条数据)、mysql(支持400-500万条数据)、sqlserver数据库(支持8千万条数据);

Sql语句没有这么复杂: select 、from、where、group by、having 、insert、update、delete、create、drop、alter、crant、revoke、order by

严格来讲sql会分为三种类型

1.DML(数据操作语言,开发中使用的部分):主要指的是数据库的查询和更新操作

2.DDL(数据定义语言,开发前的设计):主要指数据对象的创建(表、用户),例如:create、drop、alter,这一部分操作需要使用到相关的设计范式。

3.Dcl(数据库控制语言,系统人员的工作):主要是进行权限的管理操作(需要结合用户来观察),此部分会用DBA负责。

2.2、scott用户表的结构

Scott用户一共有四张表结构

命令一:查询一个用户下的所有数据表;

Select * from tab;

小计:显示当前登录用户:show user

命令:查询一个表的结构

Desc 表名称;

范例:desc dept;

2.3、简单查询

2.3.1 内容

范例:查询emp表中的全部记录

如果是全部记录指的就是所有的行和列的数据。简单查询是不能控制数据行列,如果是查询全部列,那么就使用通配符“*”完成。

Select * From emp;

范例:查询每个雇员的编号、姓名、职位、工资

此时不在表示查询全部的数据列,只表示查询几个固定的数据列

Select empno,ename,job sal from emp;

通过以上的两个查询,就可以发现,所谓的简单查询就是查询所有记录。

范例:查询所有的职位信息

Select job from emp;

此时确实是查询出来所有job列的内容,开始里面发现有重复数据,如果要想去除掉重复信息,可以使用“DISTINCT”完成,此选项只能出现在select字句后面

范例:消除掉重 复数据

Select distIfnct job from emp;

此时的确消除掉了重复的内容,但需要说明的是,如果查询的数据是多个列的时候才可以消除。

范例:观察消除的问题

Select distinct empno,job from emp;

只有在多个列都重复的时候才会消除,一个列重复不会消除

除了进行简单的查询之外,也可以针对于查询的列的返回结构进行四则运算

范例:查询每个雇员的编号、姓名、基本年薪

Select empno,ename,sal*12 from emp;

但是这个时候发现查询出来的结果列上有一些标记不清楚,所以为了改善显示效果,可以使用别名定义

范例:定义别名

Select empno,ename,sal*12 incom from emp;

但是对于别名有一点说明,不建议使用中文

范例:要求显示出每个雇员的编号、姓名、基本年薪(每年可以领取15个月的工资,100元车补贴、100元的电话补贴,每年还有5个月的高温补贴200元)

Select empno,ename,(sal*15+(200+100+100)*12+200*5) incom from emp;

如果执行的是四则运算的部分,那么依然采用先乘除后加减的操作形式完成

在使用select 查询数据的时候,除了查询列实际上也可以设置一些常量,对于常量也有如下的三点说明:

1.如果常量是字符串,则要求使用“‘”声明,例如‘hello‘

2.如果常量是数字,则直接编写,例如10

3.如果常量是日期,则按照日期格式编写,使用“日-月-年”例如17-12月-80

范例:直接查询常量

Select “雇员”,empno,ename from emp;

在进行简单查询操作里面,如果有需要也可以在select 字句里面使用“||” 连接查询结果.

范例:观察连接效果

Select empno||ename from emp;

现在相当于将empno 与ename连个列的内容合并为一个列了。

范例:转换格式

效果:雇员编号:7369,姓名:smith,收入:800

Select ‘雇员编号:’ || empno||’,姓名:’|| ename || ‘,收入:’ || sal from emp;

加别名:

Select ‘雇员编号:’ || empno||’,姓名:’|| ename || ‘,收入:’ || sal info from emp;

在select 字句中出现的任何字符串都要使用“‘”声明,而别名不需要。

2.3.2 总结

1.简单查询是将一张数据表中的所有数据行的内容都显示出来。

2.在查询语句中先执行from 字句确定数据来源(此时实际上是所有行和列的数据),而后利用select字句控制显示的数据列。

3.如果出现数据重复,可以使用distinct来消除掉重复的数据行显示。

4.Select 字句可以进行四则运算。

5.Sellect字句可以直接输出常量内容,但是对于字符串使用“’”、数字直接编写,日期按照字符串格式。

6.“||”负责进行输出的内容链接,但是需要注意的是,一般此类的操作很少直接在查询中出现。

2.4、限定查询(重点)

Sql变为如下格式:

【3控制要显示的数据列】select[DISTINCT] *| 列名称[别名],列名称[别名]...

【1确定数据来源】FROM 表名称[别名]

【2确定满足条件的数据行】[WEHERE 过滤条件(s)]

Select决定数据列,where决定数据行

如果想实现限定查询,那么需要掌握一系列的限定查询的符号,有如几种:

·关系运算符:>、<、>=、<=、<>(!=);

·逻辑运算符:AND 、OR、NOT;

·范围运算符:BEETWEEN...AND;

·谓词运算符:IN 、NOTIN;

·空判断:IS NULL、IS NOT NULL;

·模糊查询:LIKE

2.4.1 关系运算符

关系运算符号主要是进行大小关系比较操作使用的。

范例:要求查询出所有基本工资高于1500的雇员信息

Select * from emp where sal>1500;

范例:查询smith的完整信息

Select * from emp where ename=’SMITH’

在oracle数据库之中,所欲的数据是需要区分大小写关系的。

范例:查询工资是500的雇员信息

Select * from emp where sal=’5000’

发现“=”可以在数字上使用,也可以在字符串上使用,在oracle之中为了方便开发所有的运算符不区分类型,而直接使用。

范例:查询职位不是销售人员的雇员编号、姓名、职位

Select empno,ename,job from emp where job!=’SALESMAN’;

Select empno,ename,job from emp where job<>’SALESMAN’;

所有的过滤都是采用条件的形式进行过滤。

2.4.2 逻辑运算符

如果说现在多个条件要进行连接,那么就需要根据要求选择是与连接还是或连接。

·与连接:所有的判断条件都要满足;

·或连接:若干个条件有一个满足即可;

范例:查询出工资范围在1500~3000的员工

Select * from emp where sal>=1500 and sal<=3000;

 

范例:查询工资大于2000或者职位是办事员的所有雇员信息。

Select * from emp where sal>2000 or job=’CLERK’;

在逻辑运算之中除了与和或的逻辑之外还会存在有一个非的逻辑,非得逻辑是,如果条件的逻辑结果是真,结果就是假,反之,如果条件的逻辑结果是假,结果就是真。

范例:工资小于2000的雇员信息

Select * from emp where sal<2000;

Select * from emp where not sal>=2000;

对于逻辑操作,有一点说明,不要写过于复杂的逻辑操作。

2.4.3 范围查询

在进行查询条件过滤的时候可以针对某一个范围的数据进行过滤,使用between and.

Between 最小值(数字、日期) and 最大值

在此最小值(包含最小值)与最大值(包含最大值)之间的内容都满足条件。

范例:查询工资在1500~2000之间的雇员(包含1500和2000)

select * from emp where sal>=1500 and sal<=2000;

Select * from emp where sal between 1500 and 2000;

注:第二个查询比第一个查询的性能高。

第一个查询需要匹配两个条件,第二查询需要匹配一个条件。

范例:查询所有在1981年雇佣的雇员。

在emp表之中可以使用“hiredate”字段来描述雇佣日期,但是现在给出的是一个查询范围,所有应该设置出日期查询的最小值与最大值。本次的两个边界值:

1981-01-01:‘01-1月-81’、‘01-1月-1981’

1981-12-31:‘31-12月-81’、‘31-12月-1981’

Select * from emp where hiredate between ‘01-1月-81’ and ‘31-12月-81’;

此时所有在1981年雇佣的雇员信息全部显示,在使用between and 时,日期和字符串时常用的比较方法,字符串也可以,但一般不用。

Select * from emp where ename between ‘FORD’ and ‘SMITH’;

虽然能查询来,但似乎意义不大、

2.4.4 空判断

空在数据库上解释为不确定的内容。但是需要注意的是,如果数字列上使用null那么绝对表示0。对于空的判断不能使用关系运算符判断。空的操作只能使用IS NULL,或者IS NOT NULL(NOT IS NULL).

范例:查询所有领取佣金的雇员信息(佣金存在,不为空)

Select * from emp where comm is not null;

Select * from emp where not comm is null;

任何的数据库,空的操作只能使用以上的两个标记来判断。

2.4.5 IN操作符

IN操作符类似于BETWWEN AND,但是BETWWEN AND 是给了一个大的范围,而IN给出的是一个指定的可选范围。

范例:要求查询出的雇员编号是7369、7566、7788、9999的雇员编号。

如果不使用in操作,可以使用或操作;

select * from emp where empno=7369 or empno=7566 or empno=7788 or empno=9999;

使用in操作:

select * from emp where empno in(7369,7566,7788,9999);

在指定值查询过程之中,in的操作是最简短的。

既然在指定范围里面使用in,那么如果不在指定的范围之中可以使用not in.

范例:要求查询出的雇员编号不是7369、7566、7788、9999的雇员编号。

select * from emp where empno not in(7369,7566,7788,9999);

select * from emp where not empno in(7369,7566,7788,9999);

注意:关于not in与null的问题:

在使用not in进行范围判断的时候,如果范围里面包含有null,那么不会有任何的结果返回。

范例:使用in操作中包含null--没有任何的影响。

select * from emp where empno in(7369,7566,7788,null);

范例: 使用not in操作中包含null--没有任何的影响。

select * from emp where empno not in(7369,7566,7788,null);

//输出未选定行

实际上使用where的最大用处就是控制显示的数据行,在简单一点:别显示全部数据行(因为要显示全部数据行,几乎是宣判了一个程序的死刑)。使用not in的目的是为了查询部分数据,但是如果有了null(某些数据不能为空),就变成了查询全部了。

2.4.5 模糊查询:LIKE

可以在数据库之中执行数据的模糊查询,在使用like的时候可以使用两个通配符,

“_”:匹配任意一位字符;

“%”:匹配任意零位、一位或多位字符。

范例:查询姓名是以字符A开头的雇员信息。

select * from emp where ename like 'A%';

范例:查询姓名的第二个字符是A的雇员信息。

select * from emp where ename like '_A%';

范例:查询姓名中包含字符A的雇员信息。

select * from emp where ename like '%A%';

注意:关于like的亮点说明

说明1:like可以应用在各种数据类型上,不一定非要是字符串。

Select * from emp where ename like ‘%%’;

说明2:在使用like模糊查询的视乎,如果不设置查询关键字,那么表示查询全部数据。

Select * from emp where ename like ‘%%’;

虽然以上的代码可以查询全部数据,但是与不使用where字句相比,不使用where字句性能更好。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网