废旧金属回收价格,给个电子邮件地址,重庆房价走势2013
oracle学习笔记。最近在学习oracle,记录下一些有关oracle的知识点主要是sql语句,在这分享给大家。
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源文件路径 拷贝文件路径
1.格式化命令:
a) 设置每行的长度: set linesize 长度;
b) 设置每页的长度: set pagesize长度;
2.切换用户:
a) Conn 用户名/密码[as sysdba],如果是sys用户一定要写上sysdba
3.调用本机命令:host作为前缀。
1.认识一下sql的介绍
2.掌握scott用户的表结构
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负责。
Scott用户一共有四张表结构
命令一:查询一个用户下的所有数据表;
Select * from tab;
小计:显示当前登录用户:show user
命令:查询一个表的结构
Desc 表名称;
范例:desc dept;
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.“||”负责进行输出的内容链接,但是需要注意的是,一般此类的操作很少直接在查询中出现。
Sql变为如下格式:
【3控制要显示的数据列】select[DISTINCT] *| 列名称[别名],列名称[别名]...
【1确定数据来源】FROM 表名称[别名]
【2确定满足条件的数据行】[WEHERE 过滤条件(s)]
Select决定数据列,where决定数据行
如果想实现限定查询,那么需要掌握一系列的限定查询的符号,有如几种:
·关系运算符:>、<、>=、<=、<>(!=);
·逻辑运算符:AND 、OR、NOT;
·范围运算符:BEETWEEN...AND;
·谓词运算符:IN 、NOTIN;
·空判断:IS NULL、IS NOT NULL;
·模糊查询:LIKE
关系运算符号主要是进行大小关系比较操作使用的。
范例:要求查询出所有基本工资高于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’;
所有的过滤都是采用条件的形式进行过滤。
如果说现在多个条件要进行连接,那么就需要根据要求选择是与连接还是或连接。
·与连接:所有的判断条件都要满足;
·或连接:若干个条件有一个满足即可;
范例:查询出工资范围在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;
对于逻辑操作,有一点说明,不要写过于复杂的逻辑操作。
在进行查询条件过滤的时候可以针对某一个范围的数据进行过滤,使用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’;
虽然能查询来,但似乎意义不大、
空在数据库上解释为不确定的内容。但是需要注意的是,如果数字列上使用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;
任何的数据库,空的操作只能使用以上的两个标记来判断。
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(某些数据不能为空),就变成了查询全部了。
可以在数据库之中执行数据的模糊查询,在使用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字句性能更好。
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
Oracle字符串函数length、upper、lower、initcap、 concat、instr、replace
网友评论