码迷,mamicode.com
首页 > 数据库 > 详细

oracle学习之基本查询和条件过滤,分组函数使用

时间:2017-11-10 21:58:31      阅读:219      评论:0      收藏:0      [点我收藏+]

标签:11g   字符串长度   监听服务   服务   http   pad   逻辑   员工   甲骨文   

oracle是殷墟出土的甲骨文的第一个单词,所以在中国叫做甲骨文,成立于1977年,总部位于美国加州。

在安装好后,主要有两个服务需要开启:

1,实例服务,OracleServiceORCL,决定是否可以连接上数据库

2,监听服务,OracleOraDb11g_home1TNSListener,决定是否可远程连接数据库

在安装好客户端后,登录方式:

sqlplus 用户名/密码

如果是远程登录,需要加上连接别名,或者IP:

sqlplus 用户名/密码@//IP地址/实例名
or
sqlplus 用户名/密码@连接名

数据库基本查询:

select * from tab;

tab是一个数据字典,字义了当前用户有哪些表,以及类型,查看表结构:

desc dept

  注意,如果显示行大小和宽度不正确,可以通过修改登录设置文件改变:

路径:\app\Administrator\product\11.2.0\client_1\sqlplus\admin
set linesize 140;//设置行大小
set pagesize 120;//设置页宽度
col empno for 99999;//修改数值型字段长度
col ename for a20;//设置字符型字段长度

  sql语法的注意事项:关键字不能缩写,不能换行,以分号结尾!

查看sqlplus的所有命令:

? topic

查询SQL语句语法:

select [distinct]*|column_name|expr|alias from tablename

 查询员工号,姓名,月薪,奖金,年薪:

技术分享

注意,奖金字段有为null的结果,可以通过虑空函数解决,即:nvl(a,b),如果a为null,返回b,否则返回a

技术分享

如果需要查看员工表不同的部门编号,并且去除重复的,可以这么做:

技术分享

通常,我们还可以借助伪表来进行一些的数学计算或函数操作:

select 3+20*5,sysdate from dual;

  比较运算符的查询条件过滤: = != <> < > <= >= (between and)

case1: 查询入职日期为1981年11月17日的员工信息:

select * from emp where hiredate = ‘1981-11-17‘

  这里要注意,如果显示文字与格式字符串不匹配的问题,通常必须按照具体日期格式写:

技术分享

如果自己想修改这个日期格式,可以进入管理员用户后修改,如下:

SQL> select sysdate from dual;
//修改会话日期格式
SQL> alter session set nls_date_format=‘yyyy-mm-dd‘;
//后面就可以这样查询了:
SQL> select * from emp where hiredate =‘1981-11-17‘;

  逻辑运算符 and or not,这里特别说明一下,查找工资在1000~2000的员工信息:

select * from emp where sal >= 1000 and sal <= 2000;
//或者
select * from emp where sal between 1000 and 2000;

  between and 是属于闭区间,从小到大!

如何正确查询奖金为空的员工信息 - null

select * from emp where comm is null;

  当and or 存在多个条件写,如何来写才更优?

sql语句是从右到左执行,and情况,应该将易假的放在右侧,or情况,应该将真的放在右侧。

like ->模糊查询,‘%‘匹配任意多个字符,‘_‘匹配任意一个字符

重点:查询带在下划线‘_‘的应该怎么查询:

select * from emp where ename like ‘%/_%‘ escape ‘/‘;

  排序:group by; having; order by;语法如下:

order by col|expr|alias|number

  员工薪水按从大到小排序(序号)

select * from emp order by sal desc;
//或者
select * from emp order by 6 desc;
//或者
select empno,ename,job,mgr,sal,comm,deptno from emp order by 5 desc;

  这里更要注意null的情况,默认无穷大:

技术分享

解决办法是:

select * from emp where deptno = 30 order by comm desc nulls last;
//或者
select * from emp where deptno = 30 order by nvl(comm,-1) desc;

  oracle的单行函数:

什么叫单行函数,即对一行进行变换,只产生一个结果。

lower(小写),upper(大写),initcap(首字母大写),||(可以进行字符串连接)

select lower(‘hello WorLD‘) one,upper(‘HeLLo woRld‘) two,initcap(‘hello WOrld‘) from dual;
select ‘aaaa‘||‘bbbb‘||‘cccc‘ from dual;

  substr(字符串,位置,长度),从位置开始截取长度,长度可以省略,代表截取到未尾:

select substr(‘helloworld‘,1,3) one,substr(‘helloworld‘,1) two ,substr(‘helloworld‘,-3) three from dual;

  length求字符串长度,lengthb求字节长度:

技术分享

instr(str1,str2) ,判断str2是否在str1中,如果存在返回出现的首位置,否则返回0:

select instr(‘hello world‘,‘llo‘) from dual;

  lpad,rpad,左右填充l(r)pad(str,len,char) 返回len长度的字符串,如果str不够长度,则是char字符填充:

select lpad(‘hello‘,10,‘#‘) from dual;

  trim(str)去首尾空格,replace(str,substr,strto)替换

select ‘aaa‘||trim(‘ hello world ‘)||‘bbb‘ from dual;

  还能这么玩:

技术分享

重要:数值函数,round四舍五入,trunc截断,mod取模

select round(45.926, 2) 一, round(45.926, 1) 二, round(45.926, 0) 三,  round(45.926, -1) 四, round(45.926, -2) 五 from dual;
select trunc(45.926, 2) 一, trunc(45.926, 1) 二, trunc(45.926, 0) 三,  trunc(45.926, -1) 四, trunc(45.926, -2) 五 from dual;
select mod(600,1000),mod(1000,600) from dual;
//ceil 和floor 向上取整,向下取整 
select ceil(121/60),floor(121/60) from dual;

 重要:转换函数,to_char,to_number,to_date 

技术分享

 

 把薪水转换为本地货币字符型:

技术分享

select sal,to_char(sal,‘L9,999‘) from emp;

技术分享

如果要将这个在转回数值型,语句是一样的:

select to_number(‘¥1,250‘,‘L9,999‘) from dual;

  to_char 与 to_date 显示 ‘yyyy-mm-dd hh24:mi:ss 今天是 星期几‘

select to_char(sysdate,‘yyyy-mm-dd hh24:mi:ss "今天是" day‘) from dual;

  将上述字符串反转为日期:

select to_date(‘2017-11-10 15:48:13 今天是 星期五‘,‘yyyy-mm-dd hh24:mi:ss "今天是" day‘) from dual;

  此处可以解决一个隐式日期转换问题:

select * from emp where to_char(hiredate,‘yyyy-mm-dd‘)=‘1981-11-17‘;

 上面的能显示转换,尽量显示转换。

重要:日期函数

1,显示昨天,今天,明天:

select sysdate-1 昨天,sysdate 今天,sysdate+1 明天 from dual;

  2,计算员工工龄,可以按日,周,月,年,日期差减方法

 

oracle学习之基本查询和条件过滤,分组函数使用

标签:11g   字符串长度   监听服务   服务   http   pad   逻辑   员工   甲骨文   

原文地址:http://www.cnblogs.com/kellerfz/p/7816246.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!