设为首页 收藏本站
查看: 790|回复: 0

[经验分享] oracle表的简单查询

[复制链接]

尚未签到

发表于 2016-7-19 06:19:48 | 显示全部楼层 |阅读模式
  desc emp显示emp表的结构
  
  dual 是一个特殊的表,里面没有任何数据
  
  select 语句:
计算数学表达式:select from 3*2 from dual 
  
  重命名的形式输出: select 3*2 as mult_result from dual;
  注意中间的as可以省略不写,且中间不能用空格隔开(eg:mult result );要想用空格隔开mult result 加上双引号“”后将可以原样输出;as后面的重命名要么加双引号要么不加,使用单引号将会出错。而插入值时除了number类型的值,其他类型的值都要用单引号括起来
  
  空值运算函数:nvl(name,number)
  任何运算法则(加减乘除)与含有空值的字段的运算结果都是空值,nvl(name,number)可以用number值来代替name字段为null处的值
  eg:  select ename ,sal *12+nvl(comm,0) from emp   //表示如果comm列里面的值是空值,则用0代替,如果不是空值,则不起任何作用
  
  查询空值情况:
  * 不能用‘=’作为判断连接词,不是空就是 is not null
  eg:select * from a_tbl where money is null  
  
  
  字符串的连接用||
连接字符:select ename || 'fdfdfdfd' from emp;
如果连接的字符里面已经有一个单引号了,就用两个单引号代替一个单引号;
  如:select ename || 'fdf''dfdfd' from emp;
  
  dintinct 表示去掉重复的,修饰多个字段的组合的时候表示把这多个字段组成的重复的记录消除掉
  
  模糊查询:like 
  eg:select name from a_tbl where name like '%lms%'  
  _代表一个字母,如:查询第二个字母为a的姓名 like '_a%'
默认的转义字符是\
  eg:当模糊查询的条件里面就有%时查询语句如下: like '%\%%'
当不使用\作为转义字符写法如下(转义字符为$):select name from a_tbl where name like '%$%%' escape '$'
  
  in
  eg: select * from a_tbl where name in ('张三','李四','王五');
  
  排序:order by(desc降序,asc升序),order by 默认为asc
eg:select * from emp order by EMPNO desc
两个字段进行排序:select * from emp  order by EMPNO desc,sal desc
  如果使用列的别名进行查询,那么列的别名要用双引号括起来
  eg:select sal as "月工资" from emp order by "月工资" desc;
  
  字符串操作函数
  lower(char),upper(char)    大小写的转换
eg:select name from a_tbl where lower(name) like '_a%'  查询所有姓名的第二个字符为(a/A)的姓名 
  length(char)  获取字符串的长度
substr(str,beginIndex,login)截字符串,从1开始
eg:select substr(name,2,3) from a_tbl     从name第二个字符开始截取name值一个截取三个字符
chr(int):将ascii码转换为字符
  eg:select chr(65) from dual
ascii(char):将字符转换为ascii码
  eg:select chr('a') from dual
  replace (char,search_string,replace_string)替换字符串中的字符
  eg:将雇员名字中的字母'A'替换成'我是A'
  select replace(ename,'A','我是A') from emp;
  instr(char1,char2,[,n[,m]])取子串在字符串中的位置
  
  常用字符串函数综合应用
  以首字母大写的形式显示所有员工姓名
  select upper(substr(ename,1,1))||lower(substr(ename,2,length(ename)-1)) as "姓名" from emp;
  
  数学函数:
  数学函数的输入参数和返回值类型都是数字类型的,数学函数包括cos,cosh,exp,ln,log,sin,sinh,sqrt,tan,tanh,acos,asin,atan,round,最常用的有如下几个
  round(c,[m]):该函数用于执行四舍五入,如果省掉m,则四舍五入到整数;如果m是正数,就四舍五入到小数点的m位后,如果是负数,则四舍五入到小数点的m位前
  eg:select round(23.652) from dual 结果为:24
