Oracle超全SQL,细节狂魔( 三 )

8.数据库管理
1、 显示当前用户约束信息SQL> select constraint_name,constraint_type,status,validated from user_constraints where table_name='EMP';2、 显示约束所对应的表列信息SQL> select column_name,position from user_cons_columns where constraint_name='约束名';3、 约束包括:not null、unique、primary key foreign key、check五种SQL> name varchar2(50) not nullSQL> email varchar2(50) uniqueSQL> goodsId char(8) primary keySQL> cusomerId char(8) references customer(customerId)SQL> nums number(10) check (nums between 1 and 30)4、 增加not null约束时需要使用modify选项,而增加其他四种约束使用add选项SQL> alter table goods modify goodsName not null;SQL> alter table customer add constraint cardybuque unique(cardId);--constraint cardybuque即约束及其名字(名字随便取)5、删除约束SQL> alter table 表名 drop constraint 约束名称;在删除主键约束的时候可能有错误,比如说SQL> alter table 表名 drop primary key;--这是因为如果在两张表存在主存关系,那么删除主表的主键约束时,必须带上cascade选项SQL> alter table 表名 drop primary key cascade;9、oracle的函数
1、 字符函数1.1、问题:将所有员工的名字按小写的方式显示 SQL> select lower(ename) from emp; 1.2、问题:将所有员工的名字按大写的方式显示 。SQL> select upper(ename) from emp; 1.3、问题:显示正好为5个字符的员工的信息 。SQL> select * from emp where length(ename)=5; 1.4、问题:显示所有员工姓名的前三个字符 。SQL> select substr(ename,1,3) from emp; 1.5、问题:以首字母大写,后面小写的方式显示所有员工的姓名 。SQL>select upper(substr(ename,1,1))||lower(substr(ename,2,length(ename)-1))from emp; 1.6、问题:显示所有员工的姓名,用“我是老虎”替换所有“A” SQL> select replace(ename,'A', '我是老虎') from emp; 2、数学函数2.1、问题:显示在一个月为30天的情况下,所有员工的日薪金,忽略余数 。SQL> select trunc(sal/30), ename from emp; or SQL> select floor(sal/30), ename from emp;2.2、在做oracle测试的时候,可以使用dual表 SQL> select mod(10,2) from dual;结果是0 SQL> select mod(10,3) from dual;结果是1 2.3、其它的数学函数abs(n): 返回数字n的绝对值 acos(n): 返回数字的反余弦值 exp(n): 返回e的n次幂 power(m,n): 返回m的n次幂 3、日期函数默认情况下日期格式是dd-mon-yy 即12-7月-783.1、问题:查找已经入职8个月多的员工 SQL> select * from emp where sysdate>=add_months(hiredate,8); //sysdate: 该函数返回系统时间//add_months(d,n):时间点d再加上n个月3.2、问题:对于每个员工,显示其加入公司的天数 。SQL> select floor(sysdate-hiredate) "入职天数",ename from emp; or SQL> select trunc(sysdate-hiredate) "入职天数",ename from emp; 3.3、问题:找出各月倒数第3天受雇的所有员工 。SQL> select hiredate,ename from emp where last_day(hiredate)-2=hiredate; // last_day(d):返回指定日期所在月份的最后一天1、 转换函数 5.1、问题:日期是否可以显示 时/分/秒SQL> select ename, to_char(hiredate,’yyyy-mm-dd hh24:mi:ss’) from emp;yy:两位数字的年份 2004-->04 yyyy:四位数字的年份2004年 mm:两位数字的月份 8月-->08 dd:两位数字的天 30号-->30 hh24: 8点-->20 hh12:8点-->08 mi、ss-->显示分钟秒 5.2、问题:显示薪水的时候,把本地货币单位加在前面SQL>select ename, to_char(hiredate, 'yyyy-mm-dd hh24:mi:ss'), to_char(sal,'L99999.99') from emp; 5.3、问题:显示1980年入职的所有员工 SQL> select * from emp where to_char(hiredate, 'yyyy')=1980; 5.4、问题:显示所有12月份入职的员工 SQL> select * from emp where to_char(hiredate, 'mm')=12; 5.5、to_date //函数to_date用于将字符串转换成date类型的数据 SQL>insert into emp values(9998, to_date('1988-12- 12', 'yyyy-mm-dd')); 6、系统函数//sys_context('USERENV','lanuage')-- USERENV是固定的,不能改的,lanuage可以换成其它1)terminal:当前会话客户所对应的终端的标示符(本地客户端的计算机名称)2)lanuage: 语言 3)db_name: 当前数据库名称 4)nls_date_format: 当前会话客户所对应的日期格式 5)current_schema: 当前会话客户所对应的默认方案名 6)host: 返回数据库所在主机的名称 (本地客户端的工作组/计算机名称)注:返回oracle服务器的IP地址及服务器名称SQL>select utl_inaddr.get_host_address,utl_inaddr.get_host_name from dual;觉得写得好的小伙伴给个点赞+关注啦,谢谢~
如果有写得不正确的地方,麻烦指出,感激不尽 。
同时非常期待小伙伴们能够关注,后面慢慢推出更好的干货~嘻嘻


推荐阅读