01 Oracle 补充

Oracle 补充

一.DDL命令补充

删除表

​ drop table 表名; --删除表

​ drop table 表名 cascade constraint; --删表的同时 级联删除 所有约束

修改表

​ 1、添加列

​ alter table 表名 add(列名 数据类型 [默认值] [约束1] [约束1],

​ 列名2 数据类型2)

​ 2、删除列

​ alter table 表名 drop (字段名1,字段名2)

​ 3、修改列名

​ alter table 表名 rename column 旧名 to 新名

​ 4、修改列的其他属性

​ alter table 表名 modify (列名 数据类型 [默认值] [约束1] [约束1],

​ 列名2 数据类型2)

​ 5、添加约束

​ alter table 表名 add 约束类型(列名1,列名2)

​ --示例

​ alter table students30_FK add unique(name) --Unique

​ alter table students30_FK add foreign key (clazzid) references clazz(clzid) --FK

​ 6、删除约束

​ alter table 表名 drop constraint 约束名;

​ --建表时,添加约束同时指定约束名

​ create table 表名(

​ 列名 数据类型 [constraint 约束名 ] primary key

​ )

二.Case…when语法结构 ( 自学 )

语法 case…when : 分支流程 , 类似于java里switch…case.

​ case when boolean表达式(条件1) then 结果1

​ when 条件2 then 结果2

​ …

​ else 结果n

​ end

​ 注意: 1. else不是必须的, 如果所有条件都不满足,语法结构的结果为null.

​ \2. 结果值可以是数字,字符串,日期. 但一定不能是boolean

​ \3. 所有结果类型必须一致

​ 例如: —打印员工性别( 员工编号是奇数为男士,反之为女), 提示mod(n1,n2)

​ select employee_id,first_name,

​ case when mod(employee_id,2)=0 then ‘女’

​ when mod(employee_Id,2)=1 then ‘男’

​ else ‘不男不女’

​ end

​ from employees;

​ — 打印员工编号,名,工资,工资级别( A: <=6000 B: <=10000 C: >10000 )

​ select employee_id,first_name,salary,

​ ( case when salary<=6000 then ‘A’

​ when salary<=10000 then ‘B’

​ else ‘C’ end

​ ) “级别”

​ from employees;

三.常见单行函数

与字符串相关的函数:

​ \1. length(str) — 求str的长度

​ — 打印’String’的长度

​ select length(‘String’) from dual;

​ — 打印姓是由四个组成的员工信息

​ select * from employees where last_name like ‘____’;

​ select * from employees where length(last_name)=4;

​ \2. substr(str,begin,length) — 对str进行截取,从begin位置开始, 结果length个字符.

​ 注意: str的下标从1开始

​ — select substr(‘String’,3,4) from dual; —> 结果: ring

​ select substr(‘String’,-3,2) from dual; —> 结果: in

​ — 打印名是以’S’开头的员工信息

​ select * from employees where first_name like ‘S%’;

​ select * from employees where substr(first_name,1,1)=‘S’;

​ \3. instr(str1,str2,begin) — 在str1里查找str2,从begin处开始. 如果找到返回str2

​ 首字母下标, 反之返回0

​ — select instr(‘abcdabcd’,‘bc’,1) from dual; --> 结果: 2

​ \4. lower(str)/ upper(str) — 大小写转换

​ — 查询名是以’s’或’S’开头的人

​ select * from employees where lower( substr(first_name,1,1) ) = ‘s’;

​ 注意: sql里函数也可以嵌套调用,只要参数类型匹配即可. 从里向外逐层执行

数字类型相关函数:

​ \1. abs(num) — 获取num的绝对值

​ \2. mod(num1,num2) — 计算 num1%num2的结果

​ — 打印员工编号为奇数的员工信息

​ select * from employees where mod(employee_id,2)=1;

​ \3. trunc(num1,num2) : 对num1做向下截断操作,保留小数点后num2位

​ round(num1,num2) : 对num1做四舍五入操作,保留小数点后num2位

​ — select round(3.1415,2) from dual; ----> 结果: 3.14

​ select round(3.1415,3) from dual; ----> 结果: 3.142

​ \4. dbms_random.random() — 获得一个随机整数( 很大的,可正,可负 )

​ — 请随机获得一个0~100之间的随机数

​ select mod( abs( dbms_random.random() ) ,101) from dual;