eg:select round(23.652,1) from dual 结果为:23.7
eg:select round(23.652,-1) from dual 结果为:20
  trunc(c,[m])该函数用于截取数字,如果省掉m,就截取去小数部分,如果m是正数就截取到小数点的m位后,如果m是负数,就截取到小数点的前m位
  eg:select trunc(23.652) from dual; 结果为23
  eg: select trunc(23.652,1) from dual;结果为23.6
  select trunc(23.652,-1) from dual;结果为20
  mod(m,n)取模的余数
  eg:select mod(23,6) from dual;     结果为5
  eg:select mod(23.5,6) from dual; 结果为5.5
  floor(n)返回小于或是等于n的最大整数,向下取整
  eg:select floor(23.6) from dual;返回23
  ceil(n)返回大于或是等于n的最小整数,向上取整
  eg:select ceil(23.6) from dual;返回24
  eg:显示一个月为30天的情况所有员工的日薪金,忽略余数
  第一种写法:select trunc(sal/30) as "日薪" from emp;
  第二种写法:select floor(sal/30) as "日薪" from emp;
   对数字的处理,在财务系统或银行系统中用的最多,不同的处理方法,对财务报表会有不同的结果
  
  其他的数学函数
  abs(n)返回数字的绝对值
  acos(n)返回数字的反余弦值
  asin(n)返回数字的反正弦值
  atan(n)返回数字的反正切值
  cos(n)返回余弦值
  exp(n)返回e的n次幂
  log(m,n)返回对数值
  power(m,n)返回m的n次幂
  
  
  日期函数
  日期函数用于处理date类型的数据
  默认情况下日期格式是dd-mon-yy即12-7月-88
  (1)sysdate:返回系统时间
  eg:select sysdate from dual;返回值是2011-10-26
  (2)add_months(d,n)
  返回入职日期大于300个月的员工信息
  eg:select * from emp where sysdate>add_months(hiredate,300);
  (3)last_day(d)返回制定日期所在的月份的最后一天
  eg:查出各月倒数第三天被雇佣的员工
   select hiredate,ename from emp where last_day(hiredate)-2=hiredate;
  eg:输入每个员工的入职日期
  select trunc(sysdate-hiredate) as "入职天数" from emp;
  
  转换函数
to_char():把数字或者日期转换为某种格式
to_date();把日期类型的字符串转换成日期类型
to_numbrt()把字符转换成数据类型
eg:select to_char(sal,'$999,999.999')from emp;   //9代表的一位,当给定的格式位数不够时将显示为##的形式
eg:  select to_char(sal,'L999,999.999')from emp;         //L代表本地货币,不区分大小写,位数不够同上
eg;  select to_char(sal,'000000000000.00')from emp; //0代表一位数字,且位数不够的用0代替,位数不够同上
eg;  select to_char(sysdate,'YYYY-MM-DD HH:MI:SS') from dual// 输出格式为:2008-10-2 02:20:30  ,HH默认为12时制,sysdate表示当前时间
eg;  select to_char(sysdate,'YYYY-MM-DD HH24:MI:SS') from dual//输出格式为24时制
  eg:  to_date('2008-01-01','yyyy-mm-dd')      //将字符串'2008-01-01'转换成'yyyy-mm-dd'的date类型
  eg : select to_number('$888,888.00,'$999,999.00'')
  eg:select to_char(sysdate,'yyyy') from dual;  //返回2011
  
  系统函数
  terminal:当前会话客户所对应的终端标识符
  language:语言
  db_name:当前数据库名称
  nls_date_formate:当前会话客户所对应的日期格式
  session_user:当前会话客户所对应的数据库用户名
  current_schema:当前会话客户所对应的默认方案名(一个用户对应一个方案,用户名与方案名相同)
  host:返回数据库所在主机的名称
  host:返回数据库所在主机的名称
  通过该函数,可以查询一些重要信息,比如你在使用哪个数据库?
  eg:select sys_context('userenv','db_name') from dual;
  
  
  
  其它的还有>,<,<>,他们不仅可以比较数字还可以比较字符串与日期,当比较字符串时比较第一个不相同的字符的ascii码值,当比较日期时要求进行比较的日期的格式一致
还有:between,and,or等
  比较日期可以用如下形式
  select * from table
where 日期字段 between to_date('2008-01-01','yyyy-mm-dd'
                        
and to_date('2008-10-20','yyyy-mm-dd')
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-245989-1-1.html 上篇帖子: oracle substr小实例 下篇帖子: oracle md5 算法简单引用
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表