oracle增删改查操作

oracle查询:

case when col_name  >0 then col_name else 0 end


多表级联更新:

update PBPARMTEMP_NEW t set (c4) = (select micid from meterinfo m where m.micode = t.c1)
where exists (select 1 from meterinfo m where m.micode = t.c1);


导入导出的命令:

imp username/password@oral file="xx.dmp",log="xx.log",ignore=y,fromuser=username(从哪个用户中导出),touser=username(导入到哪个用户),full=y


模糊查询:like

_:表示一个任意字符.

%:表示任意个字符包括零个.

select last_name from employees where last_name like '_o%';

在模糊查询中含有转义字符时,使用escape说明转义字符.

如果使用'/'做为检索字符,那么必须使用'/'转义,那么escape也必须使用'/'.



在查询时如果为空使用 is null,如果不为空使用is not null.


打印出 "2009年10月14日 9:25:40" 格式的当前系统的日期和时间.

select to_char(sysdate,'YYYY"年"MM"月"DD"日" HH:MI:SS') from dual


格式化数字: 1234567.89 为 1,234,567.89.

select to_char(1234567.89,'9,999,999.99') from dual


字符串转为数字时
    1). 若字符串中没有特殊字符, 可以进行隐式转换:
    select '1234567.89' + 100
    from dual

    2). 若字符串中有特殊字符, 例如 '1,234,567.89', 则无法进行隐式转换, 需要使用 to_number() 来完成

    select to_number('1,234,567.89', '999,999,999.99') + 100
    from dual


查询每个月倒数第 2 天入职的员工的信息.
    select last_name, hire_date
    from employees
    where hire_date = last_day(hire_date) - 1


nvl函数:nvl(expr1,expr2)

    如果第一个表达式的值为空,则返回第二个表达式的值;如果第一个表达式的值不为空,返回第一个表达式的值。

nvl2函数:nvl2(expr1,expr2,expr3)

    如果第一个表达式的值为空,则返回第二个表达式的值;如果第一个表达式的值不为空,返回第三个表达式的值。


decode函数:

    查询部门号为 10, 20, 30 的员工信息,

    若部门号为 10, 则打印其工资的 1.1 倍, 20 号部门, 则打印其工资的 1.2 倍, 30 号部门打印其工资的 1.3 倍数

    select last_name, department_id, salary, decode(department_id, 10, salary * 1.1,
                                                                   20, salary * 1.2,
                                                                   30, salary * 1.3
                                                 ) new_sal
    from employees
    where department_id in (10, 20, 30)


多表连接查询时, 若两个表有同名的列, 必须使用表的别名对列名进行引用, 否则出错!


非等值连接:

        查询每个员工的 last_name 和 GRADE_LEVEL(在 JOB_GRADES 表中). ---- 非等值连接

        select last_name, salary, grade_level, lowest_sal, highest_sal
            from employees e, job_grades j
            where e.salary >= j.lowest_sal and e.salary <= j.highest_sal


多表连接

join on

连接 Employees 表和 Departments 表
            1).
            select *
            from employees join departments
            using(department_id)
            
            缺点: 要求两个表中必须有一样的列名.
            
            2).
            select *
            from employees e join departments d
            on e.department_id = d.department_id
            
            3).多表链接
            select e.last_name, d.department_name, l.city
            from employees e join departments d
            on e.department_id = d.department_id
            join locations l
            on d.location_id = l.location_id   

左外连接、右外连接和满外连接:

    左外连接:左表需要返回更多的记录(员工没有部门的情况)

            select last_name, department_name
            from employees e left join departments d
            on e.department_id = d.department_id

    右外连接:右表需要返回更多的记录(部门没有员工的情况)

            select last_name, department_name
            from employees e right join departments d
            on e.department_id = d.department_id

    满外连接:

            select last_name, department_name
            from employees e full join departments d
            on e.department_id = d.department_id


对表进行修改操作

    添加一个新的列:

    ALTER TABLE myemp ADD(age number(8,2))

    修改现有列的类型

    ALTER TABLE myemp MODIFY(age varchar2(10))

    修改列名

    ALTER TABLE myemp RENAME COLUMN salary to sal

    删除列

    ALTER TABLE myemp DROP COLUMN age

    清空表中的数据并不删除表

    TRUNCATE TABLE myemp

    删除表

    DROP TABLE myemp

    创建具有相同表结构的表

    CREATE TBALE emp2 AS SELECT * FROM EMPLOYEES WHERE 1=2

    向表中插入数据

    INSERT INTO emp2 SELECT * FROM EMPLOYEES WHERE EMPLOYEE_ID = 80 

    对表重命名

    rename employees2 to emp5

    将某一列设置为不可用

    alter table emp5 set unused column test_column

    删除不可用的列

    alter table emp5 drop unused column

 

创建序列:

    create sequence dept_id_seq
    start with 200
    increment by 10
    maxvalue 10000

使用序列向表中插入值:

    insert into dept values(dept_id_seq.nextval,'IT')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值