关系型数据库——oracle和Mysql的区别

oracle:

我们可以创建多个数据库,每一个数据库在oracle里称为一个实例。这个实例有个唯一的名称叫sid。

在实际项目中,一台服务器一般只有一个实例,多实例需要进行数据库的集群配置,需要oracle公司的专业人员完成。

一个表空间相当于mysql的一个数据库的概念,oracle是分配表空间,而mysql是新建数据库。

mysql是在数据库里建表插入数据,oracle是在表空间里建表插入数据,

oracle的用户是在实例下建立的。不同实例中可以建相同名字的用户。

oracle是由用户和表空间对数据进行管理和存放的,但是表不是由表空间去查询的,而是由用户去查的。

oracle的sql:

1.列拼接

select concat(concat(concat(concat(concat('编号是:',empno),'的雇员, 姓名是:'),ename),',工作是:'),job) from emp;

结果:

简单方法:

select '编号是:' || empno || '的雇员, 姓名是:' || ename || ',工作是:' || job from emp;

结果:

2.计算年薪(并去重)

使用nvl(v1,v2)处理空值,v1为空返回V2,不为空返回v1
select ename,sal,comm,sal*12+nvl(comm,0) from emp;

结果:

也可以使用decode
select ename,sal,comm,sal*12+decode(comm,null,0,comm) from emp;

decode(字段或字段的运算,值1,值2,值3)

       这个函数运行的结果是,当字段或字段的运算的值等于值1时,该函数返回值2,否则返回值3

3.查询入职日期在1984/4/2到1985/1/1的员工信息

select * from emp where hiredate between to_date('1981/4/2','yyyy/mm/dd') and to_date('1985/1/1','yyyy/mm/dd')

结果:

4.将每个雇员的名字的首字母大写。

SELECT INITCAP(ename) FROM emp;

5.求字符串的长度

SELECT ename,LENGTH(ename) FROM emp;

结果:

6.使用字母“_”替换掉姓名中的所有字母“A”

SELECT REPLACE(ename,'A','_') FROM emp;

6.字符串截取substr(员工前三位)——第一各参数为要截取名字的列,第二个参数为开始点,开始列可以指定0或者1都一样。

SELECT ename,SUBSTR(ename,1,3) FROM emp;
SELECT ename,SUBSTR(ename,0,3) FROM emp;
SELECT ename,SUBSTR(ename,-2,1) FROM emp;

7.去除两遍边空格


SELECT ename,trim(ename) FROM emp;

8.保留小数的位数(舍弃内容函数)

select trunc(953.6286,2) from dual;--953.62

9.四舍五入

select round(953.6286,2) from dual; --953.63

10.两个日期的天差数(求出每个雇员到尽头为止的雇佣天数)

SELECT ename,hiredate,SYSDATE-hiredate FROM emp;
select trunc(sysdate-a.hiredate) from emp a;

11.本月的最后一天日期

SELECT LAST_DAY(SYSDATE) FROM dual;

12.两个日期间的月份差(month_between)

SELECT ename,hiredate,TRUNC(MONTHS_BETWEEN(SYSDATE,hiredate)) FROM emp;

结果:

13.求出4个月之后的日期

SELECT ADD_MONTHS(SYSDATE,4) FROM dual;

14.日期变字符串

select to_char(sysdate,'yyyy-mm-dd') from dual;
select to_char(sysdate,'yyyy-mm-dd hh:mi:ss') from dual;
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
select to_char(sysdate,'yyyy') from dual;
select to_char(sysdate,'mm') from dual;

15.字符串转日期

SELECT TO_DATE('2017-09-07','yyyy-mm-dd') FROM dual;
SELECT TO_DATE('2017-09-07 11:33:22','yyyy-mm-dd hh:mi:ss') FROM dual;

16.内连接和外链接的区别

内连接与表前后关系没有关系,内连接必须两边同时满足条件才能查询出来

存在的问题:例如部门表和员工表 联合查询,没有员工的部门将会丢失。

外链接:解决内连接的问题

17.子查询:

子查询可以放在select后面、where后面、from后面、in里面、

18.exist

Select * from dept where exists (select * from emp where emp.deptno = dept.deptno)

执行过程:

1、先执行外查询得到结果集。

2、取出结果集的第一行数据

3、将数据带入子查询执行

4、如果子查询有返回结果则外查询的该行数据有效,

如果子查询没有返回结果则外查询的该行放弃显示

5.取下一条继续执行第三部

结论:外边每一行的数据去子查询里找是否存在,里外一定要有关联关系。

19.查询员工前四条

Select rownum,emp.* from emp where rownum<5

20.提取出6到10条记录

select * from (Select rownum rm, t.* from (select * from emp order by sal desc) t) where rm>5 and rm<11

21.授权用户

grant 权限 to 用户
进入system用户给it用户权限 
grant connect to it
grant dba to it

22.事务隔离级别

oracle支持后三种隔离级别,默认是read commited

猜你喜欢

转载自blog.csdn.net/weixin_41933719/article/details/84941634