oracle数据库的操作1--基础sql

目录

1. ||

2. 双引号“”

3. 单引号‘’

4.空值

5.distinct

 

6. 字符串处理①.dual虚表:

​②  substr(‘’,int,int) 

​③ trim()

​④ replace() 替换SELECT replace(' fff    ddd ', ' ', '') as tt from dual  --将空字符串去掉

7. 数字函数

①   Round()四舍五入

​②  TRUNC()取余数

8. 日期函数

① 时间运行的环境

②  add_months   、   sysdate

③  current_date

④  extract

⑤ last_day(date_value)

⑥  next_day( date, weekday )

⑦ months_between(f,s)

9 转换函数

① to_char函数

②TO_DATE函数

10 其他函数

① NVL (expr1, expr2)   

② NVL2 (expr0,expr1,expr2)  

③ NULLIF (expr1, expr2)

④ COALESCE (expr1, expr2, ..., exprn)

⑤ CASE 函数   

⑥ DECODE函数 


阅读前须知:①由于之前已经会mysql了,所以这里跟mysql相同的sql就不再记录了。

                     ②oracle要求表名和字段名必须大写,但是为了方便阅读,部分sql故意写成小写了。

                    ③先将用到的表字段列取出来,如下:表明为:EMPLOYEES

1. ||

       表示连接符,将两个字段连接起来

2. 双引号“”

        别名中使用特殊字符,或者是强制大小写敏感,或有空格时,都需加双引号

FIRST_NAME  和  LAST_NAME 是表种的字段

SELECT FIRST_NAME||LAST_NAME as "name"  FROM EMPLOYEES;

3. 单引号‘’

用来连接字符串

SELECT FIRST_NAME||LAST_NAME||'的工作是:'||salary as describe from employees;

4.空值

--  空值的任何算术表达式都等于空,包括加减
--  包括空值的连接表达式等于与空字符串连接,也就是原来的字符串
SELECT salary*commission_pct as tt from employees;

效果:设计到有空的运算,全部边为空

5.distinct

使用distinct关键字去重(列去重/行去重)
SELECT distinct salary from employees;--列去重,后面可跟多个
SELECT distinct* from employees; --行去重

 

6. 字符串处理
①.dual虚表:

       存储临时数据   mysql里边也有


②  substr(‘’,int,int) 

注意:java里面索引是从0开始,而数据库里面是从1开始 ,所以下面两个是一样的
SELECT SUBSTR('fdsfdgfdg', 0, 3) as tt ,SUBSTR('fdsfdgfdg', 1, 3) as yy from dual;


③ trim()

将符串两边的空格去掉(中间的不会去掉)
SELECT TRIM(' fff    ddd ') as tt from dual


④ replace() 替换
SELECT replace(' fff    ddd ', ' ', '') as tt from dual  --将空字符串去掉


7. 数字函数

①   Round()四舍五入

SELECT "ROUND"(156.123456, 2) as tt,"ROUND"(156.123456, -2) as yy from dual;


②  TRUNC()取余数

SELECT "TRUNC"(156.123456, 2) from dual;
SELECT "TRUNC"(156.123456, -2) from dual;

8. 日期函数

① 时间运行的环境

注意:使用时间函数的时候,需查看运行的环境,如下

--查看当前的环境
SELECT * from V$NLS_PARAMETERS;    
--设置当前会员环境语言为 简体中文   
alter session set nls_language='SIMPLIFIED CHINESE';
--设置当前会员环境语言为 英文
alter session set nls_language='AMERICAN';

②  add_months   、   sysdate

--add_months(date_value,number_of_months):用于从一个日期值增加或减少一些月份
--    sysdate 表示返回当前的会话时间
select add_months(sysdate,12) as "明年今日",
add_months(sysdate,-12) as "去年今日"
from dual;

③  current_date