​ — 请随机打印表里的一个员工信息( 重点: 获取一个100~207之间的随机数)

​ select * from employees

​ where employee_id =mod( abs(dbms_random.random()) ,108)+100;

日期类型相关函数:

\1. sysdate — 表示当前系统时间

​ — 打印当前系统时间

​ select sysdate from dual;

​ 注意: oracle默认的日期格式为 dd-mon-rr

\2. months_between(time1,time2) — 计算两个时间之间相隔几个月(结果为小数)

\3. last_day(time) — 计算当前月的最后一天

\4. add_months(time,num) — 在time的基础上加上num个月

\5. round(time,‘截取方式’) — 四舍五入

​ trunc(time, ‘截取方式’) — 向下截断

​ 截断方式: ‘year’ ‘month’ ‘day’(星期) 什么都不写(回到某一天的零时)

​ — 打印当前二月的最后一天

​ last_day( add_month( trunc(sysdate,‘year’) , 1 ) )

类型转换相关函数

\1. to_number( str值 , 字符串格式 ) — 将给定的str按照指定格式转换成数字类型值

​ — select to_number(’$24,000.00’,’$99,999.00’) / 22 from dual;

​ select to_number(‘12345’) / 22 from dual;

\2. to_char() — 将其他类型值转换成指定格式的字符串

​ 1) to_char(num,‘字符串格式’) : 将数字转换成字符串

​ — 按照科学计数法显示员工工资

​ select employee_id,first_name, to_char( salary,’$999,999.00’)

​ from employees;

​ 注意: 占位数字可以用9或者0, 位数不够时,0会补齐

​ 如果数字范围超出字符串表示能力,结果显示#####

处理null的函数:

​ nvl( 值1 , 值2 ) — 处理null,如果值1不为null,函数结果为值1,反之,结果为值2

​ — 打印员工本月工资( salary+salary*提成 )

​ select employee_id, salary+salary*commission_pct from employees;

​ 如果提成为null, 数学表达式的结果为null

​ select employee_id,salary+salary*nvl(commission_pct,0)

​ from employees;

​ — select nvl(‘hehe’,‘haha’) from dual; —>结果:hehe

​ select nvl(null,‘haha’) from dual; —> 结果haha

四.集合运算符

1. union :合并两个查询结果,重复数据只保留一份

​ – select * from employees where department_id in(70,80)

​ union

​ select * from employees where department_id in(80,90); --> 70,80,90

2. union all: 合并查询结果,保留重复数据

​ – select * from employees where department_id in(70,80)

​ union all

​ select * from employees where department_id in(80,90); --> 70,80,80,90

3. minus : 求差集,用result1-result2 ,以result1为主

​ – select * from employees where department_id in(70,80)

​ minus

​ select * from employees where department_id in(80,90); --> 70

4. intersect:求交集

​ – select * from employees where department_id in(70,80)

​ intersect

​ select * from employees where department_id in(80,90); --> 80

注意:1. 执行效率差

​ \2. 要求所有查询结果的列数,列的数据类型必须一致

​ 3. 合并后的结果,它的列名,列的类型以第一个result为准。

提示: 行列转换

​ 1) 行—列 :使用集合运算符

​ 2) 列—行【重点】:case…when 和 组函数

五.常见的dos命令

1.修改管理员密码:

1)进入dos命令行

2)输入 sqlplus /nolog

3)输入 conn sys as sysdba

4)无需输入口令,直接回车

5)连接成功后,输入以下命令

​ alter user system identified by 密码;

​ 注意密码不能以数字开始

6)修改成功后退出

2.命令行解锁hr用户

1)进入dos命令行

2)输入 sqlplus /nolog

3)输入 conn sys as sysdba

4)无需输入口令,直接回车

5)连接成功后,输入以下命令

​ alter user hr account unlock;

6)alter user hr identified by 密码;

​ 注意密码不能以数字开始

6)修改成功后退出

3.start命令
  1. 可以将需要执行的多条sql命令保存到以"***.sql"为结尾的文件里

  2. 需要执行时,首先先进入dos命令行

  3. 输入sqlplus 用户名/密码

  4. 登陆成功后,输入命令"start sql文件的绝对路径",执行指定的sql文件

4.修改oracle主页的默认端口

1)运行cmd;

2)输入sqlplus / as sysdba

3)输入exec dbms_xdb.sethttpport(8087);

​ 或者 begin dbms_xdb.sethttpport(8087) end;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值