--    current_date:返回当前会话时区中的当前日期(出国才有影响)
    select sessiontimezone,current_date from dual;
    alter session set time_zone='-11:00'//修改当前会话时区

④  extract

--extract(date_field from datetime_value):找出日期或间隔值的字段值
    select extract(year from sysdate) "当前月份",
    extract(month from sysdate) "当前月份",
    extract(day from sysdate) "当前月份"
    from dual;

⑤ last_day(date_value)

a--last_day(date_value):返回指定日期中的月份的最后一天的日期
    select last_day('2000-02-01') "润月" from dual;--操作失败,因为里面要求是时间格式


    b--转换时间格式函数TO_DATE
    select last_day(TO_DATE('2000-02-01', 'yyyy-mm-dd')) "润月" from dual;

 

    c--业务场景:查询每个月最后3天入职的人
    SELECT * FROM employees where hire_date>=last_day(hire_date)-2

⑥  next_day( date, weekday )

--next_day( date, weekday ):返回指定时间的下一个星期的指定星期对应的日期(注意时间环境)
    --注意,跟语言环境有关系,如果是中文环境,下面传入中文,如果是英文环境,就是传入英文(少用,因为不知道用户的操作环境)
    select next_day(sysdate,'星期一') from dual;


⑦ months_between(f,s)

--months_between(f,s) 日期f和s间相差月数 (注意时间环境)
    select months_between(sysdate,'04-5月-09')from dual;
--场景:查询入职五年的员工
    select t.*  from employees t  where months_between(sysdate, hire_date)>=12*5

 

9 转换函数

① to_char函数

2.4.1 隐式转换

select '222'+44 as num from dual; //--这里含有一个隐式转换,一般不这样写。

2.4.2 数字9

9    代表一位数字,如果当前位有数字,显示数字,否则不显示(小数部分仍然会强制显示)
select to_char(123456.789,'999,999,99')

from dual;

2.4.3 数字0

0    强制显示该位,如果当前位有数字,显示数字,否则显示0
select to_char(123456.789,'000,000,00')

from dual;

2.4.4 $

$    增加美元符号显示

select to_char(123456.789,'$999,999,99') from dual;

 

②TO_DATE函数

select * from employees t
where hire_date between to_date('2010-01-01','yyyy-mm-dd')
and to_date('2010-12-31','yyyy-mm-dd')

 

10 其他函数

① NVL (expr1, expr2)   

相当于mysql里面的ifnull函数
将空值转换为替换的值
支持多种数据格式可以是日期,字符,数字
NVL的两个参数数据类型必须匹配 ,否则出错。
select NVL(NULL,5) from dual

② NVL2 (expr0,expr1,expr2)  

   相当于三目运算
    如果expr0不为Null,返回expr1, 为Null,返回expr2.  
    expr0可以为任何数据类型
select "NVL2"(null, 1, 2) from dual

③ NULLIF (expr1, expr2)
 

比较两个表达式,如果相等返回空值,如果不等返回第一个表达式。
select "NULLIF"(2, 1) from dual

④ COALESCE (expr1, expr2, ..., exprn)

    返回表达式列表里的第一个非空表达式的值,表达式列表可以包含很多表达式,
    当第一个满足值非空时,返回这个表达式的值。 expr1,expr2,...,exprn的数据类型必须一致
select coalesce(null,1,2,null,3) from dual

⑤ CASE 函数   

相当于if-else
select
    CASE 1
    WHEN 1 THEN 1
    WHEN 2 THEN 2
    WHEN 3 THEN 3
    ELSE 4
    END as tt
from dual

DECODE函数 

类似于CASE 或 IF-THEN-ELSE 语句
  DECODE(col/expression, search1, result1
                     [, search2, result2,...,]
                     [, default])

如下:第一个红框的值等于下面红框的某个值,那么就返回那个值后面的值,否则就返回最后的默认值。比较的时候只能是等于效果

 

 

持续更新中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值